easy_cms 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +5 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +31 -0
  9. data/Rakefile +6 -0
  10. data/bin/console +14 -0
  11. data/bin/setup +8 -0
  12. data/easy_cms.gemspec +36 -0
  13. data/lib/easy_cms.rb +5 -0
  14. data/lib/easy_cms/version.rb +3 -0
  15. data/lib/generators/easy_cms/model/model_generator.rb +71 -0
  16. data/lib/generators/easy_cms/model/templates/controllers/model_controller.erb +55 -0
  17. data/lib/generators/easy_cms/model/templates/layouts/_form.html.erb +26 -0
  18. data/lib/generators/easy_cms/model/templates/layouts/edit.html.erb +13 -0
  19. data/lib/generators/easy_cms/model/templates/layouts/index.html.erb +37 -0
  20. data/lib/generators/easy_cms/model/templates/layouts/item_navegation.html.erb +19 -0
  21. data/lib/generators/easy_cms/model/templates/layouts/new.html.erb +13 -0
  22. data/lib/generators/easy_cms/model/templates/layouts/show.html.erb +22 -0
  23. data/lib/generators/easy_cms/namespace/namespace_generator.rb +45 -0
  24. data/lib/generators/easy_cms/namespace/templates/assets/base_javascript.erb +3 -0
  25. data/lib/generators/easy_cms/namespace/templates/assets/base_scss.erb +1 -0
  26. data/lib/generators/easy_cms/namespace/templates/controllers/base_controller.erb +5 -0
  27. data/lib/generators/easy_cms/namespace/templates/layouts/layout.html.erb +71 -0
  28. data/lib/generators/resource_helpers.rb +31 -0
  29. data/vendor/assets/javascripts/.keep +0 -0
  30. data/vendor/assets/javascripts/easy_cms/base.js +351 -0
  31. data/vendor/assets/javascripts/easy_cms/bootstrap-notify.js +404 -0
  32. data/vendor/assets/javascripts/easy_cms/bootstrap.min.js +7 -0
  33. data/vendor/assets/javascripts/easy_cms/chartist.min.js +9 -0
  34. data/vendor/assets/javascripts/easy_cms/demo.js +183 -0
  35. data/vendor/assets/javascripts/easy_cms/jquery-3.1.0.min.js +4 -0
  36. data/vendor/assets/javascripts/easy_cms/material.min.js +1 -0
  37. data/vendor/assets/stylesheets/.keep +0 -0
  38. data/vendor/assets/stylesheets/easy_cms/bootstrap.min.css +5 -0
  39. data/vendor/assets/stylesheets/easy_cms/demo.css +64 -0
  40. data/vendor/assets/stylesheets/easy_cms/easy_cms.css +5065 -0
  41. data/vendor/assets/stylesheets/easy_cms/easy_cms_sass.scss +51 -0
  42. data/vendor/assets/stylesheets/easy_cms/md/_alerts.scss +57 -0
  43. data/vendor/assets/stylesheets/easy_cms/md/_buttons.scss +259 -0
  44. data/vendor/assets/stylesheets/easy_cms/md/_cards.scss +337 -0
  45. data/vendor/assets/stylesheets/easy_cms/md/_chartist.scss +254 -0
  46. data/vendor/assets/stylesheets/easy_cms/md/_checkboxes.scss +193 -0
  47. data/vendor/assets/stylesheets/easy_cms/md/_colors.scss +325 -0
  48. data/vendor/assets/stylesheets/easy_cms/md/_dialogs.scss +99 -0
  49. data/vendor/assets/stylesheets/easy_cms/md/_dropdown.scss +67 -0
  50. data/vendor/assets/stylesheets/easy_cms/md/_footers.scss +44 -0
  51. data/vendor/assets/stylesheets/easy_cms/md/_forms.scss +58 -0
  52. data/vendor/assets/stylesheets/easy_cms/md/_inputs-size.scss +223 -0
  53. data/vendor/assets/stylesheets/easy_cms/md/_inputs.scss +394 -0
  54. data/vendor/assets/stylesheets/easy_cms/md/_misc.scss +115 -0
  55. data/vendor/assets/stylesheets/easy_cms/md/_mixins.scss +422 -0
  56. data/vendor/assets/stylesheets/easy_cms/md/_navbars.scss +329 -0
  57. data/vendor/assets/stylesheets/easy_cms/md/_pills.scss +117 -0
  58. data/vendor/assets/stylesheets/easy_cms/md/_popups.scss +77 -0
  59. data/vendor/assets/stylesheets/easy_cms/md/_radios.scss +114 -0
  60. data/vendor/assets/stylesheets/easy_cms/md/_responsive.scss +453 -0
  61. data/vendor/assets/stylesheets/easy_cms/md/_ripples.scss +40 -0
  62. data/vendor/assets/stylesheets/easy_cms/md/_shadows.scss +138 -0
  63. data/vendor/assets/stylesheets/easy_cms/md/_sidebar-and-main-panel.scss +260 -0
  64. data/vendor/assets/stylesheets/easy_cms/md/_tables.scss +45 -0
  65. data/vendor/assets/stylesheets/easy_cms/md/_tabs.scss +53 -0
  66. data/vendor/assets/stylesheets/easy_cms/md/_togglebutton.scss +87 -0
  67. data/vendor/assets/stylesheets/easy_cms/md/_typography.scss +75 -0
  68. data/vendor/assets/stylesheets/easy_cms/md/_variables.scss +1127 -0
  69. data/vendor/assets/stylesheets/easy_cms/md/mixins/_chartist.scss +89 -0
  70. data/vendor/assets/stylesheets/easy_cms/md/mixins/_transparency.scss +20 -0
  71. data/vendor/assets/stylesheets/easy_cms/md/mixins/_vendor-prefixes.scss +185 -0
  72. data/vendor/assets/stylesheets/easy_cms/md/plugins/_animate.scss +227 -0
  73. data/vendor/assets/stylesheets/easy_cms/md/plugins/_plugin-nouislider.scss +161 -0
  74. metadata +174 -0
