keppler 2.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.
Files changed (386) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +6 -0
  3. data/README.md +43 -0
  4. data/Rakefile +2 -0
  5. data/bin/console +15 -0
  6. data/bin/keppler +5 -0
  7. data/bin/setup +7 -0
  8. data/installer/core/Gemfile +113 -0
  9. data/installer/core/Guardfile +18 -0
  10. data/installer/core/README.md +87 -0
  11. data/installer/core/Rakefile +6 -0
  12. data/installer/core/_config.yml +1 -0
  13. data/installer/core/app/assets/images/admin/favicon.png +0 -0
  14. data/installer/core/app/assets/images/admin/logo.png +0 -0
  15. data/installer/core/app/assets/images/admin/logo2.png +0 -0
  16. data/installer/core/app/assets/images/admin/profile-menu.jpg +0 -0
  17. data/installer/core/app/assets/images/admin/search.png +0 -0
  18. data/installer/core/app/assets/images/admin/slice-icon-orange.png +0 -0
  19. data/installer/core/app/assets/images/admin/slice-icon.png +0 -0
  20. data/installer/core/app/assets/images/admin/slice.png +0 -0
  21. data/installer/core/app/assets/images/admin/slice_white.png +0 -0
  22. data/installer/core/app/assets/images/admin/space.png +0 -0
  23. data/installer/core/app/assets/images/app/Home_Keppler.png +0 -0
  24. data/installer/core/app/assets/images/app/Home_Keppler2.png +0 -0
  25. data/installer/core/app/assets/images/app/keppler-front.png +0 -0
  26. data/installer/core/app/assets/images/app/slice-front.png +0 -0
  27. data/installer/core/app/assets/javascripts/admin/application.coffee +15 -0
  28. data/installer/core/app/assets/javascripts/admin/dropdown_top.js +7 -0
  29. data/installer/core/app/assets/javascripts/admin/file_upload.coffee +21 -0
  30. data/installer/core/app/assets/javascripts/admin/img_preview.js +18 -0
  31. data/installer/core/app/assets/javascripts/admin/main.coffee +42 -0
  32. data/installer/core/app/assets/javascripts/admin/notification.js +11 -0
  33. data/installer/core/app/assets/javascripts/admin/preview_template.js +21 -0
  34. data/installer/core/app/assets/javascripts/admin/sidebar.js +20 -0
  35. data/installer/core/app/assets/javascripts/admin/sort.coffee +8 -0
  36. data/installer/core/app/assets/javascripts/app/application.js.coffee +5 -0
  37. data/installer/core/app/assets/javascripts/app/front.js +129 -0
  38. data/installer/core/app/assets/javascripts/app/google_analytics.js.coffee +5 -0
  39. data/installer/core/app/assets/javascripts/ckeditor/config.js +130 -0
  40. data/installer/core/app/assets/javascripts/keppler_ga_dashboard/view-selector2.js +196 -0
  41. data/installer/core/app/assets/javascripts/vue_admin/index.js +87 -0
  42. data/installer/core/app/assets/stylesheets/admin/application.scss +43 -0
  43. data/installer/core/app/assets/stylesheets/admin/components/layouts/_footer.scss +5 -0
  44. data/installer/core/app/assets/stylesheets/admin/components/layouts/_settings.scss +35 -0
  45. data/installer/core/app/assets/stylesheets/admin/components/module/_show.scss +0 -0
  46. data/installer/core/app/assets/stylesheets/admin/components/navigation/_navbar.scss +79 -0
  47. data/installer/core/app/assets/stylesheets/admin/components/navigation/_sidebar.scss +91 -0
  48. data/installer/core/app/assets/stylesheets/admin/components/paginator/_paginator.scss +53 -0
  49. data/installer/core/app/assets/stylesheets/admin/pages/_devise.scss +162 -0
  50. data/installer/core/app/assets/stylesheets/admin/pages/_files.scss +83 -0
  51. data/installer/core/app/assets/stylesheets/admin/pages/_form.scss +163 -0
  52. data/installer/core/app/assets/stylesheets/admin/pages/_header.scss +34 -0
  53. data/installer/core/app/assets/stylesheets/admin/pages/_index.scss +331 -0
  54. data/installer/core/app/assets/stylesheets/admin/pages/_listing.scss +29 -0
  55. data/installer/core/app/assets/stylesheets/admin/pages/_navbar.scss +36 -0
  56. data/installer/core/app/assets/stylesheets/admin/pages/_pageslide.scss +125 -0
  57. data/installer/core/app/assets/stylesheets/admin/pages/_preloader.scss +283 -0
  58. data/installer/core/app/assets/stylesheets/admin/pages/_search.scss +220 -0
  59. data/installer/core/app/assets/stylesheets/admin/pages/_show.scss +17 -0
  60. data/installer/core/app/assets/stylesheets/admin/pages/_sidebar.scss +64 -0
  61. data/installer/core/app/assets/stylesheets/admin/pages/_switchs.scss +47 -0
  62. data/installer/core/app/assets/stylesheets/admin/pages/_themes.scss +74 -0
  63. data/installer/core/app/assets/stylesheets/admin/utils/_base.scss +66 -0
  64. data/installer/core/app/assets/stylesheets/admin/utils/_mixins.scss +26 -0
  65. data/installer/core/app/assets/stylesheets/admin/utils/_theme.scss +94 -0
  66. data/installer/core/app/assets/stylesheets/admin/utils/_variables.scss +79 -0
  67. data/installer/core/app/assets/stylesheets/app/application.scss +29 -0
  68. data/installer/core/app/assets/stylesheets/app/base/_base_project.scss +17 -0
  69. data/installer/core/app/assets/stylesheets/app/base/_typography.scss +1 -0
  70. data/installer/core/app/assets/stylesheets/app/components/_buttons.scss +0 -0
  71. data/installer/core/app/assets/stylesheets/app/components/_inputs.scss +0 -0
  72. data/installer/core/app/assets/stylesheets/app/components/_navbar.scss +21 -0
  73. data/installer/core/app/assets/stylesheets/app/layout/_container.scss +0 -0
  74. data/installer/core/app/assets/stylesheets/app/layout/_footer.scss +15 -0
  75. data/installer/core/app/assets/stylesheets/app/layout/_header.scss +0 -0
  76. data/installer/core/app/assets/stylesheets/app/pages/_front.sass +58 -0
  77. data/installer/core/app/assets/stylesheets/app/plugins/_bootstrap_override.scss +37 -0
  78. data/installer/core/app/assets/stylesheets/app/plugins/_font_awesome.scss +2 -0
  79. data/installer/core/app/assets/stylesheets/app/plugins/_keppler.scss +54 -0
  80. data/installer/core/app/assets/stylesheets/app/plugins/_npogress.scss +2 -0
  81. data/installer/core/app/assets/stylesheets/app/utils/_mixins.scss +18 -0
  82. data/installer/core/app/assets/stylesheets/app/utils/_variables.scss +28 -0
  83. data/installer/core/app/assets/stylesheets/errors/application.scss +3 -0
  84. data/installer/core/app/assets/stylesheets/errors/errors.scss +120 -0
  85. data/installer/core/app/assets/stylesheets/vendor/admin-lte/_skin-blue.scss +141 -0
  86. data/installer/core/app/controllers/admin/admin_controller.rb +72 -0
  87. data/installer/core/app/controllers/admin/customizes_controller.rb +109 -0
  88. data/installer/core/app/controllers/admin/meta_tags_controller.rb +124 -0
  89. data/installer/core/app/controllers/admin/scripts_controller.rb +131 -0
  90. data/installer/core/app/controllers/admin/settings_controller.rb +111 -0
  91. data/installer/core/app/controllers/admin/users_controller.rb +119 -0
  92. data/installer/core/app/controllers/app/app_controller.rb +23 -0
  93. data/installer/core/app/controllers/app/front_controller.rb +10 -0
  94. data/installer/core/app/controllers/application_controller.rb +96 -0
  95. data/installer/core/app/controllers/devise/sessions_controller.rb +104 -0
  96. data/installer/core/app/controllers/errors_controller.rb +28 -0
  97. data/installer/core/app/helpers/admin_helper.rb +117 -0
  98. data/installer/core/app/helpers/application_helper.rb +21 -0
  99. data/installer/core/app/helpers/customizes_helper.rb +2 -0
  100. data/installer/core/app/helpers/fronts_helper.rb +2 -0
  101. data/installer/core/app/helpers/scaffolds_helper.rb +2 -0
  102. data/installer/core/app/inputs/checkbox_material_input.rb +75 -0
  103. data/installer/core/app/inputs/file_material_input.rb +33 -0
  104. data/installer/core/app/mailers/application_mailer.rb +28 -0
  105. data/installer/core/app/models/appearance.rb +5 -0
  106. data/installer/core/app/models/application_record.rb +3 -0
  107. data/installer/core/app/models/concerns/activity_history.rb +9 -0
  108. data/installer/core/app/models/concerns/clone_record.rb +12 -0
  109. data/installer/core/app/models/customize.rb +154 -0
  110. data/installer/core/app/models/front.rb +2 -0
  111. data/installer/core/app/models/google_analytics_setting.rb +4 -0
  112. data/installer/core/app/models/meta_tag.rb +41 -0
  113. data/installer/core/app/models/role.rb +11 -0
  114. data/installer/core/app/models/script.rb +30 -0
  115. data/installer/core/app/models/setting.rb +17 -0
  116. data/installer/core/app/models/smtp_setting.rb +5 -0
  117. data/installer/core/app/models/social_account.rb +4 -0
  118. data/installer/core/app/models/user.rb +44 -0
  119. data/installer/core/app/policies/application_policy.rb +16 -0
  120. data/installer/core/app/policies/controller_policy.rb +53 -0
  121. data/installer/core/app/policies/customize_policy.rb +9 -0
  122. data/installer/core/app/policies/meta_tag_policy.rb +9 -0
  123. data/installer/core/app/policies/script_policy.rb +9 -0
  124. data/installer/core/app/policies/setting_policy.rb +9 -0
  125. data/installer/core/app/policies/user_policy.rb +17 -0
  126. data/installer/core/app/uploaders/attachment_uploader.rb +44 -0
  127. data/installer/core/app/uploaders/ckeditor_attachment_file_uploader.rb +36 -0
  128. data/installer/core/app/uploaders/ckeditor_picture_uploader.rb +47 -0
  129. data/installer/core/app/uploaders/template_uploader.rb +44 -0
  130. data/installer/core/app/views/admin/customizes/_description.html.haml +13 -0
  131. data/installer/core/app/views/admin/customizes/_form.html.haml +33 -0
  132. data/installer/core/app/views/admin/customizes/_listing.html.haml +15 -0
  133. data/installer/core/app/views/admin/customizes/_switch_default_template.html.haml +16 -0
  134. data/installer/core/app/views/admin/customizes/_switch_template.html.haml +22 -0
  135. data/installer/core/app/views/admin/customizes/index.html.haml +38 -0
  136. data/installer/core/app/views/admin/customizes/new.html.haml +4 -0
  137. data/installer/core/app/views/admin/layouts/_footer.html.haml +8 -0
  138. data/installer/core/app/views/admin/layouts/_head.html.haml +8 -0
  139. data/installer/core/app/views/admin/layouts/_header.html.haml +7 -0
  140. data/installer/core/app/views/admin/layouts/_listing_preloader.haml +5 -0
  141. data/installer/core/app/views/admin/layouts/_messages.html.haml +4 -0
  142. data/installer/core/app/views/admin/layouts/_navigation.html.haml +46 -0
  143. data/installer/core/app/views/admin/layouts/_preloader.html.haml +9 -0
  144. data/installer/core/app/views/admin/layouts/_search.html.haml +8 -0
  145. data/installer/core/app/views/admin/layouts/_sidebar.html.haml +63 -0
  146. data/installer/core/app/views/admin/layouts/application.html.haml +23 -0
  147. data/installer/core/app/views/admin/layouts/index/remote_messages.js.haml +9 -0
  148. data/installer/core/app/views/admin/meta_tags/_description.html.haml +13 -0
  149. data/installer/core/app/views/admin/meta_tags/_form.html.haml +57 -0
  150. data/installer/core/app/views/admin/meta_tags/_index_show.html.haml +26 -0
  151. data/installer/core/app/views/admin/meta_tags/_listing.html.haml +39 -0
  152. data/installer/core/app/views/admin/meta_tags/edit.html.haml +2 -0
  153. data/installer/core/app/views/admin/meta_tags/index.html.haml +80 -0
  154. data/installer/core/app/views/admin/meta_tags/new.html.haml +2 -0
  155. data/installer/core/app/views/admin/meta_tags/reload.js.haml +5 -0
  156. data/installer/core/app/views/admin/meta_tags/show.html.haml +29 -0
  157. data/installer/core/app/views/admin/meta_tags/show.js.haml +4 -0
  158. data/installer/core/app/views/admin/scripts/_description.html.haml +13 -0
  159. data/installer/core/app/views/admin/scripts/_form.html.haml +31 -0
  160. data/installer/core/app/views/admin/scripts/_index_show.html.haml +26 -0
  161. data/installer/core/app/views/admin/scripts/_listing.html.haml +42 -0
  162. data/installer/core/app/views/admin/scripts/edit.html.haml +1 -0
  163. data/installer/core/app/views/admin/scripts/index.html.haml +82 -0
  164. data/installer/core/app/views/admin/scripts/new.html.haml +1 -0
  165. data/installer/core/app/views/admin/scripts/reload.js.haml +5 -0
  166. data/installer/core/app/views/admin/scripts/show.html.haml +29 -0
  167. data/installer/core/app/views/admin/scripts/show.js.haml +4 -0
  168. data/installer/core/app/views/admin/settings/_form.html.haml +9 -0
  169. data/installer/core/app/views/admin/settings/components/_preview.html.haml +30 -0
  170. data/installer/core/app/views/admin/settings/edit.html.haml +4 -0
  171. data/installer/core/app/views/admin/settings/fields/_appearance.html.haml +62 -0
  172. data/installer/core/app/views/admin/settings/fields/_basic_information.html.haml +48 -0
  173. data/installer/core/app/views/admin/settings/fields/_email_setting.html.haml +17 -0
  174. data/installer/core/app/views/admin/settings/fields/_google_analytics_setting.html.haml +28 -0
  175. data/installer/core/app/views/admin/settings/fields/_social_accounts.html.haml +42 -0
  176. data/installer/core/app/views/admin/users/_description.html.haml +13 -0
  177. data/installer/core/app/views/admin/users/_form.html.haml +59 -0
  178. data/installer/core/app/views/admin/users/_index_show.html.haml +24 -0
  179. data/installer/core/app/views/admin/users/_listing.html.haml +49 -0
  180. data/installer/core/app/views/admin/users/edit.html.haml +1 -0
  181. data/installer/core/app/views/admin/users/index.html.haml +72 -0
  182. data/installer/core/app/views/admin/users/new.html.haml +1 -0
  183. data/installer/core/app/views/admin/users/reload.js.haml +5 -0
  184. data/installer/core/app/views/admin/users/show.html.haml +36 -0
  185. data/installer/core/app/views/admin/users/show.js.haml +4 -0
  186. data/installer/core/app/views/app/front/index.html.haml +180 -0
  187. data/installer/core/app/views/app/layouts/_footer.html.haml +3 -0
  188. data/installer/core/app/views/app/layouts/_google_analytics.html.haml +14 -0
  189. data/installer/core/app/views/app/layouts/_head.html.haml +22 -0
  190. data/installer/core/app/views/app/layouts/_messages.html.haml +6 -0
  191. data/installer/core/app/views/app/layouts/_meta_tags.html.haml +9 -0
  192. data/installer/core/app/views/app/layouts/_navigation.html.haml +13 -0
  193. data/installer/core/app/views/app/layouts/_navigation_links.html.haml +6 -0
  194. data/installer/core/app/views/app/layouts/application.html.haml +10 -0
  195. data/installer/core/app/views/application_mailer/testing.html.haml +1 -0
  196. data/installer/core/app/views/devise/mailer/reset_password_instructions.html.haml +6 -0
  197. data/installer/core/app/views/devise/passwords/edit.html.haml +27 -0
  198. data/installer/core/app/views/devise/passwords/new.html.haml +22 -0
  199. data/installer/core/app/views/devise/registrations/edit.html.erb +48 -0
  200. data/installer/core/app/views/devise/registrations/new.html.erb +19 -0
  201. data/installer/core/app/views/devise/sessions/new.html.haml +30 -0
  202. data/installer/core/app/views/errors/internal_server_error.html.haml +7 -0
  203. data/installer/core/app/views/errors/not_authorized.html.haml +7 -0
  204. data/installer/core/app/views/errors/not_found.html.haml +7 -0
  205. data/installer/core/app/views/errors/unprocessable.html.haml +7 -0
  206. data/installer/core/app/views/kaminari/_first_page.html.haml +11 -0
  207. data/installer/core/app/views/kaminari/_gap.html.haml +8 -0
  208. data/installer/core/app/views/kaminari/_last_page.html.haml +11 -0
  209. data/installer/core/app/views/kaminari/_next_page.html.haml +11 -0
  210. data/installer/core/app/views/kaminari/_page.html.haml +10 -0
  211. data/installer/core/app/views/kaminari/_paginator.html.haml +18 -0
  212. data/installer/core/app/views/kaminari/_prev_page.html.haml +11 -0
  213. data/installer/core/app/views/keppler_ga_dashboard/dashboard/analytics.html.haml +600 -0
  214. data/installer/core/app/views/layouts/errors/_head.html.haml +3 -0
  215. data/installer/core/app/views/layouts/errors/application.html.haml +11 -0
  216. data/installer/core/app/views/layouts/mailers/mailer.html.haml +3 -0
  217. data/installer/core/app/views/layouts/mailers/mailer.text.haml +1 -0
  218. data/installer/core/app/views/layouts/templates/application.html.haml +1 -0
  219. data/installer/core/app/views/public_activity/layout/_create.html.haml +45 -0
  220. data/installer/core/app/views/public_activity/layout/_destroy.html.haml +15 -0
  221. data/installer/core/app/views/public_activity/layout/_update.html.haml +45 -0
  222. data/installer/core/app/views/public_activity/session/_create.html.haml +13 -0
  223. data/installer/core/app/views/public_activity/session/_destroy.html.haml +13 -0
  224. data/installer/core/app/views/templates/kaminari/_first_page.html.haml +9 -0
  225. data/installer/core/app/views/templates/kaminari/_gap.html.haml +8 -0
  226. data/installer/core/app/views/templates/kaminari/_last_page.html.haml +9 -0
  227. data/installer/core/app/views/templates/kaminari/_next_page.html.haml +9 -0
  228. data/installer/core/app/views/templates/kaminari/_page.html.haml +10 -0
  229. data/installer/core/app/views/templates/kaminari/_paginator.html.haml +18 -0
  230. data/installer/core/app/views/templates/kaminari/_prev_page.html.haml +9 -0
  231. data/installer/core/bin/bundle +3 -0
  232. data/installer/core/bin/rails +4 -0
  233. data/installer/core/bin/rake +4 -0
  234. data/installer/core/bin/setup +29 -0
  235. data/installer/core/bin/spring +15 -0
  236. data/installer/core/config.ru +4 -0
  237. data/installer/core/config/application.rb +46 -0
  238. data/installer/core/config/boot.rb +7 -0
  239. data/installer/core/config/database.yml +25 -0
  240. data/installer/core/config/environment.rb +10 -0
  241. data/installer/core/config/environments/development.rb +57 -0
  242. data/installer/core/config/environments/production.rb +105 -0
  243. data/installer/core/config/environments/test.rb +44 -0
  244. data/installer/core/config/gaAuth/gauth_key.p12 +0 -0
  245. data/installer/core/config/initializers/assets.rb +14 -0
  246. data/installer/core/config/initializers/cookies_serializer.rb +3 -0
  247. data/installer/core/config/initializers/date_formats.rb +2 -0
  248. data/installer/core/config/initializers/devise.rb +259 -0
  249. data/installer/core/config/initializers/filter_parameter_logging.rb +5 -0
  250. data/installer/core/config/initializers/inflections.rb +16 -0
  251. data/installer/core/config/initializers/keppler_configuration.rb +9 -0
  252. data/installer/core/config/initializers/mime_types.rb +6 -0
  253. data/installer/core/config/initializers/paginate_kaminari_configuration.rb +12 -0
  254. data/installer/core/config/initializers/rolify.rb +10 -0
  255. data/installer/core/config/initializers/route_traslator.rb +3 -0
  256. data/installer/core/config/initializers/session_store.rb +5 -0
  257. data/installer/core/config/initializers/simple_form.rb +170 -0
  258. data/installer/core/config/initializers/simple_form_bootstrap.rb +155 -0
  259. data/installer/core/config/initializers/time_formats.rb +2 -0
  260. data/installer/core/config/initializers/wrap_parameters.rb +15 -0
  261. data/installer/core/config/locales/devise.en.yml +61 -0
  262. data/installer/core/config/locales/devise.es.yml +62 -0
  263. data/installer/core/config/locales/en.yml +380 -0
  264. data/installer/core/config/locales/es.yml +420 -0
  265. data/installer/core/config/locales/routes.en.yml +4 -0
  266. data/installer/core/config/locales/routes.es.yml +5 -0
  267. data/installer/core/config/locales/simple_form.en.yml +45 -0
  268. data/installer/core/config/locales/simple_form.es.yml +95 -0
  269. data/installer/core/config/locales/social_share_button.es.yml +10 -0
  270. data/installer/core/config/menu.yml +53 -0
  271. data/installer/core/config/puma.rb +56 -0
  272. data/installer/core/config/routes.rb +94 -0
  273. data/installer/core/config/sitemap.rb +27 -0
  274. data/installer/core/config/spring.rb +6 -0
  275. data/installer/core/db/migrate/20140812203549_devise_create_users.rb +50 -0
  276. data/installer/core/db/migrate/20140812210925_rolify_create_roles.rb +19 -0
  277. data/installer/core/db/migrate/20151221173228_create_activities.rb +23 -0
  278. data/installer/core/db/migrate/20160122201215_create_settings.rb +15 -0
  279. data/installer/core/db/migrate/20160126141856_create_smtp_settings.rb +14 -0
  280. data/installer/core/db/migrate/20160128131802_create_scripts.rb +11 -0
  281. data/installer/core/db/migrate/20160128151351_create_google_analytics_settings.rb +12 -0
  282. data/installer/core/db/migrate/20160128193740_create_social_accounts.rb +25 -0
  283. data/installer/core/db/migrate/20160201134918_create_meta_tags.rb +13 -0
  284. data/installer/core/db/migrate/20160201210520_create_appearances.rb +11 -0
  285. data/installer/core/db/migrate/20170603145521_create_customizes.rb +10 -0
  286. data/installer/core/db/migrate/20171225023933_create_scaffolds.rb +10 -0
  287. data/installer/core/db/schema.rb +172 -0
  288. data/installer/core/db/seeds.rb +45 -0
  289. data/installer/core/lib/generators/keppler_front/keppler_front_generator.rb +139 -0
  290. data/installer/core/lib/generators/keppler_front/templates/controllers/controller.rb +17 -0
  291. data/installer/core/lib/generators/keppler_front/templates/views/template.html.haml +180 -0
  292. data/installer/core/lib/generators/keppler_relation/keppler_relation_generator.rb +219 -0
  293. data/installer/core/lib/generators/keppler_scaffold/keppler_scaffold_generator.rb +240 -0
  294. data/installer/core/lib/generators/keppler_scaffold/templates/controllers/controller.rb +143 -0
  295. data/installer/core/lib/generators/keppler_scaffold/templates/models/model.rb +41 -0
  296. data/installer/core/lib/generators/keppler_scaffold/templates/policies/policy.rb +9 -0
  297. data/installer/core/lib/generators/keppler_scaffold/templates/views/_description.html.haml +13 -0
  298. data/installer/core/lib/generators/keppler_scaffold/templates/views/_form.html.haml +60 -0
  299. data/installer/core/lib/generators/keppler_scaffold/templates/views/_index_show.html.haml +24 -0
  300. data/installer/core/lib/generators/keppler_scaffold/templates/views/_listing.html.haml +64 -0
  301. data/installer/core/lib/generators/keppler_scaffold/templates/views/edit.html.haml +1 -0
  302. data/installer/core/lib/generators/keppler_scaffold/templates/views/index.html.haml +97 -0
  303. data/installer/core/lib/generators/keppler_scaffold/templates/views/new.html.haml +1 -0
  304. data/installer/core/lib/generators/keppler_scaffold/templates/views/reload.js.haml +5 -0
  305. data/installer/core/lib/generators/keppler_scaffold/templates/views/show.html.haml +65 -0
  306. data/installer/core/lib/generators/keppler_scaffold/templates/views/show.js.haml +4 -0
  307. data/installer/core/lib/keppler_configuration.rb +12 -0
  308. data/installer/core/lib/templates/haml/scaffold/_form.html.haml +10 -0
  309. data/installer/core/plugins/keppler_ga_dashboard/Gemfile +15 -0
  310. data/installer/core/plugins/keppler_ga_dashboard/MIT-LICENSE +20 -0
  311. data/installer/core/plugins/keppler_ga_dashboard/README.md +51 -0
  312. data/installer/core/plugins/keppler_ga_dashboard/Rakefile +37 -0
  313. data/installer/core/plugins/keppler_ga_dashboard/app/assets/javascripts/keppler_ga_dashboard/active-users.js +64 -0
  314. data/installer/core/plugins/keppler_ga_dashboard/app/assets/javascripts/keppler_ga_dashboard/active-users.js.map +1 -0
  315. data/installer/core/plugins/keppler_ga_dashboard/app/assets/javascripts/keppler_ga_dashboard/dashboard.coffee +13 -0
  316. data/installer/core/plugins/keppler_ga_dashboard/app/assets/javascripts/keppler_ga_dashboard/date-range-selector.js +2 -0
  317. data/installer/core/plugins/keppler_ga_dashboard/app/assets/javascripts/keppler_ga_dashboard/date-range-selector.js.map +1 -0
  318. data/installer/core/plugins/keppler_ga_dashboard/app/assets/javascripts/keppler_ga_dashboard/view-selector2.js +196 -0
  319. data/installer/core/plugins/keppler_ga_dashboard/app/assets/javascripts/keppler_ga_dashboard/view-selector2.js.map +1 -0
  320. data/installer/core/plugins/keppler_ga_dashboard/app/assets/stylesheets/dashboard.scss +83 -0
  321. data/installer/core/plugins/keppler_ga_dashboard/app/controllers/keppler_ga_dashboard/dashboard_controller.rb +48 -0
  322. data/installer/core/plugins/keppler_ga_dashboard/app/helpers/keppler_ga_dashboard/application_helper.rb +4 -0
  323. data/installer/core/plugins/keppler_ga_dashboard/app/helpers/keppler_ga_dashboard/dashboard_helper.rb +14 -0
  324. data/installer/core/plugins/keppler_ga_dashboard/app/views/keppler_ga_dashboard/dashboard/analytics.html.haml +359 -0
  325. data/installer/core/plugins/keppler_ga_dashboard/bin/rails +12 -0
  326. data/installer/core/plugins/keppler_ga_dashboard/config/menu.yml +6 -0
  327. data/installer/core/plugins/keppler_ga_dashboard/config/routes.rb +3 -0
  328. data/installer/core/plugins/keppler_ga_dashboard/keppler_ga_dashboard.gemspec +22 -0
  329. data/installer/core/plugins/keppler_ga_dashboard/lib/keppler_ga_dashboard.rb +10 -0
  330. data/installer/core/plugins/keppler_ga_dashboard/lib/keppler_ga_dashboard/engine.rb +5 -0
  331. data/installer/core/plugins/keppler_ga_dashboard/lib/keppler_ga_dashboard/tasks/install.rb +58 -0
  332. data/installer/core/plugins/keppler_ga_dashboard/lib/keppler_ga_dashboard/version.rb +3 -0
  333. data/installer/core/plugins/keppler_ga_dashboard/lib/tasks/keppler_ga_dashboard_tasks.rake +13 -0
  334. data/installer/core/public/favicon.ico +0 -0
  335. data/installer/core/public/humans.txt +20 -0
  336. data/installer/core/public/robots.txt +5 -0
  337. data/installer/core/test/controllers/admin_controller_test.rb +11 -0
  338. data/installer/core/test/controllers/errors_controller_test.rb +24 -0
  339. data/installer/core/test/controllers/frontend_controller_test.rb +9 -0
  340. data/installer/core/test/controllers/fronts_controller_test.rb +49 -0
  341. data/installer/core/test/controllers/meta_tags_controller_test.rb +49 -0
  342. data/installer/core/test/controllers/scaffolds_controller_test.rb +49 -0
  343. data/installer/core/test/controllers/scripts_controller_test.rb +49 -0
  344. data/installer/core/test/controllers/settings_controller_test.rb +49 -0
  345. data/installer/core/test/controllers/users_controller_test.rb +18 -0
  346. data/installer/core/test/fixtures/appearances.yml +11 -0
  347. data/installer/core/test/fixtures/caches.yml +7 -0
  348. data/installer/core/test/fixtures/fronts.yml +7 -0
  349. data/installer/core/test/fixtures/google_adwords.yml +13 -0
  350. data/installer/core/test/fixtures/google_analytics_settings.yml +13 -0
  351. data/installer/core/test/fixtures/meta_tags.yml +13 -0
  352. data/installer/core/test/fixtures/roles.yml +11 -0
  353. data/installer/core/test/fixtures/scaffolds.yml +9 -0
  354. data/installer/core/test/fixtures/scripts.yml +11 -0
  355. data/installer/core/test/fixtures/settings.yml +13 -0
  356. data/installer/core/test/fixtures/smtp_settings.yml +17 -0
  357. data/installer/core/test/fixtures/social_accounts.yml +39 -0
  358. data/installer/core/test/fixtures/users.yml +10 -0
  359. data/installer/core/test/helpers/admin_helper_test.rb +4 -0
  360. data/installer/core/test/helpers/frontend_helper_test.rb +4 -0
  361. data/installer/core/test/mailers/application_mailer_test.rb +7 -0
  362. data/installer/core/test/mailers/previews/application_mailer_preview.rb +4 -0
  363. data/installer/core/test/models/apparence_test.rb +7 -0
  364. data/installer/core/test/models/cache_test.rb +7 -0
  365. data/installer/core/test/models/front_test.rb +7 -0
  366. data/installer/core/test/models/google_analytics_setting_test.rb +7 -0
  367. data/installer/core/test/models/meta_tag_test.rb +7 -0
  368. data/installer/core/test/models/role_test.rb +7 -0
  369. data/installer/core/test/models/scaffold_test.rb +7 -0
  370. data/installer/core/test/models/script_test.rb +7 -0
  371. data/installer/core/test/models/setting_test.rb +7 -0
  372. data/installer/core/test/models/smtp_setting_test.rb +7 -0
  373. data/installer/core/test/models/social_account_test.rb +7 -0
  374. data/installer/core/test/models/user_test.rb +7 -0
  375. data/installer/core/test/test_helper.rb +16 -0
  376. data/installer/core/vendor/assets/javascripts/bounce.min.js +5 -0
  377. data/installer/db_conf/conf.yml +50 -0
  378. data/installer/lib/conf.rb +31 -0
  379. data/installer/lib/scaffold.rb +10 -0
  380. data/installer/run.sh +19 -0
  381. data/installer/scripts/bin.sh +61 -0
  382. data/lib/keppler.rb +7 -0
  383. data/lib/keppler/cli.rb +12 -0
  384. data/lib/keppler/cli/generate.rb +19 -0
  385. data/lib/keppler/version.rb +3 -0
  386. metadata +497 -0
