jekyll-patreon 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,146 @@
1
+ .meter {
2
+ height: 8px;
3
+ position: relative;
4
+ background: #f2f4f5;
5
+ -moz-border-radius: 4px;
6
+ -webkit-border-radius: 4px;
7
+ border-radius: 4px;
8
+ padding: 0px;
9
+ -webkit-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
10
+ -moz-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
11
+ box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
12
+ }
13
+
14
+ .meter > span {
15
+ display: block;
16
+ height: 100%;
17
+ -webkit-border-top-right-radius: 20px;
18
+ -webkit-border-bottom-right-radius: 20px;
19
+ -moz-border-radius-topright: 20px;
20
+ -moz-border-radius-bottomright: 20px;
21
+ border-top-right-radius: 20px;
22
+ border-bottom-right-radius: 20px;
23
+ -webkit-border-top-left-radius: 20px;
24
+ -webkit-border-bottom-left-radius: 20px;
25
+ -moz-border-radius-topleft: 20px;
26
+ -moz-border-radius-bottomleft: 20px;
27
+ border-top-left-radius: 20px;
28
+ border-bottom-left-radius: 20px;
29
+ background-color: rgb(43, 194, 83);
30
+ background-image: -webkit-gradient(
31
+ linear,
32
+ left bottom,
33
+ left top,
34
+ color-stop(0, rgb(43, 194, 83)),
35
+ color-stop(1, rgb(84, 240, 84))
36
+ );
37
+ background-image: -moz-linear-gradient(
38
+ center bottom,
39
+ rgb(43, 194, 83) 37%,
40
+ rgb(84, 240, 84) 69%
41
+ );
42
+ position: relative;
43
+ overflow: hidden;
44
+ }
45
+
46
+ .meter > span:after, .animate > span > span {
47
+ content: "";
48
+ position: absolute;
49
+ top: 0;
50
+ left: 0;
51
+ bottom: 0;
52
+ right: 0;
53
+ background-image: -webkit-gradient(linear, 0 0, 100% 100%,
54
+ color-stop(.25, rgba(255, 255, 255, .2)),
55
+ color-stop(.25, transparent), color-stop(.5, transparent),
56
+ color-stop(.5, rgba(255, 255, 255, .2)),
57
+ color-stop(.75, rgba(255, 255, 255, .2)),
58
+ color-stop(.75, transparent), to(transparent)
59
+ );
60
+ background-image: -moz-linear-gradient(
61
+ -45deg,
62
+ rgba(255, 255, 255, .2) 25%,
63
+ transparent 25%,
64
+ transparent 50%,
65
+ rgba(255, 255, 255, .2) 50%,
66
+ rgba(255, 255, 255, .2) 75%,
67
+ transparent 75%,
68
+ transparent
69
+ );
70
+ z-index: 1;
71
+ -webkit-background-size: 50px 50px;
72
+ -moz-background-size: 50px 50px;
73
+ -webkit-animation: move 2s linear infinite;
74
+ -webkit-border-top-right-radius: 20px;
75
+ -webkit-border-bottom-right-radius: 20px;
76
+ -moz-border-radius-topright: 20px;
77
+ -moz-border-radius-bottomright: 20px;
78
+ border-top-right-radius: 20px;
79
+ border-bottom-right-radius: 20px;
80
+ -webkit-border-top-left-radius: 20px;
81
+ -webkit-border-bottom-left-radius: 20px;
82
+ -moz-border-radius-topleft: 20px;
83
+ -moz-border-radius-bottomleft: 20px;
84
+ border-top-left-radius: 20px;
85
+ border-bottom-left-radius: 20px;
86
+ overflow: hidden;
87
+ }
88
+
89
+ .animate > span:after {
90
+ display: none;
91
+ }
92
+
93
+ @-webkit-keyframes move {
94
+ 0% {
95
+ background-position: 0 0;
96
+ }
97
+ 100% {
98
+ background-position: 50px 50px;
99
+ }
100
+ }
101
+
102
+ .orange > span {
103
+ background-color: #e6461a;
104
+ background-image: -moz-linear-gradient(top, #e6461a, #e6461a);
105
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #e6461a), color-stop(1, #e6461a));
106
+ background-image: -webkit-linear-gradient(#e6461a, #e6461a);
107
+ }
108
+
109
+ .red > span {
110
+ background-color: #f0a3a3;
111
+ background-image: -moz-linear-gradient(top, #f0a3a3, #f42323);
112
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f0a3a3), color-stop(1, #f42323));
113
+ background-image: -webkit-linear-gradient(#f0a3a3, #f42323);
114
+ }
115
+
116
+ .blue > span {
117
+ background-color: #3EB7CA;
118
+ background-image: -moz-linear-gradient(top, #3EB7CA, #1DABC1);
119
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #3EB7CA), color-stop(1, #1DABC1));
120
+ background-image: -webkit-linear-gradient(#3EB7CA, #1DABC1);
121
+ }
122
+
123
+ .nostripes > span > span, .nostripes > span:after {
124
+ -webkit-animation: none;
125
+ background-image: none;
126
+ }
127
+
128
+ #patreon_goalmoneytext {
129
+ }
130
+
131
+ #patreon_goaltext {
132
+ padding-top: 10px;
133
+ }
134
+
135
+ #patreon_paypername {
136
+ color: #a7b2b8;
137
+ }
138
+
139
+ span.goalreached {
140
+ color: #e6461a;
141
+ }
142
+
143
+ .patreon_button {
144
+ padding-top: 10px;
145
+ padding-bottom: 10px;
146
+ }
@@ -0,0 +1,146 @@
1
+ .meter {
2
+ height: 8px;
3
+ position: relative;
4
+ background: #f2f4f5;
5
+ -moz-border-radius: 4px;
6
+ -webkit-border-radius: 4px;
7
+ border-radius: 4px;
8
+ padding: 0px;
9
+ -webkit-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
10
+ -moz-box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
11
+ box-shadow: inset 0 -1px 1px rgba(255, 255, 255, 0.3);
12
+ }
13
+
14
+ .meter > span {
15
+ display: block;
16
+ height: 100%;
17
+ -webkit-border-top-right-radius: 20px;
18
+ -webkit-border-bottom-right-radius: 20px;
19
+ -moz-border-radius-topright: 20px;
20
+ -moz-border-radius-bottomright: 20px;
21
+ border-top-right-radius: 20px;
22
+ border-bottom-right-radius: 20px;
23
+ -webkit-border-top-left-radius: 20px;
24
+ -webkit-border-bottom-left-radius: 20px;
25
+ -moz-border-radius-topleft: 20px;
26
+ -moz-border-radius-bottomleft: 20px;
27
+ border-top-left-radius: 20px;
28
+ border-bottom-left-radius: 20px;
29
+ background-color: rgb(43, 194, 83);
30
+ background-image: -webkit-gradient(
31
+ linear,
32
+ left bottom,
33
+ left top,
34
+ color-stop(0, rgb(43, 194, 83)),
35
+ color-stop(1, rgb(84, 240, 84))
36
+ );
37
+ background-image: -moz-linear-gradient(
38
+ center bottom,
39
+ rgb(43, 194, 83) 37%,
40
+ rgb(84, 240, 84) 69%
41
+ );
42
+ position: relative;
43
+ overflow: hidden;
44
+ }
45
+
46
+ .meter > span:after, .animate > span > span {
47
+ content: "";
48
+ position: absolute;
49
+ top: 0;
50
+ left: 0;
51
+ bottom: 0;
52
+ right: 0;
53
+ background-image: -webkit-gradient(linear, 0 0, 100% 100%,
54
+ color-stop(.25, rgba(255, 255, 255, .2)),
55
+ color-stop(.25, transparent), color-stop(.5, transparent),
56
+ color-stop(.5, rgba(255, 255, 255, .2)),
57
+ color-stop(.75, rgba(255, 255, 255, .2)),
58
+ color-stop(.75, transparent), to(transparent)
59
+ );
60
+ background-image: -moz-linear-gradient(
61
+ -45deg,
62
+ rgba(255, 255, 255, .2) 25%,
63
+ transparent 25%,
64
+ transparent 50%,
65
+ rgba(255, 255, 255, .2) 50%,
66
+ rgba(255, 255, 255, .2) 75%,
67
+ transparent 75%,
68
+ transparent
69
+ );
70
+ z-index: 1;
71
+ -webkit-background-size: 50px 50px;
72
+ -moz-background-size: 50px 50px;
73
+ -webkit-animation: move 2s linear infinite;
74
+ -webkit-border-top-right-radius: 20px;
75
+ -webkit-border-bottom-right-radius: 20px;
76
+ -moz-border-radius-topright: 20px;
77
+ -moz-border-radius-bottomright: 20px;
78
+ border-top-right-radius: 20px;
79
+ border-bottom-right-radius: 20px;
80
+ -webkit-border-top-left-radius: 20px;
81
+ -webkit-border-bottom-left-radius: 20px;
82
+ -moz-border-radius-topleft: 20px;
83
+ -moz-border-radius-bottomleft: 20px;
84
+ border-top-left-radius: 20px;
85
+ border-bottom-left-radius: 20px;
86
+ overflow: hidden;
87
+ }
88
+
89
+ .animate > span:after {
90
+ display: none;
91
+ }
92
+
93
+ @-webkit-keyframes move {
94
+ 0% {
95
+ background-position: 0 0;
96
+ }
97
+ 100% {
98
+ background-position: 50px 50px;
99
+ }
100
+ }
101
+
102
+ .orange > span {
103
+ background-color: #e6461a;
104
+ background-image: -moz-linear-gradient(top, #e6461a, #e6461a);
105
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #e6461a), color-stop(1, #e6461a));
106
+ background-image: -webkit-linear-gradient(#e6461a, #e6461a);
107
+ }
108
+
109
+ .red > span {
110
+ background-color: #f0a3a3;
111
+ background-image: -moz-linear-gradient(top, #f0a3a3, #f42323);
112
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f0a3a3), color-stop(1, #f42323));
113
+ background-image: -webkit-linear-gradient(#f0a3a3, #f42323);
114
+ }
115
+
116
+ .blue > span {
117
+ background-color: #3EB7CA;
118
+ background-image: -moz-linear-gradient(top, #3EB7CA, #1DABC1);
119
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #3EB7CA), color-stop(1, #1DABC1));
120
+ background-image: -webkit-linear-gradient(#3EB7CA, #1DABC1);
121
+ }
122
+
123
+ .nostripes > span > span, .nostripes > span:after {
124
+ -webkit-animation: none;
125
+ background-image: none;
126
+ }
127
+
128
+ #patreon_goalmoneytext {
129
+ }
130
+
131
+ #patreon_goaltext {
132
+ padding-top: 10px;
133
+ }
134
+
135
+ #patreon_paypername {
136
+ color: #a7b2b8;
137
+ }
138
+
139
+ span.goalreached {
140
+ color: #e6461a;
141
+ }
142
+
143
+ .patreon_button {
144
+ padding-top: 10px;
145
+ padding-bottom: 10px;
146
+ }
@@ -0,0 +1,16 @@
1
+ <script>
2
+ var PatreonData = JSON.parse("#{json}");
3
+ var patreonShowGoalText = #{showgoaltext};
4
+ </script>
5
+ <div id="patreon_toptext">#{toptext}</div>
6
+ <div class="patreon_goalmoney">
7
+ <span id="patreon_goalmoneytext"></span>
8
+ <span id="patreon_goalreached" class='goalreached'></span>
9
+ </div>
10
+ <div id="patreon_paypername"></div>
11
+ <div class="meter #{metercolor}" id="patreon_meter">
12
+ <span style="width: 0%"></span>
13
+ </div>
14
+ <div id="patreon_goaltext"></div>
15
+ <div id="patreon_bottomtext">#{bottomtext}</div>
16
+ <div class="patreon_button">#{patreon_button}</div>
@@ -0,0 +1,16 @@
1
+ <script>
2
+ var PatreonData = JSON.parse("#{json}");
3
+ var patreonShowGoalText = #{showgoaltext};
4
+ </script>
5
+ <div id="patreon_toptext">#{toptext}</div>
6
+ <div class="patreon_goalmoney">
7
+ <span id="patreon_goalmoneytext"></span>
8
+ <span id="patreon_goalreached" class='goalreached'></span>
9
+ </div>
10
+ <div id="patreon_paypername"></div>
11
+ <div class="meter #{metercolor}" id="patreon_meter">
12
+ <span style="width: 0%"></span>
13
+ </div>
14
+ <div id="patreon_goaltext"></div>
15
+ <div id="patreon_bottomtext">#{bottomtext}</div>
16
+ <div class="patreon_button">#{patreon_button}</div>
@@ -0,0 +1,10 @@
1
+ <script>
2
+ var PatreonData = JSON.parse("#{json}");
3
+ var patreonShowGoalText = #{showgoaltext};
4
+ </script>
5
+ <div id="patreon_toptext">#{toptext}</div>
6
+ <div class="meter #{metercolor}" id="patreon_meter">
7
+ <span style="width: 0%"></span>
8
+ </div>
9
+ <div id="patreon_bottomtext">#{bottomtext}</div>
10
+ <div class="patreon_button">#{patreon_button}</div>
@@ -0,0 +1,18 @@
1
+ <script>
2
+ var PatreonData = JSON.parse("#{json}");
3
+ var patreonShowGoalText = #{showgoaltext};
4
+ </script>
5
+ <div id="patreon_bottomtext">#{bottomtext}</div>
6
+ <div id="patreon_goaltext"></div>
7
+ <div class="meter #{metercolor}" id="patreon_meter">
8
+ <span style="width: 0%"></span>
9
+ </div>
10
+ <div class="patreon_streamlinetext">
11
+ <span id="patreon_toptext">#{toptext}</span>
12
+ <div class="patreon_goalmoney">
13
+ <span id="patreon_goalmoneytext"></span>
14
+ <span id="patreon_paypername"></span>
15
+ <span id="patreon_goalreached" class='goalreached'></span>
16
+ </div>
17
+ </div>
18
+ <div class="patreon_button">#{patreon_button}</div>
@@ -0,0 +1,16 @@
1
+ <script>
2
+ var PatreonData = JSON.parse("#{json}");
3
+ var patreonShowGoalText = #{showgoaltext};
4
+ </script>
5
+ <div class="patreon_streamlinetext">
6
+ <span id="patreon_toptext">#{toptext}</span>
7
+ <span id="patreon_goalmoneytext"></span>
8
+ <span id="patreon_paypername"></span>
9
+ <span id="patreon_goalreached" class='goalreached'></span>
10
+ </div>
11
+ <div class="meter #{metercolor}" id="patreon_meter">
12
+ <span style="width: 0%"></span>
13
+ </div>
14
+ <div id="patreon_goaltext"></div>
15
+ <div id="patreon_bottomtext">#{bottomtext}</div>
16
+ <div class="patreon_button">#{patreon_button}</div>
@@ -0,0 +1,16 @@
1
+ <script language="JavaScript">
2
+ var PatreonData = JSON.parse("#{json}");
3
+ var patreonShowGoalText = #{showgoaltext};
4
+ </script>
5
+ <div class="meter #{metercolor}" id="patreon_meter">
6
+ <span style="width: 0%"></span>
7
+ </div>
8
+ <div class="patreon_streamlinetext">
9
+ <span id="patreon_toptext">#{toptext}</span>
10
+ <span id="patreon_goalmoneytext"></span>
11
+ <span id="patreon_paypername"></span>
12
+ <span id="patreon_goalreached" class='goalreached'></span>
13
+ </div>
14
+ <div id="patreon_goaltext"></div>
15
+ <div id="patreon_bottomtext">#{bottomtext}</div>
16
+ <div class="patreon_button">#{patreon_button}</div>
@@ -0,0 +1,127 @@
1
+ // 'use strict';
2
+
3
+ var patreon = {
4
+ GetCampaign: function() {
5
+ for (var idx in PatreonData.included) {
6
+ var linkedData = PatreonData.included[idx];
7
+ if (linkedData.type == "campaign")
8
+ {
9
+ return linkedData.attributes;
10
+ }
11
+ }
12
+
13
+ return null;
14
+ },
15
+ GetPatronCount: function(campaignData) {
16
+ return campaignData.patron_count;
17
+ },
18
+ GetPledgeSum: function(campaignData) {
19
+ return campaignData.pledge_sum / 100.0;
20
+ },
21
+ GetGoalTotal: function(goalData) {
22
+ return goalData.amount_cents / 100.0;
23
+ },
24
+ GetActiveGoal: function() {
25
+ var campaign = this.GetCampaign();
26
+ var pledged_cents = this.GetPledgeSum(campaign) * 100;
27
+ var lastGoal = null;
28
+ for (var idx in PatreonData.included) {
29
+ var linkedData = PatreonData.included[idx];
30
+ if (linkedData.type == "goal")
31
+ {
32
+ if ((lastGoal != null) && (pledged_cents > lastGoal.amount_cents) && (pledged_cents < linkedData.attributes.amount_cents))
33
+ {
34
+ lastGoal = linkedData.attributes;
35
+ break;
36
+ }
37
+ else if ((lastGoal != null) && (pledged_cents < linkedData.attributes.amount_cents))
38
+ {
39
+ break;
40
+ }
41
+ else
42
+ {
43
+ lastGoal = linkedData.attributes;
44
+ }
45
+ }
46
+ }
47
+
48
+ return lastGoal;
49
+ },
50
+ ShowGoalProgress: function(perc) {
51
+ var percWidth = perc > 100 ? 100 : perc;
52
+
53
+ $("#patreon_meter > span").each(function() {
54
+ $(this)
55
+ .data("origWidth", percWidth + "%")
56
+ .width(0)
57
+ .animate({
58
+ width: $(this).data("origWidth")
59
+ }, 1200);
60
+ });
61
+ },
62
+ GoalTextFromTo: function(campaignData, goalData) {
63
+ var pledgeSum = 0;
64
+ var goalTotal = 0;
65
+
66
+ if (campaignData)
67
+ {
68
+ pledgeSum = Math.floor(this.GetPledgeSum(campaignData));
69
+
70
+ $("#patreon_paypername").html("per " + campaignData.pay_per_name);
71
+ }
72
+
73
+ if (goalData)
74
+ {
75
+ goalTotal = Math.floor(this.GetGoalTotal(goalData));
76
+
77
+ if (patreonShowGoalText)
78
+ {
79
+ $("#patreon_goaltext").html(goalData.description);
80
+ }
81
+ }
82
+
83
+ if (pledgeSum < goalTotal)
84
+ {
85
+ $("#patreon_goalmoneytext").html("$" + pledgeSum + " of $" + goalTotal);
86
+ $("#patreon_goalreached").html("");
87
+ }
88
+ else
89
+ {
90
+ $("#patreon_goalmoneytext").html("$" + goalTotal);
91
+ $("#patreon_goalreached").html("- reached!");
92
+ }
93
+ },
94
+ CreateDummyGoal: function(campaignData) {
95
+ return {
96
+ "description": "",
97
+ "amount_cents": campaignData.pledge_sum
98
+ };
99
+ }
100
+ };
101
+
102
+ document.addEventListener("DOMContentLoaded", function(event) {
103
+ $(document).ready(function() {
104
+ if (typeof PatreonData['data'] == "object")
105
+ {
106
+ var campaignData = patreon.GetCampaign();
107
+ var goalData = patreon.GetActiveGoal();
108
+ if (!goalData)
109
+ {
110
+ goalData = patreon.CreateDummyGoal(campaignData);
111
+ }
112
+
113
+ var goalperc = Math.floor((campaignData.pledge_sum / goalData.amount_cents) * 100.0);
114
+ $("#patreon_percentage").val(goalperc);
115
+ patreon.GoalTextFromTo(campaignData, goalData);
116
+ patreon.ShowGoalProgress(goalperc)
117
+ }
118
+
119
+ if($("#patreon_toptext").text() == "")
120
+ $("#patreon_toptext").remove();
121
+
122
+ if($("#patreon_bottomtext").text() == "")
123
+ $("#patreon_bottomtext").remove();
124
+
125
+ // $(".patreon_button").remove();
126
+ });
127
+ });
@@ -0,0 +1,17 @@
1
+ module Jekyll
2
+ module Patreon::Generator
3
+
4
+ # The default configuration for the Patreon widget
5
+ DEFAULT = {
6
+ 'enabled' => false,
7
+ 'design' => 'default', # Supports the following desings: default, fancy, minimal, streamlined, reversed, swapped
8
+ 'title' => '',
9
+ 'metercolor' => "green", # Supports the following colors: reed, green, orange, red nostripes, green nostripes, orange nostripes, blue nostripes
10
+ 'toptext' => "", # Text that appears in before the progress bar
11
+ 'bottomtext' => "", # Text that appears in after the progress bar
12
+ 'showgoaltext' => true,
13
+ 'showbutton' => false
14
+ }
15
+
16
+ end # module Patreon
17
+ end # module Jekyll
@@ -0,0 +1,36 @@
1
+ module Jekyll
2
+ module Patreon::Generator
3
+
4
+ @@config = nil
5
+
6
+ #
7
+ # The main entry point into the generator, called by Jekyll
8
+ # this function extracts all the necessary information from the jekyll end and passes it into the pagination
9
+ # logic. Additionally it also contains all site specific actions that the pagination logic needs access to
10
+ # (such as how to create new pages)
11
+ #
12
+ class PatreonGenerator < Generator
13
+ # This generator is safe from arbitrary code execution.
14
+ safe true
15
+
16
+ # This generator should be passive with regard to its execution
17
+ priority :lowest
18
+
19
+ # Generate paginated pages if necessary (Default entry point)
20
+ # site - The Site.
21
+ #
22
+ # Returns nothing.
23
+ def generate(site)
24
+ #begin
25
+
26
+ # Retrieve and merge the Patreon configuration from the site yml file
27
+ default_config = Jekyll::Utils.deep_merge_hashes(DEFAULT, site.config['patreon'] || {})
28
+ @@config = default_config
29
+ end
30
+
31
+ def self.getConfig
32
+ @@config
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,99 @@
1
+ # Jekyll - Easy Patreon Embed
2
+ #
3
+ # z3nth10n - https://github.com/z3nth10n
4
+ # United Teamwork Association - https://github.com/uta-org
5
+ #
6
+ # Input:
7
+ # {% patreon z3nth10n %}
8
+ # Output: Patreon donation widget
9
+
10
+ require "jekyll-patreon/version"
11
+ require 'net/http'
12
+
13
+ module Jekyll
14
+ module Patreon::Tags
15
+ class PatreonTag < Liquid::Tag
16
+ PatreonWebsiteURL = "https://www.patreon.com/"
17
+ PatreonUserAPIURL = "https://api.patreon.com/user/"
18
+
19
+ @inc = nil
20
+ @username = nil
21
+ @PatreonID = nil
22
+ @config = nil
23
+
24
+ def initialize(tag_name, markup, tokens)
25
+ super
26
+
27
+ @inc = File.expand_path("../../_inc", __FILE__)
28
+ @username = markup.strip
29
+ @config = Jekyll::Patreon::Generator::PatreonGenerator.getConfig
30
+ end
31
+
32
+ def render(context)
33
+ unless @config['enabled']
34
+ return
35
+ end
36
+
37
+ if @PatreonID.nil?
38
+ @PatreonID = getPatreonID(@username)
39
+ end
40
+
41
+ json = Net::HTTP.get_response(URI.parse("#{PatreonUserAPIURL}#{@PatreonID}")).body.force_encoding('UTF-8').escape_json
42
+
43
+ source = "<script>" + File.read(File.join(@inc, "js", "patreon.js")) + "</script>"
44
+ source += File.read(File.join(@inc, "design_" + @config['design'] + ".html")).interpolate({ json: json, showgoaltext: @config['showgoaltext'], toptext: @config['toptext'], metercolor: @config['metercolor'], bottomtext: @config['bottomtext'], patreon_button: @config['patreon_button'] })
45
+
46
+ if @config['showbutton']
47
+ source += File.read(File.join(@inc, "button.html")).interpolate(pid: @PatreonID)
48
+ end
49
+
50
+ source += "<style>" + File.read(File.join(@inc, "css", "design_" + @config['design'] + ".css")) + "</style>"
51
+ source += "<style>" + File.read(File.join(@inc, "css", "common.css")) + "</style>"
52
+
53
+ source
54
+ end
55
+
56
+ def getPatreonID(username)
57
+ patreon_url = URI.encode("#{PatreonWebsiteURL}#{username}")
58
+
59
+ # Jekyll.logger.info "Patreon profile url:",patreon_url
60
+ patreon_source = Net::HTTP.get_response(URI.parse(patreon_url)).body.force_encoding('UTF-8').delete!("\r\n\\")
61
+
62
+ patreon_id_index = patreon_source.index("\"creator_id\": ")
63
+
64
+ unless patreon_id_index.nil?
65
+
66
+ patreon_id_index += 14
67
+ endidpos = patreon_source.from(patreon_id_index).index("\n")
68
+
69
+ if endidpos.nil?
70
+ endidpos = patreon_source.from(patreon_id_index).index("}")
71
+ end
72
+
73
+ if endidpos.nil?
74
+ raiseError()
75
+ end
76
+
77
+ patreon_id = patreon_source.from(patreon_id_index)[0, endidpos].strip
78
+
79
+ # Jekyll.logger.info "Patreon ID:",patreon_id
80
+
81
+ if patreon_id.nil?
82
+ raiseError()
83
+ end
84
+
85
+ return Integer(patreon_id)
86
+ end
87
+
88
+ return -1
89
+ end
90
+
91
+ def raiseError()
92
+ raise RuntimeError, "An error occurred getting the ID from your Patreon profile"
93
+ end
94
+ end
95
+ end
96
+ end
97
+
98
+ # Jekyll.logger.info "Patreon:","Test"
99
+ Liquid::Template.register_tag('patreon', Jekyll::Patreon::Tags::PatreonTag)