@@ -0,0 +1,19 @@
1
+
2
+ <li>
3
+ <a data-toggle="collapse" href="#<%= options_params[:model_plu] %>NavItem" class="collapsed" aria-expanded="false">
4
+ <i class="material-icons">image</i>
5
+ <p><%= options_params[:model_cap_plu] %>
6
+ <b class="caret"></b>
7
+ </p>
8
+ </a>
9
+ <div class="collapse" id="<%= options_params[:model_plu] %>NavItem" aria-expanded="false" style="height: 296px;">
10
+ <ul class="nav">
11
+ <li class="active">
12
+ <%%= link_to "List", <%= options_params[:namespace]%>_<%= options_params[:model_plu] %>_path %>
13
+ </li>
14
+ <li>
15
+ <%%= link_to "New", new_<%= options_params[:namespace]%>_<%= options_params[:model] %>_path %>
16
+ </li>
17
+ </ul>
18
+ </div>
19
+ </li>
@@ -0,0 +1,13 @@
1
+ <div class="row">
2
+ <div class="col-md-12">
3
+ <div class="card">
4
+ <div class="card-header" data-background-color="purple">
5
+ <h4 class="title">New <%= options_params[:model_cap] %></h4>
6
+ </div>
7
+
8
+ <div class="card-content">
9
+ <%%= render 'form', <%= options_params[:model] %>: @<%= options_params[:model] %> %>
10
+ </div>
11
+ </div>
12
+ </div>
13
+ </div>
@@ -0,0 +1,22 @@
1
+ <div class="col-md-12">
2
+ <div class="card card-nav-tabs">
3
+ <div class="card-header" data-background-color="purple">
4
+ <h4 class="title"><%= options_params[:model_cap] %></h4>
5
+ </div>
6
+
7
+ <div class="card-content"><%- model_attributes.each do |a| %>
8
+ <div class="row">
9
+ <div class="col-md-12 text-center">
10
+ <p><strong><%= a[:name].capitalize %>:</strong> <%%= @<%= options_params[:model] %>.<%= a[:name] %>%></p>
11
+ </div>
12
+ </div><% end %>
13
+
14
+ <div class="row">
15
+ <div class="col-md-12 text-center">
16
+ <%%= link_to 'Edit', edit_<%= options_params[:namespace] %>_<%= options_params[:model] %>_path(@<%= options_params[:model] %>), class: "btn btn-primary" %>
17
+ <%%= link_to 'Back', <%= options_params[:namespace] %>_<%= options_params[:model_plu] %>_path %>
18
+ </div>
19
+ </div>
20
+ </div>
21
+ </div>
22
+ </div>
@@ -0,0 +1,45 @@
1
+ require 'generators/resource_helpers'
2
+
3
+ module EasyCms
4
+ module Generators
5
+ class NamespaceGenerator < Rails::Generators::Base
6
+ include ResourceHelpers
7
+
8
+ source_root File.expand_path("../templates", __FILE__)
9
+ desc "This generator create a Namespace to CMS"
10
+ argument :namespace, :type => :string, :required => :true
11
+
12
+ def generate_base_controller
13
+ file_name = "app/controllers/#{namespace}/base_controller.rb"
14
+ template './controllers/base_controller.erb', file_name, options_params unless File.exist?(file_name)
15
+ end
16
+
17
+ def generate_layout
18
+ file_name = "app/views/layouts/#{namespace}.html.erb"
19
+ template "./layouts/layout.html.erb", file_name, options_params unless File.exist?(file_name)
20
+ end
21
+
22
+ def generate_assets
23
+ file_name_js = "app/assets/javascripts/#{namespace}.js"
24
+ file_name_stylesheet = "app/assets/stylesheets/#{namespace}.scss"
25
+
26
+ template "./assets/base_javascript.erb", file_name_js unless File.exist?(file_name_js)
27
+ template "./assets/base_scss.erb", file_name_stylesheet unless File.exist?(file_name_stylesheet)
28
+ end
29
+
30
+ def add_initializers_assets
31
+ prepend_to_file 'config/initializers/assets.rb' do
32
+ "Rails.application.config.assets.precompile += %w( #{namespace}.js )\n"
33
+ end
34
+ prepend_to_file 'config/initializers/assets.rb' do
35
+ "Rails.application.config.assets.precompile += %w( #{namespace}.scss )\n"
36
+ end
37
+ end
38
+
39
+ private
40
+ def options_params
41
+ { :namespace => namespace }
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,3 @@
1
+ //= require jquery
2
+ //= require jquery_ujs
3
+ //= require easy_cms/base
@@ -0,0 +1 @@
1
+ @import "easy_cms/easy_cms_sass";
@@ -0,0 +1,5 @@
1
+ class <%= config[:namespace].capitalize %>::BaseController < ApplicationController
2
+ # If you have setup Devise gem uncomment the following line
3
+ # before_action :authenticate_<%= config[:namespace].singularize %>!
4
+ layout '<%= config[:namespace].singularize %>'
5
+ end
@@ -0,0 +1,71 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Title page</title>
5
+ <%%= csrf_meta_tags %>
6
+
7
+ <%%= stylesheet_link_tag "<%= config[:namespace] %>", media: 'all', 'data-turbolinks-track': 'reload' %>
8
+ <%%= javascript_include_tag "<%= config[:namespace] %>", 'data-turbolinks-track': 'reload' %>
9
+ <link href="http://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css" rel="stylesheet">
10
+ <link href='http://fonts.googleapis.com/css?family=Roboto:400,700,300|Material+Icons' rel='stylesheet' type='text/css'>
11
+ </head>
12
+
13
+ <body>
14
+ <div class="wrapper">
15
+ <div class="sidebar" data-color="purple" data-image="../assets/img/sidebar-1.jpg">
16
+ <div class="logo">
17
+ <a href="https://github.com/14tinchov/easy_cms" class="simple-text">
18
+ Easy Cms
19
+ </a>
20
+ </div>
21
+
22
+ <div class="sidebar-wrapper">
23
+ <ul class="nav">
24
+ <!-- Easy CMS - nav - don't delete this line -->
25
+ </ul>
26
+ </div>
27
+ </div>
28
+
29
+ <div class="main-panel">
30
+ <nav class="navbar navbar-transparent navbar-absolute">
31
+ <div class="container-fluid">
32
+ <div class="navbar-header">
33
+ <button type="button" class="navbar-toggle" data-toggle="collapse">
34
+ <span class="sr-only">Toggle navigation</span>
35
+ <span class="icon-bar"></span>
36
+ <span class="icon-bar"></span>
37
+ <span class="icon-bar"></span>
38
+ </button>
39
+ </div>
40
+ <div class="collapse navbar-collapse">
41
+ <ul class="nav navbar-nav navbar-right">
42
+ <li class="dropdown">
43
+ <a href="#" class="dropdown-toggle" data-toggle="dropdown">
44
+ <i class="material-icons">person</i>
45
+ </a>
46
+ <ul class="dropdown-menu">
47
+ <li><a href="#">Log Out</a></li>
48
+ </ul>
49
+ </li>
50
+ </ul>
51
+ </div>
52
+ </div>
53
+ </nav>
54
+
55
+ <div class="content">
56
+ <div class="container-fluid">
57
+ <%%= yield %>
58
+ </div>
59
+ </div>
60
+
61
+ <footer class="footer">
62
+ <div class="container-fluid">
63
+ <p class="copyright pull-right">
64
+ </script> <a href="#">Easy CMS</a>
65
+ </p>
66
+ </div>
67
+ </footer>
68
+ </div>
69
+ </div>
70
+ </body>
71
+ </html>
@@ -0,0 +1,31 @@
1
+ module EasyCms
2
+ module Generators
3
+ module ResourceHelpers
4
+ private
5
+ def build_path(template_path)
6
+ File.join(File.dirname(__FILE__), template_path)
7
+ end
8
+
9
+ def read_file(path)
10
+ b = binding
11
+ content = ERB.new(File.read(path)).result b
12
+ content
13
+ end
14
+
15
+ def get_model_attributes(name_capitalize_model)
16
+ eval("
17
+ begin
18
+ #{name_capitalize_model}.columns.inject([]) do |rtn, model|
19
+ unless ['id', 'created_at', 'updated_at'].include?(model.name)
20
+ rtn << { :name => model.name, :type => model.type }
21
+ end
22
+ rtn
23
+ end
24
+ rescue NameError => e
25
+ return []
26
+ end
27
+ ")
28
+ end
29
+ end
30
+ end
31
+ end
File without changes
@@ -0,0 +1,351 @@
1
+ //= require easy_cms/bootstrap.min
2
+ //= require easy_cms/material.min
3
+ //= require easy_cms/chartist.min
4
+ //= require easy_cms/bootstrap-notify
5
+ /*!
6
+
7
+ =========================================================
8
+ * Material Dashboard - v1.1.1
9
+ =========================================================
10
+
11
+ * Product Page: http://www.creative-tim.com/product/material-dashboard
12
+ * Copyright 2017 Creative Tim (http://www.creative-tim.com)
13
+ * Licensed under MIT (https://github.com/creativetimofficial/material-dashboard/blob/master/LICENSE.md)
14
+
15
+ =========================================================
16
+
17
+ * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
18
+
19
+ */
20
+
21
+ // Material Dashboard Wizard Functions
22
+ var searchVisible = 0;
23
+ var transparent = true;
24
+
25
+ var transparentDemo = true;
26
+ var fixedTop = false;
27
+
28
+ var mobile_menu_visible = 0,
29
+ mobile_menu_initialized = false,
30
+ toggle_initialized = false,
31
+ bootstrap_nav_initialized = false;
32
+
33
+ var seq = 0, delays = 80, durations = 500;
34
+ var seq2 = 0, delays2 = 80, durations2 = 500;
35
+
36
+
37
+ $(document).ready(function(){
38
+
39
+ $sidebar = $('.sidebar');
40
+
41
+ $.material.init();
42
+
43
+ md.initSidebarsCheck();
44
+
45
+ window_width = $(window).width();
46
+
47
+ // check if there is an image set for the sidebar's background
48
+ md.checkSidebarImage();
49
+
50
+ // Activate the tooltips
51
+ $('[rel="tooltip"]').tooltip();
52
+
53
+
54
+ $('.form-control').on("focus", function(){
55
+ $(this).parent('.input-group').addClass("input-group-focus");
56
+ }).on("blur", function(){
57
+ $(this).parent(".input-group").removeClass("input-group-focus");
58
+ });
59
+
60
+ });
61
+
62
+ // activate collapse right menu when the windows is resized
63
+ $(window).resize(function(){
64
+ md.initSidebarsCheck();
65
+
66
+ // reset the seq for charts drawing animations
67
+ seq = seq2 = 0;
68
+
69
+ });
70
+
71
+ md = {
72
+ misc:{
73
+ navbar_menu_visible: 0,
74
+ active_collapse: true,
75
+ disabled_collapse_init: 0,
76
+ },
77
+
78
+ checkSidebarImage: function(){
79
+ $sidebar = $('.sidebar');
80
+ image_src = $sidebar.data('image');
81
+
82
+ if(image_src !== undefined){
83
+ sidebar_container = '<div class="sidebar-background" style="background-image: url(' + image_src + ') "/>'
84
+ $sidebar.append(sidebar_container);
85
+ }
86
+ },
87
+
88
+ initSidebarsCheck: function(){
89
+ if($(window).width() <= 991){
90
+ if($sidebar.length != 0){
91
+ md.initRightMenu();
92
+
93
+ } else {
94
+ md.initBootstrapNavbarMenu();
95
+ }
96
+ }
97
+
98
+ },
99
+
100
+ checkScrollForTransparentNavbar: debounce(function() {
101
+ if($(document).scrollTop() > 260 ) {
102
+ if(transparent) {
103
+ transparent = false;
104
+ $('.navbar-color-on-scroll').removeClass('navbar-transparent');
105
+ }
106
+ } else {
107
+ if( !transparent ) {
108
+ transparent = true;
109
+ $('.navbar-color-on-scroll').addClass('navbar-transparent');
110
+ }
111
+ }
112
+ }, 17),
113
+
114
+
115
+ initRightMenu: debounce(function(){
116
+ $sidebar_wrapper = $('.sidebar-wrapper');
117
+
118
+ if(!mobile_menu_initialized){
119
+ $navbar = $('nav').find('.navbar-collapse').first().clone(true);
120
+
121
+ nav_content = '';
122
+ mobile_menu_content = '';
123
+
124
+ $navbar.children('ul').each(function(){
125
+
126
+ content_buff = $(this).html();
127
+ nav_content = nav_content + content_buff;
128
+ });
129
+
130
+ nav_content = '<ul class="nav nav-mobile-menu">' + nav_content + '</ul>';
131
+
132
+ $navbar_form = $('nav').find('.navbar-form').clone(true);
133
+
134
+ $sidebar_nav = $sidebar_wrapper.find(' > .nav');
135
+
136
+ // insert the navbar form before the sidebar list
137
+ $nav_content = $(nav_content);
138
+ $nav_content.insertBefore($sidebar_nav);
139
+ $navbar_form.insertBefore($nav_content);
140
+
141
+ $(".sidebar-wrapper .dropdown .dropdown-menu > li > a").click(function(event) {
142
+ event.stopPropagation();
143
+
144
+ });
145
+
146
+ mobile_menu_initialized = true;
147
+ } else {
148
+ if($(window).width() > 991){
149
+ // reset all the additions that we made for the sidebar wrapper only if the screen is bigger than 991px
150
+ $sidebar_wrapper.find('.navbar-form').remove();
151
+ $sidebar_wrapper.find('.nav-mobile-menu').remove();
152
+
153
+ mobile_menu_initialized = false;
154
+ }
155
+ }
156
+
157
+ if(!toggle_initialized){
158
+ $toggle = $('.navbar-toggle');
159
+
160
+ $toggle.click(function (){
161
+
162
+ if(mobile_menu_visible == 1) {
163
+ $('html').removeClass('nav-open');
164
+
165
+ $('.close-layer').remove();
166
+ setTimeout(function(){
167
+ $toggle.removeClass('toggled');
168
+ }, 400);
169
+
170
+ mobile_menu_visible = 0;
171
+ } else {
172
+ setTimeout(function(){
173
+ $toggle.addClass('toggled');
174
+ }, 430);
175
+
176
+
177
+ main_panel_height = $('.main-panel')[0].scrollHeight;
178
+ $layer = $('<div class="close-layer"></div>');
179
+ $layer.css('height',main_panel_height + 'px');
180
+ $layer.appendTo(".main-panel");
181
+
182
+ setTimeout(function(){
183
+ $layer.addClass('visible');
184
+ }, 100);
185
+
186
+ $layer.click(function() {
187
+ $('html').removeClass('nav-open');
188
+ mobile_menu_visible = 0;
189
+
190
+ $layer.removeClass('visible');
191
+
192
+ setTimeout(function(){
193
+ $layer.remove();
194
+ $toggle.removeClass('toggled');
195
+
196
+ }, 400);
197
+ });
198
+
199
+ $('html').addClass('nav-open');
200
+ mobile_menu_visible = 1;
201
+
202
+ }
203
+ });
204
+
205
+ toggle_initialized = true;
206
+ }
207
+ }, 500),
208
+
209
+
210
+ initBootstrapNavbarMenu: debounce(function(){
211
+
212
+ if(!bootstrap_nav_initialized){
213
+ $navbar = $('nav').find('.navbar-collapse').first().clone(true);
214
+
215
+ nav_content = '';
216
+ mobile_menu_content = '';
217
+
218
+ //add the content from the regular header to the mobile menu
219
+ $navbar.children('ul').each(function(){
220
+ content_buff = $(this).html();
221
+ nav_content = nav_content + content_buff;
222
+ });
223
+
224
+ nav_content = '<ul class="nav nav-mobile-menu">' + nav_content + '</ul>';
225
+
226
+ $navbar.html(nav_content);
227
+ $navbar.addClass('off-canvas-sidebar');
228
+
229
+ // append it to the body, so it will come from the right side of the screen
230
+ $('body').append($navbar);
231
+
232
+ $toggle = $('.navbar-toggle');
233
+
234
+ $navbar.find('a').removeClass('btn btn-round btn-default');
235
+ $navbar.find('button').removeClass('btn-round btn-fill btn-info btn-primary btn-success btn-danger btn-warning btn-neutral');
236
+ $navbar.find('button').addClass('btn-simple btn-block');
237
+
238
+ $toggle.click(function (){
239
+ if(mobile_menu_visible == 1) {
240
+ $('html').removeClass('nav-open');
241
+
242
+ $('.close-layer').remove();
243
+ setTimeout(function(){
244
+ $toggle.removeClass('toggled');
245
+ }, 400);
246
+
247
+ mobile_menu_visible = 0;
248
+ } else {
249
+ setTimeout(function(){
250
+ $toggle.addClass('toggled');
251
+ }, 430);
252
+
253
+ $layer = $('<div class="close-layer"></div>');
254
+ $layer.appendTo(".wrapper-full-page");
255
+
256
+ setTimeout(function(){
257
+ $layer.addClass('visible');
258
+ }, 100);
259
+
260
+
261
+ $layer.click(function() {
262
+ $('html').removeClass('nav-open');
263
+ mobile_menu_visible = 0;
264
+
265
+ $layer.removeClass('visible');
266
+
267
+ setTimeout(function(){
268
+ $layer.remove();
269
+ $toggle.removeClass('toggled');
270
+
271
+ }, 400);
272
+ });
273
+
274
+ $('html').addClass('nav-open');
275
+ mobile_menu_visible = 1;
276
+
277
+ }
278
+
279
+ });
280
+ bootstrap_nav_initialized = true;
281
+ }
282
+ }, 500),
283
+
284
+ startAnimationForLineChart: function(chart){
285
+
286
+ chart.on('draw', function(data) {
287
+ if(data.type === 'line' || data.type === 'area') {
288
+ data.element.animate({
289
+ d: {
290
+ begin: 600,
291
+ dur: 700,
292
+ from: data.path.clone().scale(1, 0).translate(0, data.chartRect.height()).stringify(),
293
+ to: data.path.clone().stringify(),
294
+ easing: Chartist.Svg.Easing.easeOutQuint
295
+ }
296
+ });
297
+ } else if(data.type === 'point') {
298
+ seq++;
299
+ data.element.animate({
300
+ opacity: {
301
+ begin: seq * delays,
302
+ dur: durations,
303
+ from: 0,
304
+ to: 1,
305
+ easing: 'ease'
306
+ }
307
+ });
308
+ }
309
+ });
310
+
311
+ seq = 0;
312
+ },
313
+ startAnimationForBarChart: function(chart){
314
+
315
+ chart.on('draw', function(data) {
316
+ if(data.type === 'bar'){
317
+ seq2++;
318
+ data.element.animate({
319
+ opacity: {
320
+ begin: seq2 * delays2,
321
+ dur: durations2,
322
+ from: 0,
323
+ to: 1,
324
+ easing: 'ease'
325
+ }
326
+ });
327
+ }
328
+ });
329
+
330
+ seq2 = 0;
331
+ }
332
+ }
333
+
334
+
335
+ // Returns a function, that, as long as it continues to be invoked, will not
336
+ // be triggered. The function will be called after it stops being called for
337
+ // N milliseconds. If `immediate` is passed, trigger the function on the
338
+ // leading edge, instead of the trailing.
339
+
340
+ function debounce(func, wait, immediate) {
341
+ var timeout;
342
+ return function() {
343
+ var context = this, args = arguments;
344
+ clearTimeout(timeout);
345
+ timeout = setTimeout(function() {
346
+ timeout = null;
347
+ if (!immediate) func.apply(context, args);
348
+ }, wait);
349
+ if (immediate && !timeout) func.apply(context, args);
350
+ };
351
+ };