jinda_adminbsb 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (112) hide show
  1. checksums.yaml +7 -0
  2. data/lib/generators/jinda_adminbsb/install_generator.rb +42 -0
  3. data/lib/generators/jinda_adminbsb/templates/adminbsbs_controller.rb +2 -0
  4. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/admin.js +458 -0
  5. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/all-themes.css +900 -0
  6. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/animate.min.css +11 -0
  7. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/bootstrap-select.js +1735 -0
  8. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/bootstrap.css +6760 -0
  9. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/bootstrap.js +2363 -0
  10. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/animation-bg.jpg +0 -0
  11. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/1.jpg +0 -0
  12. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/10.jpg +0 -0
  13. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/11.jpg +0 -0
  14. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/12.jpg +0 -0
  15. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/13.jpg +0 -0
  16. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/14.jpg +0 -0
  17. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/15.jpg +0 -0
  18. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/16.jpg +0 -0
  19. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/17.jpg +0 -0
  20. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/18.jpg +0 -0
  21. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/19.jpg +0 -0
  22. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/2.jpg +0 -0
  23. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/20.jpg +0 -0
  24. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/3.jpg +0 -0
  25. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/4.jpg +0 -0
  26. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/5.jpg +0 -0
  27. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/6.jpg +0 -0
  28. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/7.jpg +0 -0
  29. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/8.jpg +0 -0
  30. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/9.jpg +0 -0
  31. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-1.jpg +0 -0
  32. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-10.jpg +0 -0
  33. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-11.jpg +0 -0
  34. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-12.jpg +0 -0
  35. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-13.jpg +0 -0
  36. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-14.jpg +0 -0
  37. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-15.jpg +0 -0
  38. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-16.jpg +0 -0
  39. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-17.jpg +0 -0
  40. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-18.jpg +0 -0
  41. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-19.jpg +0 -0
  42. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-2.jpg +0 -0
  43. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-20.jpg +0 -0
  44. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-3.jpg +0 -0
  45. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-4.jpg +0 -0
  46. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-5.jpg +0 -0
  47. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-6.jpg +0 -0
  48. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-7.jpg +0 -0
  49. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-8.jpg +0 -0
  50. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/image-gallery/thumb/thumb-9.jpg +0 -0
  51. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/screenshot.png +0 -0
  52. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/thumbs-up.png +0 -0
  53. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/user-img-background.jpg +0 -0
  54. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/user.jpg +0 -0
  55. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/images/user.png +0 -0
  56. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/ajax-loader.gif +0 -0
  57. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/bootstrap-stack.png +0 -0
  58. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/bootstrap-themes.png +0 -0
  59. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/button_black.png +0 -0
  60. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/button_blue.png +0 -0
  61. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/button_red.png +0 -0
  62. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/favicons/android-chrome-192x192.png +0 -0
  63. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/favicons/android-chrome-512x512.png +0 -0
  64. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/favicons/apple-touch-icon.png +0 -0
  65. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/favicons/browserconfig.xml +11 -0
  66. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/favicons/favicon-16x16.png +0 -0
  67. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/favicons/favicon-32x32.png +0 -0
  68. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/favicons/manifest.json +22 -0
  69. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/favicons/mstile-144x144.png +0 -0
  70. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/favicons/mstile-150x150.png +0 -0
  71. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/favicons/mstile-310x150.png +0 -0
  72. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/favicons/mstile-310x310.png +0 -0
  73. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/favicons/mstile-70x70.png +0 -0
  74. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/favicons/safari-pinned-tab.svg +20 -0
  75. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/icons-18-black.png +0 -0
  76. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/icons-18-white.png +0 -0
  77. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/icons-36-black.png +0 -0
  78. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/images/icons-36-white.png +0 -0
  79. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/javascripts/popper.min.js +4 -0
  80. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/jquery.min.js +5 -0
  81. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/jquery.slimscroll.js +443 -0
  82. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/materialize.css +416 -0
  83. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/popper.min.js +4 -0
  84. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/style.css +8042 -0
  85. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/stylesheets/images/ajax-loader.gif +0 -0
  86. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/stylesheets/images/button_black.png +0 -0
  87. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/stylesheets/images/button_blue.png +0 -0
  88. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/stylesheets/images/button_red.png +0 -0
  89. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/stylesheets/images/icons-18-black.png +0 -0
  90. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/stylesheets/images/icons-18-white.png +0 -0
  91. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/stylesheets/images/icons-36-black.png +0 -0
  92. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/stylesheets/images/icons-36-white.png +0 -0
  93. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/waves.css +136 -0
  94. data/lib/generators/jinda_adminbsb/templates/app/assets/jinda_assets/waves.js +582 -0
  95. data/lib/generators/jinda_adminbsb/templates/app/views/adminbsbs/content-bsb.haml +241 -0
  96. data/lib/generators/jinda_adminbsb/templates/app/views/layouts/application.haml +47 -0
  97. data/lib/generators/jinda_adminbsb/templates/app/views/layouts/bsb/_footer.haml +7 -0
  98. data/lib/generators/jinda_adminbsb/templates/app/views/layouts/bsb/_header.haml +147 -0
  99. data/lib/generators/jinda_adminbsb/templates/app/views/layouts/bsb/_menu.haml +47 -0
  100. data/lib/generators/jinda_adminbsb/templates/app/views/layouts/bsb/_menu_mm.haml +34 -0
  101. data/lib/generators/jinda_adminbsb/templates/app/views/layouts/bsb/_rightbar.haml +123 -0
  102. data/lib/generators/jinda_adminbsb/templates/app/views/layouts/bsb/_sidebar.haml +155 -0
  103. data/lib/generators/jinda_adminbsb/templates/app/views/layouts/bsb/application-org.haml +47 -0
  104. data/lib/generators/jinda_adminbsb/templates/application.haml +47 -0
  105. data/lib/generators/jinda_adminbsb/templates/application.js +20 -0
  106. data/lib/generators/jinda_adminbsb/templates/application.scss +17 -0
  107. data/lib/generators/jinda_adminbsb/templates/index.mm +183 -0
  108. data/lib/generators/jinda_adminbsb/templates/jindabsb.css.scss +24 -0
  109. data/lib/generators/jinda_adminbsb/templates/jindabsb.js +7 -0
  110. data/lib/jinda_adminbsb.rb +6 -0
  111. data/lib/jinda_adminbsb/version.rb +3 -0
  112. metadata +196 -0
