diff --git a/app/Model/Meta/PatreonPosts.js b/app/Model/Meta/PatreonPosts.js
new file mode 100644
index 00000000..8cd96287
--- /dev/null
+++ b/app/Model/Meta/PatreonPosts.js
@@ -0,0 +1,26 @@
+PatreonPosts = new Mongo.Collection("patreonPosts");
+
+Schemas.PatreonPosts = new SimpleSchema({
+ link: {
+ type: String,
+ },
+ dateAdded: {
+ type: Date,
+ autoValue(){
+ return new Date();
+ },
+ },
+});
+
+PatreonPosts.attachSchema(Schemas.PatreonPosts);
+
+PatreonPosts.allow({
+ insert: function(userId, doc) {
+ var user = Meteor.users.findOne(userId);
+ if (user) return _.contains(user.roles, "admin");
+ },
+ remove: function(userId, doc) {
+ var user = Meteor.users.findOne(userId);
+ if (user) return _.contains(user.roles, "admin");
+ },
+});
diff --git a/app/Model/Users/Users.js b/app/Model/Users/Users.js
index 5f6b2a7e..6878df1d 100644
--- a/app/Model/Users/Users.js
+++ b/app/Model/Users/Users.js
@@ -70,6 +70,10 @@ Schemas.User = new SimpleSchema({
index: 1,
optional: true,
},
+ lastPatreonPostClicked: {
+ type: String,
+ optional: true,
+ },
});
Meteor.users.attachSchema(Schemas.User);
@@ -107,3 +111,11 @@ if (Meteor.isServer) Meteor.methods({
Meteor.users.update(this.userId, {$set: {apiKey}});
},
});
+
+Meteor.methods({
+ clickPatreonPost(link) {
+ Meteor.users.update(this.userId, {$set: {
+ lastPatreonPostClicked: link
+ }});
+ },
+});
diff --git a/app/client/views/layout/layout.html b/app/client/views/layout/layout.html
index 1997308d..50d6cb0c 100644
--- a/app/client/views/layout/layout.html
+++ b/app/client/views/layout/layout.html
@@ -51,9 +51,16 @@
Send Feedback
-
+
-
+
+ {{#if showPatreonBadge}}
+
+
+ {{/if}}
Patreon
diff --git a/app/client/views/layout/layout.js b/app/client/views/layout/layout.js
index 0d24a237..f4937071 100644
--- a/app/client/views/layout/layout.js
+++ b/app/client/views/layout/layout.js
@@ -7,6 +7,16 @@ Template.appDrawer.helpers({
var user = Meteor.user();
return user.profile && user.profile.username || user.username || "My Account";
},
+ showPatreonBadge: function(){
+ let post = PatreonPosts.findOne({}, {sort: {date: -1}});
+ let user = Meteor.user();
+ if (!post || !user) return false;
+ return post.link !== user.lastPatreonPostClicked;
+ },
+ patreonLink: function(){
+ let post = PatreonPosts.findOne({}, {sort: {date: -1}});
+ return (post && post.link) || 'https://www.patreon.com/dicecloud';
+ },
});
let drawerLayout;
@@ -37,6 +47,9 @@ Template.appDrawer.events({
closeDrawer(instance);
},
"click .patreon": function(event, instance){
+ let post = PatreonPosts.findOne({}, {sort: {date: -1}});
+ let link = (post && post.link) || 'https://www.patreon.com/dicecloud';
+ Meteor.call('clickPatreonPost', link);
ga("send", "event", "externalLink", "patreon");
},
"click .github": function(event, instance){
diff --git a/app/config.vulcanize b/app/config.vulcanize
index fbdd8a9c..01f1cbf9 100644
--- a/app/config.vulcanize
+++ b/app/config.vulcanize
@@ -2,13 +2,13 @@
"polyfill": "/components/webcomponentsjs/webcomponents.min.js",
"useShadowDom": true,
"imports": [
- "/components/app-layout/app-layout.html",
- "/components/app-layout/app-layout.html",
+ "/components/app-layout/app-layout.html",
+ "/components/app-layout/app-layout.html",
"/components/app-layout/app-scroll-effects/effects/waterfall.html",
"/components/app-layout/app-scroll-effects/effects/parallax-background.html",
"/components/app-layout/app-scroll-effects/effects/resize-title.html",
- "/components/iron-collapse/iron-collapse.html",
+ "/components/iron-collapse/iron-collapse.html",
"/components/iron-icon/iron-icon.html",
"/components/iron-icons/av-icons.html",
"/components/iron-icons/editor-icons.html",
@@ -21,7 +21,8 @@
"/components/neon-animation/neon-animation.html",
- "/components/paper-button/paper-button.html",
+ "/components/paper-button/paper-button.html",
+ "/components/paper-badge/paper-badge.html",
"/components/paper-swatch-picker/paper-swatch-picker.html",
"/components/paper-dialog/paper-dialog.html",
"/components/paper-dropdown-menu/paper-dropdown-menu.html",
diff --git a/app/package-lock.json b/app/package-lock.json
index 3c606c15..b7b60acc 100644
--- a/app/package-lock.json
+++ b/app/package-lock.json
@@ -216,9 +216,9 @@
"integrity": "sha512-HfVRxhYG7C8Jl9FqtrlElMR2z/8YiLQVDKf67MLY25Ic+ILx3ecmklfT1v3u+7P5/4vEFjuxaAFXhr2/Afwk5g=="
},
"file-saver": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.0.tgz",
- "integrity": "sha512-cYM1ic5DAkg25pHKgi5f10ziAM7RJU37gaH1XQlyNDrtUnzhC/dfoV9zf2OmF0RMKi42jG5B0JWBnPQqyj/G6g=="
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/file-saver/-/file-saver-2.0.1.tgz",
+ "integrity": "sha512-dCB3K7/BvAcUmtmh1DzFdv0eXSVJ9IAFt1mw3XZfAexodNRoE29l3xB2EX4wH2q8m/UTzwzEPq/ArYk98kUkBQ=="
},
"find-up": {
"version": "2.1.0",
diff --git a/app/package.json b/app/package.json
index fbbadeae..29cbefcc 100644
--- a/app/package.json
+++ b/app/package.json
@@ -17,7 +17,7 @@
"bower": "^1.7.9",
"core-js": "^2.5.7",
"fibers": "^2.0.2",
- "file-saver": "^2.0.0",
+ "file-saver": "^2.0.1",
"meteor-node-stubs": "^0.3.3",
"qrcode": "^1.3.0",
"source-map-support": "^0.5.9",
diff --git a/app/server/publications/user.js b/app/server/publications/user.js
index 799539fd..ab979722 100644
--- a/app/server/publications/user.js
+++ b/app/server/publications/user.js
@@ -1,9 +1,13 @@
Meteor.publish("user", function(){
- return Meteor.users.find(this.userId, {fields: {
- roles: 1,
- username: 1,
- profile: 1,
- apiKey: 1,
- librarySubscriptions: 1,
- }});
+ return [
+ Meteor.users.find(this.userId, {fields: {
+ roles: 1,
+ username: 1,
+ profile: 1,
+ apiKey: 1,
+ librarySubscriptions: 1,
+ lastPatreonPostClicked: 1,
+ }}),
+ PatreonPosts.find({},{sort: {dateAdded: -1}, limit: 1})
+ ];
});