wbase 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (117) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +219 -2
  3. data/app/assets/javascripts/wbase/auth/bootstrap.min.js +7 -0
  4. data/app/assets/javascripts/wbase/auth/detect.js +7 -0
  5. data/app/assets/javascripts/wbase/auth/fastclick.js +841 -0
  6. data/app/assets/javascripts/wbase/auth/jquery.app.js +318 -0
  7. data/app/assets/javascripts/wbase/auth/jquery.blockUI.js +620 -0
  8. data/app/assets/javascripts/wbase/auth/jquery.core.js +323 -0
  9. data/app/assets/javascripts/wbase/auth/jquery.min.js +5 -0
  10. data/app/assets/javascripts/wbase/auth/jquery.nicescroll.js +113 -0
  11. data/app/assets/javascripts/wbase/auth/jquery.scrollTo.min.js +7 -0
  12. data/app/assets/javascripts/wbase/auth/jquery.slimscroll.js +474 -0
  13. data/app/assets/javascripts/wbase/auth/modernizr.min.js +1 -0
  14. data/app/assets/javascripts/wbase/auth/pace.min.js +2 -0
  15. data/app/assets/javascripts/wbase/auth/waves.js +498 -0
  16. data/app/assets/javascripts/wbase/auth/wow.min.js +2 -0
  17. data/app/assets/javascripts/wbase/auth.js +12 -0
  18. data/app/assets/stylesheets/wbase/auth/components.css +2362 -0
  19. data/app/assets/stylesheets/wbase/auth/core.css +2190 -0
  20. data/app/assets/stylesheets/wbase/auth/icons.css +12067 -0
  21. data/app/assets/stylesheets/wbase/auth/pages.css +2039 -0
  22. data/app/assets/stylesheets/wbase/auth/responsive.css +162 -0
  23. data/app/assets/stylesheets/wbase/auth/typicons.css +1370 -0
  24. data/app/assets/stylesheets/wbase/auth/variables.css +0 -0
  25. data/app/assets/stylesheets/wbase/auth.scss +9 -0
  26. data/app/controllers/wbase/application_controller.rb +13 -0
  27. data/app/controllers/wbase/mail_events_controller.rb +21 -0
  28. data/app/controllers/wbase/password_resets_controller.rb +43 -0
  29. data/app/controllers/wbase/sessions_controller.rb +35 -0
  30. data/app/controllers/wbase/static_pages_controller.rb +4 -0
  31. data/app/controllers/wbase/stripe_webhooks_controller.rb +54 -0
  32. data/app/controllers/wbase/subscriptions_controller.rb +50 -0
  33. data/app/controllers/wbase/users_controller.rb +65 -0
  34. data/app/helpers/wbase/auth_helper.rb +44 -0
  35. data/app/jobs/wbase/activate_drip_subscriber_job.rb +15 -0
  36. data/app/jobs/wbase/create_drip_subscriber_job.rb +13 -0
  37. data/app/jobs/wbase/dripable.rb +22 -0
  38. data/app/mailers/application_mailer.rb +4 -0
  39. data/app/mailers/wbase/admin_mailer.rb +35 -0
  40. data/app/mailers/wbase/password_reset_mailer.rb +20 -0
  41. data/app/models/wbase/mail_event.rb +21 -0
  42. data/app/models/wbase/plan.rb +26 -0
  43. data/app/models/wbase/ssl_verification.rb +21 -0
  44. data/app/models/wbase/stripe_webhook.rb +22 -0
  45. data/app/models/wbase/subscription.rb +47 -0
  46. data/app/models/wbase/userable.rb +85 -0
  47. data/app/services/wbase/mail_event_batch.rb +22 -0
  48. data/app/services/wbase/start_subscription.rb +81 -0
  49. data/app/views/layouts/mailer.html.erb +53 -0
  50. data/app/views/layouts/mailer.text.erb +1 -0
  51. data/app/views/layouts/wbase/_common_head.html.erb +46 -0
  52. data/app/views/layouts/wbase/auth.html.erb +23 -0
  53. data/app/views/layouts/wbase/landing.html.erb +9 -56
  54. data/app/views/shared/_errors.html.erb +10 -0
  55. data/app/views/wbase/admin_mailer/new_subscription.html.erb +33 -0
  56. data/app/views/wbase/admin_mailer/new_user.html.erb +7 -0
  57. data/app/views/wbase/password_reset_mailer/reset.html.erb +10 -0
  58. data/app/views/wbase/password_reset_mailer/reset.text.erb +5 -0
  59. data/app/views/wbase/password_resets/edit.html.erb +22 -0
  60. data/app/views/wbase/password_resets/new.html.erb +41 -0
  61. data/app/views/wbase/sessions/new.html.erb +58 -0
  62. data/app/views/wbase/static_pages/landing/_pricing.html.erb +6 -2
  63. data/app/views/wbase/static_pages/start.html.erb +1 -1
  64. data/app/views/wbase/static_pages/welcome.html.erb +1 -1
  65. data/app/views/wbase/subscriptions/edit.html.erb +2 -0
  66. data/app/views/wbase/subscriptions/new.html.erb +91 -0
  67. data/app/views/wbase/subscriptions/show.html.erb +2 -0
  68. data/app/views/wbase/users/_affiliate.html.erb +66 -0
  69. data/app/views/wbase/users/_plan.html.erb +11 -0
  70. data/app/views/wbase/users/_plans.html.erb +11 -0
  71. data/app/views/wbase/users/edit.html.erb +2 -0
  72. data/app/views/wbase/users/new.html.erb +38 -0
  73. data/app/views/wbase/users/show.html.erb +37 -0
  74. data/config/initializers/assets.rb +1 -3
  75. data/config/routes.rb +9 -0
  76. data/db/migrate/20161127212521_create_wbase_subscriptions.rb +17 -0
  77. data/db/migrate/20161127212831_create_wbase_plans.rb +15 -0
  78. data/db/migrate/20161127224117_create_wbase_ssl_verifications.rb +10 -0
  79. data/db/migrate/20161128022640_create_wbase_mail_events.rb +16 -0
  80. data/db/migrate/20161128031211_create_wbase_stripe_webhooks.rb +17 -0
  81. data/lib/wbase/engine.rb +37 -28
  82. data/lib/wbase/version.rb +1 -1
  83. data/test/controllers/wbase/mail_events_controller_test.rb +13 -0
  84. data/test/controllers/wbase/password_resets_controller_test.rb +13 -0
  85. data/test/controllers/wbase/sessions_controller_test.rb +13 -0
  86. data/test/controllers/wbase/stripe_webhooks_controller_test.rb +13 -0
  87. data/test/controllers/wbase/subscriptions_controller_test.rb +13 -0
  88. data/test/controllers/wbase/users_controller_test.rb +13 -0
  89. data/test/dummy/config/database.yml +4 -7
  90. data/test/dummy/db/development.sqlite3 +0 -0
  91. data/test/dummy/db/schema.rb +85 -0
  92. data/test/dummy/log/development.log +225 -0
  93. data/test/fixtures/wbase/mail_events.yml +38 -0
  94. data/test/fixtures/wbase/plans.yml +40 -0
  95. data/test/fixtures/wbase/stripe_webhooks.yml +41 -0
  96. data/test/fixtures/wbase/subscriptions.yml +46 -0
  97. data/test/jobs/wbase/activate_drip_subscriber_job_test.rb +9 -0
  98. data/test/jobs/wbase/create_drip_subscriber_job_job_test.rb +9 -0
  99. data/test/mailers/previews/wbase/admin_mailer_preview.rb +11 -0
  100. data/test/mailers/previews/wbase/password_reset_mailer_preview.rb +11 -0
  101. data/test/mailers/wbase/admin_mailer_test.rb +14 -0
  102. data/test/mailers/wbase/password_reset_mailer_test.rb +14 -0
  103. data/test/models/wbase/mail_event_test.rb +26 -0
  104. data/test/models/wbase/plan_test.rb +30 -0
  105. data/test/models/wbase/ssl_verification_test.rb +20 -0
  106. data/test/models/wbase/stripe_webhook_test.rb +27 -0
  107. data/test/models/wbase/subscription_test.rb +32 -0
  108. metadata +121 -12
  109. data/app/helpers/wbase/application_helper.rb +0 -4
  110. data/app/helpers/wbase/static_pages_helper.rb +0 -4
  111. data/app/views/wbase/static_pages/_map.html.erb +0 -17
  112. data/app/views/wbase/static_pages/_order_stats.html.erb +0 -28
  113. data/app/views/wbase/static_pages/_pricing.html.erb +0 -89
  114. data/app/views/wbase/static_pages/_stats.html.erb +0 -28
  115. data/app/views/wbase/static_pages/_testimonial.html.erb +0 -16
  116. data/app/views/wbase/static_pages/affiliate.html.erb +0 -54
  117. data/app/views/wbase/static_pages/faq.html.erb +0 -63
