administrate-materialize-theme 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +49 -0
  4. data/Rakefile +1 -0
  5. data/app/assets/javascripts/administrate-materialize-theme/anime.min.js +34 -0
  6. data/app/assets/javascripts/administrate-materialize-theme/autocomplete.js +450 -0
  7. data/app/assets/javascripts/administrate-materialize-theme/bin/materialize.js +12374 -0
  8. data/app/assets/javascripts/administrate-materialize-theme/bin/materialize.min.js +6 -0
  9. data/app/assets/javascripts/administrate-materialize-theme/buttons.js +354 -0
  10. data/app/assets/javascripts/administrate-materialize-theme/cards.js +40 -0
  11. data/app/assets/javascripts/administrate-materialize-theme/carousel.js +717 -0
  12. data/app/assets/javascripts/administrate-materialize-theme/cash.js +960 -0
  13. data/app/assets/javascripts/administrate-materialize-theme/characterCounter.js +136 -0
  14. data/app/assets/javascripts/administrate-materialize-theme/chips.js +481 -0
  15. data/app/assets/javascripts/administrate-materialize-theme/collapsible.js +275 -0
  16. data/app/assets/javascripts/administrate-materialize-theme/component.js +44 -0
  17. data/app/assets/javascripts/administrate-materialize-theme/datepicker.js +975 -0
  18. data/app/assets/javascripts/administrate-materialize-theme/dropdown.js +617 -0
  19. data/app/assets/javascripts/administrate-materialize-theme/forms.js +275 -0
  20. data/app/assets/javascripts/administrate-materialize-theme/global.js +427 -0
  21. data/app/assets/javascripts/administrate-materialize-theme/materialbox.js +453 -0
  22. data/app/assets/javascripts/administrate-materialize-theme/modal.js +382 -0
  23. data/app/assets/javascripts/administrate-materialize-theme/parallax.js +138 -0
  24. data/app/assets/javascripts/administrate-materialize-theme/pushpin.js +145 -0
  25. data/app/assets/javascripts/administrate-materialize-theme/range.js +263 -0
  26. data/app/assets/javascripts/administrate-materialize-theme/scrollspy.js +295 -0
  27. data/app/assets/javascripts/administrate-materialize-theme/select.js +432 -0
  28. data/app/assets/javascripts/administrate-materialize-theme/sidenav.js +580 -0
  29. data/app/assets/javascripts/administrate-materialize-theme/slider.js +359 -0
  30. data/app/assets/javascripts/administrate-materialize-theme/tabs.js +402 -0
  31. data/app/assets/javascripts/administrate-materialize-theme/tapTarget.js +314 -0
  32. data/app/assets/javascripts/administrate-materialize-theme/theme.js +6 -0
  33. data/app/assets/javascripts/administrate-materialize-theme/timepicker.js +647 -0
  34. data/app/assets/javascripts/administrate-materialize-theme/toasts.js +310 -0
  35. data/app/assets/javascripts/administrate-materialize-theme/tooltip.js +303 -0
  36. data/app/assets/javascripts/administrate-materialize-theme/waves.js +335 -0
  37. data/app/assets/stylesheets/administrate-materialize-theme/components/_badges.scss +55 -0
  38. data/app/assets/stylesheets/administrate-materialize-theme/components/_buttons.scss +322 -0
  39. data/app/assets/stylesheets/administrate-materialize-theme/components/_cards.scss +195 -0
  40. data/app/assets/stylesheets/administrate-materialize-theme/components/_carousel.scss +90 -0
  41. data/app/assets/stylesheets/administrate-materialize-theme/components/_chips.scss +90 -0
  42. data/app/assets/stylesheets/administrate-materialize-theme/components/_collapsible.scss +91 -0
  43. data/app/assets/stylesheets/administrate-materialize-theme/components/_color-classes.scss +32 -0
  44. data/app/assets/stylesheets/administrate-materialize-theme/components/_color-variables.scss +370 -0
  45. data/app/assets/stylesheets/administrate-materialize-theme/components/_datepicker.scss +191 -0
  46. data/app/assets/stylesheets/administrate-materialize-theme/components/_dropdown.scss +85 -0
  47. data/app/assets/stylesheets/administrate-materialize-theme/components/_global.scss +769 -0
  48. data/app/assets/stylesheets/administrate-materialize-theme/components/_grid.scss +156 -0
  49. data/app/assets/stylesheets/administrate-materialize-theme/components/_icons-material-design.scss +5 -0
  50. data/app/assets/stylesheets/administrate-materialize-theme/components/_materialbox.scss +43 -0
  51. data/app/assets/stylesheets/administrate-materialize-theme/components/_modal.scss +94 -0
  52. data/app/assets/stylesheets/administrate-materialize-theme/components/_navbar.scss +208 -0
  53. data/app/assets/stylesheets/administrate-materialize-theme/components/_normalize.scss +447 -0
  54. data/app/assets/stylesheets/administrate-materialize-theme/components/_preloader.scss +334 -0
  55. data/app/assets/stylesheets/administrate-materialize-theme/components/_pulse.scss +34 -0
  56. data/app/assets/stylesheets/administrate-materialize-theme/components/_sidenav.scss +216 -0
  57. data/app/assets/stylesheets/administrate-materialize-theme/components/_slider.scss +92 -0
  58. data/app/assets/stylesheets/administrate-materialize-theme/components/_table_of_contents.scss +33 -0
  59. data/app/assets/stylesheets/administrate-materialize-theme/components/_tabs.scss +99 -0
  60. data/app/assets/stylesheets/administrate-materialize-theme/components/_tapTarget.scss +103 -0
  61. data/app/assets/stylesheets/administrate-materialize-theme/components/_timepicker.scss +183 -0
  62. data/app/assets/stylesheets/administrate-materialize-theme/components/_toast.scss +58 -0
  63. data/app/assets/stylesheets/administrate-materialize-theme/components/_tooltip.scss +32 -0
  64. data/app/assets/stylesheets/administrate-materialize-theme/components/_transitions.scss +13 -0
  65. data/app/assets/stylesheets/administrate-materialize-theme/components/_typography.scss +60 -0
  66. data/app/assets/stylesheets/administrate-materialize-theme/components/_variables.scss +349 -0
  67. data/app/assets/stylesheets/administrate-materialize-theme/components/_waves.scss +114 -0
  68. data/app/assets/stylesheets/administrate-materialize-theme/components/forms/_checkboxes.scss +200 -0
  69. data/app/assets/stylesheets/administrate-materialize-theme/components/forms/_file-input.scss +44 -0
  70. data/app/assets/stylesheets/administrate-materialize-theme/components/forms/_forms.scss +22 -0
  71. data/app/assets/stylesheets/administrate-materialize-theme/components/forms/_input-fields.scss +354 -0
  72. data/app/assets/stylesheets/administrate-materialize-theme/components/forms/_radio-buttons.scss +115 -0
  73. data/app/assets/stylesheets/administrate-materialize-theme/components/forms/_range.scss +161 -0
  74. data/app/assets/stylesheets/administrate-materialize-theme/components/forms/_select.scss +180 -0
  75. data/app/assets/stylesheets/administrate-materialize-theme/components/forms/_switches.scss +89 -0
  76. data/app/assets/stylesheets/administrate-materialize-theme/materialize.scss +41 -0
  77. data/app/assets/stylesheets/administrate-materialize-theme/theme.scss +200 -0
  78. data/lib/administrate-materialize-theme.rb +6 -0
  79. data/lib/administrate-materialize-theme/engine.rb +7 -0
  80. data/lib/administrate-materialize-theme/version.rb +5 -0
  81. metadata +150 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8e9b57be04016df2e8622c07deafeccc4dbb15315a625adf4977239b3d5c2001
