jinda_adminbsb 0.0.1

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 (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
+ });