# Eruda Util Documentation ## $ jQuery like style dom manipulator. ### Available methods offset, hide, show, first, last, get, eq, on, off, html, text, val, css, attr, data, rmAttr, remove, addClass, rmClass, toggleClass, hasClass, append, prepend, before, after ```javascript const $btn = $('#btn'); $btn.html('eustia'); $btn.addClass('btn'); $btn.show(); $btn.on('click', function() { // Do something... }); ``` ## $attr Element attribute manipulation. Get the value of an attribute for the first element in the set of matched elements. |Name |Desc | |-------|--------------------------------| |element|Elements to manipulate | |name |Attribute name | |return |Attribute value of first element| Set one or more attributes for the set of matched elements. |Name |Desc | |-------|----------------------| |element|Elements to manipulate| |name |Attribute name | |val |Attribute value | |Name |Desc | |----------|--------------------------------------| |element |Elements to manipulate | |attributes|Object of attribute-value pairs to set| ### remove Remove an attribute from each element in the set of matched elements. |Name |Desc | |-------|----------------------| |element|Elements to manipulate| |name |Attribute name | ```javascript $attr('#test', 'attr1', 'test'); $attr('#test', 'attr1'); // -> test $attr.remove('#test', 'attr1'); $attr('#test', { attr1: 'test', attr2: 'test' }); ``` ## $class Element class manipulations. ### add Add the specified class(es) to each element in the set of matched elements. |Name |Desc | |-------|----------------------| |element|Elements to manipulate| |names |Classes to add | ### has Determine whether any of the matched elements are assigned the given class. |Name |Desc | |-------|-------------------------------------| |element|Elements to manipulate | |name |Class name | |return |True if elements has given class name| ### toggle Add or remove one or more classes from each element in the set of matched elements, depending on either the class's presence or the value of the state argument. |Name |Desc | |-------|----------------------| |element|Elements to manipulate| |name |Class name to toggle | ### remove Remove a single class, multiple classes, or all classes from each element in the set of matched elements. |Name |Desc | |-------|----------------------| |element|Elements to manipulate| |name |Class names to remove | ```javascript $class.add('#test', 'class1'); $class.add('#test', ['class1', 'class2']); $class.has('#test', 'class1'); // -> true $class.remove('#test', 'class1'); $class.has('#test', 'class1'); // -> false $class.toggle('#test', 'class1'); $class.has('#test', 'class1'); // -> true ``` ## $css Element css manipulation. Get the computed style properties for the first element in the set of matched elements. |Name |Desc | |-------|--------------------------| |element|Elements to manipulate | |name |Property name | |return |Css value of first element| Set one or more CSS properties for the set of matched elements. |Name |Desc | |-------|----------------------| |element|Elements to manipulate| |name |Property name | |val |Css value | |Name |Desc | |----------|--------------------------------| |element |Elements to manipulate | |properties|Object of css-value pairs to set| ```javascript $css('#test', { color: '#fff', background: 'black', opacity: 0.5 }); $css('#test', 'display', 'block'); $css('#test', 'color'); // -> #fff ``` ## $data Wrapper of $attr, adds data- prefix to keys. ```javascript $data('#test', 'attr1', 'eustia'); ``` ## $event bind events to certain dom elements. ```javascript function clickHandler() { // Do something... } $event.on('#test', 'click', clickHandler); $event.off('#test', 'click', clickHandler); ``` ## $insert Insert html on different position. ### before Insert content before elements. ### after Insert content after elements. ### prepend Insert content to the beginning of elements. ### append Insert content to the end of elements. |Name |Desc | |-------|----------------------| |element|Elements to manipulate| |content|Html strings | ```javascript //
$insert.before('#test', '
licia
'); // ->
licia
$insert.after('#test', '
licia
'); // ->
licia
$insert.prepend('#test', '
licia
'); // ->
licia
$insert.append('#test', '
licia
'); // ->
licia
``` ## $offset Get the position of the element in document. |Name |Desc | |-------|----------------------| |element|Elements to get offset| |return |Element position | ```javascript $offset('#test'); // -> {left: 0, top: 0, width: 0, height: 0} ``` ## $property Element property html, text, val getter and setter. ### html Get the HTML contents of the first element in the set of matched elements or set the HTML contents of every matched element. ### text Get the combined text contents of each element in the set of matched elements, including their descendants, or set the text contents of the matched elements. ### val Get the current value of the first element in the set of matched elements or set the value of every matched element. ```javascript $property.html('#test', 'licia'); $property.html('#test'); // -> licia ``` ## $remove Remove the set of matched elements from the DOM. |Name |Desc | |-------|------------------| |element|Elements to delete| ```javascript $remove('#test'); ``` ## $safeEls Convert value into an array, if it's a string, do querySelector. |Name |Desc | |------|-----------------| |val |Value to convert | |return|Array of elements| ```javascript $safeEls(document.querySelector('.test')); $safeEls(document.querySelectorAll('.test')); $safeEls('.test'); // -> Array of elements with test class ``` ## $show Show elements. |Name |Desc | |-------|----------------| |element|Elements to show| ```javascript $show('#test'); ``` ## Class Create JavaScript class. |Name |Desc | |-------|---------------------------------| |methods|Public methods | [statics|Static methods | |return |Function used to create instances| ```javascript const People = Class({ initialize: function People(name, age) { this.name = name; this.age = age; }, introduce: function() { return 'I am ' + this.name + ', ' + this.age + ' years old.'; } }); const Student = People.extend( { initialize: function Student(name, age, school) { this.callSuper(People, 'initialize', arguments); this.school = school; }, introduce: function() { return ( this.callSuper(People, 'introduce') + '\n I study at ' + this.school + '.' ); } }, { is: function(obj) { return obj instanceof Student; } } ); const a = new Student('allen', 17, 'Hogwarts'); a.introduce(); // -> 'I am allen, 17 years old. \n I study at Hogwarts.' Student.is(a); // -> true ``` ## Emitter Event emitter class which provides observer pattern. ### on Bind event. ### off Unbind event. ### once Bind event that trigger once. |Name |Desc | |--------|--------------| |event |Event name | |listener|Event listener| ### emit Emit event. |Name |Desc | |-------|----------------------------| |event |Event name | |...args|Arguments passed to listener| ### removeAllListeners Remove all listeners. |Name |Desc | |-----|----------| |event|Event name| ### mixin [static] Mixin object class methods. |Name|Desc | |----|---------------| |obj |Object to mixin| ```javascript const event = new Emitter(); event.on('test', function(name) { console.log(name); }); event.emit('test', 'licia'); // Logs out 'licia'. Emitter.mixin({}); ``` ## Enum Enum type implementation. ### constructor |Name|Desc | |----|----------------| |arr |Array of strings| |Name|Desc | |----|----------------------| |obj |Pairs of key and value| ```javascript const importance = new Enum([ 'NONE', 'TRIVIAL', 'REGULAR', 'IMPORTANT', 'CRITICAL' ]); const val = 1; if (val === importance.CRITICAL) { // Do something. } ``` ## LocalStore LocalStorage wrapper. Extend from Store. ### constructor |Name|Desc | |----|----------------------| |name|LocalStorage item name| |data|Default data | ```javascript const store = new LocalStore('licia'); store.set('name', 'licia'); ``` ## Logger Simple logger with level filter. ### constructor |Name |Desc | |-----------|------------| |name |Logger name | |level=DEBUG|Logger level| ### setLevel Set level. |Name |Desc | |-----|------------| |level|Logger level| ### getLevel Get current level. ### trace, debug, info, warn, error Logging methods. ### Log Levels TRACE, DEBUG, INFO, WARN, ERROR and SILENT. ```javascript const logger = new Logger('licia', Logger.level.ERROR); logger.trace('test'); // Format output. logger.formatter = function(type, argList) { argList.push(new Date().getTime()); return argList; }; logger.on('all', function(type, argList) { // It's not affected by log level. }); logger.on('debug', function(argList) { // Affected by log level. }); ``` ## MediaQuery CSS media query listener. Extend from Emitter. ### constructor |Name |Desc | |-----|-----------| |query|Media query| ### isMatch Return true if given media query matches. ### Events #### match Triggered when a media query matches. #### unmatch Opposite of match. ```javascript const mediaQuery = new MediaQuery('screen and (max-width:1000px)'); mediaQuery.isMatch(); // -> false mediaQuery.on('match', () => { // Do something... }); ``` ## MutationObserver Safe MutationObserver, does nothing if MutationObserver is not supported. ```javascript const observer = new MutationObserver(function(mutations) { // Do something. }); observer.observe(document.documentElement); observer.disconnect(); ``` ## Select Simple wrapper of querySelectorAll to make dom selection easier. ### constructor |Name |Desc | |--------|-------------------| |selector|Dom selector string| ### find Get desdendants of current matched elements. |Name |Desc | |--------|-------------------| |selector|Dom selector string| ### each Iterate over matched elements. |Name|Desc | |----|------------------------------------| |fn |Function to execute for each element| ```javascript const $test = new Select('#test'); $test.find('.test').each(function(idx, element) { // Manipulate dom nodes }); ``` ## Stack Stack data structure. ### size Stack size. ### clear Clear the stack. ### push Add an item to the stack. |Name |Desc | |------|------------| |item |Item to add | |return|Current size| ### pop Get the last item of the stack. ### peek Get the last item without removing it. ### forEach Iterate over the stack. |Name |Desc | |--------|--------------------------| |iterator|Function invoked iteration| |ctx |Function context | ### toArr Convert the stack to a JavaScript array. ```javascript const stack = new Stack(); stack.push(2); // -> 1 stack.push(3); // -> 2 stack.pop(); // -> 3 ``` ## Store Memory storage. Extend from Emitter. ### constructor |Name|Desc | |----|------------| |data|Initial data| ### set Set value. |Name|Desc | |----|------------| |key |Value key | |val |Value to set| Set values. |Name |Desc | |------|---------------| |values|Key value pairs| This emit a change event whenever is called. ### get Get value. |Name |Desc | |------|------------------| |key |Value key | |return|Value of given key| Get values. |Name |Desc | |------|---------------| |keys |Array of keys | |return|Key value pairs| ### remove Remove value. |Name|Desc | |----|-------------| |key |Key to remove| ### clear Clear all data. ### each Iterate over values. |Name|Desc | |----|------------------------------| |fn |Function invoked per iteration| ```javascript const store = new Store('test'); store.set('user', { name: 'licia' }); store.get('user').name; // -> 'licia' store.clear(); store.each(function(val, key) { // Do something. }); store.on('change', function(key, newVal, oldVal) { // It triggers whenever set is called. }); ``` ## Url Simple url manipulator. ### constructor |Name |Desc | |------------|----------| |url=location|Url string| ### setQuery Set query value. |Name |Desc | |------|-----------| |name |Query name | |val |Query value| |return|this | |Name |Desc | |------|------------| |query |query object| |return|this | ### rmQuery Remove query value. |Name |Desc | |------|----------| |name |Query name| |return|this | ### parse [static] Parse url into an object. |Name |Desc | |------|----------| |url |Url string| |return|Url object| ### stringify [static] Stringify url object into a string. |Name |Desc | |------|----------| |url |Url object| |return|Url string| An url object contains the following properties: |Name |Desc | |--------|--------------------------------------------------------------------------------------| |protocol|The protocol scheme of the URL (e.g. http:) | |slashes |A boolean which indicates whether the protocol is followed by two forward slashes (//)| |auth |Authentication information portion (e.g. username:password) | |hostname|Host name without port number | |port |Optional port number | |pathname|URL path | |query |Parsed object containing query string | |hash |The "fragment" portion of the URL including the pound-sign (#) | ```javascript const url = new Url('http://example.com:8080?eruda=true'); console.log(url.port); // -> '8080' url.query.foo = 'bar'; url.rmQuery('eruda'); url.toString(); // -> 'http://example.com:8080/?foo=bar' ``` ## ajax Perform an asynchronous HTTP request. |Name |Desc | |-------|------------| |options|Ajax options| Available options: |Name |Desc | |---------------------------------------------|---------------------------| |type=get |Request type | |url |Request url | |data |Request data | |dataType=json |Response type(json, xml) | |contentType=application/x-www-form-urlencoded|Request header Content-Type| |success |Success callback | |error |Error callback | |complete |Callback after request | |timeout |Request timeout | ### get Shortcut for type = GET; ### post Shortcut for type = POST; |Name |Desc | |--------|----------------| |url |Request url | |data |Request data | |success |Success callback| |dataType|Response type | ```javascript ajax({ url: 'http://example.com', data: { test: 'true' }, error() {}, success(data) { // ... }, dataType: 'json' }); ajax.get('http://example.com', {}, function(data) { // ... }); ``` ## allKeys Retrieve all the names of object's own and inherited properties. |Name |Desc | |-------|---------------------------| |obj |Object to query | |options|Options | |return |Array of all property names| Available options: |Name |Desc | |------------------|-------------------------| |prototype=true |Include prototype keys | |unenumerable=false|Include unenumerable keys| |symbol=false |Include symbol keys | Members of Object's prototype won't be retrieved. ```javascript const obj = Object.create({ zero: 0 }); obj.one = 1; allKeys(obj); // -> ['zero', 'one'] ``` ## before Create a function that invokes less than n times. |Name |Desc | |------|------------------------------------------------| |n |Number of calls at which fn is no longer invoked| |fn |Function to restrict | |return|New restricted function | Subsequent calls to the created function return the result of the last fn invocation. ```javascript const fn = before(5, function() {}); fn(); // Allow function to be call 4 times at last. ``` ## camelCase Convert string to "camelCase". |Name |Desc | |------|------------------| |str |String to convert | |return|Camel cased string| ```javascript camelCase('foo-bar'); // -> fooBar camelCase('foo bar'); // -> fooBar camelCase('foo_bar'); // -> fooBar camelCase('foo.bar'); // -> fooBar ``` ## castPath Cast value into a property path array. |Name |Desc | |------|-------------------| |path |Value to inspect | |obj |Object to query | |return|Property path array| ```javascript castPath('a.b.c'); // -> ['a', 'b', 'c'] castPath(['a']); // -> ['a'] castPath('a[0].b'); // -> ['a', '0', 'b'] castPath('a.b.c', { 'a.b.c': true }); // -> ['a.b.c'] ``` ## clamp Clamp number within the inclusive lower and upper bounds. |Name |Desc | |------|---------------| |n |Number to clamp| |lower |Lower bound | |upper |Upper bound | |return|Clamped number | ```javascript clamp(-10, -5, 5); // -> -5 clamp(10, -5, 5); // -> 5 clamp(2, -5, 5); // -> 2 clamp(10, 5); // -> 5 clamp(2, 5); // -> 2 ``` ## clone Create a shallow-copied clone of the provided plain object. Any nested objects or arrays will be copied by reference, not duplicated. |Name |Desc | |------|--------------| |val |Value to clone| |return|Cloned value | ```javascript clone({ name: 'eustia' }); // -> {name: 'eustia'} ``` ## cloneDeep Recursively clone value. |Name |Desc | |------|-----------------| |val |Value to clone | |return|Deep cloned Value| ```javascript const obj = [{ a: 1 }, { a: 2 }]; const obj2 = cloneDeep(obj); console.log(obj[0] === obj2[1]); // -> false ``` ## concat Concat multiple arrays into a single array. |Name |Desc | |------|------------------| |...arr|Arrays to concat | |return|Concatenated array| ```javascript concat([1, 2], [3], [4, 5]); // -> [1, 2, 3, 4, 5] ``` ## contain Check if the value is present in the list. |Name |Desc | |------|------------------------------------| |target|Target object | |val |Value to check | |return|True if value is present in the list| ```javascript contain([1, 2, 3], 1); // -> true contain({ a: 1, b: 2 }, 1); // -> true contain('abc', 'a'); // -> true ``` ## copy Copy text to clipboard using document.execCommand. |Name|Desc | |----|-----------------| |text|Text to copy | |cb |Optional callback| ```javascript copy('text', function(err) { // Handle errors. }); ``` ## create Create new object using given object as prototype. |Name |Desc | |------|-----------------------| |proto |Prototype of new object| |return|Created object | ```javascript const obj = create({ a: 1 }); console.log(obj.a); // -> 1 ``` ## createAssigner Used to create extend, extendOwn and defaults. |Name |Desc | |--------|------------------------------| |keysFn |Function to get object keys | |defaults|No override when set to true | |return |Result function, extend... | ## dateFormat Simple but extremely useful date format function. |Name |Desc | |-------------|---------------------| |date=new Date|Date object to format| |mask |Format mask | |utc=false |UTC or not | |gmt=false |GMT or not | |return |Formatted duration | |Mask|Desc | |----|-----------------------------------------------------------------| |d |Day of the month as digits; no leading zero for single-digit days| |dd |Day of the month as digits; leading zero for single-digit days | |ddd |Day of the week as a three-letter abbreviation | |dddd|Day of the week as its full name | |m |Month as digits; no leading zero for single-digit months | |mm |Month as digits; leading zero for single-digit months | |mmm |Month as a three-letter abbreviation | |mmmm|Month as its full name | |yy |Year as last two digits; leading zero for years less than 10 | |yyyy|Year represented by four digits | |h |Hours; no leading zero for single-digit hours (12-hour clock) | |hh |Hours; leading zero for single-digit hours (12-hour clock) | |H |Hours; no leading zero for single-digit hours (24-hour clock) | |HH |Hours; leading zero for single-digit hours (24-hour clock) | |M |Minutes; no leading zero for single-digit minutes | |MM |Minutes; leading zero for single-digit minutes | |s |Seconds; no leading zero for single-digit seconds | |ss |Seconds; leading zero for single-digit seconds | |l L |Milliseconds. l gives 3 digits. L gives 2 digits | |t |Lowercase, single-character time marker string: a or p | |tt |Lowercase, two-character time marker string: am or pm | |T |Uppercase, single-character time marker string: A or P | |TT |Uppercase, two-character time marker string: AM or PM | |Z |US timezone abbreviation, e.g. EST or MDT | |o |GMT/UTC timezone offset, e.g. -0500 or +0230 | |S |The date's ordinal suffix (st, nd, rd, or th) | |UTC:|Must be the first four characters of the mask | ```javascript dateFormat('isoDate'); // -> 2016-11-19 dateFormat('yyyy-mm-dd HH:MM:ss'); // -> 2016-11-19 19:00:04 dateFormat(new Date(), 'yyyy-mm-dd'); // -> 2016-11-19 ``` ## debounce Return a new debounced version of the passed function. |Name |Desc | |------|-------------------------------| |fn |Function to debounce | |wait |Number of milliseconds to delay| |return|New debounced function | ```javascript const calLayout = debounce(function() {}, 300); // $(window).resize(calLayout); ``` ## defaults Fill in undefined properties in object with the first value present in the following list of defaults objects. |Name |Desc | |------|------------------| |obj |Destination object| |...src|Sources objects | |return|Destination object| ```javascript defaults({ name: 'RedHood' }, { name: 'Unknown', age: 24 }); // -> {name: 'RedHood', age: 24} ``` ## delegate Event delegation. ### add Add event delegation. |Name |Desc | |--------|--------------| |el |Parent element| |type |Event type | |selector|Match selector| |cb |Event callback| ### remove Remove event delegation. ```javascript const container = document.getElementById('container'); function clickHandler() { // Do something... } delegate.add(container, 'click', '.children', clickHandler); delegate.remove(container, 'click', '.children', clickHandler); ``` ## detectBrowser Detect browser info using ua. |Name |Desc | |----------------------|----------------------------------| |ua=navigator.userAgent|Browser userAgent | |return |Object containing name and version| Browsers supported: ie, chrome, edge, firefox, opera, safari, ios(mobile safari), android(android browser) ```javascript const browser = detectBrowser(); if (browser.name === 'ie' && browser.version < 9) { // Do something about old IE... } ``` ## detectOs Detect operating system using ua. |Name |Desc | |----------------------|---------------------| |ua=navigator.userAgent|Browser userAgent | |return |Operating system name| Supported os: windows, os x, linux, ios, android, windows phone ```javascript if (detectOs() === 'ios') { // Do something about ios... } ``` ## difference Create an array of unique array values not included in the other given array. |Name |Desc | |-------|----------------------------| |arr |Array to inspect | |...args|Values to exclude | |return |New array of filtered values| ```javascript difference([3, 2, 1], [4, 2]); // -> [3, 1] ``` ## each Iterate over elements of collection and invokes iterator for each element. |Name |Desc | |--------|------------------------------| |obj |Collection to iterate over | |iterator|Function invoked per iteration| |ctx |Function context | ```javascript each({ a: 1, b: 2 }, function(val, key) {}); ``` ## endWith Check if string ends with the given target string. |Name |Desc | |------|-------------------------------| |str |The string to search | |suffix|String suffix | |return|True if string ends with target| ```javascript endWith('ab', 'b'); // -> true ``` ## escape Escapes a string for insertion into HTML, replacing &, <, >, ", `, and ' characters. |Name |Desc | |------|----------------| |str |String to escape| |return|Escaped string | ```javascript escape('You & Me'); // -> 'You & Me' ``` ## escapeJsStr Escape string to be a valid JavaScript string literal between quotes. http://www.ecma-international.org/ecma-262/5.1/#sec-7.8.4 |Name |Desc | |------|----------------| |str |String to escape| |return|Escaped string | ```javascript escapeJsStr('"\n'); // -> '\\"\\\\n' ``` ## escapeJsonStr Escape json string. ## escapeRegExp Escape special chars to be used as literals in RegExp constructors. |Name |Desc | |------|----------------| |str |String to escape| |return|Escaped string | ```javascript escapeRegExp('[licia]'); // -> '\\[licia\\]' ``` ## extend Copy all of the properties in the source objects over to the destination object. |Name |Desc | |-----------|------------------| |destination|Destination object| |...sources |Sources objects | |return |Destination object| ```javascript extend({ name: 'RedHood' }, { age: 24 }); // -> {name: 'RedHood', age: 24} ``` ## extendOwn Like extend, but only copies own properties over to the destination object. |Name |Desc | |-----------|------------------| |destination|Destination object| |...sources |Sources objects | |return |Destination object| ```javascript extendOwn({ name: 'RedHood' }, { age: 24 }); // -> {name: 'RedHood', age: 24} ``` ## extractUrls Extract urls from plain text. |Name |Desc | |------|---------------| |str |Text to extract| |return|Url list | ```javascript const str = '[Official site: http://eustia.liriliri.io](http://eustia.liriliri.io)'; extractUrls(str); // -> ['http://eustia.liriliri.io'] ``` ## fileSize Turn bytes into human readable file size. |Name |Desc | |------|------------------| |bytes |File bytes | |return|Readable file size| ```javascript fileSize(5); // -> '5' fileSize(1500); // -> '1.46K' fileSize(1500000); // -> '1.43M' fileSize(1500000000); // -> '1.4G' fileSize(1500000000000); // -> '1.36T' ``` ## filter Iterates over elements of collection, returning an array of all the values that pass a truth test. |Name |Desc | |---------|---------------------------------------| |obj |Collection to iterate over | |predicate|Function invoked per iteration | |ctx |Predicate context | |return |Array of all values that pass predicate| ```javascript filter([1, 2, 3, 4, 5], function(val) { return val % 2 === 0; }); // -> [2, 4] ``` ## flatten Recursively flatten an array. |Name |Desc | |------|-------------------| |arr |Array to flatten | |return|New flattened array| ```javascript flatten(['a', ['b', ['c']], 'd', ['e']]); // -> ['a', 'b', 'c', 'd', 'e'] ``` ## freeze Shortcut for Object.freeze. Use Object.defineProperties if Object.freeze is not supported. |Name |Desc | |------|----------------| |obj |Object to freeze| |return|Object passed in| ```javascript const a = { b: 1 }; freeze(a); a.b = 2; console.log(a); // -> {b: 1} ``` ## fullUrl Add origin to url if needed. ## getFileName Extract file name from url. ## getObjType Get object type. ## getProto Get prototype of an object. |Name |Desc | |------|---------------------------------------------| |obj |Target object | |return|Prototype of given object, null if not exists| ```javascript const a = {}; getProto(Object.create(a)); // -> a ``` ## has Checks if key is a direct property. |Name |Desc | |------|--------------------------------| |obj |Object to query | |key |Path to check | |return|True if key is a direct property| ```javascript has({ one: 1 }, 'one'); // -> true ``` ## highlight Highlight code. |Name |Desc | |-------|----------------------------| |str |Code string | |lang=js|Language, js, html or css | |style |Keyword highlight style | |return |Highlighted html code string| Available styles: comment, string, number, keyword, operator ```javascript highlight('const a = 5;', 'js', { keyword: 'color:#569cd6;' }); // -> 'const a = 5;' ``` ## identity Return the first argument given. |Name |Desc | |------|-----------| |val |Any value | |return|Given value| ```javascript identity('a'); // -> 'a' ``` ## idxOf Get the index at which the first occurrence of value. |Name |Desc | |---------|--------------------| |arr |Array to search | |val |Value to search for | |fromIdx=0|Index to search from| |return |Value index | ```javascript idxOf([1, 2, 1, 2], 2, 2); // -> 3 ``` ## inherits Inherit the prototype methods from one constructor into another. |Name |Desc | |----------|-----------| |Class |Child Class| |SuperClass|Super Class| ```javascript function People(name) { this._name = name; } People.prototype = { getName: function() { return this._name; } }; function Student(name) { this._name = name; } inherits(Student, People); const s = new Student('RedHood'); s.getName(); // -> 'RedHood' ``` ## isArgs Check if value is classified as an arguments object. |Name |Desc | |------|------------------------------------| |val |Value to check | |return|True if value is an arguments object| ```javascript isArgs( (function() { return arguments; })() ); // -> true ``` ## isArr Check if value is an `Array` object. |Name |Desc | |------|----------------------------------| |val |Value to check | |return|True if value is an `Array` object| ```javascript isArr([]); // -> true isArr({}); // -> false ``` ## isArrLike Check if value is array-like. |Name |Desc | |------|---------------------------| |val |Value to check | |return|True if value is array like| Function returns false. ```javascript isArrLike('test'); // -> true isArrLike(document.body.children); // -> true; isArrLike([1, 2, 3]); // -> true ``` ## isBool Check if value is a boolean primitive. |Name |Desc | |------|--------------------------| |val |Value to check | |return|True if value is a boolean| ```javascript isBool(true); // -> true isBool(false); // -> true isBool(1); // -> false ``` ## isBrowser Check if running in a browser. ```javascript console.log(isBrowser); // -> true if running in a browser ``` ## isBuffer Check if value is a buffer. |Name |Desc | |------|-------------------------| |val |The value to check | |return|True if value is a buffer| ```javascript isBuffer(new Buffer(4)); // -> true ``` ## isCrossOrig Check if a url is cross origin. ## isDarkMode Detect dark mode. ```javascript console.log(isDarkMode()); // true if dark mode ``` ## isDate Check if value is classified as a Date object. |Name |Desc | |------|------------------------------| |val |value to check | |return|True if value is a Date object| ```javascript isDate(new Date()); // -> true ``` ## isEl Check if value is a DOM element. |Name |Desc | |------|------------------------------| |val |Value to check | |return|True if value is a DOM element| ```javascript isEl(document.body); // -> true ``` ## isEmpty Check if value is an empty object or array. |Name |Desc | |------|----------------------| |val |Value to check | |return|True if value is empty| ```javascript isEmpty([]); // -> true isEmpty({}); // -> true isEmpty(''); // -> true ``` ## isErr Check if value is an error. |Name |Desc | |------|-------------------------| |val |Value to check | |return|True if value is an error| ```javascript isErr(new Error()); // -> true ``` ## isFn Check if value is a function. |Name |Desc | |------|---------------------------| |val |Value to check | |return|True if value is a function| Generator function is also classified as true. ```javascript isFn(function() {}); // -> true isFn(function*() {}); // -> true isFn(async function() {}); // -> true ``` ## isHidden Check if element is hidden. |Name |Desc | |-------|-------------------------| |el |Target element | |options|Check options | |return |True if element is hidden| Available options: |Name |Desc | |----------------|-----------------------------| |display=true |Check if it is displayed | |visibility=false|Check visibility css property| |opacity=false |Check opacity css property | |size=false |Check width and height | |viewport=false |Check if it is in viewport | |overflow=false |Check if hidden in overflow | ```javascript isHidden(document.createElement('div')); // -> true ``` ## isMatch Check if keys and values in src are contained in obj. |Name |Desc | |------|----------------------------------| |obj |Object to inspect | |src |Object of property values to match| |return|True if object is match | ```javascript isMatch({ a: 1, b: 2 }, { a: 1 }); // -> true ``` ## isMiniProgram Check if running in wechat mini program. ```javascript console.log(isMiniProgram); // -> true if running in mini program. ``` ## isMobile Check whether client is using a mobile browser using ua. |Name |Desc | |----------------------|-------------------------------------| |ua=navigator.userAgent|User agent | |return |True if ua belongs to mobile browsers| ```javascript isMobile(navigator.userAgent); ``` ## isNaN Check if value is an NaN. |Name |Desc | |------|-----------------------| |val |Value to check | |return|True if value is an NaN| Undefined is not an NaN, different from global isNaN function. ```javascript isNaN(0); // -> false isNaN(NaN); // -> true ``` ## isNative Check if value is a native function. |Name |Desc | |------|----------------------------------| |val |Value to check | |return|True if value is a native function| ```javascript isNative(function() {}); // -> false isNative(Math.min); // -> true ``` ## isNil Check if value is null or undefined, the same as value == null. |Name |Desc | |------|----------------------------------| |val |Value to check | |return|True if value is null or undefined| ```javascript isNil(null); // -> true isNil(void 0); // -> true isNil(undefined); // -> true isNil(false); // -> false isNil(0); // -> false isNil([]); // -> false ``` ## isNull Check if value is an Null. |Name |Desc | |------|------------------------| |val |Value to check | |return|True if value is an Null| ```javascript isNull(null); // -> true ``` ## isNum Check if value is classified as a Number primitive or object. |Name |Desc | |------|-------------------------------------| |val |Value to check | |return|True if value is correctly classified| ```javascript isNum(5); // -> true isNum(5.1); // -> true isNum({}); // -> false ``` ## isObj Check if value is the language type of Object. |Name |Desc | |------|--------------------------| |val |Value to check | |return|True if value is an object| [Language Spec](http://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types) ```javascript isObj({}); // -> true isObj([]); // -> true ``` ## isPrimitive Check if value is string, number, boolean or null. |Name |Desc | |------|----------------------------| |val |Value to check | |return|True if value is a primitive| ```javascript isPrimitive(5); // -> true isPrimitive('abc'); // -> true isPrimitive(false); // -> true ``` ## isPromise Check if value looks like a promise. |Name |Desc | |------|----------------------------------| |val |Value to check | |return|True if value looks like a promise| ```javascript isPromise(new Promise(function() {})); // -> true isPromise({}); // -> false ``` ## isRegExp Check if value is a regular expression. |Name |Desc | |------|-------------------------------------| |val |Value to check | |return|True if value is a regular expression| ```javascript isRegExp(/a/); // -> true ``` ## isSorted Check if an array is sorted. |Name |Desc | |------|-----------------------| |arr |Array to check | |cmp |Comparator | |return|True if array is sorted| ```javascript isSorted([1, 2, 3]); // -> true isSorted([3, 2, 1]); // -> false ``` ## isStr Check if value is a string primitive. |Name |Desc | |------|-----------------------------------| |val |Value to check | |return|True if value is a string primitive| ```javascript isStr('licia'); // -> true ``` ## isUndef Check if value is undefined. |Name |Desc | |------|--------------------------| |val |Value to check | |return|True if value is undefined| ```javascript isUndef(void 0); // -> true isUndef(null); // -> false ``` ## kebabCase Convert string to "kebabCase". |Name |Desc | |------|------------------| |str |String to convert | |return|Kebab cased string| ```javascript kebabCase('fooBar'); // -> foo-bar kebabCase('foo bar'); // -> foo-bar kebabCase('foo_bar'); // -> foo-bar kebabCase('foo.bar'); // -> foo-bar ``` ## keys Create an array of the own enumerable property names of object. |Name |Desc | |------|-----------------------| |obj |Object to query | |return|Array of property names| ```javascript keys({ a: 1 }); // -> ['a'] ``` ## last Get the last element of array. |Name |Desc | |------|-------------------------| |arr |The array to query | |return|The last element of array| ```javascript last([1, 2]); // -> 2 ``` ## linkify Hyperlink urls in a string. |Name |Desc | |---------|-------------------------| |str |String to hyperlink | |hyperlink|Function to hyperlink url| |return |Result string | ```javascript const str = 'Official site: http://eustia.liriliri.io'; linkify(str); // -> 'Official site: http://eustia.liriliri.io' linkify(str, function(url) { return '' + url + ''; }); ``` ## loadJs Inject script tag into page with given src value. |Name|Desc | |----|---------------| |src |Script source | |cb |Onload callback| ```javascript loadJs('main.js', function(isLoaded) { // Do something... }); ``` ## lowerCase Convert string to lower case. |Name |Desc | |------|------------------| |str |String to convert | |return|Lower cased string| ```javascript lowerCase('TEST'); // -> 'test' ``` ## lpad Pad string on the left side if it's shorter than length. |Name |Desc | |------|----------------------| |str |String to pad | |len |Padding length | |chars |String used as padding| |return|Result string | ```javascript lpad('a', 5); // -> ' a' lpad('a', 5, '-'); // -> '----a' lpad('abc', 3, '-'); // -> 'abc' lpad('abc', 5, 'ab'); // -> 'ababc' ``` ## ltrim Remove chars or white-spaces from beginning of string. |Name |Desc | |------|------------------| |str |String to trim | |chars |Characters to trim| |return|Trimmed string | ```javascript ltrim(' abc '); // -> 'abc ' ltrim('_abc_', '_'); // -> 'abc_' ltrim('_abc_', ['a', '_']); // -> 'bc_' ``` ## map Create an array of values by running each element in collection through iteratee. |Name |Desc | |--------|------------------------------| |object |Collection to iterate over | |iterator|Function invoked per iteration| |context |Function context | |return |New mapped array | ```javascript map([4, 8], function(n) { return n * n; }); // -> [16, 64] ``` ## mapObj Map for objects. |Name |Desc | |--------|------------------------------| |object |Object to iterate over | |iterator|Function invoked per iteration| |context |Function context | |return |New mapped object | ```javascript mapObj({ a: 1, b: 2 }, function(val, key) { return val + 1; }); // -> {a: 2, b: 3} ``` ## matcher Return a predicate function that checks if attrs are contained in an object. |Name |Desc | |------|----------------------------------| |attrs |Object of property values to match| |return|New predicate function | ```javascript const filter = require('licia/filter'); const objects = [ { a: 1, b: 2, c: 3 }, { a: 4, b: 5, c: 6 } ]; filter(objects, matcher({ a: 4, c: 6 })); // -> [{a: 4, b: 5, c: 6}] ``` ## memStorage Memory-backed implementation of the Web Storage API. A replacement for environments where localStorage or sessionStorage is not available. ```javascript const localStorage = window.localStorage || memStorage; localStorage.setItem('test', 'licia'); ``` ## memoize Memoize a given function by caching the computed result. |Name |Desc | |------|------------------------------------| |fn |Function to have its output memoized| |hashFn|Function to create cache key | |return|New memoized function | ```javascript const fibonacci = memoize(function(n) { return n < 2 ? n : fibonacci(n - 1) + fibonacci(n - 2); }); ``` ## meta Document meta manipulation, turn name and content into key value pairs. Get meta content with given name. If name is omitted, all pairs will be return. |Name |Desc | |------|------------| |name |Meta name | |return|Meta content| Set meta content. |Name |Desc | |-------|------------| |name |Meta name | |content|Meta content| |Name |Desc | |-----|----------------------------| |metas|Object of name content pairs| ### remove Remove metas. |Name|Desc | |----|---------| |name|Meta name| ```javascript // meta(); // -> {a: '1', b: '2', c: '3'} meta('a'); // -> '1' meta(['a', 'c']); // -> {a: '1', c: '3'} meta('d', '4'); meta({ d: '5', e: '6', f: '7' }); meta.remove('d'); meta.remove(['e', 'f']); ``` ## ms Convert time string formats to milliseconds. Turn time string into milliseconds. |Name |Desc | |------|-------------| |str |String format| |return|Milliseconds | Turn milliseconds into time string. |Name |Desc | |------|-------------| |num |Milliseconds | |return|String format| ```javascript ms('1s'); // -> 1000 ms('1m'); // -> 60000 ms('1.5h'); // -> 5400000 ms('1d'); // -> 86400000 ms('1y'); // -> 31557600000 ms('1000'); // -> 1000 ms(1500); // -> '1.5s' ms(60000); // -> '1m' ``` ## nextTick Next tick for both node and browser. |Name|Desc | |----|----------------| |cb |Function to call| Use process.nextTick if available. Otherwise setImmediate or setTimeout is used as fallback. ```javascript nextTick(function() { // Do something... }); ``` ## noop A no-operation function. ```javascript noop(); // Does nothing ``` ## now Gets the number of milliseconds that have elapsed since the Unix epoch. ```javascript now(); // -> 1468826678701 ``` ## objToStr Alias of Object.prototype.toString. |Name |Desc | |------|------------------------------------| |val |Source value | |return|String representation of given value| ```javascript objToStr(5); // -> '[object Number]' ``` ## once Create a function that invokes once. |Name |Desc | |------|-----------------------| |fn |Function to restrict | |return|New restricted function| ```javascript function init() {} const initOnce = once(init); initOnce(); initOnce(); // -> init is invoked once ``` ## optimizeCb Used for function context binding. ## orientation Screen orientation helper. ### on Bind change event. ### off Unbind change event. ### get Get current orientation(landscape or portrait). ```javascript orientation.on('change', function(direction) { console.log(direction); // -> 'portrait' }); orientation.get(); // -> 'landscape' ``` ## partial Partially apply a function by filling in given arguments. |Name |Desc | |-----------|----------------------------------------| |fn |Function to partially apply arguments to| |...partials|Arguments to be partially applied | |return |New partially applied function | ```javascript const sub5 = partial(function(a, b) { return b - a; }, 5); sub5(20); // -> 15 ``` ## perfNow High resolution time up to microsecond precision. ```javascript const start = perfNow(); // Do something. console.log(perfNow() - start); ``` ## pick Return a filtered copy of an object. |Name |Desc | |------|---------------| |object|Source object | |filter|Object filter | |return|Filtered object| ```javascript pick({ a: 1, b: 2 }, 'a'); // -> {a: 1} pick({ a: 1, b: 2, c: 3 }, ['b', 'c']); // -> {b: 2, c: 3} pick({ a: 1, b: 2, c: 3, d: 4 }, function(val, key) { return val % 2; }); // -> {a: 1, c: 3} ``` ## prefix Add vendor prefixes to a CSS attribute. |Name |Desc | |------|----------------------| |name |Property name | |return|Prefixed property name| ### dash Create a dasherize version. ```javascript prefix('text-emphasis'); // -> 'WebkitTextEmphasis' prefix.dash('text-emphasis'); // -> '-webkit-text-emphasis' prefix('color'); // -> 'color' ``` ## property Return a function that will itself return the key property of any passed-in object. |Name |Desc | |------|---------------------------| |path |Path of the property to get| |return|New accessor function | ```javascript const obj = { a: { b: 1 } }; property('a')(obj); // -> {b: 1} property(['a', 'b'])(obj); // -> 1 ``` ## pxToNum Turn string like '0px' to number. ## query Parse and stringify url query strings. ### parse Parse a query string into an object. |Name |Desc | |------|------------| |str |Query string| |return|Query object| ### stringify Stringify an object into a query string. |Name |Desc | |------|------------| |obj |Query object| |return|Query string| ```javascript query.parse('foo=bar&eruda=true'); // -> {foo: 'bar', eruda: 'true'} query.stringify({ foo: 'bar', eruda: 'true' }); // -> 'foo=bar&eruda=true' query.parse('name=eruda&name=eustia'); // -> {name: ['eruda', 'eustia']} ``` ## raf Shortcut for requestAnimationFrame. Use setTimeout if native requestAnimationFrame is not supported. ```javascript const id = raf(function tick() { // Animation stuff raf(tick); }); raf.cancel(id); ``` ## repeat Repeat string n-times. |Name |Desc | |------|----------------| |str |String to repeat| |n |Repeat times | |return|Repeated string | ```javascript repeat('a', 3); // -> 'aaa' repeat('ab', 2); // -> 'abab' repeat('*', 0); // -> '' ``` ## restArgs This accumulates the arguments passed into an array, after a given index. |Name |Desc | |----------|---------------------------------------| |function |Function that needs rest parameters | |startIndex|The start index to accumulates | |return |Generated function with rest parameters| ```javascript const paramArr = restArgs(function(rest) { return rest; }); paramArr(1, 2, 3, 4); // -> [1, 2, 3, 4] ``` ## reverse Reverse array without mutating it. |Name |Desc | |------|---------------| |arr |Array to modify| |return|Reversed array | ```javascript reverse([1, 2, 3]); // -> [3, 2, 1] ``` ## root Root object reference, `global` in nodeJs, `window` in browser. ## rtrim Remove chars or white-spaces from end of string. |Name |Desc | |------|------------------| |str |String to trim | |chars |Characters to trim| |return|Trimmed string | ```javascript rtrim(' abc '); // -> ' abc' rtrim('_abc_', '_'); // -> '_abc' rtrim('_abc_', ['c', '_']); // -> '_ab' ``` ## safeCb Create callback based on input value. ## safeGet Get object property, don't throw undefined error. |Name |Desc | |------|-------------------------| |obj |Object to query | |path |Path of property to get | |return|Target value or undefined| ```javascript const obj = { a: { aa: { aaa: 1 } } }; safeGet(obj, 'a.aa.aaa'); // -> 1 safeGet(obj, ['a', 'aa']); // -> {aaa: 1} safeGet(obj, 'a.b'); // -> undefined ``` ## safeStorage Safe localStorage and sessionStorage. ## slice Create slice of source array or array-like object. |Name |Desc | |----------------|--------------------------| |array |Array to slice | |start=0 |Start position | |end=array.length|End position, not included| ```javascript slice([1, 2, 3, 4], 1, 2); // -> [2] ``` ## some Check if predicate return truthy for any element. |Name |Desc | |---------|----------------------------------------------| |obj |Collection to iterate over | |predicate|Function to invoked per iteration | |ctx |Predicate context | |return |True if any element passes the predicate check| ```javascript some([2, 5], function(val) { return val % 2 === 0; }); // -> true ``` ## sortKeys Sort keys of an object. |Name |Desc | |-------|-----------------------| |obj |Object to sort | |options|Sort options | |return |Object with sorted keys| Available options: |Name |Desc | |----------|---------------------| |deep=false|Sort keys recursively| |comparator|Comparator | ```javascript sortKeys( { b: { d: 2, c: 1 }, a: 0 }, { deep: true } ); // -> {a: 0, b: {c: 1, d: 2}} ``` ## splitCase Split different string case to an array. |Name |Desc | |------|---------------| |str |String to split| |return|Result array | ```javascript splitCase('foo-bar'); // -> ['foo', 'bar'] splitCase('foo bar'); // -> ['foo', 'bar'] splitCase('foo_bar'); // -> ['foo', 'bar'] splitCase('foo.bar'); // -> ['foo', 'bar'] splitCase('fooBar'); // -> ['foo', 'bar'] splitCase('foo-Bar'); // -> ['foo', 'bar'] ``` ## startWith Check if string starts with the given target string. |Name |Desc | |------|---------------------------------| |str |String to search | |prefix|String prefix | |return|True if string starts with prefix| ```javascript startWith('ab', 'a'); // -> true ``` ## stringify JSON stringify with support for circular object, function etc. Undefined is treated as null value. |Name |Desc | |------|-------------------| |obj |Object to stringify| |spaces|Indent spaces | |return|Stringified object | ```javascript stringify({ a: function() {} }); // -> '{"a":"[Function function () {}]"}' const obj = { a: 1, b: {} }; obj.b = obj; stringify(obj); // -> '{"a":1,"b":"[Circular ~]"}' ``` ## stringifyAll Stringify object into json with types. |Name |Desc | |-------|-------------------| |obj |Object to stringify| |options|Stringify options | |return |Stringified object | Available options: |Name |Desc | |------------------|-------------------------| |unenumerable=false|Include unenumerable keys| |symbol=false |Include symbol keys | |accessGetter=false|Access getter value | |timeout=0 |Timeout of stringify | |depth=0 |Max depth of recursion | |ignore |Values to ignore | When time is out, all remaining values will all be "Timeout". ```javascript stringifyAll(function test() {}); // -> '{"value":"function test() {}","type":"Function",...}' ``` ## throttle Return a new throttled version of the passed function. |Name |Desc | |------|-------------------------------| |fn |Function to throttle | |wait |Number of milliseconds to delay| |return|New throttled function | ```javascript const updatePos = throttle(function() {}, 100); // $(window).scroll(updatePos); ``` ## toArr Convert value to an array. |Name |Desc | |------|----------------| |val |Value to convert| |return|Converted array | ```javascript toArr({ a: 1, b: 2 }); // -> [{a: 1, b: 2}] toArr('abc'); // -> ['abc'] toArr(1); // -> [1] toArr(null); // -> [] ``` ## toInt Convert value to an integer. |Name |Desc | |------|-----------------| |val |Value to convert | |return|Converted integer| ```javascript toInt(1.1); // -> 1 toInt(undefined); // -> 0 ``` ## toNum Convert value to a number. |Name |Desc | |------|----------------| |val |Value to process| |return|Result number | ```javascript toNum('5'); // -> 5 ``` ## toSrc Convert function to its source code. |Name |Desc | |------|-------------------| |fn |Function to convert| |return|Source code | ```javascript toSrc(Math.min); // -> 'function min() { [native code] }' toSrc(function() {}); // -> 'function () { }' ``` ## toStr Convert value to a string. |Name |Desc | |------|----------------| |val |Value to convert| |return|Result string | ```javascript toStr(null); // -> '' toStr(1); // -> '1' toStr(false); // -> 'false' toStr([1, 2, 3]); // -> '1,2,3' ``` ## trim Remove chars or white-spaces from beginning end of string. |Name |Desc | |------|------------------| |str |String to trim | |chars |Characters to trim| |return|Trimmed string | ```javascript trim(' abc '); // -> 'abc' trim('_abc_', '_'); // -> 'abc' trim('_abc_', ['a', 'c', '_']); // -> 'b' ``` ## type Determine the internal JavaScript [[Class]] of an object. |Name |Desc | |--------------|-----------------| |val |Value to get type| |lowerCase=true|LowerCase result | |return |Type of object | ```javascript type(5); // -> 'number' type({}); // -> 'object' type(function() {}); // -> 'function' type([]); // -> 'array' type([], false); // -> 'Array' type(async function() {}, false); // -> 'AsyncFunction' ``` ## types Used for typescript definitions only. ## uncaught Handle global uncaught errors and promise rejections. ### start Start handling of errors. ### stop Stop handling. ### addListener Add listener for handling errors. |Name|Desc | |----|--------------| |fn |Error listener| ### rmListener Remove listener. ### rmAllListeners Remove all listeners. ```javascript uncaught.start(); uncaught.addListener(err => { // Do something. }); ``` ## uniqId Generate a globally-unique id. |Name |Desc | |------|------------------| |prefix|Id prefix | |return|Globally-unique id| ```javascript uniqId('eustia_'); // -> 'eustia_xxx' ``` ## unique Create duplicate-free version of an array. |Name |Desc | |------|-----------------------------| |arr |Array to inspect | |cmp |Function for comparing values| |return|New duplicate free array | ```javascript unique([1, 2, 3, 1]); // -> [1, 2, 3] ``` ## upperFirst Convert the first character of string to upper case. |Name |Desc | |------|-----------------| |str |String to convert| |return|Converted string | ```javascript upperFirst('red'); // -> Red ``` ## values Create an array of the own enumerable property values of object. |Name |Desc | |------|------------------------| |obj |Object to query | |return|Array of property values| ```javascript values({ one: 1, two: 2 }); // -> [1, 2] ``` ## viewportScale Get viewport scale. ```javascript viewportScale(); // -> 3 ``` ## wrap Wrap the function inside a wrapper function, passing it as the first argument. |Name |Desc | |-------|----------------| |fn |Function to wrap| |wrapper|Wrapper function| |return |New function | ```javascript const p = wrap(escape, function(fn, text) { return '

' + fn(text) + '

'; }); p('You & Me'); // -> '

You & Me

' ``` ## xpath Select elements using xpath, IE is not supported. |Name |Desc | |------|---------------| |xpath |Xpath | |return|Target elements| ```javascript xpath('//html/body'); // -> [body] ```