@@ -0,0 +1,318 @@
1
+ /**
2
+ * Theme: Ubold Admin Template
3
+ * Author: Coderthemes
4
+ * Module/App: Main Js
5
+ */
6
+
7
+
8
+ !function($) {
9
+ "use strict";
10
+
11
+ var Sidemenu = function() {
12
+ this.$body = $("body"),
13
+ this.$openLeftBtn = $(".open-left"),
14
+ this.$menuItem = $("#sidebar-menu a")
15
+ };
16
+ Sidemenu.prototype.openLeftBar = function() {
17
+ $("#wrapper").toggleClass("enlarged");
18
+ $("#wrapper").addClass("forced");
19
+
20
+ if($("#wrapper").hasClass("enlarged") && $("body").hasClass("fixed-left")) {
21
+ $("body").removeClass("fixed-left").addClass("fixed-left-void");
22
+ } else if(!$("#wrapper").hasClass("enlarged") && $("body").hasClass("fixed-left-void")) {
23
+ $("body").removeClass("fixed-left-void").addClass("fixed-left");
24
+ }
25
+
26
+ if($("#wrapper").hasClass("enlarged")) {
27
+ $(".left ul").removeAttr("style");
28
+ } else {
29
+ $(".subdrop").siblings("ul:first").show();
30
+ }
31
+
32
+ toggle_slimscroll(".slimscrollleft");
33
+ $("body").trigger("resize");
34
+ },
35
+ //menu item click
36
+ Sidemenu.prototype.menuItemClick = function(e) {
37
+ if(!$("#wrapper").hasClass("enlarged")){
38
+ if($(this).parent().hasClass("has_sub")) {
39
+
40
+ }
41
+ if(!$(this).hasClass("subdrop")) {
42
+ // hide any open menus and remove all other classes
43
+ $("ul",$(this).parents("ul:first")).slideUp(350);
44
+ $("a",$(this).parents("ul:first")).removeClass("subdrop");
45
+ $("#sidebar-menu .pull-right i").removeClass("md-remove").addClass("md-add");
46
+
47
+ // open our new menu and add the open class
48
+ $(this).next("ul").slideDown(350);
49
+ $(this).addClass("subdrop");
50
+ $(".pull-right i",$(this).parents(".has_sub:last")).removeClass("md-add").addClass("md-remove");
51
+ $(".pull-right i",$(this).siblings("ul")).removeClass("md-remove").addClass("md-add");
52
+ }else if($(this).hasClass("subdrop")) {
53
+ $(this).removeClass("subdrop");
54
+ $(this).next("ul").slideUp(350);
55
+ $(".pull-right i",$(this).parent()).removeClass("md-remove").addClass("md-add");
56
+ }
57
+ }
58
+ },
59
+
60
+ //init sidemenu
61
+ Sidemenu.prototype.init = function() {
62
+ var $this = this;
63
+
64
+ var ua = navigator.userAgent,
65
+ event = (ua.match(/iP/i)) ? "touchstart" : "click";
66
+
67
+ //bind on click
68
+ this.$openLeftBtn.on(event, function(e) {
69
+ e.stopPropagation();
70
+ $this.openLeftBar();
71
+ });
72
+
73
+ // LEFT SIDE MAIN NAVIGATION
74
+ $this.$menuItem.on(event, $this.menuItemClick);
75
+
76
+ // NAVIGATION HIGHLIGHT & OPEN PARENT
77
+ $("#sidebar-menu ul li.has_sub a.active").parents("li:last").children("a:first").addClass("active").trigger("click");
78
+ },
79
+
80
+ //init Sidemenu
81
+ $.Sidemenu = new Sidemenu, $.Sidemenu.Constructor = Sidemenu
82
+
83
+ }(window.jQuery),
84
+
85
+
86
+ function($) {
87
+ "use strict";
88
+
89
+ var FullScreen = function() {
90
+ this.$body = $("body"),
91
+ this.$fullscreenBtn = $("#btn-fullscreen")
92
+ };
93
+
94
+ //turn on full screen
95
+ // Thanks to http://davidwalsh.name/fullscreen
96
+ FullScreen.prototype.launchFullscreen = function(element) {
97
+ if(element.requestFullscreen) {
98
+ element.requestFullscreen();
99
+ } else if(element.mozRequestFullScreen) {
100
+ element.mozRequestFullScreen();
101
+ } else if(element.webkitRequestFullscreen) {
102
+ element.webkitRequestFullscreen();
103
+ } else if(element.msRequestFullscreen) {
104
+ element.msRequestFullscreen();
105
+ }
106
+ },
107
+ FullScreen.prototype.exitFullscreen = function() {
108
+ if(document.exitFullscreen) {
109
+ document.exitFullscreen();
110
+ } else if(document.mozCancelFullScreen) {
111
+ document.mozCancelFullScreen();
112
+ } else if(document.webkitExitFullscreen) {
113
+ document.webkitExitFullscreen();
114
+ }
115
+ },
116
+ //toggle screen
117
+ FullScreen.prototype.toggle_fullscreen = function() {
118
+ var $this = this;
119
+ var fullscreenEnabled = document.fullscreenEnabled || document.mozFullScreenEnabled || document.webkitFullscreenEnabled;
120
+ if(fullscreenEnabled) {
121
+ if(!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement && !document.msFullscreenElement) {
122
+ $this.launchFullscreen(document.documentElement);
123
+ } else{
124
+ $this.exitFullscreen();
125
+ }
126
+ }
127
+ },
128
+ //init sidemenu
129
+ FullScreen.prototype.init = function() {
130
+ var $this = this;
131
+ //bind
132
+ $this.$fullscreenBtn.on('click', function() {
133
+ $this.toggle_fullscreen();
134
+ });
135
+ },
136
+ //init FullScreen
137
+ $.FullScreen = new FullScreen, $.FullScreen.Constructor = FullScreen
138
+
139
+ }(window.jQuery),
140
+
141
+
142
+
143
+ //main app module
144
+ function($) {
145
+ "use strict";
146
+
147
+ var App = function() {
148
+ this.VERSION = "1.6.0",
149
+ this.AUTHOR = "Coderthemes",
150
+ this.SUPPORT = "coderthemes@gmail.com",
151
+ this.pageScrollElement = "html, body",
152
+ this.$body = $("body")
153
+ };
154
+
155
+ //on doc load
156
+ App.prototype.onDocReady = function(e) {
157
+ FastClick.attach(document.body);
158
+ resizefunc.push("initscrolls");
159
+ resizefunc.push("changeptype");
160
+
161
+ $('.animate-number').each(function(){
162
+ $(this).animateNumbers($(this).attr("data-value"), true, parseInt($(this).attr("data-duration")));
163
+ });
164
+
165
+ //RUN RESIZE ITEMS
166
+ $(window).resize(debounce(resizeitems,100));
167
+ $("body").trigger("resize");
168
+
169
+ // right side-bar toggle
170
+ $('.right-bar-toggle').on('click', function(e){
171
+
172
+ $('#wrapper').toggleClass('right-bar-enabled');
173
+ });
174
+
175
+
176
+ },
177
+ //initilizing
178
+ App.prototype.init = function() {
179
+ var $this = this;
180
+ //document load initialization
181
+ $(document).ready($this.onDocReady);
182
+ //init side bar - left
183
+ $.Sidemenu.init();
184
+ //init fullscreen
185
+ $.FullScreen.init();
186
+ },
187
+
188
+ $.App = new App, $.App.Constructor = App
189
+
190
+ }(window.jQuery),
191
+
192
+ //initializing main application module
193
+ function($) {
194
+ "use strict";
195
+ $.App.init();
196
+ }(window.jQuery);
197
+
198
+
199
+
200
+ /* ------------ some utility functions ----------------------- */
201
+ //this full screen
202
+ var toggle_fullscreen = function () {
203
+
204
+ }
205
+
206
+ function executeFunctionByName(functionName, context /*, args */) {
207
+ var args = [].slice.call(arguments).splice(2);
208
+ var namespaces = functionName.split(".");
209
+ var func = namespaces.pop();
210
+ for(var i = 0; i < namespaces.length; i++) {
211
+ context = context[namespaces[i]];
212
+ }
213
+ return context[func].apply(this, args);
214
+ }
215
+ var w,h,dw,dh;
216
+ var changeptype = function(){
217
+ w = $(window).width();
218
+ h = $(window).height();
219
+ dw = $(document).width();
220
+ dh = $(document).height();
221
+
222
+ if(jQuery.browser.mobile === true){
223
+ $("body").addClass("mobile").removeClass("fixed-left");
224
+ }
225
+
226
+ if(!$("#wrapper").hasClass("forced")){
227
+ if(w > 990){
228
+ $("body").removeClass("smallscreen").addClass("widescreen");
229
+ $("#wrapper").removeClass("enlarged");
230
+ }else{
231
+ $("body").removeClass("widescreen").addClass("smallscreen");
232
+ $("#wrapper").addClass("enlarged");
233
+ $(".left ul").removeAttr("style");
234
+ }
235
+ if($("#wrapper").hasClass("enlarged") && $("body").hasClass("fixed-left")){
236
+ $("body").removeClass("fixed-left").addClass("fixed-left-void");
237
+ }else if(!$("#wrapper").hasClass("enlarged") && $("body").hasClass("fixed-left-void")){
238
+ $("body").removeClass("fixed-left-void").addClass("fixed-left");
239
+ }
240
+
241
+ }
242
+ toggle_slimscroll(".slimscrollleft");
243
+ }
244
+
245
+
246
+ var debounce = function(func, wait, immediate) {
247
+ var timeout, result;
248
+ return function() {
249
+ var context = this, args = arguments;
250
+ var later = function() {
251
+ timeout = null;
252
+ if (!immediate) result = func.apply(context, args);
253
+ };
254
+ var callNow = immediate && !timeout;
255
+ clearTimeout(timeout);
256
+ timeout = setTimeout(later, wait);
257
+ if (callNow) result = func.apply(context, args);
258
+ return result;
259
+ };
260
+ }
261
+
262
+ function resizeitems(){
263
+ if($.isArray(resizefunc)){
264
+ for (i = 0; i < resizefunc.length; i++) {
265
+ window[resizefunc[i]]();
266
+ }
267
+ }
268
+ }
269
+
270
+ function initscrolls(){
271
+ if(jQuery.browser.mobile !== true){
272
+ //SLIM SCROLL
273
+ $('.slimscroller').slimscroll({
274
+ height: 'auto',
275
+ size: "5px"
276
+ });
277
+
278
+ $('.slimscrollleft').slimScroll({
279
+ height: 'auto',
280
+ position: 'right',
281
+ size: "5px",
282
+ color: '#98a6ad',
283
+ wheelStep: 5
284
+ });
285
+ }
286
+ }
287
+ function toggle_slimscroll(item){
288
+ if($("#wrapper").hasClass("enlarged")){
289
+ $(item).css("overflow","inherit").parent().css("overflow","inherit");
290
+ $(item). siblings(".slimScrollBar").css("visibility","hidden");
291
+ }else{
292
+ $(item).css("overflow","hidden").parent().css("overflow","hidden");
293
+ $(item). siblings(".slimScrollBar").css("visibility","visible");
294
+ }
295
+ }
296
+
297
+ var wow = new WOW(
298
+ {
299
+ boxClass: 'wow', // animated element css class (default is wow)
300
+ animateClass: 'animated', // animation css class (default is animated)
301
+ offset: 50, // distance to the element when triggering the animation (default is 0)
302
+ mobile: false // trigger animations on mobile devices (true is default)
303
+ }
304
+ );
305
+ wow.init();
306
+
307
+ // === following js will activate the menu in left side bar based on url ====
308
+ $(document).ready(function() {
309
+ $("#sidebar-menu a").each(function() {
310
+ if (this.href == window.location.href) {
311
+ $(this).addClass("active");
312
+ $(this).parent().addClass("active"); // add active to li of the current link
313
+ $(this).parent().parent().prev().addClass("active"); // add active class to an anchor
314
+ $(this).parent().parent().prev().click(); // click the item to make it drop
315
+ }
316
+ });
317
+ });
318
+