????JFIF??x?x????'403WebShell
403Webshell
Server IP : 79.136.114.73  /  Your IP : 52.15.122.33
Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f
System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64
User : www-data ( 33)
PHP Version : 5.5.9-1ubuntu4.29
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,
MySQL : ON  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/www.astacus.se/wp-content/plugins/superfly-menu-R8UHIP/js/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/www.astacus.se/wp-content/plugins/superfly-menu-R8UHIP/js/admin.min.js.map
{"version":3,"sources":["admin.js","backbone.stickit.js","admin-bindings.js","tinycolor.js","jquery.colorpickersliders.js","ajax.js","util.js","jquery.fontselect.js"],"names":["jQuery","$","validateLicense","$licenseCont","fname","val","lname","email","subscribe","prop","code","length","isX","data","licenseValid","dfd","Deferred","removeClass","hide","addClass","test","action","url","post","response","regexTest","laim_localize","ajaxurl","error","item_id","show","trigger","resolve","promise","traversePages","pages","res","each","i","el","t","is","showLoadingView","hideLoadingView","isScrolledIntoView","$elem","elemTop","elemBottom","rule","docViewTop","$win","scrollTop","docViewBottom","height","updateMenuMap","$items","$list","find","map","$t","this","locationData","term_id","name","trim","text","loc","isDef","$storageInput","JSON","stringify","openLocPopup","$item","$locPopup","populatePopup","$def","setTimeout","$body","on","closeLocPopup","closest","e","force","target","off","location","current","cat","replace","window","after","remove","id","wrap","ind","cl","scl","bg","cc","parent","append","before","change","$w","end","options","flag","preventDefault","$form","p","hidden","user","desktop","mobile","ids","resulted","everyone","loggedin","loggedout","yes","no","include","exclude","cposts","cats","taxes","langs","wp_pages","split","done","state","$tabs","$subtabs","$or","scroll","offset","top","css","width","left","resize","not","click","animate","submit","file_frame","attachment","$input","parents","eq","open","wp","media","frames","multiple","get","first","toJSON","html","sizes","full","document","$popup","$clone","$select","clone","attr","_for","prepend","curr","sf_menus","$selected","console","log","alert","$curr","factory","define","amd","exports","require","_","Backbone","Stickit","_handlers","addHandler","handlers","flatten","handler","defaults","updateModel","updateView","updateMethod","concat","ViewMixin","_modelBindings","unstickit","model","bindingSelector","isObject","v","selector","models","destroyFns","reject","binding","config","event","fn","push","_destroy","invoke","uniq","cid","call","$el","stickit","optionalModel","optionalBindingsConfig","bindings","result","addBinding","stickitWrapped","ret","apply","arguments","namespace","key","isString","observe","isFunction","getConfiguration","modelAttr","view","bindId","uniqueId","extend","stickitChange","setOptions","applyViewFn","destroy","initializeAttributes","initializeVisible","initializeClasses","events","type","eventName","listener","getVal","slice","currentVal","evaluateBoolean","setAttr","sel","bind","observeModelEvent","m","changeId","getAttr","updateViewBindEl","initialize","View","prototype","evaluatePath","obj","path","parts","reduce","memo","reference","isBoolean","last","value","onSet","set","isArray","attribute","index","has","retrieveVal","field","escape","sanitizeVal","onGet","update","opts","filter","visible","props","attributes","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","isSelected","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","hasAlphaAndFormatNotSet","formatWithAlpha","stringInputToObject","rgbToRgb","String","substr","convertToPercentage","hsvToRgb","hslToRgb","mathMin","mathMax","max","min","d","hue2rgb","q","math","floor","f","mod","charAt","join","flip","o","flipped","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","CSS_INTEGER","CSS_NUMBER","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","RegExp","module","ColorPickerSliders","init","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","dragTarget","percent","_updateMarkerPosition","_updateColorsProperty","MAXLIGHT","MAXVALIDCHROMA","select","_parseCustomSwatches","parse","localStorage","getItem","err","Array","_findActualColorsSwatch","found","swatchcolor","currentswatch","_storeSwatches","setItem","unshift","splice","confirm","property","lch2rgb","isok","slidername","calculateEventPositionPercentage","_updateAllElementsTimer","updateAllElementsTimeout","clearTimeout","Date","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","offsetX","testelement","createElement","style","backgroundImage","scalableproperty","minvalue","maxvalue","minposition","maxposition","gradientStops","diff","currentstage","modifiedcolor","modifyColor","stagergb","gradientstring","oldwebkitgradientstring","noprefix","webkit","oldwebkit","isGoodRgb","maxacceptable","minacceptable","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","$parent","windowScrollTopView","fontselect","__bind","me","fonts","empty","placeholder","lookahead","api","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","bottom","li","link"],"mappings":"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","file":"admin.min.js","sourcesContent":["jQuery(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        $(this).parent().append(bg).append(cl).append(scl).append(cc);\n        bg.before('<span>Background</span>');\n        cl.before('<span>Text</span>');\n        scl.before('<span>Subheader</span>');\n        cc.before('<span>Section</span>');\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    function validateLicense() {\n        var $licenseCont = $('#sf_license');\n        var valid = $('#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\n        // if (valid) {\n        //     dfd.resolve(valid);\n        //     return dfd.promise();\n        // }\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 (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 = 'http://looks-awesome.com/proxy/superfly-mailchimp.php';\n\n                // Subscribe to hidden 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        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    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    $(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    $popup.after($clone);\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        //$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// Backbone View for edit team form\n    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_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_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_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_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_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_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_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_color]\"]']          = 'sf_social_color';\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_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_icon_size]\"]']             = 'sf_icon_size';\n            result['[name=\"sf_options[sf_icon_color]\"]']            = 'sf_icon_color';\n            result['[name=\"sf_options[sf_ind]\"]']                   = 'sf_ind';\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_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_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 == 'visible') {\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\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_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_sub_type'] = {\n                observe: 'sf_sidebar_style',\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_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(\n                        (val[0] == 'always' && val[1] == 'side') ||\n                        (val[0] == 'always' && val[1] == 'skew') ||\n                        val[1] == 'toolbar') $el.hide();\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]) $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] != 'hidden') $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] != 'hidden') $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] != 'hidden') $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\") {\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// Array last item\nif (!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: 'http://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\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);"],"sourceRoot":"/source/"}

Youez - 2016 - github.com/yon3zu
LinuXploit