@@ -0,0 +1,136 @@
1
+ /*!
2
+ * Waves v0.7.5
3
+ * http://fian.my.id/Waves
4
+ *
5
+ * Copyright 2014-2016 Alfiana E. Sibuea and other contributors
6
+ * Released under the MIT license
7
+ * https://github.com/fians/Waves/blob/master/LICENSE
8
+ */
9
+ .waves-effect {
10
+ position: relative;
11
+ cursor: pointer;
12
+ display: inline-block;
13
+ overflow: hidden;
14
+ -webkit-user-select: none;
15
+ -moz-user-select: none;
16
+ -ms-user-select: none;
17
+ user-select: none;
18
+ -webkit-tap-highlight-color: transparent;
19
+ }
20
+ .waves-effect .waves-ripple {
21
+ position: absolute;
22
+ border-radius: 50%;
23
+ width: 100px;
24
+ height: 100px;
25
+ margin-top: -50px;
26
+ margin-left: -50px;
27
+ opacity: 0;
28
+ background: rgba(0, 0, 0, 0.2);
29
+ background: -webkit-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
30
+ background: -o-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
31
+ background: -moz-radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
32
+ background: radial-gradient(rgba(0, 0, 0, 0.2) 0, rgba(0, 0, 0, 0.3) 40%, rgba(0, 0, 0, 0.4) 50%, rgba(0, 0, 0, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
33
+ -webkit-transition: all 0.5s ease-out;
34
+ -moz-transition: all 0.5s ease-out;
35
+ -o-transition: all 0.5s ease-out;
36
+ transition: all 0.5s ease-out;
37
+ -webkit-transition-property: -webkit-transform, opacity;
38
+ -moz-transition-property: -moz-transform, opacity;
39
+ -o-transition-property: -o-transform, opacity;
40
+ transition-property: transform, opacity;
41
+ -webkit-transform: scale(0) translate(0, 0);
42
+ -moz-transform: scale(0) translate(0, 0);
43
+ -ms-transform: scale(0) translate(0, 0);
44
+ -o-transform: scale(0) translate(0, 0);
45
+ transform: scale(0) translate(0, 0);
46
+ pointer-events: none;
47
+ }
48
+ .waves-effect.waves-light .waves-ripple {
49
+ background: rgba(255, 255, 255, 0.4);
50
+ background: -webkit-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
51
+ background: -o-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
52
+ background: -moz-radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
53
+ background: radial-gradient(rgba(255, 255, 255, 0.2) 0, rgba(255, 255, 255, 0.3) 40%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) 70%);
54
+ }
55
+ .waves-effect.waves-classic .waves-ripple {
56
+ background: rgba(0, 0, 0, 0.2);
57
+ }
58
+ .waves-effect.waves-classic.waves-light .waves-ripple {
59
+ background: rgba(255, 255, 255, 0.4);
60
+ }
61
+ .waves-notransition {
62
+ -webkit-transition: none !important;
63
+ -moz-transition: none !important;
64
+ -o-transition: none !important;
65
+ transition: none !important;
66
+ }
67
+ .waves-button,
68
+ .waves-circle {
69
+ -webkit-transform: translateZ(0);
70
+ -moz-transform: translateZ(0);
71
+ -ms-transform: translateZ(0);
72
+ -o-transform: translateZ(0);
73
+ transform: translateZ(0);
74
+ -webkit-mask-image: -webkit-radial-gradient(circle, #ffffff 100%, #000000 100%);
75
+ }
76
+ .waves-button,
77
+ .waves-button:hover,
78
+ .waves-button:visited,
79
+ .waves-button-input {
80
+ white-space: nowrap;
81
+ vertical-align: middle;
82
+ cursor: pointer;
83
+ border: none;
84
+ outline: none;
85
+ color: inherit;
86
+ background-color: rgba(0, 0, 0, 0);
87
+ font-size: 1em;
88
+ line-height: 1em;
89
+ text-align: center;
90
+ text-decoration: none;
91
+ z-index: 1;
92
+ }
93
+ .waves-button {
94
+ padding: 0.85em 1.1em;
95
+ border-radius: 0.2em;
96
+ }
97
+ .waves-button-input {
98
+ margin: 0;
99
+ padding: 0.85em 1.1em;
100
+ }
101
+ .waves-input-wrapper {
102
+ border-radius: 0.2em;
103
+ vertical-align: bottom;
104
+ }
105
+ .waves-input-wrapper.waves-button {
106
+ padding: 0;
107
+ }
108
+ .waves-input-wrapper .waves-button-input {
109
+ position: relative;
110
+ top: 0;
111
+ left: 0;
112
+ z-index: 1;
113
+ }
114
+ .waves-circle {
115
+ text-align: center;
116
+ width: 2.5em;
117
+ height: 2.5em;
118
+ line-height: 2.5em;
119
+ border-radius: 50%;
120
+ }
121
+ .waves-float {
122
+ -webkit-mask-image: none;
123
+ -webkit-box-shadow: 0px 1px 1.5px 1px rgba(0, 0, 0, 0.12);
124
+ box-shadow: 0px 1px 1.5px 1px rgba(0, 0, 0, 0.12);
125
+ -webkit-transition: all 300ms;
126
+ -moz-transition: all 300ms;
127
+ -o-transition: all 300ms;
128
+ transition: all 300ms;
129
+ }
130
+ .waves-float:active {
131
+ -webkit-box-shadow: 0px 8px 20px 1px rgba(0, 0, 0, 0.3);
132
+ box-shadow: 0px 8px 20px 1px rgba(0, 0, 0, 0.3);
133
+ }
134
+ .waves-block {
135
+ display: block;
136
+ }
@@ -0,0 +1,582 @@
1
+ /*!
2
+ * Waves v0.7.5
3
+ * http://fian.my.id/Waves
4
+ *
5
+ * Copyright 2014-2016 Alfiana E. Sibuea and other contributors
6
+ * Released under the MIT license
7
+ * https://github.com/fians/Waves/blob/master/LICENSE
8
+ */
9
+
10
+ ;(function(window, factory) {
11
+ 'use strict';
12
+
13
+ // AMD. Register as an anonymous module. Wrap in function so we have access
14
+ // to root via `this`.
15
+ if (typeof define === 'function' && define.amd) {
16
+ define([], function() {
17
+ return factory.apply(window);
18
+ });
19
+ }
20
+
21
+ // Node. Does not work with strict CommonJS, but only CommonJS-like
22
+ // environments that support module.exports, like Node.
23
+ else if (typeof exports === 'object') {
24
+ module.exports = factory.call(window);
25
+ }
26
+
27
+ // Browser globals.
28
+ else {
29
+ window.Waves = factory.call(window);
30
+ }
31
+ })(typeof global === 'object' ? global : this, function() {
32
+ 'use strict';
33
+
34
+ var Waves = Waves || {};
35
+ var $$ = document.querySelectorAll.bind(document);
36
+ var toString = Object.prototype.toString;
37
+ var isTouchAvailable = 'ontouchstart' in window;
38
+
39
+
40
+ // Find exact position of element
41
+ function isWindow(obj) {
42
+ return obj !== null && obj === obj.window;
43
+ }
44
+
45
+ function getWindow(elem) {
46
+ return isWindow(elem) ? elem : elem.nodeType === 9 && elem.defaultView;
47
+ }
48
+
49
+ function isObject(value) {
50
+ var type = typeof value;
51
+ return type === 'function' || type === 'object' && !!value;
52
+ }
53
+
54
+ function isDOMNode(obj) {
55
+ return isObject(obj) && obj.nodeType > 0;
56
+ }
57
+
58
+ function getWavesElements(nodes) {
59
+ var stringRepr = toString.call(nodes);
60
+
61
+ if (stringRepr === '[object String]') {
62
+ return $$(nodes);
63
+ } else if (isObject(nodes) && /^\[object (Array|HTMLCollection|NodeList|Object)\]$/.test(stringRepr) && nodes.hasOwnProperty('length')) {
64
+ return nodes;
65
+ } else if (isDOMNode(nodes)) {
66
+ return [nodes];
67
+ }
68
+
69
+ return [];
70
+ }
71
+
72
+ function offset(elem) {
73
+ var docElem, win,
74
+ box = { top: 0, left: 0 },
75
+ doc = elem && elem.ownerDocument;
76
+
77
+ docElem = doc.documentElement;
78
+
79
+ if (typeof elem.getBoundingClientRect !== typeof undefined) {
80
+ box = elem.getBoundingClientRect();
81
+ }
82
+ win = getWindow(doc);
83
+ return {
84
+ top: box.top + win.pageYOffset - docElem.clientTop,
85
+ left: box.left + win.pageXOffset - docElem.clientLeft
86
+ };
87
+ }
88
+
89
+ function convertStyle(styleObj) {
90
+ var style = '';
91
+
92
+ for (var prop in styleObj) {
93
+ if (styleObj.hasOwnProperty(prop)) {
94
+ style += (prop + ':' + styleObj[prop] + ';');
95
+ }
96
+ }
97
+
98
+ return style;
99
+ }
100
+
101
+ var Effect = {
102
+
103
+ // Effect duration
104
+ duration: 750,
105
+
106
+ // Effect delay (check for scroll before showing effect)
107
+ delay: 200,
108
+
109
+ show: function(e, element, velocity) {
110
+
111
+ // Disable right click
112
+ if (e.button === 2) {
113
+ return false;
114
+ }
115
+
116
+ element = element || this;
117
+
118
+ // Create ripple
119
+ var ripple = document.createElement('div');
120
+ ripple.className = 'waves-ripple waves-rippling';
121
+ element.appendChild(ripple);
122
+
123
+ // Get click coordinate and element width
124
+ var pos = offset(element);
125
+ var relativeY = 0;
126
+ var relativeX = 0;
127
+ // Support for touch devices
128
+ if('touches' in e && e.touches.length) {
129
+ relativeY = (e.touches[0].pageY - pos.top);
130
+ relativeX = (e.touches[0].pageX - pos.left);
131
+ }
132
+ //Normal case
133
+ else {
134
+ relativeY = (e.pageY - pos.top);
135
+ relativeX = (e.pageX - pos.left);
136
+ }
137
+ // Support for synthetic events
138
+ relativeX = relativeX >= 0 ? relativeX : 0;
139
+ relativeY = relativeY >= 0 ? relativeY : 0;
140
+
141
+ var scale = 'scale(' + ((element.clientWidth / 100) * 3) + ')';
142
+ var translate = 'translate(0,0)';
143
+
144
+ if (velocity) {
145
+ translate = 'translate(' + (velocity.x) + 'px, ' + (velocity.y) + 'px)';
146
+ }
147
+
148
+ // Attach data to element
149
+ ripple.setAttribute('data-hold', Date.now());
150
+ ripple.setAttribute('data-x', relativeX);
151
+ ripple.setAttribute('data-y', relativeY);
152
+ ripple.setAttribute('data-scale', scale);
153
+ ripple.setAttribute('data-translate', translate);
154
+
155
+ // Set ripple position
156
+ var rippleStyle = {
157
+ top: relativeY + 'px',
158
+ left: relativeX + 'px'
159
+ };
160
+
161
+ ripple.classList.add('waves-notransition');
162
+ ripple.setAttribute('style', convertStyle(rippleStyle));
163
+ ripple.classList.remove('waves-notransition');
164
+
165
+ // Scale the ripple
166
+ rippleStyle['-webkit-transform'] = scale + ' ' + translate;
167
+ rippleStyle['-moz-transform'] = scale + ' ' + translate;
168
+ rippleStyle['-ms-transform'] = scale + ' ' + translate;
169
+ rippleStyle['-o-transform'] = scale + ' ' + translate;
170
+ rippleStyle.transform = scale + ' ' + translate;
171
+ rippleStyle.opacity = '1';
172
+
173
+ var duration = e.type === 'mousemove' ? 2500 : Effect.duration;
174
+ rippleStyle['-webkit-transition-duration'] = duration + 'ms';
175
+ rippleStyle['-moz-transition-duration'] = duration + 'ms';
176
+ rippleStyle['-o-transition-duration'] = duration + 'ms';
177
+ rippleStyle['transition-duration'] = duration + 'ms';
178
+
179
+ ripple.setAttribute('style', convertStyle(rippleStyle));
180
+ },
181
+
182
+ hide: function(e, element) {
183
+ element = element || this;
184
+
185
+ var ripples = element.getElementsByClassName('waves-rippling');
186
+
187
+ for (var i = 0, len = ripples.length; i < len; i++) {
188
+ removeRipple(e, element, ripples[i]);
189
+ }
190
+ }
191
+ };
192
+
193
+ /**
194
+ * Collection of wrapper for HTML element that only have single tag
195
+ * like <input> and <img>
196
+ */
197
+ var TagWrapper = {
198
+
199
+ // Wrap <input> tag so it can perform the effect
200
+ input: function(element) {
201
+
202
+ var parent = element.parentNode;
203
+
204
+ // If input already have parent just pass through
205
+ if (parent.tagName.toLowerCase() === 'i' && parent.classList.contains('waves-effect')) {
206
+ return;
207
+ }
208
+
209
+ // Put element class and style to the specified parent
210
+ var wrapper = document.createElement('i');
211
+ wrapper.className = element.className + ' waves-input-wrapper';
212
+ element.className = 'waves-button-input';
213
+
214
+ // Put element as child
215
+ parent.replaceChild(wrapper, element);
216
+ wrapper.appendChild(element);
217
+
218
+ // Apply element color and background color to wrapper
219
+ var elementStyle = window.getComputedStyle(element, null);
220
+ var color = elementStyle.color;
221
+ var backgroundColor = elementStyle.backgroundColor;
222
+
223
+ wrapper.setAttribute('style', 'color:' + color + ';background:' + backgroundColor);
224
+ element.setAttribute('style', 'background-color:rgba(0,0,0,0);');
225
+
226
+ },
227
+
228
+ // Wrap <img> tag so it can perform the effect
229
+ img: function(element) {
230
+
231
+ var parent = element.parentNode;
232
+
233
+ // If input already have parent just pass through
234
+ if (parent.tagName.toLowerCase() === 'i' && parent.classList.contains('waves-effect')) {
235
+ return;
236
+ }
237
+
238
+ // Put element as child
239
+ var wrapper = document.createElement('i');
240
+ parent.replaceChild(wrapper, element);
241
+ wrapper.appendChild(element);
242
+
243
+ }
244
+ };
245
+
246
+ /**
247
+ * Hide the effect and remove the ripple. Must be
248
+ * a separate function to pass the JSLint...
249
+ */
250
+ function removeRipple(e, el, ripple) {
251
+
252
+ // Check if the ripple still exist
253
+ if (!ripple) {
254
+ return;
255
+ }
256
+
257
+ ripple.classList.remove('waves-rippling');
258
+
259
+ var relativeX = ripple.getAttribute('data-x');
260
+ var relativeY = ripple.getAttribute('data-y');
261
+ var scale = ripple.getAttribute('data-scale');
262
+ var translate = ripple.getAttribute('data-translate');
263
+
264
+ // Get delay beetween mousedown and mouse leave
265
+ var diff = Date.now() - Number(ripple.getAttribute('data-hold'));
266
+ var delay = 350 - diff;
267
+
268
+ if (delay < 0) {
269
+ delay = 0;
270
+ }
271
+
272
+ if (e.type === 'mousemove') {
273
+ delay = 150;
274
+ }
275
+
276
+ // Fade out ripple after delay
277
+ var duration = e.type === 'mousemove' ? 2500 : Effect.duration;
278
+
279
+ setTimeout(function() {
280
+
281
+ var style = {
282
+ top: relativeY + 'px',
283
+ left: relativeX + 'px',
284
+ opacity: '0',
285
+
286
+ // Duration
287
+ '-webkit-transition-duration': duration + 'ms',
288
+ '-moz-transition-duration': duration + 'ms',
289
+ '-o-transition-duration': duration + 'ms',
290
+ 'transition-duration': duration + 'ms',
291
+ '-webkit-transform': scale + ' ' + translate,
292
+ '-moz-transform': scale + ' ' + translate,
293
+ '-ms-transform': scale + ' ' + translate,
294
+ '-o-transform': scale + ' ' + translate,
295
+ 'transform': scale + ' ' + translate
296
+ };
297
+
298
+ ripple.setAttribute('style', convertStyle(style));
299
+
300
+ setTimeout(function() {
301
+ try {
302
+ el.removeChild(ripple);
303
+ } catch (e) {
304
+ return false;
305
+ }
306
+ }, duration);
307
+
308
+ }, delay);
309
+ }
310
+
311
+
312
+ /**
313
+ * Disable mousedown event for 500ms during and after touch
314
+ */
315
+ var TouchHandler = {
316
+
317
+ /* uses an integer rather than bool so there's no issues with
318
+ * needing to clear timeouts if another touch event occurred
319
+ * within the 500ms. Cannot mouseup between touchstart and
320
+ * touchend, nor in the 500ms after touchend. */
321
+ touches: 0,
322
+
323
+ allowEvent: function(e) {
324
+
325
+ var allow = true;
326
+
327
+ if (/^(mousedown|mousemove)$/.test(e.type) && TouchHandler.touches) {
328
+ allow = false;
329
+ }
330
+
331
+ return allow;
332
+ },
333
+ registerEvent: function(e) {
334
+ var eType = e.type;
335
+
336
+ if (eType === 'touchstart') {
337
+
338
+ TouchHandler.touches += 1; // push
339
+
340
+ } else if (/^(touchend|touchcancel)$/.test(eType)) {
341
+
342
+ setTimeout(function() {
343
+ if (TouchHandler.touches) {
344
+ TouchHandler.touches -= 1; // pop after 500ms
345
+ }
346
+ }, 500);
347
+
348
+ }
349
+ }
350
+ };
351
+
352
+
353
+ /**
354
+ * Delegated click handler for .waves-effect element.
355
+ * returns null when .waves-effect element not in "click tree"
356
+ */
357
+ function getWavesEffectElement(e) {
358
+
359
+ if (TouchHandler.allowEvent(e) === false) {
360
+ return null;
361
+ }
362
+
363
+ var element = null;
364
+ var target = e.target || e.srcElement;
365
+
366
+ while (target.parentElement !== null) {
367
+ if (target.classList.contains('waves-effect') && (!(target instanceof SVGElement))) {
368
+ element = target;
369
+ break;
370
+ }
371
+ target = target.parentElement;
372
+ }
373
+
374
+ return element;
375
+ }
376
+
377
+ /**
378
+ * Bubble the click and show effect if .waves-effect elem was found
379
+ */
380
+ function showEffect(e) {
381
+
382
+ // Disable effect if element has "disabled" property on it
383
+ // In some cases, the event is not triggered by the current element
384
+ // if (e.target.getAttribute('disabled') !== null) {
385
+ // return;
386
+ // }
387
+
388
+ var element = getWavesEffectElement(e);
389
+
390
+ if (element !== null) {
391
+
392
+ // Make it sure the element has either disabled property, disabled attribute or 'disabled' class
393
+ if (element.disabled || element.getAttribute('disabled') || element.classList.contains('disabled')) {
394
+ return;
395
+ }
396
+
397
+ TouchHandler.registerEvent(e);
398
+
399
+ if (e.type === 'touchstart' && Effect.delay) {
400
+
401
+ var hidden = false;
402
+
403
+ var timer = setTimeout(function () {
404
+ timer = null;
405
+ Effect.show(e, element);
406
+ }, Effect.delay);
407
+
408
+ var hideEffect = function(hideEvent) {
409
+
410
+ // if touch hasn't moved, and effect not yet started: start effect now
411
+ if (timer) {
412
+ clearTimeout(timer);
413
+ timer = null;
414
+ Effect.show(e, element);
415
+ }
416
+ if (!hidden) {
417
+ hidden = true;
418
+ Effect.hide(hideEvent, element);
419
+ }
420
+ };
421
+
422
+ var touchMove = function(moveEvent) {
423
+ if (timer) {
424
+ clearTimeout(timer);
425
+ timer = null;
426
+ }
427
+ hideEffect(moveEvent);
428
+ };
429
+
430
+ element.addEventListener('touchmove', touchMove, false);
431
+ element.addEventListener('touchend', hideEffect, false);
432
+ element.addEventListener('touchcancel', hideEffect, false);
433
+
434
+ } else {
435
+
436
+ Effect.show(e, element);
437
+
438
+ if (isTouchAvailable) {
439
+ element.addEventListener('touchend', Effect.hide, false);
440
+ element.addEventListener('touchcancel', Effect.hide, false);
441
+ }
442
+
443
+ element.addEventListener('mouseup', Effect.hide, false);
444
+ element.addEventListener('mouseleave', Effect.hide, false);
445
+ }
446
+ }
447
+ }
448
+
449
+ Waves.init = function(options) {
450
+ var body = document.body;
451
+
452
+ options = options || {};
453
+
454
+ if ('duration' in options) {
455
+ Effect.duration = options.duration;
456
+ }
457
+
458
+ if ('delay' in options) {
459
+ Effect.delay = options.delay;
460
+ }
461
+
462
+ if (isTouchAvailable) {
463
+ body.addEventListener('touchstart', showEffect, false);
464
+ body.addEventListener('touchcancel', TouchHandler.registerEvent, false);
465
+ body.addEventListener('touchend', TouchHandler.registerEvent, false);
466
+ }
467
+
468
+ body.addEventListener('mousedown', showEffect, false);
469
+ };
470
+
471
+
472
+ /**
473
+ * Attach Waves to dynamically loaded inputs, or add .waves-effect and other
474
+ * waves classes to a set of elements. Set drag to true if the ripple mouseover
475
+ * or skimming effect should be applied to the elements.
476
+ */
477
+ Waves.attach = function(elements, classes) {
478
+
479
+ elements = getWavesElements(elements);
480
+
481
+ if (toString.call(classes) === '[object Array]') {
482
+ classes = classes.join(' ');
483
+ }
484
+
485
+ classes = classes ? ' ' + classes : '';
486
+
487
+ var element, tagName;
488
+
489
+ for (var i = 0, len = elements.length; i < len; i++) {
490
+
491
+ element = elements[i];
492
+ tagName = element.tagName.toLowerCase();
493
+
494
+ if (['input', 'img'].indexOf(tagName) !== -1) {
495
+ TagWrapper[tagName](element);
496
+ element = element.parentElement;
497
+ }
498
+
499
+ if (element.className.indexOf('waves-effect') === -1) {
500
+ element.className += ' waves-effect' + classes;
501
+ }
502
+ }
503
+ };
504
+
505
+
506
+ /**
507
+ * Cause a ripple to appear in an element via code.
508
+ */
509
+ Waves.ripple = function(elements, options) {
510
+ elements = getWavesElements(elements);
511
+ var elementsLen = elements.length;
512
+
513
+ options = options || {};
514
+ options.wait = options.wait || 0;
515
+ options.position = options.position || null; // default = centre of element
516
+
517
+
518
+ if (elementsLen) {
519
+ var element, pos, off, centre = {}, i = 0;
520
+ var mousedown = {
521
+ type: 'mousedown',
522
+ button: 1
523
+ };
524
+ var hideRipple = function(mouseup, element) {
525
+ return function() {
526
+ Effect.hide(mouseup, element);
527
+ };
528
+ };
529
+
530
+ for (; i < elementsLen; i++) {
531
+ element = elements[i];
532
+ pos = options.position || {
533
+ x: element.clientWidth / 2,
534
+ y: element.clientHeight / 2
535
+ };
536
+
537
+ off = offset(element);
538
+ centre.x = off.left + pos.x;
539
+ centre.y = off.top + pos.y;
540
+
541
+ mousedown.pageX = centre.x;
542
+ mousedown.pageY = centre.y;
543
+
544
+ Effect.show(mousedown, element);
545
+
546
+ if (options.wait >= 0 && options.wait !== null) {
547
+ var mouseup = {
548
+ type: 'mouseup',
549
+ button: 1
550
+ };
551
+
552
+ setTimeout(hideRipple(mouseup, element), options.wait);
553
+ }
554
+ }
555
+ }
556
+ };
557
+
558
+ /**
559
+ * Remove all ripples from an element.
560
+ */
561
+ Waves.calm = function(elements) {
562
+ elements = getWavesElements(elements);
563
+ var mouseup = {
564
+ type: 'mouseup',
565
+ button: 1
566
+ };
567
+
568
+ for (var i = 0, len = elements.length; i < len; i++) {
569
+ Effect.hide(mouseup, elements[i]);
570
+ }
571
+ };
572
+
573
+ /**
574
+ * Deprecated API fallback
575
+ */
576
+ Waves.displayEffect = function(options) {
577
+ console.error('Waves.displayEffect() has been deprecated and will be removed in future version. Please use Waves.init() to initialize Waves effect');
578
+ Waves.init(options);
579
+ };
580
+
581
+ return Waves;
582
+ });