@@ -0,0 +1,3 @@
1
+ %span Powered by
2
+ = link_to "http://slicegroup.xyz", target:"_blank" do
3
+ = image_tag "app/slice-front.png", width: "100px"
@@ -0,0 +1,14 @@
1
+ - if Rails.env.production? && @setting.google_analytics_setting.ga_status
2
+ - if Script.get_script(request)
3
+ - tracking = Script.get_script(request).script
4
+ - unless tracking
5
+ - tracking = @setting.google_analytics_setting.ga_tracking_id
6
+
7
+ :javascript
8
+ (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
9
+ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
10
+ m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
11
+ })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
12
+
13
+ ga('create', "#{tracking}", 'auto');
14
+ ga('send', 'pageview');
@@ -0,0 +1,22 @@
1
+ // Title & Meta tags
2
+ = render "app/layouts/meta_tags"
3
+
4
+ // Stylesheets
5
+ = stylesheet_link_tag 'app/application', media: 'all', 'data-turbolinks-track' => true
6
+ %link{href:'https://fonts.googleapis.com/css?family=Patua+One', rel:'stylesheet', type:'text/css'}
7
+ %link{href: "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css", rel: "stylesheet"}/
8
+
9
+ // Javascripts
10
+ = javascript_include_tag 'app/application', 'data-turbolinks-track' => true
11
+ %script{:src => "https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"}
12
+
13
+ // Google Analytics
14
+ = render 'app/layouts/google_analytics'
15
+
16
+ // Favicon
17
+ = favicon_link_tag @favicon
18
+
19
+ - scripts = @scripts.select{|x| x.url == request.env['PATH_INFO']}
20
+ - unless scripts.empty?
21
+ - scripts.each do |script|
22
+ = raw script.script
@@ -0,0 +1,6 @@
1
+ -# Rails flash messages styled for Bootstrap 3.0
2
+ - flash.each do |name, msg|
3
+ - if msg.is_a?(String)
4
+ %div{:class => "alert alert-#{name.to_s == 'notice' ? 'success' : 'danger'}"}
5
+ %button.close{"aria-hidden" => "true", "data-dismiss" => "alert", type: "button"} ×
6
+ = content_tag :div, msg, :id => "flash_#{name}"
@@ -0,0 +1,9 @@
1
+ %meta{:name => "viewport", :content => "width=device-width, initial-scale=1.0"}
2
+ = csrf_meta_tags
3
+ - if @meta
4
+ %meta{:name => "description", :content => "#{content_for?(:description) ? yield(:description) : "#{@meta.description}"}"}
5
+ = raw @meta.meta_tags
6
+ %title= content_for?(:title) ? yield(:title) : @meta.title
7
+ - else
8
+ %meta{:name => "description", :content => "#{content_for?(:description) ? yield(:description) : "#{@description}"}"}
9
+ %title= content_for?(:title) ? yield(:title) : @name
@@ -0,0 +1,13 @@
1
+ -# navigation styled for Bootstrap 3.0
2
+ %nav.navbar.navbar-default.navbar-fixed-top.app-navbar
3
+ .container
4
+ .navbar-header
5
+ %button.navbar-toggle{"data-target" => ".navbar-collapse", "data-toggle" => "collapse", type: "button"}
6
+ %span.sr-only Toggle navigation
7
+ %span.icon-bar
8
+ %span.icon-bar
9
+ %span.icon-bar
10
+ %span.brand-logo Keppler
11
+ .collapse.navbar-collapse
12
+ %ul.nav.navbar-nav
13
+ = render 'app/layouts/navigation_links'
@@ -0,0 +1,6 @@
1
+ %li= link_to '<i class="fa fa-home"> Home</i>'.html_safe, main_app.root_path
2
+ - if user_signed_in?
3
+ %li= link_to '<i class="fa fa-power-off"> Sign out</i>'.html_safe, main_app.destroy_user_session_path, :method=>'delete'
4
+ - else
5
+ %li= link_to '<i class="fa fa-power-off"> Sign in</i>'.html_safe, main_app.new_user_session_path
6
+
@@ -0,0 +1,10 @@
1
+ !!!
2
+ %html
3
+ %head
4
+ = render 'app/layouts/head'
5
+ %body
6
+ %header
7
+ = #render 'app/layouts/navigation'
8
+ %main{:role => "main"}
9
+ = #render 'app/layouts/messages'
10
+ = yield
@@ -0,0 +1,6 @@
1
+ %p
2
+ Hola #{@resource.email}!
3
+ %p Nos has hecho una petición para cambiar tu contraseña. Puedes hacerlo a través de este enlace.
4
+ %p= link_to 'Cambiar mi contraseña', edit_password_url(@resource, reset_password_token: @token)
5
+ %p Si usted no solicitó esto, por favor ignore este correo.
6
+ %p Su contraseña no cambiará si no entra al enlace anterior y cree una nueva.
@@ -0,0 +1,27 @@
1
+ .container
2
+ .devise-horizontal
3
+ .devise-vertical
4
+ .devise-box.card
5
+ .devise-box-header
6
+ .devise-box-title Keppler
7
+ = form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f|
8
+ .devise-box-body.row
9
+ .col.s12
10
+ %h5 Ya puedes cambiar tu contraseña.
11
+ %p Recuerda agregar una contraseña suficientemente segura
12
+ = f.hidden_field :reset_password_token
13
+ .input-field.col.s12
14
+ = f.password_field :password, autofocus: true, autocomplete: 'off', class: "validate #{'invalid' if resource.errors.messages[:password]}"
15
+ %label{for: "password"} Contraseña
16
+ .input-errors
17
+ = resource.errors.messages.fetch(:password).first
18
+ .input-field.col.s12
19
+ = f.password_field :password_confirmation, autocomplete: 'off', class: "validate #{'invalid' if resource.errors.messages[:password_confirmation]}"
20
+ %label{for: "password"} Confirmar contraseña
21
+ .input-errors
22
+ = resource.errors.messages.fetch(:password_confirmation).first
23
+ .devise-box-footer.row
24
+ .col.s12
25
+ = f.submit 'Cambiar contraseña', :class => 'right btn'
26
+ .col.s12.devise-logo.center-align.hidden-xs
27
+ = image_tag "admin/slice.png"
@@ -0,0 +1,22 @@
1
+ .container
2
+ .devise-horizontal
3
+ .devise-vertical
4
+ .devise-box.card
5
+ .devise-box-header
6
+ .devise-box-title Keppler
7
+ = form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post, :role => 'form'}) do |f|
8
+ .devise-box-body.row
9
+ .col.s12
10
+ %h5 ¿Haz olvidado tu contraseña?
11
+ %p Envianos tu email para darle las instrucciones a seguir.
12
+ .input-field.col.s12
13
+ = f.email_field :email, :autofocus => true, class: "validate #{'invalid' unless resource.errors.messages.empty?}"
14
+ %label{for: :email} Email
15
+ .devise-errors.col.s12.center-align
16
+ - resource.errors.each do |name, msg|
17
+ = msg.capitalize
18
+ .devise-box-footer.row
19
+ .col.s12
20
+ = f.submit 'Enviar', :class => 'right btn '
21
+ .col.s12.devise-logo.center-align.hidden-xs
22
+ = image_tag "admin/slice.png"
@@ -0,0 +1,48 @@
1
+ <div style="padding:30px; padding-bottom:0px;">
2
+ <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put, :role => 'form'}) do |f| %>
3
+ <%= devise_error_messages! %>
4
+ <div class="panel panel-default">
5
+ <div class="panel-heading"><b> <%= t('user.edit.edit-config')%></b></div>
6
+ <div class="panel-body">
7
+ <div class="form-group">
8
+ <%= f.label :name %>
9
+ <%= f.text_field :name, :autofocus => true, class: 'form-control' %>
10
+ <br>
11
+ <%= f.label :email %>
12
+ <%= f.email_field :email, class: 'form-control' %>
13
+ <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %>
14
+ <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div>
15
+ <% end %>
16
+ </div>
17
+
18
+ <fieldset>
19
+ <%= t('devise.announce_password') %>
20
+ <br>
21
+ <br>
22
+ <div class="form-group">
23
+ <%= f.label :password %>
24
+ <%= f.password_field :password, :autocomplete => 'off', class: 'form-control' %>
25
+ </div>
26
+ <div class="form-group">
27
+ <%= f.label :password_confirmation %>
28
+ <%= f.password_field :password_confirmation, class: 'form-control' %>
29
+ </div>
30
+ </fieldset>
31
+ <fieldset>
32
+ <%= t('devise.announce_password_confirmation') %>
33
+ <br>
34
+ <br>
35
+ <div class="form-group">
36
+ <%= f.label :current_password %>
37
+ <%= f.password_field :current_password, class: 'form-control' %>
38
+ </div>
39
+
40
+ </fieldset>
41
+ </div>
42
+ <div class="panel-footer">
43
+ <%= f.submit t('user.helpers.submit_update'), :class => 'pull-right btn btn-warning' %>
44
+ <div class= "clearfix"></div>
45
+ </div>
46
+ </div>
47
+ <% end %>
48
+ </div>
@@ -0,0 +1,19 @@
1
+ <div class="authform">
2
+ <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :role => 'form'}) do |f| %>
3
+ <h3>Sign up</h3>
4
+ <%= devise_error_messages! %>
5
+ <div class="form-group">
6
+ <%= f.label :email %>
7
+ <%= f.email_field :email, :autofocus => true, class: 'form-control' %>
8
+ </div>
9
+ <div class="form-group">
10
+ <%= f.label :password %>
11
+ <%= f.password_field :password, class: 'form-control' %>
12
+ </div>
13
+ <div class="form-group">
14
+ <%= f.label :password_confirmation %>
15
+ <%= f.password_field :password_confirmation, class: 'form-control' %>
16
+ </div>
17
+ <%= f.submit 'Sign up', :class => 'button right' %>
18
+ <% end %>
19
+ </div>
@@ -0,0 +1,30 @@
1
+ .container
2
+ .login-box
3
+ .center
4
+ .login-container
5
+ .login-logo
6
+ %a{ href: '#' }
7
+ %span{style:"font-family: 'Patua One'"} Keppler
8
+ Admin
9
+ / /.login-logo
10
+ .login-box-body
11
+ = form_for(resource, :as => resource_name, :url => session_path(resource_name), :html => { :role => 'form'}) do |f|
12
+ %p.login-box-msg= t('keppler.login_message')
13
+ %form{:action => "../../index2.html", :method => "post"}
14
+ .form-group.has-feedback
15
+ = f.email_field :email, :autofocus => true, class: "form-control validate", :placeholder => "Email"
16
+ %i.icon-envelope.input-icon
17
+ .form-group.has-feedback
18
+ = f.password_field :password, :autofocus => true, class: "form-control validate #{'invalid' if flash[:alert]}", :placeholder => "Password"
19
+ %i.icon-lock.input-icon
20
+ .form-group.has-feedback
21
+ .pull-left
22
+ - if devise_mapping.recoverable?
23
+ = link_to new_password_path(resource_name), class: "recoverable" do
24
+ = t("devise.sessions.forgot_password")
25
+ .pull-right
26
+ = f.submit t("devise.sessions.log_in"), class: 'btn-primary'
27
+ .clearfix
28
+
29
+ .login-footer
30
+ = "#{t('keppler.powered')} <span>Slice Group</span>".html_safe
@@ -0,0 +1,7 @@
1
+ %h2 Error!
2
+ %small 500
3
+ %footer
4
+ - if !loggedin? or (loggedin? and current_user.has_role? :client)
5
+ -# = link_to material_icon.md_24.home.html_safe, root_path
6
+ - else
7
+ -# = link_to material_icon.md_24.home, "/admin/dashboard"
@@ -0,0 +1,7 @@
1
+ = title "Acceso denegado"
2
+ %h2 ¡Prohibido!
3
+ %small= flash[:message] ? flash[:message] : "No estás autorizado"
4
+
5
+ %footer
6
+ = link_to "/admin/dashboard" do
7
+ -# %i.material-icons home
@@ -0,0 +1,7 @@
1
+ %h2 Not found
2
+ %small 404
3
+ %footer
4
+ - if !loggedin? or (loggedin? and current_user.has_role? :client)
5
+ -# = link_to material_icon.md_24.home, root_path
6
+ - else
7
+ -# = link_to material_icon.md_24.home, "/admin/dashboard"
@@ -0,0 +1,7 @@
1
+ %h2 Error!
2
+ %small 422
3
+ %footer
4
+ - if !loggedin? or (loggedin? and current_user.has_role? :client)
5
+ -# = link_to material_icon.md_24.home, root_path
6
+ - else
7
+ -# = link_to material_icon.md_24.home, "/admin/dashboard"
@@ -0,0 +1,11 @@
1
+ -# Link to the "First" page
2
+ -# available local variables
3
+ -# url: url to the first page
4
+ -# current_page: a page object for the currently displayed page
5
+ -# total_pages: total number of pages
6
+ -# per_page: number of items to fetch per page
7
+ -# remote: data-remote
8
+ %span.first
9
+ - unless current_page.first?
10
+ = link_to url, :remote => remote, class: "btn-pag", title: 'First page' do
11
+ %i.fa.fa-angle-double-left
@@ -0,0 +1,8 @@
1
+ -# Non-link tag that stands for skipped pages...
2
+ -# available local variables
3
+ -# current_page: a page object for the currently displayed page
4
+ -# total_pages: total number of pages
5
+ -# per_page: number of items to fetch per page
6
+ -# remote: data-remote
7
+ %span.page.gap
8
+ = #"...".html_safe
@@ -0,0 +1,11 @@
1
+ -# Link to the "Last" page
2
+ -# available local variables
3
+ -# url: url to the last page
4
+ -# current_page: a page object for the currently displayed page
5
+ -# total_pages: total number of pages
6
+ -# per_page: number of items to fetch per page
7
+ -# remote: data-remote
8
+ %span.last
9
+ - unless current_page.last?
10
+ = link_to url, :remote => remote, class: "btn-pag", title: 'Last page' do
11
+ %i.fa.fa-angle-double-right
@@ -0,0 +1,11 @@
1
+ -# Link to the "Next" page
2
+ -# available local variables
3
+ -# url: url to the next page
4
+ -# current_page: a page object for the currently displayed page
5
+ -# total_pages: total number of pages
6
+ -# per_page: number of items to fetch per page
7
+ -# remote: data-remote
8
+ %span.next
9
+ - unless current_page.last?
10
+ = link_to url, rel: 'next', :remote => remote, class: "btn-pag", title: 'Next' do
11
+ %i.fa.fa-angle-right
@@ -0,0 +1,10 @@
1
+ -# Link showing page number
2
+ -# available local variables
3
+ -# page: a page object for "this" page
4
+ -# url: url to this page
5
+ -# current_page: a page object for the currently displayed page
6
+ -# total_pages: total number of pages
7
+ -# per_page: number of items to fetch per page
8
+ -# remote: data-remote
9
+ %span{:class => page.current? ? "btn-pag bg-current" : "btn-pag bg-not"}
10
+ = link_to_unless page.current?, page, url, {:remote => remote, rel: page.next? ? 'next' : page.prev? ? 'prev' : nil, :class => page.current? ? "btn-pag bg-current" : "btn-pag bg-not" }
@@ -0,0 +1,18 @@
1
+ -# The container tag
2
+ -# available local variables
3
+ -# current_page: a page object for the currently displayed page
4
+ -# total_pages: total number of pages
5
+ -# per_page: number of items to fetch per page
6
+ -# remote: data-remote
7
+ -# paginator: the paginator that renders the pagination tags inside
8
+ = paginator.render do
9
+ .pagination
10
+ = first_page_tag unless current_page.first?
11
+ -# = prev_page_tag unless current_page.first?
12
+ - each_page do |page|
13
+ - if page.left_outer? || page.right_outer? || page.inside_window?
14
+ = page_tag page
15
+ - elsif !page.was_truncated?
16
+ = gap_tag
17
+ -# = next_page_tag unless current_page.last?
18
+ = last_page_tag unless current_page.last?
@@ -0,0 +1,11 @@
1
+ -# Link to the "Previous" page
2
+ -# available local variables
3
+ -# url: url to the previous page
4
+ -# current_page: a page object for the currently displayed page
5
+ -# total_pages: total number of pages
6
+ -# per_page: number of items to fetch per page
7
+ -# remote: data-remote
8
+ %span.prev
9
+ - unless current_page.first?
10
+ = link_to url, rel: 'prev', :remote => remote, class: "btn-pag", title: 'Preview' do
11
+ %i.fa.fa-angle-left
@@ -0,0 +1,600 @@
1
+ = title "Dashboard"
2
+
3
+ = library_analytics
4
+
5
+ -# %script{:src => "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.min.js"}
6
+ %script{:src => "https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.js"}
7
+ %script{:src => "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.2/moment.min.js"}
8
+ %script{:src => "/assets/keppler_ga_dashboard/view-selector2.js?body=1"}
9
+ %script{:src => "/assets/keppler_ga_dashboard/date-range-selector.self.js?body=1"}
10
+ %script{:src => "/assets/keppler_ga_dashboard/active-users.self.js?body=1"}
11
+
12
+ .container
13
+ .dashboard
14
+ .row
15
+ .col-lg-12
16
+ .box.slice-box
17
+ .box-header.with-border
18
+ %h3.box-title
19
+ Información
20
+ .box-body.pure-input
21
+ .dashboard-head
22
+ -# .form-group
23
+ -# %select.form-control
24
+ -# %option Opción 1
25
+ .row
26
+ .col-lg-12.separator-dash
27
+ .col-lg-6
28
+ #view-name.hide-on-small-only
29
+ .col-lg-6
30
+ #active-users-container
31
+ .col-lg-12
32
+ #view-selector-container.hide-on-small-only
33
+ .row
34
+ .col-lg-6
35
+ .box.slice-box
36
+ .box-header.with-border
37
+ %h3.box-title
38
+ Uso por semana
39
+ -# .box-tools.pull-right
40
+ -# %a.btn.btn-box-tool{"data-widget" => "collapse", type: "button"}
41
+ -# %i.fa.fa-minus
42
+ .box-body.pure-input
43
+ %canvas#chart-1-container{:height => "300", :width => "350"}
44
+ #legend-1-container.charts-legend
45
+
46
+ .col-lg-6
47
+ .box.slice-box
48
+ .box-header.with-border
49
+ %h3.box-title
50
+ Uso al mes
51
+ .box-body.pure-input
52
+ %canvas#chart-2-container{:height => "300", :width => "350"}
53
+ #legend-2-container.charts-legend
54
+ .row
55
+ .col-lg-6.m6.l6
56
+ .box.slice-box
57
+ .box-header.with-border
58
+ %h3.box-title
59
+ Usuarios por navegador
60
+ .box-body.pure-input
61
+ #canvas-holder{:height => "300", :width => "350"}
62
+ %canvas#chart-3-container{:height => "300", :width => "350"}
63
+
64
+ .col-lg-6.m6.l6
65
+ .box.slice-box
66
+ .box-header.with-border
67
+ %h3.box-title
68
+ Usuarios por países
69
+ .box-body.pure-input
70
+ #canvas-holder{:height => "300", :width => "350"}
71
+ %canvas#chart-4-container{:height => "300", :width => "350"}
72
+
73
+ :javascript
74
+
75
+ var status;
76
+
77
+ function updateOnlineStatus() {
78
+ var condition = navigator.onLine ? "ONLINE" : "OFFLINE";
79
+ if ( condition == "ONLINE"){ status = true}
80
+ else if ( condition == "OFFLINE"){ status = false}
81
+ }
82
+
83
+ updateOnlineStatus();
84
+
85
+ var state = status;
86
+
87
+ if (state) {
88
+
89
+ gapi.analytics.ready(function() {
90
+
91
+ /*Authorize the user immediately if the user has already granted access.*/
92
+ gapi.analytics.auth.authorize({
93
+ serverAuth: {
94
+ access_token: "#{@access_token}" /*Se agrega el access token desde la api de ruby para analitycs*/
95
+ }
96
+ });
97
+
98
+
99
+ /**
100
+ * Create a new ActiveUsers instance to be rendered inside of an
101
+ * element with the id "active-users-container" and poll for changes every
102
+ * five seconds.
103
+ */
104
+ var activeUsers = new gapi.analytics.ext.ActiveUsers({
105
+ container: 'active-users-container',
106
+ pollingInterval: 5
107
+ });
108
+
109
+
110
+ /*Add CSS animation to visually show the when users come and go.*/
111
+ activeUsers.once('success', function() {
112
+ var element = this.container.firstChild;
113
+ var timeout;
114
+
115
+ this.on('change', function(data) {
116
+ var element = this.container.firstChild;
117
+ var animationClass = data.delta > 0 ? 'is-increasing' : 'is-decreasing';
118
+ element.className += (' ' + animationClass);
119
+
120
+ clearTimeout(timeout);
121
+ timeout = setTimeout(function() {
122
+ element.className = element.className.replace(/ is-(increasing|decreasing)/g, '');
123
+ }, 3000);
124
+ });
125
+ });
126
+
127
+
128
+ /*
129
+ Create a new ViewSelector2 instance to be rendered inside of an
130
+ element with the id "view-selector-container".
131
+ */
132
+ var viewSelector = new gapi.analytics.ext.ViewSelector2({
133
+ container: 'view-selector-container',
134
+ accountId: "#{Rails.application.secrets.ga_auth.fetch(:account_id)}"
135
+ }).execute();
136
+
137
+
138
+ /*
139
+ Update the activeUsers component, the Chartjs charts, and the dashboard
140
+ title whenever the user changes the view.
141
+ */
142
+ viewSelector.on('viewChange', function(data) {
143
+ var title = document.getElementById('view-name');
144
+ title.innerHTML = data.property.name + ' (' + data.view.name + ')';
145
+
146
+ // Start tracking active users for this view.
147
+ activeUsers.set(data).execute();
148
+
149
+ // Aqui se deben agregar los ids de las vistas de la pagina.
150
+ renderWeekOverWeekChart(data.ids);
151
+ renderYearOverYearChart(data.ids);
152
+ renderTopCountriesChart(data.ids);
153
+ renderTopBrowsersChart(data.ids);
154
+ });
155
+
156
+
157
+ /**
158
+ * Draw the a chart.js line chart with data from the specified view that
159
+ * overlays session data for the current week over session data for the
160
+ * previous week.
161
+ */
162
+ function renderWeekOverWeekChart(ids) {
163
+
164
+ // Adjust `now` to experiment with different days, for testing only...
165
+ var now = moment(); // .subtract(3, 'day');
166
+
167
+ var thisWeek = query({
168
+ 'ids': ids,
169
+ 'dimensions': 'ga:date,ga:nthDay',
170
+ 'metrics': 'ga:sessions',
171
+ 'start-date': moment(now).subtract(1, 'day').day(0).format('YYYY-MM-DD'),
172
+ 'end-date': moment(now).format('YYYY-MM-DD')
173
+ });
174
+
175
+ var lastWeek = query({
176
+ 'ids': ids,
177
+ 'dimensions': 'ga:date,ga:nthDay',
178
+ 'metrics': 'ga:sessions',
179
+ 'start-date': moment(now).subtract(1, 'day').day(0).subtract(1, 'week').format('YYYY-MM-DD'),
180
+ 'end-date': moment(now).subtract(1, 'day').day(6).subtract(1, 'week').format('YYYY-MM-DD')
181
+ });
182
+
183
+ Promise.all([thisWeek, lastWeek]).then(function(results) {
184
+
185
+ var data1 = results[0].rows.map(function(row) { return +row[2]; });
186
+ var data2 = results[1].rows.map(function(row) { return +row[2]; });
187
+ var labels = results[1].rows.map(function(row) { return +row[0]; });
188
+
189
+ // Chart line fill
190
+ var config = {
191
+ type: 'line',
192
+ data: {
193
+ labels: ["Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"],
194
+ datasets: [{
195
+ label: "Esta semana",
196
+ backgroundColor: 'rgba(245, 14, 30, 0.2)',
197
+ borderColor: [
198
+ 'rgba(255,99,132,1)',
199
+ 'rgba(54, 162, 235, 1)',
200
+ 'rgba(255, 206, 86, 1)',
201
+ 'rgba(75, 192, 192, 1)',
202
+ 'rgba(153, 102, 255, 1)',
203
+ 'rgba(255, 159, 64, 1)'
204
+ ],
205
+ // borderWidth: 1,
206
+ fill: true,
207
+ data: data1,
208
+ }, {
209
+ label: "Semana Pasada",
210
+ fill: true,
211
+ backgroundColor:'rgba(33, 150, 243, 0.29)',
212
+ borderColor: '#2196f3',
213
+ data: data2,
214
+ // borderWidth: 1
215
+ }]
216
+ },
217
+ options: {
218
+ responsive: true,
219
+ title:{
220
+ display:true,
221
+ text:' Semana a Semana'
222
+ },
223
+ tooltips: {
224
+ mode: 'index',
225
+ intersect: false,
226
+ },
227
+ hover: {
228
+ mode: 'nearest',
229
+ intersect: true
230
+ },
231
+ scales: {
232
+ xAxes: [{
233
+ display: true,
234
+ scaleLabel: {
235
+ display: true,
236
+ labelString: 'Dias'
237
+ }
238
+ }],
239
+ yAxes: [{
240
+ display: true,
241
+ scaleLabel: {
242
+ display: true,
243
+ labelString: 'Visitas'
244
+ },
245
+ // ticks: {
246
+ // min: 0,
247
+ // max: 100,
248
+ //
249
+ // // forces step size to be 5 units
250
+ // stepSize: 5
251
+ // }
252
+ }]
253
+ }
254
+ }
255
+ };
256
+
257
+ var ctx = document.getElementById("chart-1-container");
258
+ window.myLine = new Chart(ctx, config);
259
+
260
+ });
261
+ }
262
+
263
+
264
+ /**
265
+ * Draw the a chart.js bar chart with data from the specified view that
266
+ * overlays session data for the current year over session data for the
267
+ * previous year, grouped by month.
268
+ */
269
+ function renderYearOverYearChart(ids) {
270
+
271
+ // Adjust `now` to experiment with different days, for testing only...
272
+ var now = moment(); // .subtract(3, 'day');
273
+
274
+ var thisYear = query({
275
+ 'ids': ids,
276
+ 'dimensions': 'ga:month,ga:nthMonth',
277
+ 'metrics': 'ga:users',
278
+ 'start-date': moment(now).date(1).month(0).format('YYYY-MM-DD'),
279
+ 'end-date': moment(now).format('YYYY-MM-DD')
280
+ });
281
+
282
+ var lastYear = query({
283
+ 'ids': ids,
284
+ 'dimensions': 'ga:month,ga:nthMonth',
285
+ 'metrics': 'ga:users',
286
+ 'start-date': moment(now).subtract(1, 'year').date(1).month(0).format('YYYY-MM-DD'),
287
+ 'end-date': moment(now).date(1).month(0).subtract(1, 'day').format('YYYY-MM-DD')
288
+ });
289
+
290
+ Promise.all([thisYear, lastYear]).then(function(results) {
291
+ var data1 = results[0].rows.map(function(row) { return +row[2]; });
292
+ var data2 = results[1].rows.map(function(row) { return +row[2]; });
293
+ var labels = ['Ene','Feb','Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic'];
294
+
295
+ // Ensure the data arrays are at least as long as the labels array.
296
+ // Chart.js bar charts don't (yet) accept sparse datasets.
297
+ for (var i = 0, len = labels.length; i < len; i++) {
298
+ if (data1[i] === undefined) data1[i] = 0;
299
+ if (data2[i] === undefined) data2[i] = 0;
300
+ }
301
+
302
+ // Chart line fill
303
+ var config = {
304
+ type: 'bar',
305
+ data: {
306
+ labels: ["Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab"],
307
+ datasets: [{
308
+ label: "Año pasado",
309
+ backgroundColor: 'rgba(245, 14, 30, 0.2)',
310
+ borderColor: 'rgba(255,99,132,1)',
311
+ borderWidth: 2,
312
+ fill: true,
313
+ data: data2,
314
+ }, {
315
+ label: "Año actual",
316
+ fill: true,
317
+ backgroundColor:'rgba(33, 150, 243, 0.29)',
318
+ borderColor: '#2196f3',
319
+ data: data1,
320
+ borderWidth: 2
321
+ }]
322
+ },
323
+ options: {
324
+ responsive: true,
325
+ title:{
326
+ display:true,
327
+ text:' Semana a Semana'
328
+ },
329
+ tooltips: {
330
+ mode: 'index',
331
+ intersect: false,
332
+ },
333
+ hover: {
334
+ mode: 'nearest',
335
+ intersect: true
336
+ },
337
+ scales: {
338
+ xAxes: [{
339
+ display: true,
340
+ scaleLabel: {
341
+ display: true,
342
+ labelString: 'Dias'
343
+ }
344
+ }],
345
+ yAxes: [{
346
+ display: true,
347
+ scaleLabel: {
348
+ display: true,
349
+ labelString: 'Visitas'
350
+ },
351
+ // ticks: {
352
+ // min: 0,
353
+ // max: 100,
354
+ //
355
+ // // forces step size to be 5 units
356
+ // stepSize: 5
357
+ // }
358
+ }]
359
+ }
360
+ }
361
+ };
362
+
363
+ var ctx = document.getElementById("chart-2-container");
364
+ window.myLine = new Chart(ctx, config);
365
+
366
+ })
367
+ .catch(function(err) {
368
+ console.error(err.stack);
369
+ });
370
+ }
371
+
372
+
373
+ /**
374
+ * Draw the a chart.js doughnut chart with data from the specified view that
375
+ * show the top 5 browsers over the past seven days.
376
+ */
377
+ function renderTopBrowsersChart(ids) {
378
+
379
+ query({
380
+ 'ids': ids,
381
+ 'dimensions': 'ga:browser',
382
+ 'metrics': 'ga:pageviews',
383
+ 'sort': '-ga:pageviews',
384
+ 'max-results': 5
385
+ })
386
+ .then(function(response) {
387
+
388
+ var data = [];
389
+ var colors = ["rgba(245, 14, 30, 0.2)",'#e3e3e3','#2196f3','#f1dd30','#f44336'];
390
+
391
+ response.rows.forEach(function(row, i) {
392
+ data.push({
393
+ label: row[0],
394
+ value: +row[1],
395
+ color: colors[i]
396
+ });
397
+ });
398
+
399
+ var data_label = [];
400
+ var data_value = [];
401
+
402
+ for ( let i = 0 ; i < data.length; i++){
403
+ data_label.push(data[i].label);
404
+ data_value.push(data[i].value);
405
+ }
406
+
407
+ var config = {
408
+ type: 'doughnut',
409
+ data: {
410
+ datasets: [{
411
+ data: data_value,
412
+ backgroundColor: [
413
+ 'rgba(245, 14, 30, 0.2)',
414
+ 'rgba(4, 208, 7, 0.22)',
415
+ 'rgba(33, 150, 243, 0.29)',
416
+ 'rgba(241, 221, 48, 0.26)',
417
+ 'rgba(205, 133, 63, 0.3)'
418
+ ],
419
+ borderColor: [
420
+ 'rgba(255,99,132,1)',
421
+ '#04d007',
422
+ '#2196f3',
423
+ '#f1dd30',
424
+ 'peru',
425
+ ],
426
+ label: 'Browser'
427
+ }],
428
+ labels: data_label
429
+ },
430
+ options: {
431
+ responsive: true
432
+ }
433
+ };
434
+
435
+ var ctx = document.getElementById("chart-3-container");
436
+ window.myPie = new Chart(ctx, config);
437
+ });
438
+ }
439
+
440
+
441
+ /**
442
+ * Draw the a chart.js doughnut chart with data from the specified view that
443
+ * compares sessions from mobile, desktop, and tablet over the past seven
444
+ * days.
445
+ */
446
+ function renderTopCountriesChart(ids) {
447
+ query({
448
+ 'ids': ids,
449
+ 'dimensions': 'ga:country',
450
+ 'metrics': 'ga:sessions',
451
+ 'sort': '-ga:sessions',
452
+ 'max-results': 5
453
+ })
454
+ .then(function(response) {
455
+
456
+ var data = [];
457
+ var colors = ["#{@color}",'#e3e3e3','#2196f3','#f1dd30','#f44336'];
458
+
459
+ response.rows.forEach(function(row, i) {
460
+ data.push({
461
+ label: row[0],
462
+ value: +row[1],
463
+ color: colors[i]
464
+ });
465
+ });
466
+
467
+ var data_label = [];
468
+ var data_value = [];
469
+
470
+ for ( let i = 0 ; i < data.length; i++){
471
+ data_label.push(data[i].label);
472
+ data_value.push(data[i].value);
473
+ }
474
+
475
+ var config = {
476
+ type: 'pie',
477
+ data: {
478
+ datasets: [{
479
+ data: data_value,
480
+ backgroundColor: [
481
+ 'rgba(245, 14, 30, 0.2)',
482
+ 'rgba(4, 208, 7, 0.22)',
483
+ 'rgba(33, 150, 243, 0.29)',
484
+ 'rgba(241, 221, 48, 0.26)',
485
+ 'rgba(205, 133, 63, 0.3)'
486
+ ],
487
+ borderColor: [
488
+ 'rgba(255,99,132,1)',
489
+ '#04d007',
490
+ '#2196f3',
491
+ '#f1dd30',
492
+ 'peru',
493
+ ],
494
+ label: 'Country'
495
+ }],
496
+ labels: data_label
497
+ },
498
+ options: {
499
+ responsive: true
500
+ }
501
+ };
502
+
503
+ var ctx = document.getElementById("chart-4-container");
504
+ window.myPie = new Chart(ctx, config);
505
+ });
506
+ }
507
+
508
+
509
+ /**
510
+ * Extend the Embed APIs `gapi.analytics.report.Data` component to
511
+ * return a promise the is fulfilled with the value returned by the API.
512
+ * @param {Object} params The request parameters.
513
+ * @return {Promise} A promise.
514
+ */
515
+ function query(params) {
516
+ return new Promise(function(resolve, reject) {
517
+ var data = new gapi.analytics.report.Data({query: params});
518
+ data.once('success', function(response) { resolve(response); })
519
+ .once('error', function(response) { reject(response); })
520
+ .execute();
521
+ });
522
+ }
523
+
524
+
525
+ /**
526
+ * Create a new canvas inside the specified element. Set it to be the width
527
+ * and height of its container.
528
+ * @param {string} id The id attribute of the element to host the canvas.
529
+ * @return {RenderingContext} The 2D canvas context.
530
+ */
531
+ function makeCanvas(id) {
532
+ var container = document.getElementById(id);
533
+ var canvas = document.createElement('canvas');
534
+ var ctx = canvas.getContext('2d');
535
+
536
+ container.innerHTML = '';
537
+ canvas.width = container.offsetWidth;
538
+ canvas.height = container.offsetHeight;
539
+ container.appendChild(canvas);
540
+
541
+ return ctx;
542
+ }
543
+
544
+
545
+ /**
546
+ * Create a visual legend inside the specified element based off of a
547
+ * Chart.js dataset.
548
+ * @param {string} id The id attribute of the element to host the legend.
549
+ * @param {Array.} items A list of labels and colors for the legend.
550
+ */
551
+ function generateLegend(id, items) {
552
+ var legend = document.getElementById(id);
553
+ legend.innerHTML = items.map(function(item) {
554
+ var color = item.color || item.fillColor;
555
+ var label = item.label;
556
+ return '<li><i style="background:' + color + '"></i>' + label + '</li>';
557
+ }).join('');
558
+ }
559
+
560
+
561
+ // Set some global Chart.js defaults.
562
+ Chart.defaults.global.animationSteps = 60;
563
+ Chart.defaults.global.animationEasing = 'easeInOutQuart';
564
+ Chart.defaults.global.responsive = true;
565
+ Chart.defaults.global.maintainAspectRatio = false;
566
+ });
567
+
568
+
569
+ }
570
+
571
+ else {
572
+ alert("No hay conexion a internet al Dashboard");
573
+
574
+ }
575
+
576
+
577
+ :scss
578
+ .ActiveUsers{
579
+ position: absolute;
580
+ top: -3px;
581
+ right: 10px;
582
+ background: none;
583
+ border: 1px solid #d4d2d0;
584
+ border-radius: 4px;
585
+ font-weight: 300;
586
+ padding: .5em 1.5em;
587
+ white-space: nowrap;
588
+ }
589
+
590
+ #view-name{
591
+ margin-left: -13px ;
592
+ font-family: "roboto";
593
+ font-weight: 300;
594
+ font-size: 1.4em;
595
+ color: #777;
596
+ }
597
+
598
+ .separator-dash{
599
+ margin-bottom: 5vh;
600
+ }