jekyll-patreon 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +11 -0
- data/Gemfile +2 -2
- data/LICENSE +675 -0
- data/README.md +115 -0
- data/assets/screenshot-1.png +0 -0
- data/assets/screenshot-2.png +0 -0
- data/assets/screenshot-3.png +0 -0
- data/assets/screenshot-4.png +0 -0
- data/assets/screenshot-5.png +0 -0
- data/assets/screenshot-6.png +0 -0
- data/assets/screenshot-7.png +0 -0
- data/lib/jekyll-patreon.rb +2 -0
- data/lib/jekyll-patreon/_inc/js/patreon.js +4 -5
- data/lib/jekyll-patreon/_inc/translated_button.html +140 -0
- data/lib/jekyll-patreon/generator/defaults.rb +3 -1
- data/lib/jekyll-patreon/generator/patreonGenerator.rb +82 -4
- data/lib/jekyll-patreon/langs/en.yml +8 -0
- data/lib/jekyll-patreon/langs/es.yml +8 -0
- data/lib/jekyll-patreon/parsers/patreonParser.rb +11 -0
- data/lib/jekyll-patreon/patreonLang.rb +8 -0
- data/lib/jekyll-patreon/tags/patreonTag.rb +57 -49
- data/lib/jekyll-patreon/version.rb +1 -1
- metadata +18 -2
data/README.md
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
# jekyll-patreon [![Build Status](https://travis-ci.org/uta-org/jekyll-patreon.svg?branch=master)](https://travis-ci.org/uta-org/jekyll-patreon) [![Gem Version](https://badge.fury.io/rb/jekyll-patreon.svg)](http://badge.fury.io/rb/jekyll-patreon)
|
2
|
+
|
3
|
+
Requires Ruby 2.5+ and Jekyll 3.8+
|
4
|
+
|
5
|
+
> A Jekyll plugins that adds Patreon support in your blog to easily embed a widget with goals
|
6
|
+
|
7
|
+
## Features
|
8
|
+
|
9
|
+
* Supports several designs: default, fancy, minimal, streamlined, reversed, swapped
|
10
|
+
* Supports several colors: red, green, orange, red nostripes, green nostripes, orange nostripes, blue nostripes
|
11
|
+
* Supports i18n (compatible with [jekyll-language-plugin](https://github.com/vwochnik/jekyll-language-plugin))
|
12
|
+
* Supports Markdown on your Patreon goals
|
13
|
+
|
14
|
+
> To see the possible styles && designs navigate to the assets folder where the screenshots are located
|
15
|
+
|
16
|
+
## Installation
|
17
|
+
|
18
|
+
Add this line to your site's Gemfile:
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
gem 'jekyll-patreon'
|
22
|
+
```
|
23
|
+
|
24
|
+
Add this configuration to your _config.yml file:
|
25
|
+
|
26
|
+
```yaml
|
27
|
+
####################
|
28
|
+
# Patreon Settings #
|
29
|
+
####################
|
30
|
+
|
31
|
+
patreon:
|
32
|
+
enabled: true
|
33
|
+
design: 'default' # Supports the following desings: default, fancy, minimal, streamlined, reversed, swapped
|
34
|
+
title: 'Example title'
|
35
|
+
metercolor: 'green' # Supports the following colors: red, green, orange, red nostripes, green nostripes, orange nostripes, blue nostripes
|
36
|
+
toptext: 'Example top text' # Text that appears in before the progress bar (optional)
|
37
|
+
bottomtext: 'Example bottom text' # Text that appears in after the progress bar (optional)
|
38
|
+
showgoaltext: true # Display the goal text?
|
39
|
+
showbutton: true # Display the "Become a patron" button?
|
40
|
+
username: 'Your username here'
|
41
|
+
default_lang: "en" # The default language to use (to avoid writing twice the same text from Patreon)
|
42
|
+
```
|
43
|
+
|
44
|
+
## Usage
|
45
|
+
|
46
|
+
Simply just put the following tag where you need this:
|
47
|
+
|
48
|
+
`{% patreon %}`
|
49
|
+
|
50
|
+
### i18n
|
51
|
+
|
52
|
+
To support languages just use [jekyll-language-plugin](https://github.com/vwochnik/jekyll-language-plugin) configuration. Or if you don't use it, do the following steps.
|
53
|
+
|
54
|
+
First, in your main index.html (or wherever you need the i18n support) declare the following lines:
|
55
|
+
|
56
|
+
```yaml
|
57
|
+
---
|
58
|
+
layout: <layout>
|
59
|
+
language: en
|
60
|
+
---
|
61
|
+
```
|
62
|
+
|
63
|
+
Or if you want to support several languages in the same page:
|
64
|
+
|
65
|
+
```yaml
|
66
|
+
---
|
67
|
+
layout: <layout>
|
68
|
+
languages:
|
69
|
+
- en
|
70
|
+
- es
|
71
|
+
---
|
72
|
+
```
|
73
|
+
|
74
|
+
Then, in "_data/lang/" create one file for each lang.
|
75
|
+
|
76
|
+
> Example: `en.yml` and `es.yml`.
|
77
|
+
|
78
|
+
Then, put the translations of you goals like this:
|
79
|
+
|
80
|
+
```yaml
|
81
|
+
#################
|
82
|
+
# Patreon Goals #
|
83
|
+
#################
|
84
|
+
|
85
|
+
patreon_goal_0: "..."
|
86
|
+
patreon_goal_1: "..."
|
87
|
+
patreon_goal_2: "..."
|
88
|
+
# etc etc...
|
89
|
+
```
|
90
|
+
|
91
|
+
There you will need to create as much translations as the number of goals that your Patreon page have. (**Note:** starting index is 0 (zero))
|
92
|
+
|
93
|
+
## Issues
|
94
|
+
|
95
|
+
Having issues? Just report in [the issue section](https://github.com/uta-org/jekyll-patreon/issues). **Thanks for the feedback!**
|
96
|
+
|
97
|
+
## Contribute
|
98
|
+
|
99
|
+
Fork this repository, make your changes and then issue a pull request. If you find bugs or have new ideas that you do not want to implement yourself, file a bug report.
|
100
|
+
|
101
|
+
## Donate
|
102
|
+
|
103
|
+
Become a patron, by simply clicking on this button (**very appreciated!**):
|
104
|
+
|
105
|
+
[![](https://c5.patreon.com/external/logo/become_a_patron_button.png)](https://www.patreon.com/z3nth10n)
|
106
|
+
|
107
|
+
... Or if you prefer an one-time donation:
|
108
|
+
|
109
|
+
[![](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://paypal.me/z3nth10n)
|
110
|
+
|
111
|
+
## Copyright
|
112
|
+
|
113
|
+
Copyright (c) 2019 z3nth10n (United Teamwork Association).
|
114
|
+
|
115
|
+
License: MIT
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/jekyll-patreon.rb
CHANGED
@@ -9,6 +9,8 @@ require "jekyll-patreon/version"
|
|
9
9
|
# Files needed for the widget generator
|
10
10
|
require "jekyll-patreon/generator/defaults"
|
11
11
|
require "jekyll-patreon/generator/patreonGenerator"
|
12
|
+
# Files needed for parsing
|
13
|
+
require "jekyll-patreon/parsers/patreonParser"
|
12
14
|
# Files needed for displaying the widget
|
13
15
|
require "jekyll-patreon/tags/patreonTag"
|
14
16
|
|
@@ -67,7 +67,8 @@ var patreon = {
|
|
67
67
|
{
|
68
68
|
pledgeSum = Math.floor(this.GetPledgeSum(campaignData));
|
69
69
|
|
70
|
-
|
70
|
+
var payper = campaignData.pay_per_name;
|
71
|
+
$("#patreon_paypername").html("#{per} " + (payper == "month" ? "#{month}" : "#{patrons}"));
|
71
72
|
}
|
72
73
|
|
73
74
|
if (goalData)
|
@@ -75,20 +76,18 @@ var patreon = {
|
|
75
76
|
goalTotal = Math.floor(this.GetGoalTotal(goalData));
|
76
77
|
|
77
78
|
if (patreonShowGoalText)
|
78
|
-
{
|
79
79
|
$("#patreon_goaltext").html(goalData.description);
|
80
|
-
}
|
81
80
|
}
|
82
81
|
|
83
82
|
if (pledgeSum < goalTotal)
|
84
83
|
{
|
85
|
-
$("#patreon_goalmoneytext").html("$" + pledgeSum + " of $" + goalTotal);
|
84
|
+
$("#patreon_goalmoneytext").html("$" + pledgeSum + " #{of} $" + goalTotal);
|
86
85
|
$("#patreon_goalreached").html("");
|
87
86
|
}
|
88
87
|
else
|
89
88
|
{
|
90
89
|
$("#patreon_goalmoneytext").html("$" + goalTotal);
|
91
|
-
$("#patreon_goalreached").html("- reached
|
90
|
+
$("#patreon_goalreached").html("- #{reached}");
|
92
91
|
}
|
93
92
|
},
|
94
93
|
CreateDummyGoal: function(campaignData) {
|
@@ -0,0 +1,140 @@
|
|
1
|
+
<link href="https://c5.patreon.com/external/fonts/gt-america.css" rel="stylesheet" type="text/css">
|
2
|
+
<link href="https://c6.patreon.com/widget.css" rel="stylesheet" type="text/css">
|
3
|
+
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Lato:400,100,100italic,300,300italic,400italic,500,700,700italic,900,900italic">
|
4
|
+
|
5
|
+
<style>
|
6
|
+
._2KV-widgets-shared--patreonWidgetWrapper {
|
7
|
+
-webkit-font-smoothing: antialiased;
|
8
|
+
-moz-osx-font-smoothing: grayscale;
|
9
|
+
text-rendering: optimizeLegibility;
|
10
|
+
}
|
11
|
+
|
12
|
+
.hNJHmD:active {
|
13
|
+
background-color: rgb(229, 72, 49);
|
14
|
+
}
|
15
|
+
|
16
|
+
.hNJHmD:hover {
|
17
|
+
background-color: rgb(231, 81, 59);
|
18
|
+
}
|
19
|
+
|
20
|
+
.hNJHmD {
|
21
|
+
backface-visibility: hidden;
|
22
|
+
background-color: rgb(232, 91, 70);
|
23
|
+
box-sizing: border-box;
|
24
|
+
cursor: pointer;
|
25
|
+
display: inline-block;
|
26
|
+
font-weight: 500;
|
27
|
+
position: relative;
|
28
|
+
pointer-events: unset;
|
29
|
+
text-align: center;
|
30
|
+
text-transform: none;
|
31
|
+
user-select: none;
|
32
|
+
white-space: unset;
|
33
|
+
width: 100%;
|
34
|
+
color: rgb(255, 255, 255) !important;
|
35
|
+
font-size: 0.875rem !important;
|
36
|
+
border-radius: 9999px;
|
37
|
+
border-width: initial;
|
38
|
+
border-style: none;
|
39
|
+
border-color: initial;
|
40
|
+
border-image: initial;
|
41
|
+
padding: 0.5rem 0.75rem;
|
42
|
+
text-decoration: none;
|
43
|
+
transition: all 300ms cubic-bezier(0.19, 1, 0.22, 1) 0s;
|
44
|
+
}
|
45
|
+
|
46
|
+
.bDCJxk {
|
47
|
+
-webkit-box-align: center;
|
48
|
+
align-items: center;
|
49
|
+
box-sizing: border-box;
|
50
|
+
display: flex;
|
51
|
+
-webkit-box-pack: center;
|
52
|
+
justify-content: center;
|
53
|
+
padding-top: 0rem;
|
54
|
+
padding-right: 0rem;
|
55
|
+
padding-bottom: 0rem;
|
56
|
+
padding-left: 0rem;
|
57
|
+
margin-top: 0rem;
|
58
|
+
margin-right: 0rem;
|
59
|
+
margin-bottom: 0rem;
|
60
|
+
margin-left: 0rem;
|
61
|
+
visibility: visible;
|
62
|
+
transition: all 300ms cubic-bezier(0.19, 1, 0.22, 1) 0s;
|
63
|
+
}
|
64
|
+
|
65
|
+
.hnTNrw {
|
66
|
+
align-self: center;
|
67
|
+
-webkit-box-align: center;
|
68
|
+
align-items: center;
|
69
|
+
display: inline-flex;
|
70
|
+
filter: none;
|
71
|
+
cursor: unset;
|
72
|
+
vertical-align: unset;
|
73
|
+
height: unset;
|
74
|
+
width: unset;
|
75
|
+
}
|
76
|
+
|
77
|
+
.gBDeVU {
|
78
|
+
width: 0.75rem;
|
79
|
+
height: 1px;
|
80
|
+
}
|
81
|
+
|
82
|
+
.ZmzLr, .ZmzLr svg {
|
83
|
+
height: 12px;
|
84
|
+
width: 12px;
|
85
|
+
}
|
86
|
+
|
87
|
+
.ZmzLr {
|
88
|
+
display: flex;
|
89
|
+
}
|
90
|
+
|
91
|
+
.ZmzLr svg {
|
92
|
+
align-self: center;
|
93
|
+
fill: transparent;
|
94
|
+
stroke-width: 1.2px;
|
95
|
+
}
|
96
|
+
|
97
|
+
.ZmzLr svg * {
|
98
|
+
vector-effect: non-scaling-stroke;
|
99
|
+
transition: all 300ms cubic-bezier(0.19, 1, 0.22, 1) 0s;
|
100
|
+
}
|
101
|
+
|
102
|
+
.ZmzLr svg [data-color="1"], .ZmzLr svg [data-fill="1"] {
|
103
|
+
fill: rgb(255, 255, 255);
|
104
|
+
}
|
105
|
+
|
106
|
+
.ZmzLr svg [data-color="2"], .ZmzLr svg [data-fill="2"] {
|
107
|
+
fill: rgb(5, 45, 73);
|
108
|
+
}
|
109
|
+
|
110
|
+
.button-text {
|
111
|
+
font-family: 'America', 'GT America', 'Lato', 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;
|
112
|
+
font-size: 16px;
|
113
|
+
color: white;
|
114
|
+
}
|
115
|
+
</style>
|
116
|
+
|
117
|
+
<div>
|
118
|
+
<div class="_2KV-widgets-shared--patreonWidgetWrapper">
|
119
|
+
<div class="">
|
120
|
+
<div class="s16n3jhk-0 cTHxSM">
|
121
|
+
<a color="primary" class="sc-hMqMXs hNJHmD" tabindex="0" type="button" href="" role="button" target="_blank">
|
122
|
+
<div display="flex" class="sc-cSHVUG bDCJxk">
|
123
|
+
<div class="sc-ckVGcZ hnTNrw"><span class="sc-dxgOiQ ZmzLr"><svg viewBox="0 0 569 546" xmlns="http://www.w3.org/2000/svg"><g><circle data-fill="1" id="Oval" cx="362.589996" cy="204.589996" r="204.589996"></circle><rect data-fill="2" id="Rectangle" x="0" y="0" width="100" height="545.799988"></rect></g></svg></span></div>
|
124
|
+
<div class="sc-hSdWYo gBDeVU"></div>
|
125
|
+
<div class="button-text">#{caption}</div>
|
126
|
+
</div>
|
127
|
+
</a>
|
128
|
+
<script>
|
129
|
+
// https://www.patreon.com/bePatron?u=18277220&redirect_uri=http%3A%2F%2F127.0.0.1%3A4000%2Fes%2F&utm_medium=widget
|
130
|
+
// $(document).ready(function() { $(".sc-hMqMXs.hNJHmD").attr("href", "https://www.patreon.com/bePatron?u=#{pid}&redirect_uri=" + escape(window.location.href) + "&utm_medium=widget"); });
|
131
|
+
|
132
|
+
document.addEventListener("DOMContentLoaded", function(event) {
|
133
|
+
var url = "https://www.patreon.com/bePatron?u=#{pid}&redirect_uri=" + escape(window.location.href) + "&utm_medium=widget";
|
134
|
+
document.getElementsByClassName("sc-hMqMXs")[0].setAttribute("href", url);
|
135
|
+
});
|
136
|
+
</script>
|
137
|
+
</div>
|
138
|
+
</div>
|
139
|
+
</div>
|
140
|
+
</div>
|
@@ -10,7 +10,9 @@ module Jekyll
|
|
10
10
|
'toptext' => "", # Text that appears in before the progress bar
|
11
11
|
'bottomtext' => "", # Text that appears in after the progress bar
|
12
12
|
'showgoaltext' => true,
|
13
|
-
'showbutton' => false
|
13
|
+
'showbutton' => false,
|
14
|
+
'username' => 'z3nth10n',
|
15
|
+
'default_lang' => "en"
|
14
16
|
}
|
15
17
|
|
16
18
|
end # module Patreon
|
@@ -1,8 +1,5 @@
|
|
1
1
|
module Jekyll
|
2
|
-
module Patreon::Generator
|
3
|
-
|
4
|
-
@@config = nil
|
5
|
-
|
2
|
+
module Patreon::Generator
|
6
3
|
#
|
7
4
|
# The main entry point into the generator, called by Jekyll
|
8
5
|
# this function extracts all the necessary information from the jekyll end and passes it into the pagination
|
@@ -10,6 +7,17 @@ module Jekyll
|
|
10
7
|
# (such as how to create new pages)
|
11
8
|
#
|
12
9
|
class PatreonGenerator < Generator
|
10
|
+
# The constants
|
11
|
+
|
12
|
+
PatreonWebsiteURL = "https://www.patreon.com/"
|
13
|
+
PatreonUserAPIURL = "https://api.patreon.com/user/"
|
14
|
+
|
15
|
+
# The vars
|
16
|
+
|
17
|
+
@@config ||= nil
|
18
|
+
@@PatreonID ||= nil
|
19
|
+
@@json ||= nil
|
20
|
+
|
13
21
|
# This generator is safe from arbitrary code execution.
|
14
22
|
safe true
|
15
23
|
|
@@ -22,15 +30,85 @@ module Jekyll
|
|
22
30
|
# Returns nothing.
|
23
31
|
def generate(site)
|
24
32
|
#begin
|
33
|
+
|
34
|
+
Jekyll.logger.info "Patreon:","Initializating"
|
35
|
+
|
36
|
+
start = Time.now
|
25
37
|
|
26
38
|
# Retrieve and merge the Patreon configuration from the site yml file
|
27
39
|
default_config = Jekyll::Utils.deep_merge_hashes(DEFAULT, site.config['patreon'] || {})
|
28
40
|
@@config = default_config
|
41
|
+
|
42
|
+
username = @@config["username"]
|
43
|
+
|
44
|
+
if username.nil?
|
45
|
+
username = "z3nth10n"
|
46
|
+
end
|
47
|
+
|
48
|
+
if @@PatreonID.nil?
|
49
|
+
@@PatreonID = internalGetPatreonID(username)
|
50
|
+
else
|
51
|
+
infoSpended(start)
|
52
|
+
return
|
53
|
+
end
|
54
|
+
|
55
|
+
# Jekyll.logger.info "Patreon lang:",@config['lang']
|
56
|
+
|
57
|
+
@@json = Net::HTTP.get_response(URI.parse("#{PatreonUserAPIURL}#{@@PatreonID}")).body.force_encoding('UTF-8')
|
58
|
+
infoSpended(start)
|
59
|
+
end
|
60
|
+
|
61
|
+
def infoSpended(start)
|
62
|
+
spended = Time.now - start
|
63
|
+
Jekyll.logger.info "Patreon:", "Initialized in #{spended} seconds"
|
64
|
+
end
|
65
|
+
|
66
|
+
def internalGetPatreonID(username)
|
67
|
+
patreon_url = URI.encode("#{PatreonWebsiteURL}#{username}")
|
68
|
+
|
69
|
+
# Jekyll.logger.info "Patreon profile url:",patreon_url
|
70
|
+
patreon_source = Net::HTTP.get_response(URI.parse(patreon_url)).body.force_encoding('UTF-8').delete!("\r\n\\")
|
71
|
+
|
72
|
+
patreon_id_index = patreon_source.index("\"creator_id\": ")
|
73
|
+
|
74
|
+
unless patreon_id_index.nil?
|
75
|
+
|
76
|
+
patreon_id_index += 14
|
77
|
+
endidpos = patreon_source.from(patreon_id_index).index("\n")
|
78
|
+
|
79
|
+
if endidpos.nil?
|
80
|
+
endidpos = patreon_source.from(patreon_id_index).index("}")
|
81
|
+
end
|
82
|
+
|
83
|
+
if endidpos.nil?
|
84
|
+
raiseError()
|
85
|
+
end
|
86
|
+
|
87
|
+
patreon_id = patreon_source.from(patreon_id_index)[0, endidpos].strip
|
88
|
+
|
89
|
+
# Jekyll.logger.info "Patreon ID:",patreon_id
|
90
|
+
|
91
|
+
if patreon_id.nil?
|
92
|
+
raiseError()
|
93
|
+
end
|
94
|
+
|
95
|
+
return Integer(patreon_id)
|
96
|
+
end
|
97
|
+
|
98
|
+
return -1
|
29
99
|
end
|
30
100
|
|
31
101
|
def self.getConfig
|
32
102
|
@@config
|
33
103
|
end
|
104
|
+
|
105
|
+
def self.getPatreonID
|
106
|
+
@@PatreonID
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.getJSON
|
110
|
+
@@json
|
111
|
+
end
|
34
112
|
end
|
35
113
|
end
|
36
114
|
end
|