/** Required. Ace's Basic File to Initiliaze Different Parts and Some Variables. */ //some basic variables (function(undefined) { if( !('ace' in window) ) window['ace'] = {} if( !('helper' in window['ace']) ) window['ace'].helper = {} if( !('vars' in window['ace']) ) window['ace'].vars = {} window['ace'].vars['icon'] = ' ace-icon '; window['ace'].vars['.icon'] = '.ace-icon'; ace.vars['touch'] = ('ontouchstart' in window);//(('ontouchstart' in document.documentElement) || (window.DocumentTouch && document instanceof DocumentTouch)); //sometimes the only good way to work around browser's pecularities is to detect them using user-agents //though it's not accurate var agent = navigator.userAgent ace.vars['webkit'] = !!agent.match(/AppleWebKit/i) ace.vars['safari'] = !!agent.match(/Safari/i) && !agent.match(/Chrome/i); ace.vars['android'] = ace.vars['safari'] && !!agent.match(/Android/i) ace.vars['ios_safari'] = !!agent.match(/OS ([4-9])(_\d)+ like Mac OS X/i) && !agent.match(/CriOS/i) ace.vars['ie'] = window.navigator.msPointerEnabled || (document.all && document.querySelector);//8-11 ace.vars['old_ie'] = document.all && !document.addEventListener;//8 and below ace.vars['very_old_ie'] = document.all && !document.querySelector;//7 and below ace.vars['firefox'] = 'MozAppearance' in document.documentElement.style; ace.vars['non_auto_fixed'] = ace.vars['android'] || ace.vars['ios_safari']; //sometimes we try to use 'tap' event instead of 'click' if jquery mobile plugin is available ace['click_event'] = ace.vars['touch'] && jQuery.fn.tap ? 'tap' : 'click'; })(); //some ace helper functions (function($$ , undefined) {//$$ is ace.helper $$.unCamelCase = function(str) { return str.replace(/([a-z])([A-Z])/g, function(match, c1, c2){ return c1+'-'+c2.toLowerCase() }) } $$.strToVal = function(str) { var res = str.match(/^(?:(true)|(false)|(null)|(\-?[\d]+(?:\.[\d]+)?)|(\[.*\]|\{.*\}))$/i); var val = str; if(res) { if(res[1]) val = true; else if(res[2]) val = false; else if(res[3]) val = null; else if(res[4]) val = parseFloat(str); else if(res[5]) { try { val = JSON.parse(str) } catch (err) {} } } return val; } $$.getAttrSettings = function(elem, attr_list, prefix) { if(!elem) return; var list_type = attr_list instanceof Array ? 1 : 2; //attr_list can be Array or Object(key/value) var prefix = prefix ? prefix.replace(/([^\-])$/ , '$1-') : ''; prefix = 'data-' + prefix; var settings = {} for(var li in attr_list) if(attr_list.hasOwnProperty(li)) { var name = list_type == 1 ? attr_list[li] : li; var attr_val, attr_name = $$.unCamelCase(name.replace(/[^A-Za-z0-9]{1,}/g , '-')).toLowerCase() if( ! ((attr_val = elem.getAttribute(prefix + attr_name)) ) ) continue; settings[name] = $$.strToVal(attr_val); } return settings; } $$.scrollTop = function() { return document.scrollTop || document.documentElement.scrollTop || document.body.scrollTop } $$.winHeight = function() { return window.innerHeight || document.documentElement.clientHeight; } $$.redraw = function(elem, force) { if(!elem) return; var saved_val = elem.style['display']; elem.style.display = 'none'; elem.offsetHeight; if(force !== true) { elem.style.display = saved_val; } else { //force redraw for example in old IE setTimeout(function() { elem.style.display = saved_val; }, 10); } } })(ace.helper);