From 4e1f553207ffd5fcab19706fa6252d399a24378f Mon Sep 17 00:00:00 2001 From: Wim Brand Date: Mon, 11 Jan 2021 21:43:04 +0100 Subject: [PATCH] Finish patreon integration --- res/include/md/subscribe.md | 83 +++----- .../script/dependencies/UploadManager.js | 20 +- res/include/style/layout.css | 3 +- res/static/img/misc/clock.gif | Bin 0 -> 40536 bytes res/template/account/user_home.html | 28 ++- res/template/fragments/form.html | 2 +- res/template/home.html | 185 +++++++++--------- webcontroller/patreon.go | 89 +++++++++ webcontroller/user_settings.go | 80 -------- webcontroller/user_style.go | 2 +- 10 files changed, 241 insertions(+), 251 deletions(-) create mode 100644 res/static/img/misc/clock.gif create mode 100644 webcontroller/patreon.go diff --git a/res/include/md/subscribe.md b/res/include/md/subscribe.md index 4989538..6bb7c17 100644 --- a/res/include/md/subscribe.md +++ b/res/include/md/subscribe.md @@ -6,6 +6,36 @@ ✅ You are logged in to your pixeldrain account. Continue to the next step. +## Join a support tier in Patreon + +
+ {{$plan := .URLQuery.Get "plan"}} + {{if eq $plan "t5"}} + + Order plan 'Resolve' + + {{else if eq $plan "t2"}} + + Order plan 'Persistence' + + {{else if eq $plan "t3"}} + + Order plan 'Tenacity' + + {{else if eq $plan "t4"}} + + Order plan 'Eternity' + + {{else}} + + Order Pixeldrain Pro Plan + + {{end}} +
+ +After ordering you will receive an e-mail on your Patreon e-mail address with a +link to activate your subscription. + {{else}} ❌ You are not logged into a pixeldrain account. If you do not have an account @@ -13,56 +43,3 @@ yet you need to register one. You can do so with our [registration form](/register). If you already have an account you can [log in here](/login). {{end}} - -## Verify your e-mail address - -{{if eq .User.Email ""}} - -❌ Your e-mail address is not yet verified. You can change your e-mail address on -the [user settings page](/user/settings). After submitting your e-mail address -you will receive a verification link in your inbox. Click the verification link -to verify your e-mail address. - -{{else}} - -✅ Your e-mail address is verified. Continue to the next step. - -{{end}} - -## Join a support tier in Patreon - -Make sure your Patreon account uses the same e-mail address as your pixeldrain -account. {{if .Authenticated}}(Your e-mail address: {{.User.Email}}){{end}} - -{{$plan := .URLQuery.Get "plan"}} -{{if eq $plan "t1"}} - -Order plan 'I'm doing my part!' - -{{else if eq $plan "t5"}} - -Order plan 'Resolve' - -{{else if eq $plan "t2"}} - -Order plan 'Persistence' - -{{else if eq $plan "t3"}} - -Order plan 'Tenacity' - -{{else if eq $plan "t4"}} - -Order plan 'Eternity' - -{{else}} -
- -See our subscription plans on Patreon - -
-{{end}} - -After ordering you will receive an e-mail with a link to activate your -subscription. The subscription will be linked to the pixeldrain account you're -currently logged into. diff --git a/res/include/script/dependencies/UploadManager.js b/res/include/script/dependencies/UploadManager.js index 92ca40b..4c2d8be 100644 --- a/res/include/script/dependencies/UploadManager.js +++ b/res/include/script/dependencies/UploadManager.js @@ -34,14 +34,14 @@ function UploadManager(uploadEndpoint, uploadsFinished) { this.jobCounter = 0; } -UploadManager.prototype.finishedUploads = function() { +UploadManager.prototype.finishedUploads = function () { this.uploadLog.sort((a, b) => { return a.jobID - b.jobID; }) return this.uploadLog; } -UploadManager.prototype.addFile = function( +UploadManager.prototype.addFile = function ( file, // Blob name, // string onProgress, // func (progress: number) @@ -67,7 +67,7 @@ UploadManager.prototype.addFile = function( } } -UploadManager.prototype.startUpload = function() { +UploadManager.prototype.startUpload = function () { if (this.uploadQueue.length === 0) { return; // Nothing to upload } @@ -78,13 +78,13 @@ UploadManager.prototype.startUpload = function() { } } -UploadManager.prototype.finishUpload = function() { +UploadManager.prototype.finishUpload = function () { this.activeWorkers--; if ( this.uploadQueue.length === 0 && this.activeWorkers === 0 && - typeof(this.uploadsFinished) === "function" + typeof (this.uploadsFinished) === "function" ) { this.uploadsFinished(); return; @@ -94,7 +94,7 @@ UploadManager.prototype.finishUpload = function() { this.startUpload(); } -UploadManager.prototype.uploadThread = function() { +UploadManager.prototype.uploadThread = function () { let job = this.uploadQueue.shift(); // Get the first element of the array console.debug("Starting upload of " + job.name); @@ -107,7 +107,7 @@ UploadManager.prototype.uploadThread = function() { // Report progress updates back to the caller xhr.upload.addEventListener("progress", evt => { - if (evt.lengthComputable && typeof(job.onProgress) === "function") { + if (evt.lengthComputable && typeof (job.onProgress) === "function") { job.onProgress(evt.loaded / evt.total); } }); @@ -128,7 +128,7 @@ UploadManager.prototype.uploadThread = function() { fileName: job.name }); - if (typeof(job.onFinished) === "function") { + if (typeof (job.onFinished) === "function") { job.onFinished(resp.id); } @@ -138,7 +138,7 @@ UploadManager.prototype.uploadThread = function() { // Request failed console.log("Upload error. status: " + xhr.status + " response: " + xhr.response); let resp = JSON.parse(xhr.response); - if (job.tries === 3) { // Upload failed + if (resp.value == "file_too_large" || job.tries === 3) { // Upload failed job.onFailure(resp.value, resp.message); } else { // Try again job.tries++; @@ -150,7 +150,7 @@ UploadManager.prototype.uploadThread = function() { } else { // Request did not arrive if (job.tries === 3) { // Upload failed - if (typeof(job.onFailure) === "function") { + if (typeof (job.onFailure) === "function") { job.onFailure(xhr.responseText, xhr.responseText); } } else { // Try again diff --git a/res/include/style/layout.css b/res/include/style/layout.css index 8993502..e4b1853 100644 --- a/res/include/style/layout.css +++ b/res/include/style/layout.css @@ -346,7 +346,7 @@ pre { .file_button{ position: relative; box-sizing: border-box; - width: 300px; + width: 400px; max-width: 90%; height: 3.6em; margin: 10px; @@ -432,6 +432,7 @@ select { overflow: hidden; font-size: 1em; /* Sometimes user-agents have different font sizes for buttons and links */ text-decoration: none; + text-shadow: none; color: #bfbfbf; /* Fallback */ color: var(--input_text_color); outline: 0; diff --git a/res/static/img/misc/clock.gif b/res/static/img/misc/clock.gif new file mode 100644 index 0000000000000000000000000000000000000000..0f021271cd55fbe5393f3b6c8d53563c9ff8c685 GIT binary patch literal 40536 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: {{.User.Username}}
  • E-mail address: {{.User.Email}}
  • - {{if eq .User.Subscription.Name ""}} - Supporter status: Not a pixeldrain supporter
    - Learn how to support pixeldrain. - {{else}} - Supporter level {{.User.Subscription.Name}} -
      -
    • Ads when viewing files: {{if .User.Subscription.DisableAdDisplay}}No{{else}}Yes{{end}}
    • -
    • Ads on your uploaded files: {{if .User.Subscription.DisableAdsOnFiles}}No{{else}}Yes{{end}}
    • - {{if gt .User.Subscription.FileExpiryDays 0}} -
    • Files expire after {{.User.Subscription.FileExpiryDays}} days
    • - {{else}} -
    • Files never expire
    • - {{end}} -
    • Direct linking bandwidth: {{formatData .User.Subscription.DirectLinkingBandwidth}}
    • -
    + Supporter level: {{.User.Subscription.Name}} + {{if ne .User.Subscription.ID ""}} + (Manage subscription) {{end}} +
      +
    • Ads when viewing files: {{if .User.Subscription.DisableAdDisplay}}No{{else}}Yes{{end}}
    • +
    • Ads on your uploaded files: {{if .User.Subscription.DisableAdsOnFiles}}No{{else}}Yes{{end}}
    • + {{if gt .User.Subscription.FileExpiryDays 0}} +
    • Files expire after {{.User.Subscription.FileExpiryDays}} days
    • + {{else}} +
    • Files never expire
    • + {{end}} +
    • File size limit: {{formatData .User.Subscription.FileSizeLimit}}
    • +
  • Change account settings diff --git a/res/template/fragments/form.html b/res/template/fragments/form.html index 7c89ce5..6d7b674 100644 --- a/res/template/fragments/form.html +++ b/res/template/fragments/form.html @@ -60,7 +60,7 @@
    {{ end }} {{else if eq $field.Type "description"}} -

    {{$field.DefaultValue}}

    + {{$field.DefaultValue}} {{end}} {{end}} diff --git a/res/template/home.html b/res/template/home.html index e682ff0..073a77d 100644 --- a/res/template/home.html +++ b/res/template/home.html @@ -44,7 +44,7 @@ .instruction_text { margin: 0.1em; font-size: 1.5em; - display: inline-block; + display: inline; box-sizing: border-box; vertical-align: middle; } @@ -57,20 +57,31 @@ margin: 5px 15px; } + .table_container { + width: 100%; + overflow-x: auto; + overflow-y: hidden; + } .feat_table { display: flex; flex-direction: column; + min-width: 400px; } .feat_table > div { display: flex; flex-direction: row; } - .feat_table > div > div:first-child { max-width: 14em; } + .feat_table > div > div:first-child { + flex: 0 0 20%; + max-width: 20%; + } .feat_table > div > div { - flex: 1 0 0; + flex: 1 1 0; margin: 0.2em; padding: 0.5em; text-align: center; + word-wrap: break-word; + hyphens: auto; } .feat_table > div > .feat_label { border-top-left-radius: 0.5em; @@ -97,23 +108,10 @@ font-weight: bold; } - @media (max-width: 800px) { - .feat_table > div { - flex-direction: column; - margin: 0.2em; - border-radius: 6px; - } - .feat_table > div > div { - margin: 0; - border-radius: 0; - } - } - @media (min-width: 800px) { - .feat_table > div > div.round_tl { border-top-left-radius: 0.5em; } - .feat_table > div > div.round_tr { border-top-right-radius: 0.5em; } - .feat_table > div > div.round_br { border-bottom-right-radius: 0.5em; } - .feat_table > div > div.round_bl { border-bottom-left-radius: 0.5em; } - } + .feat_table > div > div.round_tl { border-top-left-radius: 0.5em; } + .feat_table > div > div.round_tr { border-top-right-radius: 0.5em; } + .feat_table > div > div.round_br { border-bottom-right-radius: 0.5em; } + .feat_table > div > div.round_bl { border-bottom-left-radius: 0.5em; } {{template `modal.css`}} @@ -126,7 +124,7 @@ Header image
    -
    +
    1 Select files to upload @@ -185,7 +183,7 @@ {{template `tumblr.svg` .}}
    Tumblr
    -
    +

    @@ -193,44 +191,45 @@
    +
    -
    -

    What is pixeldrain?

    -

    - Pixeldrain is a file sharing website built for speed and - ease of use. Pixeldrain does not cost any money, though - donations are appreciated. See how you can support - pixeldrain below. -

    -

    - Files can be uploaded by clicking the big green upload - button, or by dragging them onto this page from your file - manager. You can not upload directories at this time, only - files. The maximum file size you can upload is 10 GB. -

    -

    - You can also create lists, which are a collection of files. - Like a photo album, a music record or a video compilation. - To do this you need to upload a bunch of files at once. The - files will be saved in the order you uploaded them. When all - files have finished uploading you click the "Create list - with uploaded files" button and you will be asked to enter a - name for your list. After picking a name the list will be - created and opened in a new window. If your browser blocks - the window you can also find a link to the list at the - bottom of your uploaded files. -

    -

    - For more information about pixeldrain see the - about page. -

    +

    What is pixeldrain?

    +
    +

    + Pixeldrain is a file sharing website built for speed and + ease of use. Pixeldrain does not cost any money, though + donations are appreciated. See how you can support + pixeldrain below. +

    +

    + Files can be uploaded by clicking the big green upload + button, or by dragging them onto this page from your file + manager. +

    +

    + You can also create lists, which are a collection of files. + Like a photo album, a music record or a video compilation. + To do this you need to upload a bunch of files at once. The + files will be saved in the order you uploaded them. When all + files have finished uploading you click the "Create list + with uploaded files" button and you will be asked to enter a + name for your list. After picking a name the list will be + created and opened in a new window. If your browser blocks + the window you can also find a link to the list at the + bottom of your uploaded files. +

    +

    + For more information about pixeldrain see the + about page. +

    -

    Pro

    -

    - By purchasing a subscription you support pixeldrain on its - mission to make content sharing easier, safer and faster for - everyone. -

    +

    Getting more out of pixeldrain

    +

    + By purchasing a subscription you support pixeldrain on its + mission to make content sharing easier, safer and faster for + everyone. +

    +
    @@ -248,12 +247,12 @@
    90 days after the last time it is viewed
    -
    Advertisements
    +
    Adver­tise­ments
    Pop-up or a banner ad on the file viewer page
    No ads on files - you share, or when viewing files from other - users + you share. No ads when viewing files uploaded by + other users
    @@ -280,27 +279,36 @@
    Free
    - + {{if ne .User.Subscription.ID ""}} + You have this plan
    + Thank you for supporting pixeldrain! + {{else}} + Only € 2 per month! (Excluding tax)
    - Billed annually. We accept Stripe and PayPal + Subscription managed by Patreon + {{end}}
    -
    -

    Premium

    -

    - Premium is more catered toward file storage and content - delivery. This plan enables the Buckets feature which - provides a more structured way to manage your files on - pixeldrain. Buckets allow direct linking to files without - running into rate limiting. -

    -

    - When you choose for Premium you will also get all the - benefits of the Pro subscription. -

    -
    +
    +

    Premium

    +
    + Pixeldrain Premium is still in development and not generally + available yet. Stay tuned. +
    +

    + Premium is more catered toward content delivery. This plan + enables the Buckets feature which provides a more structured way + to manage your files on pixeldrain. Buckets allow direct linking + to files without running into rate limiting. +

    +

    + When you choose for Premium you will also get all the benefits + of the Pro subscription. A base rate of €1 per month will be + billed regardless of your usage. +

    +