4
+ data.tar.gz: 6be1ef420e4868dcc2b5ea45e2333e1e34b4143eb5de410dc4a13e7e9aabead1
5
+ SHA512:
6
+ metadata.gz: 7a458136fa14171318c348764820fe27d57eedc8afb200c42b800521fa32b9c6063fce41063f2f86a4be85d98625df1dd974676eb241ab556c34dadc0d127807
7
+ data.tar.gz: c53e8bf8500de6de16274d24eea50171fa98d33903119caf40dc7281c420b1dfb244a10793574e32799305ec93ba39098ad08515de9e1b8a9d7b968c84f8071c
@@ -0,0 +1,20 @@
1
+ Copyright 2020 Mattia Roccoberton
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,49 @@
1
+ # Administrate Materialize Theme
2
+ A Material theme form [Administrate](https://github.com/thoughtbot/administrate), based on [Materialize](https://materializecss.com) framework.
3
+
4
+ Features:
5
+ - Material design responsive theme;
6
+ - customizable using SASS variables;
7
+ - allow to use *Materialize* in the admin.
8
+
9
+ ![screenshot](screenshot.png)
10
+
11
+ ## Installation
12
+ - If not already installed Administrate, set it up
13
+ - Add to *Gemfile*: `gem 'administrate-materialize-theme'` (and execute `bundle`)
14
+ - Edit *app/assets/config/manifest.js*, adding at the end:
15
+
16
+ ```js
17
+ //= link administrate-materialize-theme/theme.css
18
+ //= link administrate-materialize-theme/theme.js
19
+ ```
20
+
21
+ - Edit *app/views/layouts/admin/application.html.erb* (you can generate it using `rails generate administrate:views:layout`), adding before head closing tag:
22
+
23
+ ```html
24
+ <%= stylesheet_link_tag 'administrate-materialize-theme/theme', media: 'all' %>
25
+ <%= javascript_include_tag 'administrate-materialize-theme/theme' %>
26
+ ```
27
+
28
+ ## Customizations
29
+ To change Materialize variables it's necessary to create a new *.scss* (or *.sass*) file like this one (ex. *admin.scss*):
30
+
31
+ ```scss
32
+ // app/assets/stylesheets/admin.scss
33
+ $primary-color: #FB1;
34
+ @import 'administrate-materialize-theme/theme';
35
+ ```
36
+
37
+ And replace the link tag in the *application.html.erb* with: `<%= stylesheet_link_tag 'admin', media: 'all' %>`
38
+
39
+ For the complete list of options take a look [here](app/assets/stylesheets/administrate-materialize-theme/components/_variables.scss).
40
+
41
+ ## Do you like it? Star it!
42
+ If you use this component just star it. A developer is more motivated to improve a project when there
43
+ is some interest.
44
+
45
+ ## Contributors
46
+ - [Mattia Roccoberton](https://blocknot.es/): author
47
+
48
+ ## License
49
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1 @@
1
+ # frozen_string_literal: true
@@ -0,0 +1,34 @@
1
+ /*
2
+ v2.2.0
3
+ 2017 Julian Garnier
4
+ Released under the MIT license
5
+ */
6
+ var $jscomp={scope:{}};$jscomp.defineProperty="function"==typeof Object.defineProperties?Object.defineProperty:function(e,r,p){if(p.get||p.set)throw new TypeError("ES3 does not support getters and setters.");e!=Array.prototype&&e!=Object.prototype&&(e[r]=p.value)};$jscomp.getGlobal=function(e){return"undefined"!=typeof window&&window===e?e:"undefined"!=typeof global&&null!=global?global:e};$jscomp.global=$jscomp.getGlobal(this);$jscomp.SYMBOL_PREFIX="jscomp_symbol_";
7
+ $jscomp.initSymbol=function(){$jscomp.initSymbol=function(){};$jscomp.global.Symbol||($jscomp.global.Symbol=$jscomp.Symbol)};$jscomp.symbolCounter_=0;$jscomp.Symbol=function(e){return $jscomp.SYMBOL_PREFIX+(e||"")+$jscomp.symbolCounter_++};
8
+ $jscomp.initSymbolIterator=function(){$jscomp.initSymbol();var e=$jscomp.global.Symbol.iterator;e||(e=$jscomp.global.Symbol.iterator=$jscomp.global.Symbol("iterator"));"function"!=typeof Array.prototype[e]&&$jscomp.defineProperty(Array.prototype,e,{configurable:!0,writable:!0,value:function(){return $jscomp.arrayIterator(this)}});$jscomp.initSymbolIterator=function(){}};$jscomp.arrayIterator=function(e){var r=0;return $jscomp.iteratorPrototype(function(){return r<e.length?{done:!1,value:e[r++]}:{done:!0}})};
9
+ $jscomp.iteratorPrototype=function(e){$jscomp.initSymbolIterator();e={next:e};e[$jscomp.global.Symbol.iterator]=function(){return this};return e};$jscomp.array=$jscomp.array||{};$jscomp.iteratorFromArray=function(e,r){$jscomp.initSymbolIterator();e instanceof String&&(e+="");var p=0,m={next:function(){if(p<e.length){var u=p++;return{value:r(u,e[u]),done:!1}}m.next=function(){return{done:!0,value:void 0}};return m.next()}};m[Symbol.iterator]=function(){return m};return m};
10
+ $jscomp.polyfill=function(e,r,p,m){if(r){p=$jscomp.global;e=e.split(".");for(m=0;m<e.length-1;m++){var u=e[m];u in p||(p[u]={});p=p[u]}e=e[e.length-1];m=p[e];r=r(m);r!=m&&null!=r&&$jscomp.defineProperty(p,e,{configurable:!0,writable:!0,value:r})}};$jscomp.polyfill("Array.prototype.keys",function(e){return e?e:function(){return $jscomp.iteratorFromArray(this,function(e){return e})}},"es6-impl","es3");var $jscomp$this=this;
11
+ (function(r){M.anime=r()})(function(){function e(a){if(!h.col(a))try{return document.querySelectorAll(a)}catch(c){}}function r(a,c){for(var d=a.length,b=2<=arguments.length?arguments[1]:void 0,f=[],n=0;n<d;n++)if(n in a){var k=a[n];c.call(b,k,n,a)&&f.push(k)}return f}function p(a){return a.reduce(function(a,d){return a.concat(h.arr(d)?p(d):d)},[])}function m(a){if(h.arr(a))return a;
12
+ h.str(a)&&(a=e(a)||a);return a instanceof NodeList||a instanceof HTMLCollection?[].slice.call(a):[a]}function u(a,c){return a.some(function(a){return a===c})}function C(a){var c={},d;for(d in a)c[d]=a[d];return c}function D(a,c){var d=C(a),b;for(b in a)d[b]=c.hasOwnProperty(b)?c[b]:a[b];return d}function z(a,c){var d=C(a),b;for(b in c)d[b]=h.und(a[b])?c[b]:a[b];return d}function T(a){a=a.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(a,c,d,k){return c+c+d+d+k+k});var c=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(a);
13
+ a=parseInt(c[1],16);var d=parseInt(c[2],16),c=parseInt(c[3],16);return"rgba("+a+","+d+","+c+",1)"}function U(a){function c(a,c,b){0>b&&(b+=1);1<b&&--b;return b<1/6?a+6*(c-a)*b:.5>b?c:b<2/3?a+(c-a)*(2/3-b)*6:a}var d=/hsl\((\d+),\s*([\d.]+)%,\s*([\d.]+)%\)/g.exec(a)||/hsla\((\d+),\s*([\d.]+)%,\s*([\d.]+)%,\s*([\d.]+)\)/g.exec(a);a=parseInt(d[1])/360;var b=parseInt(d[2])/100,f=parseInt(d[3])/100,d=d[4]||1;if(0==b)f=b=a=f;else{var n=.5>f?f*(1+b):f+b-f*b,k=2*f-n,f=c(k,n,a+1/3),b=c(k,n,a);a=c(k,n,a-1/3)}return"rgba("+
14
+ 255*f+","+255*b+","+255*a+","+d+")"}function y(a){if(a=/([\+\-]?[0-9#\.]+)(%|px|pt|em|rem|in|cm|mm|ex|ch|pc|vw|vh|vmin|vmax|deg|rad|turn)?$/.exec(a))return a[2]}function V(a){if(-1<a.indexOf("translate")||"perspective"===a)return"px";if(-1<a.indexOf("rotate")||-1<a.indexOf("skew"))return"deg"}function I(a,c){return h.fnc(a)?a(c.target,c.id,c.total):a}function E(a,c){if(c in a.style)return getComputedStyle(a).getPropertyValue(c.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase())||"0"}function J(a,c){if(h.dom(a)&&
15
+ u(W,c))return"transform";if(h.dom(a)&&(a.getAttribute(c)||h.svg(a)&&a[c]))return"attribute";if(h.dom(a)&&"transform"!==c&&E(a,c))return"css";if(null!=a[c])return"object"}function X(a,c){var d=V(c),d=-1<c.indexOf("scale")?1:0+d;a=a.style.transform;if(!a)return d;for(var b=[],f=[],n=[],k=/(\w+)\((.+?)\)/g;b=k.exec(a);)f.push(b[1]),n.push(b[2]);a=r(n,function(a,b){return f[b]===c});return a.length?a[0]:d}function K(a,c){switch(J(a,c)){case "transform":return X(a,c);case "css":return E(a,c);case "attribute":return a.getAttribute(c)}return a[c]||
16
+ 0}function L(a,c){var d=/^(\*=|\+=|-=)/.exec(a);if(!d)return a;var b=y(a)||0;c=parseFloat(c);a=parseFloat(a.replace(d[0],""));switch(d[0][0]){case "+":return c+a+b;case "-":return c-a+b;case "*":return c*a+b}}function F(a,c){return Math.sqrt(Math.pow(c.x-a.x,2)+Math.pow(c.y-a.y,2))}function M(a){a=a.points;for(var c=0,d,b=0;b<a.numberOfItems;b++){var f=a.getItem(b);0<b&&(c+=F(d,f));d=f}return c}function N(a){if(a.getTotalLength)return a.getTotalLength();switch(a.tagName.toLowerCase()){case "circle":return 2*
17
+ Math.PI*a.getAttribute("r");case "rect":return 2*a.getAttribute("width")+2*a.getAttribute("height");case "line":return F({x:a.getAttribute("x1"),y:a.getAttribute("y1")},{x:a.getAttribute("x2"),y:a.getAttribute("y2")});case "polyline":return M(a);case "polygon":var c=a.points;return M(a)+F(c.getItem(c.numberOfItems-1),c.getItem(0))}}function Y(a,c){function d(b){b=void 0===b?0:b;return a.el.getPointAtLength(1<=c+b?c+b:0)}var b=d(),f=d(-1),n=d(1);switch(a.property){case "x":return b.x;case "y":return b.y;
18
+ case "angle":return 180*Math.atan2(n.y-f.y,n.x-f.x)/Math.PI}}function O(a,c){var d=/-?\d*\.?\d+/g,b;b=h.pth(a)?a.totalLength:a;if(h.col(b))if(h.rgb(b)){var f=/rgb\((\d+,\s*[\d]+,\s*[\d]+)\)/g.exec(b);b=f?"rgba("+f[1]+",1)":b}else b=h.hex(b)?T(b):h.hsl(b)?U(b):void 0;else f=(f=y(b))?b.substr(0,b.length-f.length):b,b=c&&!/\s/g.test(b)?f+c:f;b+="";return{original:b,numbers:b.match(d)?b.match(d).map(Number):[0],strings:h.str(a)||c?b.split(d):[]}}function P(a){a=a?p(h.arr(a)?a.map(m):m(a)):[];return r(a,
19
+ function(a,d,b){return b.indexOf(a)===d})}function Z(a){var c=P(a);return c.map(function(a,b){return{target:a,id:b,total:c.length}})}function aa(a,c){var d=C(c);if(h.arr(a)){var b=a.length;2!==b||h.obj(a[0])?h.fnc(c.duration)||(d.duration=c.duration/b):a={value:a}}return m(a).map(function(a,b){b=b?0:c.delay;a=h.obj(a)&&!h.pth(a)?a:{value:a};h.und(a.delay)&&(a.delay=b);return a}).map(function(a){return z(a,d)})}function ba(a,c){var d={},b;for(b in a){var f=I(a[b],c);h.arr(f)&&(f=f.map(function(a){return I(a,
20
+ c)}),1===f.length&&(f=f[0]));d[b]=f}d.duration=parseFloat(d.duration);d.delay=parseFloat(d.delay);return d}function ca(a){return h.arr(a)?A.apply(this,a):Q[a]}function da(a,c){var d;return a.tweens.map(function(b){b=ba(b,c);var f=b.value,e=K(c.target,a.name),k=d?d.to.original:e,k=h.arr(f)?f[0]:k,w=L(h.arr(f)?f[1]:f,k),e=y(w)||y(k)||y(e);b.from=O(k,e);b.to=O(w,e);b.start=d?d.end:a.offset;b.end=b.start+b.delay+b.duration;b.easing=ca(b.easing);b.elasticity=(1E3-Math.min(Math.max(b.elasticity,1),999))/
21
+ 1E3;b.isPath=h.pth(f);b.isColor=h.col(b.from.original);b.isColor&&(b.round=1);return d=b})}function ea(a,c){return r(p(a.map(function(a){return c.map(function(b){var c=J(a.target,b.name);if(c){var d=da(b,a);b={type:c,property:b.name,animatable:a,tweens:d,duration:d[d.length-1].end,delay:d[0].delay}}else b=void 0;return b})})),function(a){return!h.und(a)})}function R(a,c,d,b){var f="delay"===a;return c.length?(f?Math.min:Math.max).apply(Math,c.map(function(b){return b[a]})):f?b.delay:d.offset+b.delay+
22
+ b.duration}function fa(a){var c=D(ga,a),d=D(S,a),b=Z(a.targets),f=[],e=z(c,d),k;for(k in a)e.hasOwnProperty(k)||"targets"===k||f.push({name:k,offset:e.offset,tweens:aa(a[k],d)});a=ea(b,f);return z(c,{children:[],animatables:b,animations:a,duration:R("duration",a,c,d),delay:R("delay",a,c,d)})}function q(a){function c(){return window.Promise&&new Promise(function(a){return p=a})}function d(a){return g.reversed?g.duration-a:a}function b(a){for(var b=0,c={},d=g.animations,f=d.length;b<f;){var e=d[b],
23
+ k=e.animatable,h=e.tweens,n=h.length-1,l=h[n];n&&(l=r(h,function(b){return a<b.end})[0]||l);for(var h=Math.min(Math.max(a-l.start-l.delay,0),l.duration)/l.duration,w=isNaN(h)?1:l.easing(h,l.elasticity),h=l.to.strings,p=l.round,n=[],m=void 0,m=l.to.numbers.length,t=0;t<m;t++){var x=void 0,x=l.to.numbers[t],q=l.from.numbers[t],x=l.isPath?Y(l.value,w*x):q+w*(x-q);p&&(l.isColor&&2<t||(x=Math.round(x*p)/p));n.push(x)}if(l=h.length)for(m=h[0],w=0;w<l;w++)p=h[w+1],t=n[w],isNaN(t)||(m=p?m+(t+p):m+(t+" "));
24
+ else m=n[0];ha[e.type](k.target,e.property,m,c,k.id);e.currentValue=m;b++}if(b=Object.keys(c).length)for(d=0;d<b;d++)H||(H=E(document.body,"transform")?"transform":"-webkit-transform"),g.animatables[d].target.style[H]=c[d].join(" ");g.currentTime=a;g.progress=a/g.duration*100}function f(a){if(g[a])g[a](g)}function e(){g.remaining&&!0!==g.remaining&&g.remaining--}function k(a){var k=g.duration,n=g.offset,w=n+g.delay,r=g.currentTime,x=g.reversed,q=d(a);if(g.children.length){var u=g.children,v=u.length;
25
+ if(q>=g.currentTime)for(var G=0;G<v;G++)u[G].seek(q);else for(;v--;)u[v].seek(q)}if(q>=w||!k)g.began||(g.began=!0,f("begin")),f("run");if(q>n&&q<k)b(q);else if(q<=n&&0!==r&&(b(0),x&&e()),q>=k&&r!==k||!k)b(k),x||e();f("update");a>=k&&(g.remaining?(t=h,"alternate"===g.direction&&(g.reversed=!g.reversed)):(g.pause(),g.completed||(g.completed=!0,f("complete"),"Promise"in window&&(p(),m=c()))),l=0)}a=void 0===a?{}:a;var h,t,l=0,p=null,m=c(),g=fa(a);g.reset=function(){var a=g.direction,c=g.loop;g.currentTime=
26
+ 0;g.progress=0;g.paused=!0;g.began=!1;g.completed=!1;g.reversed="reverse"===a;g.remaining="alternate"===a&&1===c?2:c;b(0);for(a=g.children.length;a--;)g.children[a].reset()};g.tick=function(a){h=a;t||(t=h);k((l+h-t)*q.speed)};g.seek=function(a){k(d(a))};g.pause=function(){var a=v.indexOf(g);-1<a&&v.splice(a,1);g.paused=!0};g.play=function(){g.paused&&(g.paused=!1,t=0,l=d(g.currentTime),v.push(g),B||ia())};g.reverse=function(){g.reversed=!g.reversed;t=0;l=d(g.currentTime)};g.restart=function(){g.pause();
27
+ g.reset();g.play()};g.finished=m;g.reset();g.autoplay&&g.play();return g}var ga={update:void 0,begin:void 0,run:void 0,complete:void 0,loop:1,direction:"normal",autoplay:!0,offset:0},S={duration:1E3,delay:0,easing:"easeOutElastic",elasticity:500,round:0},W="translateX translateY translateZ rotate rotateX rotateY rotateZ scale scaleX scaleY scaleZ skewX skewY perspective".split(" "),H,h={arr:function(a){return Array.isArray(a)},obj:function(a){return-1<Object.prototype.toString.call(a).indexOf("Object")},
28
+ pth:function(a){return h.obj(a)&&a.hasOwnProperty("totalLength")},svg:function(a){return a instanceof SVGElement},dom:function(a){return a.nodeType||h.svg(a)},str:function(a){return"string"===typeof a},fnc:function(a){return"function"===typeof a},und:function(a){return"undefined"===typeof a},hex:function(a){return/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(a)},rgb:function(a){return/^rgb/.test(a)},hsl:function(a){return/^hsl/.test(a)},col:function(a){return h.hex(a)||h.rgb(a)||h.hsl(a)}},A=function(){function a(a,
29
+ d,b){return(((1-3*b+3*d)*a+(3*b-6*d))*a+3*d)*a}return function(c,d,b,f){if(0<=c&&1>=c&&0<=b&&1>=b){var e=new Float32Array(11);if(c!==d||b!==f)for(var k=0;11>k;++k)e[k]=a(.1*k,c,b);return function(k){if(c===d&&b===f)return k;if(0===k)return 0;if(1===k)return 1;for(var h=0,l=1;10!==l&&e[l]<=k;++l)h+=.1;--l;var l=h+(k-e[l])/(e[l+1]-e[l])*.1,n=3*(1-3*b+3*c)*l*l+2*(3*b-6*c)*l+3*c;if(.001<=n){for(h=0;4>h;++h){n=3*(1-3*b+3*c)*l*l+2*(3*b-6*c)*l+3*c;if(0===n)break;var m=a(l,c,b)-k,l=l-m/n}k=l}else if(0===
30
+ n)k=l;else{var l=h,h=h+.1,g=0;do m=l+(h-l)/2,n=a(m,c,b)-k,0<n?h=m:l=m;while(1e-7<Math.abs(n)&&10>++g);k=m}return a(k,d,f)}}}}(),Q=function(){function a(a,b){return 0===a||1===a?a:-Math.pow(2,10*(a-1))*Math.sin(2*(a-1-b/(2*Math.PI)*Math.asin(1))*Math.PI/b)}var c="Quad Cubic Quart Quint Sine Expo Circ Back Elastic".split(" "),d={In:[[.55,.085,.68,.53],[.55,.055,.675,.19],[.895,.03,.685,.22],[.755,.05,.855,.06],[.47,0,.745,.715],[.95,.05,.795,.035],[.6,.04,.98,.335],[.6,-.28,.735,.045],a],Out:[[.25,
31
+ .46,.45,.94],[.215,.61,.355,1],[.165,.84,.44,1],[.23,1,.32,1],[.39,.575,.565,1],[.19,1,.22,1],[.075,.82,.165,1],[.175,.885,.32,1.275],function(b,c){return 1-a(1-b,c)}],InOut:[[.455,.03,.515,.955],[.645,.045,.355,1],[.77,0,.175,1],[.86,0,.07,1],[.445,.05,.55,.95],[1,0,0,1],[.785,.135,.15,.86],[.68,-.55,.265,1.55],function(b,c){return.5>b?a(2*b,c)/2:1-a(-2*b+2,c)/2}]},b={linear:A(.25,.25,.75,.75)},f={},e;for(e in d)f.type=e,d[f.type].forEach(function(a){return function(d,f){b["ease"+a.type+c[f]]=h.fnc(d)?
32
+ d:A.apply($jscomp$this,d)}}(f)),f={type:f.type};return b}(),ha={css:function(a,c,d){return a.style[c]=d},attribute:function(a,c,d){return a.setAttribute(c,d)},object:function(a,c,d){return a[c]=d},transform:function(a,c,d,b,f){b[f]||(b[f]=[]);b[f].push(c+"("+d+")")}},v=[],B=0,ia=function(){function a(){B=requestAnimationFrame(c)}function c(c){var b=v.length;if(b){for(var d=0;d<b;)v[d]&&v[d].tick(c),d++;a()}else cancelAnimationFrame(B),B=0}return a}();q.version="2.2.0";q.speed=1;q.running=v;q.remove=
33
+ function(a){a=P(a);for(var c=v.length;c--;)for(var d=v[c],b=d.animations,f=b.length;f--;)u(a,b[f].animatable.target)&&(b.splice(f,1),b.length||d.pause())};q.getValue=K;q.path=function(a,c){var d=h.str(a)?e(a)[0]:a,b=c||100;return function(a){return{el:d,property:a,totalLength:N(d)*(b/100)}}};q.setDashoffset=function(a){var c=N(a);a.setAttribute("stroke-dasharray",c);return c};q.bezier=A;q.easings=Q;q.timeline=function(a){var c=q(a);c.pause();c.duration=0;c.add=function(d){c.children.forEach(function(a){a.began=
34
+ !0;a.completed=!0});m(d).forEach(function(b){var d=z(b,D(S,a||{}));d.targets=d.targets||a.targets;b=c.duration;var e=d.offset;d.autoplay=!1;d.direction=c.direction;d.offset=h.und(e)?b:L(e,b);c.began=!0;c.completed=!0;c.seek(d.offset);d=q(d);d.began=!0;d.completed=!0;d.duration>b&&(c.duration=d.duration);c.children.push(d)});c.seek(0);c.reset();c.autoplay&&c.restart();return c};return c};q.random=function(a,c){return Math.floor(Math.random()*(c-a+1))+a};return q});
@@ -0,0 +1,450 @@
1
+ (function($) {
2
+ 'use strict';
3
+
4
+ let _defaults = {
5
+ data: {}, // Autocomplete data set
6
+ limit: Infinity, // Limit of results the autocomplete shows
7
+ onAutocomplete: null, // Callback for when autocompleted
8
+ minLength: 1, // Min characters before autocomplete starts
9
+ sortFunction: function(a, b, inputString) {
10
+ // Sort function for sorting autocomplete results
11
+ return a.indexOf(inputString) - b.indexOf(inputString);
12
+ }
13
+ };
14
+
15
+ /**
16
+ * @class
17
+ *
18
+ */
19
+ class Autocomplete extends Component {
20
+ /**
21
+ * Construct Autocomplete instance
22
+ * @constructor
23
+ * @param {Element} el
24
+ * @param {Object} options
25
+ */
26
+ constructor(el, options) {
27
+ super(Autocomplete, el, options);
28
+
29
+ this.el.M_Autocomplete = this;
30
+
31
+ /**
32
+ * Options for the autocomplete
33
+ * @member Autocomplete#options
34
+ * @prop {Number} duration
35
+ * @prop {Number} dist
36
+ * @prop {number} shift
37
+ * @prop {number} padding
38
+ * @prop {Boolean} fullWidth
39
+ * @prop {Boolean} indicators
40
+ * @prop {Boolean} noWrap
41
+ * @prop {Function} onCycleTo
42
+ */
43
+ this.options = $.extend({}, Autocomplete.defaults, options);
44
+
45
+ // Setup
46
+ this.isOpen = false;
47
+ this.count = 0;
48
+ this.activeIndex = -1;
49
+ this.oldVal;
50
+ this.$inputField = this.$el.closest('.input-field');
51
+ this.$active = $();
52
+ this._mousedown = false;
53
+ this._setupDropdown();
54
+
55
+ this._setupEventHandlers();
56
+ }
57
+
58
+ static get defaults() {
59
+ return _defaults;
60
+ }
61
+
62
+ static init(els, options) {
63
+ return super.init(this, els, options);
64
+ }
65
+
66
+ /**
67
+ * Get Instance
68
+ */
69
+ static getInstance(el) {
70
+ let domElem = !!el.jquery ? el[0] : el;
71
+ return domElem.M_Autocomplete;
72
+ }
73
+
74
+ /**
75
+ * Teardown component
76
+ */
77
+ destroy() {
78
+ this._removeEventHandlers();
79
+ this._removeDropdown();
80
+ this.el.M_Autocomplete = undefined;
81
+ }
82
+
83
+ /**
84
+ * Setup Event Handlers
85
+ */
86
+ _setupEventHandlers() {
87
+ this._handleInputBlurBound = this._handleInputBlur.bind(this);
88
+ this._handleInputKeyupAndFocusBound = this._handleInputKeyupAndFocus.bind(this);
89
+ this._handleInputKeydownBound = this._handleInputKeydown.bind(this);
90
+ this._handleInputClickBound = this._handleInputClick.bind(this);
91
+ this._handleContainerMousedownAndTouchstartBound = this._handleContainerMousedownAndTouchstart.bind(
92
+ this
93
+ );
94
+ this._handleContainerMouseupAndTouchendBound = this._handleContainerMouseupAndTouchend.bind(
95
+ this
96
+ );
97
+
98
+ this.el.addEventListener('blur', this._handleInputBlurBound);
99
+ this.el.addEventListener('keyup', this._handleInputKeyupAndFocusBound);
100
+ this.el.addEventListener('focus', this._handleInputKeyupAndFocusBound);
101
+ this.el.addEventListener('keydown', this._handleInputKeydownBound);
102
+ this.el.addEventListener('click', this._handleInputClickBound);
103
+ this.container.addEventListener(
104
+ 'mousedown',
105
+ this._handleContainerMousedownAndTouchstartBound
106
+ );
107
+ this.container.addEventListener('mouseup', this._handleContainerMouseupAndTouchendBound);
108
+
109
+ if (typeof window.ontouchstart !== 'undefined') {
110
+ this.container.addEventListener(
111
+ 'touchstart',
112
+ this._handleContainerMousedownAndTouchstartBound
113
+ );
114
+ this.container.addEventListener('touchend', this._handleContainerMouseupAndTouchendBound);
115
+ }
116
+ }
117
+
118
+ /**
119
+ * Remove Event Handlers
120
+ */
121
+ _removeEventHandlers() {
122
+ this.el.removeEventListener('blur', this._handleInputBlurBound);
123
+ this.el.removeEventListener('keyup', this._handleInputKeyupAndFocusBound);
124
+ this.el.removeEventListener('focus', this._handleInputKeyupAndFocusBound);
125
+ this.el.removeEventListener('keydown', this._handleInputKeydownBound);
126
+ this.el.removeEventListener('click', this._handleInputClickBound);
127
+ this.container.removeEventListener(
128
+ 'mousedown',
129
+ this._handleContainerMousedownAndTouchstartBound
130
+ );
131
+ this.container.removeEventListener('mouseup', this._handleContainerMouseupAndTouchendBound);
132
+
133
+ if (typeof window.ontouchstart !== 'undefined') {
134
+ this.container.removeEventListener(
135
+ 'touchstart',
136
+ this._handleContainerMousedownAndTouchstartBound
137
+ );
138
+ this.container.removeEventListener(
139
+ 'touchend',
140
+ this._handleContainerMouseupAndTouchendBound
141
+ );
142
+ }
143
+ }
144
+
145
+ /**
146
+ * Setup dropdown
147
+ */
148
+ _setupDropdown() {
149
+ this.container = document.createElement('ul');
150
+ this.container.id = `autocomplete-options-${M.guid()}`;
151
+ $(this.container).addClass('autocomplete-content dropdown-content');
152
+ this.$inputField.append(this.container);
153
+ this.el.setAttribute('data-target', this.container.id);
154
+
155
+ this.dropdown = M.Dropdown.init(this.el, {
156
+ autoFocus: false,
157
+ closeOnClick: false,
158
+ coverTrigger: false,
159
+ onItemClick: (itemEl) => {
160
+ this.selectOption($(itemEl));
161
+ }
162
+ });
163
+
164
+ // Sketchy removal of dropdown click handler
165
+ this.el.removeEventListener('click', this.dropdown._handleClickBound);
166
+ }
167
+
168
+ /**
169
+ * Remove dropdown
170
+ */
171
+ _removeDropdown() {
172
+ this.container.parentNode.removeChild(this.container);
173
+ }
174
+
175
+ /**
176
+ * Handle Input Blur
177
+ */
178
+ _handleInputBlur() {
179
+ if (!this._mousedown) {
180
+ this.close();
181
+ this._resetAutocomplete();
182
+ }
183
+ }
184
+
185
+ /**
186
+ * Handle Input Keyup and Focus
187
+ * @param {Event} e
188
+ */
189
+ _handleInputKeyupAndFocus(e) {
190
+ if (e.type === 'keyup') {
191
+ Autocomplete._keydown = false;
192
+ }
193
+
194
+ this.count = 0;
195
+ let val = this.el.value.toLowerCase();
196
+
197
+ // Don't capture enter or arrow key usage.
198
+ if (e.keyCode === 13 || e.keyCode === 38 || e.keyCode === 40) {
199
+ return;
200
+ }
201
+
202
+ // Check if the input isn't empty
203
+ // Check if focus triggered by tab
204
+ if (this.oldVal !== val && (M.tabPressed || e.type !== 'focus')) {
205
+ this.open();
206
+ }
207
+
208
+ // Update oldVal
209
+ this.oldVal = val;
210
+ }
211
+
212
+ /**
213
+ * Handle Input Keydown
214
+ * @param {Event} e
215
+ */
216
+ _handleInputKeydown(e) {
217
+ Autocomplete._keydown = true;
218
+
219
+ // Arrow keys and enter key usage
220
+ let keyCode = e.keyCode,
221
+ liElement,
222
+ numItems = $(this.container).children('li').length;
223
+
224
+ // select element on Enter
225
+ if (keyCode === M.keys.ENTER && this.activeIndex >= 0) {
226
+ liElement = $(this.container)
227
+ .children('li')
228
+ .eq(this.activeIndex);
229
+ if (liElement.length) {
230
+ this.selectOption(liElement);
231
+ e.preventDefault();
232
+ }
233
+ return;
234
+ }
235
+
236
+ // Capture up and down key
237
+ if (keyCode === M.keys.ARROW_UP || keyCode === M.keys.ARROW_DOWN) {
238
+ e.preventDefault();
239
+
240
+ if (keyCode === M.keys.ARROW_UP && this.activeIndex > 0) {
241
+ this.activeIndex--;
242
+ }
243
+
244
+ if (keyCode === M.keys.ARROW_DOWN && this.activeIndex < numItems - 1) {
245
+ this.activeIndex++;
246
+ }
247
+
248
+ this.$active.removeClass('active');
249
+ if (this.activeIndex >= 0) {
250
+ this.$active = $(this.container)
251
+ .children('li')
252
+ .eq(this.activeIndex);
253
+ this.$active.addClass('active');
254
+ }
255
+ }
256
+ }
257
+
258
+ /**
259
+ * Handle Input Click
260
+ * @param {Event} e
261
+ */
262
+ _handleInputClick(e) {
263
+ this.open();
264
+ }
265
+
266
+ /**
267
+ * Handle Container Mousedown and Touchstart
268
+ * @param {Event} e
269
+ */
270
+ _handleContainerMousedownAndTouchstart(e) {
271
+ this._mousedown = true;
272
+ }
273
+
274
+ /**
275
+ * Handle Container Mouseup and Touchend
276
+ * @param {Event} e
277
+ */
278
+ _handleContainerMouseupAndTouchend(e) {
279
+ this._mousedown = false;
280
+ }
281
+
282
+ /**
283
+ * Highlight partial match
284
+ */
285
+ _highlight(string, $el) {
286
+ let img = $el.find('img');
287
+ let matchStart = $el
288
+ .text()
289
+ .toLowerCase()
290
+ .indexOf('' + string.toLowerCase() + ''),
291
+ matchEnd = matchStart + string.length - 1,
292
+ beforeMatch = $el.text().slice(0, matchStart),
293
+ matchText = $el.text().slice(matchStart, matchEnd + 1),
294
+ afterMatch = $el.text().slice(matchEnd + 1);
295
+ $el.html(
296
+ `<span>${beforeMatch}<span class='highlight'>${matchText}</span>${afterMatch}</span>`
297
+ );
298
+ if (img.length) {
299
+ $el.prepend(img);
300
+ }
301
+ }
302
+
303
+ /**
304
+ * Reset current element position
305
+ */
306
+ _resetCurrentElement() {
307
+ this.activeIndex = -1;
308
+ this.$active.removeClass('active');
309
+ }
310
+
311
+ /**
312
+ * Reset autocomplete elements
313
+ */
314
+ _resetAutocomplete() {
315
+ $(this.container).empty();
316
+ this._resetCurrentElement();
317
+ this.oldVal = null;
318
+ this.isOpen = false;
319
+ this._mousedown = false;
320
+ }
321
+
322
+ /**
323
+ * Select autocomplete option
324
+ * @param {Element} el Autocomplete option list item element
325
+ */
326
+ selectOption(el) {
327
+ let text = el.text().trim();
328
+ this.el.value = text;
329
+ this.$el.trigger('change');
330
+ this._resetAutocomplete();
331
+ this.close();
332
+
333
+ // Handle onAutocomplete callback.
334
+ if (typeof this.options.onAutocomplete === 'function') {
335
+ this.options.onAutocomplete.call(this, text);
336
+ }
337
+ }
338
+
339
+ /**
340
+ * Render dropdown content
341
+ * @param {Object} data data set
342
+ * @param {String} val current input value
343
+ */
344
+ _renderDropdown(data, val) {
345
+ this._resetAutocomplete();
346
+
347
+ let matchingData = [];
348
+
349
+ // Gather all matching data
350
+ for (let key in data) {
351
+ if (data.hasOwnProperty(key) && key.toLowerCase().indexOf(val) !== -1) {
352
+ // Break if past limit
353
+ if (this.count >= this.options.limit) {
354
+ break;
355
+ }
356
+
357
+ let entry = {
358
+ data: data[key],
359
+ key: key
360
+ };
361
+ matchingData.push(entry);
362
+
363
+ this.count++;
364
+ }
365
+ }
366
+
367
+ // Sort
368
+ if (this.options.sortFunction) {
369
+ let sortFunctionBound = (a, b) => {
370
+ return this.options.sortFunction(
371
+ a.key.toLowerCase(),
372
+ b.key.toLowerCase(),
373
+ val.toLowerCase()
374
+ );
375
+ };
376
+ matchingData.sort(sortFunctionBound);
377
+ }
378
+
379
+ // Render
380
+ for (let i = 0; i < matchingData.length; i++) {
381
+ let entry = matchingData[i];
382
+ let $autocompleteOption = $('<li></li>');
383
+ if (!!entry.data) {
384
+ $autocompleteOption.append(
385
+ `<img src="${entry.data}" class="right circle"><span>${entry.key}</span>`
386
+ );
387
+ } else {
388
+ $autocompleteOption.append('<span>' + entry.key + '</span>');
389
+ }
390
+
391
+ $(this.container).append($autocompleteOption);
392
+ this._highlight(val, $autocompleteOption);
393
+ }
394
+ }
395
+
396
+ /**
397
+ * Open Autocomplete Dropdown
398
+ */
399
+ open() {
400
+ let val = this.el.value.toLowerCase();
401
+
402
+ this._resetAutocomplete();
403
+
404
+ if (val.length >= this.options.minLength) {
405
+ this.isOpen = true;
406
+ this._renderDropdown(this.options.data, val);
407
+ }
408
+
409
+ // Open dropdown
410
+ if (!this.dropdown.isOpen) {
411
+ this.dropdown.open();
412
+ } else {
413
+ // Recalculate dropdown when its already open
414
+ this.dropdown.recalculateDimensions();
415
+ }
416
+ }
417
+
418
+ /**
419
+ * Close Autocomplete Dropdown
420
+ */
421
+ close() {
422
+ this.dropdown.close();
423
+ }
424
+
425
+ /**
426
+ * Update Data
427
+ * @param {Object} data
428
+ */
429
+ updateData(data) {
430
+ let val = this.el.value.toLowerCase();
431
+ this.options.data = data;
432
+
433
+ if (this.isOpen) {
434
+ this._renderDropdown(data, val);
435
+ }
436
+ }
437
+ }
438
+
439
+ /**
440
+ * @static
441
+ * @memberof Autocomplete
442
+ */
443
+ Autocomplete._keydown = false;
444
+
445
+ M.Autocomplete = Autocomplete;
446
+
447
+ if (M.jQueryLoaded) {
448
+ M.initializeJqueryWrapper(Autocomplete, 'autocomplete', 'M_Autocomplete');
449
+ }
450
+ })(cash);