From 77fb1d63635bb61b26296b742d2d57ea40566884 Mon Sep 17 00:00:00 2001 From: clsr Date: Thu, 16 Jun 2016 02:18:59 +0200 Subject: Initial commit; forked from pantsu/pomf --- .gitignore | 4 + LICENSE | 22 +++ pages/faq.html | 48 ++++++ pages/index.html | 49 ++++++ static/bg.png | Bin 0 -> 19452 bytes static/favicon.ico | Bin 0 -> 4119 bytes static/grill/10.png | Bin 0 -> 32305 bytes static/grill/2.png | Bin 0 -> 74594 bytes static/grill/3.png | Bin 0 -> 60684 bytes static/grill/4.png | Bin 0 -> 13529 bytes static/grill/5.png | Bin 0 -> 22713 bytes static/grill/6.png | Bin 0 -> 29307 bytes static/grill/7.png | Bin 0 -> 29732 bytes static/grill/8.png | Bin 0 -> 50050 bytes static/grill/9.png | Bin 0 -> 32272 bytes static/grill/bg.png | Bin 0 -> 19452 bytes static/pomf.css | 417 ++++++++++++++++++++++++++++++++++++++++++++++++++++ static/pomf.js | 176 ++++++++++++++++++++++ 18 files changed, 716 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 pages/faq.html create mode 100644 pages/index.html create mode 100644 static/bg.png create mode 100644 static/favicon.ico create mode 100644 static/grill/10.png create mode 100644 static/grill/2.png create mode 100644 static/grill/3.png create mode 100644 static/grill/4.png create mode 100644 static/grill/5.png create mode 100644 static/grill/6.png create mode 100644 static/grill/7.png create mode 100644 static/grill/8.png create mode 100644 static/grill/9.png create mode 100644 static/grill/bg.png create mode 100644 static/pomf.css create mode 100644 static/pomf.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bdb1eb9 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +*.swp +/gomf +/*.go +/*.txt diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6cecb6c --- /dev/null +++ b/LICENSE @@ -0,0 +1,22 @@ +Copyright (c) 2013, 2014, 2015 Eric Johansson +Copyright (c) 2013, 2014 Peter Lejeck +Copyright (c) 2015 cenci0 +Copyright (c) 2015, 2016 the Pantsu.cat developers +Copyright (c) 2016 clsr + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/pages/faq.html b/pages/faq.html new file mode 100644 index 0000000..601f1d6 --- /dev/null +++ b/pages/faq.html @@ -0,0 +1,48 @@ + + + + + + {{ .SiteName }} · FAQ + + + + +
+
+
+

FAQ

+
+

What is {{ .SiteName }}?

+

{{ .SiteName }} is a simple to use free file hosting service. It lets you share your photos, documents, music, videos and more with others online.

+

What content is allowed?

+

{{ .SiteName }} welcomes uploading any content, as long as the content is legal and you have the legal right to make the content available on our service.

+

As an exception to this policy to prevent abuse, we do not allow malware on our service. Any malware that could be used to infect other computers may be removed from our service at our discretion.

+ +

Can you remove my copyrighted content?

+

Please submit your copyright takedown notice to {{ .Abuse }}. We will handle your notice within 24 hours and disable access to infringing content after receiving a notice compliant with the Copyright Act 1968 (Australia).

+

Can you remove content that is defaming me or otherwise infringing my non-copyright rights?

+

Pantsu.cat respects takedowns for other content when accompanied with a certified court order. If you are unable to obtain the order, a preliminary injuction or court order is typically also sufficient. Please forward the notice to {{ .Abuse }}.

+

Can you remove illegal content?

+

Please contact the appropriate law enforcement agency if you notice illegal content hosted on {{ .SiteName }}. We have not been trained or qualified to investigate and fight crimes and enforce the law, so it's not appropriate to send accusations of illegal activity to us. You must contact the appropriate law enforcement office. They may then contact us if appropriate.

+

If you are a law enforcement official and you need our assistance, please contact {{ .Abuse }}. If you are a law enforcement official from another country, we may voluntarily cooperate if the crime you are investigating would also be illegal here.

+

I have a question...

+

Send us an email at {{ .Contact }} and let's talk!

+
+ + + +
+ + diff --git a/pages/index.html b/pages/index.html new file mode 100644 index 0000000..4509570 --- /dev/null +++ b/pages/index.html @@ -0,0 +1,49 @@ + + + + + + {{ .SiteName }} · Kawaii File Hosting + + + + + +
+
+

Ohayou!

+

Max upload size is {{ .MaxSize }}, read the FAQ

+ +
+ + + + +
+ + {{ with .Result }} +
    + {{ range .Files }} +
  • + {{ .Name }} + {{ .Url }} +
  • + {{ end }} +
+ {{ end }} + +
+ + +
+ + diff --git a/static/bg.png b/static/bg.png new file mode 100644 index 0000000..2f4febc Binary files /dev/null and b/static/bg.png differ diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000..b115e11 Binary files /dev/null and b/static/favicon.ico differ diff --git a/static/grill/10.png b/static/grill/10.png new file mode 100644 index 0000000..226f062 Binary files /dev/null and b/static/grill/10.png differ diff --git a/static/grill/2.png b/static/grill/2.png new file mode 100644 index 0000000..acb0a0b Binary files /dev/null and b/static/grill/2.png differ diff --git a/static/grill/3.png b/static/grill/3.png new file mode 100644 index 0000000..ca9eca5 Binary files /dev/null and b/static/grill/3.png differ diff --git a/static/grill/4.png b/static/grill/4.png new file mode 100644 index 0000000..177db67 Binary files /dev/null and b/static/grill/4.png differ diff --git a/static/grill/5.png b/static/grill/5.png new file mode 100644 index 0000000..b8dc3fe Binary files /dev/null and b/static/grill/5.png differ diff --git a/static/grill/6.png b/static/grill/6.png new file mode 100644 index 0000000..080335a Binary files /dev/null and b/static/grill/6.png differ diff --git a/static/grill/7.png b/static/grill/7.png new file mode 100644 index 0000000..60f7586 Binary files /dev/null and b/static/grill/7.png differ diff --git a/static/grill/8.png b/static/grill/8.png new file mode 100644 index 0000000..cd2415e Binary files /dev/null and b/static/grill/8.png differ diff --git a/static/grill/9.png b/static/grill/9.png new file mode 100644 index 0000000..68b2018 Binary files /dev/null and b/static/grill/9.png differ diff --git a/static/grill/bg.png b/static/grill/bg.png new file mode 100644 index 0000000..2f4febc Binary files /dev/null and b/static/grill/bg.png differ diff --git a/static/pomf.css b/static/pomf.css new file mode 100644 index 0000000..7e1816a --- /dev/null +++ b/static/pomf.css @@ -0,0 +1,417 @@ +/** + * Copyright (c) 2011, 2012, 2013 Twitter, Inc. + * Copyright (c) 2013, 2014 Peter Lejeck + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +/** + * USE BORDER BOX + */ +*, +*:before, +*:after { + box-sizing: border-box; +} + +/** + * PAGE LAYOUT + */ +body { + background-attachment: fixed, fixed; + background-color: #F7F7F7; + background-image: url('/grill.php'), url('/static/bg.png'); + background-position: 85% 100%, top left; + background-repeat: no-repeat, repeat; + color: #333; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + height: 100%; + line-height: 20px; + margin: 0; + padding-top: 20px; + padding-bottom: 40px; +} +.container { + margin: 0 auto; + max-width: 700px; +} + +/** + * ELEMENTS + */ +/* paragraphs */ +p { + margin: 0 0 10px; +} +/* images */ +input[type=image], img { + vertical-align: middle; +} +/* links */ +a { + color: #0078B4; + text-decoration: none; + transition: color 0.25s; +} +a:hover, +a:focus, +a:active { + color: #005580; +} +a:focus { + outline: thin dotted #333; +} + +/** + * JUMBOTRON + */ +.jumbotron { + margin: 60px 0; + text-align: center; + transition: width 0.5s, height 0.5s, margin 0.5s, padding 0.5s; +} +.jumbotron h1 { + color: inherit; + font-family: inherit; + font-size: 72px; + font-weight: bold; + line-height: 1; + margin: 10px 0; + cursor: default; + text-rendering: optimizelegibility; +} +.jumbotron .lead { + font-size: 21px; + font-weight: 200; + line-height: 30px; + margin-bottom: 20px; + transition: font-size 0.5s; +} +.jumbotron .btn { + background: rgba(202, 230, 190, 0.75); + border: 1px solid #B7D1A0; + border-radius: 4px; + color: #468847; + cursor: pointer; + display: inline-block; + font-size: 24px; + padding: 28px 48px; + text-shadow: 0 1px rgba(255, 255, 255, 0.5); + transition: background-color 0.25s, width 0.5s, height 0.5s; +} +.jumbotron .btn:hover, +.jumbotron .btn:active, +.jumbotron .btn:focus, +.jumbotron .btn.drop { + background-color: rgb(188, 228, 170); + text-decoration: none; +} +#no-file-api { + display: none; +} + +/** + * BOXES + */ +.alert { + background-color: #FCF8E3; + border: 1px solid #FBEED5; + border-radius: 4px; + margin-bottom: 20px; + padding: 8px 14px; + text-shadow: 0px 1px rgba(255, 255, 255, 0.5); + transition: width 0.5s, margin 0.5s, padding 0.5s, background-color 0.5s; +} +.alert-error { + background-color: #F2DEDE; + border-color: #EED3D7; + color: #AA4342; +} +.alert-info { + background-color: #D9EDF7; + border-color: #BCE8F1; + color: #167196; +} + +/** + * DONATION BUTTONS + */ +span.donate-btns { + display: block; + text-align: center; + margin: 11px 0 3px; +} +a.donate-btn { + height: 26px; + display: inline-block; + margin: 2px 5px; + background: hsl(0, 0%, 95%); + line-height: 16px; + padding: 3px 8px 3px 24px; + border-radius: 3px; + color: hsl(0, 0%, 25%); + border: 1px solid hsl(0, 0%, 85%); + transition: all .2s; +} +a.donate-btn:hover { + color: #000; + border: 1px solid hsl(0, 0%, 70%); + background-color: hsl(0, 0%, 80%); +} +.icon { + display: block; + height: 16px; + width: 16px; + float: left; + margin-left: -20px; + margin-top: 1px; +} +.icon-paypal { + background-image: url('img/paypal.png'); +} +.icon-bitcoin { + background-image: url('img/bitcoin.png'); +} +.icon-flattr { + background-image: url('img/flattr.png'); +} + +/** + * NAVIGATION LINKS + */ +nav > ul, +nav a { + color: #33799B; + list-style: none; + margin: 0; + padding: 0; + text-align: center; +} +nav > ul > li { + display: inline-block; + margin: 0; + padding: 0; + cursor: default; +} +nav > ul > li:after { + content: "|"; + margin: 0 8px; + opacity: 0.3; +} +nav > ul > li:last-child:after { + content: ""; + margin: 0; +} + +/** + * UPLOAD FORM + */ +#upload-input { + display: none; +} + +/** + * UPLOAD FILE LIST + */ +#upload-filelist { + list-style-type: none; + margin: 20px 50px; + padding: 0; + text-align: left; +} +.error#upload-filelist { + color: #891A18; +} +.error#upload-filelist .progress-percent { + color: #B94A48; +} +.error#upload-filelist .file-progress { + display: none; +} +#upload-filelist > li { + margin-top: 5px; + overflow: hidden; +} +#upload-filelist > li.total { + border-top: 1px solid rgba(0, 0, 0, 0.05); + font-weight: bold; + padding-top: 5px; +} +.file-name { + float: left; + overflow: hidden; + max-width: 70%; + text-overflow: ellipsis; + white-space: nowrap; +} +.file-progress, +.file-url { + display: inline-block; + float: right; + font-size: 0.9em; + margin-left: 8px; + vertical-align: middle; +} +.file-url a { + color: #5C5C5C; +} +.file-url a:hover { + color: #1C1C1C; +} +.progress-percent { + float: right; +} + +progress[value] { + /* Reset the default appearance */ + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + + border: none; + +} + +progress[value]::-webkit-progress-bar { + background-color: #eee; + border-radius: 2ps; + box-shadow: 0 2px 5px rgba(0,0,0,0.25) inset; +} + +/* completed rows */ +.completed .file-progress, +.completed .progress-percent { + display: none; +} +.completed .file-url { + display: block; +} + +/** + * PROGRESS BARS + */ +.progress-outer { + background-color: rgba(255, 255, 255, 0.8); + border: 1px solid white; + border-radius: 4px; + box-shadow: 0 0 0 1px black; + color: transparent; + display: inline-block; + font-size: 0; + float: right; + height: 8px; + margin: 6px 6px 0; + overflow: hidden; + vertical-align: middle; + width: 50px; +} +.progress-inner { + background-color: black; + height: 6px; + margin: 0; + width: 0; +} + +/** + * MEDIA QUERIES + */ +@media only screen and (max-device-width: 320px), only screen and (max-width: 400px) { + body { + padding: 10px 0 0 0; + } + .jumbotron { + margin: 20px 0 30px; + } + .jumbotron .lead { + font-size: 18px; + } + .jumbotron .btn, .alert, #upload-filelist { + border-radius: 0; + border-width: 1px 0; + width: 100%; + margin-left: 0; + margin-right: 0; + padding-left: 20px; + padding-right: 20px; + } + #upload-filelist { + background-color: rgba(255, 255, 255, 0.75); + overflow: hidden; + } + #upload-filelist > li.file { + margin-top: 12px; + margin-bottom: 12px; + } + .file-progress { + width: 70%; + } + .file-name, .file-url { + width: 100%; + max-width: 100%; + } + .file-url a { + text-decoration: underline; + margin-left: 15px; + } + .file-url a:before { + content: "http://"; + } + .alert { + font-size: 13px; + } + .alert-error { + background-color: rgba(248, 223, 223, 0.75); + } + nav { + background-color: rgba(255, 255, 255, 0.75); + border: #FFFFFF; + padding: 10px 0; + } +} + + +/* +The following code is released into public domain. +It is provided "as is", without warranties or conditions of any kind. +Anyone is free to modify, redistribute and do anything with this code. +*/ +/** + * NO-JS/JS UPLOAD FORMS + */ + +#upload-input { + display: inline-block; +} + +#upload-form .btn { + display: none; +} + +.form-js #upload-input { + display: none; +} + +.form-js #upload-btn { + display: inline-block !important; +} + +.form-js input[type=submit] { + display: none; +} diff --git a/static/pomf.js b/static/pomf.js new file mode 100644 index 0000000..dfa047a --- /dev/null +++ b/static/pomf.js @@ -0,0 +1,176 @@ +document.addEventListener('DOMContentLoaded', function() { + /** + * Copyright (c) 2016 Luminarys + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + + function addRow(file) { + var row = document.createElement('li'); + + var name = document.createElement('span'); + name.textContent = file.name; + name.className = 'file-name'; + + var progressIndicator = document.createElement('span'); + progressIndicator.className = 'progress-percent'; + progressIndicator.textContent = '0%'; + + var progressBar = document.createElement('progress'); + progressBar.className = 'file-progress'; + progressBar.setAttribute("max", "100"); + progressBar.setAttribute("value", "0"); + + row.appendChild(name); + row.appendChild(progressBar); + row.appendChild(progressIndicator); + + document.getElementById('upload-filelist').appendChild(row); + return row; + } + + function handleUploadProgress(evt) { + var xhr = evt.target; + var bar = xhr.bar; + var percentIndicator = xhr.percent; + + if (evt.lengthComputable) { + var progressPercent = Math.floor((evt.loaded / evt.total) * 100); + bar.setAttribute("value", progressPercent); + percentIndicator.textContent = progressPercent + '%'; + } + } + + function handleUploadComplete(evt) { + var xhr = evt.target; + var bar = xhr.bar; + var row = xhr.row; + var percentIndicator = xhr.percent; + + percentIndicator.style.visibility = "hidden"; + bar.style.visibility = "hidden"; + row.removeChild(bar); + row.removeChild(percentIndicator); + var respStatus = xhr.status; + + var url = document.createElement('span'); + url.className = 'file-url'; + row.appendChild(url); + + var link = document.createElement('a'); + if (respStatus === 200) { + var response = JSON.parse(xhr.responseText); + if (response.success) { + link.textContent = response.files[0].url.replace(/.*?:\/\//g, ""); + link.href = response.files[0].url; + url.appendChild(link); + } else { + bar.innerHTML = 'Error: ' + response.reason; + } + } else if (respStatus === 413) { + link.textContent = 'File Too big!'; + url.appendChild(link); + } else { + link.textContent = 'Server error!'; + url.appendChild(link); + } + } + + function uploadFile(file, row) { + var bar = row.querySelector('.file-progress'); + var percentIndicator = row.querySelector('.progress-percent'); + var xhr = new XMLHttpRequest(); + xhr.open('POST', '/upload.php?output=json'); + + xhr["row"] = row; + xhr["bar"] = bar; + xhr["percent"] = percentIndicator; + xhr.upload["bar"] = bar; + xhr.upload["percent"] = percentIndicator; + + xhr.addEventListener('load', handleUploadComplete, false); + xhr.upload.onprogress = handleUploadProgress; + + var form = new FormData(); + form.append('files[]', file); + xhr.send(form); + } + + function stopDefaultEvent(evt) { + evt.stopPropagation(); + evt.preventDefault(); + } + + function handleDrag(state, element, evt) { + stopDefaultEvent(evt); + if (state.dragCount == 1) { + element.textContent = "Drop it here~"; + } + state.dragCount += 1; + } + + function handleDragAway(state, element, evt) { + stopDefaultEvent(evt); + state.dragCount -= 1; + if (state.dragCount == 0) { + element.textContent = "Select or drop file(s)"; + } + } + + function handleDragDrop(state, element, evt) { + stopDefaultEvent(evt); + handleDragAway(state, element, evt); + var len = evt.dataTransfer.files.length; + for (var i = 0; i < len; i++) { + var file = evt.dataTransfer.files[i]; + var row = addRow(file); + uploadFile(file, row); + } + } + + function uploadFiles(evt) { + var len = evt.target.files.length; + for (var i = 0; i < len; i++) { + var file = evt.target.files[i]; + var row = addRow(file); + uploadFile(file, row); + } + } + + function selectFiles(target, evt) { + stopDefaultEvent(evt); + target.click(); + } + + var state = { dragCount: 0 }; + var uploadButton = document.getElementById('upload-btn'); + window.addEventListener('dragenter', handleDrag.bind(this, state, uploadButton), false); + window.addEventListener('dragleave', handleDragAway.bind(this, state, uploadButton), false); + window.addEventListener('drop', handleDragAway.bind(this, state, uploadButton), false); + window.addEventListener('dragover', stopDefaultEvent, false); + + var uploadInput = document.getElementById('upload-input'); + uploadInput.addEventListener('change', uploadFiles); + uploadButton.addEventListener('click', selectFiles.bind(this, uploadInput)); + uploadButton.addEventListener('drop', handleDragDrop.bind(this, state, uploadButton), false); + + + // no-js form override + document.getElementById('upload-form').className += ' form-js' +}); -- cgit