UNPKG

persiandate-picker

Version:
340 lines (286 loc) 11.4 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>JSDoc: Source: helper.js</title> <script src="scripts/prettify/prettify.js"> </script> <script src="scripts/prettify/lang-css.js"> </script> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css"> <link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css"> </head> <body> <div id="main"> <h1 class="page-title">Source: helper.js</h1> <section> <article> <pre class="prettyprint source"><code>'use strict'; /** * Extend javascript Object * @type {Function} */ Object.keys = Object.keys || (function () { var hasOwnProperty = Object.prototype.hasOwnProperty, hasDontEnumBug = !{ toString: null }.propertyIsEnumerable("toString"), DontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'], DontEnumsLength = DontEnums.length; return function (o) { if (typeof o !== "object" &amp;&amp; typeof o !== "function" || o === null) throw new TypeError("Object.keys called on a non-object"); var result = []; for (var name in o) { if (hasOwnProperty.call(o, name)) result.push(name); } if (hasDontEnumBug) { for (var i = 0; i &lt; DontEnumsLength; i++) { if (hasOwnProperty.call(o, DontEnums[i])) result.push(DontEnums[i]); } } return result; }; })(); /** * Extend javascript Event * @type {{setup: setup, teardown: teardown, handler: handler, delayedHandler: delayedHandler, triggerIfChanged: triggerIfChanged, saveLastValue: saveLastValue}} */ $.event.special.textchange = { setup: function (data, namespaces) { $.event.special.textchange.saveLastValue(this); $(this).bind('keyup.textchange', $.event.special.textchange.handler); $(this).bind('cut.textchange paste.textchange input.textchange', $.event.special.textchange.delayedHandler); }, teardown: function (namespaces) { $(this).unbind('.textchange'); }, handler: function (event) { $.event.special.textchange.triggerIfChanged($(this)); }, delayedHandler: function (event) { var element = $(this); setTimeout(function () { $.event.special.textchange.triggerIfChanged(element); }, 25); }, triggerIfChanged: function (element) { var current = element[0].contentEditable === 'true' ? element.html() : element.val(); if (current !== element.data('lastValue')) { element.trigger('textchange', element.data('lastValue')); // element.data('lastValue', current); } }, saveLastValue: function (element) { $(element).data('lastValue', element.contentEditable === 'true' ? $(element).html() : $(element).val()); } }; $.event.special.hastext = { setup: function (data, namespaces) { $(this).bind('textchange', $.event.special.hastext.handler); }, teardown: function (namespaces) { $(this).unbind('textchange', $.event.special.hastext.handler); }, handler: function (event, lastValue) { if ((lastValue === '') &amp;&amp; lastValue !== $(this).val()) { $(this).trigger('hastext'); } } }; $.event.special.notext = { setup: function (data, namespaces) { $(this).bind('textchange', $.event.special.notext.handler); }, teardown: function (namespaces) { $(this).unbind('textchange', $.event.special.notext.handler); }, handler: function (event, lastValue) { if ($(this).val() === '' &amp;&amp; $(this).val() !== lastValue) { $(this).trigger('notext'); } } }; // Enhance val() so that this plugin is aware of programmatic changes to // text using val(). var origValFn = $.fn.val; $.fn.val = function () { var returnValue = origValFn.apply(this, arguments); if (arguments.length) { this.each(function () { $.event.special.textchange.triggerIfChanged($(this)); }); } return returnValue; }; /** * Micro Mustcahe Template * @param input * @param dict * @returns {*|jQuery|HTMLElement} */ $.tmplMustache = function (input, dict) { // Micro Mustache Template engine String.prototype.format = function string_format(arrayInput) { function replacer(key) { var keyArr = key.slice(2, -2).split("."), firstKey = keyArr[0], SecondKey = keyArr[1]; if (arrayInput[firstKey] instanceof Object) { return arrayInput[firstKey][SecondKey]; } else { return arrayInput[firstKey]; } } return this.replace(/{{\s*[\w\.]+\s*}}/g, replacer); }; return $(input.format(dict)); }; /** * Extend String Proto with toPersianDigit &amp; toEnglishDigit * @param a * @returns {string} */ String.prototype.toPersianDigit = function (a) { return this.replace(/\d+/g, function (digit) { var enDigitArr = [], peDigitArr = []; for (var i = 0; i &lt; digit.length; i++) { enDigitArr.push(digit.charCodeAt(i)); } for (var j = 0; j &lt; enDigitArr.length; j++) { peDigitArr.push(String.fromCharCode(enDigitArr[j] + ((!!a &amp;&amp; a == true) ? 1584 : 1728))); } return peDigitArr.join(''); }); }; /** * * @param a * @returns {string} */ String.prototype.toEngilshDigit = function (a) { return this.replace(/\d+/g, function (digit) { var enDigitArr = [], peDigitArr = []; for (var i = 0; i &lt; digit.length; i++) { enDigitArr.push(digit.charCodeAt(i)); } for (var j = 0; j &lt; enDigitArr.length; j++) { peDigitArr.push(String.fromCharCode(enDigitArr[j] - ((!!a &amp;&amp; a == true) ? 1584 : 1728))); } return enDigitArr.join(''); }); }; /** * Helper Methuds * @param callback * @param ms */ var delay = function (callback, ms) { clearTimeout(window.datepickerTimer); window.datepickerTimer = setTimeout(callback, ms); }; /** * * @param input */ var log = function (input) { console.log(input); }; /** * * @param e * @returns {Array} */ var range = function (e) { var r = []; var i = 0; while (i &lt;= e - 1) { r.push(i); i++; } return r; }; /** * * @param self * @param baseClasses * @returns {*} */ var inherit = function (self, baseClasses) { var copyObject = function (o) { return $.extend(true, {}, o); } var args = [true, self, copyObject(ClassBase)]; var events = []; for (var index in baseClasses) { var cls = copyObject(baseClasses[index]); if (!cls) { continue; } if (cls['events'] &amp;&amp; Object.keys(cls['events']).length > 0) { events.push(cls['events']); } cls.events = {}; args.push(cls); } $.extend.apply(self, args); for (var index in events) { var eventsObject = events[index]; var eventKeys = Object.keys(eventsObject) for (var keyIndex in eventKeys) { var key = eventKeys[keyIndex] var val = eventsObject[key]; if (key &amp;&amp; val) { self.attachEvent(key, val); } } } self.init(); return self; } /** * * @param ua * @returns {{browser: (*|string), version: (*|string)}} */ jQuery.uaMatch = function (ua) { ua = ua.toLowerCase(); var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || /(webkit)[ \/]([\w.]+)/.exec(ua) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || /(msie) ([\w.]+)/.exec(ua) || ua.indexOf("compatible") &lt; 0 &amp;&amp; /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || []; return { browser: match[ 1 ] || "", version: match[ 2 ] || "0" }; }; // cDon't clobber any existing jQuery.browser in case it's different if (!jQuery.browser) { var matched = jQuery.uaMatch(window.navigator.userAgent); var browser = {}; if (matched.browser) { browser[ matched.browser ] = true; browser.version = matched.version; } // Chrome is Webkit, but Webkit is also Safari. if (browser.chrome) { browser.webkit = true; } else if (browser.webkit) { browser.safari = true; } jQuery.browser = browser; }</code></pre> </article> </section> </div> <nav> <h2><a href="index.html">Index</a></h2><h3>Classes</h3><ul><li><a href="ClassBase.html">ClassBase</a></li><li><a href="ClassDatepicker.html">ClassDatepicker</a></li><li><a href="ClassDatepicker.ClassCompat.html">ClassCompat</a></li><li><a href="ClassDatepicker.ClassConfig.html">ClassConfig</a></li><li><a href="ClassDatepicker.ViewsDatePicker.html">ViewsDatePicker</a></li><li><a href="ClassDatepickerState.html">ClassDatepickerState</a></li><li><a href="ClassDayPicker.html">ClassDayPicker</a></li><li><a href="ClassDayPicker.ClassMonthGrid.html">ClassMonthGrid</a></li><li><a href="ClassMonthGrid.ViewsMonthGrid.html">ViewsMonthGrid</a></li><li><a href="ClassMonthPicker.html">ClassMonthPicker</a></li><li><a href="ClassNavigator.html">ClassNavigator</a></li><li><a href="ClassSprite.html">ClassSprite</a></li><li><a href="ClassTimePicker.html">ClassTimePicker</a></li><li><a href="ClassToolbox.html">ClassToolbox</a></li><li><a href="ClassYearPicker.html">ClassYearPicker</a></li><li><a href="TEMPLATE.html">TEMPLATE</a></li></ul><h3>Events</h3><ul><li><a href="ClassDatepicker.ClassConfig.html#.event:onHide">onHide</a></li><li><a href="ClassDatepicker.ClassConfig.html#.event:onSelect">onSelect</a></li><li><a href="ClassDatepicker.ClassConfig.html#.event:onShow">onShow</a></li><li><a href="ClassDatepicker.ClassConfig.html#.navigator#.event:onNext">onNext</a></li><li><a href="ClassDatepicker.ClassConfig.html#.navigator#.event:onPrev">onPrev</a></li><li><a href="ClassDatepicker.ClassConfig.html#.navigator#.event:onSwitch">onSwitch</a></li><li><a href="ClassDatepicker.html#.event:selectDate">selectDate</a></li><li><a href="ClassDatepicker.html#.event:selectDateTime">selectDateTime</a></li><li><a href="ClassDatepicker.html#.event:selectTime">selectTime</a></li></ul><h3>Global</h3><ul><li><a href="global.html#ClassDateRange">ClassDateRange</a></li><li><a href="global.html#delay">delay</a></li><li><a href="global.html#inherit">inherit</a></li><li><a href="global.html#log">log</a></li><li><a href="global.html#range">range</a></li></ul> </nav> <br clear="both"> <footer> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Sun Aug 07 2016 12:06:04 GMT+0430 (Iran Daylight Time) </footer> <script> prettyPrint(); </script> <script src="scripts/linenumber.js"> </script> </body> </html>