PageRenderTime 26ms CodeModel.GetById 14ms RepoModel.GetById 1ms app.codeStats 0ms

/public/bower_components/fizzy-ui-utils/utils.js

https://gitlab.com/ashimkkaam/loginsystem
JavaScript | 236 lines | 152 code | 38 blank | 46 comment | 38 complexity | 316db73ac0efdbad198515d9a5f61ea0 MD5 | raw file
  1. /**
  2. * Fizzy UI utils v2.0.2
  3. * MIT license
  4. */
  5. /*jshint browser: true, undef: true, unused: true, strict: true */
  6. ( function( window, factory ) {
  7. // universal module definition
  8. /*jshint strict: false */ /*globals define, module, require */
  9. if ( typeof define == 'function' && define.amd ) {
  10. // AMD
  11. define( [
  12. 'desandro-matches-selector/matches-selector'
  13. ], function( matchesSelector ) {
  14. return factory( window, matchesSelector );
  15. });
  16. } else if ( typeof module == 'object' && module.exports ) {
  17. // CommonJS
  18. module.exports = factory(
  19. window,
  20. require('desandro-matches-selector')
  21. );
  22. } else {
  23. // browser global
  24. window.fizzyUIUtils = factory(
  25. window,
  26. window.matchesSelector
  27. );
  28. }
  29. }( window, function factory( window, matchesSelector ) {
  30. 'use strict';
  31. var utils = {};
  32. // ----- extend ----- //
  33. // extends objects
  34. utils.extend = function( a, b ) {
  35. for ( var prop in b ) {
  36. a[ prop ] = b[ prop ];
  37. }
  38. return a;
  39. };
  40. // ----- modulo ----- //
  41. utils.modulo = function( num, div ) {
  42. return ( ( num % div ) + div ) % div;
  43. };
  44. // ----- makeArray ----- //
  45. // turn element or nodeList into an array
  46. utils.makeArray = function( obj ) {
  47. var ary = [];
  48. if ( Array.isArray( obj ) ) {
  49. // use object if already an array
  50. ary = obj;
  51. } else if ( obj && typeof obj.length == 'number' ) {
  52. // convert nodeList to array
  53. for ( var i=0; i < obj.length; i++ ) {
  54. ary.push( obj[i] );
  55. }
  56. } else {
  57. // array of single index
  58. ary.push( obj );
  59. }
  60. return ary;
  61. };
  62. // ----- removeFrom ----- //
  63. utils.removeFrom = function( ary, obj ) {
  64. var index = ary.indexOf( obj );
  65. if ( index != -1 ) {
  66. ary.splice( index, 1 );
  67. }
  68. };
  69. // ----- getParent ----- //
  70. utils.getParent = function( elem, selector ) {
  71. while ( elem != document.body ) {
  72. elem = elem.parentNode;
  73. if ( matchesSelector( elem, selector ) ) {
  74. return elem;
  75. }
  76. }
  77. };
  78. // ----- getQueryElement ----- //
  79. // use element as selector string
  80. utils.getQueryElement = function( elem ) {
  81. if ( typeof elem == 'string' ) {
  82. return document.querySelector( elem );
  83. }
  84. return elem;
  85. };
  86. // ----- handleEvent ----- //
  87. // enable .ontype to trigger from .addEventListener( elem, 'type' )
  88. utils.handleEvent = function( event ) {
  89. var method = 'on' + event.type;
  90. if ( this[ method ] ) {
  91. this[ method ]( event );
  92. }
  93. };
  94. // ----- filterFindElements ----- //
  95. utils.filterFindElements = function( elems, selector ) {
  96. // make array of elems
  97. elems = utils.makeArray( elems );
  98. var ffElems = [];
  99. elems.forEach( function( elem ) {
  100. // check that elem is an actual element
  101. if ( !( elem instanceof HTMLElement ) ) {
  102. return;
  103. }
  104. // add elem if no selector
  105. if ( !selector ) {
  106. ffElems.push( elem );
  107. return;
  108. }
  109. // filter & find items if we have a selector
  110. // filter
  111. if ( matchesSelector( elem, selector ) ) {
  112. ffElems.push( elem );
  113. }
  114. // find children
  115. var childElems = elem.querySelectorAll( selector );
  116. // concat childElems to filterFound array
  117. for ( var i=0; i < childElems.length; i++ ) {
  118. ffElems.push( childElems[i] );
  119. }
  120. });
  121. return ffElems;
  122. };
  123. // ----- debounceMethod ----- //
  124. utils.debounceMethod = function( _class, methodName, threshold ) {
  125. // original method
  126. var method = _class.prototype[ methodName ];
  127. var timeoutName = methodName + 'Timeout';
  128. _class.prototype[ methodName ] = function() {
  129. var timeout = this[ timeoutName ];
  130. if ( timeout ) {
  131. clearTimeout( timeout );
  132. }
  133. var args = arguments;
  134. var _this = this;
  135. this[ timeoutName ] = setTimeout( function() {
  136. method.apply( _this, args );
  137. delete _this[ timeoutName ];
  138. }, threshold || 100 );
  139. };
  140. };
  141. // ----- docReady ----- //
  142. utils.docReady = function( callback ) {
  143. var readyState = document.readyState;
  144. if ( readyState == 'complete' || readyState == 'interactive' ) {
  145. callback();
  146. } else {
  147. document.addEventListener( 'DOMContentLoaded', callback );
  148. }
  149. };
  150. // ----- htmlInit ----- //
  151. // http://jamesroberts.name/blog/2010/02/22/string-functions-for-javascript-trim-to-camel-case-to-dashed-and-to-underscore/
  152. utils.toDashed = function( str ) {
  153. return str.replace( /(.)([A-Z])/g, function( match, $1, $2 ) {
  154. return $1 + '-' + $2;
  155. }).toLowerCase();
  156. };
  157. var console = window.console;
  158. /**
  159. * allow user to initialize classes via [data-namespace] or .js-namespace class
  160. * htmlInit( Widget, 'widgetName' )
  161. * options are parsed from data-namespace-options
  162. */
  163. utils.htmlInit = function( WidgetClass, namespace ) {
  164. utils.docReady( function() {
  165. var dashedNamespace = utils.toDashed( namespace );
  166. var dataAttr = 'data-' + dashedNamespace;
  167. var dataAttrElems = document.querySelectorAll( '[' + dataAttr + ']' );
  168. var jsDashElems = document.querySelectorAll( '.js-' + dashedNamespace );
  169. var elems = utils.makeArray( dataAttrElems )
  170. .concat( utils.makeArray( jsDashElems ) );
  171. var dataOptionsAttr = dataAttr + '-options';
  172. var jQuery = window.jQuery;
  173. elems.forEach( function( elem ) {
  174. var attr = elem.getAttribute( dataAttr ) ||
  175. elem.getAttribute( dataOptionsAttr );
  176. var options;
  177. try {
  178. options = attr && JSON.parse( attr );
  179. } catch ( error ) {
  180. // log error, do not initialize
  181. if ( console ) {
  182. console.error( 'Error parsing ' + dataAttr + ' on ' + elem.className +
  183. ': ' + error );
  184. }
  185. return;
  186. }
  187. // initialize
  188. var instance = new WidgetClass( elem, options );
  189. // make available via $().data('layoutname')
  190. if ( jQuery ) {
  191. jQuery.data( elem, namespace, instance );
  192. }
  193. });
  194. });
  195. };
  196. // ----- ----- //
  197. return utils;
  198. }));