[ Avaa Bypassed ]




Upload:

Command:

hmhc3928@18.217.141.236: ~ $
{"version":3,"sources":["admin.js","backbone.stickit.js","admin-bindings.js","tinycolor.js","jquery.colorpickersliders.js","ajax.js","util.js","jquery.fontselect.js"],"names":["factory","define","amd","exports","module","window","FF_Cookie","extend","i","result","arguments","length","attributes","key","init","converter","api","value","path","defaults","expires","Date","setMilliseconds","getMilliseconds","JSON","stringify","test","e","write","encodeURIComponent","String","replace","decodeURIComponent","escape","document","cookie","toUTCString","domain","secure","join","cookies","split","rdecode","parts","name","slice","charAt","read","this","json","parse","get","set","getJSON","apply","call","remove","withConverter","jQuery","$","validateLicense","data","$licenseCont","activated","val","fname","lname","email","subscribe","prop","code","isX","licenseValid","dfd","Deferred","removeClass","hide","addClass","initEmail","initCode","resolve","promise","action","url","post","response","regexTest","laim_localize","ajaxurl","error","item_id","show","trigger","traversePages","pages","res","each","el","t","is","showLoadingView","hideLoadingView","isScrolledIntoView","$elem","elemTop","elemBottom","rule","docViewTop","$win","scrollTop","docViewBottom","height","updateMenuMap","map","$list","find","$t","locationData","term_id","trim","text","loc","isDef","$storageInput","openLocPopup","$item","$locPopup","populatePopup","$def","setTimeout","$body","on","closeLocPopup","closest","force","target","off","location","current","cat","ids","after","id","wrap","ind","cl","scl","bg","cc","hover","parent","append","before","prepend","change","end","options","flag","preventDefault","$form","p","hidden","user","desktop","mobile","resulted","everyone","loggedin","loggedout","yes","no","include","exclude","cposts","cats","taxes","langs","wp_pages","done","click","file","reader","FileReader","files","onload","er","alert","console","log","confirm","dataType","reload","fail","readAsText","state","$tabs","$subtabs","$or","scroll","offset","top","css","width","left","resize","not","animate","submit","file_frame","attachment","$input","parents","eq","open","wp","media","frames","multiple","first","toJSON","html","sizes","full","$popup","$clone","$select","clone","attr","_for","curr","sf_menus","$selected","$curr","require","_","Backbone","Stickit","_handlers","addHandler","handlers","flatten","handler","updateModel","updateView","updateMethod","concat","ViewMixin","_modelBindings","unstickit","model","bindingSelector","isObject","v","selector","models","destroyFns","reject","binding","config","event","fn","push","_destroy","invoke","uniq","cid","$el","stickit","optionalModel","optionalBindingsConfig","bindings","addBinding","stickitWrapped","ret","namespace","isString","observe","isFunction","getConfiguration","modelAttr","view","bindId","uniqueId","stickitChange","setOptions","applyViewFn","destroy","initializeAttributes","initializeVisible","initializeClasses","events","type","eventName","sel","bind","getVal","evaluateBoolean","setAttr","observeModelEvent","m","currentVal","getAttr","updateViewBindEl","initialize","View","prototype","evaluatePath","obj","reduce","memo","reference","isBoolean","last","onSet","isArray","attribute","index","has","retrieveVal","field","sanitizeVal","onGet","update","opts","filter","visible","props","attrConfig","lastClass","observed","updateAttr","updateType","contains","classes","classConfig","updateClass","toggleClass","visibleCb","visibleFn","isVisible","toggle","isInitializing","afterUpdate","checkbox","checkboxVal","checked","some","item","boxval","optList","selectConfig","selectOptions","list","collection","undefined","isMultiple","getList","option","dataVal","label","opt_labels","valuePath","labelPath","disabledPath","addSelectOptions","fieldVal","disabled","optionVal","fillOption","isEqual","context","indexOf","Collection","refreshSelectOptions","removeCollectionListeners","removeAllListeners","once","viewCid","defaultOption","$group","opt","sortBy","comparator","selected","SuperflyView","render","close","tinycolor","color","hasOwnProperty","rgb","inputToRGB","r","g","b","a","roundA","mathRound","format","ok","_tc_id","tinyCounter","alpha","getAlpha","setAlpha","boundAlpha","toHsv","hsv","rgbToHsv","h","s","toHsvString","toHsl","hsl","rgbToHsl","l","toHslString","toHex","allow3Char","rgbToHex","toHexString","toRgb","toRgbString","toPercentageRgb","bound01","toPercentageRgbString","toName","hexNames","toFilter","secondColor","hex","secondHex","alphaHex","Math","round","parseFloat","toString","secondAlphaHex","gradientType","pad2","formatSet","formattedString","formatWithAlpha","stringInputToObject","rgbToRgb","substr","convertToPercentage","hsvToRgb","hslToRgb","mathMin","mathMax","max","min","d","hue2rgb","q","math","floor","f","mod","isNaN","n","isOnePointZero","processPercent","isPercentage","parseInt","abs","clamp01","parseHex","c","trimLeft","trimRight","toLowerCase","named","names","match","matchers","exec","rgba","hsla","hex6","hex3","mathRandom","random","fromRatio","newColor","equals","color1","color2","desaturate","amount","saturate","greyscale","lighten","darken","complement","triad","tetrad","splitcomplement","analogous","results","slices","part","monochromatic","modification","readability","brightnessA","brightnessB","colorDiff","brightness","readable","mostReadable","baseColor","colorList","bestColor","bestScore","bestIsReadable","score","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","burntsienna","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","o","flipped","flip","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","RegExp","ColorPickerSliders","alreadyinitialized","_initSettings","_buildHtml","_initElements","triggerelement","tiny","settings","cielch","rgb2lch","_renderSwatches","_bindEvents","_updateAllElements","updateColor","newcolor","disableinputupdate","updatedcolor","container","showPopup","popuporiginalwidth","viewportwidth","outerWidth","outerHeight","hidePopup","swatches","customswatches","connectedinput","flat","disableautopopup","updateinterval","previewontriggerelement","previewcontrasttreshold","previewformat","erroneousciecolormarkers","invalidcolorsopacity","finercierangeedges","titleswatchesadd","titleswatchesremove","titleswatchesreset","order","labels","onchange","opacity","cie","preview","hslhue","hslsaturation","hsllightness","rgbred","rgbgreen","rgbblue","cielightness","ciechroma","ciehue","gradientSupported","sliders","color_picker_html","insertAfter","appendTo","add","elements","actualswatch","swatchescontainer","swatches_add","swatches_remove","swatches_reset","all_sliders","hue","hue_marker","saturation","saturation_marker","lightness","lightness_marker","opacity_marker","red_marker","green_marker","blue_marker","cielightness_marker","ciechroma_marker","ciehue_marker","destroyColorPicker","resetColorPicker","ev","stopPropagation","_addCurrentColorToSwatches","_removeActualColorFromSwatches","_resetSwatches","which","_updateColorsProperty","_updateMarkerPosition","dragTarget","percent","MAXLIGHT","MAXVALIDCHROMA","select","_parseCustomSwatches","localStorage","getItem","err","Array","_findActualColorsSwatch","found","swatchcolor","currentswatch","_storeSwatches","setItem","unshift","splice","property","lch2rgb","isok","slidername","calculateEventPositionPercentage","_updateAllElementsTimer","updateAllElementsTimeout","clearTimeout","now","lastUpdateTime","_renderOpacity","_renderHue","_renderSaturation","_renderLightness","_renderRed","_renderGreen","_renderBlue","_renderCieLightness","_renderCieChroma","_renderCieHue","_renderPreview","_updateConnectedInput","element","$element","setGradient","getScaledGradientStops","_extendCieGradientStops","gradientstops","sort","position","tmparray","steps","extendedgradientstops","rawcolor","j","merge","csscolor","colorstring","getEventCoordinates","pageX","originalEvent","pageY","touches","containerElement","xsize","testelement","createElement","style","backgroundImage","scalableproperty","minvalue","maxvalue","minposition","maxposition","gradientStops","diff","currentstage","modifiedcolor","modifyColor","stagergb","gradientstring","oldwebkitgradientstring","noprefix","webkit","oldwebkit","isGoodRgb","lch","CIELab2CIELCH","XYZ2CIELab","rgb2XYZ","XYZ2rgb","CIELab2XYZ","CIELCH2CIELab","tmp","lastbadchroma","lastgoodchroma","loops","$return","tmpcolor","XYZ","pow","x","y","z","CIELab","X","Y","Z","CIELCH","sqrt","atan2","PI","cos","sin","AwesomeAjax","prefix","self","load_model","model_name","callback_success","callback_error","ajax","success_handler","error_handler","publish_model","delete_model","args","security","success","responseArray","wpAjax","parseAjaxResponse","errors","responses","success_error_handler","AwesomeUtil","detect_os","os_name","navigator","appVersion","toObject","arr","rv","find_in_array_of_objects","array","hex_to_rgb","calc_size","raw","endsWith","clean_number","get_keys","find_key_by_value","needle","haystack","find_index_by_value","keys","start_with","regex","replace_all","capitalize","toUpperCase","windowScrollTopView","fontselect","__bind","me","fonts","empty","placeholder","lookahead","Fontselect","original","$original","active","setupHtml","getVisibleFonts","bindEvents","font","updateSelected","addFontLink","$results","selectFont","mouseenter","activateFont","mouseleave","deactivateFont","toggleDrop","$arrow","$drop","clearInterval","visibleInterval","moveToSelected","setInterval","$li","currentTarget","toReadable","font-family","toStyle","class","fontsAsHtml","font-weight","link"],"mappings":"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","file":"admin.min.js","sourcesContent":["/*!\n * JavaScript Cookie v2.0.4\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n(function (factory) {\n    if (typeof define === 'function' && define.amd) {\n        define(factory);\n    } else if (typeof exports === 'object') {\n        module.exports = factory();\n    } else {\n        /*var _OldCookies = window.Cookies;\n         var api = window.Cookies = factory();\n         api.noConflict = function () {\n         window.Cookies = _OldCookies;\n         return api;\n         };*/\n        window.FF_Cookie = factory();\n    }\n}(function () {\n    function extend () {\n        var i = 0;\n        var result = {};\n        for (; i < arguments.length; i++) {\n            var attributes = arguments[ i ];\n            for (var key in attributes) {\n                result[key] = attributes[key];\n            }\n        }\n        return result;\n    }\n\n    function init (converter) {\n        function api (key, value, attributes) {\n            var result;\n\n            // Write\n\n            if (arguments.length > 1) {\n                attributes = extend({\n                    path: '/'\n                }, api.defaults, attributes);\n\n                if (typeof attributes.expires === 'number') {\n                    var expires = new Date();\n                    expires.setMilliseconds(expires.getMilliseconds() + attributes.expires * 864e+5);\n                    attributes.expires = expires;\n                }\n\n                try {\n                    result = JSON.stringify(value);\n                    if (/^[\\{\\[]/.test(result)) {\n                        value = result;\n                    }\n                } catch (e) {}\n\n                if (!converter.write) {\n                    value = encodeURIComponent(String(value))\n                        .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n                } else {\n                    value = converter.write(value, key);\n                }\n\n                key = encodeURIComponent(String(key));\n                key = key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n                key = key.replace(/[\\(\\)]/g, escape);\n\n                return (document.cookie = [\n                    key, '=', value,\n                    attributes.expires && '; expires=' + attributes.expires.toUTCString(), // use expires attribute, max-age is not supported by IE\n                    attributes.path    && '; path=' + attributes.path,\n                    attributes.domain  && '; domain=' + attributes.domain,\n                    attributes.secure ? '; secure' : ''\n                ].join(''));\n            }\n\n            // Read\n\n            if (!key) {\n                result = {};\n            }\n\n            // To prevent the for loop in the first place assign an empty array\n            // in case there are no cookies at all. Also prevents odd result when\n            // calling \"get()\"\n            var cookies = document.cookie ? document.cookie.split('; ') : [];\n            var rdecode = /(%[0-9A-Z]{2})+/g;\n            var i = 0;\n\n            for (; i < cookies.length; i++) {\n                var parts = cookies[i].split('=');\n                var name = parts[0].replace(rdecode, decodeURIComponent);\n                var cookie = parts.slice(1).join('=');\n\n                if (cookie.charAt(0) === '\"') {\n                    cookie = cookie.slice(1, -1);\n                }\n\n                try {\n                    cookie = converter.read ?\n                        converter.read(cookie, name) : converter(cookie, name) ||\n                    cookie.replace(rdecode, decodeURIComponent);\n\n                    if (this.json) {\n                        try {\n                            cookie = JSON.parse(cookie);\n                        } catch (e) {}\n                    }\n\n                    if (key === name) {\n                        result = cookie;\n                        break;\n                    }\n\n                    if (!key) {\n                        result[name] = cookie;\n                    }\n                } catch (e) {}\n            }\n\n            return result;\n        }\n\n        api.get = api.set = api;\n        api.getJSON = function () {\n            return api.apply({\n                json: true\n            }, [].slice.call(arguments));\n        };\n        api.defaults = {};\n\n        api.remove = function (key, attributes) {\n            api(key, '', extend(attributes, {\n                expires: -1\n            }));\n        };\n\n        api.withConverter = init;\n\n        return api;\n    }\n\n    return init(function () {});\n}));\n\njQuery(function ($) {\n\n    var $win = $(window);\n    var $body = $('body');\n\n    // DOM manipulations\n\n    $('#sf_font').after($('#sf_uppercase_chooser')).after($('#sf_font_weight_chooser')).after($('#sf_alignment_chooser')).after($('#sf_font_size'))\n\n    $('#sf_c_font').after($('#sf_c_trans_chooser')).after($('#sf_c_weight_chooser')).after($('#sf_c_fs'));\n\n    $('#sf_c_fs').after('<span class=\"units\" style=\"top:-16px\">px</span><br>');\n    $('#sf_font_size').after('<span class=\"units\" style=\"top:-16px\">px</span><br>');\n\n    $('.sf_font').find('p:empty').remove();\n    $('.sf_c_font').find('p:empty').remove();\n\n    $('.switcher').each(function () {\n        $(this).after('<div><div></div></div>')\n    })\n\n    $('.postbox select').each(function () {\n        var id = this.id\n        $(this).wrap('<div class=\"select-wrapper\" id=\"' + id + '-wrapper\"></div>')\n    })\n\n    $('[id*=sf_width_panel_]').each(function () {\n        var ind = this.id.replace('sf_width_panel_', '');\n        var cl = $('#sf_color_panel_' + ind);\n        var scl = $('#sf_scolor_panel_' + ind);\n        var bg = $('#sf_bg_color_panel_' + ind);\n        var cc = $('#sf_chapter_' + ind);\n        var hover = $('#sf_hover_panel_' + ind);\n        $(this).parent().append(bg).append(cl).append(scl).append(cc).append(hover);\n        bg.before('<span>Background</span>');\n        cl.before('<span>Text</span>');\n        scl.before('<span>Second line</span>');\n        hover.before('<span>Hover color</span>');\n        cc.before('<span>Section</span>');\n    })\n\n    // adding export / import button\n    var html = '<div class=\"settings-form-row sf_export\"><p class=\"field-title \">EXPORT / IMPORT DESIGN SETTINGS</p><h6>Please notice that import action cannot be reverted. Export doesn\\'t include WP menus or any images, icons from this site</h6><p><a class=\"button-ui\" href=\"/wp-admin/admin-post.php?action=sf_export_settings&data=admin_only\">Export</a>&nbsp;&nbsp;&nbsp;<a href=\"#\" class=\"button-ui\" id=\"sf-import-btn\">Import</a>&nbsp;&nbsp;&nbsp;<input type=\"file\" id=\"sf_files\" accept=\".json,application/json\"></p></div>';\n\n    $('.sf_css').prepend( $( html ) );\n\n    // SUBSCRIPTION CHECK\n\n    var subCookie = window.FF_Cookie.get('sfm_sub');\n\n    if ( subCookie ) {\n\n    } else {\n        if ( $('#sf_license_subscribe').prop('checked') ) {\n\n            var $licenseCont = $('#sf_license');\n            var fname = $('#sf_license_fname', $licenseCont).val();\n            var lname = $('#sf_license_lname', $licenseCont).val();\n            var email = $('#sf_license_email', $licenseCont).val();\n\n            var data = {\n                action: 'subscribe',\n                email: email,\n                fname: fname,\n                lname: lname\n            }\n\n            var url = 'https://looks-awesome.com/proxy/superfly-mailchimp.php';\n\n            $.post(url, data, function (response) {});\n\n            window.FF_Cookie.set('sfm_sub', 'attempted', { expires: 356 });\n        }\n    }\n\n    // Events\n\n    $('#sf_sidebar_style').change(function () {\n        var val = $(this).val();\n        var $w = $(this).closest('.settings-form-row');\n\n        $w.find('[data-notice]').hide().end().find('[data-notice=' + val + ']').show();\n        if (val === 'static') {\n            $('.sf_iconbar').show()\n        } else {\n            $('.sf_iconbar').hide()\n        }\n\n        if (val === 'full') {\n            $('.sf_fade_content').hide();\n            $('.sf_fade_full').show();\n        } else {\n            $('.sf_fade_content').show();\n            $('.sf_fade_full').hide();\n        }\n    }).change();\n\n    var initEmail = $('#sf_license #sf_license_email').val();\n    var initCode = $('#sf_license #sf_license_code').val();\n\n    function validateLicense() {\n        var $licenseCont = $('#sf_license');\n        var activated = $('#sf_license_valid', $licenseCont).val();\n        var fname = $('#sf_license_fname', $licenseCont).val();\n        var lname = $('#sf_license_lname', $licenseCont).val();\n        var email = $('#sf_license_email', $licenseCont).val();\n        var subscribe = $('#sf_license_subscribe', $licenseCont).prop('checked');\n        var code = $('#sf_license_code', $licenseCont).length > 0 ? $('#sf_license_code', $licenseCont).val() : '';\n        var isX = $('#sf_license_code', $licenseCont).data('x');\n        var licenseValid = true;\n        var dfd = $.Deferred();\n        var data;\n\n        $('#sf_license_email', $licenseCont).removeClass('validation-error');\n        $('#sf_license_code', $licenseCont).removeClass('validation-error');\n        $('.purchase-code .code-error', $licenseCont).hide();\n\n        /*if(fname !== '' || lname !==  ''){\n            licenseValid = false;\n\n            if(email === ''){\n                $('#sf_license_email', $licenseCont).addClass('validation-error');\n            }\n\n            if(code === ''){\n                $('#sf_license_code', $licenseCont).addClass('validation-error');\n            }\n        }*/\n\n\n        if(email == '' && code != '' && !isX){\n            $('#sf_license_email', $licenseCont).addClass('validation-error');\n            licenseValid = false;\n        }\n\n        /*if(email == '' && isX){\n            $('#sf_license_email', $licenseCont).addClass('validation-error');\n            licenseValid = false;\n        }*/\n\n        if (activated && email == initEmail && code == initCode) {\n            dfd.resolve(activated);\n            return dfd.promise();\n        }\n\n        if (email != '') {\n            if (!/^[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,4}$/.test(email)) {\n                $('#sf_license_email', $licenseCont).addClass('validation-error');\n                licenseValid = false;\n            } else {\n                if($('#sf_license_code', $licenseCont).length === 0){\n\n                }\n                data = {\n                    action: 'always',\n                    email: email,\n                    fname: fname,\n                    lname: lname\n                };\n                var url = 'https://looks-awesome.com/proxy/superfly-mailchimp.php';\n\n                // Subscribe to list (anyway)\n                $.post(url, data, function (response) {});\n                if (subscribe) {\n                    data.action = 'subscribe';\n                    // Subscribe to public list (only if checkbox selected)\n                    $.post(url, data, function (response) {});\n                }\n            }\n        }\n\n        if (code != '') {\n            var regexTest = /^[a-z0-9]+\\-[a-z0-9]+\\-[a-z0-9]+\\-[a-z0-9]+\\-[a-z0-9]+$/.test(code);\n\n            if (!regexTest) {\n                $('#sf_license_code', $licenseCont).addClass('validation-error');\n                licenseValid = regexTest;\n                dfd.resolve(licenseValid);\n                $('#for_sf_license').trigger('click');\n            } else {\n                data = {\n                    action: 'sf_validate_envato_license',\n                    code: code\n                };\n\n                $.post(laim_localize.ajaxurl, data, function (response) {\n                    if (response == -1) {\n                        licenseValid = false;\n                    } else {\n                        if (response.error || response.item_id !== \"8012790\") {\n                            licenseValid = false;\n                            $('#sf_license_code', $licenseCont).addClass('validation-error');\n                            $('.purchase-code .code-error', $licenseCont).show();\n                            $('#for_sf_license').trigger('click');\n                        } else {\n                            $('#sf_license_valid', $licenseCont).val('1');\n                        }\n                    }\n                    dfd.resolve(licenseValid);\n                });\n            }\n        } else {\n            dfd.resolve(licenseValid);\n        }\n\n        return dfd.promise();\n    }\n\n    $('#sf_license_code').on('input', function (e, options) {\n        $('#sf_license_valid').val('');\n        $(this).removeClass('validation-success');\n    });\n\n    $('#sf_license_email').on('input', function (e, options) {\n        //$('#sf_license_valid').val('');\n    });\n\n    $('#sf_license_subscribe').on('change', function (e, options) {\n        //$('#sf_license_valid').val('');\n    });\n\n    $('#sf-options-wrap form').on('submit', function (e, options) {\n        options = options || {};\n\n        if (!options.flag) {\n            e.preventDefault();\n        }\n\n        var $form = $(this);\n        var p = $('.sf_display');\n        var current = p.find('.loc_popup')\n        var hidden = p.find('input:hidden');\n        var user = current.find('select[id*=user_status]').val();\n        var rule = current.find('select[id*=display_rule]').val();\n        var desktop = current.find('select[id*=display_desktop]').val();\n        var mobile = current.find('select[id*=display_mobile]').val();\n        var ids = current.find('[id*=display_ids]').val();\n\n        var resulted = {\n            'user': {\n                'everyone': user === 'everyone' ? 1 : 0,\n                'loggedin': user === 'loggedin' ? 1 : 0,\n                'loggedout': user === 'loggedout' ? 1 : 0\n            },\n            'desktop': {\n                'yes': desktop === 'yes' ? 1 : 0,\n                'no': desktop === 'no' ? 1 : 0\n            },\n            'mobile': {\n                'yes': mobile === 'yes' ? 1 : 0,\n                'no': mobile === 'no' ? 1 : 0\n            },\n\n            'rule': {\n                // 'include': rule === 'include' ? 1 : 0,\n                // 'exclude': rule === 'exclude' ? 1 : 0\n                'include': 0,\n                'exclude': 1\n            },\n            'location': {\n                'pages': traversePages(current.find('input[id*=display_page]')),\n                'cposts': traversePages(current.find('input[id*=display_cpost]')),\n                'cats': traversePages(current.find('input[id*=display_cat]')),\n                'taxes': {},\n                'langs': traversePages(current.find('input[id*=display_lang]')),\n                'wp_pages': traversePages(current.find('input[id*=display_wp_page]')),\n                'ids': ids.split(',')\n            }\n        };\n        hidden.val(JSON.stringify(resulted));\n        showLoadingView();\n\n        if (!options.flag) {\n            validateLicense().done(function (data) {\n                if (data) {\n                    showLoadingView();\n                    $form.trigger('submit', {flag: true});\n                } else {\n                    hideLoadingView();\n                    e.preventDefault();\n                }\n            });\n        }\n    });\n    \n    \n    // import \n    \n    $( '#sf-import-btn' ).click( function () {\n        var $inp = $( '#sf_files' )\n        $inp.click();\n    })\n\n    $( '#sf_files' ).change( function () {\n        var file;\n        var reader = new FileReader();\n\n        if ( !this.files ) {\n            alert( 'Sorry your browser does not support files API' );\n            return;\n        }\n        if ( !this.files[0] ) {\n            alert( 'No file selected' );\n            return;\n        }\n\n        file = this.files[0];\n\n        reader.onload = (function ( file ) {\n            return function (e) {\n                var json;\n\n                try {\n                    json = JSON.parse( e.target.result) ;\n                } catch ( er ) {\n                    alert('ex when trying to parse json = ' + er);\n                }\n\n                console.log( json );\n\n                if ( confirm('Are you sure you want to apply imported settings? This action cannot be reverted')) {\n                    $.post( '/wp-admin/admin-post.php', {\n                        action: 'sf_import_settings',\n                        data: json,\n                        dataType: 'json'\n                    }).done( function ( data ) {\n                        console.log( data );\n                        location.reload( );\n                    }).fail( function () {\n                        alert( \"request error\" );\n                    })\n                }\n            }\n        })( file );\n\n        reader.readAsText( file );\n\n    })\n\n\n    function traversePages(pages) {\n        var res = {};\n\n        pages.each(function (i, el) {\n            var t = $(el);\n            var val = t.val();\n            if (t.is(':checked')) res[val] = 1;\n        });\n\n        return res\n    }\n\n    function showLoadingView() {\n        $('#fade-overlay').addClass('loading');\n    }\n\n    function hideLoadingView() {\n        $('#fade-overlay').removeClass('loading');\n    }\n\n\n    function isScrolledIntoView($elem, elemTop, elemBottom, rule) {\n        var docViewTop = $win.scrollTop();\n        var docViewBottom = docViewTop + $win.height();\n\n        return rule === 'after' ? docViewBottom > elemBottom + 50 : (elemBottom <= docViewBottom && elemTop >= docViewTop - 25) || (elemBottom > docViewBottom && elemTop < docViewTop - 25);\n    }\n\n    var state = 'in';\n    var $tabs = $('#tabs-copy');\n    var $subtabs = $('#sf_appearance_tabs');\n    var $or = $('#tabs');\n    var $form = $('#sf-options-wrap form')\n\n    $win.scroll(function () {\n\n        var elemTop = $tabs.offset().top;\n        var elemBottom = elemTop + $tabs.height();\n        if (isScrolledIntoView($tabs, elemTop, elemBottom, 'in')) {\n            if (state !== 'in') {\n                state = 'in';\n                $or.removeClass('transition-in');\n                //setTimeout(function () {\n                $body.removeClass('fixed-nav');\n                $or.css({'width': '', left: ''});\n                //}, 50)\n            }\n        } else {\n            if (state !== 'out') {\n                state = 'out';\n                $body.addClass('fixed-nav');\n                $or.css({'width': $tabs.width(), left: $form.offset().left});\n                $subtabs.css({'width': $tabs.width(), left: $form.offset().left});\n                //setTimeout(function () {\n                $or.addClass('transition-in');\n                //}, 100)\n            }\n        }\n\n    });\n\n    $win.resize(function () {\n        if ($body.is('.fixed-nav')) {\n            $or.css({'width': $tabs.width(), left: $form.offset().left})\n        }\n    })\n\n    $or.find('li').not('#save-tab').click(function () {\n        $('html,body').animate({\n            scrollTop: 0\n        }, 300);\n    });\n\n    $subtabs.click(function () {\n        $('html,body').animate({\n            scrollTop: 0\n        }, 300);\n    });\n\n    $('#save-tab').click(function () {\n        $(this).closest('form').submit();\n    })\n\n    $('#form-tab').click(function () {\n\n    })\n\n    var file_frame, attachment, $input;\n\n    $('.sf-choose-image').click(function () {\n        var $t = $(this);\n        $input = $t.parents('.settings-form-row').eq(0).find('input');\n        if (file_frame) {\n            file_frame.open();\n            return;\n        }\n\n        // Create the media frame.\n        file_frame = wp.media.frames.file_frame = wp.media({\n            multiple: false  // Set to true to allow multiple files to be selected\n        });\n\n        // When an image is selected, run a callback.\n        file_frame.on('select', function () {\n            // We set multiple to false so only get one image from the uploader\n\n            attachment = file_frame.state().get('selection').first().toJSON();\n            $('.image-preview').html('<img src=\"' + attachment.url + '\"/>');\n            if (!$('.sf-remove-image').length) $t.parent().after(\"<div><span class='sf-remove-image'>Remove Image</span></div>\");\n            $input.val(attachment.sizes.full.url);\n            $input.closest('form').submit()\n//      $currBtn = null;\n        });\n\n        // Finally, open the modal\n        file_frame.open();\n    })\n\n    $(document).on('click', '.sf-remove-image', function () {\n        var $t = $(this);\n        $input = $t.parents('.settings-form-row').eq(0).find('input');\n        $input.val('');\n        $(this).closest('form').submit()\n    })\n\n\n    // multiple menus\n\n    var $select = $('#sf-menu__select-wrapper ');\n    var $popup, $locPopup, $clone, $def;\n    var $storageInput = $('.sf_active_menu input');\n    var $list = $('.sf-menu__list');\n\n    // dom\n    $select.wrap('<div class=\"sf-menu__select_popup\"></div>');\n    $popup = $('.sf-menu__select_popup');\n    $popup.append('<span class=\"sf-menu__btn sf-menu__btn__ok\"><i class=\"flaticon-plus\"></i></span><span class=\"sf-menu__btn sf-menu__btn__close\"><i class=\"flaticon-cross\"></i></span>');\n\n    $clone = $('.loc_popup > div').clone();\n\n    $clone.find('.rule_lang').remove();\n\n    $clone.find('[id]').each(function () {\n        var id = $(this).attr('id');\n        $(this).attr('id', id + '_popup')\n    });\n    $clone.find('[for]').each(function () {\n        var _for = $(this).attr('for');\n        $(this).attr('for', _for + '_popup')\n    });\n\n    $clone.addClass('sf-menu__loc_popup').prepend('\\\n        <div class=\"sf-menu__def_wrapper\"><p>Mark pages of your website to display this menu.</p>\\\n        <p>\\\n            <input class=\"checkbox\" type=\"checkbox\" value=\"yes\" id=\"display_default_menu_popup\" name=\"display_default_menu\">\\\n            <label for=\"display_default_menu_popup\">Display everywhere by default. / General display rules may overwrite this setting</label>\\\n        </p>\\\n        </div>\\\n    ');\n\n    $('.dw_pages_wrap', $clone).prepend('\\\n    <div><span class=\"sf-menu__loc_btn_check_all\">Check All</span> <span class=\"sf-menu__loc_btn_check_none\">Uncheck All</span></div>\\\n    ')\n\n    $clone.addClass('sf-menu__loc_popup').append('<span class=\"sf-menu__loc_btn_save\">Save</span> <span class=\"sf-menu__loc_btn_close\">Close</span>')\n\n    $popup.after($clone);\n\n    $(document).on('click', '.sf-menu__loc_btn_check_all', function () {\n        $('.sf-menu__loc_popup input[type=\"checkbox\"][name!=\"display_default_menu\"]').prop('checked', true);\n    });\n    $(document).on('click', '.sf-menu__loc_btn_check_none', function () {\n        $('.sf-menu__loc_popup input[type=\"checkbox\"][name!=\"display_default_menu\"]').prop('checked', false);\n    });\n    $(document).on('change', '[name=\"display_default_menu\"]', function (e) {\n        $('.sf-menu__loc_popup .dw_pages_wrap').show();\n        if($(this).prop('checked'))\n            $('.sf-menu__loc_popup .dw_pages_wrap').hide();\n    });\n\n\n    $locPopup = $('.sf-menu__loc_popup');\n    $def = $locPopup.find('#display_default_menu_popup');\n\n    //$locPopup.find('#display_ids_popup').parent().hide();\n\n    $list.find('.sf-menu__item').each(function () {\n        var $t = $(this);\n        var id = $t.data('id');\n        var location;\n        var curr = window.sf_menus[id];\n        if (curr) {\n            location = curr['loc'];\n            $t.data('location', location);\n            $t.data('isDef', curr['isDef']);\n        }\n    })\n\n    $('.sf-menu__add').click(function () {\n        $(this).closest('.sf_active_menu').addClass('sf_active_menu--selecting');\n    })\n\n    $('.sf-menu__btn__ok').click(function () {\n        var val = $select.find('select').val();\n        var $selected = $select.find(':selected');\n\n        var $item;\n        console.log(val);\n\n        // check if added\n        if ($list.find('[data-id=' + val + ']').length) {\n            alert('Already added!');\n            return;\n        }\n\n        $item = $('<li class=\"sf-menu__item\" data-id=\"' + val + '\">' + $selected.text() + '<i class=\"flaticon-cross\"></i></li>');\n        $list.append($item);\n\n\n        updateMenuMap();\n\n        if ($list.find('.sf-menu__item').length === 1) { // single item\n            openLocPopup($item);\n            $locPopup.find(':checkbox').prop('checked', true)\n            $locPopup.find('.sf-menu__loc_btn_save').click();\n            closeLocPopup({target: null}, true);\n            return;\n        }\n        $(this).closest('form').submit()\n\n\n    })\n\n    $('.sf-menu__btn__close').click(function () {\n        $(this).closest('.sf_active_menu').removeClass('sf_active_menu--selecting');\n    })\n\n    $list.on('click', '.sf-menu__item', function (e) {\n        var $t = $(e.target);\n        var $form = $t.closest('form');\n\n        if ($t.is('.flaticon-cross')) {\n            $t.closest('.sf-menu__item').remove();\n            updateMenuMap();\n            $form.closest('form').submit();\n            return;\n        }\n\n        console.log('open loc popup');\n        openLocPopup($t.closest('.sf-menu__item'))\n    })\n\n    $locPopup.on('click', '.sf-menu__loc_btn_save', function () {\n        var current = $locPopup;\n        var ids = current.find('[id*=display_ids]').val();\n        var $item = $locPopup.data('currentItem');\n\n        var location = {\n            'pages': traversePages(current.find('input[id*=display_page]')),\n            'cposts': traversePages(current.find('input[id*=display_cpost]')),\n            'cats': traversePages(current.find('input[id*=display_cat]')),\n            'taxes': {},\n            'langs': traversePages(current.find('input[id*=display_lang]')),\n            'wp_pages': traversePages(current.find('input[id*=display_wp_page]')),\n            'ids': ids.split(',')\n        };\n\n        $item.data('location', location);\n        $item.data('isDef', $def.is(':checked'));\n\n        updateMenuMap();\n\n        current.closest('form').submit()\n\n    });\n\n    $def.on('change', function (e) {\n        var $curr;\n\n        // check if already default is set\n        $list.find('.sf-menu__item').each(function () {\n            var $t = $(this);\n            if ($t.data('isDef')) {\n                $curr = $t;\n            }\n        });\n\n        if ($curr && $curr.data('id') != $locPopup.data('currentItem').data('id')) {\n            $def.attr('checked', false);\n            alert('You already have default menu. Please edit this menu before and uncheck this property.');\n            return false;\n        }\n    })\n\n    $locPopup.on('click', '.sf-menu__loc_btn_close', closeLocPopup)\n\n    function updateMenuMap() {\n        var $items = $list.find('.sf-menu__item');\n        var map = {};\n        $items.each(function () {\n            var $t = $(this);\n            var locationData = $t.data('location') || {};\n\n            map[$t.data('id')] = {\n                term_id: $t.data('id'),\n                name: $.trim($t.text()),\n                loc: locationData,\n                isDef: $t.data('isDef')\n            }\n        })\n        $storageInput.val(JSON.stringify(map));\n    }\n\n    function openLocPopup($item) {\n        // attempt to retrieve date\n        var locationData = $item.data('location');\n        $locPopup.data('currentItem', $item);\n\n        // reset\n        $locPopup.find(':checked').prop('checked', false)\n        $locPopup.find(':text').val('');\n\n        if (locationData) {\n            populatePopup(locationData, $item);\n        }\n\n        $def.prop('checked', $item.data('isDef'))\n        if($item.data('isDef')){\n            $('.dw_pages_wrap', $locPopup).hide();\n        }else{\n            $('.dw_pages_wrap', $locPopup).show();\n        }\n\n        setTimeout(function () {\n            $body.on('click', closeLocPopup)\n        }, 0)\n\n\n        $item.closest('.sf_active_menu').addClass('sf_active_menu--editing')\n    }\n\n    function closeLocPopup(e, force) {\n        var $t = $(e.target);\n        if (!$t.closest($locPopup).length || $t.is('.sf-menu__loc_btn_close') || force) {\n            $('.sf_active_menu').removeClass('sf_active_menu--editing');\n            $body.off('click', closeLocPopup)\n        }\n    }\n\n    function populatePopup(location, current) {\n        var prop, cat;\n\n        for ( prop in location ) {\n            cat = location[ prop ];\n            for ( var name in cat ) {\n                $locPopup.find('#display_' + prop.replace(/s$/, '') + '_' + name + '_popup').prop('checked', location[prop]);\n            }\n        }\n\n        if ( location.ids ) $locPopup.find('#display_ids_popup').val(location.ids.join(','));\n    }\n\n    $body.addClass('page-loaded');\n\n})","// Backbone.Stickit v0.9.2, MIT Licensed\n// Copyright (c) 2012-2015 The New York Times, CMS Group, Matthew DeLambo <delambo@gmail.com>\n\n(function (factory) {\n\n  // Set up Stickit appropriately for the environment. Start with AMD.\n  if (typeof define === 'function' && define.amd)\n    define(['underscore', 'backbone', 'exports'], factory);\n\n  // Next for Node.js or CommonJS.\n  else if (typeof exports === 'object')\n    factory(require('underscore'), require('backbone'), exports);\n\n  // Finally, as a browser global.\n  else\n    factory(_, Backbone, {});\n\n}(function (_, Backbone, Stickit) {\n\n  // Stickit Namespace\n  // --------------------------\n\n  // Export onto Backbone object\n  Backbone.Stickit = Stickit;\n\n  Stickit._handlers = [];\n\n  Stickit.addHandler = function(handlers) {\n    // Fill-in default values.\n    handlers = _.map(_.flatten([handlers]), function(handler) {\n      return _.defaults({}, handler, {\n        updateModel: true,\n        updateView: true,\n        updateMethod: 'text'\n      });\n    });\n    this._handlers = this._handlers.concat(handlers);\n  };\n\n  // Backbone.View Mixins\n  // --------------------\n\n  Stickit.ViewMixin = {\n\n    // Collection of model event bindings.\n    //   [{model,event,fn,config}, ...]\n    _modelBindings: null,\n\n    // Unbind the model and event bindings from `this._modelBindings` and\n    // `this.$el`. If the optional `model` parameter is defined, then only\n    // delete bindings for the given `model` and its corresponding view events.\n    unstickit: function(model, bindingSelector) {\n\n      // Support passing a bindings hash in place of bindingSelector.\n      if (_.isObject(bindingSelector)) {\n        _.each(bindingSelector, function(v, selector) {\n          this.unstickit(model, selector);\n        }, this);\n        return;\n      }\n\n      var models = [], destroyFns = [];\n      this._modelBindings = _.reject(this._modelBindings, function(binding) {\n        if (model && binding.model !== model) return;\n        if (bindingSelector && binding.config.selector != bindingSelector) return;\n\n        binding.model.off(binding.event, binding.fn);\n        destroyFns.push(binding.config._destroy);\n        models.push(binding.model);\n        return true;\n      });\n\n      // Trigger an event for each model that was unbound.\n      _.invoke(_.uniq(models), 'trigger', 'stickit:unstuck', this.cid);\n\n      // Call `_destroy` on a unique list of the binding callbacks.\n      _.each(_.uniq(destroyFns), function(fn) { fn.call(this); }, this);\n\n      this.$el.off('.stickit' + (model ? '.' + model.cid : ''), bindingSelector);\n    },\n\n    // Initilize Stickit bindings for the view. Subsequent binding additions\n    // can either call `stickit` with the new bindings, or add them directly\n    // with `addBinding`. Both arguments to `stickit` are optional.\n    stickit: function(optionalModel, optionalBindingsConfig) {\n      var model = optionalModel || this.model,\n          bindings = optionalBindingsConfig || _.result(this, \"bindings\") || {};\n\n      this._modelBindings || (this._modelBindings = []);\n\n      // Add bindings in bulk using `addBinding`.\n      this.addBinding(model, bindings);\n\n      // Wrap `view.remove` to unbind stickit model and dom events.\n      var remove = this.remove;\n      if (!remove.stickitWrapped) {\n        this.remove = function() {\n          var ret = this;\n          this.unstickit();\n          if (remove) ret = remove.apply(this, arguments);\n          return ret;\n        };\n      }\n      this.remove.stickitWrapped = true;\n      return this;\n    },\n\n    // Add a single Stickit binding or a hash of bindings to the model. If\n    // `optionalModel` is ommitted, will default to the view's `model` property.\n    addBinding: function(optionalModel, selector, binding) {\n      var model = optionalModel || this.model,\n          namespace = '.stickit.' + model.cid;\n\n      binding = binding || {};\n\n      // Support jQuery-style {key: val} event maps.\n      if (_.isObject(selector)) {\n        var bindings = selector;\n        _.each(bindings, function(val, key) {\n          this.addBinding(model, key, val);\n        }, this);\n        return;\n      }\n\n      // Special case the ':el' selector to use the view's this.$el.\n      var $el = selector === ':el' ? this.$el : this.$(selector);\n\n      // Clear any previous matching bindings.\n      this.unstickit(model, selector);\n\n      // Fail fast if the selector didn't match an element.\n      if (!$el.length) return;\n\n      // Allow shorthand setting of model attributes - `'selector':'observe'`.\n      if (_.isString(binding)) binding = {observe: binding};\n\n      // Handle case where `observe` is in the form of a function.\n      if (_.isFunction(binding.observe)) binding.observe = binding.observe.call(this);\n\n      // Find all matching Stickit handlers that could apply to this element\n      // and store in a config object.\n      var config = getConfiguration($el, binding);\n\n      // The attribute we're observing in our config.\n      var modelAttr = config.observe;\n\n      // Store needed properties for later.\n      config.selector = selector;\n      config.view = this;\n\n      // Create the model set options with a unique `bindId` so that we\n      // can avoid double-binding in the `change:attribute` event handler.\n      var bindId = config.bindId = _.uniqueId();\n\n      // Add a reference to the view for handlers of stickitChange events\n      var options = _.extend({stickitChange: config}, config.setOptions);\n\n      // Add a `_destroy` callback to the configuration, in case `destroy`\n      // is a named function and we need a unique function when unsticking.\n      config._destroy = function() {\n        applyViewFn.call(this, config.destroy, $el, model, config);\n      };\n\n      initializeAttributes($el, config, model, modelAttr);\n      initializeVisible($el, config, model, modelAttr);\n      initializeClasses($el, config, model, modelAttr);\n\n      if (modelAttr) {\n        // Setup one-way (input element -> model) bindings.\n        _.each(config.events, function(type) {\n          var eventName = type + namespace;\n          var listener = function(event) {\n            var val = applyViewFn.call(this, config.getVal, $el, event, config, slice.call(arguments, 1));\n\n            // Don't update the model if false is returned from the `updateModel` configuration.\n            var currentVal = evaluateBoolean(config.updateModel, val, event, config);\n            if (currentVal) setAttr(model, modelAttr, val, options, config);\n          };\n          var sel = selector === ':el'? '' : selector;\n          this.$el.on(eventName, sel, _.bind(listener, this));\n        }, this);\n\n        // Setup a `change:modelAttr` observer to keep the view element in sync.\n        // `modelAttr` may be an array of attributes or a single string value.\n        _.each(_.flatten([modelAttr]), function(attr) {\n          observeModelEvent(model, 'change:' + attr, config, function(m, val, options) {\n            var changeId = options && options.stickitChange && options.stickitChange.bindId;\n            if (changeId !== bindId) {\n              var currentVal = getAttr(model, modelAttr, config);\n              updateViewBindEl($el, config, currentVal, model);\n            }\n          });\n        });\n\n        var currentVal = getAttr(model, modelAttr, config);\n        updateViewBindEl($el, config, currentVal, model, true);\n      }\n\n      // After each binding is setup, call the `initialize` callback.\n      applyViewFn.call(this, config.initialize, $el, model, config);\n    }\n  };\n\n  _.extend(Backbone.View.prototype, Stickit.ViewMixin);\n\n  // Helpers\n  // -------\n\n  var slice = [].slice;\n\n  // Evaluates the given `path` (in object/dot-notation) relative to the given\n  // `obj`. If the path is null/undefined, then the given `obj` is returned.\n  var evaluatePath = function(obj, path) {\n    var parts = (path || '').split('.');\n    var result = _.reduce(parts, function(memo, i) { return memo[i]; }, obj);\n    return result == null ? obj : result;\n  };\n\n  // If the given `fn` is a string, then view[fn] is called, otherwise it is\n  // a function that should be executed.\n  var applyViewFn = function(fn) {\n    fn = _.isString(fn) ? evaluatePath(this, fn) : fn;\n    if (fn) return (fn).apply(this, slice.call(arguments, 1));\n  };\n\n  // Given a function, string (view function reference), or a boolean\n  // value, returns the truthy result. Any other types evaluate as false.\n  // The first argument must be `reference` and the last must be `config`, but\n  // middle arguments can be variadic.\n  var evaluateBoolean = function(reference, val, config) {\n    if (_.isBoolean(reference)) {\n      return reference;\n    } else if (_.isFunction(reference) || _.isString(reference)) {\n      var view = _.last(arguments).view;\n      return applyViewFn.apply(view, arguments);\n    }\n    return false;\n  };\n\n  // Setup a model event binding with the given function, and track the event\n  // in the view's _modelBindings.\n  var observeModelEvent = function(model, event, config, fn) {\n    var view = config.view;\n    model.on(event, fn, view);\n    view._modelBindings.push({model:model, event:event, fn:fn, config:config});\n  };\n\n  // Prepares the given `val`ue and sets it into the `model`.\n  var setAttr = function(model, attr, val, options, config) {\n    var value = {}, view = config.view;\n    if (config.onSet) {\n      val = applyViewFn.call(view, config.onSet, val, config);\n    }\n\n    if (config.set) {\n      applyViewFn.call(view, config.set, attr, val, options, config);\n    } else {\n      value[attr] = val;\n      // If `observe` is defined as an array and `onSet` returned\n      // an array, then map attributes to their values.\n      if (_.isArray(attr) && _.isArray(val)) {\n        value = _.reduce(attr, function(memo, attribute, index) {\n          memo[attribute] = _.has(val, index) ? val[index] : null;\n          return memo;\n        }, {});\n      }\n      model.set(value, options);\n    }\n  };\n\n  // Returns the given `attr`'s value from the `model`, escaping and\n  // formatting if necessary. If `attr` is an array, then an array of\n  // respective values will be returned.\n  var getAttr = function(model, attr, config) {\n    var view = config.view;\n    var retrieveVal = function(field) {\n      return model[config.escape ? 'escape' : 'get'](field);\n    };\n    var sanitizeVal = function(val) {\n      return val == null ? '' : val;\n    };\n    var val = _.isArray(attr) ? _.map(attr, retrieveVal) : retrieveVal(attr);\n    if (config.onGet) val = applyViewFn.call(view, config.onGet, val, config);\n    return _.isArray(val) ? _.map(val, sanitizeVal) : sanitizeVal(val);\n  };\n\n  // Find handlers in `Backbone.Stickit._handlers` with selectors that match\n  // `$el` and generate a configuration by mixing them in the order that they\n  // were found with the given `binding`.\n  var getConfiguration = Stickit.getConfiguration = function($el, binding) {\n    var handlers = [{\n      updateModel: false,\n      updateMethod: 'text',\n      update: function($el, val, m, opts) { if ($el[opts.updateMethod]) $el[opts.updateMethod](val); },\n      getVal: function($el, e, opts) { return $el[opts.updateMethod](); }\n    }];\n    handlers = handlers.concat(_.filter(Stickit._handlers, function(handler) {\n      return $el.is(handler.selector);\n    }));\n    handlers.push(binding);\n\n    // Merge handlers into a single config object. Last props in wins.\n    var config = _.extend.apply(_, handlers);\n\n    // `updateView` is defaulted to false for configutrations with\n    // `visible`; otherwise, `updateView` is defaulted to true.\n    if (!_.has(config, 'updateView')) config.updateView = !config.visible;\n    return config;\n  };\n\n  // Setup the attributes configuration - a list that maps an attribute or\n  // property `name`, to an `observe`d model attribute, using an optional\n  // `onGet` formatter.\n  //\n  //     attributes: [{\n  //       name: 'attributeOrPropertyName',\n  //       observe: 'modelAttrName'\n  //       onGet: function(modelAttrVal, modelAttrName) { ... }\n  //     }, ...]\n  //\n  var initializeAttributes = function($el, config, model, modelAttr) {\n    var props = ['autofocus', 'autoplay', 'async', 'checked', 'controls',\n      'defer', 'disabled', 'hidden', 'indeterminate', 'loop', 'multiple',\n      'open', 'readonly', 'required', 'scoped', 'selected'];\n\n    var view = config.view;\n\n    _.each(config.attributes || [], function(attrConfig) {\n      attrConfig = _.clone(attrConfig);\n      attrConfig.view = view;\n\n      var lastClass = '';\n      var observed = attrConfig.observe || (attrConfig.observe = modelAttr);\n      var updateAttr = function() {\n        var updateType = _.contains(props, attrConfig.name) ? 'prop' : 'attr',\n            val = getAttr(model, observed, attrConfig);\n\n        // If it is a class then we need to remove the last value and add the new.\n        if (attrConfig.name === 'class') {\n          $el.removeClass(lastClass).addClass(val);\n          lastClass = val;\n        } else {\n          $el[updateType](attrConfig.name, val);\n        }\n      };\n\n      _.each(_.flatten([observed]), function(attr) {\n        observeModelEvent(model, 'change:' + attr, config, updateAttr);\n      });\n\n      // Initialize the matched element's state.\n      updateAttr();\n    });\n  };\n\n  var initializeClasses = function($el, config, model, modelAttr) {\n    _.each(config.classes || [], function(classConfig, name) {\n      if (_.isString(classConfig)) classConfig = {observe: classConfig};\n      classConfig.view = config.view;\n\n      var observed = classConfig.observe;\n      var updateClass = function() {\n        var val = getAttr(model, observed, classConfig);\n        $el.toggleClass(name, !!val);\n      };\n\n      _.each(_.flatten([observed]), function(attr) {\n        observeModelEvent(model, 'change:' + attr, config, updateClass);\n      });\n      updateClass();\n    });\n  };\n\n  // If `visible` is configured, then the view element will be shown/hidden\n  // based on the truthiness of the modelattr's value or the result of the\n  // given callback. If a `visibleFn` is also supplied, then that callback\n  // will be executed to manually handle showing/hiding the view element.\n  //\n  //     observe: 'isRight',\n  //     visible: true, // or function(val, options) {}\n  //     visibleFn: function($el, isVisible, options) {} // optional handler\n  //\n  var initializeVisible = function($el, config, model, modelAttr) {\n    if (config.visible == null) return;\n    var view = config.view;\n\n    var visibleCb = function() {\n      var visible = config.visible,\n          visibleFn = config.visibleFn,\n          val = getAttr(model, modelAttr, config),\n          isVisible = !!val;\n\n      // If `visible` is a function then it should return a boolean result to show/hide.\n      if (_.isFunction(visible) || _.isString(visible)) {\n        isVisible = !!applyViewFn.call(view, visible, val, config);\n      }\n\n      // Either use the custom `visibleFn`, if provided, or execute the standard show/hide.\n      if (visibleFn) {\n        applyViewFn.call(view, visibleFn, $el, isVisible, config);\n      } else {\n        $el.toggle(isVisible);\n      }\n    };\n\n    _.each(_.flatten([modelAttr]), function(attr) {\n      observeModelEvent(model, 'change:' + attr, config, visibleCb);\n    });\n\n    visibleCb();\n  };\n\n  // Update the value of `$el` using the given configuration and trigger the\n  // `afterUpdate` callback. This action may be blocked by `config.updateView`.\n  //\n  //     update: function($el, val, model, options) {},  // handler for updating\n  //     updateView: true, // defaults to true\n  //     afterUpdate: function($el, val, options) {} // optional callback\n  //\n  var updateViewBindEl = function($el, config, val, model, isInitializing) {\n    var view = config.view;\n    if (!evaluateBoolean(config.updateView, val, config)) return;\n    applyViewFn.call(view, config.update, $el, val, model, config);\n    if (!isInitializing) applyViewFn.call(view, config.afterUpdate, $el, val, config);\n  };\n\n  // Default Handlers\n  // ----------------\n\n  Stickit.addHandler([{\n    selector: '[contenteditable]',\n    updateMethod: 'html',\n    events: ['input', 'change']\n  }, {\n    selector: 'input',\n    events: ['propertychange', 'input', 'change'],\n    update: function($el, val) { $el.val(val); },\n    getVal: function($el) {\n      return $el.val();\n    }\n  }, {\n    selector: 'textarea',\n    events: ['propertychange', 'input', 'change'],\n    update: function($el, val) { $el.val(val); },\n    getVal: function($el) { return $el.val(); }\n  }, {\n    selector: 'input[type=\"radio\"]',\n    events: ['change'],\n    update: function($el, val) {\n      $el.filter('[value=\"'+val+'\"]').prop('checked', true);\n    },\n    getVal: function($el) {\n      return $el.filter(':checked').val();\n    }\n  }, {\n    selector: 'input[type=\"checkbox\"]',\n    events: ['change'],\n    update: function($el, val, model, options) {\n      if ($el.length > 1) {\n        // There are multiple checkboxes so we need to go through them and check\n        // any that have value attributes that match what's in the array of `val`s.\n        val || (val = []);\n        $el.each(function(i, el) {\n          var checkbox = Backbone.$(el);\n          var checkboxVal = checkbox.val();\n          var checked = _.some(val, function(item) { return ''+item === checkboxVal; });\n          checkbox.prop('checked', checked);\n        });\n      } else {\n        var checked = _.isBoolean(val) ? val : ''+val === $el.val();\n        $el.prop('checked', checked);\n      }\n    },\n    getVal: function($el) {\n      var val;\n      if ($el.length > 1) {\n        val = _.reduce($el, function(memo, el) {\n          var checkbox = Backbone.$(el);\n          if (checkbox.prop('checked')) memo.push(checkbox.val());\n          return memo;\n        }, []);\n      } else {\n        val = $el.prop('checked');\n        // If the checkbox has a value attribute defined, then\n        // use that value. Most browsers use \"on\" as a default.\n        var boxval = $el.val();\n        if (boxval !== 'on' && boxval != null) {\n          val = val ? $el.val() : null;\n        }\n      }\n      return val;\n    }\n  }, {\n    selector: 'select',\n    events: ['change'],\n    update: function($el, val, model, options) {\n      var optList,\n        selectConfig = options.selectOptions,\n        list = selectConfig && selectConfig.collection || undefined,\n        isMultiple = $el.prop('multiple');\n\n      // If there are no `selectOptions` then we assume that the `<select>`\n      // is pre-rendered and that we need to generate the collection.\n      if (!selectConfig) {\n        selectConfig = {};\n        var getList = function($el) {\n          return $el.map(function(index, option) {\n            // Retrieve the text and value of the option, preferring \"stickit-bind-val\"\n            // data attribute over value property.\n            var dataVal = Backbone.$(option).data('stickit-bind-val');\n            return {\n              value: dataVal !== undefined ? dataVal : option.value,\n              label: option.text\n            };\n          }).get();\n        };\n        if ($el.find('optgroup').length) {\n          list = {opt_labels:[]};\n          // Search for options without optgroup\n          if ($el.find('> option').length) {\n            list.opt_labels.push(undefined);\n            _.each($el.find('> option'), function(el) {\n              list[undefined] = getList(Backbone.$(el));\n            });\n          }\n          _.each($el.find('optgroup'), function(el) {\n            var label = Backbone.$(el).attr('label');\n            list.opt_labels.push(label);\n            list[label] = getList(Backbone.$(el).find('option'));\n          });\n        } else {\n          list = getList($el.find('option'));\n        }\n      }\n\n      // Fill in default label and path values.\n      selectConfig.valuePath = selectConfig.valuePath || 'value';\n      selectConfig.labelPath = selectConfig.labelPath || 'label';\n      selectConfig.disabledPath = selectConfig.disabledPath || 'disabled';\n\n      var addSelectOptions = function(optList, $el, fieldVal) {\n        _.each(optList, function(obj) {\n          var option = Backbone.$('<option/>'), optionVal = obj;\n\n          var fillOption = function(text, val, disabled) {\n            option.text(text);\n            optionVal = val;\n            // Save the option value as data so that we can reference it later.\n            option.data('stickit-bind-val', optionVal);\n            if (!_.isArray(optionVal) && !_.isObject(optionVal)) option.val(optionVal);\n\n            if (disabled === true) option.prop('disabled', 'disabled');\n          };\n\n          var text, val, disabled;\n          if (obj === '__default__') {\n            text = fieldVal.label,\n            val = fieldVal.value,\n            disabled = fieldVal.disabled;\n          } else {\n            text = evaluatePath(obj, selectConfig.labelPath),\n            val = evaluatePath(obj, selectConfig.valuePath),\n            disabled = evaluatePath(obj, selectConfig.disabledPath);\n          }\n          fillOption(text, val, disabled);\n\n          // Determine if this option is selected.\n          var isSelected = function() {\n            if (!isMultiple && optionVal != null && fieldVal != null && optionVal === fieldVal) {\n              return true;\n            } else if (_.isObject(fieldVal) && _.isEqual(optionVal, fieldVal)) {\n              return true;\n            }\n            return false;\n          };\n\n          if (isSelected()) {\n            option.prop('selected', true);\n          } else if (isMultiple && _.isArray(fieldVal)) {\n            _.each(fieldVal, function(val) {\n              if (_.isObject(val)) val = evaluatePath(val, selectConfig.valuePath);\n              if (val === optionVal || (_.isObject(val) && _.isEqual(optionVal, val)))\n                option.prop('selected', true);\n            });\n          }\n\n          $el.append(option);\n        });\n      };\n\n      $el.find('*').remove();\n\n      // The `list` configuration is a function that returns the options list or a string\n      // which represents the path to the list relative to `window` or the view/`this`.\n      if (_.isString(list)) {\n        var context = window;\n        if (list.indexOf('this.') === 0) context = this;\n        list = list.replace(/^[a-z]*\\.(.+)$/, '$1');\n        optList = evaluatePath(context, list);\n      } else if (_.isFunction(list)) {\n        optList = applyViewFn.call(this, list, $el, options);\n      } else {\n        optList = list;\n      }\n\n      // Support Backbone.Collection and deserialize.\n      if (optList instanceof Backbone.Collection) {\n        var collection = optList;\n        var refreshSelectOptions = function() {\n          var currentVal = getAttr(model, options.observe, options);\n          applyViewFn.call(this, options.update, $el, currentVal, model, options);\n        };\n        // We need to call this function after unstickit and after an update so we don't end up\n        // with multiple listeners doing the same thing\n        var removeCollectionListeners = function() {\n          collection.off('add remove reset sort', refreshSelectOptions);\n        };\n        var removeAllListeners = function() {\n          removeCollectionListeners();\n          collection.off('stickit:selectRefresh');\n          collection.off('stickit:selectRefreshForView');\n          model.off('stickit:selectRefresh');\n        };\n        collection.trigger('stickit:selectRefreshForView', this.cid);\n        // Compare the view cid on the event to this.cid to ensure we don't\n        // remove events from the collection that are tied to other views.\n        collection.once('stickit:selectRefreshForView', function(viewCid) {\n          if(this.cid == viewCid){\n            // Remove previously set event listeners by triggering a custom event\n            collection.trigger('stickit:selectRefresh');\n          }\n        }, this);\n        collection.once('stickit:selectRefresh', removeCollectionListeners, this);\n\n        // Listen to the collection and trigger an update of the select options\n        collection.on('add remove reset sort', refreshSelectOptions, this);\n\n        // Remove the previous model event listener\n        model.trigger('stickit:selectRefresh');\n        model.once('stickit:selectRefresh', function() {\n          model.off('stickit:unstuck', removeAllListeners);\n        });\n        // Remove collection event listeners once this binding is unstuck\n        model.once('stickit:unstuck', removeAllListeners, this);\n        optList = optList.toJSON();\n      }\n\n      if (selectConfig.defaultOption) {\n        var option = _.isFunction(selectConfig.defaultOption) ?\n          selectConfig.defaultOption.call(this, $el, options) :\n          selectConfig.defaultOption;\n        addSelectOptions([\"__default__\"], $el, option);\n      }\n\n      if (_.isArray(optList)) {\n        addSelectOptions(optList, $el, val);\n      } else if (optList.opt_labels) {\n        // To define a select with optgroups, format selectOptions.collection as an object\n        // with an 'opt_labels' property, as in the following:\n        //\n        //     {\n        //       'opt_labels': ['Looney Tunes', 'Three Stooges'],\n        //       'Looney Tunes': [{id: 1, name: 'Bugs Bunny'}, {id: 2, name: 'Donald Duck'}],\n        //       'Three Stooges': [{id: 3, name : 'moe'}, {id: 4, name : 'larry'}, {id: 5, name : 'curly'}]\n        //     }\n        //\n        _.each(optList.opt_labels, function(label) {\n          var $group = Backbone.$('<optgroup/>').attr('label', label);\n          addSelectOptions(optList[label], $group, val);\n          $el.append($group);\n        });\n        // With no 'opt_labels' parameter, the object is assumed to be a simple value-label map.\n        // Pass a selectOptions.comparator to override the default order of alphabetical by label.\n      } else {\n        var opts = [], opt;\n        for (var i in optList) {\n          opt = {};\n          opt[selectConfig.valuePath] = i;\n          opt[selectConfig.labelPath] = optList[i];\n          opts.push(opt);\n        }\n        opts = _.sortBy(opts, selectConfig.comparator || selectConfig.labelPath);\n        addSelectOptions(opts, $el, val);\n      }\n    },\n    getVal: function($el) {\n      var selected = $el.find('option:selected');\n\n      if ($el.prop('multiple')) {\n        return _.map(selected, function(el) {\n          return Backbone.$(el).data('stickit-bind-val');\n        });\n      } else {\n        return selected.data('stickit-bind-val');\n      }\n    }\n  }]);\n\n  return Stickit;\n\n}));\n","(function ($) {\n    window.SuperflyView = Backbone.View.extend({\n        bindings: function () { // bindings for input fields\n            var result = {};\n\n            result['[name*=\"sf_options[sf_active_menu]\"]']           = 'sf_active_menu';\n            result['[name*=\"sf_options[sf_alternative_menu]\"]']      = 'sf_alternative_menu';\n            result['[name*=\"sf_options[sf_test_mode]\"]']             = 'sf_test_mode';\n            result['[name*=\"sf_options[sf_display]\"]']               = 'sf_display';\n\n            result['[name*=\"sf_options[sf_sidebar_style]\"]']         = 'sf_sidebar_style';\n            result['[name*=\"sf_options[sf_sidebar_behaviour]\"]']     = 'sf_sidebar_behaviour';\n            result['[name*=\"sf_options[sf_sidebar_pos]\"]']           = 'sf_sidebar_pos';\n            result['[name*=\"sf_options[sf_skew_type]\"]']             = 'sf_skew_type';\n            result['[name*=\"sf_options[sf_fs_layout]\"]']             = 'sf_fs_layout';\n            result['[name*=\"sf_options[sf_opening_type]\"]']          = 'sf_opening_type';\n            result['[name*=\"sf_options[sf_sub_type]\"]']              = 'sf_sub_type';\n            result['[name*=\"sf_options[sf_sub_opening_type]\"]']      = 'sf_sub_opening_type';\n            result['[name*=\"sf_options[sf_fade_content]\"]']          = 'sf_fade_content';\n            result['[name*=\"sf_options[sf_fade_full]\"]']             = 'sf_fade_full';\n            result['[name*=\"sf_options[sf_full_sec]\"]']              = 'sf_full_sec';\n            result['[name*=\"sf_options[sf_full_head]\"]']             = 'sf_full_head';\n            result['[name*=\"sf_options[sf_full_x]\"]']                = 'sf_full_x';\n            result['[name*=\"sf_options[sf_blur_content]\"]']          = 'sf_blur_content';\n            result['[name*=\"sf_options[sf_transparent_panel]\"]']     = 'sf_transparent_panel';\n            result['[name*=\"sf_options[sf_transition]\"]']            = 'sf_transition';\n\n            result['[name*=\"sf_options[sf_width_panel_1]\"]']         = 'sf_width_panel_1';\n            result['[name*=\"sf_options[sf_bg_color_panel_1]\"]']      = 'sf_bg_color_panel_1';\n            result['[name*=\"sf_options[sf_color_panel_1]\"]']         = 'sf_color_panel_1';\n            result['[name*=\"sf_options[sf_scolor_panel_1]\"]']        = 'sf_scolor_panel_1';\n            result['[name*=\"sf_options[sf_hover_panel_1]\"]']         = 'sf_hover_panel_1';\n            result['[name*=\"sf_options[sf_image_bg]\"]']              = 'sf_image_bg';\n            result['[name*=\"sf_options[sf_width_panel_2]\"]']         = 'sf_width_panel_2';\n            result['[name*=\"sf_options[sf_bg_color_panel_2]\"]']      = 'sf_bg_color_panel_2';\n            result['[name*=\"sf_options[sf_color_panel_2]\"]']         = 'sf_color_panel_2';\n            result['[name*=\"sf_options[sf_scolor_panel_2]\"]']        = 'sf_scolor_panel_2';\n            result['[name*=\"sf_options[sf_hover_panel_2]\"]']         = 'sf_hover_panel_2';\n            result['[name*=\"sf_options[sf_width_panel_3]\"]']         = 'sf_width_panel_3';\n            result['[name*=\"sf_options[sf_bg_color_panel_3]\"]']      = 'sf_bg_color_panel_3';\n            result['[name*=\"sf_options[sf_color_panel_3]\"]']         = 'sf_color_panel_3';\n            result['[name*=\"sf_options[sf_scolor_panel_3]\"]']        = 'sf_scolor_panel_3';\n            result['[name*=\"sf_options[sf_hover_panel_3]\"]']         = 'sf_hover_panel_3';\n            result['[name*=\"sf_options[sf_width_panel_4]\"]']         = 'sf_width_panel_4';\n            result['[name*=\"sf_options[sf_bg_color_panel_4]\"]']      = 'sf_bg_color_panel_4';\n            result['[name*=\"sf_options[sf_color_panel_4]\"]']         = 'sf_color_panel_4';\n            result['[name*=\"sf_options[sf_scolor_panel_4]\"]']        = 'sf_scolor_panel_4';\n            result['[name*=\"sf_options[sf_hover_panel_4]\"]']         = 'sf_hover_panel_4';\n            result['[name*=\"sf_options[sf_chapter_1]\"]']             = 'sf_chapter_1';\n            result['[name*=\"sf_options[sf_chapter_2]\"]']             = 'sf_chapter_2';\n            result['[name*=\"sf_options[sf_chapter_3]\"]']             = 'sf_chapter_3';\n            result['[name*=\"sf_options[sf_chapter_4]\"]']             = 'sf_chapter_4';\n\n            result['[name*=\"sf_options[sf_tab_logo]\"]']              = 'sf_tab_logo';\n            result['[name*=\"sf_options[sf_logo_size]\"]']             = 'sf_logo_size';\n            result['[name*=\"sf_options[sf_first_line]\"]']            = 'sf_first_line';\n            result['[name*=\"sf_options[sf_sec_line]\"]']              = 'sf_sec_line';\n\n            result['[name*=\"sf_options[sf_facebook]\"]']              = 'sf_facebook';\n            result['[name*=\"sf_options[sf_dribbble]\"]']              = 'sf_dribbble';\n            result['[name*=\"sf_options[sf_twitter]\"]']               = 'sf_twitter';\n            result['[name*=\"sf_options[sf_youtube]\"]']               = 'sf_youtube';\n            result['[name*=\"sf_options[sf_linkedin]\"]']              = 'sf_linkedin';\n            result['[name*=\"sf_options[sf_vimeo]\"]']                 = 'sf_vimeo';\n            result['[name*=\"sf_options[sf_gplus]\"]']                 = 'sf_gplus';\n            result['[name*=\"sf_options[sf_soundcloud]\"]']            = 'sf_soundcloud';\n            result['[name*=\"sf_options[sf_instagram]\"]']             = 'sf_instagram';\n            result['[name*=\"sf_options[sf_email]\"]']                 = 'sf_email';\n            result['[name*=\"sf_options[sf_pinterest]\"]']             = 'sf_pinterest';\n            result['[name*=\"sf_options[sf_skype]\"]']                 = 'sf_skype';\n            result['[name*=\"sf_options[sf_flickr]\"]']                = 'sf_flickr';\n            result['[name*=\"sf_options[sf_rss]\"]']                   = 'sf_rss';\n\n            result['[name*=\"sf_options[sf_social_style]\"]']          = 'sf_social_style';\n            result['[name*=\"sf_options[sf_social_color]\"]']          = 'sf_social_color';\n            result['[name*=\"sf_options[sf_social_align]\"]']          = 'sf_social_align';\n\n            result['[name*=\"sf_options[sf_search]\"]']                = 'sf_search';\n            result['[name*=\"sf_options[sf_search_bg]\"]']             = 'sf_search_bg';\n            result['[name*=\"sf_options[sf_copy]\"]']                  = 'sf_copy';\n\n            result['[name*=\"sf_options[sf_font]\"]']                  = 'sf_font';\n            result['[name*=\"sf_options[sf_font_size]\"]']             = 'sf_font_size';\n            result['[name*=\"sf_options[sf_font_weight]\"]']           = 'sf_font_weight';\n            result['[name*=\"sf_options[sf_alignment]\"]']             = 'sf_alignment';\n            result['[name*=\"sf_options[sf_uppercase]\"]']             = 'sf_uppercase';\n            result['[name*=\"sf_options[sf_spacing]\"]']               = 'sf_spacing';\n            result['[name*=\"sf_options[sf_c_font]\"]']                = 'sf_c_font';\n            result['[name*=\"sf_options[sf_c_fs]\"]']                  = 'sf_c_fs';\n            result['[name*=\"sf_options[sf_c_weight]\"]']              = 'sf_c_weight';\n            result['[name*=\"sf_options[sf_c_trans]\"]']               = 'sf_c_trans';\n\n            result['[name*=\"sf_options[sf_padding]\"]']               = 'sf_padding';\n            result['[name*=\"sf_options[sf_padding_h]\"]']             = 'sf_padding_h';\n            result['[name*=\"sf_options[sf_icon_size]\"]']             = 'sf_icon_size';\n            result['[name*=\"sf_options[sf_icon_color]\"]']            = 'sf_icon_color';\n            result['[name*=\"sf_options[sf_fs_dynamic]\"]']            = 'sf_fs_dynamic';\n            result['[name*=\"sf_options[sf_ordered]\"]']               = 'sf_ordered';\n            result['[name*=\"sf_options[sf_ind]\"]']                   = 'sf_ind';\n            result['[name*=\"sf_options[sf_ind_st]\"]']                = 'sf_ind_st';\n            result['[name*=\"sf_options[sf_ind_s]\"]']                 = 'sf_ind_s';\n            result['[name*=\"sf_options[sf_separators]\"]']            = 'sf_separators';\n            result['[name*=\"sf_options[sf_separators_color]\"]']      = 'sf_separators_color';\n            result['[name*=\"sf_options[sf_separators_width]\"]']      = 'sf_separators_width';\n            result['[name*=\"sf_options[sf_highlight]\"]']             = 'sf_highlight';\n            result['[name*=\"sf_options[sf_hover_style]\"]']           = 'sf_hover_style';\n            result['[name*=\"sf_options[sf_highlight_active]\"]']      = 'sf_highlight_active';\n\n            result['[name*=\"sf_options[sf_label_vis]\"]']             = 'sf_label_vis';\n            result['[name*=\"sf_options[sf_label_type]\"]']            = 'sf_label_type';\n            result['[name*=\"sf_options[sf_fixed]\"]']                 = 'sf_fixed';\n            result['[name*=\"sf_options[sf_mob_nav]\"]']               = 'sf_mob_nav';\n            result['[name*=\"sf_options[sf_threshold_point]\"]']       = 'sf_threshold_point';\n            result['[name*=\"sf_options[sf_label_top]\"]']             = 'sf_label_top';\n            result['[name*=\"sf_options[sf_label_top_mobile]\"]']      = 'sf_label_top_mobile';\n            result['[name*=\"sf_options[sf_label_shift]\"]']           = 'sf_label_shift';\n\n            result['[name*=\"sf_options[sf_label_icon]\"]']            = 'sf_label_icon';\n            result['[name*=\"sf_options[sf_label_size]\"]']            = 'sf_label_size';\n            result['[name*=\"sf_options[sf_label_style]\"]']           = 'sf_label_style';\n            result['[name*=\"sf_options[sf_label_width]\"]']           = 'sf_label_width';\n            result['[name*=\"sf_options[sf_label_gaps]\"]']            = 'sf_label_gaps';\n            result['[name*=\"sf_options[sf_label_color]\"]']           = 'sf_label_color';\n            result['[name*=\"sf_options[sf_label_icon_color]\"]']      = 'sf_label_icon_color';\n            result['[name*=\"sf_options[sf_label_text]\"]']            = 'sf_label_text';\n            result['[name*=\"sf_options[sf_label_text_color]\"]']      = 'sf_label_text_color';\n\n            result['[name*=\"sf_options[sf_css]\"]']                   = 'sf_css';\n            result['[name*=\"sf_options[sf_submenu_support]\"]']       = 'sf_submenu_support';\n            result['[name*=\"sf_options[sf_submenu_mob]\"]']           = 'sf_submenu_mob';\n            result['[name*=\"sf_options[sf_submenu_classes]\"]']       = 'sf_submenu_classes';\n            result['[name*=\"sf_options[sf_togglers]\"]']              = 'sf_togglers';\n            result['[name*=\"sf_options[sf_dev]\"]']                   = 'sf_dev';\n\n            result['[name*=\"sf_options[sf_license_name]\"]']          = 'sf_license_name';\n            result['[name*=\"sf_options[sf_license_email]\"]']         = 'sf_license_email';\n            result['[name*=\"sf_options[sf_license_code]\"]']          = 'sf_license_code';\n\n            result['[name*=\"display_default_menu\"]']                 = 'display_default_menu';\n\n            result[\n                '.sf_label_type,\\\n                .sf_fixed,\\\n                .sf_mob_nav,\\\n                .sf_threshold_point,\\\n                .sf_label_top,\\\n                .sf_label_top_mobile,\\\n                .sf_label_shift,\\\n                .sf_label_shift_m,\\\n                .sf_label_icon,\\\n                .sf_label_size,\\\n                .sf_label_style,\\\n                .sf_label_width,\\\n                .sf_label_gaps,\\\n                .sf_label_color,\\\n                .sf_label_icon_color,\\\n                .sf_label_text,\\\n                .sf_label_text_color,\\\n                h1#stylings'\n                ] = {\n                observe: 'sf_label_vis',\n                update: function ($el, val, model, options) {\n                    $el.each(function (i, item) {\n                        $(item).hide();\n                    });\n                    if (val == 'yes') {\n                        $el.each(function (i, item) {\n                            $(item).show();\n                        });\n                    }\n                }\n            }\n\n            result['.sf_sidebar_style'] = {\n                observe: 'sf_sidebar_style',\n                update: function ($el, val, model, options) {\n                    if (val == 'toolbar') model.set('sf_sidebar_behaviour', 'always');\n                    else if (val == 'full') {\n                        model.set('sf_sidebar_behaviour', 'slide');\n                    }\n                }\n            };\n\n            result['.skew-disclaimer'] = {\n                observe: 'sf_sidebar_style',\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if (val == 'skew') $el.show();\n                }\n            };\n            result['.fs-disclaimer'] = {\n                observe: 'sf_sidebar_style',\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if (val == 'full') $el.show();\n                }\n            };\n\n            result['.sf_sidebar_behaviour'] = {\n                observe: 'sf_sidebar_style',\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if (val == 'side' || val == 'skew') $el.css('display', 'inline-block');\n                }\n            };\n\n            result['.sf_skew_type'] = {\n                observe: 'sf_sidebar_style',\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if (val == 'skew') $el.css('display', 'inline-block');\n                }\n            };\n\n            result['.sf_fs_layout'] = {\n                observe: 'sf_sidebar_style',\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if (val == 'full') $el.css('display', 'inline-block');\n                }\n            };\n\n            result['.sf_transparent_panel'] = {\n                observe: 'sf_sidebar_style',\n                update: function ($el, val, model, options) {\n                    $el.css('display', 'inline-block');\n                    if (val == 'full') $el.hide();\n                }\n            };\n\n            result['.sf_fade_content'] = {\n                observe: [\n                    'sf_sidebar_behaviour',\n                    'sf_sidebar_style'\n                ],\n                update: function ($el, val, model, options) {\n                    $el.css('display', 'inline-block');\n                    if (\n                        (val[0] == 'always' && val[1] == 'skew') ||\n                        val[1] == 'full'\n                    ) $el.hide();\n                }\n            };\n\n            result['.sf_sub_opening_type'] = {\n                observe: [\n                    'sf_sidebar_style'\n                ],\n                update: function ($el, val, model, options) {\n                    $el.css('display', 'inline-block');\n                    if (val == 'skew') $el.hide();\n                }\n            };\n\n            result['.sf_blur_content'] = {\n                observe: [\n                    'sf_sidebar_behaviour',\n                    'sf_sidebar_style'\n                ],\n                update: function ($el, val, model, options) {\n                    $el.css('display', 'inline-block');\n                    if (\n                        (val[0] == 'always' && val[1] == 'skew') ||\n                        val[1] == 'full'\n                    )$el.hide();\n                }\n            };\n\n            result['.sf_fade_full'] = {\n                observe: 'sf_sidebar_style',\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if (val == 'full') $el.css('display', 'inline-block');\n                }\n            };\n\n            result['.sf_full_sec'] = {\n                observe: 'sf_sidebar_style',\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if (val == 'full') $el.css('display', 'inline-block');\n                }\n            };\n\n            result['.sf_full_head'] = {\n                observe: 'sf_sidebar_style',\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if (val == 'full') $el.css('display', 'inline-block');\n                }\n            };\n\n            result['.sf_full_x'] = {\n                observe: 'sf_sidebar_style',\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if (val == 'full') $el.css('display', 'inline-block');\n                }\n            };\n\n            result['.sf_sub_type'] = {\n                observe: 'sf_sidebar_style',\n                update: function ($el, val, model, options) {\n                    $el.css('display', 'inline-block');\n                    if ( val != 'side' ) $el.hide();\n                }\n            };\n\n            result['.sf_sub_opening_type'] = {\n                observe: 'sf_sub_type',\n                update: function ($el, val, model, options) {\n                    $el.css('display', 'inline-block');\n                    if (val != 'flyout') $el.hide();\n                }\n            };\n\n            result['.sf_opening_type'] = {\n                observe: [\n                    'sf_sidebar_behaviour',\n                    'sf_sidebar_style'\n                ],\n                update: function ($el, val, model, options) {\n                    $el.css('display', 'inline-block');\n                    if ( val[1] == 'toolbar' || val[1] == 'full') {\n                        $el.hide();\n                    }\n                }\n            };\n\n            result['.sf_ind_s'] = {\n                observe: 'sf_ind',\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if(val != '') $el.show();\n                }\n            };\n\n            result['.sf_ind_st'] = {\n                observe: 'sf_ind',\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if(val != '') $el.show();\n                }\n            };\n\n            result['.sf_separators_color'] = {\n                observe: 'sf_separators',\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if(val != '') $el.show();\n                }\n            };\n\n            result['.sf_separators_width'] = {\n                observe: 'sf_separators',\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if(val != '') $el.show();\n                }\n            };\n\n            result['.sf_label_text_field'] = {\n                observe: ['sf_label_text', 'sf_label_vis'],\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if(val[0] == 'yes' && val[1] == 'yes') $el.css('display', 'inline-block');\n                }\n            };\n\n            result['.sf_label_width'] = {\n                observe: ['sf_label_type', 'sf_label_vis'],\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if(val[0] == 'default' && val[1] && val[1] == 'yes') $el.show();\n                }\n            };\n\n            result['.sf_label_gaps'] = {\n                observe: ['sf_label_type', 'sf_label_vis'],\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if(val[0] == 'default' && val[1] && val[1] == 'yes') $el.show();\n                }\n            };\n\n            result['.sf_label_icon'] = {\n                observe: ['sf_label_type', 'sf_label_vis'],\n                update: function ($el, val, model, options) {\n                    $el.hide();\n                    if(val[0] == 'custom' && val[1] && val[1] == 'yes') $el.show();\n                }\n            };\n\n            result['.sf-menu__loc_popup .dw_pages_wrap'] = {\n                observe: ['display_default_menu'],\n                update: function ($el, val, model, options) {\n                    console.log('fire');\n                    $el.show();\n                    if(val)\n                        $el.hide();\n                }\n            };\n\n            return result;\n        },\n        render: function () {\n            this.stickit();\n            return this;\n        },\n        close: function () {\n            this.unstickit();\n        }\n    });\n})(jQuery);","// TinyColor v0.9.16\n// https://github.com/bgrins/TinyColor\n// 2013-08-10, Brian Grinstead, MIT License\n\n(function() {\n\nvar trimLeft = /^[\\s,#]+/,\n    trimRight = /\\s+$/,\n    tinyCounter = 0,\n    math = Math,\n    mathRound = math.round,\n    mathMin = math.min,\n    mathMax = math.max,\n    mathRandom = math.random;\n\nfunction tinycolor (color, opts) {\n\n    color = (color) ? color : '';\n    opts = opts || { };\n\n    // If input is already a tinycolor, return itself\n    if (typeof color == \"object\" && color.hasOwnProperty(\"_tc_id\")) {\n       return color;\n    }\n\n    var rgb = inputToRGB(color);\n    var r = rgb.r,\n        g = rgb.g,\n        b = rgb.b,\n        a = rgb.a,\n        roundA = mathRound(100*a) / 100,\n        format = opts.format || rgb.format;\n\n    // Don't let the range of [0,255] come back in [0,1].\n    // Potentially lose a little bit of precision here, but will fix issues where\n    // .5 gets interpreted as half of the total, instead of half of 1\n    // If it was supposed to be 128, this was already taken care of by `inputToRgb`\n    if (r < 1) { r = mathRound(r); }\n    if (g < 1) { g = mathRound(g); }\n    if (b < 1) { b = mathRound(b); }\n\n    return {\n        ok: rgb.ok,\n        format: format,\n        _tc_id: tinyCounter++,\n        alpha: a,\n        getAlpha: function() {\n            return a;\n        },\n        setAlpha: function(value) {\n            a = boundAlpha(value);\n            roundA = mathRound(100*a) / 100;\n        },\n        toHsv: function() {\n            var hsv = rgbToHsv(r, g, b);\n            return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: a };\n        },\n        toHsvString: function() {\n            var hsv = rgbToHsv(r, g, b);\n            var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100);\n            return (a == 1) ?\n              \"hsv(\"  + h + \", \" + s + \"%, \" + v + \"%)\" :\n              \"hsva(\" + h + \", \" + s + \"%, \" + v + \"%, \"+ roundA + \")\";\n        },\n        toHsl: function() {\n            var hsl = rgbToHsl(r, g, b);\n            return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: a };\n        },\n        toHslString: function() {\n            var hsl = rgbToHsl(r, g, b);\n            var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100);\n            return (a == 1) ?\n              \"hsl(\"  + h + \", \" + s + \"%, \" + l + \"%)\" :\n              \"hsla(\" + h + \", \" + s + \"%, \" + l + \"%, \"+ roundA + \")\";\n        },\n        toHex: function(allow3Char) {\n            return rgbToHex(r, g, b, allow3Char);\n        },\n        toHexString: function(allow3Char) {\n            return '#' + rgbToHex(r, g, b, allow3Char);\n        },\n        toRgb: function() {\n            return { r: mathRound(r), g: mathRound(g), b: mathRound(b), a: a };\n        },\n        toRgbString: function() {\n            return (a == 1) ?\n              \"rgb(\"  + mathRound(r) + \", \" + mathRound(g) + \", \" + mathRound(b) + \")\" :\n              \"rgba(\" + mathRound(r) + \", \" + mathRound(g) + \", \" + mathRound(b) + \", \" + roundA + \")\";\n        },\n        toPercentageRgb: function() {\n            return { r: mathRound(bound01(r, 255) * 100) + \"%\", g: mathRound(bound01(g, 255) * 100) + \"%\", b: mathRound(bound01(b, 255) * 100) + \"%\", a: a };\n        },\n        toPercentageRgbString: function() {\n            return (a == 1) ?\n              \"rgb(\"  + mathRound(bound01(r, 255) * 100) + \"%, \" + mathRound(bound01(g, 255) * 100) + \"%, \" + mathRound(bound01(b, 255) * 100) + \"%)\" :\n              \"rgba(\" + mathRound(bound01(r, 255) * 100) + \"%, \" + mathRound(bound01(g, 255) * 100) + \"%, \" + mathRound(bound01(b, 255) * 100) + \"%, \" + roundA + \")\";\n        },\n        toName: function() {\n            if (a === 0) {\n                return \"transparent\";\n            }\n\n            return hexNames[rgbToHex(r, g, b, true)] || false;\n        },\n        toFilter: function(secondColor) {\n            var hex = rgbToHex(r, g, b);\n            var secondHex = hex;\n            var alphaHex = Math.round(parseFloat(a) * 255).toString(16);\n            var secondAlphaHex = alphaHex;\n            var gradientType = opts && opts.gradientType ? \"GradientType = 1, \" : \"\";\n\n            if (secondColor) {\n                var s = tinycolor(secondColor);\n                secondHex = s.toHex();\n                secondAlphaHex = Math.round(parseFloat(s.alpha) * 255).toString(16);\n            }\n\n            return \"progid:DXImageTransform.Microsoft.gradient(\"+gradientType+\"startColorstr=#\" + pad2(alphaHex) + hex + \",endColorstr=#\" + pad2(secondAlphaHex) + secondHex + \")\";\n        },\n        toString: function(format) {\n            var formatSet = !!format;\n            format = format || this.format;\n\n            var formattedString = false;\n            var hasAlphaAndFormatNotSet = !formatSet && a < 1 && a > 0;\n            var formatWithAlpha = hasAlphaAndFormatNotSet && (format === \"hex\" || format === \"hex6\" || format === \"hex3\" || format === \"name\");\n\n            if (format === \"rgb\") {\n                formattedString = this.toRgbString();\n            }\n            if (format === \"prgb\") {\n                formattedString = this.toPercentageRgbString();\n            }\n            if (format === \"hex\" || format === \"hex6\") {\n                formattedString = this.toHexString();\n            }\n            if (format === \"hex3\") {\n                formattedString = this.toHexString(true);\n            }\n            if (format === \"name\") {\n                formattedString = this.toName();\n            }\n            if (format === \"hsl\") {\n                formattedString = this.toHslString();\n            }\n            if (format === \"hsv\") {\n                formattedString = this.toHsvString();\n            }\n\n            if (formatWithAlpha) {\n                return this.toRgbString();\n            }\n\n            return formattedString || this.toHexString();\n        }\n    };\n}\n\n// If input is an object, force 1 into \"1.0\" to handle ratios properly\n// String input requires \"1.0\" as input, so 1 will be treated as 1\ntinycolor.fromRatio = function(color, opts) {\n    if (typeof color == \"object\") {\n        var newColor = {};\n        for (var i in color) {\n            if (color.hasOwnProperty(i)) {\n                if (i === \"a\") {\n                    newColor[i] = color[i];\n                }\n                else {\n                    newColor[i] = convertToPercentage(color[i]);\n                }\n            }\n        }\n        color = newColor;\n    }\n\n    return tinycolor(color, opts);\n};\n\n// Given a string or object, convert that input to RGB\n// Possible string inputs:\n//\n//     \"red\"\n//     \"#f00\" or \"f00\"\n//     \"#ff0000\" or \"ff0000\"\n//     \"rgb 255 0 0\" or \"rgb (255, 0, 0)\"\n//     \"rgb 1.0 0 0\" or \"rgb (1, 0, 0)\"\n//     \"rgba (255, 0, 0, 1)\" or \"rgba 255, 0, 0, 1\"\n//     \"rgba (1.0, 0, 0, 1)\" or \"rgba 1.0, 0, 0, 1\"\n//     \"hsl(0, 100%, 50%)\" or \"hsl 0 100% 50%\"\n//     \"hsla(0, 100%, 50%, 1)\" or \"hsla 0 100% 50%, 1\"\n//     \"hsv(0, 100%, 100%)\" or \"hsv 0 100% 100%\"\n//\nfunction inputToRGB(color) {\n\n    var rgb = { r: 0, g: 0, b: 0 };\n    var a = 1;\n    var ok = false;\n    var format = false;\n\n    if (typeof color == \"string\") {\n        color = stringInputToObject(color);\n    }\n\n    if (typeof color == \"object\") {\n        if (color.hasOwnProperty(\"r\") && color.hasOwnProperty(\"g\") && color.hasOwnProperty(\"b\")) {\n            rgb = rgbToRgb(color.r, color.g, color.b);\n            ok = true;\n            format = String(color.r).substr(-1) === \"%\" ? \"prgb\" : \"rgb\";\n        }\n        else if (color.hasOwnProperty(\"h\") && color.hasOwnProperty(\"s\") && color.hasOwnProperty(\"v\")) {\n            color.s = convertToPercentage(color.s);\n            color.v = convertToPercentage(color.v);\n            rgb = hsvToRgb(color.h, color.s, color.v);\n            ok = true;\n            format = \"hsv\";\n        }\n        else if (color.hasOwnProperty(\"h\") && color.hasOwnProperty(\"s\") && color.hasOwnProperty(\"l\")) {\n            color.s = convertToPercentage(color.s);\n            color.l = convertToPercentage(color.l);\n            rgb = hslToRgb(color.h, color.s, color.l);\n            ok = true;\n            format = \"hsl\";\n        }\n\n        if (color.hasOwnProperty(\"a\")) {\n            a = color.a;\n        }\n    }\n\n    a = boundAlpha(a);\n\n    return {\n        ok: ok,\n        format: color.format || format,\n        r: mathMin(255, mathMax(rgb.r, 0)),\n        g: mathMin(255, mathMax(rgb.g, 0)),\n        b: mathMin(255, mathMax(rgb.b, 0)),\n        a: a\n    };\n}\n\n\n// Conversion Functions\n// --------------------\n\n// `rgbToHsl`, `rgbToHsv`, `hslToRgb`, `hsvToRgb` modified from:\n// <http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript>\n\n// `rgbToRgb`\n// Handle bounds / percentage checking to conform to CSS color spec\n// <http://www.w3.org/TR/css3-color/>\n// *Assumes:* r, g, b in [0, 255] or [0, 1]\n// *Returns:* { r, g, b } in [0, 255]\nfunction rgbToRgb(r, g, b){\n    return {\n        r: bound01(r, 255) * 255,\n        g: bound01(g, 255) * 255,\n        b: bound01(b, 255) * 255\n    };\n}\n\n// `rgbToHsl`\n// Converts an RGB color value to HSL.\n// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1]\n// *Returns:* { h, s, l } in [0,1]\nfunction rgbToHsl(r, g, b) {\n\n    r = bound01(r, 255);\n    g = bound01(g, 255);\n    b = bound01(b, 255);\n\n    var max = mathMax(r, g, b), min = mathMin(r, g, b);\n    var h, s, l = (max + min) / 2;\n\n    if(max == min) {\n        h = s = 0; // achromatic\n    }\n    else {\n        var d = max - min;\n        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n        switch(max) {\n            case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n            case g: h = (b - r) / d + 2; break;\n            case b: h = (r - g) / d + 4; break;\n        }\n\n        h /= 6;\n    }\n\n    return { h: h, s: s, l: l };\n}\n\n// `hslToRgb`\n// Converts an HSL color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\nfunction hslToRgb(h, s, l) {\n    var r, g, b;\n\n    h = bound01(h, 360);\n    s = bound01(s, 100);\n    l = bound01(l, 100);\n\n    function hue2rgb(p, q, t) {\n        if(t < 0) t += 1;\n        if(t > 1) t -= 1;\n        if(t < 1/6) return p + (q - p) * 6 * t;\n        if(t < 1/2) return q;\n        if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;\n        return p;\n    }\n\n    if(s === 0) {\n        r = g = b = l; // achromatic\n    }\n    else {\n        var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n        var p = 2 * l - q;\n        r = hue2rgb(p, q, h + 1/3);\n        g = hue2rgb(p, q, h);\n        b = hue2rgb(p, q, h - 1/3);\n    }\n\n    return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHsv`\n// Converts an RGB color value to HSV\n// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1]\n// *Returns:* { h, s, v } in [0,1]\nfunction rgbToHsv(r, g, b) {\n\n    r = bound01(r, 255);\n    g = bound01(g, 255);\n    b = bound01(b, 255);\n\n    var max = mathMax(r, g, b), min = mathMin(r, g, b);\n    var h, s, v = max;\n\n    var d = max - min;\n    s = max === 0 ? 0 : d / max;\n\n    if(max == min) {\n        h = 0; // achromatic\n    }\n    else {\n        switch(max) {\n            case r: h = (g - b) / d + (g < b ? 6 : 0); break;\n            case g: h = (b - r) / d + 2; break;\n            case b: h = (r - g) / d + 4; break;\n        }\n        h /= 6;\n    }\n    return { h: h, s: s, v: v };\n}\n\n// `hsvToRgb`\n// Converts an HSV color value to RGB.\n// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100]\n// *Returns:* { r, g, b } in the set [0, 255]\n function hsvToRgb(h, s, v) {\n\n    h = bound01(h, 360) * 6;\n    s = bound01(s, 100);\n    v = bound01(v, 100);\n\n    var i = math.floor(h),\n        f = h - i,\n        p = v * (1 - s),\n        q = v * (1 - f * s),\n        t = v * (1 - (1 - f) * s),\n        mod = i % 6,\n        r = [v, q, p, p, t, v][mod],\n        g = [t, v, v, q, p, p][mod],\n        b = [p, p, t, v, v, q][mod];\n\n    return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n// `rgbToHex`\n// Converts an RGB color to hex\n// Assumes r, g, and b are contained in the set [0, 255]\n// Returns a 3 or 6 character hex\nfunction rgbToHex(r, g, b, allow3Char) {\n\n    var hex = [\n        pad2(mathRound(r).toString(16)),\n        pad2(mathRound(g).toString(16)),\n        pad2(mathRound(b).toString(16))\n    ];\n\n    // Return a 3 character hex if possible\n    if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {\n        return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);\n    }\n\n    return hex.join(\"\");\n}\n\n// `equals`\n// Can be called with any tinycolor input\ntinycolor.equals = function (color1, color2) {\n    if (!color1 || !color2) { return false; }\n    return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();\n};\ntinycolor.random = function() {\n    return tinycolor.fromRatio({\n        r: mathRandom(),\n        g: mathRandom(),\n        b: mathRandom()\n    });\n};\n\n\n// Modification Functions\n// ----------------------\n// Thalm to less.js for some of the basics here\n// <https://github.com/cloudhead/less.js/blob/master/lib/less/functions.js>\n\ntinycolor.desaturate = function (color, amount) {\n    amount = (amount === 0) ? 0 : (amount || 10);\n    var hsl = tinycolor(color).toHsl();\n    hsl.s -= amount / 100;\n    hsl.s = clamp01(hsl.s);\n    return tinycolor(hsl);\n};\ntinycolor.saturate = function (color, amount) {\n    amount = (amount === 0) ? 0 : (amount || 10);\n    var hsl = tinycolor(color).toHsl();\n    hsl.s += amount / 100;\n    hsl.s = clamp01(hsl.s);\n    return tinycolor(hsl);\n};\ntinycolor.greyscale = function(color) {\n    return tinycolor.desaturate(color, 100);\n};\ntinycolor.lighten = function(color, amount) {\n    amount = (amount === 0) ? 0 : (amount || 10);\n    var hsl = tinycolor(color).toHsl();\n    hsl.l += amount / 100;\n    hsl.l = clamp01(hsl.l);\n    return tinycolor(hsl);\n};\ntinycolor.darken = function (color, amount) {\n    amount = (amount === 0) ? 0 : (amount || 10);\n    var hsl = tinycolor(color).toHsl();\n    hsl.l -= amount / 100;\n    hsl.l = clamp01(hsl.l);\n    return tinycolor(hsl);\n};\ntinycolor.complement = function(color) {\n    var hsl = tinycolor(color).toHsl();\n    hsl.h = (hsl.h + 180) % 360;\n    return tinycolor(hsl);\n};\n\n\n// Combination Functions\n// ---------------------\n// Thalm to jQuery xColor for some of the ideas behind these\n// <https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js>\n\ntinycolor.triad = function(color) {\n    var hsl = tinycolor(color).toHsl();\n    var h = hsl.h;\n    return [\n        tinycolor(color),\n        tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }),\n        tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l })\n    ];\n};\ntinycolor.tetrad = function(color) {\n    var hsl = tinycolor(color).toHsl();\n    var h = hsl.h;\n    return [\n        tinycolor(color),\n        tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }),\n        tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }),\n        tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l })\n    ];\n};\ntinycolor.splitcomplement = function(color) {\n    var hsl = tinycolor(color).toHsl();\n    var h = hsl.h;\n    return [\n        tinycolor(color),\n        tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}),\n        tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l})\n    ];\n};\ntinycolor.analogous = function(color, results, slices) {\n    results = results || 6;\n    slices = slices || 30;\n\n    var hsl = tinycolor(color).toHsl();\n    var part = 360 / slices;\n    var ret = [tinycolor(color)];\n\n    for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) {\n        hsl.h = (hsl.h + part) % 360;\n        ret.push(tinycolor(hsl));\n    }\n    return ret;\n};\ntinycolor.monochromatic = function(color, results) {\n    results = results || 6;\n    var hsv = tinycolor(color).toHsv();\n    var h = hsv.h, s = hsv.s, v = hsv.v;\n    var ret = [];\n    var modification = 1 / results;\n\n    while (results--) {\n        ret.push(tinycolor({ h: h, s: s, v: v}));\n        v = (v + modification) % 1;\n    }\n\n    return ret;\n};\n\n\n// Readability Functions\n// ---------------------\n// <http://www.w3.org/TR/AERT#color-contrast>\n\n// `readability`\n// Analyze the 2 colors and returns an object with the following properties:\n//    `brightness`: difference in brightness between the two colors\n//    `color`: difference in color/hue between the two colors\ntinycolor.readability = function(color1, color2) {\n    var a = tinycolor(color1).toRgb();\n    var b = tinycolor(color2).toRgb();\n    var brightnessA = (a.r * 299 + a.g * 587 + a.b * 114) / 1000;\n    var brightnessB = (b.r * 299 + b.g * 587 + b.b * 114) / 1000;\n    var colorDiff = (\n        Math.max(a.r, b.r) - Math.min(a.r, b.r) +\n        Math.max(a.g, b.g) - Math.min(a.g, b.g) +\n        Math.max(a.b, b.b) - Math.min(a.b, b.b)\n    );\n\n    return {\n        brightness: Math.abs(brightnessA - brightnessB),\n        color: colorDiff\n    };\n};\n\n// `readable`\n// http://www.w3.org/TR/AERT#color-contrast\n// Ensure that foreground and background color combinations provide sufficient contrast.\n// *Example*\n//    tinycolor.readable(\"#000\", \"#111\") => false\ntinycolor.readable = function(color1, color2) {\n    var readability = tinycolor.readability(color1, color2);\n    return readability.brightness > 125 && readability.color > 500;\n};\n\n// `mostReadable`\n// Given a base color and a list of possible foreground or background\n// colors for that base, returns the most readable color.\n// *Example*\n//    tinycolor.mostReadable(\"#123\", [\"#fff\", \"#000\"]) => \"#000\"\ntinycolor.mostReadable = function(baseColor, colorList) {\n    var bestColor = null;\n    var bestScore = 0;\n    var bestIsReadable = false;\n    for (var i=0; i < colorList.length; i++) {\n\n        // We normalize both around the \"acceptable\" breaking point,\n        // but rank brightness constrast higher than hue.\n\n        var readability = tinycolor.readability(baseColor, colorList[i]);\n        var readable = readability.brightness > 125 && readability.color > 500;\n        var score = 3 * (readability.brightness / 125) + (readability.color / 500);\n\n        if ((readable && ! bestIsReadable) ||\n            (readable && bestIsReadable && score > bestScore) ||\n            ((! readable) && (! bestIsReadable) && score > bestScore)) {\n            bestIsReadable = readable;\n            bestScore = score;\n            bestColor = tinycolor(colorList[i]);\n        }\n    }\n    return bestColor;\n};\n\n\n// Big List of Colors\n// ------------------\n// <http://www.w3.org/TR/css3-color/#svg-color>\nvar names = tinycolor.names = {\n    aliceblue: \"f0f8ff\",\n    antiquewhite: \"faebd7\",\n    aqua: \"0ff\",\n    aquamarine: \"7fffd4\",\n    azure: \"f0ffff\",\n    beige: \"f5f5dc\",\n    bisque: \"ffe4c4\",\n    black: \"000\",\n    blanchedalmond: \"ffebcd\",\n    blue: \"00f\",\n    blueviolet: \"8a2be2\",\n    brown: \"a52a2a\",\n    burlywood: \"deb887\",\n    burntsienna: \"ea7e5d\",\n    cadetblue: \"5f9ea0\",\n    chartreuse: \"7fff00\",\n    chocolate: \"d2691e\",\n    coral: \"ff7f50\",\n    cornflowerblue: \"6495ed\",\n    cornsilk: \"fff8dc\",\n    crimson: \"dc143c\",\n    cyan: \"0ff\",\n    darkblue: \"00008b\",\n    darkcyan: \"008b8b\",\n    darkgoldenrod: \"b8860b\",\n    darkgray: \"a9a9a9\",\n    darkgreen: \"006400\",\n    darkgrey: \"a9a9a9\",\n    darkkhaki: \"bdb76b\",\n    darkmagenta: \"8b008b\",\n    darkolivegreen: \"556b2f\",\n    darkorange: \"ff8c00\",\n    darkorchid: \"9932cc\",\n    darkred: \"8b0000\",\n    darksalmon: \"e9967a\",\n    darkseagreen: \"8fbc8f\",\n    darkslateblue: \"483d8b\",\n    darkslategray: \"2f4f4f\",\n    darkslategrey: \"2f4f4f\",\n    darkturquoise: \"00ced1\",\n    darkviolet: \"9400d3\",\n    deeppink: \"ff1493\",\n    deepskyblue: \"00bfff\",\n    dimgray: \"696969\",\n    dimgrey: \"696969\",\n    dodgerblue: \"1e90ff\",\n    firebrick: \"b22222\",\n    floralwhite: \"fffaf0\",\n    forestgreen: \"228b22\",\n    fuchsia: \"f0f\",\n    gainsboro: \"dcdcdc\",\n    ghostwhite: \"f8f8ff\",\n    gold: \"ffd700\",\n    goldenrod: \"daa520\",\n    gray: \"808080\",\n    green: \"008000\",\n    greenyellow: \"adff2f\",\n    grey: \"808080\",\n    honeydew: \"f0fff0\",\n    hotpink: \"ff69b4\",\n    indianred: \"cd5c5c\",\n    indigo: \"4b0082\",\n    ivory: \"fffff0\",\n    khaki: \"f0e68c\",\n    lavender: \"e6e6fa\",\n    lavenderblush: \"fff0f5\",\n    lawngreen: \"7cfc00\",\n    lemonchiffon: \"fffacd\",\n    lightblue: \"add8e6\",\n    lightcoral: \"f08080\",\n    lightcyan: \"e0ffff\",\n    lightgoldenrodyellow: \"fafad2\",\n    lightgray: \"d3d3d3\",\n    lightgreen: \"90ee90\",\n    lightgrey: \"d3d3d3\",\n    lightpink: \"ffb6c1\",\n    lightsalmon: \"ffa07a\",\n    lightseagreen: \"20b2aa\",\n    lightskyblue: \"87cefa\",\n    lightslategray: \"789\",\n    lightslategrey: \"789\",\n    lightsteelblue: \"b0c4de\",\n    lightyellow: \"ffffe0\",\n    lime: \"0f0\",\n    limegreen: \"32cd32\",\n    linen: \"faf0e6\",\n    magenta: \"f0f\",\n    maroon: \"800000\",\n    mediumaquamarine: \"66cdaa\",\n    mediumblue: \"0000cd\",\n    mediumorchid: \"ba55d3\",\n    mediumpurple: \"9370db\",\n    mediumseagreen: \"3cb371\",\n    mediumslateblue: \"7b68ee\",\n    mediumspringgreen: \"00fa9a\",\n    mediumturquoise: \"48d1cc\",\n    mediumvioletred: \"c71585\",\n    midnightblue: \"191970\",\n    mintcream: \"f5fffa\",\n    mistyrose: \"ffe4e1\",\n    moccasin: \"ffe4b5\",\n    navajowhite: \"ffdead\",\n    navy: \"000080\",\n    oldlace: \"fdf5e6\",\n    olive: \"808000\",\n    olivedrab: \"6b8e23\",\n    orange: \"ffa500\",\n    orangered: \"ff4500\",\n    orchid: \"da70d6\",\n    palegoldenrod: \"eee8aa\",\n    palegreen: \"98fb98\",\n    paleturquoise: \"afeeee\",\n    palevioletred: \"db7093\",\n    papayawhip: \"ffefd5\",\n    peachpuff: \"ffdab9\",\n    peru: \"cd853f\",\n    pink: \"ffc0cb\",\n    plum: \"dda0dd\",\n    powderblue: \"b0e0e6\",\n    purple: \"800080\",\n    red: \"f00\",\n    rosybrown: \"bc8f8f\",\n    royalblue: \"4169e1\",\n    saddlebrown: \"8b4513\",\n    salmon: \"fa8072\",\n    sandybrown: \"f4a460\",\n    seagreen: \"2e8b57\",\n    seashell: \"fff5ee\",\n    sienna: \"a0522d\",\n    silver: \"c0c0c0\",\n    skyblue: \"87ceeb\",\n    slateblue: \"6a5acd\",\n    slategray: \"708090\",\n    slategrey: \"708090\",\n    snow: \"fffafa\",\n    springgreen: \"00ff7f\",\n    steelblue: \"4682b4\",\n    tan: \"d2b48c\",\n    teal: \"008080\",\n    thistle: \"d8bfd8\",\n    tomato: \"ff6347\",\n    turquoise: \"40e0d0\",\n    violet: \"ee82ee\",\n    wheat: \"f5deb3\",\n    white: \"fff\",\n    whitesmoke: \"f5f5f5\",\n    yellow: \"ff0\",\n    yellowgreen: \"9acd32\"\n};\n\n// Make it easy to access colors via `hexNames[hex]`\nvar hexNames = tinycolor.hexNames = flip(names);\n\n\n// Utilities\n// ---------\n\n// `{ 'name1': 'val1' }` becomes `{ 'val1': 'name1' }`\nfunction flip(o) {\n    var flipped = { };\n    for (var i in o) {\n        if (o.hasOwnProperty(i)) {\n            flipped[o[i]] = i;\n        }\n    }\n    return flipped;\n}\n\n// Return a valid alpha value [0,1] with all invalid values being set to 1\nfunction boundAlpha(a) {\n    a = parseFloat(a);\n\n    if (isNaN(a) || a < 0 || a > 1) {\n        a = 1;\n    }\n\n    return a;\n}\n\n// Take input from [0, n] and return it as [0, 1]\nfunction bound01(n, max) {\n    if (isOnePointZero(n)) { n = \"100%\"; }\n\n    var processPercent = isPercentage(n);\n    n = mathMin(max, mathMax(0, parseFloat(n)));\n\n    // Automatically convert percentage into number\n    if (processPercent) {\n        n = parseInt(n * max, 10) / 100;\n    }\n\n    // Handle floating point rounding errors\n    if ((math.abs(n - max) < 0.000001)) {\n        return 1;\n    }\n\n    // Convert into [0, 1] range if it isn't already\n    return (n % max) / parseFloat(max);\n}\n\n// Force a number between 0 and 1\nfunction clamp01(val) {\n    return mathMin(1, mathMax(0, val));\n}\n\n// Parse an integer into hex\nfunction parseHex(val) {\n    return parseInt(val, 16);\n}\n\n// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1\n// <http://stackoverflow.com/questions/7422072/javascript-how-to-detect-number-as-a-decimal-including-1-0>\nfunction isOnePointZero(n) {\n    return typeof n == \"string\" && n.indexOf('.') != -1 && parseFloat(n) === 1;\n}\n\n// Check to see if string passed in is a percentage\nfunction isPercentage(n) {\n    return typeof n === \"string\" && n.indexOf('%') != -1;\n}\n\n// Force a hex value to have 2 characters\nfunction pad2(c) {\n    return c.length == 1 ? '0' + c : '' + c;\n}\n\n// Replace a decimal with it's percentage value\nfunction convertToPercentage(n) {\n    if (n <= 1) {\n        n = (n * 100) + \"%\";\n    }\n\n    return n;\n}\n\nvar matchers = (function() {\n\n    // <http://www.w3.org/TR/css3-values/#integers>\n    var CSS_INTEGER = \"[-\\\\+]?\\\\d+%?\";\n\n    // <http://www.w3.org/TR/css3-values/#number-value>\n    var CSS_NUMBER = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\";\n\n    // Allow positive/negative integer/number.  Don't capture the either/or, just the entire outcome.\n    var CSS_UNIT = \"(?:\" + CSS_NUMBER + \")|(?:\" + CSS_INTEGER + \")\";\n\n    // Actual matching.\n    // Parentheses and commas are optional, but not required.\n    // Whitespace can take the place of commas or opening paren\n    var PERMISSIVE_MATCH3 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n    var PERMISSIVE_MATCH4 = \"[\\\\s|\\\\(]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")[,|\\\\s]+(\" + CSS_UNIT + \")\\\\s*\\\\)?\";\n\n    return {\n        rgb: new RegExp(\"rgb\" + PERMISSIVE_MATCH3),\n        rgba: new RegExp(\"rgba\" + PERMISSIVE_MATCH4),\n        hsl: new RegExp(\"hsl\" + PERMISSIVE_MATCH3),\n        hsla: new RegExp(\"hsla\" + PERMISSIVE_MATCH4),\n        hsv: new RegExp(\"hsv\" + PERMISSIVE_MATCH3),\n        hex3: /^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,\n        hex6: /^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/\n    };\n})();\n\n// `stringInputToObject`\n// Permissive string parsing.  Take in a number of formats, and output an object\n// based on detected format.  Returns `{ r, g, b }` or `{ h, s, l }` or `{ h, s, v}`\nfunction stringInputToObject(color) {\n\n    color = color.replace(trimLeft,'').replace(trimRight, '').toLowerCase();\n    var named = false;\n    if (names[color]) {\n        color = names[color];\n        named = true;\n    }\n    else if (color == 'transparent') {\n        return { r: 0, g: 0, b: 0, a: 0, format: \"name\" };\n    }\n\n    // Try to match string input using regular expressions.\n    // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360]\n    // Just return an object and let the conversion functions handle that.\n    // This way the result will be the same whether the tinycolor is initialized with string or object.\n    var match;\n    if ((match = matchers.rgb.exec(color))) {\n        return { r: match[1], g: match[2], b: match[3] };\n    }\n    if ((match = matchers.rgba.exec(color))) {\n        return { r: match[1], g: match[2], b: match[3], a: match[4] };\n    }\n    if ((match = matchers.hsl.exec(color))) {\n        return { h: match[1], s: match[2], l: match[3] };\n    }\n    if ((match = matchers.hsla.exec(color))) {\n        return { h: match[1], s: match[2], l: match[3], a: match[4] };\n    }\n    if ((match = matchers.hsv.exec(color))) {\n        return { h: match[1], s: match[2], v: match[3] };\n    }\n    if ((match = matchers.hex6.exec(color))) {\n        return {\n            r: parseHex(match[1]),\n            g: parseHex(match[2]),\n            b: parseHex(match[3]),\n            format: named ? \"name\" : \"hex\"\n        };\n    }\n    if ((match = matchers.hex3.exec(color))) {\n        return {\n            r: parseHex(match[1] + '' + match[1]),\n            g: parseHex(match[2] + '' + match[2]),\n            b: parseHex(match[3] + '' + match[3]),\n            format: named ? \"name\" : \"hex\"\n        };\n    }\n\n    return false;\n}\n\n// Node: Export function\nif (typeof module !== \"undefined\" && module.exports) {\n    module.exports = tinycolor;\n}\n// AMD/requirejs: Define the module\nelse if (typeof define !== \"undefined\" && define.amd) {\n    define(function () {return tinycolor;});\n}\n// Browser: Expose to window\nelse {\n    window.tinycolor = tinycolor;\n}\n\n})();","/*jshint undef: true, unused:true, browser:true */\n/*global jQuery: true, tinycolor: false */\n\n/*!=========================================================================\n *  jQuery Color Picker Sliders\n *  v3.1.0\n *\n *  An advanced responsive color selector with color swatches and support for\n *  human perceived lightness. Works in all modern browsers and on touch devices.\n *\n *      https://github.com/istvan-meszaros/css-colorpickersliders\n *      http://www.virtuosoft.eu/code/css-colorpickersliders/\n *\n *  Copyright 2013 István Ujj-Mészáros\n *\n *  Thalm for the contributors:\n *      imaguiraga - https://github.com/imaguiraga\n *      balmasich - https://github.com/balmasich\n *\n *  Licensed under the Apache License, Version 2.0 (the \"License\");\n *  you may not use this file except in compliance with the License.\n *  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\n *  Unless required by applicable law or agreed to in writing, software\n *  distributed under the License is distributed on an \"AS IS\" BASIS,\n *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n *  See the License for the specific language governing permissions and\n *  limitations under the License.\n *\n *  Requirements:\n *\n *      TinyColor: https://github.com/bgrins/TinyColor\n *\n *  Using color math algorithms from EasyRGB Web site:\n *      http://www.easyrgb.com/index.php?X=MATH\n * ====================================================================== */\n\n(function($) {\n    \"use strict\";\n\n    $.fn.ColorPickerSliders = function(options) {\n\n        return this.each(function() {\n\n            var alreadyinitialized = false,\n                    settings,\n                    triggerelement = $(this),\n                    container,\n                    elements,\n                    swatches,\n                    MAXLIGHT = 101, // 101 needed for bright colors (maybe due to rounding errors)\n                    dragTarget = false,\n                    lastUpdateTime = 0,\n                    color = {\n                        tiny: null,\n                        hsla: null,\n                        rgba: null,\n                        cielch: null\n                    },\n            MAXVALIDCHROMA = 144;   // maximum valid chroma value found convertible to rgb (blue)\n\n            init();\n\n            function init() {\n                if (alreadyinitialized) {\n                    return;\n                }\n\n                alreadyinitialized = true;\n\n                _initSettings();\n\n                _buildHtml();\n                _initElements();\n\n                if (triggerelement.is(\"input\")) {\n                    color.tiny = tinycolor(triggerelement.val());\n\n                    if (!color.tiny.format) {\n                        color.tiny = tinycolor(settings.color);\n                    }\n                }\n                else {\n                    color.tiny = tinycolor(settings.color);\n                }\n\n                color.hsla = color.tiny.toHsl();\n                color.rgba = color.tiny.toRgb();\n                color.cielch = $.fn.ColorPickerSliders.rgb2lch(color.rgba);\n\n                _renderSwatches();\n                _bindEvents();\n\n                _updateAllElements();\n            }\n\n            function updateColor(newcolor, disableinputupdate) {\n                var updatedcolor = tinycolor(newcolor);\n\n                if (updatedcolor.format) {\n                    container.removeClass(\"cp-unconvertible-cie-color\");\n\n                    color.tiny = updatedcolor;\n                    color.hsla = updatedcolor.toHsl();\n                    color.rgba = updatedcolor.toRgb();\n                    color.cielch = $.fn.ColorPickerSliders.rgb2lch(color.rgba);\n\n                    _updateAllElements(disableinputupdate);\n\n                    return true;\n                }\n                else {\n                    return false;\n                }\n            }\n\n            function showPopup() {\n                $('.cp-container.cp-popup').hide();\n\n                var viewportwidth = $(window).width(),\n                        offset = triggerelement.offset(),\n                        popuporiginalwidth;\n\n                popuporiginalwidth = container.data('popup-original-width');\n\n                if (typeof popuporiginalwidth === \"undefined\") {\n                    popuporiginalwidth = container.outerWidth();\n                    container.data('popup-original-width', popuporiginalwidth);\n                }\n\n                if (offset.left + popuporiginalwidth + 12 <= viewportwidth) {\n                    container.css('left', offset.left).width(popuporiginalwidth);\n                }\n                else if (popuporiginalwidth <= viewportwidth) {\n                    container.css('left', viewportwidth - popuporiginalwidth - 12).width(popuporiginalwidth);\n                }\n                else {\n                    container.css('left', 0).width(viewportwidth - 12);\n                }\n\n                container.css('top', offset.top + triggerelement.outerHeight()).show();\n            }\n\n            function hidePopup() {\n                container.hide();\n            }\n\n            function _initSettings() {\n                settings = $.extend({\n                    color: 'hsl(342, 52%, 70%)',\n                    swatches: ['FFFFFF', 'C0C0C0', '808080', '000000', 'FF0000', '800000', 'FFFF00', '808000', '00FF00', '008000', '00FFFF', '008080', '0000FF', '000080', 'FF00FF', '800080'],\n                    customswatches: 'colorpickkersliders', // false or a grop name\n                    connectedinput: false, // can be a jquery object or a selector\n                    flat: false,\n                    disableautopopup: false,\n                    updateinterval: 30, // update interval of the sliders while in drag (ms)\n                    previewontriggerelement: true,\n                    previewcontrasttreshold: 15,\n                    previewformat: 'rgb', // rgb/hsl/hex\n                    erroneousciecolormarkers: true,\n                    invalidcolorsopacity: 1, // everything below 1 causes slightly slower responses\n                    finercierangeedges: true, // can be disabled for faster responses\n                    titleswatchesadd: \"Add color to swatches\",\n                    titleswatchesremove: \"Remove color from swatches\",\n                    titleswatchesreset: \"Reset to default swatches\",\n                    order: {},\n                    labels: {},\n                    onchange: function() {\n                    }\n                }, options);\n\n                if (options.hasOwnProperty('order')) {\n                    settings.order = $.extend({\n                        opacity: false,\n                        hsl: false,\n                        rgb: false,\n                        cie: false,\n                        preview: false\n                    }, options.order);\n                }\n                else {\n                    settings.order = {\n                        opacity: 0,\n                        hsl: 1,\n                        rgb: 2,\n                        cie: 3, // cie sliders can increase response time of all sliders!\n                        preview: 4\n                    };\n                }\n\n                if (!options.hasOwnProperty('labels')) {\n                    options.labels = {};\n                }\n\n                settings.labels = $.extend({\n                    hslhue: 'Hue',\n                    hslsaturation: 'Saturation',\n                    hsllightness: 'Lightness',\n                    rgbred: 'RGB-Red',\n                    rgbgreen: 'RGB-Green',\n                    rgbblue: 'RGB-Blue',\n                    cielightness: 'CIE-Lightness',\n                    ciechroma: 'CIE-Chroma',\n                    ciehue: 'CIE-hue',\n                    opacity: 'Opacity',\n                    preview: 'Preview'\n                }, options.labels);\n\n                // force preview when browser doesn't support css gradients\n                if ((!settings.order.hasOwnProperty('preview') || settings.order.preview === false) && !$.fn.ColorPickerSliders.gradientSupported()) {\n                    settings.order.preview = 10;\n                }\n            }\n\n            function _buildHtml() {\n                var sliders = [],\n                        color_picker_html = '';\n\n                if (settings.order.opacity !== false) {\n                    sliders[settings.order.opacity] = '<div class=\"cp-slider cp-opacity cp-transparency\"><span>' + settings.labels.opacity + '</span><div class=\"cp-marker\"></div></div>';\n                }\n\n                if (settings.order.hsl !== false) {\n                    sliders[settings.order.hsl] = '<div class=\"cp-slider cp-hslhue cp-transparency\"><span>' + settings.labels.hslhue + '</span><div class=\"cp-marker\"></div></div><div class=\"cp-slider cp-hslsaturation cp-transparency\"><span>' + settings.labels.hslsaturation + '</span><div class=\"cp-marker\"></div></div><div class=\"cp-slider cp-hsllightness cp-transparency\"><span>' + settings.labels.hsllightness + '</span><div class=\"cp-marker\"></div></div>';\n                }\n\n                if (settings.order.rgb !== false) {\n                    sliders[settings.order.rgb] = '<div class=\"cp-slider cp-rgbred cp-transparency\"><span>' + settings.labels.rgbred + '</span><div class=\"cp-marker\"></div></div><div class=\"cp-slider cp-rgbgreen cp-transparency\"><span>' + settings.labels.rgbgreen + '</span><div class=\"cp-marker\"></div></div><div class=\"cp-slider cp-rgbblue cp-transparency\"><span>' + settings.labels.rgbblue + '</span><div class=\"cp-marker\"></div></div>';\n                }\n\n                if (settings.order.cie !== false) {\n                    sliders[settings.order.cie] = '<div class=\"cp-slider cp-cielightness cp-transparency\"><span>' + settings.labels.cielightness + '</span><div class=\"cp-marker\"></div></div><div class=\"cp-slider cp-ciechroma cp-transparency\"><span>' + settings.labels.ciechroma + '</span><div class=\"cp-marker\"></div></div><div class=\"cp-slider cp-ciehue cp-transparency\"><span>' + settings.labels.ciehue + '</span><div class=\"cp-marker\"></div></div>';\n                }\n\n                if (settings.order.preview !== false) {\n                    sliders[settings.order.preview] = '<div class=\"cp-preview cp-transparency\"><input type=\"text\" readonly=\"readonly\"></div>';\n                }\n\n                color_picker_html += '<div class=\"cp-sliders\">';\n\n                for (var i = 0; i < sliders.length; i++) {\n                    if (typeof sliders[i] === \"undefined\") {\n                        continue;\n                    }\n\n                    color_picker_html += sliders[i];\n                }\n\n                color_picker_html += '</div>';\n\n                if (settings.swatches) {\n                    color_picker_html += '<div class=\"cp-swatches\"><button type=\"button\" class=\"add\" title=\"' + settings.titleswatchesadd + '\"></button><button type=\"button\" class=\"remove\" title=\"' + settings.titleswatchesremove + '\"></button><button type=\"button\" class=\"reset\" title=\"' + settings.titleswatchesreset + '\"></button><ul></ul><div style=\"clear:both\"></div></div>';\n                }\n\n                if (settings.flat) {\n                    if (triggerelement.is(\"input\")) {\n                        container = $('<div class=\"cp-container\"></div>').insertAfter(triggerelement);\n                    }\n                    else {\n                        container = $('<div class=\"cp-container\"></div>');\n                        triggerelement.append(container);\n                    }\n                }\n                else {\n                    container = $('<div class=\"cp-container\"></div>').appendTo('body');\n                }\n\n                container.append(color_picker_html);\n\n                if (settings.connectedinput instanceof jQuery) {\n                    settings.connectedinput.add(triggerelement);\n                }\n                else if (settings.connectedinput === false) {\n                    settings.connectedinput = triggerelement;\n                }\n                else {\n                    settings.connectedinput = $(settings.connectedinput).add(triggerelement);\n                }\n\n                if (!settings.flat) {\n                    container.addClass('cp-popup');\n                }\n            }\n\n            function _initElements() {\n                elements = {\n                    connectedinput: false,\n                    actualswatch: false,\n                    swatchescontainer: $(\".cp-swatches\", container),\n                    swatches: $(\".cp-swatches ul\", container),\n                    swatches_add: $(\".cp-swatches button.add\", container),\n                    swatches_remove: $(\".cp-swatches button.remove\", container),\n                    swatches_reset: $(\".cp-swatches button.reset\", container),\n                    all_sliders: $(\".cp-sliders, .cp-preview input\", container),\n                    sliders: {\n                        hue: $(\".cp-hslhue span\", container),\n                        hue_marker: $(\".cp-hslhue .cp-marker\", container),\n                        saturation: $(\".cp-hslsaturation span\", container),\n                        saturation_marker: $(\".cp-hslsaturation .cp-marker\", container),\n                        lightness: $(\".cp-hsllightness span\", container),\n                        lightness_marker: $(\".cp-hsllightness .cp-marker\", container),\n                        opacity: $(\".cp-opacity span\", container),\n                        opacity_marker: $(\".cp-opacity .cp-marker\", container),\n                        red: $(\".cp-rgbred span\", container),\n                        red_marker: $(\".cp-rgbred .cp-marker\", container),\n                        green: $(\".cp-rgbgreen span\", container),\n                        green_marker: $(\".cp-rgbgreen .cp-marker\", container),\n                        blue: $(\".cp-rgbblue span\", container),\n                        blue_marker: $(\".cp-rgbblue .cp-marker\", container),\n                        cielightness: $(\".cp-cielightness span\", container),\n                        cielightness_marker: $(\".cp-cielightness .cp-marker\", container),\n                        ciechroma: $(\".cp-ciechroma span\", container),\n                        ciechroma_marker: $(\".cp-ciechroma .cp-marker\", container),\n                        ciehue: $(\".cp-ciehue span\", container),\n                        ciehue_marker: $(\".cp-ciehue .cp-marker\", container),\n                        preview: $(\".cp-preview input\", container)\n                    }\n                };\n\n                if (settings.connectedinput) {\n                    if (settings.connectedinput instanceof jQuery) {\n                        elements.connectedinput = settings.connectedinput;\n                    }\n                    else {\n                        elements.connectedinput = $(settings.connectedinput);\n                    }\n                }\n\n                if (!settings.customswatches) {\n                    elements.swatches_add.hide();\n                    elements.swatches_remove.hide();\n                    elements.swatches_reset.hide();\n                }\n            }\n\n            function  destroyColorPicker() {\n                if (container  instanceof jQuery) {\n                    hidePopup();\n                    container.remove();\n                    alreadyinitialized = false;\n                }\n            }\n\n            function  resetColorPicker() {\n                init();\n            }\n\n            function _bindEvents() {\n                triggerelement.on('colorpickersliders.destroy', function() {\n                    destroyColorPicker();\n                });\n\n                triggerelement.on('colorpickersliders.reset', function() {\n                    resetColorPicker();\n                });\n\n                triggerelement.on('colorpickersliders.updateColor', function(e, newcolor) {\n                    updateColor(newcolor);\n                });\n\n                triggerelement.on('colorpickersliders.showPopup', function() {\n                    showPopup();\n                });\n\n                triggerelement.on('colorpickersliders.hidePopup', function() {\n                    hidePopup();\n                });\n\n                $(document).on(\"colorpickersliders.changeswatches\", function() {\n                    _renderSwatches();\n                });\n\n                if (!settings.flat && !settings.disableautopopup) {\n                    // we need tabindex defined to be focusable\n                    if (typeof triggerelement.attr(\"tabindex\") === \"undefined\") {\n                        triggerelement.attr(\"tabindex\", -1);\n                    }\n\n                    // buttons doesn't get focus in webkit browsers\n                    // https://bugs.webkit.org/show_bug.cgi?id=22261\n                    // and only input and button are focusable on iPad\n                    // so it is safer to register click on any other than inputs\n                    if (!triggerelement.is(\"input\")) {\n                        $(triggerelement).on(\"click\", function(ev) {\n                            showPopup();\n\n                            ev.stopPropagation();\n                        });\n\n                        $(document).on(\"click\", function() {\n                            hidePopup();\n                        });\n                    }\n\n                    $(triggerelement).on(\"focus\", function(ev) {\n                        showPopup();\n\n                        ev.stopPropagation();\n                    });\n\n                    $(triggerelement).on(\"blur\", function(ev) {\n\t                    console.log('blur')\n                        hidePopup();\n\n                        ev.stopPropagation();\n                    });\n\n                    container.on(\"touchstart mousedown\", function(ev) {\n                        ev.preventDefault();\n                        ev.stopPropagation();\n\n                        return false;\n                    });\n                }\n\n                container.on(\"contextmenu\", function(ev) {\n                    ev.preventDefault();\n                    return false;\n                });\n\n                elements.swatches.on(\"click\", \"li span\", function(ev) {\n                    var color = $(this).css(\"background-color\");\n                    updateColor(color);\n                    ev.preventDefault();\n                });\n\n                elements.swatches_add.on(\"click\", function(ev) {\n                    _addCurrentColorToSwatches();\n                    ev.preventDefault();\n                });\n\n                elements.swatches_remove.on(\"click\", function(ev) {\n                    _removeActualColorFromSwatches();\n                    ev.preventDefault();\n                });\n\n                elements.swatches_reset.on(\"click\", function(ev) {\n                    _resetSwatches();\n                    ev.preventDefault();\n                });\n\n                elements.sliders.hue.parent().on(\"touchstart mousedown\", function(ev) {\n                    ev.preventDefault();\n\n                    if (ev.which > 1) {\n                        return;\n                    }\n\n                    dragTarget = \"hue\";\n\n                    var percent = _updateMarkerPosition(dragTarget, ev);\n\n                    _updateColorsProperty('hsla', 'h', 3.6 * percent);\n\n                    _updateAllElements();\n                });\n\n                elements.sliders.saturation.parent().on(\"touchstart mousedown\", function(ev) {\n                    ev.preventDefault();\n\n                    if (ev.which > 1) {\n                        return;\n                    }\n\n                    dragTarget = \"saturation\";\n\n                    var percent = _updateMarkerPosition(dragTarget, ev);\n\n                    _updateColorsProperty('hsla', 's', percent / 100);\n\n                    _updateAllElements();\n                });\n\n                elements.sliders.lightness.parent().on(\"touchstart mousedown\", function(ev) {\n                    ev.preventDefault();\n\n                    if (ev.which > 1) {\n                        return;\n                    }\n\n                    dragTarget = \"lightness\";\n\n                    var percent = _updateMarkerPosition(dragTarget, ev);\n\n                    _updateColorsProperty('hsla', 'l', percent / 100);\n\n                    _updateAllElements();\n                });\n\n                elements.sliders.opacity.parent().on(\"touchstart mousedown\", function(ev) {\n                    ev.preventDefault();\n\n                    if (ev.which > 1) {\n                        return;\n                    }\n\n                    dragTarget = \"opacity\";\n\n                    var percent = _updateMarkerPosition(dragTarget, ev);\n\n                    _updateColorsProperty('hsla', 'a', percent / 100);\n\n                    _updateAllElements();\n                });\n\n                elements.sliders.red.parent().on(\"touchstart mousedown\", function(ev) {\n                    ev.preventDefault();\n\n                    if (ev.which > 1) {\n                        return;\n                    }\n\n                    dragTarget = \"red\";\n\n                    var percent = _updateMarkerPosition(dragTarget, ev);\n\n                    _updateColorsProperty('rgba', 'r', 2.55 * percent);\n\n                    _updateAllElements();\n                });\n\n                elements.sliders.green.parent().on(\"touchstart mousedown\", function(ev) {\n                    ev.preventDefault();\n\n                    if (ev.which > 1) {\n                        return;\n                    }\n\n                    dragTarget = \"green\";\n\n                    var percent = _updateMarkerPosition(dragTarget, ev);\n\n                    _updateColorsProperty('rgba', 'g', 2.55 * percent);\n\n                    _updateAllElements();\n                });\n\n                elements.sliders.blue.parent().on(\"touchstart mousedown\", function(ev) {\n                    ev.preventDefault();\n\n                    if (ev.which > 1) {\n                        return;\n                    }\n\n                    dragTarget = \"blue\";\n\n                    var percent = _updateMarkerPosition(dragTarget, ev);\n\n                    _updateColorsProperty('rgba', 'b', 2.55 * percent);\n\n                    _updateAllElements();\n                });\n\n                elements.sliders.cielightness.parent().on(\"touchstart mousedown\", function(ev) {\n                    ev.preventDefault();\n\n                    if (ev.which > 1) {\n                        return;\n                    }\n\n                    dragTarget = \"cielightness\";\n\n                    var percent = _updateMarkerPosition(dragTarget, ev);\n\n                    _updateColorsProperty('cielch', 'l', (MAXLIGHT / 100) * percent);\n\n                    _updateAllElements();\n                });\n\n                elements.sliders.ciechroma.parent().on(\"touchstart mousedown\", function(ev) {\n                    ev.preventDefault();\n\n                    if (ev.which > 1) {\n                        return;\n                    }\n\n                    dragTarget = \"ciechroma\";\n\n                    var percent = _updateMarkerPosition(dragTarget, ev);\n\n                    _updateColorsProperty('cielch', 'c', (MAXVALIDCHROMA / 100) * percent);\n\n                    _updateAllElements();\n                });\n\n                elements.sliders.ciehue.parent().on(\"touchstart mousedown\", function(ev) {\n                    ev.preventDefault();\n\n                    if (ev.which > 1) {\n                        return;\n                    }\n\n                    dragTarget = \"ciehue\";\n\n                    var percent = _updateMarkerPosition(dragTarget, ev);\n\n                    _updateColorsProperty('cielch', 'h', 3.6 * percent);\n\n                    _updateAllElements();\n                });\n\n                elements.sliders.preview.on(\"click\", function() {\n                    this.select();\n                });\n\n                $(document).on(\"touchmove mousemove\", function(ev) {\n                    if (!dragTarget) {\n                        return;\n                    }\n\n                    var percent = _updateMarkerPosition(dragTarget, ev);\n\n                    switch (dragTarget) {\n                        case \"hue\":\n                            _updateColorsProperty('hsla', 'h', 3.6 * percent);\n                            break;\n                        case \"saturation\":\n                            _updateColorsProperty('hsla', 's', percent / 100);\n                            break;\n                        case \"lightness\":\n                            _updateColorsProperty('hsla', 'l', percent / 100);\n                            break;\n                        case \"opacity\":\n                            _updateColorsProperty('hsla', 'a', percent / 100);\n                            break;\n                        case \"red\":\n                            _updateColorsProperty('rgba', 'r', 2.55 * percent);\n                            break;\n                        case \"green\":\n                            _updateColorsProperty('rgba', 'g', 2.55 * percent);\n                            break;\n                        case \"blue\":\n                            _updateColorsProperty('rgba', 'b', 2.55 * percent);\n                            break;\n                        case \"cielightness\":\n                            _updateColorsProperty('cielch', 'l', (MAXLIGHT / 100) * percent);\n                            break;\n                        case \"ciechroma\":\n                            _updateColorsProperty('cielch', 'c', (MAXVALIDCHROMA / 100) * percent);\n                            break;\n                        case \"ciehue\":\n                            _updateColorsProperty('cielch', 'h', 3.6 * percent);\n                            break;\n                    }\n\n                    _updateAllElements();\n\n                    ev.preventDefault();\n                });\n\n                $(document).on(\"touchend mouseup\", function(ev) {\n                    if (ev.which > 1) {\n                        return;\n                    }\n\n                    if (dragTarget) {\n                        dragTarget = false;\n                        ev.preventDefault();\n                    }\n                });\n\n                if (elements.connectedinput) {\n                    elements.connectedinput.on('keyup change', function() {\n                        var $input = $(this);\n\n                        updateColor($input.val(), true);\n                    });\n                }\n\n            }\n\n            function _parseCustomSwatches() {\n                swatches = [];\n\n                for (var i = 0; i < settings.swatches.length; i++) {\n                    var color = tinycolor(settings.swatches[i]);\n\n                    if (color.format) {\n                        swatches.push(color.toRgbString());\n                    }\n                }\n            }\n\n            function _renderSwatches() {\n                if (!settings.swatches) {\n                    return;\n                }\n\n                if (settings.customswatches) {\n                    var customswatches = false;\n\n                    try {\n                        customswatches = JSON.parse(localStorage.getItem(\"swatches-\" + settings.customswatches));\n                    }\n                    catch (err) {\n                    }\n\n                    if (customswatches) {\n                        swatches = customswatches;\n                    }\n                    else {\n                        _parseCustomSwatches();\n                    }\n                }\n                else {\n                    _parseCustomSwatches();\n                }\n\n                if (swatches instanceof Array) {\n                    elements.swatches.html(\"\");\n                    for (var i = 0; i < swatches.length; i++) {\n                        var color = tinycolor(swatches[i]);\n\n                        if (color.format) {\n                            elements.swatches.append($(\"<li></li>\").append($(\"<span></span>\").css(\"background-color\", color.toRgbString())));\n                        }\n                    }\n                }\n\n                _findActualColorsSwatch();\n            }\n\n            function _findActualColorsSwatch() {\n                var found = false;\n\n                $(\"span\", elements.swatches).filter(function() {\n                    var swatchcolor = $(this).css('background-color');\n\n                    swatchcolor = tinycolor(swatchcolor);\n                    swatchcolor.alpha = Math.round(swatchcolor.alpha * 100) / 100;\n\n                    if (swatchcolor.toRgbString() === color.tiny.toRgbString()) {\n                        found = true;\n\n                        var currentswatch = $(this).parent();\n\n                        if (!currentswatch.is(elements.actualswatch)) {\n                            if (elements.actualswatch) {\n                                elements.actualswatch.removeClass(\"actual\");\n                            }\n                            elements.actualswatch = currentswatch;\n                            currentswatch.addClass(\"actual\");\n                        }\n                    }\n                });\n\n                if (!found) {\n                    if (elements.actualswatch) {\n                        elements.actualswatch.removeClass(\"actual\");\n                        elements.actualswatch = false;\n                    }\n                }\n\n                if (elements.actualswatch) {\n                    elements.swatches_add.prop(\"disabled\", true);\n                    elements.swatches_remove.prop(\"disabled\", false);\n                }\n                else {\n                    elements.swatches_add.prop(\"disabled\", false);\n                    elements.swatches_remove.prop(\"disabled\", true);\n                }\n            }\n\n            function _storeSwatches() {\n                localStorage.setItem(\"swatches-\" + settings.customswatches, JSON.stringify(swatches));\n            }\n\n            function _addCurrentColorToSwatches() {\n                swatches.unshift(color.tiny.toRgbString());\n                _storeSwatches();\n\n                $(document).trigger(\"colorpickersliders.changeswatches\");\n            }\n\n            function _removeActualColorFromSwatches() {\n                var index = swatches.indexOf(color.tiny.toRgbString());\n\n                if (index !== -1) {\n                    swatches.splice(index, 1);\n\n                    _storeSwatches();\n                    $(document).trigger(\"colorpickersliders.changeswatches\");\n                }\n            }\n\n            function _resetSwatches() {\n                if (confirm(\"Do you really want to reset the swatches? All customizations will be lost!\")) {\n                    _parseCustomSwatches();\n\n                    _storeSwatches();\n\n                    $(document).trigger(\"colorpickersliders.changeswatches\");\n                }\n            }\n\n            function _updateColorsProperty(format, property, value) {\n                switch (format) {\n                    case 'hsla':\n\n                        color.hsla[property] = value;\n                        color.tiny = tinycolor({h: color.hsla.h, s: color.hsla.s, l: color.hsla.l, a: color.hsla.a});\n                        color.rgba = color.tiny.toRgb();\n                        color.cielch = $.fn.ColorPickerSliders.rgb2lch(color.rgba);\n\n                        container.removeClass(\"cp-unconvertible-cie-color\");\n\n                        break;\n\n                    case 'rgba':\n\n                        color.rgba[property] = value;\n                        color.tiny = tinycolor({r: color.rgba.r, g: color.rgba.g, b: color.rgba.b, a: color.hsla.a});\n                        color.hsla = color.tiny.toHsl();\n                        color.cielch = $.fn.ColorPickerSliders.rgb2lch(color.rgba);\n\n                        container.removeClass(\"cp-unconvertible-cie-color\");\n\n                        break;\n\n                    case 'cielch':\n\n                        color.cielch[property] = value;\n                        color.rgba = $.fn.ColorPickerSliders.lch2rgb(color.cielch);\n                        color.tiny = tinycolor(color.rgba);\n                        color.hsla = color.tiny.toHsl();\n\n                        if (settings.erroneousciecolormarkers) {\n                            if (color.rgba.isok) {\n                                container.removeClass(\"cp-unconvertible-cie-color\");\n                            }\n                            else {\n                                container.addClass(\"cp-unconvertible-cie-color\");\n                            }\n                        }\n\n                        break;\n                }\n            }\n\n            function _updateMarkerPosition(slidername, ev) {\n                var percent = $.fn.ColorPickerSliders.calculateEventPositionPercentage(ev, elements.sliders[slidername]);\n\n                elements.sliders[slidername + '_marker'].data(\"position\", percent);\n\n                return percent;\n            }\n\n            var updateAllElementsTimeout;\n\n            function _updateAllElementsTimer(disableinputupdate) {\n                updateAllElementsTimeout = setTimeout(function() {\n                    _updateAllElements(disableinputupdate);\n                }, settings.updateinterval);\n            }\n\n            function _updateAllElements(disableinputupdate) {\n                clearTimeout(updateAllElementsTimeout);\n\n                $(document).trigger('colorpickersliders._updateAllElements');\n\n                if (Date.now() - lastUpdateTime < settings.updateinterval) {\n                    _updateAllElementsTimer(disableinputupdate);\n                    return;\n                }\n\n                if (typeof disableinputupdate === \"undefined\") {\n                    disableinputupdate = false;\n                }\n\n                lastUpdateTime = Date.now();\n\n                if (settings.order.opacity !== false) {\n                    _renderOpacity();\n                }\n\n                if (settings.order.hsl !== false) {\n                    _renderHue();\n                    _renderSaturation();\n                    _renderLightness();\n                }\n\n                if (settings.order.rgb !== false) {\n                    _renderRed();\n                    _renderGreen();\n                    _renderBlue();\n                }\n\n                if (settings.order.cie !== false) {\n                    _renderCieLightness();\n                    _renderCieChroma();\n                    _renderCieHue();\n                }\n\n                if (settings.order.preview !== false) {\n                    _renderPreview();\n                }\n\n                if (!disableinputupdate) {\n                    _updateConnectedInput();\n                }\n\n                if ((100 - color.cielch.l) * color.cielch.a < settings.previewcontrasttreshold) {\n                    elements.all_sliders.css('color', '#000');\n                    if (settings.previewontriggerelement) {\n                        triggerelement.css('background', color.tiny.toRgbString()).css('color', '#000');\n                    }\n                }\n                else {\n                    elements.all_sliders.css('color', '#fff');\n                    if (settings.previewontriggerelement) {\n                        triggerelement.css('background', color.tiny.toRgbString()).css('color', '#fff');\n                    }\n                }\n\n                _findActualColorsSwatch();\n\n                settings.onchange(container, color);\n            }\n\n            function _updateConnectedInput() {\n                if (elements.connectedinput) {\n                    elements.connectedinput.each(function(index, element) {\n                        var $element = $(element);\n\n                        switch ($element.data('color-format')) {\n                            case 'hex':\n                                $element.val(color.tiny.toHexString());\n                                break;\n                            case 'hsl':\n                                $element.val(color.tiny.toHslString());\n                                break;\n                            case 'rgb':\n                                /* falls through */\n                            default:\n                                $element.val(color.tiny.toRgbString());\n                                break;\n                        }\n                    });\n                }\n            }\n\n            function _renderHue() {\n                $.fn.ColorPickerSliders.setGradient(elements.sliders.hue, $.fn.ColorPickerSliders.getScaledGradientStops(color.hsla, \"h\", 0, 360, 7));\n\n                elements.sliders.hue_marker.css(\"left\", color.hsla.h / 360 * 100 + \"%\");\n            }\n\n            function _renderSaturation() {\n                $.fn.ColorPickerSliders.setGradient(elements.sliders.saturation, $.fn.ColorPickerSliders.getScaledGradientStops(color.hsla, \"s\", 0, 1, 2));\n\n                elements.sliders.saturation_marker.css(\"left\", color.hsla.s * 100 + \"%\");\n            }\n\n            function _renderLightness() {\n                $.fn.ColorPickerSliders.setGradient(elements.sliders.lightness, $.fn.ColorPickerSliders.getScaledGradientStops(color.hsla, \"l\", 0, 1, 3));\n\n                elements.sliders.lightness_marker.css(\"left\", color.hsla.l * 100 + \"%\");\n            }\n\n            function _renderOpacity() {\n                $.fn.ColorPickerSliders.setGradient(elements.sliders.opacity, $.fn.ColorPickerSliders.getScaledGradientStops(color.hsla, \"a\", 0, 1, 2));\n\n                elements.sliders.opacity_marker.css(\"left\", color.hsla.a * 100 + \"%\");\n            }\n\n            function _renderRed() {\n                $.fn.ColorPickerSliders.setGradient(elements.sliders.red, $.fn.ColorPickerSliders.getScaledGradientStops(color.rgba, \"r\", 0, 255, 2));\n\n                elements.sliders.red_marker.css(\"left\", color.rgba.r / 255 * 100 + \"%\");\n            }\n\n            function _renderGreen() {\n                $.fn.ColorPickerSliders.setGradient(elements.sliders.green, $.fn.ColorPickerSliders.getScaledGradientStops(color.rgba, \"g\", 0, 255, 2));\n\n                elements.sliders.green_marker.css(\"left\", color.rgba.g / 255 * 100 + \"%\");\n            }\n\n            function _renderBlue() {\n                $.fn.ColorPickerSliders.setGradient(elements.sliders.blue, $.fn.ColorPickerSliders.getScaledGradientStops(color.rgba, \"b\", 0, 255, 2));\n\n                elements.sliders.blue_marker.css(\"left\", color.rgba.b / 255 * 100 + \"%\");\n            }\n\n            function _extendCieGradientStops(gradientstops, property) {\n                if (settings.invalidcolorsopacity === 1 || !settings.finercierangeedges) {\n                    return gradientstops;\n                }\n\n                gradientstops.sort(function(a, b) {\n                    return a.position - b.position;\n                });\n\n                var tmparray = [];\n\n                for (var i = 1; i < gradientstops.length; i++) {\n                    if (gradientstops[i].isok !== gradientstops[i - 1].isok) {\n                        var steps = Math.round(gradientstops[i].position) - Math.round(gradientstops[i - 1].position),\n                                extendedgradientstops = $.fn.ColorPickerSliders.getScaledGradientStops(gradientstops[i].rawcolor, property, gradientstops[i - 1].rawcolor[property], gradientstops[i].rawcolor[property], steps, settings.invalidcolorsopacity, gradientstops[i - 1].position, gradientstops[i].position);\n\n                        for (var j = 0; j < extendedgradientstops.length; j++) {\n                            if (extendedgradientstops[j].isok !== gradientstops[i - 1].isok) {\n                                tmparray.push(extendedgradientstops[j]);\n\n                                if (j > 0) {\n                                    tmparray.push(extendedgradientstops[j - 1]);\n                                }\n\n                                break;\n                            }\n                        }\n                    }\n                }\n\n                return $.merge(tmparray, gradientstops);\n            }\n\n            function _renderCieLightness() {\n                var gradientstops = $.fn.ColorPickerSliders.getScaledGradientStops(color.cielch, \"l\", 0, 100, 10, settings.invalidcolorsopacity);\n\n                gradientstops = _extendCieGradientStops(gradientstops, \"l\");\n\n                $.fn.ColorPickerSliders.setGradient(elements.sliders.cielightness, gradientstops);\n\n                elements.sliders.cielightness_marker.css(\"left\", color.cielch.l / MAXLIGHT * 100 + \"%\");\n            }\n\n            function _renderCieChroma() {\n                var gradientstops = $.fn.ColorPickerSliders.getScaledGradientStops(color.cielch, \"c\", 0, MAXVALIDCHROMA, 5, settings.invalidcolorsopacity);\n\n                gradientstops = _extendCieGradientStops(gradientstops, \"c\");\n\n                $.fn.ColorPickerSliders.setGradient(elements.sliders.ciechroma, gradientstops);\n\n                elements.sliders.ciechroma_marker.css(\"left\", color.cielch.c / MAXVALIDCHROMA * 100 + \"%\");\n            }\n\n            function _renderCieHue() {\n                var gradientstops = $.fn.ColorPickerSliders.getScaledGradientStops(color.cielch, \"h\", 0, 360, 28, settings.invalidcolorsopacity);\n\n                gradientstops = _extendCieGradientStops(gradientstops, \"h\");\n\n                $.fn.ColorPickerSliders.setGradient(elements.sliders.ciehue, gradientstops);\n\n                elements.sliders.ciehue_marker.css(\"left\", color.cielch.h / 360 * 100 + \"%\");\n            }\n\n            function _renderPreview() {\n                elements.sliders.preview.css(\"background\", $.fn.ColorPickerSliders.csscolor(color.rgba));\n\n                var colorstring;\n\n                switch (settings.previewformat) {\n                    case 'hex':\n                        colorstring = color.tiny.toHexString();\n                        break;\n                    case 'hsl':\n                        colorstring = color.tiny.toHslString();\n                        break;\n                    case 'rgb':\n                        /* falls through */\n                    default:\n                        colorstring = color.tiny.toRgbString();\n                        break;\n                }\n\n                elements.sliders.preview.val(colorstring);\n            }\n\n        });\n\n    };\n\n    $.fn.ColorPickerSliders.getEventCoordinates = function(ev) {\n        if (typeof ev.pageX !== \"undefined\") {\n            return {\n                pageX: ev.originalEvent.pageX,\n                pageY: ev.originalEvent.pageY\n            };\n        }\n        else if (typeof ev.originalEvent.touches !== \"undefined\") {\n            return {\n                pageX: ev.originalEvent.touches[0].pageX,\n                pageY: ev.originalEvent.touches[0].pageY\n            };\n        }\n    };\n\n    $.fn.ColorPickerSliders.calculateEventPositionPercentage = function(ev, containerElement) {\n        var c = $.fn.ColorPickerSliders.getEventCoordinates(ev);\n\n        var xsize = containerElement.width(),\n                offsetX = c.pageX - containerElement.offset().left;\n\n        var percent = offsetX / xsize * 100;\n\n        if (percent < 0) {\n            percent = 0;\n        }\n\n        if (percent > 100) {\n            percent = 100;\n        }\n\n        return percent;\n    };\n\n    $.fn.ColorPickerSliders.gradientSupported = function() {\n        var testelement = document.createElement('detectGradientSupport').style;\n\n        testelement.backgroundImage = \"linear-gradient(left top, #9f9, white)\";\n        testelement.backgroundImage = \"-o-linear-gradient(left top, #9f9, white)\";\n        testelement.backgroundImage = \"-moz-linear-gradient(left top, #9f9, white)\";\n        testelement.backgroundImage = \"-webkit-linear-gradient(left top, #9f9, white)\";\n        testelement.backgroundImage = \"-ms-linear-gradient(left top, #9f9, white)\";\n        testelement.backgroundImage = \"-webkit-gradient(linear, left top, right bottom, from(#9f9), to(white))\";\n\n        if (testelement.backgroundImage.indexOf(\"gradient\") === -1) {\n            return false;\n        }\n        else {\n            return true;\n        }\n    };\n\n    $.fn.ColorPickerSliders.getScaledGradientStops = function(color, scalableproperty, minvalue, maxvalue, steps, invalidcolorsopacity, minposition, maxposition) {\n        if (typeof invalidcolorsopacity === \"undefined\") {\n            invalidcolorsopacity = 1;\n        }\n\n        if (typeof minposition === \"undefined\") {\n            minposition = 0;\n        }\n\n        if (typeof maxposition === \"undefined\") {\n            maxposition = 100;\n        }\n\n        var gradientStops = [],\n                diff = maxvalue - minvalue,\n                isok = true;\n\n        for (var i = 0; i < steps; ++i) {\n            var currentstage = i / (steps - 1),\n                    modifiedcolor = $.fn.ColorPickerSliders.modifyColor(color, scalableproperty, currentstage * diff + minvalue),\n                    csscolor;\n\n            if (invalidcolorsopacity < 1) {\n                var stagergb = $.fn.ColorPickerSliders.lch2rgb(modifiedcolor, invalidcolorsopacity);\n\n                isok = stagergb.isok;\n                csscolor = $.fn.ColorPickerSliders.csscolor(stagergb, invalidcolorsopacity);\n            }\n            else {\n                csscolor = $.fn.ColorPickerSliders.csscolor(modifiedcolor, invalidcolorsopacity);\n            }\n\n            gradientStops[i] = {\n                color: csscolor,\n                position: currentstage * (maxposition - minposition) + minposition,\n                isok: isok,\n                rawcolor: modifiedcolor\n            };\n        }\n\n        return gradientStops;\n    };\n\n    $.fn.ColorPickerSliders.setGradient = function(element, gradientstops) {\n        gradientstops.sort(function(a, b) {\n            return a.position - b.position;\n        });\n\n        var gradientstring = \"\",\n                oldwebkitgradientstring = \"\",\n                noprefix = \"linear-gradient(to right\",\n                webkit = \"-webkit-linear-gradient(left\",\n                oldwebkit = \"-webkit-gradient(linear, left top, right top\";\n\n\n        for (var i = 0; i < gradientstops.length; i++) {\n            var el = gradientstops[i];\n\n            gradientstring += \",\" + el.color + \" \" + el.position + \"%\";\n            oldwebkitgradientstring += \",color-stop(\" + el.position + \"%,\" + el.color + \")\";\n        }\n\n        gradientstring += \")\";\n        oldwebkitgradientstring += \")\";\n\n        oldwebkit += oldwebkitgradientstring;\n        webkit += gradientstring;\n        noprefix += gradientstring;\n\n        element.css(\"background\", oldwebkit);\n        element.css(\"background\", webkit);\n        element.css(\"background\", noprefix);\n    };\n\n    $.fn.ColorPickerSliders.isGoodRgb = function(rgb) {\n        // the default acceptable values are out of 0..255 due to\n        // rounding errors with yellow and blue colors (258, -1)\n        var maxacceptable = 258;\n        var minacceptable = -1;\n\n        if (rgb.r > maxacceptable || rgb.g > maxacceptable || rgb.b > maxacceptable || rgb.r < minacceptable || rgb.g < minacceptable || rgb.b < minacceptable) {\n            return false;\n        }\n        else {\n            rgb.r = Math.min(255, rgb.r);\n            rgb.g = Math.min(255, rgb.g);\n            rgb.b = Math.min(255, rgb.b);\n            rgb.r = Math.max(0, rgb.r);\n            rgb.g = Math.max(0, rgb.g);\n            rgb.b = Math.max(0, rgb.b);\n\n            return true;\n        }\n    };\n\n    $.fn.ColorPickerSliders.rgb2lch = function(rgb) {\n        var lch = $.fn.ColorPickerSliders.CIELab2CIELCH($.fn.ColorPickerSliders.XYZ2CIELab($.fn.ColorPickerSliders.rgb2XYZ(rgb)));\n\n        if (rgb.hasOwnProperty('a')) {\n            lch.a = rgb.a;\n        }\n\n        return lch;\n    };\n\n    $.fn.ColorPickerSliders.lch2rgb = function(lch, invalidcolorsopacity) {\n        if (typeof invalidcolorsopacity === \"undefined\") {\n            invalidcolorsopacity = 1;\n        }\n\n        var rgb = $.fn.ColorPickerSliders.XYZ2rgb($.fn.ColorPickerSliders.CIELab2XYZ($.fn.ColorPickerSliders.CIELCH2CIELab(lch)));\n\n        if ($.fn.ColorPickerSliders.isGoodRgb(rgb)) {\n            if (lch.hasOwnProperty('a')) {\n                rgb.a = lch.a;\n            }\n\n            rgb.isok = true;\n\n            return rgb;\n        }\n\n        var tmp = $.extend({}, lch),\n                lastbadchroma = tmp.c,\n                lastgoodchroma = -1,\n                loops = 0;\n\n        do {\n            ++loops;\n\n            tmp.c = lastgoodchroma + ((lastbadchroma - lastgoodchroma) / 2);\n\n            rgb = $.fn.ColorPickerSliders.XYZ2rgb($.fn.ColorPickerSliders.CIELab2XYZ($.fn.ColorPickerSliders.CIELCH2CIELab(tmp)));\n\n            if ($.fn.ColorPickerSliders.isGoodRgb(rgb)) {\n                lastgoodchroma = tmp.c;\n            }\n            else {\n                lastbadchroma = tmp.c;\n            }\n        } while (Math.abs(lastbadchroma - lastgoodchroma) > 0.9 && loops < 100);\n\n        if (lch.hasOwnProperty('a')) {\n            rgb.a = lch.a;\n        }\n\n        rgb.r = Math.max(0, rgb.r);\n        rgb.g = Math.max(0, rgb.g);\n        rgb.b = Math.max(0, rgb.b);\n\n        rgb.r = Math.min(255, rgb.r);\n        rgb.g = Math.min(255, rgb.g);\n        rgb.b = Math.min(255, rgb.b);\n\n        if (invalidcolorsopacity < 1) {\n            if (rgb.hasOwnProperty('a')) {\n                rgb.a = rgb.a * invalidcolorsopacity;\n            }\n            else {\n                rgb.a = invalidcolorsopacity;\n            }\n        }\n\n        rgb.isok = false;\n\n        return rgb;\n    };\n\n    $.fn.ColorPickerSliders.modifyColor = function(color, property, value) {\n        var modifiedcolor = $.extend({}, color);\n\n        if (!color.hasOwnProperty(property)) {\n            throw(\"Missing color property: \" + property);\n        }\n\n        modifiedcolor[property] = value;\n\n        return modifiedcolor;\n    };\n\n    $.fn.ColorPickerSliders.csscolor = function(color, invalidcolorsopacity) {\n        if (typeof invalidcolorsopacity === \"undefined\") {\n            invalidcolorsopacity = 1;\n        }\n\n        var $return = false,\n                tmpcolor = $.extend({}, color);\n\n        if (tmpcolor.hasOwnProperty('c')) {\n            // CIE-LCh\n            tmpcolor = $.fn.ColorPickerSliders.lch2rgb(tmpcolor, invalidcolorsopacity);\n        }\n\n        if (tmpcolor.hasOwnProperty('h')) {\n            // HSL\n            $return = \"hsla(\" + tmpcolor.h + \",\" + tmpcolor.s * 100 + \"%,\" + tmpcolor.l * 100 + \"%,\" + tmpcolor.a + \")\";\n        }\n\n        if (tmpcolor.hasOwnProperty('r')) {\n            // RGB\n            if (tmpcolor.a < 1) {\n                $return = \"rgba(\" + Math.round(tmpcolor.r) + \",\" + Math.round(tmpcolor.g) + \",\" + Math.round(tmpcolor.b) + \",\" + tmpcolor.a + \")\";\n            }\n            else {\n                $return = \"rgb(\" + Math.round(tmpcolor.r) + \",\" + Math.round(tmpcolor.g) + \",\" + Math.round(tmpcolor.b) + \")\";\n            }\n        }\n\n        return $return;\n    };\n\n    $.fn.ColorPickerSliders.rgb2XYZ = function(rgb) {\n        var XYZ = {};\n\n        var r = (rgb.r / 255);\n        var g = (rgb.g / 255);\n        var b = (rgb.b / 255);\n\n        if (r > 0.04045) {\n            r = Math.pow(((r + 0.055) / 1.055), 2.4);\n        }\n        else {\n            r = r / 12.92;\n        }\n\n        if (g > 0.04045) {\n            g = Math.pow(((g + 0.055) / 1.055), 2.4);\n        }\n        else {\n            g = g / 12.92;\n        }\n\n        if (b > 0.04045) {\n            b = Math.pow(((b + 0.055) / 1.055), 2.4);\n        }\n        else {\n            b = b / 12.92;\n        }\n\n        r = r * 100;\n        g = g * 100;\n        b = b * 100;\n\n        // Observer = 2°, Illuminant = D65\n        XYZ.x = r * 0.4124 + g * 0.3576 + b * 0.1805;\n        XYZ.y = r * 0.2126 + g * 0.7152 + b * 0.0722;\n        XYZ.z = r * 0.0193 + g * 0.1192 + b * 0.9505;\n\n        return XYZ;\n    };\n\n    $.fn.ColorPickerSliders.XYZ2CIELab = function(XYZ) {\n        var CIELab = {};\n\n        // Observer = 2°, Illuminant = D65\n        var X = XYZ.x / 95.047;\n        var Y = XYZ.y / 100.000;\n        var Z = XYZ.z / 108.883;\n\n        if (X > 0.008856) {\n            X = Math.pow(X, 0.333333333);\n        }\n        else {\n            X = 7.787 * X + 0.137931034;\n        }\n\n        if (Y > 0.008856) {\n            Y = Math.pow(Y, 0.333333333);\n        }\n        else {\n            Y = 7.787 * Y + 0.137931034;\n        }\n\n        if (Z > 0.008856) {\n            Z = Math.pow(Z, 0.333333333);\n        }\n        else {\n            Z = 7.787 * Z + 0.137931034;\n        }\n\n        CIELab.l = (116 * Y) - 16;\n        CIELab.a = 500 * (X - Y);\n        CIELab.b = 200 * (Y - Z);\n\n        return CIELab;\n    };\n\n    $.fn.ColorPickerSliders.CIELab2CIELCH = function(CIELab) {\n        var CIELCH = {};\n\n        CIELCH.l = CIELab.l;\n        CIELCH.c = Math.sqrt(Math.pow(CIELab.a, 2) + Math.pow(CIELab.b, 2));\n\n        CIELCH.h = Math.atan2(CIELab.b, CIELab.a);  //Quadrant by signs\n\n        if (CIELCH.h > 0) {\n            CIELCH.h = (CIELCH.h / Math.PI) * 180;\n        }\n        else {\n            CIELCH.h = 360 - (Math.abs(CIELCH.h) / Math.PI) * 180;\n        }\n\n        return CIELCH;\n    };\n\n    $.fn.ColorPickerSliders.CIELCH2CIELab = function(CIELCH) {\n        var CIELab = {};\n\n        CIELab.l = CIELCH.l;\n        CIELab.a = Math.cos(CIELCH.h * 0.01745329251) * CIELCH.c;\n        CIELab.b = Math.sin(CIELCH.h * 0.01745329251) * CIELCH.c;\n\n        return CIELab;\n    };\n\n    $.fn.ColorPickerSliders.CIELab2XYZ = function(CIELab) {\n        var XYZ = {};\n\n        XYZ.y = (CIELab.l + 16) / 116;\n        XYZ.x = CIELab.a / 500 + XYZ.y;\n        XYZ.z = XYZ.y - CIELab.b / 200;\n\n        if (Math.pow(XYZ.y, 3) > 0.008856) {\n            XYZ.y = Math.pow(XYZ.y, 3);\n        }\n        else {\n            XYZ.y = (XYZ.y - 0.137931034) / 7.787;\n        }\n\n        if (Math.pow(XYZ.x, 3) > 0.008856) {\n            XYZ.x = Math.pow(XYZ.x, 3);\n        }\n        else {\n            XYZ.x = (XYZ.x - 0.137931034) / 7.787;\n        }\n\n        if (Math.pow(XYZ.z, 3) > 0.008856) {\n            XYZ.z = Math.pow(XYZ.z, 3);\n        }\n        else {\n            XYZ.z = (XYZ.z - 0.137931034) / 7.787;\n        }\n\n        // Observer = 2°, Illuminant = D65\n        XYZ.x = 95.047 * XYZ.x;\n        XYZ.y = 100.000 * XYZ.y;\n        XYZ.z = 108.883 * XYZ.z;\n\n        return XYZ;\n    };\n\n    $.fn.ColorPickerSliders.XYZ2rgb = function(XYZ) {\n        var rgb = {};\n\n        // Observer = 2°, Illuminant = D65\n        XYZ.x = XYZ.x / 100;        // X from 0 to 95.047\n        XYZ.y = XYZ.y / 100;        // Y from 0 to 100.000\n        XYZ.z = XYZ.z / 100;        // Z from 0 to 108.883\n\n        rgb.r = XYZ.x * 3.2406 + XYZ.y * -1.5372 + XYZ.z * -0.4986;\n        rgb.g = XYZ.x * -0.9689 + XYZ.y * 1.8758 + XYZ.z * 0.0415;\n        rgb.b = XYZ.x * 0.0557 + XYZ.y * -0.2040 + XYZ.z * 1.0570;\n\n        if (rgb.r > 0.0031308) {\n            rgb.r = 1.055 * (Math.pow(rgb.r, 0.41666667)) - 0.055;\n        }\n        else {\n            rgb.r = 12.92 * rgb.r;\n        }\n\n        if (rgb.g > 0.0031308) {\n            rgb.g = 1.055 * (Math.pow(rgb.g, 0.41666667)) - 0.055;\n        }\n        else {\n            rgb.g = 12.92 * rgb.g;\n        }\n\n        if (rgb.b > 0.0031308) {\n            rgb.b = 1.055 * (Math.pow(rgb.b, 0.41666667)) - 0.055;\n        }\n        else {\n            rgb.b = 12.92 * rgb.b;\n        }\n\n        rgb.r = Math.round(rgb.r * 255);\n        rgb.g = Math.round(rgb.g * 255);\n        rgb.b = Math.round(rgb.b * 255);\n\n        return rgb;\n    };\n\n})(jQuery);\n","/**\n * Ajax functions, used in Panel\n */\n\n\nvar AwesomeAjax = function(prefix){\n    'use strict';\n\n    var $ = jQuery; // enable jQuery\n    var self = this;\n    var prefix = prefix + '_';\n    self.result = {};\n\n\n\n    // Load model data from WP\n    self.load_model = function(model_name, item_id, callback_success, callback_error){\n        return self.ajax({\n            action: prefix + 'get_' + model_name,\n            data: {\n                'id': item_id\n            },\n            success_handler: callback_success,\n            error_handler: callback_error\n        });\n    };\n\n    self.publish_model = function (id, callback_success, callback_error) {\n        return self.ajax({\n            action: prefix + 'publish_model',\n            data: {\n                'id': id\n            },\n            success_handler: callback_success,\n            error_handler: callback_error\n        });\n    }\n\n    // delete model by ID and model name\n    self.delete_model = function(id, model_name){\n        return self.ajax({\n            action: prefix + 'delete_model',\n            data: {\n                'id': id,\n                'model_name': model_name\n            },\n            success_handler: function (result) {\n                return result;\n            }\n        });\n    };\n\n    // WP AJAX wrapper\n    self.ajax = function (args) {\n        return $.ajax({\n            url: window[prefix + 'localize']['ajaxurl'],\n            type: 'post',\n            data: {\n                action: args.action,\n                security: window[prefix + 'localize']['ajax_nonce'],\n                data: args.data || {}\n            },\n            success: function (data) {\n                var responseArray = wpAjax.parseAjaxResponse(data);\n                if(responseArray.errors){\n                    var errors =  responseArray.responses[0].errors;\n                    args.success_error_handler(errors)\n                }else{\n                    var result = JSON.parse(responseArray.responses[0].data);\n                    args.success_handler(result);\n                }\n            },\n            error: function (data) {\n                args.error_handler(data);\n            }\n        });\n    }\n};","/**\n * System functions\n */\nvar AwesomeUtil = {\n    // detect OS\n    detect_os: function () {\n        var os_name = \"Unknown OS\";\n        if (navigator.appVersion.indexOf(\"Win\") != -1) os_name = \"Windows\";\n        if (navigator.appVersion.indexOf(\"Mac\") != -1) os_name = \"MacOS\";\n        if (navigator.appVersion.indexOf(\"X11\") != -1) os_name = \"UNIX\";\n        if (navigator.appVersion.indexOf(\"Linux\") != -1) os_name = \"Linux\";\n        return os_name;\n    },\n\n    // convert array to object\n    toObject: function (arr) {\n        var rv = {};\n        for (var i = 0; i < arr.length; ++i) {\n            if (typeof arr[i] === 'object') {\n                rv[i] = AwesomeUtil.toObject(arr[i]);\n            } else {\n                rv[i] = arr[i];\n            }\n        }\n        return rv;\n    },\n\n    // helper function to find some value in array of objects\n    find_in_array_of_objects: function (array, key, value){\n        var result = false;\n        jQuery.each(array, function(index, item){\n            if(item.hasOwnProperty(key) && item[key] == value){\n                result = true;\n            }\n        });\n        return result;\n    },\n\n    // convert HEX color to RGB color\n    hex_to_rgb: function (hex){\n        hex = parseInt(hex, 16);\n        var r = hex >> 16;\n        var g = hex >> 8 & 0xFF;\n        var b = hex & 0xFF;\n        return [r,g,b];\n    },\n\n    // calculate size properly\n    calc_size: function (raw){\n        raw = ''+raw;\n        if(raw.endsWith('%') || raw.endsWith('px')){\n            return raw;\n        }\n        var result = raw.replace('/[^0-9]/', '');\n        return result + 'px';\n    },\n\n    // clean number from non-digit characters\n    clean_number: function (raw) {\n        return parseInt(raw.replace(/\\D+/g, ''));\n    },\n\n    get_keys: function (obj){\n        var result = {};\n        var i = 0;\n        _.each(obj, function (value, key, list) {\n            if(typeof value === 'object'){\n                result[i] = AwesomeUtil.get_keys(value);\n            }else{\n                result[i] = key;\n            }\n            i++;\n        });\n        return result;\n    },\n\n    find_key_by_value: function (needle, haystack) {\n        var result;\n        _.find(haystack, function(value, key){\n            if(typeof value === 'object'){\n                result = AwesomeUtil.find_key_by_value(needle, value);\n            }else{\n                if (value === needle) {\n                    result = key;\n                    return true;\n                }else{\n                    return false;\n                }\n            }\n        });\n        return result;\n    },\n\n    find_index_by_value: function (needle, haystack) {\n        var keys = AwesomeUtil.get_keys(haystack);\n        var key = AwesomeUtil.find_key_by_value(needle, haystack);\n        var result = AwesomeUtil.find_key_by_value(key, keys);\n\n        return result;\n    },\n\n    removeClass: function (el, start_with) {\n        jQuery(el).removeClass (function (index, css) {\n            var regex = new RegExp('(^|\\\\s)' + start_with + '\\\\S+', 'g');\n            return (css.match (regex) || []).join(' ');\n        });\n    }\n};\n\n// smart replace for templates\nString.prototype.replace_all = function(find, replace){\n    return this.replace(new RegExp(find, 'g'), replace);\n};\n\n// capitalize\nString.prototype.capitalize = function () {\n    return this.charAt(0).toUpperCase() + this.slice(1);\n};\n\n// check string ends with special characters\nString.prototype.endsWith = function(end){\n    return this.indexOf(end, this.length - end.length) !== -1;\n};\n\n// 10/19 removed due to conflict\n// Array last item\n/*if (!Array.prototype.last){\n    Array.prototype.last = function(){\n        return this[this.length - 1];\n    };\n};*/\n\nvar $ = jQuery;\n// check if element visible on screen\n$.fn.isVisible = function (parent) {\n    var $parent = parent !== 'undefined' ? $(parent) : $(window);\n    var windowScrollTopView = $parent.scrollTop();\n    var elemTop = $(this).height();\n    return (\n        elemTop >= windowScrollTopView\n    );\n};","/*\n * jQuery.fontselect - A font selector for the Google Web Fonts api\n * Tom Moor, http://tommoor.com\n * Copyright (c) 2011 Tom Moor\n * MIT Licensed\n * @version 0.1\n */\n\n(function ($) {\n\n    $.fn.fontselect = function (options) {\n\n        var __bind = function (fn, me) {\n            return function () {\n                return fn.apply(me, arguments);\n            };\n        };\n\n        var settings = {\n            fonts : [\"ABeeZee\",\"Abel\",\"Abril Fatface\",\"Aclonica\",\"Acme\",\"Actor\",\"Adamina\",\"Advent Pro\",\"Aguafina Script\",\"Akronim\",\"Aladin\",\"Aldrich\",\"Alef\",\"Alegreya\",\"Alegreya SC\",\"Alegreya Sans\",\"Alegreya Sans SC\",\"Alex Brush\",\"Alfa Slab One\",\"Alice\",\"Alike\",\"Alike Angular\",\"Allan\",\"Allerta\",\"Allerta Stencil\",\"Allura\",\"Almendra\",\"Almendra Display\",\"Almendra SC\",\"Amarante\",\"Amaranth\",\"Amatic SC\",\"Amethysta\",\"Amiri\",\"Amita\",\"Anaheim\",\"Andada\",\"Andika\",\"Angkor\",\"Annie Use Your Telescope\",\"Anonymous Pro\",\"Antic\",\"Antic Didone\",\"Antic Slab\",\"Anton\",\"Arapey\",\"Arbutus\",\"Arbutus Slab\",\"Architects Daughter\",\"Archivo Black\",\"Archivo Narrow\",\"Arimo\",\"Arizonia\",\"Armata\",\"Artifika\",\"Arvo\",\"Arya\",\"Asap\",\"Asar\",\"Asset\",\"Astloch\",\"Asul\",\"Atomic Age\",\"Aubrey\",\"Audiowide\",\"Autour One\",\"Average\",\"Average Sans\",\"Averia Gruesa Libre\",\"Averia Libre\",\"Averia Sans Libre\",\"Averia Serif Libre\",\"Bad Script\",\"Balthazar\",\"Bangers\",\"Basic\",\"Battambang\",\"Baumans\",\"Bayon\",\"Belgrano\",\"Belleza\",\"BenchNine\",\"Bentham\",\"Berkshire Swash\",\"Bevan\",\"Bigelow Rules\",\"Bigshot One\",\"Bilbo\",\"Bilbo Swash Caps\",\"Biryani\",\"Bitter\",\"Black Ops One\",\"Bokor\",\"Bonbon\",\"Boogaloo\",\"Bowlby One\",\"Bowlby One SC\",\"Brawler\",\"Bree Serif\",\"Bubblegum Sans\",\"Bubbler One\",\"Buda\",\"Buenard\",\"Butcherman\",\"Butterfly Kids\",\"Cabin\",\"Cabin Condensed\",\"Cabin Sketch\",\"Caesar Dressing\",\"Cagliostro\",\"Calligraffitti\",\"Cambay\",\"Cambo\",\"Candal\",\"Cantarell\",\"Cantata One\",\"Cantora One\",\"Capriola\",\"Cardo\",\"Carme\",\"Carrois Gothic\",\"Carrois Gothic SC\",\"Carter One\",\"Catamaran\",\"Caudex\",\"Caveat\",\"Caveat Brush\",\"Cedarville Cursive\",\"Ceviche One\",\"Changa One\",\"Chango\",\"Chau Philomene One\",\"Chela One\",\"Chelsea Market\",\"Chenla\",\"Cherry Cream Soda\",\"Cherry Swash\",\"Chewy\",\"Chicle\",\"Chivo\",\"Chonburi\",\"Cinzel\",\"Cinzel Decorative\",\"Clicker Script\",\"Coda\",\"Coda Caption\",\"Codystar\",\"Combo\",\"Comfortaa\",\"Coming Soon\",\"Concert One\",\"Condiment\",\"Content\",\"Contrail One\",\"Convergence\",\"Cookie\",\"Copse\",\"Corben\",\"Courgette\",\"Cousine\",\"Coustard\",\"Covered By Your Grace\",\"Crafty Girls\",\"Creepster\",\"Crete Round\",\"Crimson Text\",\"Croissant One\",\"Crushed\",\"Cuprum\",\"Cutive\",\"Cutive Mono\",\"Damion\",\"Dancing Script\",\"Dangrek\",\"Dawning of a New Day\",\"Days One\",\"Dekko\",\"Delius\",\"Delius Swash Caps\",\"Delius Unicase\",\"Della Respira\",\"Denk One\",\"Devonshire\",\"Dhurjati\",\"Didact Gothic\",\"Diplomata\",\"Diplomata SC\",\"Domine\",\"Donegal One\",\"Doppio One\",\"Dorsa\",\"Dosis\",\"Dr Sugiyama\",\"Droid Sans\",\"Droid Sans Mono\",\"Droid Serif\",\"Duru Sans\",\"Dynalight\",\"EB Garamond\",\"Eagle Lake\",\"Eater\",\"Economica\",\"Eczar\",\"Ek Mukta\",\"Electrolize\",\"Elsie\",\"Elsie Swash Caps\",\"Emblema One\",\"Emilys Candy\",\"Engagement\",\"Englebert\",\"Enriqueta\",\"Erica One\",\"Esteban\",\"Euphoria Script\",\"Ewert\",\"Exo\",\"Exo 2\",\"Expletus Sans\",\"Fanwood Text\",\"Fascinate\",\"Fascinate Inline\",\"Faster One\",\"Fasthand\",\"Fauna One\",\"Federant\",\"Federo\",\"Felipa\",\"Fenix\",\"Finger Paint\",\"Fira Mono\",\"Fira Sans\",\"Fjalla One\",\"Fjord One\",\"Flamenco\",\"Flavors\",\"Fondamento\",\"Fontdiner Swanky\",\"Forum\",\"Francois One\",\"Freckle Face\",\"Fredericka the Great\",\"Fredoka One\",\"Freehand\",\"Fresca\",\"Frijole\",\"Fruktur\",\"Fugaz One\",\"GFS Didot\",\"GFS Neohellenic\",\"Gabriela\",\"Gafata\",\"Galdeano\",\"Galindo\",\"Gentium Basic\",\"Gentium Book Basic\",\"Geo\",\"Geostar\",\"Geostar Fill\",\"Germania One\",\"Gidugu\",\"Gilda Display\",\"Give You Glory\",\"Glass Antiqua\",\"Glegoo\",\"Gloria Hallelujah\",\"Goblin One\",\"Gochi Hand\",\"Gorditas\",\"Goudy Bookletter 1911\",\"Graduate\",\"Grand Hotel\",\"Gravitas One\",\"Great Vibes\",\"Griffy\",\"Gruppo\",\"Gudea\",\"Gurajada\",\"Habibi\",\"Halant\",\"Hammersmith One\",\"Hanalei\",\"Hanalei Fill\",\"Handlee\",\"Hanuman\",\"Happy Monkey\",\"Headland One\",\"Henny Penny\",\"Herr Von Muellerhoff\",\"Hind\",\"Hind Siliguri\",\"Hind Vadodara\",\"Holtwood One SC\",\"Homemade Apple\",\"Homenaje\",\"IM Fell DW Pica\",\"IM Fell DW Pica SC\",\"IM Fell Double Pica\",\"IM Fell Double Pica SC\",\"IM Fell English\",\"IM Fell English SC\",\"IM Fell French Canon\",\"IM Fell French Canon SC\",\"IM Fell Great Primer\",\"IM Fell Great Primer SC\",\"Iceberg\",\"Iceland\",\"Imprima\",\"Inconsolata\",\"Inder\",\"Indie Flower\",\"Inika\",\"Inknut Antiqua\",\"Irish Grover\",\"Istok Web\",\"Italiana\",\"Italianno\",\"Itim\",\"Jacques Francois\",\"Jacques Francois Shadow\",\"Jaldi\",\"Jim Nightshade\",\"Jockey One\",\"Jolly Lodger\",\"Josefin Sans\",\"Josefin Slab\",\"Joti One\",\"Judson\",\"Julee\",\"Julius Sans One\",\"Junge\",\"Jura\",\"Just Another Hand\",\"Just Me Again Down Here\",\"Kadwa\",\"Kalam\",\"Kameron\",\"Kanit\",\"Kantumruy\",\"Karla\",\"Karma\",\"Kaushan Script\",\"Kavoon\",\"Kdam Thmor\",\"Keania One\",\"Kelly Slab\",\"Kenia\",\"Khand\",\"Khmer\",\"Khula\",\"Kite One\",\"Knewave\",\"Kotta One\",\"Koulen\",\"Kranky\",\"Kreon\",\"Kristi\",\"Krona One\",\"Kurale\",\"La Belle Aurore\",\"Laila\",\"Lakki Reddy\",\"Lancelot\",\"Lateef\",\"Lato\",\"League Script\",\"Leckerli One\",\"Ledger\",\"Lekton\",\"Lemon\",\"Libre Baskerville\",\"Life Savers\",\"Lilita One\",\"Lily Script One\",\"Limelight\",\"Linden Hill\",\"Lobster\",\"Lobster Two\",\"Londrina Outline\",\"Londrina Shadow\",\"Londrina Sketch\",\"Londrina Solid\",\"Lora\",\"Love Ya Like A Sister\",\"Loved by the King\",\"Lovers Quarrel\",\"Luckiest Guy\",\"Lusitana\",\"Lustria\",\"Macondo\",\"Macondo Swash Caps\",\"Magra\",\"Maiden Orange\",\"Mako\",\"Mallanna\",\"Mandali\",\"Marcellus\",\"Marcellus SC\",\"Marck Script\",\"Margarine\",\"Marko One\",\"Marmelad\",\"Martel\",\"Martel Sans\",\"Marvel\",\"Mate\",\"Mate SC\",\"Maven Pro\",\"McLaren\",\"Meddon\",\"MedievalSharp\",\"Medula One\",\"Megrim\",\"Meie Script\",\"Merienda\",\"Merienda One\",\"Merriweather\",\"Merriweather Sans\",\"Metal\",\"Metal Mania\",\"Metamorphous\",\"Metrophobic\",\"Michroma\",\"Milonga\",\"Miltonian\",\"Miltonian Tattoo\",\"Miniver\",\"Miss Fajardose\",\"Modak\",\"Modern Antiqua\",\"Molengo\",\"Molle\",\"Monda\",\"Monofett\",\"Monoton\",\"Monsieur La Doulaise\",\"Montaga\",\"Montez\",\"Montserrat\",\"Montserrat Alternates\",\"Montserrat Subrayada\",\"Moul\",\"Moulpali\",\"Mountains of Christmas\",\"Mouse Memoirs\",\"Mr Bedfort\",\"Mr Dafoe\",\"Mr De Haviland\",\"Mrs Saint Delafield\",\"Mrs Sheppards\",\"Muli\",\"Mystery Quest\",\"NTR\",\"Neucha\",\"Neuton\",\"New Rocker\",\"News Cycle\",\"Niconne\",\"Nixie One\",\"Nobile\",\"Nokora\",\"Norican\",\"Nosifer\",\"Nothing You Could Do\",\"Noticia Text\",\"Noto Sans\",\"Noto Serif\",\"Nova Cut\",\"Nova Flat\",\"Nova Mono\",\"Nova Oval\",\"Nova Round\",\"Nova Script\",\"Nova Slim\",\"Nova Square\",\"Numans\",\"Nunito\",\"Odor Mean Chey\",\"Offside\",\"Old Standard TT\",\"Oldenburg\",\"Oleo Script\",\"Oleo Script Swash Caps\",\"Open Sans\",\"Open Sans Condensed\",\"Oranienbaum\",\"Orbitron\",\"Oregano\",\"Orienta\",\"Original Surfer\",\"Oswald\",\"Over the Rainbow\",\"Overlock\",\"Overlock SC\",\"Ovo\",\"Oxygen\",\"Oxygen Mono\",\"PT Mono\",\"PT Sans\",\"PT Sans Caption\",\"PT Sans Narrow\",\"PT Serif\",\"PT Serif Caption\",\"Pacifico\",\"Palanquin\",\"Palanquin Dark\",\"Paprika\",\"Parisienne\",\"Passero One\",\"Passion One\",\"Pathway Gothic One\",\"Patrick Hand\",\"Patrick Hand SC\",\"Patua One\",\"Paytone One\",\"Peddana\",\"Peralta\",\"Permanent Marker\",\"Petit Formal Script\",\"Petrona\",\"Philosopher\",\"Piedra\",\"Pinyon Script\",\"Pirata One\",\"Plaster\",\"Play\",\"Playball\",\"Playfair Display\",\"Playfair Display SC\",\"Podkova\",\"Poiret One\",\"Poller One\",\"Poly\",\"Pompiere\",\"Pontano Sans\",\"Poppins\",\"Port Lligat Sans\",\"Port Lligat Slab\",\"Pragati Narrow\",\"Prata\",\"Preahvihear\",\"Press Start 2P\",\"Princess Sofia\",\"Prociono\",\"Prosto One\",\"Puritan\",\"Purple Purse\",\"Quando\",\"Quantico\",\"Quattrocento\",\"Quattrocento Sans\",\"Questrial\",\"Quicksand\",\"Quintessential\",\"Qwigley\",\"Racing Sans One\",\"Radley\",\"Rajdhani\",\"Raleway\",\"Raleway Dots\",\"Ramabhadra\",\"Ramaraja\",\"Rambla\",\"Rammetto One\",\"Ranchers\",\"Rancho\",\"Ranga\",\"Rationale\",\"Ravi Prakash\",\"Redressed\",\"Reenie Beanie\",\"Revalia\",\"Rhodium Libre\",\"Ribeye\",\"Ribeye Marrow\",\"Righteous\",\"Risque\",\"Roboto\",\"Roboto Condensed\",\"Roboto Mono\",\"Roboto Slab\",\"Rochester\",\"Rock Salt\",\"Rokkitt\",\"Romanesco\",\"Ropa Sans\",\"Rosario\",\"Rosarivo\",\"Rouge Script\",\"Rozha One\",\"Rubik\",\"Rubik Mono One\",\"Rubik One\",\"Ruda\",\"Rufina\",\"Ruge Boogie\",\"Ruluko\",\"Rum Raisin\",\"Ruslan Display\",\"Russo One\",\"Ruthie\",\"Rye\",\"Sacramento\",\"Sahitya\",\"Sail\",\"Salsa\",\"Sanchez\",\"Sancreek\",\"Sansita One\",\"Sarala\",\"Sarina\",\"Sarpanch\",\"Satisfy\",\"Scada\",\"Scheherazade\",\"Schoolbell\",\"Seaweed Script\",\"Sevillana\",\"Seymour One\",\"Shadows Into Light\",\"Shadows Into Light Two\",\"Shanti\",\"Share\",\"Share Tech\",\"Share Tech Mono\",\"Shojumaru\",\"Short Stack\",\"Siemreap\",\"Sigmar One\",\"Signika\",\"Signika Negative\",\"Simonetta\",\"Sintony\",\"Sirin Stencil\",\"Six Caps\",\"Skranji\",\"Slabo 13px\",\"Slabo 27px\",\"Slackey\",\"Smokum\",\"Smythe\",\"Sniglet\",\"Snippet\",\"Snowburst One\",\"Sofadi One\",\"Sofia\",\"Sonsie One\",\"Sorts Mill Goudy\",\"Source Code Pro\",\"Source Sans Pro\",\"Source Serif Pro\",\"Special Elite\",\"Spicy Rice\",\"Spinnaker\",\"Spirax\",\"Squada One\",\"Sree Krushnadevaraya\",\"Stalemate\",\"Stalinist One\",\"Stardos Stencil\",\"Stint Ultra Condensed\",\"Stint Ultra Expanded\",\"Stoke\",\"Strait\",\"Sue Ellen Francisco\",\"Sumana\",\"Sunshiney\",\"Supermercado One\",\"Sura\",\"Suranna\",\"Suravaram\",\"Suwannaphum\",\"Swanky and Moo Moo\",\"Syncopate\",\"Tangerine\",\"Taprom\",\"Tauri\",\"Teko\",\"Telex\",\"Tenali Ramakrishna\",\"Tenor Sans\",\"Text Me One\",\"The Girl Next Door\",\"Tienne\",\"Tillana\",\"Timmana\",\"Tinos\",\"Titan One\",\"Titillium Web\",\"Trade Winds\",\"Trocchi\",\"Trochut\",\"Trykker\",\"Tulpen One\",\"Ubuntu\",\"Ubuntu Condensed\",\"Ubuntu Mono\",\"Ultra\",\"Uncial Antiqua\",\"Underdog\",\"Unica One\",\"UnifrakturCook\",\"UnifrakturMaguntia\",\"Unkempt\",\"Unlock\",\"Unna\",\"VT323\",\"Vampiro One\",\"Varela\",\"Varela Round\",\"Vast Shadow\",\"Vesper Libre\",\"Vibur\",\"Vidaloka\",\"Viga\",\"Voces\",\"Volkhov\",\"Vollkorn\",\"Voltaire\",\"Waiting for the Sunrise\",\"Wallpoet\",\"Walter Turncoat\",\"Warnes\",\"Wellfleet\",\"Wendy One\",\"Wire One\",\"Work Sans\",\"Yanone Kaffeesatz\",\"Yantramanav\",\"Yellowtail\",\"Yeseva One\",\"Yesteryear\",\"Zeyada\"],\n            empty: 'empty',\n            style: 'font-select',\n            placeholder: 'Select a font',\n            lookahead: 2,\n            api: '//fonts.googleapis.com/css?family='\n        };\n\n        var Fontselect = (function () {\n\n            function Fontselect(original, o) {\n                this.$original = $(original);\n                this.options = o;\n                this.active = false;\n                this.setupHtml();\n                this.getVisibleFonts();\n                this.bindEvents();\n\n                var font = this.$original.val();\n                if (font && font !== this.options.empty) {\n                    this.updateSelected();\n                    this.addFontLink(font);\n                }\n            }\n\n            Fontselect.prototype.bindEvents = function () {\n\n                $('li', this.$results)\n                    .click(__bind(this.selectFont, this))\n                    .mouseenter(__bind(this.activateFont, this))\n                    .mouseleave(__bind(this.deactivateFont, this));\n\n                $('span', this.$select).click(__bind(this.toggleDrop, this));\n                this.$arrow.click(__bind(this.toggleDrop, this));\n            };\n\n            Fontselect.prototype.toggleDrop = function (ev) {\n                if (this.active) {\n                    this.$element.removeClass('font-select-active');\n                    this.$drop.hide();\n                    clearInterval(this.visibleInterval);\n                } else {\n                    this.$element.addClass('font-select-active');\n                    this.$drop.show();\n                    this.moveToSelected();\n                    this.visibleInterval = setInterval(__bind(this.getVisibleFonts, this), 500);\n                }\n\n                this.active = !this.active;\n            };\n\n            Fontselect.prototype.selectFont = function () {\n                var font = $('li.active', this.$results).data('value');\n                this.$original.val(font).change();\n                this.updateSelected();\n                this.toggleDrop();\n            };\n\n            Fontselect.prototype.moveToSelected = function () {\n                var $li, font = this.$original.val();\n\n                if (font) {\n                    $li = $(\"li[data-value='\" + font + \"']\", this.$results);\n                } else {\n                    $li = $(\"li\", this.$results).first();\n                }\n                this.$results.scrollTop(0).scrollTop($li.addClass('active').position().top);\n            };\n\n            Fontselect.prototype.activateFont = function (ev) {\n                $('li.active', this.$results).removeClass('active');\n                $(ev.currentTarget).addClass('active');\n            };\n\n            Fontselect.prototype.deactivateFont = function (ev) {\n\n                $(ev.currentTarget).removeClass('active');\n            };\n\n            Fontselect.prototype.updateSelected = function () {\n                var font = this.$original.val();\n                var val = this.toReadable(font) == this.options.empty ? this.options.placeholder : this.toReadable(font);\n                $('span', this.$element).text(val).css({\n                    'font-family': 'Lato'\n                });\n                if (font !== this.options.empty) {\n                    this.addFontLink(font);\n                    $('span', this.$element).css(this.toStyle(font));\n                }\n            };\n\n            Fontselect.prototype.setupHtml = function () {\n                this.$original.empty().hide();\n                this.$element = $('<div>', {'class': this.options.style});\n                this.$arrow = $('<div><b></b></div>');\n                this.$select = $('<a><span>' + this.options.placeholder + '</span></a>');\n                this.$drop = $('<div>', {'class': 'fs-drop'});\n                this.$results = $('<ul>', {'class': 'fs-results'});\n                this.$original.before(this.$element.append(this.$select.append(this.$arrow)).append(this.$drop));\n                this.$drop.append(this.$results.append(this.fontsAsHtml())).hide();\n            };\n\n            Fontselect.prototype.fontsAsHtml = function () {\n\n                var l = this.options.fonts.length;\n                var r, s, h = '';\n\n                h += '<li data-value=\"' + this.options.empty + '\">' + this.options.placeholder + '</li>';\n                for (var i = 0; i < l; i++) {\n                    r = this.toReadable(this.options.fonts[i]);\n                    //s = this.toStyle(fonts[i]);\n                    //h += '<li data-value=\"' + fonts[i] + '\" style=\"font-family: ' + s['font-family'] + '; font-weight: ' + s['font-weight'] + '\">' + r + '</li>';\n                    h += '<li data-value=\"' + this.options.fonts[i] + '\">' + r + '</li>';\n                }\n\n                return h;\n            };\n\n            Fontselect.prototype.toReadable = function (font) {\n                return font.replace(/[\\+|:]/g, ' ');\n            };\n\n            Fontselect.prototype.toStyle = function (font) {\n                var t = font.split(':');\n                return {'font-family': this.toReadable(t[0]), 'font-weight': (t[1] || 400)};\n            };\n\n            Fontselect.prototype.getVisibleFonts = function () {\n\n                if (this.$results.is(':hidden')) return;\n\n                var fs = this;\n                var top = this.$results.scrollTop();\n                var bottom = top + this.$results.height();\n\n                if (this.options.lookahead) {\n                    var li = $('li', this.$results).first().height();\n                    bottom += li * this.options.lookahead;\n                }\n\n                /*$('li', this.$results).each(function () {\n\n                    var ft = $(this).position().top + top;\n                    var fb = ft + $(this).height();\n\n                    if ((fb >= top) && (ft <= bottom)) {\n                        var font = $(this).data('value');\n                        if (font !== fs.options.empty) {\n                            fs.addFontLink(font);\n                        }\n                    }\n\n                });*/\n            };\n\n            Fontselect.prototype.addFontLink = function (font) {\n                var link = this.options.api + font;\n\n                if ($(\"link[href*='\" + font + \"']\").length === 0) {\n                    $('link:last').after('<link href=\"' + link + '\" rel=\"stylesheet\" type=\"text/css\">');\n                }\n\n                $( document ).trigger( 'google-font-added', [ font, link ])\n            };\n\n            return Fontselect;\n        })();\n\n        return this.each(function () {\n            // If options exist, lets merge them\n            if (options) $.extend(settings, options);\n            return new Fontselect(this, settings);\n        });\n\n    };\n})(jQuery);"]}

Filemanager

Name Type Size Permission Actions
admin.min.js File 78.75 KB 0644
admin.min.js.map File 270.06 KB 0644
admin_menu.min.js File 19.09 KB 0644
admin_menu.min.js.map File 53.82 KB 0644
customizer-preview.js File 25.79 KB 0644
customizer.js File 30.97 KB 0644
customizer.min.js File 33.7 KB 0644
customizer.min.js.map File 87.91 KB 0644
public.min.js File 85.56 KB 0644
public.min.js.map File 231.01 KB 0644
superfly-menu.js File 136.79 KB 0644