1(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ 2(function (global){(function (){ 3'use strict'; 4 5(typeof window !== "undefined" ? window['$'] : typeof global !== "undefined" ? global['$'] : null); 6var vidim = require('vidim'); 7 8$('.video-bg').each(function () { 9 var $bg = $(this), 10 type = $bg.data('type'), 11 src = $bg.data('src'), 12 poster = $bg.data('poster'), 13 control = $bg.data('control-target'); 14 var videoBG = void 0; 15 16 if (type === 'youtube') { 17 videoBG = new vidim($bg[0], { 18 type: 'YouTube', 19 src: src, 20 poster: poster 21 }); 22 } else if (type === 'hosted') { 23 videoBG = new vidim($bg[0], { 24 src: [{ 25 type: 'video/mp4', 26 src: src 27 }], 28 poster: poster 29 }); 30 } 31 32 $('[data-video-control="' + control + '"]').on("click", function (e) { 33 e.preventDefault(); 34 var $toggle = $(this); 35 var isPressed = $toggle.attr("aria-pressed") === "true"; 36 37 $toggle.attr("aria-pressed", isPressed ? "false" : "true").attr("aria-label", isPressed ? "Pause Video" : "Play Video"); 38 $("svg title", this).text(isPressed ? "Pause Video" : "Play Video"); 39 $("svg use", this).attr("xlink:href", isPressed ? "#icon-pause" : "#icon-play"); 40 41 if (isPressed) { 42 videoBG.play(); 43 } else { 44 videoBG.pause(); 45 } 46 }); 47}); 48 49}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) 50},{"vidim":30}],2:[function(require,module,exports){ 51"use strict"; 52 53if (!window.suppress && window.calendlyActive) { 54 $('a[href*="calendly.com"]').on("click", function (e) { 55 e.preventDefault(); 56 var URL = $(this).attr("href"); 57 Calendly.initPopupWidget({ url: URL }); 58 }); 59} 60 61},{}],3:[function(require,module,exports){ 62(function (global){(function (){ 63"use strict"; 64 65var serialize = require("./serialize"); 66var _ = require("lodash"); 67(typeof window !== "undefined" ? window['$'] : typeof global !== "undefined" ? global['$'] : null); 68require("jquery-validation"); 69 70$(".contact-form").each(function () { 71 var self = this; 72 73 $(this).on("submit", function (e) { 74 e.preventDefault(); 75 }).validate({ 76 errorPlacement: function errorPlacement(error, element) {}, 77 highlight: function highlight(element, errorClass) { 78 $(element).parents('.form-item').addClass(errorClass); 79 }, 80 unhighlight: function unhighlight(element, errorClass) { 81 $(element).parents('.form-item').removeClass(errorClass); 82 }, 83 rules: { 84 email: { 85 required: true 86 }, 87 required: { 88 required: true 89 } 90 }, 91 submitHandler: function submitHandler(form) { 92 var $formBtn = $(".contact-submit", form), 93 btnOrigText = $formBtn.text(), 94 btnActiveText = $formBtn.data("submit-text"); 95 96 $formBtn.text(btnActiveText); 97 $formBtn.attr("disabled", true); 98 $(self).find(".is-recaptcha .required-message").remove(); 99 100 var data = $(form).serialize(); 101 102 $.post({ 103 url: "/contact", 104 data: data, 105 error: function error(err) { 106 console.log(err); 107 }, 108 success: function success(res) { 109 console.log(res); 110 $formBtn.attr("disabled", false); 111 112 if (_(res).has("error")) { 113 $(self).find('input[type="' + res.field + '"]').parent().addClass("error"); 114 $formBtn.text("Error! Try Again"); 115 } else if (res.captcha && !res.success) { 116 $(self).find(".is-recaptcha").append('<p class="required-message">This field is required</p>'); 117 $formBtn.text(btnOrigText); 118 } else { 119 var successRedirect = $(self).find('input[name="success_redirect"]'); 120 if (successRedirect.length) { 121 return window.location = successRedirect.val(); 122 } 123 124 var successMessage = $(self).find(".form-success"); 125 if (successMessage.length) { 126 $(self).addClass("has-success"); 127 } 128 129 $(self).find(".is-recaptcha required-message").remove(); 130 131 $formBtn.text("Success!"); 132 $(self).find("input, textarea").not("input[type='hidden']").val(""); 133 134 setTimeout(function () { 135 $formBtn.text(btnOrigText); 136 }, 3000); 137 } 138 } 139 }); 140 return false;
141 } 142 }); 143}); 144 145}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) 146},{"./serialize":7,"jquery-validation":26,"lodash":28}],4:[function(require,module,exports){ 147'use strict'; 148 149$.fn.doubleTapToGo = function (params) { 150 151 if (!('ontouchstart' in window) && !navigator.msMaxTouchPoints && !navigator.userAgent.toLowerCase().match(/windows phone os 7/i)) return false; 152 153 this.each(function () { 154 var curItem = false; 155 156 $(this).on('click', function (e) { 157 var item = $(this); 158 if (item[0] != curItem[0]) { 159 e.preventDefault(); 160 curItem = item; 161 } 162 }); 163 164 // $(document).on('click touchstart MSPointerDown', function(e) { 165 // var resetItem = true; 166 // var parents = $( e.target ).parents(); 167 // for (var i = 0; i < parents.length; i++) { 168 // if (parents[i] == curItem[0]) 169 // resetItem = false; 170 // if (resetItem) { 171 // //curItem = false; 172 // } 173 // } 174 // }); 175 }); 176 return this; 177}; 178 179if ($('.menu-toggle').is(':hidden')) { 180 $('#main-navigation li:has(ul)').doubleTapToGo(); 181} 182 183},{}],5:[function(require,module,exports){ 184'use strict'; 185 186$('.emoney-video').each(function () { 187 var $video = $(this); 188 var videoID = $video.data('video'); 189 var videoToken = $video.data('token'); 190 191 $video.empty().append('<div id="video-player-' + videoID + '"></div><div id="video-player-disclaimer-part-' + videoID + '"></div>'); 192 $('<script />', { type: 'text/javascript', src: 'https://abm.emaplan.com/ABM/MediaServe/Embed?token='
192+ videoToken }).appendTo('head'); 193}); 194 195},{}],6:[function(require,module,exports){ 196"use strict"; 197 198require("velocity-animate"); 199 200window.addEventListener("load", function () { 201 $("html").addClass("is-loaded"); 202}); 203 204document.addEventListener("DOMContentLoaded", function () { 205 require("./bg-video"); 206 require("./emoney-video"); 207 require("./contact"); 208 require("./dropdown"); 209 require("./calendly"); 210}); 211 212if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/.test(navigator.userAgent)) { 213 $("html").addClass("is-mobile"); 214} 215 216document.documentElement.className = document.documentElement.className.replace("no-js", "js"); 217 218var domains = location.hostname.split("."); 219if (domains.length > 3) { 220 var dom = domains.slice(-3).join("."); 221} else { 222 var dom = domains.slice(-2).join("."); 223} 224 225var domain = window.location.protocol + "//" + dom + (location.port ? ":" + location.port : ""); 226 227var cleanBuild = true; 228var contentChanged = false; 229var heroContentChanged = false; 230var footerChanged = false; 231 232var FroalaEditor = require("froala-editor/js/froala_editor.min"); 233require("froala-editor/js/plugins/align.min"); 234require("froala-editor/js/plugins/inline_style.min"); 235require("froala-editor/js/plugins/lists.min"); 236require("froala-editor/js/plugins/code_beautifier.min"); 237require("froala-editor/js/plugins/draggable.min"); 238require("froala-editor/js/plugins/file.min"); 239require("froala-editor/js/plugins/image.min"); 240require("froala-editor/js/plugins/link.min"); 241require("froala-editor/js/plugins/table.min"); 242require("froala-editor/js/plugins/video.min"); 243require("froala-editor/js/plugins/paragraph_format.min"); 244require("froala-editor/js/plugins/paragraph_style.min"); 245require("froala-editor/js/plugins/quote.min"); 246require("froala-editor/js/plugins/colors.min"); 247require("froala-editor/js/plugins/save.min"); 248require("froala-editor/js/plugins/code_view.min"); 249require("froala-editor/js/third_party/font_awesome.min"); 250 251var site_id = $("input[name='site_id']").val(); 252var recaptcha_sitekey = $("input[name='recaptcha_sitekey']").val(); 253 254FroalaEditor.VIDEO_PROVIDERS = [{ 255 test_regex: /^.*((youtu.be)|(youtube.com))\/((v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))?\??v?=?([^#\&\?]*).*/, 256 url_regex: /(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=|embed\/)?([0-9a-zA-Z_\-]+)(.+)?/g, 257 url_text: "//www.youtube.com/embed/$1", 258 html: '<iframe width="640" height="360" src="{url}?wmode=opaque" frameborder="0" allowfullscreen></iframe>', 259 provider: "youtube" 260}, { 261 test_regex: /^.*(?:vimeo.com)\/(?:channels(\/\w+\/)?|groups\/*\/videos\/â\d+\/|video\/|)(\d+)(?:$|\/|\?)/, 262 url_regex: /(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/(?:[^\/]*)\/videos\/|album\/(?:\d+)\/video\/|video\/|)(\d+)(?:[a-zA-Z0-9_\-]+)?/i, 263 url_text: "//player.vimeo.com/video/$1", 264 html: '<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen></iframe>', 265 provider: "vimeo" 266}, { 267 test_regex: /^.+(dailymotion.com|dai.ly)\/(video|hub)?\/?([^_]+)[^#]*(#video=([^_&]+))?/, 268 url_regex: /(?:https?:\/\/)?(?:www\.)?(?:dailymotion\.com|dai\.ly)\/(?:video|hub)?\/?(.+)/g, 269 url_text: "//www.dailymotion.com/embed/video/$1", 270 html: '<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen></iframe>', 271 provider: "dailymotion" 272}, { 273 test_regex: /^.+(screen.yahoo.com)\/[^_&]+/, 274 url_regex: "", 275 url_text: "", 276 html: '<iframe width="640" height="360" src="{url}?format=embed" frameborder="0" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" allowtransparency="true"></iframe>', 277 provider: "yahoo" 278}, { 279 test_regex: /^.+(rutube.ru)\/[^_&]+/, 280 url_regex: /(?:https?:\/\/)?(?:www\.)?(?:rutube\.ru)\/(?:video)?\/?(.+)/g, 281 url_text: "//rutube.ru/play/embed/$1", 282 html: '<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" allowtransparency="true"></iframe>', 283 provider: "rutube" 284}, { 285 test_regex: /^(?:.+)vidyard.com\/(?:watch)?\/?([^.&/]+)\/?(?:[^_.&]+)?/, 286 url_regex: /^(?:.+)vidyard.com\/(?:watch)?\/?([^.&/]+)\/?(?:[^_.&]+)?/g, 287 url_text: "//play.vidyard.com/$1", 288 html: '<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen></iframe>', 289 provider: "vidyard" 290}, { 291 test_regex: /(\.|\/)(mp4)$/i, 292 url_regex: "", 293 url_text: "", 294 html: '<video width="640" height="360" controls><source src="{url}" type="video/mp4"></video>', 295 provider: "mp4" 296}]; 297 298FroalaEditor.DefineIcon("insertLayout", { 299 NAME: "plus", 300 template: "font_awesome" 301}); 302FroalaEditor.DefineIcon("insertForm", { 303 NAME: "send", 304 template: "font_awesome" 305}); 306FroalaEditor.DefineIcon("insertSocial", { 307 NAME: "share-alt", 308 template: "font_awesome" 309}); 310 311FroalaEditor.RegisterCommand("insertLayout", { 312 title: "Insert Layout", 313 focus: false, 314 undo: true,
315 type: "dropdown", 316 refreshAfterCallback: true, 317 options: { 318 halves: "<svg class='icon'><use xlink:href='#icon-grid-2-column'></use></svg> 2 Column Split", 319 thirds: "<svg class='icon'><use xlink:href='#icon-grid-3-column'></use></svg> 3 Column Split", 320 "sidebar-right": "<svg class='icon'><use xlink:href='#icon-grid-sidebar-right'></use></svg> Sidebar (Right)", 321 "sidebar-left": "<svg class='icon'><use xlink:href='#icon-grid-sidebar-left'></use></svg> Sidebar (Left)" 322 }, 323 callback: function callback(cmd, val) { 324 if (val === "halves") { 325 this.html.insert("\n <div class=\"row\"><span class=\"delete-row\"></span>\n <div class=\"col-xs-12 col-sm-6\">\n <h2>Column 1</h2>\n <p>Duis minim cupidatat occaecat officia et ut consequat reprehenderit aute sint commodo laboris est anim est commodo duis irure dolore mollit reprehenderit qui.</p>\n </div>\n <div class=\"col-xs-12 col-sm-6\">\n <h2>Column 2</h2>\n <p>Duis minim cupidatat occaecat officia et ut consequat reprehenderit aute sint commodo laboris est anim est commodo duis irure dolore mollit reprehenderit qui.</p>\n </div>\n </div><p><br></p>"); 326 } else if (val === "thirds") { 327 this.html.insert("\n <div class=\"row\"><span class=\"delete-row\"></span>\n <div class=\"col-xs-12 col-sm-4\">\n <h2>Column 1</h2>\n <p>Duis minim cupidatat occaecat officia et ut consequat reprehenderit aute sint commodo laboris est anim est commodo duis irure dolore mollit reprehenderit qui.</p>\n </div>\n <div class=\"col-xs-12 col-sm-4\">\n <h2>Column 2</h2>\n <p>Duis minim cupidatat occaecat officia et ut consequat reprehenderit aute sint commodo laboris est anim est commodo duis irure dolore mollit reprehenderit qui.</p>\n </div>\n <div class=\"col-xs-12 col-sm-4\">\n <h2>Column 3</h2>\n <p>Duis minim cupidatat occaecat officia et ut consequat reprehenderit aute sint commodo laboris est anim est commodo duis irure dolore mollit reprehenderit qui.</p>\n </div>\n </div><p><br></p>"); 328 } else if (val === "sidebar-right") { 329 this.html.insert("\n <div class=\"row\"><span class=\"delete-row\"></span>\n <div class=\"col-xs-12 col-sm-7 col-md-8\">\n <h2>Column Content</h2>\n <p>Duis minim cupidatat occaecat officia et ut consequat reprehenderit aute sint commodo laboris est anim est commodo duis irure dolore mollit reprehenderit qui.</p>\n </div>\n <div class=\"col-xs-12 col-sm-5 col-md-4\">\n <aside class=\"sidebar\"><h2>Sidebar (right)</h2><p>Enter your sidebar content here...</p></aside>\n </div>\n </div><p><br></p>"); 330 } else if (val === "sidebar-left") { 331 this.html.insert("\n <div class=\"row\"><span class=\"delete-row\"></span>\n <div class=\"col-xs-12 col-sm-5 col-md-4\">\n <aside class=\"sidebar sidebar-left\"><h2>Sidebar (left)</h2><p>Enter your sidebar content here...</p></aside>\n </div>\n <div class=\"col-xs-12 col-sm-7 col-md-8\">\n <h2>Column Content</h2>\n <p>Duis minim cupidatat occaecat officia et ut consequat reprehenderit aute sint commodo laboris est anim est commodo duis irure dolore mollit reprehenderit qui.</p>\n </div>\n </div><p><br></p>"); 332 } 333 } 334}); 335FroalaEditor.RegisterCommand("insertForm", { 336 title: "Insert Contact Form", 337 focus: false, 338 undo: true, 339 type: "dropdown", 340 refreshAfterCallback: true, 341 options: { 342 minimal: "Minimal", 343 full: "Full" 344 }, 345 callback: function callback(cmd, val) { 346 var recapatcha = recaptcha_sitekey ? '<div class="form-item is-recaptcha"><div class="g-recaptcha" data-sitekey="' + recaptcha_sitekey + '"></div></div>' : ""; 347 348 if (val === "minimal") { 349 this.html.insert("\n <form class=\"form minimal contact-form\">\n <span class=\"delete-contact-form\"></span>\n <span class=\"mask-contact-form\" contenteditable=\"false\"></span>\n <div class=\"form-wrapper\">\n <div class=\"form-item form-fit\">\n <input type=\"email\" aria-label=\"Email\" name=\"contact[email]\" class=\"form-control\" placeholder=\"Email Address\">\n </div>\n <div class=\"form-item\">\n <button type=\"submit\" class=\"btn contact-submit\" aria-label=\"
349Submit\" data-submit-text=\"Sending...\">Join</button>\n </div>\n </div>\n " + recapatcha + "\n </form><p><br></p>"); 350 } else if (val === "full") { 351 this.html.insert("\n <form class=\"form contact-form\">\n <span class=\"delete-contact-form\"></span>\n <span class=\"mask-contact-form\" contenteditable=\"false\"></span>\n <div class=\"form-wrapper\">\n <div class=\"form-item\"><label>Name</label>\n <input type=\"text\" aria-label=\"Name\" name=\"contact[name]\" class=\"form-control\">\n </div>\n <div class=\"form-item\"><label>Email</label>\n <input type=\"email\" aria-label=\"Email\" name=\"contact[email]\" class=\"form-control\">\n </div>\n <div class=\"form-item\"><label>Phone</label>\n <input type=\"text\" aria-label=\"Phone\" name=\"contact[phone]\" class=\"form-control\">\n </div>\n <div class=\"form-item\"><label>Message</label>\n <textarea name=\"contact[message]\" aria-label=\"Message\" class=\"form-control\"></textarea>\n </div>\n " + recapatcha + "\n <div class=\"form-item\">\n <button type=\"submit\" aria-label=\"Submit\" class=\"btn contact-submit\" data-submit-text=\"Sending...\">Send</button>\n </div>\n\n </div>\n </form><p><br></p>"); 352 } 353 } 354}); 355FroalaEditor.RegisterCommand("insertSocial", { 356 title: "Insert Social Icon", 357 focus: true, 358 undo: true, 359 type: "dropdown", 360 refreshAfterCallback: true, 361 options: { 362 facebook: "<svg class='icon'><use xlink:href='#icon-facebook'></use></svg> Facebook", 363 twitter: "<svg class='icon'><use xlink:href='#icon-twitter'></use></svg> Twitter", 364 instagram: "<svg class='icon'><use xlink:href='#icon-instagram'></use></svg> Instagram", 365 linkedin: "<svg class='icon'><use xlink:href='#icon-linkedin'></use></svg> Linkedin", 366 youtube: "<svg class='icon'><use xlink:href='#icon-youtube'></use></svg> YouTube", 367 vimeo: "<svg class='icon'><use xlink:href='#icon-vimeo'></use></svg> Vimeo", 368 tumblr: "<svg class='icon'><use xlink:href='#icon-tumblr'></use></svg> Tumblr", 369 yelp: "<svg class='icon'><use xlink:href='#icon-yelp'></use></svg> Yelp", 370 rss: "<svg class='icon'><use xlink:href='#icon-rss'></use></svg> RSS Feed", 371 email: "<svg class='icon'><use xlink:href='#icon-email'></use></svg> Email", 372 podcast: "<svg class='icon'><use xlink:href='#icon-podcast'></use></svg> Podcast", 373 phone: "<svg class='icon'><use xlink:href='#icon-phone'></use></svg> Phone", 374 blog: "<svg class='icon'><use xlink:href='#icon-blog'></use></svg> Blog" 375 }, 376 callback: function callback(cmd, val) { 377 if (val == "email") { 378 this.html.insert('<a href="mailto:[email protected]" target="_blank" class="social-link fr-deletable" aria-label="' + val + '"><svg class="icon"><use xlink:href="#icon-' + val + '"></use></svg></a>'); 379 } else { 380 this.html.insert('<a href="#' + val + '" target="_blank" class="social-link fr-deletable" aria-label="' + val + '"><svg class="icon"><use xlink:href="#icon-' + val + '"></use></svg></a>'); 381 } 382 } 383}); 384 385var allowedTags = ["a", "abbr", "address", "area", "article", "aside", "audio", "b", "base", "bdi", "bdo", "blockquote", "br", "button", "canvas", "caption", "cite", "code", "col", "colgroup", "datalist", "dd", "del", "details", "dfn", "dialog", "div", "dl", "dt", "em", "embed", "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hgroup", "hr", "i", "iframe", "img", "input", "ins", "kbd", "keygen", "label", "loading", "legend", "li", "link", "main", "map", "mark", "menu", "menuitem", "meter", "nav", "noscript", "object", "ol", "optgroup", "option", "output", "p", "param", "pre", "progress", "queue", "rp", "rt", "ruby", "s", "samp", "script", "style", "section", "select", "small", "source", "span", "strike", "strong", "sub", "summary", "sup", "svg", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time", "title", "tr", "track", "u", "ul", "use", "var", "video", "wbr"]; 386var allowedEmptyTags = ["textarea", "a", "iframe", "object", "video", "span", "style", "script", "svg", "use", "i", "loading"]; 387var allowedAttrs = ["lazy", "accept", "accept-charset", "accesskey", "action", "align", "alt", "aria-.*", "async", "autocomplete", "autofocus", "autoplay", "autosave", "background", "bgcolor", "border", "charset", "cellpadding", "cellspacing", "checked", "cite", "class", "color", "cols", "colspan", "content", "contenteditable", "contextmenu", "controls", "coords", "data", "data-.*", "datetime", "default", "defer", "dir", "dirname", "disabled", "download", "draggable", "dropzone", "enctype", "focu
387sable", "for", "form", "formaction", "headers", "height", "hidden", "high", "href", "hreflang", "http-equiv", "icon", "id", "ismap", "itemprop", "keytype", "kind", "label", "lang", "language", "list", "loop", "low", "max", "maxlength", "media", "method", "min", "multiple", "name", "novalidate", "open", "optimum", "pattern", "ping", "placeholder", "poster", "preload", "pubdate", "radiogroup", "readonly", "rel", "required", "reversed", "role", "rows", "rowspan", "sandbox", "scope", "scoped", "scrolling", "seamless", "selected", "shape", "size", "sizes", "span", "src", "srcdoc", "srclang", "srcset", "start", "step", "summary", "spellcheck", "style", "tabindex", "target", "title", "type", "translate", "usemap", "value", "valign", "width", "wrap", "xlink:href", "loading"]; 388var toolbarOptions = [["paragraphFormat", "paragraphStyle", "bold", "italic", "align", "insertLink", "-", "formatOL", "formatUL", "insertHR", "quote", "superscript", "subscript", "insertTable", "insertSocial", "-", "insertImage", "insertFile", "insertVideo", "insertForm", "insertLayout", "undo", "redo", "html"]]; 389 390// initialize the editor 391var editor = new FroalaEditor(".editable", { 392 attribution: false, 393 theme: "gray",
394 placeholderText: "Start typing something...", 395 key: "mPD4tB3G2A1G1I1A3sGXd1WWTDSGXYOUKh1KINLb1OG1g1H-8D1B3D3C2E6D1D1B4E4B3==", 396 toolbarInline: true, 397 toolbarVisibleWithoutSelection: true, 398 tableResizerOffset: 10, 399 toolbarButtons: toolbarOptions, 400 toolbarButtonsMD: toolbarOptions, 401 toolbarButtonsSM: toolbarOptions, 402 toolbarButtonsXS: toolbarOptions, 403 htmlAllowedTags: allowedTags, 404 htmlAllowedEmptyTags: allowedEmptyTags, 405 htmlAllowedAttrs: allowedAttrs, 406 htmlUntouched: true, 407 htmlExecuteScripts: false, 408 paragraphFormatSelection: true, 409 videoInsertButtons: ["videoBack", "|", "videoByURL", "videoEmbed"], 410 videoEditButtons: ["videoReplace", "videoRemove"], 411 videoDefaultDisplay: "block", 412 videoDefaultWidth: 0, 413 videoResize: false, 414 paragraphStyles: { 415 hero: "Hero", 416 jumbo: "Jumbo", 417 disclaimer: "Disclaimer", 418 accented: "Accent", 419 "is-m0": "+ No Margins", 420 "is-mt0": "+ No Top Margin", 421 "is-mb0": "+ No Bottom Margin", 422 "is-h1": "+ Match H1", 423 "is-h2": "+ Match H2", 424 "is-h3": "+ Match H3", 425 "is-h4": "+ Match H4" 426 }, 427 linkList: [], 428 linkStyles: { 429 "is-clean": "Remove Underline", 430 btn: "Button", 431 primary: "+ Primary", 432 secondary: "+ Secondary", 433 "is-pill": "+ Pill", 434 "btn-block": "+ Full Width" 435 }, 436 linkInsertButtons: ["linkBack"], 437 linkEditButtons: ["linkOpen", "linkStyle", "linkEdit", "linkRemove"], 438 linkAttributes: { 439 class: "Class" 440 }, 441 tableStyles: { 442 "no-borders": "No Borders", 443 "is-striped": "Stripe Rows", 444 "is-framed": "Outline Table", 445 "uses-accent": "Use Accent Color" 446 }, 447 tableCellStyles: { 448 "is-highlighted": "Highlighted" 449 }, 450 codeMirror: window.CodeMirror, 451 codeMirrorOptions: { 452 theme: "monokai", 453 indentWithTabs: true, 454 lineNumbers: true, 455 lineWrapping: true, 456 mode: "text/html", 457 tabMode: "indent", 458 tabSize: 2, 459 autoCloseTags: { 460 whenClosing: true, 461 whenOpening: true, 462 indentTags: [] 463 }, 464 extraKeys: { 465 Esc: function Esc() { 466 $(editor).each(function () { 467 if (this.codeView.isActive()) { 468 this.codeView.toggle(); 469 } 470 }); 471 }, 472 Tab: "emmet.expand_abbreviation_with_tab", 473 "Cmd-/": "emmet.toggle_comment", 474 "Ctrl-/": "emmet.toggle_comment" 475 } 476 }, 477 saveMethod: "PUT", 478 saveInterval: 0, 479 fileUploadParam: "objects", 480 fileUploadURL: domain + "/api/objects", 481 fileUploadParams: { site_id: site_id, editor: true }, 482 fileUploadMethod: "POST", 483 imageUploadParam: "objects", 484 imageUploadURL: domain + "/api/objects", 485 imageUploadParams: { site_id: site_id, editor: true }, 486 imageUploadMethod: "POST", 487 imageMaxSize: 10 * 1024 * 1024, 488 imageAllowedTypes: ["jpeg", "jpg", "png", "svg+xml", "gif"], 489 imageStyles: { 490 spread: "Bigger Margins", 491 rounded: "Rounded", 492 bw: "Grayscale", 493 "full-bleed": "Full Bleed Width" 494 }, 495 imageDefaultWidth: 0, 496 imageDefaultMargin: 0, 497 imageDefaultDisplay: "block", 498 pastePlain: true, 499 pasteDeniedAttrs: ["class", "id", "style", "aria-level", "dir"], 500 501 events: { 502 initialized: function initialized() { 503 // Event callback. 504 var editor = this; 505 var contentLoc = $(editor.el).parents(".editable").data("location"); 506 var contentType = $(editor.el).parents(".editable").data("type"); 507 var contentID = $(editor.el).parents(".editable").data("id"); 508 509 editor.opts.saveParam = contentLoc; 510 editor.opts.saveURL = domain + "/api/pages/content?id=" + contentID + "&t
510ype=" + contentType + "&site_id=" + site_id; 511 512 // Mouse down on link. 513 editor.events.$on(editor.$el, editor._mousedown, ".social-link", function () { 514 var range = editor.doc.createRange(); 515 range.selectNodeContents(this); 516 517 if ($(this).text().length == 0 || !$(this).prev().hasClass("social-link")) { 518 $(this).prepend(FroalaEditor.INVISIBLE_SPACE); 519 } 520 521 var sel = editor.win.getSelection(); 522 sel.removeAllRanges(); 523 sel.addRange(range); 524 }); 525 526 // Mouseup on link. 527 editor.events.$on(editor.$el, editor._mouseup, ".social-link, .delete-contact-form, .delete-row", function (e) { 528 e.preventDefault(); 529 }); 530 531 //Custom contact form 532 editor.events.$on(editor.$el, editor._mousedown, ".delete-contact-form", function (e) { 533 e.preventDefault(); 534 $(this).closest(".contact-form").remove(); 535 }); 536 537 editor.events.$on(editor.$el, editor._mousedown, ".delete-row", function (e) { 538 e.preventDefault(); 539 $(this).closest(".row").remove(); 540 }); 541 }, 542 focus: function focus() { 543 var editor = this; 544 $(editor.el).parents(".editable").addClass("editing"); 545 $(".brokercheck").addClass("remove-distraction"); 546 }, 547 blur: function blur() { 548 var editor = this; 549 $(editor.el).parents(".editable").removeClass("editing"); 550 $(".brokercheck").removeClass("remove-distraction"); 551 }, 552 contentChanged: function contentChanged() { 553 var editor = this; 554 $("#tot_content-save").show(); 555 $(editor).data("changed", true); 556 cleanBuild = false; 557 }, 558 "save.after": function saveAfter(data) { 559 var editor = this; 560 $("#tot_content-save").removeClass("loading").text("Success!").delay(500).fadeOut(300); 561 setTimeout(function () { 562 $("#tot_content-save").text("Save Changes"); 563 }, 1200); 564 $(editor).data("changed", false); 565 cleanBuild = true; 566 }, 567 "save.error": function saveError(error, response) { 568 $("#tot_content-save").removeClass("loading").text("Error!"); 569 setTimeout(function () { 570 $("#tot_content-save").text("Try Again"); 571 }, 800); 572 }, 573 keydown: function keydown(keydownEvent) { 574 var editor = this; 575 if (keydownEvent.defaultPrevented) { 576 return; 577 } 578 var key = keydownEvent.key || keydownEvent.keyCode; 579 if (key === "Escape" || key === "Esc" || key === 27) { 580 editor.codeView.toggle(); 581 } 582 } 583 } 584}); 585 586$(".content-save").on("click", function (e) { 587 e.preventDefault(); 588 589 $(this).addClass("loading").text("Saving..."); 590 591 $(editor).each(function () { 592 if ($(this).data("changed")) { 593 this.save.save(); 594 } 595 }); 596}); 597 598$(window).bind("beforeunload", function (e) { 599 if (!cleanBuild) { 600 e.preventDefault(); 601 return "Are you sure?"; 602 } 603}); 604 605if (window.devHelper && document.querySelector(".site-data")) { 606 // show dev helper button if activated 607 document.querySelector(".site-data").classList.add("is-active"); 608 document.getElementById("tot_content-save").classList.add("has-helper"); 609 610 // calculate missing alt tags 611 var imgs = document.querySelectorAll("img"); 612 var imgErrorCount = 0; 613 Array.from(imgs).forEach(function (img) { 614 if (!img.getAttribute("alt") && !img.classList.contains("is-alternate")) { 615 imgErrorCount++; 616 var src = img.getAttribute("src"); 617 document.querySelector(".calc--alt-srcs").insertAdjacentHTML("beforeend", "<span>" + src.substring(src.lastIndexOf("/") + 1) + "</span>"); 618 } 619 }); 620 document.querySelector(".calc--alt").innerText = imgErrorCount; 621 622 // calculate headline 623 var headline = document.querySelector("h1"); 624 document.querySelector(".calc--headline").innerText = headline ? headline.innerText : "not set"; 625 626 // attach click handler to show/hide dev helper drawer 627 var toggler = document.querySelector(".site-data--toggle"); 628 toggler.addEventListener("click", function (e) { 629 e.preventDefault(); 630 toggler.classList.toggle("is-open"); 631 document.querySelector(".site-data--content").classList.toggle("is-showing"); 632 }); 633} 634 635window.parent.postMessage(window.location.href, "*"); 636 637},{"./bg-video":1,"./calendly":2,"./contact":3,"./dropdown":4,"./emoney-video":5,"froala-editor/js/froala_editor.min":8,"froala-editor/js/plugins/align.min":9,"froala-editor/js/plugins/code_beautifier.min":10,"froala-editor/js/plugins/code_view.min":11,"froala-editor/js/plugins/colors.min":12,"froala-editor/js/plugins/draggable.min":13,"froala-editor/js/plugins/file.min":14,"froala-editor/js/plugins/image.min":15,"froala-editor/js/plugins/inline_style.min":16,"froala-editor/js/plugins/link.min":17,"froala-editor/js/plugins/lists.min":18,"froala-editor/js/plugins/paragraph_format.min":19,"froala-editor/js/plugins/paragraph_style.min":20,"froala-editor/js/plugins/quote.min":21,"froala-editor/js/plugins/save.min":22,"froala-editor/js/plugins/table.min":23,"froala-editor/js/plugins/video.min":24,"froala-editor/js/third_party/font_awesome.min":25,"velocity-animate":29}],7:[function(require,module,exports){ 638'use strict'; 639 640/** 641 * Return a JSON representation of a form 642 * @param {[type]} form [description] 643 * @return {[type]} [description] 644 */ 645module.exports = function (form) { 646 647 var _ = require('lodash'); 648 649 try { 650 var formArray = JSON.parse(JSON.stringify($(form).serializeArray())); 651 var obj = {}; 652 formArray.forEach(function (val) { 653 if (obj[val.name]) { 654 var tmpval = obj[val.name]; 655 if (!_.isArray(obj[val.name])) { 656 obj[val.name] = [tmpval]; 657 obj[val.name].push(val.value); 658 } else { 659 obj[val.name].push(val.value); 660 } 661 } else { 662 obj[val.name] = val.value; 663 } 664 }); 665 console.log(obj); 666 return obj; 667 } catch (e) { 668 console.error(e); 669 } 670}; 671 672},{"lodash":28}],8:[function(require,module,exports){ 673/*! 674 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 675 * License https://froala.com/wysiwyg-editor/terms/ 676 * Copyright 2014-2023 Froala Labs 677 */ 678 679!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.FroalaEditor=t()}(this,function(){"use strict";function M(e){return(M="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest||(Element.prototype.closest=function(e){var t=this;if(!document.documentElement.contains(t))return null;do{if(t.matches(e))return t;t=t.parentElement||t.parentNode}while(null!==t&&1===t.nodeType);return null}),Element.prototype.matches||(Element.prototype.matches=Element.prototype.matchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector||Element.prototype.oMatchesSelector||Element.prototype.webkitMatchesSelector||function(e){for(var t=(this.document||this.ownerDocument).querySelectorAll(e),n=t.length;0<=--n&&t.item(n)!==this;);return-1<n}),Array.isArray||(Array.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)}),"function"!=typeof Object.assign&&Object.defineProperty(Object,"assign",{value:function(e,t){if(null==e)throw new TypeError("Cannot convert undefined or null to object");for(var n=Object(e),r=1;r<arguments.length;r++){var o=arguments[r];if(null!=o)for(var i in o)Object.prototype.hasOwnProperty.call(o,i)&&(n[i]=o[i])}return n},writable:!0,configurable:!0}),function(){var a=/^\s*:scope/gi,s=/,\s*:scope/gi,l=document.createElement("div");function e(e,t){var i=e[t];e[t]=function(e){var t,n=!1,r=!1;if(!e||Array.isArray(e)||!e.match(a)&&!e.match(s))return i.call(this,e);this.parentNode||(l.appendChild(this),r=!0);var o=this.parentNode;return this.id||(this.id="rootedQuerySelector_id_".concat((new Date).getTime()),n=!0),t=i.call(o,e.replace(a,"#".concat(this.id
679)).replace(s,",#".concat(this.id))),n&&(this.id=""),r&&l.removeChild(this),t}}try{var t=l.querySelectorAll(":scope *");if(!t||Array.isArray(t))throw"error"}catch(n){e(Element.prototype,"querySelector"),e(Element.prototype,"querySelectorAll"),e(HTMLElement.prototype,"querySelector"),e(HTMLElement.prototype,"querySelectorAll")}}(),"document"in self&&("classList"in document.createElement("_")&&(!document.createElementNS||"classList"in document.createElementNS("http://www.w3.org/2000/svg","g"))||function(e){if("Element"in e){var t="classList",n="prototype",r=e.Element[n],o=Object,i=String[n].trim||function(){return this.replace(/^\s+|\s+$/g,"")},a=Array[n].indexOf||function(e){for(var t=0,n=this.length;t<n;t++)if(t in this&&this[t]===e)return t;return-1},s=function s(e,t){this.name=e,this.code=DOMException[e],this.message=t},l=function l(e,t){if(""===t)throw new s("SYNTAX_ERR","The token must not be empty.");if(/\s/.test(t))throw new s("INVALID_CHARACTER_ERR","The token must not contain space characters.");return a.call(e,t)},c=function c(e){for(var t=i.call(e.getAttribute("class")||""),n=t?t.split(/\s+/):[],r=0,o=n.length;r<o;r++)this.push(n[r]);this._updateClassName=function(){e.setAttribute("class",this.toString())}},d=c[n]=[],f=function f(){return new c(this)};if(s[n]=Error[n],d.item=function(e){return this[e]||null},d.contains=function(e){return~l(this,e+"")},d.add=function(){for(var e,t=arguments,n=0,r=t.length,o=!1;e=t[n]+"",~l(this,e)||(this.push(e),o=!0),++n<r;);o&&this._updateClassName()},d.remove=function(){var e,t,n=arguments,r=0,o=n.length,i=!1;do{for(e=n[r]+"",t=l(this,e);~t;)this.splice(t,1),i=!0,t=l(this,e)}while(++r<o);i&&this._updateClassName()},d.toggle=function(e,t){var n=this.contains(e),r=n?!0!==t&&"remove":!1!==t&&"add";return r&&this[r](e),!0===t||!1===t?t:!n},d.replace=function(e,t){var n=l(e+"");~n&&(this.splice(n,1,t),this._updateClassName())},d.toString=function(){return this.join(" ")},o.defineProperty){var p={get:f,enumerable:!0,configurable:!0};try{o.defineProperty(r,t,p)}catch(h){void 0!==h.number&&-2146823252!==h.number||(p.enumerable=!1,o.defineProperty(r,t,p))}}else o[n].__defineGetter__&&r.__defineGetter__(t,f)}}(self),function(){var e=document.createElement("_");if(e.classList.add("c1","c2"),!e.classList.contains("c2")){var t=function yc(e){var yc=DOMTokenList.prototype[e];DOMTokenList.prototype[e]=function(e){var t,n=arguments.length;for(t=0;t<n;t++)e=arguments[t],yc.call(this,e)}};t("add"),t("remove")}if(e.classList.toggle("c3",!1),e.classList.contains("c3")){var n=DOMTokenList.prototype.toggle;DOMTokenList.prototype.toggle=function(e,t){return 1 in arguments&&!this.contains(e)==!t?t:n.call(this,e)}}"replace"in document.createElement("_").classList||(DOMTokenList.prototype.replace=function(e,t){var n=this.toString().split(" "),r=n.indexOf(e+"");~r&&(n=n.slice(r),this.remove.apply(this,n),this.add(t),this.add.apply(this,n.slice(1)))}),e=null}()),function(){var e,t=-1;if("Microsoft Internet Explorer"===navigator.appName?(e=navigator.userAgent,null!==new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})").exec(e)&&(t=parseFloat(RegExp.$1))):"Netscape"===navigator.appName&&(e=navigator.userAgent,null!==new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})").exec(e)&&(t=parseFloat(RegExp.$1))),!("undefined"==typeof window||"undefined"==typeof document||"undefined"==typeof HTMLElement||t<0)){var n=!1;try{var r=document.createElement("div");r.addEventListener("focus",function(e){e.preventDefault(),e.stopPropagation()},!0),r.focus(Object.defineProperty({},"preventScroll",{get:function(){if(navigator&&"undefined"!=typeof navigator.userAgent&&navigator.userAgent&&navigator.userAgent.match(/Edge\/1[7-8]/))return n=!1;n=!0}}))}catch(s){}if(HTMLElement.prototype.nativeFocus===undefined&&!n){HTMLElement.prototype.nativeFocus=HTMLElement.prototype.focus;var o=function o(e){for(var t=e.parentNode,n=[],r=document.scrollingElement||document.documentElement;t&&t!==r;)(t.offsetHeight<t.scrollHeight||t.offsetWidth<t.scrollWidth)&&n.push([t,t.scrollTop,t.scrollLeft]),t=t.parentNode;return t=r,n.push([t,t.scrollTop,t.scrollLeft]),n},i=function i(e){for(var t=0;t<e.length;t++)e[t][0].scrollTop=e[t][1],e[t][0].scrollLeft=e[t][2];e=[]},a=function a(e){if(e&&e.preventScroll){var t=o(this);if("function"==typeof setTimeout){var n=this;setTimeout(function(){n.nativeFocus(),i(t)},0)}else this.nativeFocus(),i(t)}else this.nativeFocus()};
vendor: 5,277 bytes, line 679
679HTMLElement.prototype.focus=a}}}();function V(e,t,n){if("string"!=typeof e)return new V.Bootstrap(e,t,n);var r=document.querySelectorAll(e);t&&t.iframe_document&&(r=t.iframe_document.querySelectorAll(e));for(var o=[],i=0;i<r.length;i++){var a=r[i]["data-froala.editor"];a?o.push(a):o.push(new V.Bootstrap(r[i],t,n))}return 1==o.length?o[0]:o}V.RegisterPlugins=function(e){for(var t=0;t<e.length;t++)e[t].call(V)},Object.assign(V,{DEFAULTS:{initOnClick:!1,pluginsEnabled:null},MODULES:{},PLUGINS:{},VERSION:"4.0.17",INSTANCES:[],OPTS_MAPPING:{},SHARED:{},ID:0}),V.MODULES.node=function(a){var n=a.$;function s(e){return e&&"IFRAME"!==e.tagName?Array.prototype.slice.call(e.childNodes||[]):[]}function l(e){return!!e&&(e.nodeType===Node.ELEMENT_NODE&&0<=V.BLOCK_TAGS.indexOf(e.tagName.toLowerCase()))}function c(e){var t={},n=e.attributes;if(n)for(var r=0;r<n.length;r++){var o=n[r];t[o.nodeName]=o.value}return t}function t(e){for(var t="",n=c(e),r=Object.keys(n).sort(),o=0;o<r.length;o++){var i=r[o],a=n[i];a.indexOf("'")<0&&0<=a.indexOf('"')?t+=" ".concat(i,"='").concat(a,"'"):(0<=a.indexOf('"')&&0<=a.indexOf("'")&&(a=a.replace(/"/g,""")),t+=" ".concat(i,'="').concat(a,'"'))}return t}function r(e){return e===a.el}return{isBlock:l,isEmpty:function d(e,t){if(!e)return!0;if(e.querySelector("table"))return!1;var n=s(e);1===n.length&&l(n[0])&&(n=s(n[0]));for(var r=!1,o=0;o<n.length;o++){var i=n[o];if(!(t&&a.node.hasClass(i,"fr-marker")||i.nodeType===Node.TEXT_NODE&&0===i.textContent.length)){if("BR"!==i.tagName&&0<(i.textContent||"").replace(/\u200B/gi,"").replace(/\n/g,"").length)return!1;if(r)return!1;"BR"===i.tagName&&(r=!0)}}return!(e.querySelectorAll(V.VOID_ELEMENTS.join(",")).length-e.querySelectorAll("br").length||e.querySelector("".concat(a.opts.htmlAllowedEmptyTags.join(":not(.fr-marker),"),":not(.fr-marker)"))||1<e.querySelectorAll(V.BLOCK_TAGS.join(",")).length||e.querySelector("".concat(a.opts.htmlDoNotWrapTags.join(":not(.fr-marker),"),":not(.fr-marker)")))},blockParent:function o(e){for(;e&&e.parentNode!==a.el&&(!e.parentNode||!a.node.hasClass(e.parentNode,"fr-inner"));)if(l(e=e.parentNode))return e;return null},deepestParent:function i(e,t,n){if(void 0===t&&(t=[]),void 0===n&&(n=!0),t.push(a.el),0<=t.indexOf(e.parentNode)||e.parentNode&&a.node.hasClass(e.parentNode,"fr-inner")||e.parentNode&&0<=V.SIMPLE_ENTER_TAGS.indexOf(e.parentNode.tagName)&&n)return null;for(;t.indexOf(e.parentNode)<0&&e.parentNode&&!a.node.hasClass(e.parentNode,"fr-inner")&&(V.SIMPLE_ENTER_TAGS.indexOf(e.parentNode.tagName)<0||!n)&&(!l(e)||l(e.parentNode))&&(!l(e)||!l(e.parentNode)||!n);)e=e.parentNode;return e},rawAttributes:c,attributes:t,clearAttributes:function f(e){for(var t=e.attributes,n=t.length-1;0<=n;n--){var r=t[n];e.removeAttribute(r.nodeName)}},openTagString:function p(e){return"<".concat(e.tagName.toLowerCase()).concat(t(e),">")},closeTagString:function h(e){return"</".concat(e.tagName.toLowerCase(),">")},isFirstSibling:function u(e,t){void 0===t&&(t=!0);for(var n=e.previousSibling;n&&t&&a.node.hasClass(n,"fr-marker");)n=n.previousSibling;return!n||n.nodeType===Node.TEXT_NODE&&""===n.textContent&&u(n)},isLastSibling:function g(e,t){void 0===t&&(t=!0);for(var n=e.nextSibling;n&&t&&a.node.hasClass(n,"fr-marker");)n=n.nextSibling;return!n||n.nodeType===Node.TEXT_NODE&&""===n.textContent&&g(n)},isList:function C(e){return!!e&&0<=["UL","OL"].indexOf(e.tagName)},isLink:function m(e){return!!e&&e.nodeType===Node.ELEMENT_NODE&&"a"===e.tagName.toLowerCase()},isElement:r,contents:s,isVoid:function v(e){return e&&e.nodeType===Node.ELEMENT_NODE&&0<=V.VOID_ELEMENTS.indexOf((e.tagName||"").toLowerCase())},hasFocus:function b(e){return e===a.doc.activeElement&&(!a.doc.hasFocus||a.doc.hasFocus())&&Boolean(r(e)||e.type||e.href||~e.tabIndex)},isEditable:function L(e){return(!e.getAttribute||"false"!==e.getAttribute("contenteditable"))&&["STYLE","SCRIPT"].indexOf(e.tagName)<0},isDeletable:function E(e){return e&&e.nodeType===Node.ELEMENT_NODE&&e.getAttribute("class")&&0<=(e.getAttribute("class")||"").indexOf("fr-deletable")},hasClass:function y(e,t){return e instanceof n&&(e=e.get(0)),e&&e.classList&&e.classList.contains(t)},filter:function S(e){return a.browser.msie?e:{acceptNode:e}}}},Object.assign(V.DEFAULTS,{DOMPurify:window.DOMPurify,htmlAllowedTags:["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","br","button","canvas","caption","cite","code","col","colgroup","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meter","nav","noscript","object","ol","optgroup","option","output","p","param","pre","progress","queue","rp","rt","ruby","s","samp","script","style","section","select","small","source","span","strike","strong","sub","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","track","u","ul","var","video","wbr"],htmlRemoveTags:["script","style"],htmlAllowedAttrs:["accept","accept-charset","accesskey","action","align","allowfullscreen","allowtransparency","alt","async","autocomplete","autofocus","auto
679play","autosave","background","bgcolor","border","charset","cellpadding","cellspacing","checked","cite","class","color","cols","colspan","content","contenteditable","contextmenu","controls","coords","data","data-.*","datetime","default","defer","dir","dirname","disabled","download","draggable","dropzone","enctype","for","form","formaction","frameborder","headers","height","hidden","high","href","hreflang","http-equiv","icon","id","ismap","itemprop","keytype","kind","label","lang","language","list","loop","low","max","maxlength","media","method","min","mozallowfullscreen","multiple","muted","name","novalidate","open","optimum","pattern","ping","placeholder","playsinline","poster","preload","pubdate","radiogroup","readonly","rel","required","reversed","rows","rowspan","sandbox","scope","scoped","scrolling","seamless","selected","shape","size","sizes","span","src","srcdoc","srclang","srcset","start","step","summary","spellcheck","style","tabindex","target","title","type","translate","usemap","value","valign","webkitallowfullscreen","width","wrap"],htmlAllowedStyleProps:[".*"],htmlAllowComments:!0,htmlUntouched:!1,fullPage:!1}),V.HTML5Map={B:"STRONG",I:"EM",STRIKE:"S"},V.MODULES.clean=function(f){var d,p,h,u,g=f.$;function o(e){if(e.nodeType===Node.ELEMENT_NODE&&e.getAttribute("class")&&0<=e.getAttribute("class").indexOf("fr-marker"))return!1;var t,n=f.node.contents(e),r=[];for(t=0;t<n.length;t++)n[t].nodeType!==Node.ELEMENT_NODE||f.node.isVoid(n[t])?n[t].nodeType===Node.TEXT_NODE&&(n[t].textContent=n[t].textContent.replace(/\u200b/g,"")):n[t].textContent.replace(/\u200b/g,"").length!==n[t].textContent.length&&o(n[t]);if(e.nodeType===Node.ELEMENT_NODE&&!f.node.isVoid(e)&&(e.normalize(),n=f.node.contents(e),r=e.querySelectorAll(".fr-marker"),n.length-r.length==0)){for(t=0;t<n.length;t++)if(n[t].nodeType===Node.ELEMENT_NODE&&(n[t].getAttribute("class")||"").indexOf("fr-marker")<0)return!1;for(t=0;t<r.length;t++)e.parentNode.insertBefore(r[t].cloneNode(!0),e);return e.parentNode.removeChild(e),!1}}function s(e,t){if(e.nodeType===Node.COMMENT_NODE)return"\x3c!--".concat(e.nodeValue,"--\x3e");if(e.nodeType===Node.TEXT_NODE)return t?e.textContent.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"):e.textContent.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/\u00A0/g," ").replace(/\u0009/g,"");if(e.nodeType!==Node.ELEMENT_NODE)return e.outerHTML;if(e.nodeType===Node.ELEMENT_NODE&&0<=["STYLE","SCRIPT","NOSCRIPT"].indexOf(e.tagName))return e.outerHTML;if(e.nodeType===Node.ELEMENT_NODE&&"svg"===e.tagName){var n=document.createElement("div"),r=e.cloneNode(!0);return n.appendChild(r),n.innerHTML}if("IFRAME"===e.tagName)return e.outerHTML.replace(/</g,"<").replace(/>/g,">");var o=e.childNodes;if(0===o.length)return e.outerHTML;for(var i="",a=0;a<o.length;a++)"PRE"===e.tagName&&(t=!0),i+=s(o[a],t);return f.node.openTagString(e)+i+f.node.closeTagString(e)}var l=[];function C(e){var t=e.replace(/;;/gi,";");return";"!==(t=t.replace(/^;/gi,"")).charAt(t.length)&&(t+=";"),t}function c(e){var t;for(t in e)if(Object.prototype.hasOwnProperty.call(e,t)){var n=t.match(h),r=null;"style"===t&&f.opts.htmlAllowedStyleProps.length&&(r=e[t].match(u)),n&&r?e[t]=C(r.join(";")):n&&("style"!==t||r)||delete e[t]}for(var o="",i=Object.keys(e).sort(),a=0;a<i.length;a++)e[t=i[a]].indexOf('"')<0?o+=" ".concat(t,'="').concat(e[t],'"'):o+=" ".concat(t,"='").concat(e[t],"'");return o}function m(e,t){var n,r=document.implementation.createHTMLDocument("Froala DOC").createElement("DIV");g(r).append(e);var o="";if(r){var i=f.node.contents(r);for(n=0;n<i.length;n++)t(i[n]);for(i=f.node.contents(r),n=0;n<i.length;n++)o+=s(i[n])}return o}function v(e,t,n){var r=e=function i(e){return l=[],e=(e=(e=(e=e.replace(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,function(e){return l.push(e),"[FROALA.EDITOR.SCRIPT ".concat(l.length-1,"]")})).replace(/<noscript\b[^<]*(?:(?!<\/noscript>)<[^<]*)*<\/noscript>/gi,function(e){return l.push(e),"[FROALA.EDITOR.NOSCRIPT ".concat(l.length-1,"]")})).replace(/<meta((?:[\w\W]*?)) http-equiv="/g,'<meta$1 data-fr-http-equiv="')).replace(/<img((?:[\w\W]*?)) src="/g,'<img$1 data-fr-src="')}(e),o=null;return f.opts.fullPage&&(r=f.html.extractNode(e,"body")||(0<=e.indexOf("<body")?"":e),n&&(o=f.html.extractNode(e,"head")||"")),r=m(r,t),o&&(o=m(o,t)),function a(e){return e=(e=(e=e.replace(/\[FROALA\.EDITOR\.SCRIPT ([\d]*)\]/gi,function(e,t){return 0<=f.opts.htmlRemoveTags.indexOf("script")?"":l[parseInt(t,10)]})).replace(/\[FROALA\.EDITOR\.NOSCRIPT ([\d]*)\]/gi,function(e,t){if(0<=f.opts.htmlRemoveTags.indexOf("noscript"))return"";var n=l[parseInt(t,10)].replace(/</g,"<").replace(/>/g,">"),r=g(n);if(r&&r.length){var o=m(r.html(),L);r.html(o),n=r.get(0).outerHTML}return n})).replace(/<img((?:[\w\W]*?)) data-fr-src="/g,'<img$1 src="')}(function s(e,t,n){if(f.opts.fullPage){var r=f.html.extractDoctype(n),o=c(f.html.extractNodeAttrs(n,"html"));t=null===t?f.html.extractNode(n,"head")||"<title></title>":t;var i=c(f.html.extractNodeAttrs(n,"head")),a=c(f.html.extractNodeAttrs(n,"body"));return"".concat(r,"<html").concat(o,"><head").concat(i,">").concat(t,"</head><body").concat(a,">").concat(e,"</body></html>")}return e}(r,o,e))}function b(e){var t=f.doc.createElement("DIV");return t.innerText=e,t.textContent}function L(e){for(var t=f.node.contents(e),n=0;n<t.length;n++)t[n].nodeType!==Node.TEXT_NODE&&L(t[n]);!function c(a){if("SPAN"===a.tagName&&0<=(a.getAttribute("class")||"").indexOf("fr-marker"))return!1;if("PRE"===a.tagName&&function l(e){var t=e.innerHTML;0<=t.indexOf("\n")&&(e.innerHTML=t.replace(/\n/g,"<br>"))}(a),a.nodeType===Node.ELEMENT_NODE&&(a.getAttribute("data-fr-src")&&0!==a.getAttribute("data-fr-src").indexOf("blob:")&&a.setAttribute("data-fr-src",f.helpers.sanitizeURL(b(a.getAttribute("data-fr-src")))),a.getAttribute("href")&&a.setAttribute("href",f.helpers.sanitizeURL(b(a.getAttribute("href")))),a.getAttribute("src")&&a.setAttribute("src",f.helpers.sanitizeURL(b(a.getAttribute("src")))),a.getAttribute("srcdoc")&&a.setAttribute("srcdoc",f.clean.html(a.getAttribute("srcdoc"))),0<=["TABLE","TBODY","TFOOT","TR"].indexOf(a.tagName)&&(a.innerHTML=a.innerHTML.trim())),!f.opts.pasteAllowLocalImages&&a.nodeType===Node.ELEMENT_NODE&&"IMG"===a.tagName&&a.getAttribute("data-fr-src")&&0===a.getAttribute("data-fr-src").indexOf("file://"))return a.parentNode.removeChild(a),!1;if(a.nodeType===Node.ELEMENT_NODE&&V.HTML5Map[a.tagName]&&""===f.node.attributes(a)){var e=V.HTML5Map[a.tagName],t="<".concat(e,">").concat(a.innerHTML,"</").concat(e,">");a.insertAdjacentHTML("beforebegin",t),(a=a.previousSibling).parentNode.removeChild(a.nextSibling)}if(f.opts.htmlAllowComments||a.nodeType!==Node.COMMENT_NODE)if(a.tagName&&a.tagName.match(p))"STYLE"==a.tagName&&f.helpers.isMac()&&function(){var e,n=a.innerHTML.trim(),r
vendor: 5,175 bytes, line 679
679=[],t=/{([^}]+)}/g;for(n=n.replace(/\/\*[\s\S]*?\*\/|([^\\:]|^)\/\/.*|<!--[\s\S]*?-->$/,"");e=t.exec(n);)r.push(e[1]);for(var o=function o(t){var e=n.substring(0,n.indexOf("{")).trim();0==!/^[a-z_-][a-z\d_-]*$/i.test(e)&&a.parentNode.querySelectorAll(e).forEach(function(e){e.removeAttribute("class"),e.setAttribute("style",r[t])}),n=n.substring(n.indexOf("}")+1)},i=0;-1!=n.indexOf("{");i++)o(i)}(),a.parentNode.removeChild(a);else if(a.tagName&&!a.tagName.match(d))"svg"===a.tagName?a.parentNode.removeChild(a):f.browser.safari&&"path"===a.tagName&&a.parentNode&&"svg"===a.parentNode.tagName||(a.outerHTML=a.innerHTML);else{var n=a.attributes;if(n)for(var r=n.length-1;0<=r;r--){var o=n[r],i=o.nodeName.match(h),s=null;"style"===o.nodeName&&f.opts.htmlAllowedStyleProps.length&&(s=o.value.match(u)),i&&s?o.value=C(s.join(";")):i&&("style"!==o.nodeName||s)||a.removeAttribute(o.nodeName)}}else 0!==a.data.indexOf("[FROALA.EDITOR")&&a.parentNode.removeChild(a)}(e)}return{_init:function e(){f.opts.fullPage&&g.merge(f.opts.htmlAllowedTags,["head","title","style","link","base","body","html","meta"])},html:function E(e,t,n,r){void 0===t&&(t=[]),void 0===n&&(n=[]),void 0===r&&(r=!1);var o,i=g.merge([],f.opts.htmlAllowedTags);for(o=0;o<t.length;o++)0<=i.indexOf(t[o])&&i.splice(i.indexOf(t[o]),1);var a=g.merge([],f.opts.htmlAllowedAttrs);for(o=0;o<n.length;o++)0<=a.indexOf(n[o])&&a.splice(a.indexOf(n[o]),1);return a.push("data-fr-.*"),a.push("fr-.*"),d=new RegExp("^".concat(i.join("$|^"),"$"),"gi"),h=new RegExp("^".concat(a.join("$|^"),"$"),"gi"),p=new RegExp("^".concat(f.opts.htmlRemoveTags.join("$|^"),"$"),"gi"),u=f.opts.htmlAllowedStyleProps.length?new RegExp("((^|;|\\s)".concat(f.opts.htmlAllowedStyleProps.join(":.+?(?=;|$))|((^|;|\\s)"),":.+?(?=(;)|$))"),"gi"):null,e=v(e,L,!0),"undefined"!=typeof f.opts.DOMPurify&&(e=f.opts.DOMPurify.sanitize(e,{ADD_TAGS:f.opts.htmlAllowedTags,ALLOW_UNKNOWN_PROTOCOLS:!0})),e},toHTML5:function r(){var e=f.el.querySelectorAll(Object.keys(V.HTML5Map).join(","));if(e.length){var t=!1;f.el.querySelector(".fr-marker")||(f.selection.save(),t=!0);for(var n=0;n<e.length;n++)""===f.node.attributes(e[n])&&g(e[n]).replaceWith("<".concat(V.HTML5Map[e[n].tagName],">").concat(e[n].innerHTML,"</").concat(V.HTML5Map[e[n].tagName],">"));t&&f.selection.restore()}},tables:function t(){!function s(){for(var e=f.el.querySelectorAll("tr"),t=0;t<e.length;t++){for(var n=e[t].children,r=!0,o=0;o<n.length;o++)if("TH"!==n[o].tagName){r=!1;break}if(!1!==r&&0!==n.length){for(var i=e[t];i&&"TABLE"!==i.tagName&&"THEAD"!==i.tagName;)i=i.parentNode;var a=i;"THEAD"!==a.tagName&&(a=f.doc.createElement("THEAD"),i.insertBefore(a,i.firstChild)),a.appendChild(e[t])}}}()},lists:function y(){!function s(){var e,t=[];do{if(t.length){var n=t[0],r=f.doc.createElement("ul");n.parentNode.insertBefore(r,n);do{var o=n;n=n.nextSibling,r.appendChild(o)}while(n&&"LI"===n.tagName)}t=[];for(var i=f.el.querySelectorAll("li"),a=0;a<i.length;a++)e=i[a],f.node.isList(e.parentNode)||t.push(i[a])}while(0<t.length)}(),function i(){for(var e=f.el.querySelectorAll("ol + ol, ul + ul"),t=0;t<e.length;t++){var n=e[t];if(f.node.isList(n.previousSibling)&&f.node.openTagString(n)===f.node.openTagString(n.previousSibling)){for(var r=f.node.contents(n),o=0;o<r.length;o++)n.previousSibling.appendChild(r[o]);n.parentNode.removeChild(n)}}}(),function a(){for(var e=f.el.querySelectorAll("ul, ol"),t=0;t<e.length;t++)for(var n=f.node.contents(e[t]),r=null,o=n.length-1;0<=o;o--)!n[o].tagName&&f.opts.htmlUntouched||"LI"===n[o].tagName||"UL"==n[o].tagName||"OL"==n[o].tagName?r=null:"BR"==n[o].tagName?g(n[o]).remove():(r||(r=g(f.doc.createElement("LI"))).insertBefore(n[o]),r.prepend(n[o]))}(),function l(){var e,t,n;do{t=!1;var r=f.el.querySelectorAll("li:empty");for(e=0;e<r.length;e++)r[e].parentNode.removeChild(r[e]);var o=f.el.querySelectorAll("ul, ol");for(e=0;e<o.length;e++)(n=o[e]).querySelector("LI")||(t=!0,n.parentNode.removeChild(n))}while(!0===t)}(),function o(){for(var e=f.el.querySelectorAll("ul > ul, ol > ol, ul > ol, ol > ul"),t=0;t<e.length;t++){var n=e[t],r=n.previousSibling;r&&("LI"===r.tagName?r.appendChild(n):g(n).wrap("<li></li>"))}}(),function c(){for(var e=f.el.querySelectorAll("li > ul, li > ol"),t=0;t<e.length;t++){var n=e[t];if(n.nextSibling)for(var r=n.nextSibling;0<r.childNodes.length;)n.append(r.childNodes[0])}}(),function d(){for(var e=f.el.querySelectorAll("li > ul, li > ol"),t=0;t<e.length;t++){var n=e[t];if(f.node.isFirstSibling(n)&&"none"!=n.parentNode.style.listStyleType)g(n).before("<br/>");else if(n.previousSibling&&"BR"===n.previousSibling.tagName){for(var r=n.previousSibling.previousSibling;r&&f.node.hasClass(r,"fr-marker");)r=r.previousSibling;r&&"BR"!==r.tagName&&g(n.previousSibling).remove()}}}(),function n(){for(var e=f.el.querySelectorAll("li:empty"),t=0;t<e.length;t++)g(e[t]).remove()}()},invisibleSpaces:function n(e){return e.replace(/\u200b/g,"").length===e.length?e:f.clean.exec(e,o)},exec:v}},V.XS=0,V.SM=1,V.MD=2,V.LG=3;V.LinkRegExCommon="[".concat("a-z\\u0080-\\u009f\\u00a1-\\uffff0-9-_\\.","]{1,}"),V.LinkRegExEnd="((:[0-9]{1,5})|)(((\\/|\\?|#)[a-z\\u00a1-\\uffff0-9@?\\|!^=%&\\/~+#-\\'*-_{}
679]*)|())",V.LinkRegExTLD="((".concat(V.LinkRegExCommon,")(\\.(com|net|org|edu|mil|gov|co|biz|info|me|dev)))"),V.LinkRegExHTTP="((ftp|http|https):\\/\\/".concat(V.LinkRegExCommon,")"),V.LinkRegExAuth="((ftp|http|https):\\/\\/[\\u0021-\\uffff]{1,}@".concat(V.LinkRegExCommon,")"),V.LinkRegExWWW="(www\\.".concat(V.LinkRegExCommon,"\\.[a-z0-9-]{2,24})"),V.LinkRegEx="(".concat(V.LinkRegExTLD,"|").concat(V.LinkRegExHTTP,"|").concat(V.LinkRegExWWW,"|").concat(V.LinkRegExAuth,")").concat(V.LinkRegExEnd),V.LinkProtocols=["mailto","tel","sms","notes","data"],V.MAIL_REGEX=/.+@.+\..+/i,V.MODULES.helpers=function(i){var a,s=i.$;function e(){var e={},t=function i(){var e,t=-1;return"Microsoft Internet Explorer"===navigator.appName?(e=navigator.userAgent,null!==new RegExp("MSIE ([0-9]{1,}[\\.0-9]{0,})").exec(e)&&(t=parseFloat(RegExp.$1))):"Netscape"===navigator.appName&&(e=navigator.userAgent,null!==new RegExp("Trident/.*rv:([0-9]{1,}[\\.0-9]{0,})").exec(e)&&(t=parseFloat(RegExp.$1))),t}();if(0<t)e.msie=!0;else{var n=navigator.userAgent.toLowerCase(),r=/(edge)[ /]([\w.]+)/.exec(n)||/(chrome)[ /]([\w.]+)/.exec(n)||/(webkit)[ /]([\w.]+)/.exec(n)||/(opera)(?:.*version|)[ /]([\w.]+)/.exec(n)||/(msie) ([\w.]+)/.exec(n)||n.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(n)||[],o=r[1]||"";r[2];r[1]&&(e[o]=!0),e.chrome?e.webkit=!0:e.webkit&&(e.safari=!0)}return e.msie&&(e.version=t),e}function t(){return/(iPad|iPhone|iPod)/g.test(navigator.userAgent)&&!o()}function n(){return/(Android)/g.test(navigator.userAgent)&&!o()}function r(){return/(Blackberry)/g.test(navigator.userAgent)}function o(){return/(Windows Phone)/gi.test(navigator.userAgent)}var l=null;return{_init:function c(){i.browser=e()},isIOS:t,isMac:function d(){return null===l&&(l=0<=navigator.platform.toUpperCase().indexOf("MAC")),l},isAndroid:n,isBlackberry:r,isWindowsPhone:o,isMobile:function f(){return n()||t()||r()},isEmail:function p(e){return!/^(https?:|ftps?:|)\/\//i.test(e)&&V.MAIL_REGEX.test(e)},requestAnimationFrame:function h(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(e){window.setTimeout(e,1e3/60)}},getPX:function u(e){return parseInt(e,10)||0},screenSize:function g(e){try{var t=0;if((t=e?i.$box.width():i.$sc.width())<768)return V.XS;if(768<=t&&t<992)return V.SM;if(992<=t&&t<1200)return V.MD;if(1200<=t)return V.LG}catch(n){return V.LG}},isTouch:function C(){return"ontouchstart"in window||window.DocumentTouch&&document instanceof window.DocumentTouch},sanitizeURL:function m(e){return i.opts.DOMPurify&&(e=i.opts.DOMPurify.sanitize(e,{ADD_TAGS:i.opts.htmlAllowedTags,ALLOW_UNKNOWN_PROTOCOLS:!0,ALLOWED_URI_REGEXP:/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp|xxx):|[^a-z]|[a-z+.]+(?:[^a-z+.\-:]|$))/i})),/^(https?:|ftps?:|)\/\//i.test(e)?e:/^([A-Za-z]:(\\){1,2}|[A-Za-z]:((\\){1,2}[^\\]+)+)(\\)?$/i.test(e)?e:new RegExp("^(".concat(V.LinkProtocols.join("|"),"):"),"i").test(e)?e:e=encodeURIComponent(e).replace(/%23/g,"#").replace(/%2F/g,"/").replace(/%25/g,"%").replace(/mailto%3A/gi,"mailto:").replace(/file%3A/gi,"file:").replace(/sms%3A/gi,"sms:").replace(/tel%3A/gi,"tel:").replace(/notes%3A/gi,"notes:").replace(/data%3Aimage/gi,"data:image").replace(/blob%3A/gi,"blob:").replace(/%3A(\d)/gi,":$1").replace(/webkit-fake-url%3A/gi,"webkit-fake-url:").replace(/%3F/g,"?").replace(/%3D/g,"=").replace(/%26/g,"&").replace(/&/g,"&").replace(/%2C/g,",").replace(/%3B/g,";").replace(/%2B/g,"+").replace(/%40/g,"@").replace(/%5B/g,"[").replace(/%5D/g,"]").replace(/%7B/g,"{").replace(/%7D/g,"}").replace(/%[0-1]+[0-9]+|%[0-1]+[A-F]+/g,"")},isArray:function v(e){return e&&!Object.prototype.propertyIsEnumerable.call(e,"length")&&"object"===M(e)&&"number"==typeof e.length},RGBToHex:function b(e){function t(e){return"0".concat(parseInt(e,10).toString(16)).slice(-2)}try{return e&&"transparent"!==e?/^#[0-9A-F]{6}$/i.test(e)?e:(e=e.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/),"#".concat(t(e[1])).concat(t(e[2])).concat(t(e[3])).toUpperCase()):""}catch(n){return null}},HEXtoRGB:function L(e){e=e.replace(/^#?([a-f\d])([a-f\d])([a-f\d])$/i,function(e,t,n,r){return t+t+n+n+r+r});var t=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(e);return t?"rgb(".concat(parseInt(t[1],16),", ").concat(parseInt(t[2],16),", ").concat(parseInt(t[3],16),")"):""},isURL:function E(e){return!!/^(https?:|ftps?:|)\/\//i.test(e)&&(e=String(e).replace(/</g,"%3C").replace(/>/g,"%3E").replace(/"/g,"%22").replace(/ /g,"%20"),new RegExp("^".concat(V.LinkRegExHTTP).concat(V.LinkRegExEnd,"$"),"gi").test(e))},getAlignment:function y(e){e.css||(e=s(e));var t=(e.css("text-align")||"").replace(/-(.*)-/g,"");if(["left","right","justify","center"].indexOf(t)<0){if(!a){var n=s('<div dir="'.concat("rtl"===i.opts.direction?"rtl":"auto",'" style="text-align: ').concat(i.$el.css("text-align"),'; position: fixed; left: -3000px;"><span id="s1">.</span><span id="s2">.</span></div>'));s("body").first().append(n);var r=n.find("#s1").get(0).getBoundingClientRect().left,o=n.find("#s2").get(0).getBoundingClientRect().left;n.remove(),a=r<o?"left":"right"}t=a}return t},scrollTop:function S(){return i.o_win.pageYOffset?i.o_win.pageYOffset:i.o_doc.documentElement&&i.o_doc.documentElement.scrollTop?i.o_doc.documentElement.scrollTop:i.o_doc.body.scrollTop?i.o_doc.body.scrollTop:0},scrollLeft:function N(){return i.o_win.pageXOffset?i.o_win.pageXOffset:i.o_doc.documentElement&&i.o_doc.documentElement.scrollLeft?i.o_doc.documentElement.scrollLeft:i.o_doc.body.scrollLeft?i.o_doc.body.scrollLeft:0},isInViewPort:function T(e){var t=e.getBoundingClientRect();return 0<=(t={top:Math.round(t.top),bottom:Math.round(t.bottom)}).top&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)||t.top<=0&&t.bottom>=(window.innerHeight||document.documentElement.clientHeight)}}},V.MODULES.events=function(l){var e,i=l.$,a={};
vendor: 4,247 bytes, line 679
679function s(e,t,n){C(e,t,n)}function c(e){if(void 0===e&&(e=!0),!l.$wp)return!1;if(l.helpers.isIOS()&&l.$win.get(0).focus(),l.core.hasFocus())return!1;if(!l.core.hasFocus()&&e){var t=l.$win.scrollTop();if(l.browser.msie&&l.$box&&l.$box.css("position","fixed"),l.browser.msie&&l.$wp&&l.$wp.css("overflow","visible"),l.browser.msie&&l.$sc&&l.$sc.css("position","fixed"),l.browser.msie||(p(),l.el.focus(),l.events.trigger("focus"),f()),l.browser.msie&&l.$sc&&l.$sc.css("position",""),l.browser.msie&&l.$box&&l.$box.css("position",""),l.browser.msie&&l.$wp&&l.$wp.css("overflow","auto"),t!==l.$win.scrollTop()&&l.$win.scrollTop(t),!l.selection.info(l.el).atStart)return!1}if(!l.core.hasFocus()||0<l.$el.find(".fr-marker").length)return!1;if(l.selection.info(l.el).atStart&&l.selection.isCollapsed()&&null!==l.html.defaultTag()){var n=l.markers.insert();if(n&&!l.node.blockParent(n)){i(n).remove();var r=l.$el.find(l.html.blockTagsQuery()).get(0);r&&(i(r).prepend(V.MARKERS),l.selection.restore())}else n&&i(n).remove()}}var d=!1;function f(){e=!0}function p(){e=!1}function h(){return e}function u(e,t,n){var r,o=e.split(" ");if(1<o.length){for(var i=0;i<o.length;i++)u(o[i],t,n);return!0}void 0===n&&(n=!1),r=0!==e.indexOf("shared.")?(a[e]=a[e]||[],a[e]):(l.shared._events[e]=l.shared._events[e]||[],l.shared._events[e]),n?r.unshift(t):r.push(t)}var g=[];function C(e,t,n,r,o){"function"==typeof n&&(o=r,r=n,n=!1);var i=o?l.shared.$_events:g,a=o?l.sid:l.id,s="".concat(t.trim().split(" ").join(".ed".concat(a," ")),".ed").concat(a);n?e.on(s,n,r):e.on(s,r),i.push([e,s])}function t(e){for(var t=0;t<e.length;t++)e[t][0].off(e[t][1])}function m(e,t,n){if(!l.edit.isDisabled()||n){var r,o;if(0!==e.indexOf("shared."))r=a[e];else{if(0<l.shared.count)return!1;r=l.shared._events[e]}if(r)for(var i=0;i<r.length;i++)if(!1===(o=r[i].apply(l,t)))return!1;return(!l.opts.events||!l.opts.events[e]||!1!==(o=l.opts.events[e].apply(l,t)))&&o}}function v(){for(var e in a)Object.prototype.hasOwnProperty.call(a,e)&&delete a[e]}function b(){for(var e in l.shared._events)Object.prototype.hasOwnProperty.call(l.shared._events,e)&&delete l.shared._events[e]}return{_init:function L(){l.shared.$_events=l.shared.$_events||[],l.shared._events={},function e(){l.helpers.isMobile()?(l._mousedown="touchstart",l._mouseup="touchend",l._move="touchmove",l._mousemove="touchmove"):(l._mousedown="mousedown",l._mouseup="mouseup",l._move="",l._mousemove="mousemove")}(),function t(){s(l.$el,"click mouseup mousemove mousedown touchstart touchend dragenter dragover dragleave dragend drop dragstart",function(e){m(e.type,[e])}),u("mousedown",function(){for(var e=0;e<V.INSTANCES.length;e++)V.INSTANCES[e]!==l&&V.INSTANCES[e].popups&&V.INSTANCES[e].popups.areVisible()&&V.INSTANCES[e].$el.find(".fr-marker").remove()})}(),function n(){s(l.$win,l._mousedown,function(e){m("window.mousedown",[e]),f()}),s(l.$win,l._mouseup,function(e){m("window.mouseup",[e])}),s(l.$win,"beforeinput cut copy keydown keyup touchmove touchend",function(e){m("window.".concat(e.type),[e])})}(),function r(){s(l.$doc,"dragend drop",function(e){m("document.".concat(e.type),[e])})}(),function o(){s(l.$el,"beforeinput keydown keypress keyup input",function(e){m(e.type,[e])})}(),function i(){s(l.$el,"focus",function(e){h()&&(c(!1),!1===d&&(m(e.type,[e]),l.helpers.isMobile()&&p()))}),s(l.$el,"blur",function(e){h()&&!0===d&&(m(e.type,[e]),l.helpers.isMobile()&&l.opts.toolbarContainer&&(l.shared.selected_editor=l.id),f())}),C(l.$el,"mousedown",'[contenteditable="true"]',function(){p(),l.$el.blur()}),u("focus",function(){d=!0}),u("blur",function(){d=!1})}(),f(),function a(){s(l.$el,"cut copy paste beforepaste",function(e){m(e.type,[e])})}(),u("destroy",v),u("shared.destroy",b)},on:u,trigger:m,bindClick:function r(e,t,n){C(e,l._mousedown,t,function(e){l.edit.isDisabled()||function n(e){var t=i(e.currentTarget);return l.edit.isDisabled()||l.node.hasClass(t.get(0),"fr-disabled")?(e.preventDefault(),!1):"mousedown"===e.type&&1!==e.which||(l.helpers.isMobile()||e.preventDefault(),(l.helpers.isAndroid()||l.helpers.isWindowsPhone())&&0===t.parents(".fr-dropdown-menu").length&&(e.preventDefault(),e.stopPropagation()),t.addClass("fr-selected"),void l.events.trigger("commands.mousedown",[t]))}(e)}
vendor: 5,064 bytes, line 679
679,!0),C(e,"".concat(l._mouseup," ").concat(l._move),t,function(e){l.edit.isDisabled()||function o(e,t){var n=i(e.currentTarget);if(l.edit.isDisabled()||l.node.hasClass(n.get(0),"fr-disabled"))return e.preventDefault(),!1;if("mouseup"===e.type&&1!==e.which)return!0;if(l.button.getButtons(".fr-selected",!0).get(0)==n.get(0)&&!l.node.hasClass(n.get(0),"fr-selected"))return!0;if("touchmove"!==e.type){if(e.stopPropagation(),e.stopImmediatePropagation(),e.preventDefault(),!l.node.hasClass(n.get(0),"fr-selected"))return l.button.getButtons(".fr-selected",!0).removeClass("fr-selected"),!1;if(l.button.getButtons(".fr-selected",!0).removeClass("fr-selected"),n.data("dragging")||n.attr("disabled"))return n.removeData("dragging"),!1;var r=n.data("timeout");r&&(clearTimeout(r),n.removeData("timeout")),t.apply(l,[e])}else n.data("timeout")||n.data("timeout",setTimeout(function(){n.data("dragging",!0)},100))}(e,n)},!0),C(e,"mousedown click mouseup",t,function(e){l.edit.isDisabled()||e.stopPropagation()},!0),u("window.mouseup",function(){l.edit.isDisabled()||(e.find(t).removeClass("fr-selected"),f())}),C(e,"mouseover",t,function(){i(this).hasClass("fr-options")&&i(this).prev(".fr-btn").addClass("fr-btn-hover"),i(this).next(".fr-btn").hasClass("fr-options")&&i(this).next(".fr-btn").addClass("fr-btn-hover")}),C(e,"mouseout",t,function(){i(this).hasClass("fr-options")&&i(this).prev(".fr-btn").removeClass("fr-btn-hover"),i(this).next(".fr-btn").hasClass("fr-options")&&i(this).next(".fr-btn").removeClass("fr-btn-hover")})},disableBlur:p,enableBlur:f,blurActive:h,focus:c,chainTrigger:function E(e,t,n){if(!l.edit.isDisabled()||n){var r,o;if(0!==e.indexOf("shared."))r=a[e];else{if(0<l.shared.count)return!1;r=l.shared._events[e]}if(r)for(var i=0;i<r.length;i++)void 0!==(o=r[i].apply(l,[t]))&&(t=o);return l.opts.events&&l.opts.events[e]&&void 0!==(o=l.opts.events[e].apply(l,[t]))&&(t=o),t}},$on:C,$off:function n(){t(g),g=[],0===l.shared.count&&(t(l.shared.$_events),l.shared.$_events=[])}}},Object.assign(V.DEFAULTS,{indentMargin:20}),V.COMMANDS={bold:{title:"Bold",toggle:!0,refresh:function(e){var t=this.format.is("strong");e.toggleClass("fr-active",t).attr("aria-pressed",t)}},italic:{title:"Italic",toggle:!0,refresh:function(e){var t=this.format.is("em");e.toggleClass("fr-active",t).attr("aria-pressed",t)}},underline:{title:"Underline",toggle:!0,refresh:function(e){var t=this.format.is("u");e.toggleClass("fr-active",t).attr("aria-pressed",t)}},strikeThrough:{title:"Strikethrough",toggle:!0,refresh:function(e){var t=this.format.is("s");e.toggleClass("fr-active",t).attr("aria-pressed",t)}},subscript:{title:"Subscript",toggle:!0,refresh:function(e){var t=this.format.is("sub");e.toggleClass("fr-active",t).attr("aria-pressed",t)}},superscript:{title:"Superscript",toggle:!0,refresh:function(e){var t=this.format.is("sup");e.toggleClass("fr-active",t).attr("aria-pressed",t)}},outdent:{title:"Decrease Indent"},indent:{title:"Increase Indent"},undo:{title:"Undo",undo:!1,forcedRefresh:!0,disabled:!0},redo:{title:"Redo",undo:!1,forcedRefresh:!0,disabled:!0},insertHR:{title:"Insert Horizontal Line"},clearFormatting:{title:"Clear Formatting"},selectAll:{title:"Select All",undo:!1},moreText:{title:"More Text",undo:!1},moreParagraph:{title:"More Paragraph",undo:!1},moreRich:{title:"More Rich",undo:!1},moreMisc:{title:"More Misc",undo:!1}},V.RegisterCommand=function(e,t){V.COMMANDS[e]=t},V.MODULES.commands=function(a){var s=a.$;function l(e){return a.html.defaultTag()&&(e="<".concat(a.html.defaultTag(),">").concat(e,"</").concat(a.html.defaultTag(),">")),e}var i={bold:function(){e("bold","strong")},subscript:function(){a.format.is("sup")&&a.format.remove("sup"),e("subscript","sub")},superscript:function(){a.format.is("sub")&&a.format.remove("sub"),e("superscript","sup")},italic:function(){e("italic","em")},strikeThrough:function(){e("strikeThrough","s")},underline:function(){e("underline","u")},undo:function(){a.undo.run()},redo:function(){a.undo.redo()},indent:function(){r(1)},outdent:function(){r(-1)},show:function(){a.opts.toolbarInline&&a.toolbar.showInline(null,!0)},insertHR:function(){a.selection.remove();var e="";a.core.isEmpty()&&(e=l(e="<br>"));var t='<hr id="fr-just" class="fr-just">'.concat(e);a.opts.trackChangesEnabled&&(t=a.track_changes.wrapInTracking(s(t),"hrWrapper").get(0).outerHTML);a.html.insert(t);var n,r=a.$el.find("hr#fr-just").length?a.$el.find("hr#fr-just"):a.$el.find(".fr-just");r.removeAttr("id"),r.removeAttr("class");var o=a.opts.trackChangesEnabled&&"SPAN"===r[0].parentNode.tagName&&"P"===r[0].parentNode.parentNode.tagName;if(0===r.next().length){var i=a.html.defaultTag();i&&!o?r.after(s(a.doc.createElement(i)).append("<br>").get(0)):o?r[0].parentNode.after(s(a.doc.createElement(i)).append("<br>").get(0)):r.after("<br>")}r.prev().is("hr")?n=a.selection.setAfter(r.get(0),!1):r.next().is("hr")?n=a.selection.setBefore(r.get(0),!1):o||a.selection.setAfter(r.get(0),!1)?a.selection.setAfter(r[0].parentNode,!1):a.selection.setBefore(r.get(0),!1),n||void 0===n||(e=l(e="".concat(V.MARKERS,"<br>
679")),r.after(e)),a.selection.restore()},clearFormatting:function(){a.format.remove()},selectAll:function(){a.doc.execCommand("selectAll",!1,!1)},moreText:function(e){t(e)},moreParagraph:function(e){t(e)},moreRich:function(e){t(e)},moreMisc:function(e){t(e)},moreTrackChanges:function(){t("trackChanges")}};function t(e){var t=a.$tb.find("[data-cmd=".concat(e,"]")),n=a.$tb.find("[data-cmd=html]");a.opts.trackChangesEnabled?n&&n.addClass("fr-disabled"):n&&n.removeClass("fr-disabled"),function r(n){a.helpers.isMobile()&&a.opts.toolbarInline&&a.events.disableBlur();var e=a.$tb.find('.fr-more-toolbar[data-name="'.concat(n.attr("data-group-name"),'"]'));"trackChanges"===n.data("cmd")&&(e=a.$tb.find('.fr-more-toolbar[data-name="'.concat(n.attr("id"),'"]')));if(a.$tb.find(".fr-open").not(n).not('[data-cmd="trackChanges"]').removeClass("fr-open"),n.toggleClass("fr-open"),a.$tb.find(".fr-more-toolbar").removeClass("fr-overflow-visible"),a.$tb.find(".fr-expanded").not(e).length){var t=a.$tb.find(".fr-expanded").not(e);t.each(function(e,t){0!=s(t).data("name").indexOf("trackChanges-")&&0!=s(t).data("name").indexOf("moreRich-")?s(t).toggleClass("fr-expanded"):n.parents('[data-name^="moreRich-"]').length||0==s(t).data("name").indexOf("trackChanges-")||s(t).find('[id^="trackChanges-"]').length&&a.opts.trackChangesEnabled||s(t).toggleClass("fr-expanded")}),e.toggleClass("fr-expanded")}else e.toggleClass("fr-expanded"),a.$box.toggleClass("fr-toolbar-open"),a.$tb.toggleClass("fr-toolbar-open")}(t),a.toolbar.setMoreToolbarsHeight()}function n(e,t){if(!(a.markdown&&a.markdown.isEnabled()&&("bold"===e||"italic"===e||"underline"===e)||a.opts.trackChangesEnabled&&"markdown"===e)&&!1!==a.events.trigger("commands.before",s.merge([e],t||[]))){var n=V.COMMANDS[e]&&V.COMMANDS[e].callback||i[e],r=!0,o=!1;V.COMMANDS[e]&&("undefined"!=typeof V.COMMANDS[e].focus&&(r=V.COMMANDS[e].focus),"undefined"!=typeof V.COMMANDS[e].accessibilityFocus&&(o=V.COMMANDS[e].accessibilityFocus)),(!a.core.hasFocus()&&r||!a.core.hasFocus()&&o&&a.accessibility.hasFocus())&&(a.el.focus({preventScroll:!0}),a.events.trigger("focus")),V.COMMANDS[e]&&!1!==V.COMMANDS[e].undo&&(a.$el.find(".fr-marker").length&&(a.events.disableBlur(),a.selection.restore()),a.undo.saveStep()),n&&n.apply(a,s.merge([e],t||[])),a.events.trigger("commands.after",s.merge([e],t||[])),V.COMMANDS[e]&&!1!==V.COMMANDS[e].undo&&a.undo.saveStep()}}function e(e,t){a.format.toggle(t)}function r(e){a.selection.save(),a.html.wrap(!0,!0,!0,!0),a.selection.restore();for(var t=a.selection.blocks(),n=0;n<t.length;n++)if("LI"!==t[n].tagName&&"LI"!=t[n].parentNode.tagName&&("LI"!==t[n].tagName||"LI"!==t[n].parentNode.tagName)){var r=s(t[n]);"LI"!=t[n].tagName&&"LI"==t[n].parentNode.tagName&&(r=s(t[n].parentNode));var o="rtl"===a.opts.direction||"rtl"===r.css("direction")?"margin-right":"margin-left",i=a.helpers.getPX(r.css(o));if(r.width()<2*a.opts.indentMargin&&0<e)continue;"UL"!=t[n].parentNode.tagName&&"OL"!=t[n].parentNode.tagName&&"LI"!=t[n].parentNode.tagName&&r.css(o,Math.max(i+e*a.opts.indentMargin,0)||""),r.removeClass("fr-temp-div")}a.selection.save(),a.html.unwrap(),a.selection.restore()}function o(e){return function(){n(e)}}var c={};for(var d in i)Object.prototype.hasOwnProperty.call(i,d)&&(c[d]=o(d));return Object.assign(c,{exec:n,_init:function f(){a.events.on("keydown",function(e){var t=a.selection.element();if(t&&"HR"===t.tagName&&!a.keys.isArrow(e.which))return e.preventDefault(),!1}),a.events.on("keyup",function(e){var t=a.selection.element();if(t&&"HR"===t.tagName)if(e.which===V.KEYCODE.ARROW_LEFT||e.which===V.KEYCODE.ARROW_UP){if(t.previousSibling)return a.node.isBlock(t.previousSibling)?a.selection.setAtEnd(t.previousSibling):s(t).before(V.MARKERS),a.selection.restore(),!1}else if((e.which===V.KEYCODE.ARROW_RIGHT||e.which===V.KEYCODE.ARROW_DOWN)&&t.nextSibling)return a.node.isBlock(t.nextSibling)?a.selection.setAtStart(t.nextSibling):s(t).after(V.MARKERS),a.selection.restore(),!1}),a.events.on("mousedown",function(e){if(e.target&&"HR"===e.target.tagName)return e.preventDefault(),e.stopPropagation(),!1}
vendor: 29,409 bytes, line 679
679),a.events.on("mouseup",function(){var e=a.selection.element();e===a.selection.endElement()&&e&&"HR"===e.tagName&&(e.nextSibling&&(a.node.isBlock(e.nextSibling)?a.selection.setAtStart(e.nextSibling):s(e).after(V.MARKERS)),a.selection.restore())})}})},V.MODULES.cursorLists=function(v){var b=v.$;function L(e){for(var t=e;"LI"!==t.tagName;)t=t.parentNode;return t}function E(e){for(var t=e;!v.node.isList(t);)t=t.parentNode;return t}function y(e){for(var t="",n=0;n<e.length;n++){var r=e[n];t+="".concat(r.name,"='").concat(r.value,"' ")}return t}return{_startEnter:function S(e){var t,n=L(e),r=n.nextSibling,o=n.previousSibling,i=v.html.defaultTag();if(v.node.isEmpty(n,!0)&&r){for(var a="",s="",l=e.parentNode;!v.node.isList(l)&&l.parentNode&&("LI"!==l.parentNode.tagName||l.parentNode===n);)-1<["OL","LI","UL"].indexOf(l.tagName)&&(a=v.node.openTagString(l)+a,s+=v.node.closeTagString(l)),l=l.parentNode;a=v.node.openTagString(l)+a,s+=v.node.closeTagString(l);var c="";if(l.parentNode&&"LI"===l.parentNode.tagName)if(l.parentNode.attributes.length){var d=y(l.parentNode.attributes);c="".concat(s,"<li ").concat(d,">").concat(V.MARKERS,"<br>").concat(a)}else c="".concat(s,"<li>").concat(V.MARKERS,"<br>").concat(a);else c=i?"".concat(s,"<").concat(i,">").concat(V.MARKERS,"<br></").concat(i,">").concat(a):"".concat(s+V.MARKERS,"<br>").concat(a);for(;["UL","OL"].indexOf(l.tagName)<0||l.parentNode&&"LI"===l.parentNode.tagName;)l=l.parentNode;b(n).replaceWith('<span id="fr-break"></span>');var f=v.node.openTagString(l)+b(l).html()+v.node.closeTagString(l);f=f.replace(/<span id="fr-break"><\/span>/g,c),b(l).replaceWith(f),v.$el.find("li:empty").remove(),v.$el.find("li > p > span:empty").length&&v.$el.find("li > p > span:empty")[0].parentNode.parentNode.remove()}else if(o&&r||!v.node.isEmpty(n,!0)){var p="<br>",h=e.parentNode;for(h&&"A"===h.tagName&&(h=null);h&&"LI"!==h.tagName;)p=v.node.openTagString(h)+p+v.node.closeTagString(h),h=h.parentNode;if(h&&h.attributes.length){var u=y(h.attributes);b(n).before("<li ".concat(u,">").concat(p,"</li>"))}else b(n).before("<li>".concat(p,"</li>"));b(e).remove()}else if(o){t=E(n);for(var g="".concat(V.MARKERS,"<br>"),C=e.parentNode;C&&"LI"!==C.tagName;)g=v.node.openTagString(C)+g+v.node.closeTagString(C),C=C.parentNode;if(t.parentNode&&"LI"===t.parentNode.tagName)if(t.parentNode.attributes.length){var m=y(t.parentNode.attributes);b(t.parentNode).after("<li ".concat(m,">").concat(g,"</li>"))}else b(t.parentNode).after("<li>".concat(g,"</li>"));else i?b(t).after("<".concat(i,">").concat(g,"</").concat(i,">")):b(t).after(g);b(n).remove()}else(t=E(n)).parentNode&&"LI"===t.parentNode.tagName?r?b(t.parentNode).before("".concat(v.node.openTagString(n)+V.MARKERS,"<br></li>")):b(t.parentNode).after("".concat(v.node.openTagString(n)+V.MARKERS,"<br></li>")):i?b(t).before("<".concat(i,">").concat(V.MARKERS,"<br></").concat(i,">")):b(t).before("".concat(V.MARKERS,"<br>")),b(n).remove()},_middleEnter:function c(e){for(var t=L(e),n="",r=e,o="",i="",a=!1;r!==t;){var s="A"===(r=r.parentNode).tagName&&v.cursor.isAtEnd(e,r)?"fr-to-remove":"";a||r==t||v.node.isBlock(r)||(a=!0,o+=V.INVISIBLE_SPACE),o=v.node.openTagString(b(r).clone().addClass(s).get(0))+o,i+=v.node.closeTagString(r)}n=i+n+o+V.MARKERS+(v.opts.keepFormatOnDelete?V.INVISIBLE_SPACE:""),b(e).replaceWith('<span id="fr-break"></span>');var l=v.node.openTagString(t)+b(t).html()+v.node.closeTagString(t);l=l.replace(/<span id="fr-break"><\/span>/g,n),b(t).replaceWith(l)},_endEnter:function l(e){for(var t=L(e),n=V.MARKERS,r="",o=e,i=!1;o!==t;)if(!(o=o.parentNode).classList.contains("fr-img-space-wrap")&&!o.classList.contains("fr-img-space-wrap2")){var a="A"===o.tagName&&v.cursor.isAtEnd(e,o)?"fr-to-remove":"";i||o===t||v.node.isBlock(o)||(i=!0,r+=V.INVISIBLE_SPACE),r=v.node.openTagString(b(o).clone().addClass(a).get(0))+r,n+=v.node.closeTagString(o)}var s=r+n;b(e).remove(),b(t).after(s)},_backspace:function d(e){var t=L(e),n=t.previousSibling;if(n){n=b(n).find(v.html.blockTagsQuery()).get(-1)||n,b(e).replaceWith(V.MARKERS);var r=v.node.contents(n);r.length&&"BR"===r[r.length-1].tagName&&b(r[r.length-1]).remove(),b(t).find(v.html.blockTagsQuery()).not("ol, ul, table").each(function(){this.parentNode===t&&b(this).replaceWith(b(this).html()+(v.node.isEmpty(this)?"":"<br>"))});for(var o,i=v.node.contents(t)[0];i&&!v.node.isList(i);)o=i.nextSibling,b(n).append(i),i=o;for(n=t.previousSibling;i;)o=i.nextSibling,b(n).append(i),i=o;1<(r=v.node.contents(n)).length&&"BR"===r[r.length-1].tagName&&b(r[r.length-1]).remove(),b(t).remove()}else{var a=E(t);if(b(e).replaceWith(V.MARKERS),a.parentNode&&"LI"===a.parentNode.tagName){var s=a.previousSibling;v.node.isBlock(s)?(b(t).find(v.html.blockTagsQuery()).not("ol, ul, table").each(function(){this.parentNode===t&&b(this).replaceWith(b(this).html()+(v.node.isEmpty(this)?"":"<br>"))}),b(s).append(b(t).html())):b(a).before(b(t).html())}else{var l=v.html.defaultTag();l&&0===b(t).find(v.html.blockTagsQuery()).length?b(a).before("<".concat(l,">").concat(b(t).html(),"</").concat(l,">")):b(a).before(b(t).html())}b(t).remove(),v.html.wrap(),0===b(a).find("li").length&&b(a).remove()}},_del:function f(e){var t,n=L(e),r=n.nextSibling;if(r){(t=v.node.contents(r)).length&&"BR"===t[0].tagName&&b(t[0]).remove(),b(r).find(v.html.blockTagsQuery()).not("ol, ul, table").each(function(){this.parentNode===r&&b(this).replaceWith(b(this).html()+(v.node.isEmpty(this)?"":"<br>"))});for(var o,i=e,a=v.node.contents(r)[0];a&&!v.node.isList(a);)o=a.nextSibling,b(i).after(a),i=a,a=o;for(;a;)o=a.nextSibling,b(n).append(a),a=o;b(e).replaceWith(V.MARKERS),b(r).remove()}else{for(var s=n;!s.nextSibling&&s!==v.el;)s=s.parentNode;if(s===v.el)return!1;if(s=s.nextSibling,v.node.isBlock(s)){if(V.NO_DELETE_TAGS.indexOf(s.tagName)<0){if(b(e).replaceWith(V.MARKERS),(t=v.node.contents(n)).length&&"BR"===t[t.length-1].tagName&&b(t[t.length-1]).remove(),s.isContentEditable&&"DIV"===s.tagName&&(!v.node.isBlock(s.previousSibling)||"DIV"===s.previousSibling.tagName))return;b(n).append(b(s).html()),b(s).remove()}}else{for((t=v.node.contents(n)).length&&"BR"===t[t.length-1].tagName&&b(t[t.length-1]).remove(),b(e).replaceWith(V.MARKERS);s&&!v.node.isBlock(s)&&"BR"!==s.tagName;)b(n).append(b(s)),s=s.nextSibling;b(s).remove()}}}}},V.NO_DELETE_TAGS=["TH","TD","TR","TABLE","FORM"],V.SIMPLE_ENTER_TAGS=["TH","TD","LI","DL","DT","FORM"],V.MODULES.cursor=function(g){var C=g.$;function h(e){return!!e&&(g.node.isBlock(e)?"P"!==e.tagName||!e.nextElementSibling||!e.parentElement||"OL"!==e.nextElementSibling.tagName||"LI"!==e.parentElement.tagName:e.nextSibling&&e.nextSibling.nodeType===Node.TEXT_NODE&&0===e.nextSibling.textContent.replace(/\u200b/g,"").length?h(e.nextSibling):!(e.nextSibling&&(!e.previousSibling||"BR"!==e.nextSibling.tagName||e.nextSibling.nextSibling))&&h(e.parentNode))}function u(e){return!!e&&(!!g.node.isBlock(e)||(e.previousSibling&&e.previousSibling.nodeType===Node.TEXT_NODE&&0===e.previousSibling.textContent.replace(/\u200b/g,"").length?u(e.previousSibling):!e.previousSibling&&(!(e.previousSibling||!g.node.hasClass(e.parentNode,"fr-inner"))||u(e.parentNode))))}function m(e,t){return!!e&&(e!==g.$wp.get(0)&&(e.previousSibling&&e.previousSibling.nodeType===Node.TEXT_NODE&&0===e.previousSibling.textContent.replace(/\u200b/g,"").length?m(e.previousSibling,t):!e.previousSibling&&(e.parentNode===t||m(e.parentNode,t))))}function v(e,t){return!!e&&(e!==g.$wp.get(0)&&(e.nextSibling&&e.nextSibling.nodeType===Node.TEXT_NODE&&0===e.nextSibling.textContent.replace(/\u200b/g,"").length?v(e.nextSibling,t):!(e.nextSibling&&(!e.previousSibling||"BR"!==e.nextSibling.tagName||e.nextSibling.nextSibling))&&(e.parentNode===t||v(e.parentNode,t))))}function b(e){return 0<C(e).parentsUntil(g.$el,"LI").length&&0===C(e).parentsUntil("LI","TABLE").length}function L(e,t){var n=new RegExp("".concat(t?"^":"","(([\\uD83C-\\uDBFF\\uDC00-\\uDFFF]+\\u200D)*[\\uD83C-\\uDBFF\\uDC00-\\uDFFF]{2})").concat(t?"":"$"),"i"),r=e.match(n);return r?r[0].length:1}function E(e){for(var t,n=e;!n.previousSibling;)if(n=n.parentNode,g.node.isElement(n))return!1;n=n.previousSibling;var r=g.opts.htmlAllowedEmptyTags,o=n.tagName&&n.tagName.toLowerCase();if((!g.node.isBlock(n)||n.lastChild&&o&&0<=r.indexOf(o))&&g.node.isEditable(n)){for(t=g.node.contents(n);n.nodeType!==Node.TEXT_NODE&&!g.node.isDeletable(n)&&t.length&&g.node.isEditable(n);)n=t[t.length-1],t=g.node.contents(n);if(n.nodeType===Node.TEXT_NODE){var i=n.textContent,a=i.length;if(i.length&&"\n"===i[i.length-1])return n.textContent=i.substring(0,a-2),0===n.textContent.length&&n.parentNode.removeChild(n),E(e);if(g.opts.tabSpaces&&i.length>=g.opts.tabSpaces)0===i.substr(i.length-g.opts.tabSpaces,i.length-1).replace(/ /g,"").replace(new RegExp(V.UNICODE_NBSP,"g"),"").length&&(a=i.length-g.opts.tabSpaces+1);n.textContent=i.substring(0,a-L(i));var s=n.textContent;(g.opts.enter===V.ENTER_BR&&0<s.length&&" "===s.charAt(s.length-1)||0===s.length&&e.previousSibling&&3===e.previousSibling.nodeType&&"TD"!==e.parentNode.tagName&&"LI"!==e.parentNode.tagName&&i!==String.fromCharCode(8203))&&(e.insertAdjacentHTML("beforebegin",V.INVISIBLE_SPACE),n=n.nextSibling),g.opts.trackChangesEnabled&&0===n.textContent.length&&C(n.parentElement).data("tracking")&&0===C(n.parentElement).find("[data-tracking-deleted=true]").length&&(C(e).insertBefore(n.parentElement),C(n.parentElement).remove(),n=C(e)[0].previousSibling),g.opts.htmlUntouched&&!e.nextSibling&&n.textContent.length&&" "===n.textContent[n.textContent.length-1]&&(n.textContent=n.textContent.substring(0,n.textContent.length-1)+V.UNICODE_NBSP);var l=i.length!==n.textContent.length;if(g.opts.enter!==V.ENTER_BR&&n&&n.previousSibling&&n.previousSibling.previousSibling&&"BR"===n.previousSibling.previousSibling.tagName&&0===n.textContent.length&&n.previousSibling.previousSibling.remove(),0===n.textContent.length&&"LI"===n.parentNode.tagName&&n.previousSibling&&"BR"===n.previousSibling.tagName&&n.previousSibling.remove(),0===n.textContent.length)if(l&&g.opts.keepFormatOnDelete)C(n).after(V.INVISIBLE_SPACE+V.MARKERS);else if(0!==i.length&&g.node.isBlock(n.parentNode))C(n).after(V.MARKERS);else if((2!=n.parentNode.childNodes.length||n.parentNode!=e.parentNode)&&1!=n.parentNode.childNodes.length||g.node.isBlock(n.parentNode)||g.node.isElement(n.parentNode)||!g.node.isDeletable(n.parentNode)){for(var c,d=n;!g.node.isElement(n.parentNode)&&g.node.isEmpty(n.parentNode)&&V.NO_DELETE_TAGS.indexOf(n.parentNode.tagName)<0;)if("A"===(n=n.parentNode).tagName){var f=n.childNodes[0];for(C(n).before(f),c=!0;0<f.childNodes.length;)f=f.childNodes[0];n.parentNode.removeChild(n),n=f;break}c||(n=d),C(n).after(V.MARKERS),g.node.isElement(n.parentNode)&&!e.nextSibling&&n.previousSibling&&"BR"===n.previousSibling.tagName&&C(e).after("<br>");var p=n.parentNode;n.parentNode.removeChild(n),g.node.isEmpty(p)&&C(p).html(V.INVISIBLE_SPACE+V.MARKERS)}else C(n.parentNode).after(V.MARKERS),C(n.parentNode).remove();else C(n).after(V.MARKERS)}else g.node.isDeletable(n)?(C(n).after(V.MARKERS),C(n).remove()):e.nextSibling&&"BR"===e.nextSibling.tagName&&g.node.isVoid(n)&&"BR"!==n.tagName?(C(e.nextSibling).remove(),C(e).replaceWith(V.MARKERS)):!1!==g.events.trigger("node.remove",[C(n)])&&(C(n).after(V.MARKERS),C(n).remove())}else if(V.NO_DELETE_TAGS.indexOf(n.tagName)<0&&(g.node.isEditable(n)||g.node.isDeletable(n)))if(g.node.isDeletable(n))C(e).replaceWith(V.MARKERS),C(n).remove();else if(g.node.isEmpty(n)&&!g.node.isList(n))C(n).remove(),C(e).replaceWith(V.MARKERS);else{for(g.node.isList(n)&&(n=C(n).find("li").last().get(0)),(t=g.node.contents(n))&&0<t.length&&"BR"===t[t.length-1].tagName&&C(t[t.length-1]).remove(),t=g.node.contents(n);t&&0<t.length&&g.node.isBlock(t[t.length-1]);)n=t[t.length-1],t=g.node.contents(n);C(n).append(V.MARKERS);for(var h=e;!h.previousSibling;)h=h.parentNode;for(;h&&"BR"!==h.tagName&&!g.node.isBlock(h);){var u=h;h=h.nextSibling,C(n).append(u)}h&&"BR"===h.tagName&&C(h).remove(),C(e).remove()}else e.nextSibling&&"BR"===e.nextSibling.tagName&&C(e.nextSibling).remove();return!0}function i(e){var t=0<C(e).parentsUntil(g.$el,"BLOCKQUOTE").length,n=g.node.deepestParent(e,[],!t);if(n&&"BLOCKQUOTE"===n.tagName){var r=g.node.deepestParent(e,[C(e).parentsUntil(g.$el,"BLOCKQUOTE").get(0)]);r&&r.nextSibling&&(n=r)}if(null!==n){var o,i=n.nextSibling;if(g.node.isBlock(n)&&(g.node.isEditable(n)||g.node.isDeletable(n))&&i&&V.NO_DELETE_TAGS.indexOf(i.tagName)<0)if(g.node.isDeletable(i))C(i).remove(),C(e).replaceWith(V.MARKERS);else if(g.node.isBlock(i)&&g.node.isEditable(i))if(g.node.isList(i))if(g.node.isEmpty(n,!0))C(n).remove(),C(i).find("li").first().prepend(V.MARKERS);else{var a=C(i).find("li").first();"BLOCKQUOTE"===n.tagName&&(o=g.node.contents(n)).length&&g.node.isBlock(o[o.length-1])&&(n=o[o.length-1]),0===a.find("ul, ol").length&&(C(e).replaceWith(V.MARKERS),a.find(g.html.blockTagsQuery()).not("ol, ul, table").each(function(){this.parentNode===a.get(0)&&C(this).replaceWith(C(this).html()+(g.node.isEmpty(this)?"":"<br>"))}),C(n).append(g.node.contents(a.get(0))),a.remove(),0===C(i).find("li").length&&C(i).remove())}else{if((o=g.node.contents(i)).length&&"BR"===o[0].tagName&&C(o[0]).remove(),"BLOCKQUOTE"!==i.tagName&&"BLOCKQUOTE"===n.tagName)for(o=g.node.contents(n);o.length&&g.node.isBlock(o[o.length-1]);)n=o[o.length-1],o=g.node.contents(n);else if("BLOCKQUOTE"===i.tagName&&"BLOCKQUOTE"!==n.tagName)for(o=g.node.contents(i);o.length&&g.node.isBlock(o[0]);)i=o[0],o=g.node.contents(i);C(e).replaceWith(V.MARKERS),C(n).append(i.innerHTML),C(i).remove()}else{for(C(e).replaceWith(V.MARKERS);i&&"BR"!==i.tagName&&!g.node.isBlock(i)&&g.node.isEditable(i);){var s=i;i=i.nextSibling,C(n).append(s)}i&&"BR"===i.tagName&&g.node.isEditable(i)&&C(i).remove()}}}function n(e){for(var t,n=e;!n.nextSibling;)if(n=n.parentNode,g.node.isElement(n))return!1;if("BR"===(n=n.nextSibling).tagName&&g.node.isEditable(n))if(n.nextSibling){if(g.node.isBlock(n.nextSibling)&&g.node.isEditable(n.nextSibling)){if(!(V.NO_DELETE_TAGS.indexOf(n.nextSibling.tagName)<0))return void C(n).remove();n=n.nextSibling,C(n.previousSibling).remove()}}else if(h(n)){if(b(e))g.cursorLists._del(e);else g.node.deepestParent(n)&&((!g.node.isEmpty(g.node.blockParent(n))||(g.node.blockParent(n).nextSibling&&V.NO_DELETE_TAGS.indexOf(g.node.blockParent(n).nextSibling.tagName))<0)&&C(n).remove(),n&&n.parentNode&&8203===n.parentNode.textContent.charCodeAt()&&n.parentNode.childNodes[1]&&"BR"===n.parentNode.childNodes[1].tagName&&n.parentNode.tagName.toLowerCase()===g.html.defaultTag()&&n.parentNode.nextSibling&&"TABLE"===n.parentNode.nextSibling.tagName&&C(n.parentNode).remove(),i(e));return}if(!g.node.isBlock(n)&&g.node.isEditable(n)){for(t=g.node.contents(n);n.nodeType!==Node.TEXT_NODE&&t.length&&!g.node.isDeletable(n)&&g.node.isEditable(n);)n=t[0],t=g.node.contents(n);n.nodeType===Node.TEXT_NODE?(C(n).before(V.MARKERS),n.textContent.length&&(n.textContent=n.textContent.substring(L(n.textContent,!0),n.textContent.length))):g.node.isDeletable(n)?(C(n).before(V.MARKERS),C(n).remove()):!1!==g.events.trigger("node.remove",[C(n)])&&(C(n).before(V.MARKERS),C(n).remove()),C(e).remove()}else if(V.NO_DELETE_TAGS.indexOf(n.tagName)<0&&(g.node.isEditable(n)||g.node.isDeletable(n)))if(g.node.isDeletable(n))C(e).replaceWith(V.MARKERS),C(n).remove();else if(g.node.isList(n))e.previousSibling?(C(n).find("li").first().prepend(e),g.cursorLists._backspace(e)):(C(n).find("li").first().prepend(V.MARKERS),C(e).remove());else if((t=g.node.contents(n))&&0<t.length&&"BR"===t[0].tagName&&C(t[0]).remove(),t&&0<t.length&&"BLOCKQUOTE"===n.tagName){var r=t[0];for(C(e).before(V.MARKERS);r&&"BR"!==r.tagName;){var o=r;r=r.nextSibling,C(e).before(o)}r&&"BR"===r.tagName&&C(r).remove()}else C(e).after(C(n).html()).after(V.MARKERS),C(n).remove()}function a(){for(var e=g.el.querySelectorAll("blockquote:empty"),t=0;t<e.length;t++)e[t].parentNode.removeChild(e[t])}function y(e,t,n){var r,o=g.node.deepestParent(e,[],!n);if(o&&"BLOCKQUOTE"===o.tagName)return v(e,o)?(r=g.html.defaultTag(),t?C(e).replaceWith("<br>"+V.MARKERS):r?C(o).after("<".concat(r,">").concat(V.MARKERS,"<br></").concat(r,">")):C(o).after("".concat(V.MARKERS,"<br>")),C(e).remove()):S(e,t,n),!1;if(null===o)(r=g.html.defaultTag())&&g.node.isElement(e.parentNode)?C(e).replaceWith("<".concat(r,">").concat(V.MARKERS,"<br></").concat(r,">")):!e.previousSibling||C(e.previousSibling).is("br")||e.nextSibling?C(e).replaceWith("<br>".concat(V.MARKERS)):C(e).replaceWith("<br>".concat(V.MARKERS,"<br>"));else{var i=e,a="";"PRE"!=o.tagName||e.nextSibling||(t=!0),g.node.isBlock(o)&&!t||(a="<br/>");var s,l="",c="",d="",f="";(r=g.html.defaultTag())&&g.node.isBlock(o)&&(d="<".concat(r,">"),f="</".concat(r,">"),o.tagName===r.toUpperCase()&&(d=g.node.openTagString(C(o).clone().removeAttr("id").get(0))));do{if(i=i.parentNode,!t||i!==o||t&&!g.node.isBlock(o))if(l+=g.node.closeTagString(i),i===o&&g.node.isBlock(o))c=d+c;else{var p=("A"===i.tagName||g.node.hasClass(i,"fa"))&&v(e,i)?"fr-to-remove":"";c="isPasted"===i.getAttribute("id")?g.node.openTagString(C(i).clone().attr("style","").addClass(p).get(0))+c:g.node.openTagString(C(i).clone().addClass(p).get(0))+c}}while(i!==o);a=l+a+c+(e.parentNode===o&&g.node.isBlock(o)?"":V.INVISIBLE_SPACE)+V.MARKERS,g.node.isBlock(o)&&!C(o).find("*").last().is("br")&&C(o).append("<br/>"),C(e).after('<span id="fr-break"></span>'),C(e).remove(),o.nextSibling&&!g.node.isBlock(o.nextSibling)||g.node.isBlock(o)||C(o).after("<br>"),s=(s=!t&&g.node.isBlock(o)?g.node.openTagString(o)+C(o).html()+f:g.node.openTagString(o)+C(o).html()+g.node.closeTagString(o)).replace(/<span id="fr-break"><\/span>/g,a),C(o).replaceWith(s)}}function S(e,t,n){var r=g.node.deepestParent(e,[],!n);if(null===r)g.html.defaultTag()&&e.parentNode===g.el?C(e).replaceWith("<".concat(g.html.defaultTag(),">").concat(V.MARKERS,"<br></").concat(g.html.defaultTag(),">")):(e.nextSibling&&!g.node.isBlock(e.nextSibling)||C(e).after("<br>"),C(e).replaceWith("<br>".concat(V.MARKERS)));else if(e.previousSibling&&"IMG"==e.previousSibling.tagName||e.nextSibling&&"IMG"==e.nextSibling.tagName)C(e).replaceWith("<"+g.html.defaultTag()+">"+V.MARKERS+"<br></"+g.html.defaultTag()+">");else{var o=e,i="";"PRE"===r.tagName&&(t=!0),g.node.isBlock(r)&&!t||(i="<br>");var a="",s="";do{var l=o;if(o=o.parentNode,"BLOCKQUOTE"===r.tagName&&g.node.isEmpty(l)&&!g.node.hasClass(l,"fr-marker")&&C(l).contains(e)&&C(l).after(e),"BLOCKQUOTE"!==r.tagName||!v(e,o)&&!m(e,o))if(!t||o!==r||t&&!g.node.isBlock(r)){a+=g.node.closeTagString(o);var c="A"==o.tagName&&v(e,o)||g.node.hasClass(o,"fa")?"fr-to-remove":"";s=g.node.openTagString(C(o).clone().addClass(c).removeAttr("id").get(0))+s,g.opts.enter!==V.ENTER_DIV&&o===r&&"DIV"===r.tagName&&(a="<br>",s="")}else"BLOCKQUOTE"==r.tagName&&t&&(s=a="")}while(o!==r);var d=r===e.parentNode&&g.node.isBlock(r)||e.nextSibling;if("BLOCKQUOTE"===r.tagName)if(e.previousSibling&&g.node.isBlock(e.previousSibling)&&e.nextSibling&&"BR"===e.nextSibling.tagName&&(C(e.nextSibling).after(e),e.nextSibling&&"BR"===e.nextSibling.tagName&&C(e.nextSibling).remove()),t)i=a+i+V.MARKERS+s;else{var f=g.html.defaultTag();i="".concat(a+i+(f?"<".concat(f,">"):"")+V.MARKERS,"<br>").concat(f?"</".concat(f,">"):"").concat(s)}else i=a+i+s+(d?"":V.INVISIBLE_SPACE)+V.MARKERS;C(e).replaceWith('<span id="fr-break"></span>');var p=g.node.openTagString(r)+C(r).html()+g.node.closeTagString(r);p=p.replace(/<span id="fr-break"><\/span>/g,i),C(r).replaceWith(p)}}function N(e){var t=e.getBoundingClientRect(),n=window.pageXOffset||document.documentElement.scrollLeft,r=window.pageYOffset||document.documentElement.scrollTop;return{top:t.top+r,left:t.left+n}}function T(){var e=g.selection.get(),t=null;if(g.selection.inEditor()&&e.rangeCount)for(var n=g.selection.ranges(),r=0;r<n.length;r++){var o=n[r];t=g.selection.rangeElement(o.startContainer,o.startOffset);break}return t}return{enter:function M(e){var t=g.markers.insert();if(!t)return!0;for(var n=t.parentNode;n&&!g.node.isElement(n);){if("false"===n.getAttribute("contenteditable"))return C(t).replaceWith(V.MARKERS),g.selection.restore(),!1;if("true"===n.getAttribute("contenteditable"))break;n=n.parentNode}g.el.normalize();var r=!1;0<C(t).parentsUntil(g.$el,"BLOCKQUOTE").length&&(r=!0),C(t).parentsUntil(g.$el,"TD, TH").length&&(r=!1),h(t)?!b(t)||e||r?y(t,e,r):g.cursorLists._endEnter(t):u(t)?!b(t)||e||r?function f(e,t,n){var r,o=g.node.deepestParent(e,[],!n);if(o&&"TABLE"===o.tagName)return C(o).find("td, th").first().prepend(e),f(e,t,n);if(o&&"BLOCKQUOTE"===o.tagName)if(m(e,o)){if(!t)return(r=g.html.defaultTag())?C(o).before("<".concat(r,">").concat(V.MARKERS,"<br></").concat(r,">")):C(o).before("".concat(V.MARKERS,"<br>")),C(e).remove(),!1}else v(e,o)?y(e,t,!0):S(e,t,!0);if(null===o)(r=g.html.defaultTag())&&g.node.isElement(e.parentNode)?C(e).replaceWith("<".concat(r,">").concat(V.MARKERS,"<br></").concat(r,">")):C(e).replaceWith("<br>".concat(V.MARKERS));else{if(r=g.html.defaultTag(),g.node.isBlock(o))if("PRE"===o.tagName&&(t=!0),t)C(e).remove(),C(o).prepend("<br>".concat(V.MARKERS));else if(e.nextSibling&&"IMG"==e.nextSibling.tagName||e.nextSibling&&e.nextSibling.nextElementSibling&&"IMG"==e.nextSibling.nextElementSibling)C(e).replaceWith("<"+g.html.defaultTag()+">"+V.MARKERS+"<br></"+g.html.defaultTag()+">");else{if(g.node.isEmpty(o,!0))return y(e,t,n);if(g.opts.keepFormatOnDelete||"DIV"===o.tagName||"div"===g.html.defaultTag())if(!g.opts.keepFormatOnDelete&&"DIV"===o.tagName||"div"===g.html.defaultTag())C(o).before("<"+g.html.defaultTag()+"><br></"+g.html.defaultTag()+">");else if(g.opts.keepFormatOnDelete&&!g.opts.htmlUntouched&&"DIV"!==o.tagName&&"div"!==g.html.defaultTag()&&u(g.selection.get().focusNode))C(o).before("".concat(g.node.openTagString(C(o).clone().removeAttr("id").get(0)),"<br>").concat(g.node.closeTagString(o)));else{for(var i=e,a=V.INVISIBLE_SPACE;i!==o&&!g.node.isElement(i);)i=i.parentNode,a=g.node.openTagString(i)+a+g.node.closeTagString(i);C(o).before(a)}else C(o).before("".concat(g.node.openTagString(C(o).clone().removeAttr("id").get(0)),"<br>").concat(g.node.closeTagString(o)))}else C(o).before("<br>");C(e).remove()}}(t,e,r):g.cursorLists._startEnter(t):!b(t)||e||r?S(t,e,r):g.cursorLists._middleEnter(t),function p(){g.$el.find(".fr-to-remove").each(function(){for(var e=g.node.contents(this),t=0;t<e.length;t++)e[t].nodeType===Node.TEXT_NODE&&(e[t].textContent=e[t].textContent.replace(/\u200B/g,""));C(this).replaceWith(this.innerHTML)})}(),g.html.fillEmptyBlocks(!0),g.opts.htmlUntouched||(g.html.cleanEmptyTags(),g.clean.lists(),g.spaces.normalizeAroundCursor()),g.selection.restore();var o=g.o_win.innerHeight;if(g.$oel[0].offsetHeight>o){var i=T();if(i){var a=N(i);a=a.top;var s=i.getBoundingClientRect().top;g.opts.scrollableContainer&&g.opts.enter!==V.ENTER_BR&&"BR"===i.tagName&&(s=a=i.parentNode.offsetTop),i.parentNode&&"TD"===i.parentNode.tagName&&o<s?g.o_win.scroll(0,s-50):s<0?g.o_win.scroll(0,a-80):!g.opts.scrollableContainer&&o<s+20?g.o_win.scroll(0,a-o+50):g.opts.scrollableContainer&&s+2*g.$tb.height()>g.$sc[0].scrollTop+C(g.$sc).height()&&g.$sc[0].scroll(0,a-C(g.$sc).height()+2*g.$tb.height())}}else if(g.opts.scrollableContainer&&g.opts.toolbarSticky){var l=T();if(l){var c=N(l);c=c.top;var d=l.getBoundingClientRect().top;g.opts.enter!==V.ENTER_BR&&"BR"===l.tagName&&(d=c=l.parentNode.offsetTop),(g.opts.iframe&&d+2*g.$tb.height()>g.$sc[0].scrollTop+C(g.$sc).height()||d+2*g.$tb.height()>C(g.$sc).height())&&g.$sc[0].scroll(0,c-C(g.$sc).height()+2*g.$tb.height())}}},backspace:function s(){var e=!1,t=g.markers.insert();if(!t)return!0;for(var n=t.parentNode;n&&!g.node.isElement(n);){if("false"===n.getAttribute("contenteditable"))return C(t).replaceWith(V.MARKERS),g.selection.restore(),!1;if(n.innerText.length&&"true"===n.getAttribute("contenteditable"))break;n=n.parentNode}g.el.normalize();var r=t.previousSibling;if(r){var o=r.textContent;o&&o.length&&8203===o.charCodeAt(o.length-1)&&(1===o.length?C(r).remove():r.textContent=r.textContent.substr(0,o.length-L(o)))}return h(t)?b(t)&&m(t,C(t).parents("li").first().get(0))?g.cursorLists._backspace(t):e=E(t):u(t)?b(t)&&m(t,C(t).parents("li").first().get(0))?g.cursorLists._backspace(t):function c(e){for(var t=0<C(e).parentsUntil(g.$el,"BLOCKQUOTE").length,n=g.node.deepestParent(e,[],!t),r=n;n&&!n.previousSibling&&"BLOCKQUOTE"!==n.tagName&&n.parentElement!==g.el&&!g.node.hasClass(n.parentElement,"fr-inner")&&V.SIMPLE_ENTER_TAGS.indexOf(n.parentElement.tagName)<0;)n=n.parentElement;if(n&&"BLOCKQUOTE"===n.tagName){var o=g.node.deepestParent(e,[C(e).parentsUntil(g.$el,"BLOCKQUOTE").get(0)]);o&&o.previousSibling&&(r=n=o)}if(null!==n){var i,a=n.previousSibling;if(g.node.isBlock(n)&&g.node.isEditable(n))if(a&&V.NO_DELETE_TAGS.indexOf(a.tagName)<0){if(g.node.isDeletable(a))C(a).remove(),C(e).replaceWith(V.MARKERS);else if(g.node.isEditable(a))if(g.node.isBlock(a))if(g.node.isEmpty(a)&&!g.node.isList(a))C(a).remove(),C(e).after(g.opts.keepFormatOnDelete?V.INVISIBLE_SPACE:"");else{if(g.node.isList(a)&&(a=C(a).find("li").last().get(0)),(i=g.node.contents(a)).length&&"BR"===i[i.length-1].tagName&&C(i[i.length-1]).remove(),"BLOCKQUOTE"===a.tagName&&"BLOCKQUOTE"!==n.tagName)for(i=g.node.contents(a);i.length&&g.node.isBlock(i[i.length-1]);)a=i[i.length-1],i=g.node.contents(a);else if("BLOCKQUOTE"!==a.tagName&&"BLOCKQUOTE"===r.tagName)for(i=g.node.contents(r);i.length&&g.node.isBlock(i[0]);)r=i[0],i=g.node.contents(r);if(g.node.isEmpty(n))C(e).remove(),g.selection.setAtEnd(a,!0);else{C(e).replaceWith(V.MARKERS);var s=a.childNodes;g.node.isBlock(s[s.length-1])?C(s[s.length-1]).append(r.innerHTML):C(a).append(r.innerHTML)}C(r).remove(),g.node.isEmpty(n)&&C(n).remove()}else C(e).replaceWith(V.MARKERS),"BLOCKQUOTE"===n.tagName&&a.nodeType===Node.ELEMENT_NODE?C(a).remove():(C(a).after(g.node.isEmpty(n)?"":C(n).html()),C(n).remove(),"BR"===a.tagName&&C(a).remove())}else if(a)8203===n.textContent.charCodeAt()&&n.childNodes[1]&&"BR"===n.childNodes[1].tagName&&n.tagName.toLowerCase()===g.html.defaultTag()&&n.previousSibling&&"TABLE"===n.previousSibling.tagName&&C(n).remove();else if(n&&"BLOCKQUOTE"===n.tagName&&0===C(n).text().replace(/\u200B/g,"").length)C(n).remove();else{var l=n.nextSibling;g.node.isEmpty(n)&&n.parentNode&&g.node.isEditable(n.parentNode)&&!l&&(n.parentNode!=g.el&&"TD"!==n.parentNode.tagName?C(n.parentNode).remove():n.parentNode!=g.el&&"TD"===n.parentNode.tagName&&C(n).remove())}}}(t):e=E(t),C(t).remove(),a(),g.html.fillEmptyBlocks(!0),g.opts.htmlUntouched||(g.html.cleanEmptyTags(),g.clean.lists(),g.spaces.normalizeAroundCursor()),g.selection.restore(),e},del:function r(){var e=g.markers.insert();if(!e)return!1;if(g.el.normalize(),h(e))if(b(e))if(0===C(e).parents("li").first().find("ul, ol").length)g.cursorLists._del(e);else{var t=C(e).parents("li").first().find("ul, ol").first().find("li").first();(t=t.find(g.html.blockTagsQuery()).get(-1)||t).prepend(e),g.cursorLists._backspace(e)}else i(e);else u(e),n(e);C(e).remove(),a(),g.html.fillEmptyBlocks(!0),g.opts.htmlUntouched||(g.html.cleanEmptyTags(),g.clean.lists()),g.spaces.normalizeAroundCursor(),g.selection.restore()},isAtEnd:v,isAtStart:m}},V.MODULES.data=function(f){function p(e){return e}function c(e){for(var t=e.toString(),n=0,r=0;r<t.length;r++)n+=parseInt(t.charAt(r),10);return 10<n?n%9+1:n}function d(e,t,n){for(var r=Math.abs(n);0<r--;)e-=t;return n<0&&(e+=123),e}function h(e){return e&&"block"!==e.css("display")?(e.remove(),!0):e&&0===f.helpers.getPX(e.css("height"))?(e.remove(),!0):!(!e||"absolute"!==e.css("position")&&"fixed"!==e.css("position")||(e.remove(),0))}function u(e){return e&&0===f.$box.find(e).length}function g(){if(10<e&&(f[p(M("0ppecjvc=="))](),setTimeout(function(){L.FE=null},10)),!f.$box)return!1;f.$wp.prepend(M(p(M(N)))),v=f.$wp.find("> div").first(),b=v.find("> a"),"rtl"===f.opts.direction&&v.css("left","auto").css("right",0).attr("direction","rtl"),e++}function C(e){for(var t=[M("9qqG-7amjlwq=="),M("KA3B3C2A6D1D5H5H1A3=="),M("3B9B3B5F3C4G3E3=="),M("QzbzvxyB2yA-9m=="),M("ji1kacwmgG5bc=="),M("nmA-13aogi1A3c1jd=="),M("BA9ggq=="),M("emznbjbH3fij=="),M("tkC-22d1qC-13sD1wzF-7=="),M("tA3jjf=="),M("1D1brkm==")],n=0;n<t.length;n++)if(String.prototype.endsWith||(String.prototype.endsWith=function(e,t){return(void 0===t||t>this.length)&&(t=this.length),this.substring(t-e.length,t)===e}),e.endsWith(t[n]))return!0;return!1}function m(){var e=M(p(n)),t=M(p("tzgatD-13eD1dtdrvmF3c1nrC-7saQcdav==")).split(".");try{return window.parent.document.querySelector(e)&&window[t[1]][t[2]]}catch(e){return!1}}var v,b,L=f.$,E="sC-7OB2fwhVC4vsG-7ohPA4ZD4D-8f1J3stzB-11bFE2FC1A3NB2IF1HE1TH4WB8eB-11zVG2F3I3yYB5ZG4CB2DA15CC5AD3F1A1KG1oLA10B1A6wQF1H3vgale2C4F4XA2qc2A5D5B3pepmriKB3OE1HD1fUC10pjD-11E-11TB4YJ3bC-16zE-11yc1B2CE2BC3jhjKC1pdA-21OA6C1D5B-8vF4QA11pD6sqf1C3lldA-16BD4A2H3qoEA7bB-16rmNH5H1F1vSB7RE2A3TH4YC5A5b1A4d1B3whepyAC3AA2zknC3mbgf1SC4WH4PD8TC5ZB2C3H3jb2A5ZA2EF2aoFC5qqHC4B1H1zeGA7UA5RF4TA29TA6ZC4d1C3hyWA10A3rBB2E3decorationRD3QC10UD3E6E6ZD2F3F3fme2E5uxxrEC9C3E4fB-11azhHB1LD7D6VF4VVTPC6b1C4TYG3qzDD6B3B3AH4I2H2kxbHE1JD1yihfd1QD6WB1D4mhrc1B5rvFG3A14A7cDA2OC1AA1JB5zC-16KA6WB4C-8wvlTB5A5lkZB2C2C7zynBD2D2bI-7C-21d1HE2cubyvPC8A6VB3aroxxZE4C4F4e1I2BE1WjdifH1H4A14NA1GB1YG-10tWA3A14A9sVA2C5XH2A29b2A6gsleGG2jaED2D-13fhE1OA8NjwytyTD4e1sc1D-16ZC3B5C-9e1C2FB6EFF5B2C2JH4E1C2tdLE5A3UG4G-7b2D3B4fA-9oh1G3kqvB4AG3ibnjcAC6D2B1cDA9KC2QA6bRC4VA3
6790RB8hYB2A4A-8h1A21A2B2==",y="7D4YH4fkhHB3pqDC3H2E1fkMD1IB1NF1D3QD9wB5rxqlh1A8c2B4ZA3FD2AA6FB5EB3jJG4D2J-7aC-21GB6PC5RE4TC11QD6XC4XE3XH3mlvnqjbaOA2OC2BE6A1fmI-7ujwbc1G5f1F3e1C11mXF4owBG3E1yD1E4F1D2D-8B-8C-7yC-22HD1MF5UE4cWA3D8D6a1B2C3H3a3I3sZA4B3A2akfwEB3xHD5D1F1wIC11pA-16xdxtVI2C9A6YC4a1A2F3B2GA6B4C3lsjyJB1eMA1D-11MF5PE4ja1D3D7byrf1C3e1C7D-16lwqAF3H2A1B-21wNE1MA1OG1HB2A-16tSE5UD4RB3icRA4F-10wtwzBB3E1C3CC2DA8LA2LA1EB1kdH-8uVB7decorg1J2B7B6qjrqGI2J1C6ijehIB1hkemC-13hqkrH4H-7QD6XF5XF3HLNAC3CB2aD2CD2KB10B4ycg1A-8KA4H4B11jVB5TC4yqpB-21pd1E4pedzGB6MD5B3ncB-7MA4LD2JB6PD5uH-8TB9C7YD5XD2E3I3jmiDB3zeimhLD8E2F2JC1H-9ivkPC5lG-10SB1D3H3A-21rc1A3d1E3fsdqwfGA2KA1OrC-22LA6D1B4afUB16SC7AitC-8qYA11fsxcajGA15avjNE2A-9h1hDB16B9tPC1C5F5UC1G3B8d2A5d1D4RnHJ3C3JB5D3ucMG1yzD-17hafjC-8VD3yWC6e1YD2H3ZE2C8C5oBA3H3D2vFA4WzJC4C2i1A-65fNB8afWA1H4A26mvkC-13ZB3E3h1A21BC4eFB2GD2AA5ghqND2A2B2==",n="MekC-11nB-8tIzpD7pewxvzC6mD-16xerg1==",S="lC4B3A3B2B5A1C2E4G1A2==",N="sC-7OB2fwhVC4vsG-7ohPA4ZD4D-8f1J3stzB-11bFE2EE1MA2ND1KD1IE4cA-21pSD2D5ve1G3h1A8b1E5ZC3CD2FA16mC5OC5E1hpnG1NA10B1D7hkUD4I-7b2C3C5nXD2E3F3whidEC2EH3GI2mJE2E2bxci1WA10VC7pllSG2F3A7xd1A4ZC3DB2aaeGA2DE4H2E1j1ywD-13FD1A3VE4WA3D8C6wuc1A2hf1B5B7vnrrjA1B9ic1mpbD1oMB1iSB7rWC4RI4G-7upB6jd1A2F3H2EA4FD3kDF4A2moc1anJD1TD4VI4b2C7oeQF4c1E3XC7ZA3C3G3uDB2wGB6D1JC4D1JD4C1hTE6QC5pH4pD3C-22D7c1A3textAA4gdlB2mpozkmhNC1mrxA3yWA5edhg1I2H3B7ozgmvAI3I2B5GD1LD2RSNH1KA1XA5SB4PA3sA9tlmC-9tnf1G3nd1coBH4I2I2JC3C-16LE6A1tnUA3vbwQB1G3f1A20a3A8a1C6pxAB2eniuE1F3kH2lnjB2hB-16XA5PF1G4zwtYA5B-11mzTG2B9pHB3BE2hGH3B3B2cMD5C1F1wzPA8E7VG5H5vD3H-7C8tyvsVF2I1G2A5fE3bg1mgajoyxMA4fhuzSD8aQB2B4g1A20ukb1A4B3F3GG2CujjanIC1ObiB11SD1C5pWC1D4YB8YE5FE-11jXE2F-7jB4CC2G-10uLH4E1C2tA-13yjUH5d1H1A7sWD5E4hmjF-7pykafoGA16hDD4joyD-8OA33B3C2tC7cRE4SA31a1B8d1e2A4F4g1A2A22CC5zwlAC2C1A12==",T=function(){for(var e=0,t=document.domain,n=t.split("."),r="_gd".concat((new Date).getTime());e<n.length-1&&-1===document.cookie.indexOf("".concat(r,"=").concat(r));)t=n.slice(-1-++e).join("."),document.cookie="".concat(r,"=").concat(r,";domain=").concat(t,";");return document.cookie="".concat(r,"=;expires=Thu, 01 Jan 1970 00:00:01 GMT;domain=").concat(t,";"),(t||"").replace(/(^\.*)|(\.*$)/g,"")}(),M=p(function A(e){if(!e)return e;for(var t="",n=p("charCodeAt"),r=p("fromCharCode"),o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".indexOf(e[0]),i=1;i<e.length-2;i++){for(var a=c(++o),s=e[n](i),l="";/[0-9-]/.test(e[i+1]);)l+=e[++i];s=d(s,a,l=parseInt(l,10)||0),s^=o-1&31,t+=String[r](s)}return t}),e=0;return{_init:function x(){var e=f.opts.key||[""],t=M(p("ziRA1E3B9pA5B-11D-11xg1A3ZB5D1D4B-11ED2EG2pdeoC1clIH4wB-22yQD5uF4YE3E3A9=="));"string"==typeof e&&(e=[e]);for(var n,r,o,i=!(f.ul=!0),a=0,s=0;s<e.length;s++){var l=(r=e[s],4===(o=(M(r)||"").split("|")).length&&"V3"===o[0]?[o[1],o[3],o[2]]:[null,null,""]),c=l[2];if(c===M(p(M("LGnD1KNZf1CPBYCAZB-8F3UDSLLSG1VFf1A3C2==")))||0<=c.indexOf(T,c.length-T.length)||C(T)||m()){if(null!==(n=l[1])&&!(0==n.indexOf("TRIAL")?(n=new Date(n.replace(/TRIAL/,"")),new Date(n)<new Date&&(E=y,1)):new Date(n)<new Date(M(S)))||!(0<(T||"").length)||C(T)||m()){f.ul=!1;break}i=!0,N=E,a=l[0]||-1}}var d=new Image;!0===f.ul&&(g(),d.src=i?"".concat(p(M(t)),"e=").concat(a):"".concat(p(M(t)),"u")),!0===f.ul&&(f.events.on("contentChanged",function(){(function e(){return h(v)||h(b)||u(v)||u(b)})()&&g()}),f.events.on("html.get",function(e){return e+M("qD2H-9G3ioD-17qA1tE1B-8qI3A4hA-13C-11E2C1njfldD1E6pg1C-8sC3hfbkcD2G3stC-22gqgB3G2B-7vtoA4nweeD1A31A15B9uC-16A1F5dkykdc1B8dE-11bA3F2D3A9gd1E7F2tlI-8H-7vtxB2A5B2C3B2F2B5A6ldbyC4iqC-22D-17E-13mA3D2dywiB3oxlvfC1H4C2TjqbzlnI3ntB4E3qA2zaqsC6D3pmnkoE3C6D5wvuE3bwifdhB6hch1E4xibD-17dmrC1rG-7pntnF6nB-8F1D2A11C8plrkmF2F3MC-16bocqA2WwA-21ayeA1C4d1isC-22rD-13D6DfjpjtC2E6hB2G2G4A-7D2==")})),f.events.on("html.set",function(){var e=f.el.querySelector('[data-f-id="pbf"]');e&&L(e).remove()}),f.events.on("destroy",function(){v&&v.length&&v.remove()},!0)}}},V.MODULES.edit=function(t){function e(){if(t.browser.mozilla)try{t.doc.execCommand("enableObjectResizing",!1,"false"),t.doc.execCommand("enableInlineTableEditing",!1,"false")}catch(e){}
vendor: 19,602 bytes, line 679
679if(t.browser.msie)try{t.doc.body.addEventListener("mscontrolselect",function(e){return e.srcElement.focus(),!1})}catch(e){}}var n=!1;function r(){return n}return{_init:function o(){t.events.on("focus",function(){r()?t.edit.off():t.edit.on()})},on:function i(){t.$wp?(t.$el.attr("contenteditable",!0),t.$el.removeClass("fr-disabled").attr("aria-disabled",!1),e()):t.$el.is("a")&&t.$el.attr("contenteditable",!0),t.events.trigger("edit.on",[],!0),n=!1},off:function a(){t.events.disableBlur(),t.$wp?(t.$el.attr("contenteditable",!1),t.$el.addClass("fr-disabled").attr("aria-disabled",!0)):t.$el.is("a")&&t.$el.attr("contenteditable",!1),t.events.trigger("edit.off"),t.events.enableBlur(),n=!0},disableDesign:e,isDisabled:r}},V.MODULES.format=function(x){var O=x.$;function w(e,t){var n=e;for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n+="id"===r?"#".concat(t[r]):"class"===r?".".concat(t[r]):"[".concat(r,'="').concat(t[r],'"]'));return n}function k(e,t){return!(!e||e.nodeType!==Node.ELEMENT_NODE)&&(e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector).call(e,t)}function v(e,t,n){var r,o,i,a={strong:{prop:"font-weight",val:"bold"},em:{prop:"font-style",val:"italic"}};if(e){if(x.node.isBlock(e)&&e.hasAttribute("contenteditable")&&"false"===e.getAttribute("contenteditable")||e.parentNode&&e.parentNode.hasAttribute("contenteditable")&&"false"===e.parentNode.getAttribute("contenteditable")){if(e.nextSibling&&O(e.nextSibling).hasClass("fr-marker"))return;if(e.nextSibling)return void v(e.nextSibling,t,n);if(e.parentNode&&x.node.isEditable(e.parentNode))return void v(e.parentNode,t,n)}for(;e&&e.nodeType===Node.COMMENT_NODE;)e=e.nextSibling;if(e){if(x.node.isBlock(e)&&"HR"!==e.tagName&&"LI"!==e.tagName)return x.node.hasClass(e.firstChild,"fr-marker")?v(e.firstChild.nextSibling,t,n):v(e.firstChild,t,n),!1;var s=O(x.doc.createElement(t));s.attr(n),s.insertBefore(e),(r=b(e))&&(0<=["strong","em"].indexOf(t)||"span"===t&&n.hasOwnProperty("style"))&&(i="span"===t?(o=(a=n.style.replace(/;$/,"").split(":"))[0].trim(),a[1].trim()):(o=a[t].prop,a[t].val),"background-color"!==o&&(O(r).css(o,i),function p(e,t){var n,r=e.childNodes;for(n=0;n<r.length;n++)0<=["UL","OL","LI"].indexOf(r[n].tagName)&&""===r[n].style[t]&&O(r[n]).css(t,"initial")}(r,o)));for(var l=e;l&&!O(l).hasClass("fr-marker")&&0===O(l).find(".fr-marker").length&&"UL"!==l.tagName&&"OL"!==l.tagName;){var c=l;if("SPAN"===l.tagName&&O(l).hasClass("fr-tracking-deleted"))l=l.nextSibling;else{if(x.node.isBlock(l)&&"HR"!==e.tagName)return v(l.firstChild,t,n),!1;if("SPAN"===l.tagName&&x.node.isEditable(l))return s.is(":empty")&&s.remove(),v(l.firstChild,t,n),!1;if(l.tagName&&l.hasAttribute("contenteditable")&&"false"===l.getAttribute("contenteditable"))return void v(l.nextSibling,t,n);if(!x.node.isEditable(l.parentNode))return x.selection.restore(),void x.toolbar.disable();l=l.nextSibling,s.append(c)}}if(l)(O(l).find(".fr-marker").length||"UL"===l.tagName||"OL"===l.tagName)&&v(l.firstChild,t,n);else{for(var d=s.get(0).parentNode;d&&!d.nextSibling&&!x.node.isElement(d);)d=d.parentNode;if(d){var f=d.nextSibling;f&&(x.node.isBlock(f)?"HR"===f.tagName?v(f.nextSibling,t,n):v(f.firstChild,t,n):v(f,t,n))}}s.is(":empty")&&s.remove()}}}function n(e,t){var n;if(void 0===t&&(t={}),t.style&&delete t.style,x.selection.isCollapsed()){x.markers.insert();var r=x.$el.find(".fr-marker");r.get(0).nextSibling&&x.node.isBlock(r.get(0).nextSibling)&&!r.get(0).previousSibling&&"LI"===r.get(0).parentNode.tagName&&r.get(0).nextSibling.prepend(r.get(0)),r.replaceWith(function l(e,t){var n="<".concat(e);for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n+=" ".concat(r,'="').concat(t[r],'"'));return n+=">"}(e,t)+V.INVISIBLE_SPACE+V.MARKERS+function c(e){return"</".concat(e,">")}(e)),x.selection.restore()}else{x.selection.save();var o,i=x.$el.find('.fr-marker[data-type="true"]').length&&x.$el.find('.fr-marker[data-type="true"]').get(0).nextSibling;v(i,e,t),O(i).parent().find("a:empty").remove();do{for(o=x.$el.find("".concat(w(e,t)," > ").concat(w(e,t))),n=0;n<o.length;n++)o[n].outerHTML=o[n].innerHTML}while(o.length);x.el.normalize();var a=x.el.querySelectorAll(".fr-marker");for(n=0;n<a.length;n++){var s=O(a[n]);!0===s.data("type")?k(s.get(0).nextSibling,w(e,t))&&s.next().prepend(s):k(s.get(0).previousSibling,w(e,t))&&s.prev().append(s)}x.selection.restore()}}function $(e,t,n,r){if(!r){var o=!1;if(!0===e.data("type"))for(;x.node.isFirstSibling(e.get(0))&&!e.parent().is(x.$el)&&!e.parent().is("ol")&&!e.parent().is("ul");)e.parent().before(e),o=!0;else if(!1===e.data("type"))for(;x.node.isLastSibling(e.get(0))&&!e.parent().is(x.$el)&&!e.parent().is("ol")&&!e.parent().is("ul");)e.parent().after(e),o=!0;if(o)return!0}if(e.parents(t).length||void 0===t){var i,a="",s="",l=e.parent();if("A"===l[0].tagName&&(l=l.parent()),l.is(x.$el)||x.node.isBlock(l.get(0)))return!1;for(;!(x.node.isBlock(l.parent().get(0))||void 0!==t&&k(l.get(0),w(t,n)));)a+=x.node.closeTagString(l.get(0)),s=x.node.openTagString(l.get(0))+s,l=l.parent();var c=e.get(0).outerHTML;return e.replaceWith('<span id="mark"></span>'),i=l.html().replace(/<span id="mark"><\/span>/,a+x.node.closeTagString(l.get(0))+s+c+a+x.node.openTagString(l.get(0))+s),l.replaceWith(x.node.openTagString(l.get(0))+i+x.node.closeTagString(l.get(0))),!0}return!1}function r(e,t){void 0===t&&(t={}),t.style&&delete t.style;var n=x.selection.isCollapsed();x.selection.save();var r=x.$el.find(".fr-marker");if(e&&(r[0].parentNode.tagName===e.toUpperCase()||r[1].parentNode.tagName===e.toUpperCase())){var o=r[0];r[0].parentNode.tagName!==e.toUpperCase()&&(o=r[1]);for(var i=o.parentNode.previousSibling;null!=i;)i.nodeType===Node.TEXT_NODE&&(i.textContent=i.textContent.replace(/\u200B/g,"")),i=i.previousSibling;for(var a=o.parentNode.nextSibling;null!=a;)a.nodeType===Node.TEXT_NODE&&(a.textContent=a.textContent.replace(/\u200B/g,"")),a=a.nextSibling}for(var s=!0;s;){s=!1;for(var l=x.$el.find(".fr-marker"),c=0;c<l.length;c++){var d=O(l[c]),f=null;if(d.attr("data-cloned")||n||(f=d.clone().removeClass("fr-marker").addClass("fr-clone"),d.data("type")&&"true"===d.data("type").toString()?d.attr("data-cloned",!0).after(f):d.attr("data-cloned",!0).before(f)),$(d,e,t,n)){s=!0;break}}}!function M(e,t,n,r){for(var o,i={strong:{prop:"font-weight",val:"bold"},em:{prop:"font-style",val:"italic"}},a=x.node.contents(e.get(0)),s=0;s<a.length;s++){var l=a[s];if(l.innerHTML&&8203==l.innerHTML.charCodeAt()&&l.tagName.toLocaleLowerCase()==n&&l.childNodes.length<2&&!x.helpers.isMobile()&&(l.outerHTML=l.innerHTML),x.node.hasClass(l,"fr-marker"))t=(t+1)%2;else if(t)if(0<O(l).find(".fr-marker").length)t=M(O(l),t,n,r);else{(o="LI"===l.tagName?l:O(l).parentsUntil(x.$el,"li").get(0))&&(void 0===n||0<=["strong","em"].indexOf(n))&&(n?O(o).css(i[n].prop,""):o.style=""),(o=l.parentNode!==x.el?l.parentNode:null)&&1===o.nodeType&&["p","strong","u","em","s","sub","sup","a"].indexOf(n)<0&&o.hasAttribute("style")&&"SPAN"!==o.tagName&&"LI"!==o.tagName?o.style="":l&&1===l.nodeType&&l.hasAttribute("style")&&["p","strong","u","em","s","sub","sup","a"].indexOf(n)<0&&(x.browser.msie?O(l).attr("style",""):l.style="");for(var c=O(l).find(n||"*:not(br)"),d=c.length-1;0<=d;d--){var f=c[d];(o="LI"===f.tagName?f:O(f).parentsUntil(x.$el,"li").get(0))&&(!n||0<=["strong","em"].indexOf(n))&&(n?O(o).css(i[n].prop,""):o.style=""),"A"===f.tagName||x.node.isBlock(f)||x.node.isVoid(f)||void 0!==n&&!k(f,w(n,r))?x.node.isBlock(f)&&void 0===n&&"TABLE"!==l.tagName&&x.node.clearAttributes(f):x.node.hasClass(f,"fr-clone")||x.node.hasClass(f,"fr-tracking-deleted")||O(f).data("tracking")||(f.outerHTML=f.innerHTML)}"A"!==l.tagName&&void 0===n&&l.nodeType===Node.ELEMENT_NODE&&!x.node.isVoid(l)||k(l,w(n,r))?x.node.isBlock(l)||(x.node.hasClass(l,"fr-clone")||x.opts.trackChangesEnabled?!x.node.hasClass(l,"fr-clone")&&x.opts.trackChangesEnabled&&l.parentNode&&(l.outerHTML=l.innerHTML):l.outerHTML=l.innerHTML):void 0===n&&l.nodeType===Node.ELEMENT_NODE&&x.node.isBlock(l)&&"TABLE"!==l.tagName&&x.node.clearAttributes(l)}else 0<O(l).find(".fr-marker").length&&(t=M(O(l),t,n,r))}return t}(x.$el,0,e,t),n||(x.$el.find(".fr-marker").remove(),x.$el.find(".fr-clone").removeClass("fr-clone").addClass("fr-marker")),n&&x.$el.find(".fr-marker").before(V.INVISIBLE_SPACE).after(V.INVISIBLE_SPACE),x.html.cleanEmptyTags(),x.el.normalize(),x.selection.restore();var p=x.win.getSelection()&&x.win.getSelection().anchorNode;if(p){var h=x.node.blockParent(p),u=!!p.textContent.replace(/\u200B/g,"").length,g=x.win.getSelection().getRangeAt(0),C=g.startOffset,m=g.endOffset;x.selection.text().replace(/\u200B/g,"").length||function A(e,t){if(e&&t){if(e.isSameNode(t)?e.textContent=e.textContent.replace(/\u200B(?=.*\u200B)/g,""):e.nodeType===Node.TEXT_NODE&&(e.textContent=e.textContent.replace(/\u200B/g,"")),!e.childNodes.length)return!1;(!x.browser.msie||x.browser.msie&&Array.isArray(e.childNodes))&&e.childNodes.forEach(function(e){A(e,t)})}}(h,p);var v=x.win.getSelection().getRangeAt(0);if(p.nodeType===Node.TEXT_NODE){if(!u||!x.selection.text().length&&C===m){var b=p.textContent.search(/\u200B/g)+1;if(x.browser.msie){var L=x.doc.createRange();x.selection.get().removeAllRanges(),L.setStart(p,b),L.setEnd(p,b),x.selection.get().addRange(L)}else"a"!==e&&(v.setStart(p,b),v.setEnd(p,b))}}else{var E,y,S=0,N=O(p).contents();if(x.browser.msie){for(;y=N[S];)y.nodeType===Node.TEXT_NODE&&0<=y.textContent.search(/\u200B/g)&&(E=y),S++;E=O(E)}else E=N.filter(function(e){return e.nodeType===Node.TEXT_NODE&&0<=e.textContent.search(/\u200B/g)});if(E.length&&!x.opts.trackChangesEnabled){var T=E.text().search(/\u200B/g)+1;v.setStart(E.get(0),T),v.setEnd(E.get(0),T)}}}}function t(e,t){var n,r,o,i,a,s,l,c=null;if(x.selection.isCollapsed()){x.markers.insert();var d=(r=x.$el.find(".fr-marker")).parent();if(x.node.openTagString(d.get(0))==='<span style="'.concat(e,": ").concat(d.css(e),';">')){if(x.node.isEmpty(d.get(0)))c=O(x.doc.createElement("span")).attr("style","".concat(e,": ").concat(t,";")).html("".concat(V.INVISIBLE_SPACE).concat(V.MARKERS)),d.replaceWith(c);else{var f={};f["style*"]="".concat(e,":"),$(r,"span",f,!0),r=x.$el.find(".fr-marker"),t?(c=O(x.doc.createElement("span")).attr("style","".concat(e,": ").concat(t,";")).html("".concat(V.INVISIBLE_SPACE).concat(V.MARKERS)),r.replaceWith(c)):r.replaceWith(V.INVISIBLE_SPACE+V.MARKERS)}x.html.cleanEmptyTags()}else x.node.isEmpty(d.get(0))&&d.is("span")?(r.replaceWith(V.MARKERS),d.css(e,t)):(r.get(0).nextSibling&&x.node.isBlock(r.get(0).nextSibling)&&!r.get(0).previousSibling&&"LI"===r.get(0).parentNode.tagName&&r.get(0).nextSibling.prepend(r.get(0)),c=O('<span style="'.concat(e,": ").concat(t,';">').concat(V.INVISIBLE_SPACE).concat(V.MARKERS,"</span>")),r.replaceWith(c));c&&L(c,e,t)}else{if(x.selection.save(),null===t||"color"===e&&0<x.$el.find(".fr-marker").parents("u, a").length){var p=x.$el.find(".fr-marker");for(n=0;n<p.length;n++)if(!0===(r=O(p[n])).data("type")||"true"===r.data("type"))for(;x.node.isFirstSibling(r.get(0))&&!r.parent().is(x.$el)&&!x.node.isElement(r.parent().get(0))&&!x.node.isBlock(r.parent().get(0));)r.parent().before(r);else for(;x.node.isLastSibling(r.get(0))&&!r.parent().is(x.$el)&&!x.node.isElement(r.parent().get(0))&&!x.node.isBlock(r.parent().get(0));)r.parent().after(r)}for(var h=x.$el.find('.fr-marker[data-type="true"]').get(0).nextSibling;h.firstChild;)h=h.firstChild;var u={"class":"fr-unprocessed"};for(t&&(u.style="".concat(e,": ").concat(t,";")),v(h,"span",u),x.$el.find(".fr-marker + .fr-unprocessed").each(function(){O(this).prepend(O(this).prev())}),x.$el.find(".fr-unprocessed + .fr-marker").each(function(){O(this).prev().append(O(this))}),(t||"").match(/\dem$/)&&x.$el.find("span.fr-unprocessed").removeClass("fr-unprocessed");0<x.$el.find("span.fr-unprocessed").length;){if(o=b(c=x.$el.find("span.fr-unprocessed").first().removeClass("fr-unprocessed")),c.parent().get(0).normalize(),c.parent().is("span")&&1===c.parent().get(0).childNodes.length){var g=t;x.browser.msie&&!t&&(g=""),c.parent().css(e,g);var C=c;c=c.parent(),C.replaceWith(C.html())}for(i=c.find("span"),o&&"background-color"!==e&&(o.normalize(),i=O(o).find("span:not(.fr-unprocessed)")),n=i.length-1;0<=n;n--)a=i[n],s=e,l=void 0,(l=O(a)).css(s,""),""===l.attr("style")&&l.replaceWith(l.html());L(c,e,t)}}!function m(){var e;for(;0<x.$el.find(".fr-split:empty").length;)x.$el.find(".fr-split:empty").remove();x.$el.find(".fr-split").removeClass("fr-split"),x.$el.find('[style=""]').removeAttr("style"),x.$el.find('[class=""]').removeAttr("class"),x.html.cleanEmptyTags();for(var t=x.$el.find("span"),n=t.length-1;0<=n;n--){var r=t[n];r.attributes&&0!==r.attributes.length||O(r).replaceWith(r.innerHTML)}x.el.normalize();var o=x.$el.find("span[style] + span[style]");for(e=0;e<o.length;e++){var i=O(o[e]),a=O(o[e]).prev();i.get(0).previousSibling===a.get(0)&&x.node.openTagString(i.get(0))===x.node.openTagString(a.get(0))&&(i.prepend(a.html()),a.remove())}x.$el.find("span[style] span[style]").each(function(){if(0<=O(this).attr("style").indexOf("font-size")){var e=O(this).parents("span[style]");e.attr("style")&&0<=e.attr("style").indexOf("background-color")&&(O(this).attr("style","".concat(O(this).attr("style"),";").concat(e.attr("style"))),$(O(this),"span[style]",{},!1))}}),x.el.normalize(),x.selection.restore()}()}function b(e){var t,n,r,o,i,a;if(t="LI"===e.tagName?e:O(e).parentsUntil(x.$el,"li").get(0)){if((a=x.selection.info(t)).atStart&&a.atEnd)return t;if(a.atStart&&!a.atEnd&&(n=O(t).find(".fr-marker[data-type=false]").get(0),r=O(n).parentsUntil(x.$el,"li").get(0),o=O(n).parent().get(0),(i=n.nextSibling)&&0<=["UL","OL"].indexOf(i.tagName)||!r.isSameNode(t)||!i&&("LI"===o.tagName||!o.nextSibling||0<=["UL","OL"].indexOf(o.nextSibling.tagName)||x.node.isVoid(o.nextSibling))))return t}}function L(e,t,n){var r,o,i,a=e.parentsUntil(x.$el,"span[style]"),s=[];for(r=a.length-1;0<=r;r--)o=a[r],i=t,0===O(o).attr("style").indexOf("".concat(i,":"))||0<=O(o).attr("style").indexOf(";".concat(i,":"))||0<=O(o).attr("style").indexOf("; ".concat(i,":"))||s.push(a[r]);if((a=a.not(s)).length){for(var l="",c="",d="",f="",p=e.get(0);p=p.parentNode,O(p).addClass("fr-split"),l+=x.node.closeTagString(p),c=x.node.openTagString(O(p).clone().addClass("fr-split").get(0))+c,a.get(0)!==p&&(d+=x.node.closeTagString(p),f=x.node.openTagString(O(p).clone().addClass("fr-split").get(0))+f),a.get(0)!==p;);var h="".concat(l+x.node.openTagString(O(a.get(0)).clone().css(t,n||"").get(0))+f+e.css(t,"").get(0).outerHTML+d,"</span>").concat(c);e.replaceWith('<span id="fr-break"></span>');var u=a.get(0).outerHTML;O(a.get(0)).replaceWith(u.replace(/<span id="fr-break"><\/span>/g,function(){return h}))}}function o(e,t){void 0===t&&(t={}),t.style&&delete t.style;var n=x.selection.ranges(0),r=n.startContainer;if(r.nodeType===Node.ELEMENT_NODE&&0<r.childNodes.length&&r.childNodes[n.startOffset]&&(r=r.childNodes[n.startOffset]),!n.collapsed&&r.nodeType===Node.TEXT_NODE&&n.startOffset===(r.textContent||"").length){for(;!x.node.isBlock(r.parentNode)&&!r.nextSibling;)r=r.parentNode;r.nextSibling&&(r=r.nextSibling)}for(var o=r;o&&o.nodeType===Node.ELEMENT_NODE&&!k(o,w(e,t));)o=o.firstChild;if(o&&o.nodeType===Node.ELEMENT_NODE&&k(o,w(e,t)))return!0;var i=r;for(i&&i.nodeType!==Node.ELEMENT_NODE&&(i=i.parentNode);i&&i.nodeType===Node.ELEMENT_NODE&&i!==x.el&&!k(i,w(e,t));)i=i.parentNode;return!(!i||i.nodeType!==Node.ELEMENT_NODE||i===x.el||!k(i,w(e,t)))}return{is:o,toggle:function i(e,t){o(e,t)?r(e,t):n(e,t)},apply:n,remove:r,applyStyle:t,removeStyle:function a(e){t(e,null)}}},V.MODULES.spaces=function(c){function r(e,t){var n=e.previousSibling,r=e.nextSibling,o=e.textContent,i=e.parentNode,a=[V.ENTER_P,V.ENTER_DIV,V.ENTER_BR];if(!c.html.isPreformatted(i)){t&&(o=o.replace(/[\f\n\r\t\v ]{2,}/g," "),r&&"BR"!==r.tagName&&!c.node.isBlock(r)||!(c.node.isBlock(i)||c.node.isLink(i)&&!i.nextSibling||c.node.isElement(i))||(o=o.replace(/[\f\n\r\t\v ]{1,}$/g,"")),n&&"BR"!==n.tagName&&!c.node.isBlock(n)||!(c.node.isBlock(i)||c.node.isLink(i)&&!i.previousSibling||c.node.isElement(i))||(o=o.replace(/^[\f\n\r\t\v ]{1,}/g,"")),(c.node.isBlock(r)||c.node.isBlock(n))&&(!n||n&&"A"!==n.tagName)&&(o=o.replace(/^[\f\n\r\t\v ]{1,}/g,""))," "===o&&(n&&c.node.isVoid(n)||r&&c.node.isVoid(r))&&!(n&&r&&c.node.isVoid(n)||r&&n&&c.node.isVoid(r))&&(o="")),(!n&&c.node.isBlock(r)||!r&&c.node.isBlock(n))&&c.node.isBlock(i)&&i!==c.el&&(o=o.replace(/^[\f\n\r\t\v ]{1,}/g,"")),t||(o=o.replace(new RegExp(V.UNICODE_NBSP,"g")," "));for(var s="",l=0;l<o.length;l++)32!=o.charCodeAt(l)||0!==l&&32!=s.charCodeAt(l-1)||!((c.opts.enter===V.ENTER_BR||c.opts.enter===V.ENTER_DIV)&&(n&&"BR"===n.tagName||r&&"BR"===r.tagName)||n&&r&&n.tagName===r.tagName||!(n&&r&&c.node.isVoid(n)||n&&r&&c.node.isVoid(r))||n&&r&&0<=["STRONG","U","EM"].indexOf(n.tagName)&&"BR"===r.tagName)?s+=o[l]:s+=V.UNICODE_NBSP;c.browser.chrome&&1<s.length&&32===s.charCodeAt(s.length-1)&&(r&&r.nextSibling&&r.nextSibling.nextSibling&&"BR"===r.nextSibling.nextSibling.tagName||r&&"BR"===r.tagName)&&(s=s.substring(0,s.length-1)+V.UNICODE_NBSP),(!r||r&&c.node.isBlock(r)||r&&r.nodeType===Node.ELEMENT_NODE&&c.win.getComputedStyle(r)&&"block"===c.win.getComputedStyle(r).display)&&(!c.node.isVoid(n)||n&&-1!==["P","DIV","BR"].indexOf(n.tagName)&&-1!==a.indexOf(c.opts.enter))&&(s=s.replace(/ $/,V.UNICODE_NBSP)),!n||c.node.isVoid(n)||c.node.isBlock(n)||1!==(s=s.replace(/^\u00A0([^ $])/," $1")).length||160!==s.charCodeAt(0)||!r||c.node.isVoid(r)||c.node.isBlock(r)||c.node.hasClass(n,"fr-marker")&&c.node.hasClass(r,"fr-marker")||(s=" "),t||(s=s.replace(/([^ \u00A0])\u00A0([^ \u00A0])/g,"$1 $2")),e.textContent!==s&&(e.textContent=s)}}function l(e,t){if(void 0!==e&&e||(e=c.el),void 0===t&&(t=!1),!e.getAttribute||"false"!==e.getAttribute("contenteditable"))if(e.nodeType===Node.TEXT_NODE)r(e,t);else if(e.nodeType===Node.ELEMENT_NODE)for(var n=c.doc.createTreeWalker(e,NodeFilter.SHOW_TEXT,c.node.filter(function(e){for(var t=e.parentNode;t&&t!==c.el;){if("STYLE"===t.tagName||"IFRAME"===t.tagName)return!1;if("PRE"===t.tagName)return!1;t=t.parentNode}return null!==e.textContent.match(/([ \u00A0\f\n\r\t\v]{2,})|(^[ \u00A0\f\n\r\t\v]{1,})|([ \u00A0\f\n\r\t\v]{1,}$)/g)&&!c.node.hasClass(e.parentNode,"fr-marker")}),!1);n.nextNode();)r(n.currentNode,t)}return{normalize:l,normalizeAroundCursor:function d(){for(var e=[],t=c.el.querySelectorAll(".fr-marker"),n=0;n<t.length;n++){for(var r=null,o=c.node.blockParent(t[n]),i=(r=o||t[n]).nextSibling,a=r.previousSibling;i&&"BR"===i.tagName;)i=i.nextSibling;for(;a&&"BR"===a.tagName;)a=a.previousSibling;r&&e.indexOf(r)<0&&e.push(r),a&&e.indexOf(a)<0&&e.push(a),i&&e.indexOf(i)<0&&e.push(i)}for(var s=0;s<e.length;s++)l(e[s])}}},V.INVISIBLE_SPACE="​",V.HAIR_SPACE=" ",V.START_MARKER='<span class="fr-marker" data-id="0" data-type="true" style="display: none; line-height: 0;">'.concat(V.INVISIBLE_SPACE,"</span>"),V.END_MARKER='<span class="fr-marker" data-id="0" data-type="false" style="display: none; line-height: 0;">'.concat(V.INVISIBLE_SPACE,"</span>"),V.MARKERS=V.START_MARKER+V.END_MARKER,V.MODULES.markers=function(d){var f=d.$;function l(){if(!d.$wp)return null;try{var e=d.selection.ranges(0),t=e.commonAncestorContainer;if(t!==d.el&&!d.$el.contains(t))return null;var n=e.cloneRange(),r=e.cloneRange();n.collapse(!0);var o=f(d.doc.createElement("SPAN")).addClass("fr-marker").attr("style","display: none; line-height: 0;").html(V.INVISIBLE_SPACE).get(0);if(n.insertNode(o),o=d.$el.find("span.fr-marker").get(0)){for(var i=o.nextSibling;
vendor: 4,590 bytes, line 679
679i&&i.nodeType===Node.TEXT_NODE&&0===i.textContent.length;)f(i).remove(),i=d.$el.find("span.fr-marker").get(0).nextSibling;return d.selection.clear(),d.selection.get().addRange(r),o}return null}catch(a){}}function c(){d.$el.find(".fr-marker").remove()}return{place:function p(e,t,n){var r,o,i;try{var a=e.cloneRange();if(a.collapse(t),a.insertNode(function l(e,t){var n=f(d.doc.createElement("SPAN"));return n.addClass("fr-marker").attr("data-id",t).attr("data-type",e).attr("style","display: ".concat(d.browser.safari?"none":"inline-block","; line-height: 0;")).html(V.INVISIBLE_SPACE),n.get(0)}(t,n)),!0===t)for(i=(r=d.$el.find('span.fr-marker[data-type="true"][data-id="'.concat(n,'"]')).get(0)).nextSibling;i&&i.nodeType===Node.TEXT_NODE&&0===i.textContent.length;)f(i).remove(),i=r.nextSibling;if(!0===t&&!e.collapsed){for(;!d.node.isElement(r.parentNode)&&!i;)-1</\bfa\b/g.test(r.parentNode.className)&&"I"===r.parentNode.tagName?f(r.parentNode).before(r):f(r.parentNode).after(r),i=r.nextSibling;if(i&&i.nodeType===Node.ELEMENT_NODE&&d.node.isBlock(i)&&"HR"!==i.tagName){for(o=[i];i=o[0],(o=d.node.contents(i))[0]&&d.node.isBlock(o[0]););f(i).prepend(f(r))}}if(!1===t&&!e.collapsed){if((i=(r=d.$el.find('span.fr-marker[data-type="false"][data-id="'.concat(n,'"]')).get(0)).previousSibling)&&i.nodeType===Node.ELEMENT_NODE&&d.node.isBlock(i)&&"HR"!==i.tagName){for(o=[i];i=o[o.length-1],(o=d.node.contents(i))[o.length-1]&&d.node.isBlock(o[o.length-1]););f(i).append(f(r))}(r.parentNode&&0<=["TD","TH"].indexOf(r.parentNode.tagName)||!r.previousSibling&&d.node.isBlock(r.parentElement))&&(r.parentNode.previousSibling&&!r.previousSibling?f(r.parentNode.previousSibling).append(r):0<=["TD","TH"].indexOf(r.parentNode.tagName)&&r.parentNode.firstChild===r&&(r.parentNode.previousSibling?f(r.parentNode.previousSibling).append(r):r.parentNode.parentNode&&r.parentNode.parentNode.previousSibling&&f(r.parentNode.parentNode.previousSibling).append(r)))}var s=d.$el.find('span.fr-marker[data-type="'.concat(t,'"][data-id="').concat(n,'"]')).get(0);return s&&(s.style.display="none"),s}catch(c){return null}},insert:l,split:function a(){d.selection.isCollapsed()||d.selection.remove();var e=d.$el.find(".fr-marker").get(0);if(e||(e=l()),!e)return null;var t=d.node.deepestParent(e);if(t||(t=d.node.blockParent(e))&&"LI"!==t.tagName&&(t=null),t)if(d.node.isBlock(t)&&d.node.isEmpty(t))"LI"!==t.tagName||t.parentNode.firstElementChild!==t||d.node.isEmpty(t.parentNode)?f(t).replaceWith('<span class="fr-marker"></span>'):f(t).append('<span class="fr-marker"></span>');else if(d.cursor.isAtStart(e,t))f(t).before('<span class="fr-marker"></span>'),f(e).remove();else if(d.cursor.isAtEnd(e,t))f(t).after('<span class="fr-marker"></span>'),f(e).remove();else{for(var n=e,r="",o="";n=n.parentNode,r+=d.node.closeTagString(n),o=d.node.openTagString(n)+o,n!==t;);f(e).replaceWith('<span id="fr-break"></span>');var i=d.node.openTagString(t)+f(t).html()+d.node.closeTagString(t);i=i.replace(/<span id="fr-break"><\/span>/g,"".concat(r,'<span class="fr-marker"></span>').concat(o)),f(t).replaceWith(i)}return d.$el.find(".fr-marker").get(0)},insertAtPoint:function h(e){var t,n=e.clientX,r=e.clientY;c();var o=null;if("undefined"!=typeof d.doc.caretPositionFromPoint?(t=d.doc.caretPositionFromPoint(n,r),(o=d.doc.createRange()).setStart(t.offsetNode,t.offset),o.setEnd(t.offsetNode,t.offset)):"undefined"!=typeof d.doc.caretRangeFromPoint&&(t=d.doc.caretRangeFromPoint(n,r),(o=d.doc.createRange()).setStart(t.startContainer,t.startOffset),o.setEnd(t.startContainer,t.startOffset)),null!==o&&"undefined"!=typeof d.win.getSelection){var i=d.win.getSelection();i.removeAllRanges(),i.addRange(o)}else if("undefined"!=typeof d.doc.body.createTextRange)try{(o=d.doc.body.createTextRange()).moveToPoint(n,r);var a=o.duplicate();a.moveToPoint(n,r),o.setEndPoint("EndToEnd",a),o.select()}catch(s){return!1}l()},remove:c}},V.MODULES.selection=function(E){var y=E.$;function s(){var e="";return E.win.getSelection?e=E.win.getSelection():E.doc.getSelection?e=E.doc.getSelection():E.doc.selection&&(e=E.doc.selection.createRange().text),e.toString()}function L(){return E.win.getSelection?E.win.getSelection():E.doc.getSelection?E.doc.getSelection():E.doc.selection.createRange()}function f(e){var t=L(),n=[];if(t&&t.getRangeAt&&t.rangeCount){n=[];for(var r=0;r<t.rangeCount;r++)n.push(t.getRangeAt(r))}else n=E.doc.createRange?[E.doc.createRange()]:[];return void 0!==e?n[e]:n}function S(){var e=L();try{e.removeAllRanges?e.removeAllRanges():e.empty?e.empty():e.clear&&e.clear()}catch(t){}}function p(e,t){var n=e;
vendor: 4,422 bytes, line 679
679return n.nodeType===Node.ELEMENT_NODE&&0<n.childNodes.length&&n.childNodes[t]&&(n=n.childNodes[t]),n.nodeType===Node.TEXT_NODE&&(n=n.parentNode),n}function N(){if(E.$wp){E.markers.remove();var e,t,n=f(),r=[];for(t=0;t<n.length;t++)if(n[t].startContainer!==E.doc||E.browser.msie){var o=(e=n[t]).collapsed,i=E.markers.place(e,!0,t),a=E.markers.place(e,!1,t);if(void 0!==i&&i||!o||(y(".fr-marker").remove(),E.selection.setAtEnd(E.el)),E.el.normalize(),E.browser.safari&&!o)try{(e=E.doc.createRange()).setStartAfter(i),e.setEndBefore(a),r.push(e)}catch(s){}}if(E.browser.safari&&r.length)for(E.selection.clear(),t=0;t<r.length;t++)E.selection.get().addRange(r[t])}}function T(){var e,t=E.el.querySelectorAll('.fr-marker[data-type="true"]');if(!E.$wp)return E.markers.remove(),!1;if(0===t.length)return!1;if(E.browser.msie||E.browser.edge)for(e=0;e<t.length;e++)t[e].style.display="inline-block";E.core.hasFocus()||E.browser.msie||E.browser.webkit||E.$el.focus(),S();var n=L();for(e=0;e<t.length;e++){var r=y(t[e]).data("id"),o=t[e],i=E.doc.createRange(),a=E.$el.find('.fr-marker[data-type="false"][data-id="'.concat(r,'"]'));(E.browser.msie||E.browser.edge)&&a.css("display","inline-block");var s=null;if(0<a.length){a=a[0];try{for(var l=!1,c=o.nextSibling,d=null;c&&c.nodeType===Node.TEXT_NODE&&0===c.textContent.length;)c=(d=c).nextSibling,y(d).remove();for(var f=a.nextSibling;f&&f.nodeType===Node.TEXT_NODE&&0===f.textContent.length;)f=(d=f).nextSibling,y(d).remove();if(o.nextSibling===a||a.nextSibling===o){for(var p=o.nextSibling===a?o:a,h=p===o?a:o,u=p.previousSibling;u&&u.nodeType===Node.TEXT_NODE&&0===u.length;)u=(d=u).previousSibling,y(d).remove();if(u&&u.nodeType===Node.TEXT_NODE)for(;u&&u.previousSibling&&u.previousSibling.nodeType===Node.TEXT_NODE;)u.previousSibling.textContent+=u.textContent,u=u.previousSibling,y(u.nextSibling).remove();for(var g=h.nextSibling;g&&g.nodeType===Node.TEXT_NODE&&0===g.length;)g=(d=g).nextSibling,y(d).remove();if(g&&g.nodeType===Node.TEXT_NODE)for(;g&&g.nextSibling&&g.nextSibling.nodeType===Node.TEXT_NODE;)g.nextSibling.textContent=g.textContent+g.nextSibling.textContent,g=g.nextSibling,y(g.previousSibling).remove();if(u&&(E.node.isVoid(u)||E.node.isBlock(u))&&(u=null),g&&(E.node.isVoid(g)||E.node.isBlock(g))&&(g=null),u&&g&&u.nodeType===Node.TEXT_NODE&&g.nodeType===Node.TEXT_NODE){y(o).remove(),y(a).remove();var C=u.textContent.length;u.textContent+=g.textContent,y(g).remove(),E.spaces.normalize(u),i.setStart(u,C),i.setEnd(u,C),l=!0}else!u&&g&&g.nodeType===Node.TEXT_NODE?(y(o).remove(),y(a).remove(),E.opts.htmlUntouched||E.spaces.normalize(g),s=y(E.doc.createTextNode("\u200b")).get(0),y(g).before(s),i.setStart(g,0),i.setEnd(g,0),l=!0):!g&&u&&u.nodeType===Node.TEXT_NODE&&(y(o).remove(),y(a).remove(),E.opts.htmlUntouched||E.spaces.normalize(u),s=y(E.doc.createTextNode("\u200b")).get(0),y(u).after(s),i.setStart(u,u.textContent.length),i.setEnd(u,u.textContent.length),l=!0)}if(!l){var m=void 0,v=void 0;v=(E.browser.chrome||E.browser.edge)&&o.nextSibling===a?(m=M(a,i,!0)||i.setStartAfter(a),M(o,i,!1)||i.setEndBefore(o)):(o.previousSibling===a&&(a=(o=a).nextSibling),a.nextSibling&&"BR"===a.nextSibling.tagName||!a.nextSibling&&E.node.isBlock(o.previousSibling)||o.previousSibling&&"BR"===o.previousSibling.tagName||(o.style.display="inline",a.style.display="inline",s=y(E.doc.createTextNode("\u200b")).get(0)),m=M(o,i,!0)||y(o).before(s)&&i.setStartBefore(o),M(a,i,!1)||y(a).after(s)&&i.setEndAfter(a)),"function"==typeof m&&m(),"function"==typeof v&&v()}}catch(b){}}s&&y(s).remove();try{n.addRange(i)}catch(b){}}E.markers.remove()}function M(e,t,n){var r,o=e.previousSibling,i=e.nextSibling;return o&&i&&o.nodeType===Node.TEXT_NODE&&i.nodeType===Node.TEXT_NODE?(r=o.textContent.length,n?(i.textContent=o.textContent+i.textContent,y(o).remove(),y(e).remove(),E.opts.htmlUntouched||E.spaces.normalize(i),function(){t.setStart(i,r)}):(o.textContent+=i.textContent,y(i).remove(),y(e).remove(),E.opts.htmlUntouched||E.spaces.normalize(o),function(){t.setEnd(o,r)})):o&&!i&&o.nodeType===Node.TEXT_NODE?(r=o.textContent.length,n?(E.opts.htmlUntouched||E.spaces.normalize(o),function(){t.setStart(o,r)}):(E.opts.htmlUntouched||E.spaces.normalize(o),function(){t.setEnd(o,r)})):!(!i||o||i.nodeType!==Node.TEXT_NODE)&&(n?(E.opts.htmlUntouched||E.spaces.normalize(i),function(){t.setStart(i,0)}):(E.opts.htmlUntouched||E.spaces.normalize(i),function(){t.setEnd(i,0)}
vendor: 4,570 bytes, line 679
679))}function A(){for(var e=f(),t=0;t<e.length;t++)if(!e[t].collapsed)return!1;return!0}function o(e){var t,n,r=!1,o=!1;if(E.win.getSelection){var i=E.win.getSelection();i.rangeCount&&((n=(t=i.getRangeAt(0)).cloneRange()).selectNodeContents(e),n.setEnd(t.startContainer,t.startOffset),r=a(n),n.selectNodeContents(e),n.setStart(t.endContainer,t.endOffset),o=a(n))}else E.doc.selection&&"Control"!==E.doc.selection.type&&((n=(t=E.doc.selection.createRange()).duplicate()).moveToElementText(e),n.setEndPoint("EndToStart",t),r=a(n),n.moveToElementText(e),n.setEndPoint("StartToEnd",t),o=a(n));return{atStart:r,atEnd:o}}function a(e){return""===e.toString().replace(/[\u200B-\u200D\uFEFF]/g,"")}function x(e,t){void 0===t&&(t=!0);var n=y(e).html();n&&n.replace(/\u200b/g,"").length!==n.length&&y(e).html(n.replace(/\u200b/g,""));for(var r=E.node.contents(e),o=0;o<r.length;o++)r[o].nodeType!==Node.ELEMENT_NODE?y(r[o]).remove():(x(r[o],0===o),0===o&&(t=!1));if(e.nodeType===Node.TEXT_NODE){var i=y(document.createElement("span")).attr("data-first","true").attr("data-text","true");y(e)[0].replaceWith(i[0])}else t&&y(e).attr("data-first",!0)}function O(){return 0===y(this).find("fr-inner").length}function h(){try{if(!E.$wp)return!1;for(var e=f(0).commonAncestorContainer;e&&!E.node.isElement(e);)e=e.parentNode;return!!E.node.isElement(e)}catch(t){return!1}}function r(e,t){if(!e||0<e.getElementsByClassName("fr-marker").length)return!1;for(var n=e.firstChild;n&&(E.node.isBlock(n)||t&&!E.node.isVoid(n)&&n.nodeType===Node.ELEMENT_NODE);)n=(e=n).firstChild;e.innerHTML=V.MARKERS+e.innerHTML}function i(e,t){if(!e||0<e.getElementsByClassName("fr-marker").length)return!1;for(var n=e.lastChild;n&&(E.node.isBlock(n)||t&&!E.node.isVoid(n)&&n.nodeType===Node.ELEMENT_NODE);)n=(e=n).lastChild;var r=E.doc.createElement("SPAN");for(r.setAttribute("id","fr-sel-markers"),r.innerHTML=V.MARKERS;e.parentNode&&E.opts.htmlAllowedEmptyTags&&0<=E.opts.htmlAllowedEmptyTags.indexOf(e.tagName.toLowerCase());)e=e.parentNode;e.appendChild(r);var o=e.querySelector("#fr-sel-markers");o.outerHTML=o.innerHTML}return{text:s,get:L,ranges:f,clear:S,element:function l(){var e=L();try{if(e.rangeCount){var t,n=f(0),r=n.startContainer;if(E.node.isElement(r)&&0===n.startOffset&&r.childNodes.length)for(;r.childNodes.length&&r.childNodes[0].nodeType===Node.ELEMENT_NODE;)r=r.childNodes[0];if(r.nodeType===Node.TEXT_NODE&&n.startOffset===(r.textContent||"").length&&r.nextSibling&&(r=r.nextSibling),r.nodeType===Node.ELEMENT_NODE){var o=!1;if(E.node.isElement(r)&&""==r.textContent&&"IMG"==r.childNodes[0].tagName&&r.childNodes.length)for(;r.childNodes.length&&r.childNodes[0].nodeType===Node.ELEMENT_NODE;)r=r.childNodes[0];if(0<r.childNodes.length&&r.childNodes[n.startOffset]){for(t=r.childNodes[n.startOffset];t&&t.nodeType===Node.TEXT_NODE&&0===t.textContent.length;)t=t.nextSibling;if(t&&t.textContent.replace(/\u200B/g,"")===s().replace(/\u200B/g,"")&&(r=t,o=!0),!o&&1<r.childNodes.length&&0<n.startOffset&&r.childNodes[n.startOffset-1]){for(t=r.childNodes[n.startOffset-1];t&&t.nodeType===Node.TEXT_NODE&&0===t.textContent.length;)t=t.nextSibling;t&&t.textContent.replace(/\u200B/g,"")===s().replace(/\u200B/g,"")&&(r=t,o=!0)}}else!n.collapsed&&r.nextSibling&&r.nextSibling.nodeType===Node.ELEMENT_NODE&&(t=r.nextSibling)&&t.textContent.replace(/\u200B/g,"")===s().replace(/\u200B/g,"")&&(r=t,o=!0);!o&&0<r.childNodes.length&&y(r.childNodes[0]).text().replace(/\u200B/g,"")===s().replace(/\u200B/g,"")&&["BR","IMG","HR"].indexOf(r.childNodes[0].tagName)<0&&(r=r.childNodes[0])}for(;r.nodeType!==Node.ELEMENT_NODE&&r.parentNode;)r=r.parentNode;for(var i=r;i&&"HTML"!==i.tagName;){if(i===E.el)return r;i=y(i).parent()[0]}}}catch(a){}return E.el},endElement:function c(){var e=L();try{if(e.rangeCount){var t,n=f(0),r=n.endContainer;if(r.nodeType===Node.ELEMENT_NODE){var o=!1;0<r.childNodes.length&&r.childNodes[n.endOffset]&&y(r.childNodes[n.endOffset]).text()===s()?(r=r.childNodes[n.endOffset],o=!0):!n.collapsed&&r.previousSibling&&r.previousSibling.nodeType===Node.ELEMENT_NODE?(t=r.previousSibling)&&t.textContent.replace(/\u200B/g,"")===s().replace(/\u200B/g,"")&&(r=t,o=!0):!n.collapsed&&0<r.childNodes.length&&r.childNodes[n.endOffset]&&(t=r.childNodes[n.endOffset].previousSibling).nodeType===Node.ELEMENT_NODE&&t&&t.textContent.replace(/\u200B/g,"")===s().replace(/\u200B/g,"")&&(r=t,o=!0),!o&&0<r.childNodes.length&&y(r.childNodes[r.childNodes.length-1]).text()===s()&&["BR","IMG","HR"].indexOf(r.childNodes[r.childNodes.length-1].tagName)<0&&(r=r.childNodes[r.childNodes.length-1])}
vendor: 4,719 bytes, line 679
679for(r.nodeType===Node.TEXT_NODE&&0===n.endOffset&&r.previousSibling&&r.previousSibling.nodeType===Node.ELEMENT_NODE&&(r=r.previousSibling);r.nodeType!==Node.ELEMENT_NODE&&r.parentNode;)r=r.parentNode;for(var i=r;i&&"HTML"!==i.tagName;){if(i===E.el)return r;i=y(i).parent()[0]}}}catch(a){}return E.el},save:N,restore:T,isCollapsed:A,isFull:function d(){if(A())return!1;E.selection.save();var e,t=E.el.querySelectorAll("td, th, img, br, iframe");for(e=0;e<t.length;e++)(t[e].nextSibling||"IMG"===t[e].tagName||"IFRAME"===t[e].tagName)&&(t[e].innerHTML='<span class="fr-mk" style="display: none;"> </span>'.concat(t[e].innerHTML));var n=!1,r=o(E.el);for(r.atStart&&r.atEnd&&(n=!0),t=E.el.querySelectorAll(".fr-mk"),e=0;e<t.length;e++)t[e].parentNode.removeChild(t[e]);return E.selection.restore(),n},inEditor:h,remove:function w(){if(A())return!0;var e;function t(e){for(var t=e.previousSibling;t&&t.nodeType===Node.TEXT_NODE&&0===t.textContent.length;){var n=t;t=t.previousSibling,y(n).remove()}return t}function n(e){for(var t=e.nextSibling;t&&t.nodeType===Node.TEXT_NODE&&0===t.textContent.length;){var n=t;t=t.nextSibling,y(n).remove()}return t}N();var r=E.$el.find('.fr-marker[data-type="true"]');for(e=0;e<r.length;e++)for(var o=r[e];!(t(o)||E.node.isBlock(o.parentNode)||E.$el.is(o.parentNode)||E.node.hasClass(o.parentNode,"fr-inner"));)y(o.parentNode).before(o);var i=E.$el.find('.fr-marker[data-type="false"]');for(e=0;e<i.length;e++){for(var a=i[e];!(n(a)||E.node.isBlock(a.parentNode)||E.$el.is(a.parentNode)||E.node.hasClass(a.parentNode,"fr-inner"));)y(a.parentNode).after(a);a.parentNode&&E.node.isBlock(a.parentNode)&&E.node.isEmpty(a.parentNode)&&!E.$el.is(a.parentNode)&&!E.node.hasClass(a.parentNode,"fr-inner")&&E.opts.keepFormatOnDelete&&y(a.parentNode).after(a)}if(function b(){for(var e=E.$el.find(".fr-marker"),t=0;t<e.length;t++)if(y(e[t]).parentsUntil('.fr-element, [contenteditable="true"]','[contenteditable="false"]').length)return!1;return!0}()){!function L(e,t){var n=E.node.contents(e.get(0));0<=["TD","TH"].indexOf(e.get(0).tagName)&&1===e.find(".fr-marker").length&&(E.node.hasClass(n[0],"fr-marker")||"BR"==n[0].tagName&&E.node.hasClass(n[0].nextElementSibling,"fr-marker"))&&e.attr("data-del-cell",!0);for(var r=0;r<n.length;r++){var o=n[r];E.node.hasClass(o,"fr-marker")?t=(t+1)%2:t?0<y(o).find(".fr-marker").length?t=L(y(o),t):["TD","TH"].indexOf(o.tagName)<0&&!E.node.hasClass(o,"fr-inner")?!E.opts.keepFormatOnDelete||0<E.$el.find("[data-first]").length||E.node.isVoid(o)?y(o).remove():x(o):E.node.hasClass(o,"fr-inner")?0===y(o).find(".fr-inner").length?y(o).html("<br>"):y(o).find(".fr-inner").filter(O).html("<br>"):(y(o).empty(),y(o).attr("data-del-cell",!0)):0<y(o).find(".fr-marker").length&&(t=L(y(o),t))}return t}(E.$el,0);var s=E.$el.find('[data-first="true"]');if(s.length)E.$el.find(".fr-marker").remove(),s.append(V.INVISIBLE_SPACE+V.MARKERS).removeAttr("data-first"),s.attr("data-text")&&s.replaceWith(s.html());else for(E.$el.find("table").filter(function(){return 0<y(this).find("[data-del-cell]").length&&y(this).find("[data-del-cell]").length===y(this).find("td, th").length}).remove(),E.$el.find("[data-del-cell]").removeAttr("data-del-cell"),r=E.$el.find('.fr-marker[data-type="true"]'),e=0;e<r.length;e++){var l=r[e],c=l.nextSibling,d=E.$el.find('.fr-marker[data-type="false"][data-id="'.concat(y(l).data("id"),'"]')).get(0);if(d){if(l&&(!c||c!==d)){var f=E.node.blockParent(l),p=E.node.blockParent(d),h=!1,u=!1;if(f&&0<=["UL","OL"].indexOf(f.tagName)&&(h=!(f=null)),p&&0<=["UL","OL"].indexOf(p.tagName)&&(u=!(p=null)),y(l).after(d),f!==p)if(null!==f||h)if(null!==p||u||0!==y(f).parentsUntil(E.$el,"table").length)f&&p&&0===y(f).parentsUntil(E.$el,"table").length&&0===y(p).parentsUntil(E.$el,"table").length&&!y(f).contains(p)&&!y(p).contains(f)&&(y(f).append(y(p).html()),y(p).remove());else{for(c=f;!c.nextSibling&&c.parentNode!==E.el;)c=c.parentNode;for(c=c.nextSibling;c&&"BR"!==c.tagName;){var g=c.nextSibling;y(f).append(c),c=g}c&&"BR"===c.tagName&&y(c).remove()}else{var C=E.node.deepestParent(l);C?(y(C).after(y(p).html()),y(p).remove()):0===y(p).parentsUntil(E.$el,"table").length&&(y(l).next().after(y(p).html()),y(p).remove())}}}else d=y(l).clone().attr("data-type",!1),y(l).after(d)}}E.$el.find("li:empty").remove(),E.opts.keepFormatOnDelete||E.html.fillEmptyBlocks(),E.html.cleanEmptyTags(!0),E.opts.htmlUntouched||(E.clean.lists(),E.$el.find("li:empty").append("<br>"),E.spaces.normalize());var m=E.$el.find(".fr-marker").last().get(0),v=E.$el.find(".fr-marker").first().get(0);void 0!==m&&void 0!==v&&!m.nextSibling&&v.previousSibling&&"BR"===v.previousSibling.tagName&&E.node.isElement(m.parentNode)&&E.node.isElement(v.parentNode)&&E.$el.a
vendor: 25,663 bytes, line 679
679ppend("<br>"),T()},blocks:function u(e){var t,n,r=[],o=L();if(h()&&o.rangeCount){var i=f();for(t=0;t<i.length;t++){var a=i[t],s=p(a.startContainer,a.startOffset),l=p(a.endContainer,a.endOffset);(n=E.node.blockParent(s))&&r.indexOf(n)<0&&r.push(n),(E.node.isBlock(s)||E.node.hasClass(s,"fr-inner"))&&r.indexOf(s)<0&&r.push(s);for(var c=[],d=s;d!==l&&d!==E.el;)c.indexOf(d)<0&&d.children&&d.children.length?(c.push(d),d=d.children[0]):d.nextSibling?d=d.nextSibling:d.parentNode&&(d=d.parentNode,c.push(d)),E.node.isBlock(d)&&c.indexOf(d)<0&&r.indexOf(d)<0&&(d!==l||0<a.endOffset)&&r.push(d);E.node.isBlock(l)&&r.indexOf(l)<0&&0<a.endOffset&&r.push(l),(n=E.node.blockParent(l))&&r.indexOf(n)<0&&r.push(n)}}for(t=r.length-1;0<t;t--)if(y(r[t-1]).contains(r[t])){if(e&&y(r[t]).find("ul, ol").length)continue;r.splice(t-1,1)}else if(y(r[t]).contains(r[t-1])){if(e&&y(r[t]).find("ul, ol").length)continue;r.splice(t,1)}return r},info:o,setAtEnd:i,setAtStart:r,setBefore:function g(e,t){void 0===t&&(t=!0);for(var n=e.previousSibling;n&&n.nodeType===Node.TEXT_NODE&&0===n.textContent.length;)n=n.previousSibling;return n?(E.node.isBlock(n)?i(n):"BR"===n.tagName?y(n).before(V.MARKERS):y(n).after(V.MARKERS),!0):!!t&&(E.node.isBlock(e)?r(e):y(e).before(V.MARKERS),!0)},setAfter:function C(e,t){void 0===t&&(t=!0);for(var n=e.nextSibling;n&&n.nodeType===Node.TEXT_NODE&&0===n.textContent.length;)n=n.nextSibling;return n?(E.node.isBlock(n)?r(n):y(n).before(V.MARKERS),!0):!!t&&(E.node.isBlock(e)?i(e):y(e).after(V.MARKERS),!0)},rangeElement:p}},Object.assign(V.DEFAULTS,{language:null}),V.LANGUAGE={},V.MODULES.language=function(e){var t;return{_init:function n(){V.LANGUAGE&&(t=V.LANGUAGE[e.opts.language]),t&&t.direction&&(e.opts.direction=t.direction)},translate:function r(e){return t&&t.translation[e]&&t.translation[e].length?t.translation[e]:e}}},Object.assign(V.DEFAULTS,{placeholderText:"Type something"}),V.MODULES.placeholder=function(f){var p=f.$;function e(){f.$placeholder||function d(){f.$placeholder=p(f.doc.createElement("SPAN")).addClass("fr-placeholder"),f.$wp.append(f.$placeholder)}();var e=f.opts.iframe?f.$iframe.prev().outerHeight(!0):f.$el.prev().outerHeight(!0),t=0,n=0,r=0,o=0,i=0,a=0,s=f.node.contents(f.el),l=p(f.selection.element()).css("text-align");if(s.length&&s[0].nodeType===Node.ELEMENT_NODE){var c=p(s[0]);(0<f.$wp.prev().length||0<f.$el.prev().length)&&f.ready&&(t=f.helpers.getPX(c.css("margin-top")),o=f.helpers.getPX(c.css("padding-top")),n=f.helpers.getPX(c.css("margin-left")),r=f.helpers.getPX(c.css("margin-right")),i=f.helpers.getPX(c.css("padding-left")),a=f.helpers.getPX(c.css("padding-right"))),f.$placeholder.css("font-size",c.css("font-size")),f.$placeholder.css("line-height",c.css("line-height"))}else f.$placeholder.css("font-size",f.$el.css("font-size")),f.$placeholder.css("line-height",f.$el.css("line-height"));f.$wp.addClass("show-placeholder"),f.$placeholder.css({marginTop:Math.max(f.helpers.getPX(f.$el.css("margin-top")),t)+(e||0),paddingTop:Math.max(f.helpers.getPX(f.$el.css("padding-top")),o),paddingLeft:Math.max(f.helpers.getPX(f.$el.css("padding-left")),i),marginLeft:Math.max(f.helpers.getPX(f.$el.css("margin-left")),n),paddingRight:Math.max(f.helpers.getPX(f.$el.css("padding-right")),a),marginRight:Math.max(f.helpers.getPX(f.$el.css("margin-right")),r),textAlign:l}).text(f.language.translate(f.opts.placeholderText||f.$oel.attr("placeholder")||"")),f.$placeholder.html(f.$placeholder.text().replace(/\n/g,"<br>"))}function t(){f.$wp.removeClass("show-placeholder")}function n(){if(!f.$wp)return!1;f.core.isEmpty()?e():t()}return{_init:function r(){if(!f.$wp)return!1;f.events.on("init input keydown keyup contentChanged initialized",n)},show:e,hide:t,refresh:n,isVisible:function o(){return!f.$wp||f.node.hasClass(f.$wp.get(0),"show-placeholder")}}},V.UNICODE_NBSP=String.fromCharCode(160),V.VOID_ELEMENTS=["area","base","br","col","embed","hr","img","input","keygen","link","menuitem","meta","param","source","track","wbr"],V.BLOCK_TAGS=["address","article","aside","audio","blockquote","canvas","details","dd","div","dl","dt","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","li","main","nav","noscript","ol","output","p","pre","section","table","tbody","td","tfoot","th","thead","tr","ul","video"],Object.assign(V.DEFAULTS,{htmlAllowedEmptyTags:["textarea","a","iframe","object","video","style","script",".fa",".fr-emoticon",".fr-inner","path","line","hr"],htmlDoNotWrapTags:["script","style"],htmlSimpleAmpersand:!1,htmlIgnoreCSSProperties:[],htmlExecuteScripts:!0}),V.MODULES.html=function(w){var u=w.$;function d(){return w.opts.enter===V.ENTER_P?"p":w.opts.enter===V.ENTER_DIV?"div":w.opts.enter===V.ENTER_BR?null:void 0}function s(e,t){return!(!e||e===w.el)&&(t?-1!=["PRE","SCRIPT","STYLE"].indexOf(e.tagName)||s(e.parentNode,t):-1!==["PRE","SCRIPT","STYLE"].indexOf(e.tagName))}function i(e){var t,n=[],r=[];if(e){var o=w.el.querySelectorAll(".fr-marker");for(t=0;t<o.length;t++){var i=w.node.blockParent(o[t])||o[t];if(i){var a=i.nextSibling,s=i.previousSibling;i&&r.indexOf(i)<0&&w.node.isBlock(i)&&r.push(i),s&&w.node.isBlock(s)&&r.indexOf(s)<0&&r.push(s),a&&w.node.isBlock(a)&&r.indexOf(a)<0&&r.push(a)}}}else r=w.el.querySelectorAll(p());var l=p();for(l+=",".concat(V.VOID_ELEMENTS.join(",")),l+=", .fr-inner",l+=",".concat(w.opts.htmlAllowedEmptyTags.join(":not(.fr-marker),"),":not(.fr-marker)"),t=r.length-1;0<=t;t--)if(!(r[t].textContent&&0<r[t].textContent.replace(/\u200B|\n/g,"").length||0<r[t].querySelectorAll(l).length)){for(var c=w.node.contents(r[t]),d=!1,f=0;f<c.length;f++)if(c[f].nodeType!==Node.COMMENT_NODE&&c[f].textContent&&0<c[f].textContent.replace(/\u200B|\n/g,"").length){d=!0;break}d||n.push(r[t])}return n}function p(){return V.BLOCK_TAGS.join(", ")}function e(e){var t,n,r=u.merge([],V.VOID_ELEMENTS);r=u.merge(r,w.opts.htmlAllowedEmptyTags),r=void 0===e?u.merge(r,V.BLOCK_TAGS):u.merge(r,V.NO_DELETE_TAGS),t=w.el.querySelectorAll("*:empty:not(".concat(r.join("):not("),"):not(.fr-marker):not(template)"));do{n=!1;for(var o=0;o<t.length;o++)0!==t[o].attributes.length&&void 0===t[o].getAttribute("href")||(t[o].parentNode.removeChild(t[o]),n=!0);(t=w.el.querySelectorAll("*:empty:not(".concat(r.join("):not("),"):not(.fr-marker):not(template)"))).length||(t=w.el.querySelectorAll("a[href]:not([name]):empty"))}while(t.length&&n)}function a(e,t){var n=d();if(t&&(n="div"),n){for(var r=w.doc.createDocumentFragment(),o=null,i=!1,a=e.firstChild,s=!1;a;){var l=a.nextSibling;if(a.nodeType===Node.ELEMENT_NODE&&(w.node.isBlock(a)||0<=w.opts.htmlDoNotWrapTags.indexOf(a.tagName.toLowerCase())&&!w.node.hasClass(a,"fr-marker")))o=null,r.appendChild(a.cloneNode(!0));else if(a.nodeType!==Node.ELEMENT_NODE&&a.nodeType!==Node.TEXT_NODE)o=null,r.appendChild(a.cloneNode(!0));else if("BR"===a.tagName)null===o?(o=w.doc.createElement(n),s=!0,t&&(o.setAttribute("class","fr-temp-div"),o.setAttribute("data-empty",!0)),o.appendChild(a.cloneNode(!0)),r.appendChild(o)):!1===i&&(o.appendChild(w.doc.createElement("br")),t&&(o.setAttribute("class","fr-temp-div"),o.setAttribute("data-empty",!0))),o=null;else{var c=a.textContent;if(a.nodeType!==Node.TEXT_NODE||0<c.replace(/\n/g,"").replace(/(^ *)|( *$)/g,"").length||c.replace(/(^ *)|( *$)/g,"").length&&c.indexOf("\n")<0){if("SPAN"===a.tagName&&u(a).hasClass("fr-marker")&&!a.previousSibling&&(a.nextSibling&&"TABLE"==a.nextSibling.tagName||a.nextSibling&&a.nextSibling.nextSibling&&"TABLE"==a.nextSibling.nextSibling.tagName)){r.appendChild(a),a=l;continue}if("SPAN"===a.tagName&&u(a).hasClass("fr-marker")&&a.previousSibling&&a.previousSibling.nodeType===Node.ELEMENT_NODE&&(a.nextSibling&&"TABLE"==a.nextSibling.tagName||a.nextSibling&&a.nextSibling.nextSibling&&"TABLE"==a.nextSibling.nextSibling.tagName)){r.appendChild(a),s=!0,a=l;continue}null===o&&(o=w.doc.createElement(n),s=!0,t&&o.setAttribute("class","fr-temp-div"),r.appendChild(o),i=!1),o.appendChild(a.cloneNode(!0)),i||w.node.hasClass(a,"fr-marker")||a.nodeType===Node.TEXT_NODE&&0===c.replace(/ /g,"").length||(i=!0)}else s=!0}a=l}s&&(e.innerHTML="",e.appendChild(r))}}function l(e,t){for(var n=e.length-1;0<=n;n--)a(e[n],t)}function t(e,t,n,r,o){if(!w.$wp)return!1;void 0===e&&(e=!1),void 0===t&&(t=!1),void 0===n&&(n=!1),void 0===r&&(r=!1),void 0===o&&(o=!1);var i=w.$wp.scrollTop();a(w.el,e),r&&l(w.el.querySelectorAll(".fr-inner"),e),t&&l(w.el.querySelectorAll("td, th"),e),n&&l(w.el.querySelectorAll("blockquote"),e),o&&l(w.el.querySelectorAll("li"),e),i!==w.$wp.scrollTop()&&w.$wp.scrollTop(i)}function n(e){if(void 0===e&&(e=w.el),e&&0<=["SCRIPT","STYLE","PRE"].indexOf(e.tagName))return!1;for(var t=w.doc.createTreeWalker(e,NodeFilter.SHOW_TEXT,w.node.filter(function(e){return null!==e.textContent.match(/([ \n]{2,})|(^[ \n]{1,})|([ \n]{1,}$)/g)}),!1);t.nextNode();){var n=t.currentNode;if(!s(n.parentNode,!0)){var r=w.node.isBlock(n.parentNode)||w.node.isElement(n.parentNode),o=n.textContent.replace(/(?!^)( ){2,}(?!$)/g," ").replace(/\n/g," ").replace(/^[ ]{2,}/g," ").replace(/[ ]{2,}$/g," ");if(r){var i=n.previousSibling,a=n.nextSibling;i&&a&&" "===o?o=w.node.isBlock(i)&&w.node.isBlock(a)?"":" ":(i||(o=o.replace(/^ */,"")),a||(o=o.replace(/ *$/,"")))}n.textContent=o}}}function r(e,t,n){var r=new RegExp(t,"gi").exec(e);return r?r[n]:null}function k(e){var t=e.doctype,n="<!DOCTYPE html>";return t&&(n="<!DOCTYPE ".concat(t.name).concat(t.publicId?' PUBLIC "'.concat(t.publicId,'"'):"").concat(!t.publicId&&t.systemId?" SYSTEM":"").concat(t.systemId?' "'.concat(t.systemId,'"'):"",">")),n}function c(e){var t=e.parentNode;if(t&&(w.node.isBlock(t)||w.node.isElement(t))&&["TD","TH"].indexOf(t.tagName)<0){for(var n=e.previousSibling,r=e.nextSibling;n&&(n.nodeType===Node.TEXT_NODE&&0===n.textContent.replace(/\n|\r/g,"").length||w.node.hasClass(n,"fr-tmp"));)n=n.previousSibling;if(r)return!1;n&&t&&"BR"!==n.tagName&&!w.node.isBlock(n)&&!r&&0<t.textContent.replace(/\u200B/g,"").length&&0<n.textContent.length&&!w.node.hasClass(n,"fr-marker")&&(w.el===t&&!r&&w.opts.enter===V.ENTER_BR&&w.browser.msie||e.parentNode.removeChild(e))}else!t||w.node.isBlock(t)||w.node.isElement(t)||e.previousSibling||e.nextSibling||!w.node.isDeletable(e.parentNode)||c(e.parentNode)}function g(){w.opts.htmlUntouched||(e(),t(),n(),w.spaces.normalize(null,!0),w.html.fillEmptyBlocks(),w.clean.lists(),w.clean.tables(),w.clean.toHTML5(),w.html.cleanBRs()),w.selection.restore(),o(),w.placeholder.refresh()}function o(){w.node.isEmpty(w.el)&&(null!==d()?w.el.querySelector(p())||w.el.querySelector("".concat(w.opts.htmlDoNotWrapTags.join(":not(.fr-marker),"),":not(.fr-marker)"))||(w.core.hasFocus()?(w.$el.html("<".concat(d(),">").concat(V.MARKERS,"<br/></").concat(d(),">")),w.selection.restore()):w.$el.html("<".concat(d(),"><br/></").concat(d(),">"))):w.el.querySelector("*:not(.fr-marker):not(br)")||(w.core.hasFocus()?(w.$el.html("".concat(V.MARKERS,"<br/>")),w.selection.restore()):w.$el.html("<br/>")))}function C(e,t){return r(e,"<".concat(t,"[^>]*?>([\\w\\W]*)</").concat(t,">"),1)}function m(e,t){var n=u("<div ".concat(r(e,"<".concat(t,"([^>]*?)>"),1)||"",">"));return w.node.rawAttributes(n.get(0))}function v(e){return(r(e,"<!DOCTYPE([^>]*?)>",0)||"<!DOCTYPE html>").replace(/\n/g," ").replace(/ {2,}/g," ")}function b(e,t){w.opts.htmlExecuteScripts?e.html(t):e.get(0).innerHTML=t}function $(e){var t;(t=/:not\(([^)]*)\)/g).test(e)&&(e=e.replace(t," $1 "));var n=100*(e.match(/(#[^\s+>~.[:]+)/g)||[]).length+10*(e.match(/(\[[^]]+\])/g)||[]).length+10*(e.match(/(\.[^\s+>~.[:]+)/g)||[]).length+10*(e.match(/(:[\w-]+\([^)]*\))/gi)||[]).length+10*(e.match(/(:[^\s+>~.[:]+)/g)||[]).length+(e.match(/(::[^\s+>~.[:]+|:first-line|:first-letter|:before|:after)/gi)||[]).length;return n+=((e=(e=e.replace(/[*\s+>~]/g," ")).replace(/[#.]/g," ")).match(/([^\s+>~.[:]+)/g)||[]).length}function H(e){if(w.events.trigger("html.processGet",[e]),e&&e.getAttribute&&""===e.getAttribute("class")&&e.removeAttribute("class"),e&&e.getAttribute&&""===e.getAttribute("style")&&e.removeAttribute("style"),e&&e.nodeType===Node.ELEMENT_NODE){var t,n=e.querySelectorAll('[class=""],[style=""]');for(t=0;t<n.length;t++){var r=n[t];""===r.getAttribute("class")&&r.removeAttribute("class"),""===r.getAttribute("style")&&r.removeAttribute("style")}if("BR"===e.tagName)c(e);else{var o=e.querySelectorAll("br");for(t=0;t<o.length;t++)c(o[t])}}}function D(e,t){return e[3]-t[3]}function B(){for(var e=w.el.querySelectorAll("input, textarea"),t=0;t<e.length;t++)"checkbox"!==e[t].type&&"radio"!==e[t].type||(e[t].checked?e[t].setAttribute("checked",e[t].checked):w.$(e[t]).removeAttr("checked")),e[t].getAttribute("value")&&e[t].setAttribute("value",e[t].value)}function f(e){var t=w.doc.createElement("div");return t.innerHTML=e,null!==t.querySelector(p())}function h(e){var t=null;if(void 0===e&&(t=w.selection.element()),w.opts.keepFormatOnDelete)return!1;var n,r,o=t?(t.textContent.match(/\u200B/g)||[]).length-t.querySelectorAll(".fr-marker").length:0;if((w.el.textContent.match(/\u200B/g)||[]).length-w.el.querySelectorAll(".fr-marker").length===o)return!1;do{r=!1,n=w.el.querySelectorAll("*:not(.fr-marker)");for(var i=0;i<n.length;i++){var a=n[i];if(t!==a){var s=a.textContent;0===a.children.length&&1===s.length&&8203===s.charCodeAt(0)&&["TD","STRONG","SPAN","EM","U","S","SUB","SUP"].indexOf(a.tagName)<0&&(u(a).remove(),r=!0)}}}while(r)}function L(){h(),w.placeholder&&setTimeout(w.placeholder.refresh,0)}return{defaultTag:d,isPreformatted:s,emptyBlocks:i,emptyBlockTagsQuery:function E(){return"".concat(V.BLOCK_TAGS.join(":empty, "),":empty")},blockTagsQuery:p,fillEmptyBlocks:function y(e){var t=i(e);w.node.isEmpty(w.el)&&w.opts.enter===V.ENTER_BR&&t.push(w.el);for(var n=0;n<t.length;n++){var r=t[n];"false"===r.getAttribute("contenteditable")||r.querySelector("".concat(w.opts.htmlAllowedEmptyTags.join(":not(.fr-marker),"),":not(.fr-marker)"))||w.node.isVoid(r)||"TABLE"===r.tagName||"TBODY"===r.tagName||"TR"===r.tagName||"UL"===r.tagName||"OL"===r.tagName||r.querySelector("br")||r.appendChild(w.doc.createElement("br"))}if(w.browser.msie&&w.opts.enter===V.ENTER_BR){var o=w.node.contents(w.el);o.length&&o[o.length-1].nodeType===Node.TEXT_NODE&&w.$el.append("<br>")}},cleanEmptyTags:e,cleanWhiteTags:h,cleanBlankSpaces:n,blocks:function S(){return w.$el.get(0).querySelectorAll(p())},getDoctype:k,set:function N(e){var t=w.clean.html((e||"").trim(),[],[],w.opts.fullPage),n=new RegExp("%3A//","g"),r=t.replace(n,"://");if(w.opts.fullPage){var o=C(r,"body")||(0<=r.indexOf("<body")?"":r),i=m(r,"body"),a=C(r,"head")||"<title></title>",s=m(r,"head"),l=u("<div>");l.append(a).contents().each(function(){(this.nodeType===Node.COMMENT_NODE||0<=["BASE","LINK","META","NOSCRIPT","SCRIPT","STYLE","TEMPLATE","TITLE"].indexOf(this.tagName))&&this.parentNode.removeChild(this)});var c=l.html().trim();a=u("<div>").append(a).contents().map(function(){return this.nodeType===Node.COMMENT_NODE?"\x3c!--".concat(this.nodeValue,"--\x3e"):0<=["BASE","LINK","META","NOSCRIPT","SCRIPT","STYLE","TEMPLATE","TITLE"].indexOf(this.tagName)?this.outerHTML:""}).toArray().join("");var d=v(r),f=m(r,"html");b(w.$el,"".concat(c,"\n").concat(o)),w.node.clearAttributes(w.el),w.$el.attr(i),w.$el.addClass("fr-view"),w.$el.attr("spellcheck",w.opts.spellcheck),w.$el.attr("dir",w.opts.direction),b(w.$head,a),w.node.clearAttributes(w.$head.get(0)),w.$head.attr(s),w.node.clearAttributes(w.$html.get(0)),w.$html.attr(f),w.iframe_document.doctype.parentNode.replaceChild(function h(e,t){var n=e.match(/<!DOCTYPE ?([^ ]*) ?([^ ]*) ?"?([^"]*)"? ?"?([^"]*)"?>/i);return n?t.implementation.createDocumentType(n[1],n[3],n[4]):t.implementation.createDocumentType("html")}(d,w.iframe_document),w.iframe_document.doctype)}else b(w.$el,r);var p=w.edit.isDisabled();w.edit.on(),w.core.injectStyle(w.opts.iframeDefaultStyle+w.opts.iframeStyle),g(),w.opts.useClasses||(w.$el.find("[fr-original-class]").each(function(){this.setAttribute("class",this.getAttribute("fr-original-class")),this.removeAttribute("fr-original-class")}),w.$el.find("[fr-original-style]").each(function(){this.setAttribute("style",this.getAttribute("fr-original-style")),this.removeAttribute("fr-original-style")})),p&&w.edit.off(),w.events.trigger("html.set"),w.events.trigger("charCounter.update")},syncInputs:B,get:function _(e,t){if(!w.$wp)return w.$oel.clone().removeClass("fr-view").removeAttr("contenteditable").get(0).outerHTML;var n="";w.events.trigger("html.beforeGet");var r,o,i=[],a={},s=[];if(B(),!w.opts.useClasses&&!t){var l=new RegExp("^".concat(w.opts.htmlIgnoreCSSProperties.join("$|^"),"$"),"gi");for(r=0;r<w.doc.styleSheets.length;r++){var c=void 0,d=0;try{c=w.doc.styleSheets[r].cssRules,w.doc.styleSheets[r].ownerNode&&"STYLE"===w.doc.styleSheets[r].ownerNode.nodeType&&(d=1)}catch(O){}if(c)for(var f=0,p=c.length;f<p;f++)if(c[f].selectorText&&0<c[f].style.cssText.length){var h=c[f].selectorText.replace(/body \s tbody \.fr-view /g,"").replace(/::/g,":"),u=void 0;try{u=w.el.querySelectorAll(h)}catch(O){u=[]}for(o=0;o<u.length;o++){!u[o].getAttribute("fr-original-style")&&u[o].getAttribute("style")?(u[o].setAttribute("fr-original-style",u[o].getAttribute("style")),i.push(u[o])):u[o].getAttribute("fr-original-style")||(u[o].setAttribute("fr-original-style",""),i.push(u[o])),a[u[o]]||(a[u[o]]={});for(var g=1e3*d+$(c[f].selectorText),C=c[f].style.cssText.split(";"),m=0;m<C.length;m++){var v=C[m].trim().split(":")[0];if(v&&!v.match(l)&&(a[u[o]][v]||(a[u[o]][v]=0)<=(u[o].getAttribute("fr-original-style")||"").indexOf("".concat(v,":"))&&(a[u[o]][v]=1e4),g>=a[u[o]][v]&&(a[u[o]][v]=g,C[m].trim().length))){var b=C[m].trim().split(":");b.splice(0,1);var L=b.join(":").trim();-1<L.indexOf("!important")&&(g+=1),s.push([u[o],v.trim(),L,g])}}}}}for(s.sort(D),r=0;r<s.length;r++){var E=s[r];E[0].style[E[1]]=E[2].replace(/!important/,"")}for(r=0;r<i.length;r++)if(i[r].getAttribute("class")&&(i[r].setAttribute("fr-original-class",i[r].getAttribute("class")),i[r].removeAttribute("class")),0<(i[r].getAttribute("fr-original-style")||"").trim().length){var y=i[r].getAttribute("fr-original-style").split(";");for(o=0;o<y.length;o++)if(0<y[o].indexOf(":")){var S=y[o].split(":"),N=S[0];S.splice(0,1),i[r].style[N.trim()]=S.join(":").trim()}}}if(w.node.isEmpty(w.el))w.opts.fullPage&&(n=k(w.iframe_document),n+="<html".concat(w.node.attributes(w.$html.get(0)),">").concat(w.$html.find("head").get(0).outerHTML,"<body></body></html>"));else if(void 0===e&&(e=!1),w.opts.fullPage){n=k(w.iframe_document),w.$el.removeClass("fr-view");var T=w.opts.heightMin,M=w.opts.height,A=w.opts.heightMax;w.opts.heightMin=null,w.opts.height=null,w.opts.heightMax=null,w.size.refresh(),n+="<html".concat(w.node.attributes(w.$html.get(0)),">").concat(w.$html.html(),"</html>"),w.opts.heightMin=T,w.opts.height=M,w.opts.heightMax=A,w.size.refresh(),w.$el.addClass("fr-view")}else n=w.$el.html();if(!w.opts.useClasses&&!t)for(r=0;r<i.length;r++)i[r].getAttribute("fr-original-class")&&(i[r].setAttribute("class",i[r].getAttribute("fr-original-class")),i[r].removeAttribute("fr-original-class")),null!==i[r].getAttribute("fr-original-style")&&void 0!==i[r].getAttribute("fr-original-style")?(0!==i[r].getAttribute("fr-original-style").length?i[r].setAttribute("style",i[r].getAttribute("fr-original-style")):i[r].removeAttribute("style"),i[r].removeAttribute("fr-original-style")):i[r].removeAttribute("style");w.opts.fullPage&&(n=(n=(n=(n=(n=(n=(n=(n=n.replace(/<style data-fr-style="true">(?:[\w\W]*?)<\/style>/g,"")).replace(/<link([^>]*)data-fr-style="true"([^>]*)>/g,"")).replace(/<style(?:[\w\W]*?)class="firebugResetStyles"(?:[\w\W]*?)>(?:[\w\W]*?)<\/style>/g,"")).replace(/<body((?:[\w\W]*?)) spellcheck="true"((?:[\w\W]*?))>((?:[\w\W]*?))<\/body>/g,"<body$1$2>$3</body>")).replace(/<body((?:[\w\W]*?)) contenteditable="(true|false)"((?:[\w\W]*?))>((?:[\w\W]*?))<\/body>/g,"<body$1$3>$4</body>")).replace(/<body((?:[\w\W]*?)) dir="([\w]*)"((?:[\w\W]*?))>((?:[\w\W]*?))<\/body>/g,"<body$1$3>$4</body>")).replace(/<body((?:[\w\W]*?))class="([\w\W]*?)(fr-rtl|fr-ltr)([\w\W]*?)"((?:[\w\W]*?))>((?:[\w\W]*?))<\/body>/g,'<body$1class="$2$4"$5>$6</body>')).replace(/<body((?:[\w\W]*?)) class=""((?:[\w\W]*?))>((?:[\w\W]*?))<\/body>/g,"<body$1$2>$3</body>")),w.opts.htmlSimpleAmpersand&&(n=n.replace(/&/gi,"&")),w.events.trigger("html.afterGet"),e||(n=n.replace(/<span[^>]*? class\s*=\s*["']?fr-marker["']?[^>]+>\u200b<\/span>/gi,"")),n=w.clean.invisibleSpaces(n),n=w.clean.exec(n,H);var x=w.events.chainTrigger("html.get",n);return"string"==typeof x&&(n=x),n=(n=n.replace(/<pre(?:[\w\W]*?)>(?:[\w\W]*?)<\/pre>/g,function(e){return e.replace(/<br>/g,"\n")})).replace(/<meta((?:[\w\W]*?)) data-fr-http-equiv="/g,'<meta$1 http-equiv="')},getSelected:function T(){function e(e,t){for(;t&&(t.nodeType===Node.TEXT_NODE||!w.node.isBlock(t))&&!w.node.isElement(t)&&!w.node.hasClass(t,"fr-inner")&&!(t.nextSibling&&("BR"===t.nextSibling.nodeName||w.node.isBlock(t.nextSibling))||t.previousSibling&&("BR"===t.previousSibling.nodeName||w.node.isBlock(t.previousSibling))||w.node.hasClass(t.parentNode,"fr-view"));)t&&t.nodeType!==Node.TEXT_NODE&&u(e).wrapInner(w.node.openTagString(t)+w.node.closeTagString(t)),t=t.parentNode;t&&e.innerHTML===t.innerHTML?e.innerHTML=t.outerHTML:t&&t.innerText&&-1!=t.innerText.indexOf(e.innerHTML)?e.innerHTML=w.node.openTagString(t)+t.innerHTML+w.node.closeTagString(t):t&&(t.nextSibling&&("BR"===t.nextSibling.nodeName||w.node.isBlock(t.nextSibling))||t.previousSibling&&("BR"===t.previousSibling.nodeName||w.node.isBlock(t.previousSibling)))&&t.wholeText&&(e.innerHTML=t.wholeText)}function t(e){var t,n=null;if(w.win.getSelection){if((t=w.win.getSelection())&&t.rangeCount){if(n=t.getRangeAt(0).commonAncestorContainer,1==e.childNodes.length&&e.childNodes[0].nodeType==Node.TEXT_NODE){var r=n.parentNode.tagName,o=w.doc.createElement(r),i=n.parentNode.getAttribute("style");for(i&&o.setAttribute("style",i),o.append(e.textContent),n=n.parentNode;n&&n.parentNode&&n.parentNode!=w.$el.get(0);){r=n.parentNode.tagName;var a=w.doc.createElement(r);(i=n.parentNode.getAttribute("style"))&&a.setAttribute("style",i),a.append(o),o=a,n=n.parentNode}return e.innerHTML=o.outerHTML,null}n.nodeType!==Node.ELEMENT_NODE&&w.opts.enter!==V.ENTER_BR&&(n=n.parentNode)}}else(t=w.doc.selection)&&"Control"!==t.type&&(n=t.createRange().parentElement());return null!==n&&(0<=u(n).parents().toArray().indexOf(w.el)||n===w.el)?n:null}var n="";if("undefined"!=typeof w.win.getSelection){w.browser.mozilla&&(w.selection.save(),1<w.$el.find('.fr-marker[data-type="false"]').length&&(w.$el.find('.fr-marker[data-type="false"][data-id="0"]').remove(),w.$el.find('.fr-marker[data-type="false"]:last').attr("data-id","0"),w.$el.find(".fr-marker").not('[data-id="0"]').remove()),w.selection.restore());for(var r=w.selection.ranges(),o=0;o<r.length;o++){var i=document.createElement("div");i.appendChild(r[o].cloneContents()),e(i,t(i)),0<u(i).find(".fr-element").length&&(i=w.el),n+=i.innerHTML}}else"undefined"!=typeof w.doc.selection&&"Text"===w.doc.selection.type&&(n=w.doc.selection.createRange().htmlText);return n},insert:function M(e,t,n){var r;if(w.selection.isCollapsed()||w.selection.remove(),r=t?e:w.clean.html(e),0===e.indexOf('<i class="fa ')&&(r="<span> ".concat(r,"</span>")),e.indexOf('class="fr-marker"')<0&&(r=function a(e){var t=w.doc.createElement("div");return t.innerHTML=e,w.selection.setAtEnd(t,!0),t.innerHTML}(r)),w.node.isEmpty(w.el)&&!w.opts.keepFormatOnDelete&&f(r))w.opts.trackChangesEnabled?w.track_changes.pasteInEmptyEdior(r):w.el.innerHTML=r;else{(function s(){var e=w.selection.ranges(0).commonAncestorContainer;return e!==w.el&&!w.$el.contains(e)})()&&w.selection.restore();var o=w.markers.insert();if(o)if(w.opts.trackChangesEnabled)w.track_changes.pasteInEdior(r);else{w.node.isLastSibling(o)&&u(o).parent().hasClass("fr-deletable")&&u(o).insertAfter(u(o).parent());var i=w.node.blockParent(o);if((f(r)||n)&&(w.node.deepestParent(o)||i&&"LI"===i.tagName)){if(i&&"LI"===i.tagName&&(r=function l(e){if(!w.html.defaultTag())return e;var t=w.doc.createElement("div");t.innerHTML=e;for(var n=t.querySelectorAll(":scope > ".concat(w.html.defaultTag())),r=n.length-1;0<=r;r--){var o=n[r];w.node.isBlock(o.previousSibling)||(o.previousSibling&&!w.node.isEmpty(o)&&u("<br>").insertAfter(o.previousSibling),o.outerHTML=o.innerHTML)}return t.innerHTML}(r)),!(o=w.markers.split()))return!1;o.outerHTML=r}else o.outerHTML=r}else w.el.innerHTML+=r}g(),w.keys.positionCaret(),w.events.trigger("html.inserted")},wrap:t,unwrap:function A(){w.$el.find("div.fr-temp-div").each(function(){this.previousSibling&&this.previousSibling.nodeType===Node.TEXT_NODE&&u(this).before("<br>"),u(this).attr("data-empty")||!this.nextSibling||w.node.isBlock(this.nextSibling)&&!u(this.nextSibling).hasClass("fr-temp-div")?u(this).replaceWith(u(this).html()):u(this).replaceWith("".concat(u(this).html(),"<br>"))}),w.$el.find(".fr-temp-div").removeClass("fr-temp-div").filter(function(){return""===u(this).attr("class")}).removeAttr("class")},escapeEntities:function x(e){return e.replace(/</gi,"<").replace(/>/gi,">").replace(/"/gi,""").replace(/'/gi,"'")},checkIfEmpty:o,extractNode:C,extractNodeAttrs:m,extractDoctype:v,cleanBRs:function O(){for(var e=w.el.getElementsByTagName("br"),t=0;t<e.length;t++)c(e[t])},_init:function R(){w.events.$on(w.$el,"mousemove","span.fr-word-select",function(e){var t=window.getSelection();t=window.getSelection();var n=document.createRange();n.selectNodeContents(e.target),t.removeAllRanges(),t.addRange(n)}),w.$wp&&(w.events.on("mouseup",L),w.events.on("keydown",L),w.events.on("contentChanged",o))},_setHtml:b}}
679,V.ENTER_P=0,V.ENTER_DIV=1,V.ENTER_BR=2,V.KEYCODE={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,ARROW_LEFT:37,ARROW_UP:38,ARROW_RIGHT:39,ARROW_DOWN:40,DELETE:46,ZERO:48,ONE:49,TWO:50,THREE:51,FOUR:52,FIVE:53,SIX:54,SEVEN:55,EIGHT:56,NINE:57,FF_SEMICOLON:59,FF_EQUALS:61,QUESTION_MARK:63,A:65,B:66,C:67,D:68,E:69,F:70,G:71,H:72,I:73,J:74,K:75,L:76,M:77,N:78,O:79,P:80,Q:81,R:82,S:83,T:84,U:85,V:86,W:87,X:88,Y:89,Z:90,META:91,NUM_ZERO:96,NUM_ONE:97,NUM_TWO:98,NUM_THREE:99,NUM_FOUR:100,NUM_FIVE:101,NUM_SIX:102,NUM_SEVEN:103,NUM_EIGHT:104,NUM_NINE:105,NUM_MULTIPLY:106,NUM_PLUS:107,NUM_MINUS:109,NUM_PERIOD:110,NUM_DIVISION:111,F1:112,F2:113,F3:114,F4:115,F5:116,F6:117,F7:118,F8:119,F9:120,F10:121,F11:122,F12:123,FF_HYPHEN:173,SEMICOLON:186,DASH:189,EQUALS:187,COMMA:188,HYPHEN:189,PERIOD:190,SLASH:191,APOSTROPHE:192,TILDE:192,SINGLE_QUOTE:222,OPEN_SQUARE_BRACKET:219,BACKSLASH:220,CLOSE_SQUARE_BRACKET:221,IME:229},Object.assign(V.DEFAULTS,{enter:V.ENTER_P,multiLine:!0,tabSpaces:0}),V.MODULES.keys=function(d){var f,n,r,i=d.$,p=!1;function h(e){if(d.selection.isCollapsed())if(["INPUT","BUTTON","TEXTAREA"].indexOf(e.target&&e.target.tagName)<0&&d.cursor.backspace(),d.helpers.isIOS()){var t=d.selection.ranges(0);
vendor: 4,169 bytes, line 679
679t.deleteContents(),t.insertNode(document.createTextNode("\u200b")),d.selection.get().modify("move","forward","character")}else["INPUT","BUTTON","TEXTAREA"].indexOf(e.target&&e.target.tagName)<0&&e.preventDefault(),e.stopPropagation();else e.preventDefault(),e.stopPropagation(),d.selection.remove();d.placeholder.refresh()}function u(e){["INPUT","BUTTON","TEXTAREA"].indexOf(e.target&&e.target.tagName)<0&&e.preventDefault(),e.stopPropagation(),""!==d.selection.text()||d.selection.element().hasAttribute("contenteditable")&&"false"===d.selection.element().getAttribute("contenteditable")||!d.selection.isCollapsed()&&"IMG"==d.selection.element().tagName?d.selection.remove():d.cursor.del(),d.placeholder.refresh()}function e(){if(d.browser.mozilla&&d.selection.isCollapsed()&&!p){var e=d.selection.ranges(0),t=e.startContainer,n=e.startOffset;t&&t.nodeType===Node.TEXT_NODE&&n<=t.textContent.length&&0<n&&32===t.textContent.charCodeAt(n-1)&&(d.selection.save(),d.spaces.normalize(),d.selection.restore())}}function t(){d.selection.isFull()&&setTimeout(function(){var e=d.html.defaultTag();e?d.$el.html("<".concat(e,">").concat(V.MARKERS,"<br/></").concat(e,">")):d.$el.html("".concat(V.MARKERS,"<br/>")),d.selection.restore(),d.placeholder.refresh(),d.button.bulkRefresh(),d.undo.saveStep()},0)}function o(){p=!1}function a(){p=!1}function g(){var e=d.html.defaultTag();e?d.$el.html("<".concat(e,">").concat(V.MARKERS,"<br/></").concat(e,">")):d.$el.html("".concat(V.MARKERS,"<br/>")),d.selection.restore()}function C(e,t){var n=(e&&e.parentElement).parentElement;if(e.parentElement&&(-1<e.innerHTML.indexOf("<span")||-1<e.parentElement.innerHTML.indexOf("<span")||n&&-1<e.parentElement.parentElement.innerHTML.indexOf("<span"))&&(e.classList.contains("fr-img-space-wrap")||e.parentElement.classList.contains("fr-img-space-wrap")||n&&e.parentElement.parentElement.classList.contains("fr-img-space-wrap"))){if(i(e.parentElement).is("p")){var r=e.parentElement.innerHTML;return(r=r.replace(/<br>/g,"")).length<1?e.parentElement.insertAdjacentHTML("afterbegin"," "):" "!=r&&" "!=r&&"Backspace"==t.key?h(t):" "!=r&&" "!=r&&"Delete"==t.key&&u(t),!0}if(i(e).is("p")){var o=e.innerHTML.replace(/<br>/g,"");return o.length<1?e.insertAdjacentHTML("afterbegin"," "):" "!=o&&" "!=o&&"Backspace"==t.key?h(t):" "!=o&&" "!=o&&"Delete"==t.key&&u(t),!0}}return!1}function s(e){var t=d.selection.element();if(t&&0<=["INPUT","TEXTAREA"].indexOf(t.tagName))return!0;if(e&&v(e.which))return!0;d.events.disableBlur();var n=e.which;if(16===n)return!0;if((f=n)===V.KEYCODE.IME)return p=!0;if(p=!1,m(e))return!0;var r=b(n)&&!m(e)&&!e.altKey,o=n===V.KEYCODE.BACKSPACE||n===V.KEYCODE.DELETE;if((d.selection.isFull()&&!d.opts.keepFormatOnDelete&&!d.placeholder.isVisible()||o&&d.placeholder.isVisible()&&d.opts.keepFormatOnDelete)&&(r||o)&&(g(),!b(n)))return e.preventDefault(),!0;if(n===V.KEYCODE.ENTER)!d.helpers.isIOS()&&e.shiftKey||t.classList.contains("fr-inner")||t.parentElement.classList.contains("fr-inner")?function i(e){e.preventDefault(),e.stopPropagation(),d.opts.multiLine&&(d.selection.isCollapsed()||d.selection.remove(),d.cursor.enter(!0))}(e):function a(e){d.opts.multiLine?(d.helpers.isIOS()||(e.preventDefault(),e.stopPropagation()),d.selection.isCollapsed()||d.selection.remove(),d.cursor.enter()):(e.preventDefault(),e.stopPropagation())}(e);else if(n===V.KEYCODE.BACKSPACE&&(e.metaKey||e.ctrlKey))!function s(){setTimeout(function(){d.events.disableBlur(),d.events.focus()},0)}();else if(n!==V.KEYCODE.BACKSPACE||m(e)||e.altKey)if(n!==V.KEYCODE.DELETE||m(e)||e.altKey||e.shiftKey)n===V.KEYCODE.SPACE?function l(e){var t=d.selection.element();if(!d.helpers.isMobile()&&t&&"A"===t.tagName){e.preventDefault(),e.stopPropagation(),d.selection.isCollapsed()||d.selection.remove();var n=d.markers.insert();if(n){var r=n.previousSibling;!n.nextSibling&&n.parentNode&&"A"===n.parentNode.tagName?(n.parentNode.insertAdjacentHTML("afterend"," ".concat(V.MARKERS)),n.parentNode.removeChild(n)):(r&&r.nodeType===Node.TEXT_NODE&&1===r.textContent.length&&160===r.textContent.charCodeAt(0)?r.textContent+=" ":n.insertAdjacentHTML("beforebegin","
vendor: 5,768 bytes, line 679
679"),n.outerHTML=V.MARKERS),d.selection.restore()}}}(e):n===V.KEYCODE.TAB?function c(e){if(0<d.opts.tabSpaces)if(d.selection.isCollapsed()){d.undo.saveStep(),e.preventDefault(),e.stopPropagation();for(var t="",n=0;n<d.opts.tabSpaces;n++)t+=" ";d.html.insert(t),d.placeholder.refresh(),d.undo.saveStep()}else e.preventDefault(),e.stopPropagation(),e.shiftKey?d.commands.outdent():d.commands.indent()}(e):m(e)||!b(e.which)||d.selection.isCollapsed()||e.ctrlKey||e.altKey||d.selection.remove();else{if(C(t,e))return e.preventDefault(),void e.stopPropagation();d.placeholder.isVisible()?(d.opts.keepFormatOnDelete||g(),e.preventDefault(),e.stopPropagation()):u(e)}else{if(C(t,e))return e.preventDefault(),void e.stopPropagation();d.placeholder.isVisible()?(d.opts.keepFormatOnDelete||g(),e.preventDefault(),e.stopPropagation()):h(e)}d.events.enableBlur()}function l(){if(!d.$wp)return!0;var e;if(d.opts.height||d.opts.heightMax){e=d.position.getBoundingRect().top,(d.helpers.isIOS()||d.helpers.isAndroid())&&(e-=d.helpers.scrollTop()),d.opts.iframe&&(e+=d.$iframe.offset().top);var t=d.selection.blocks(),n=null;t&&0<t.length&&t[0].offsetTop&&(n=t[0].getBoundingClientRect().top),!d.opts.iframe&&e>d.$wp.offset().top-d.helpers.scrollTop()+d.$wp.height()-20?d.$wp.scrollTop(e+d.$wp.scrollTop()-(d.$wp.height()+d.$wp.offset().top)+d.helpers.scrollTop()+20):d.opts.iframe&&e>d.$wp.height()&&e&&d.$wp.scrollTop(n-d.$wp.height()+80)}else e=d.position.getBoundingRect().top,d.opts.toolbarBottom&&(e+=d.opts.toolbarStickyOffset),(d.helpers.isIOS()||d.helpers.isAndroid())&&(e-=d.helpers.scrollTop()),d.opts.iframe&&(e+=d.$iframe.offset().top,e-=d.helpers.scrollTop()),(e+=d.opts.toolbarStickyOffset)>d.o_win.innerHeight-20&&i(d.o_win).scrollTop(e+d.helpers.scrollTop()-d.o_win.innerHeight+20),e=d.position.getBoundingRect().top,d.opts.toolbarBottom||(e-=d.opts.toolbarStickyOffset),(d.helpers.isIOS()||d.helpers.isAndroid())&&(e-=d.helpers.scrollTop()),d.opts.iframe&&(e+=d.$iframe.offset().top,e-=d.helpers.scrollTop()),e<100&&i(d.o_win).scrollTop(e+d.helpers.scrollTop()-100)}function c(e){var t=d.selection.element();if(t&&0<=["INPUT","TEXTAREA"].indexOf(t.tagName))return!0;if(e&&0===e.which&&f&&(e.which=f),d.helpers.isAndroid()&&d.browser.mozilla)return!0;if(p)return!1;if(e&&d.helpers.isIOS()&&e.which===V.KEYCODE.ENTER&&d.doc.execCommand("undo"),!d.selection.isCollapsed())return!0;if(e&&(e.which===V.KEYCODE.META||e.which===V.KEYCODE.CTRL))return!0;if(e&&v(e.which))return!0;if(e&&!d.helpers.isIOS()&&(e.which===V.KEYCODE.ENTER||e.which===V.KEYCODE.BACKSPACE||37<=e.which&&e.which<=40&&!d.browser.msie))try{l()}catch(o){}var n=d.selection.element();if(function i(e){if(!e)return!1;var t=e.innerHTML;return!!((t=t.replace(/<span[^>]*? class\s*=\s*["']?fr-marker["']?[^>]+>\u200b<\/span>/gi,""))&&/\u200B/.test(t)&&0<t.replace(/\u200B/gi,"").length)}(n)&&!d.node.hasClass(n,"fr-marker")&&"IFRAME"!==n.tagName&&function a(e){return!d.helpers.isIOS()||0===((e.textContent||"").match(/[\u3041-\u3096\u30A0-\u30FF\u4E00-\u9FFF\u3130-\u318F\uAC00-\uD7AF]/gi)||[]).length}(n)){d.selection.save();var r=d.$el.find(".fr-marker")[1];d.opts.enter===V.ENTER_BR&&n===d.$el.get(0)&&8===e.which&&null==r.nextSibling||function s(e){var t=e;-1<["STRONG","U","EM"].indexOf(e.nodeName)&&e.parentNode&&(t=e.parentNode);for(var n=d.doc.createTreeWalker(t,NodeFilter.SHOW_TEXT,d.node.filter(function(e){return/\u200B/gi.test(e.textContent)}),!1);n.nextNode();){var r=n.currentNode;r.textContent=r.textContent.replace(/\u200B/gi,"")}}(n),d.selection.restore()}}function m(e){if(-1!==navigator.userAgent.indexOf("Mac OS X")){if(e.metaKey&&!e.altKey)return!0}else if(e.ctrlKey&&!e.altKey)return!0;return!1}function v(e){if(e>=V.KEYCODE.ARROW_LEFT&&e<=V.KEYCODE.ARROW_DOWN)return!0}function b(e){if(e>=V.KEYCODE.ZERO&&e<=V.KEYCODE.NINE)return!0;if(e>=V.KEYCODE.NUM_ZERO&&e<=V.KEYCODE.NUM_MULTIPLY)return!0;if(e>=V.KEYCODE.A&&e<=V.KEYCODE.Z)return!0;if(d.browser.webkit&&0===e)return!0;switch(e){case V.KEYCODE.SPACE:case V.KEYCODE.QUESTION_MARK:case V.KEYCODE.NUM_PLUS:case V.KEYCODE.NUM_MINUS:case V.KEYCODE.NUM_PERIOD:case V.KEYCODE.NUM_DIVISION:case V.KEYCODE.SEMICOLON:case V.KEYCODE.FF_SEMICOLON:case V.KEYCODE.DASH:case V.KEYCODE.EQUALS:case V.KEYCODE.FF_EQUALS:case V.KEYCODE.COMMA:case V.KEYCODE.PERIOD:case V.KEYCODE.SLASH:case V.KEYCODE.APOSTROPHE:case V.KEYCODE.SINGLE_QUOTE:case V.KEYCODE.OPEN_SQUARE_BRACKET:case V.KEYCODE.BACKSLASH:case V.KEYCODE.CLOSE_SQUARE_BRACKET:return!0;default:return!1}}function L(e){var t=e.which;if(m(e)||37<=t&&t<=40||!b(t)&&t!==V.KEYCODE.DELETE&&t!==V.KEYCODE.BACKSPACE&&t!==V.KEYCODE.ENTER&&t!==V.KEYCODE.IME)return!0;n||(r=d.snapshot.get(),d.undo.canDo()||d.undo.saveStep()),clearTimeout(n),n=setTimeout(function(){n=null,d.undo.saveStep()},Math.max(250,d.opts.typingTimer))}function E(e){var t=e.which;if(m(e)||37<=t&&t<=40)return!0;r&&n?(d.undo.saveStep(r),r=null):void 0!==t&&0!==t||r||n||d.undo.saveStep()}function y(e){if(e&&"BR"===e.tagName)return!1;try{return 0===(e.textContent||"").length&&e.querySelector&&!e.querySelector(":scope > br")||e.childNodes&&1===e.childNodes.length&&e.childNodes[0].getAttribute&&("false"===e.childNodes[0].getAttribute("contenteditable")||d.node.hasClass(e.childNodes[0],"fr-img-caption"))}catch(t){return!1}}function S(e){var t=d.el.childNodes,n=d.html.defaultTag(),r=d.node.blockParent(d.selection.blocks()[0]);return r&&"TR"==r.tagName&&r.getAttribute("contenteditable")==undefined&&(r=r.closest("table")),!d.node.isEditable(e.target)||r&&"false"===r.getAttribute("contenteditable")?d.toolbar.disable():d.toolbar.enable(),!(!e.target||e.target===d.el)||(0===t.length||void(t[0].offsetHeight+t[0].offsetTop<=e.offsetY?y(t[t.length-1])&&(n?d.$el.append("<".concat(n,">").concat(V.MARKERS,"<br></").concat(n,">
vendor: 4,128 bytes, line 679
679")):d.$el.append("".concat(V.MARKERS,"<br>")),d.selection.restore(),l()):e.offsetY<=10&&y(t[0])&&(n?d.$el.prepend("<".concat(n,">").concat(V.MARKERS,"<br></").concat(n,">")):d.$el.prepend("".concat(V.MARKERS,"<br>")),d.selection.restore(),l())))}function N(){n&&clearTimeout(n)}return{_init:function T(){d.events.on("keydown",L),d.events.on("input",e),d.events.on("mousedown",a),d.events.on("keyup input",E),d.events.on("keypress",o),d.events.on("keydown",s),d.events.on("keyup",c),d.events.on("destroy",N),d.events.on("html.inserted",c),d.events.on("cut",t),d.opts.multiLine&&d.events.on("click",S),d.events.on("initialized",function(){d.el.addEventListener("compositionstart",function(){if(d.selection.isCollapsed()){var e=d.selection.ranges(0),t=e.startContainer,n=e.startOffset;if(t&&t.nodeType===Node.TEXT_NODE&&n<=t.textContent.length&&0<n&&8203===t.textContent.charCodeAt(n-1)){d.selection.save();var r=d.$el.find(".fr-marker");i(r.get(0).previousSibling).before(V.HAIR_SPACE),r.get(0).previousSibling.textContent=r.get(0).previousSibling.textContent.replace(/\u200B/gi,""),d.selection.restore()}}}),d.el.addEventListener("compositionend",function(){if(d.selection.isCollapsed()){var e=d.selection.ranges(0),t=e.startContainer,n=e.startOffset;if(t&&t.nodeType===Node.TEXT_NODE&&n<=t.textContent.length&&0<n&&8202===t.textContent.charCodeAt(0)){d.selection.save();var r=d.$el.find(".fr-marker");r.get(0).previousSibling.textContent=r.get(0).previousSibling.textContent.replace(/\u200A/gi,""),d.selection.restore()}}})})},ctrlKey:m,isCharacter:b,isArrow:v,forceUndo:function M(){n&&(clearTimeout(n),d.undo.saveStep(),r=null)},isIME:function A(){return p},isBrowserAction:function x(e){var t=e.which;return m(e)||t===V.KEYCODE.F5},positionCaret:l}},Object.assign(V.DEFAULTS,{pastePlain:!1,pasteDeniedTags:["colgroup","col","meta"],pasteDeniedAttrs:["class","id"],pasteAllowedStyleProps:[".*"],pasteAllowLocalImages:!1}),V.MODULES.paste=function(A){var a,s,x,O,l,w,k=A.$;function n(e,t){try{A.win.localStorage.setItem("fr-copied-html",e),A.win.localStorage.setItem("fr-copied-text",t)}catch(n){}}function e(e){var t=A.html.getSelected();n(t,k(A.doc.createElement("div")).html(t).text()),"cut"===e.type&&(A.undo.saveStep(),setTimeout(function(){A.selection.save(),A.html.wrap(),A.selection.restore(),A.events.focus(),A.undo.saveStep()},0))}var r=!1;function t(e){if("INPUT"===e.target.nodeName&&"text"===e.target.type)return!0;if(A.edit.isDisabled())return!1;if(c(e.target))return!1;if(r)return!1;if((e.originalEvent&&(e=e.originalEvent),e&&e.clipboardData&&e.clipboardData.getData)&&((e.clipboardData||window.clipboardData).getData("text/html")||"").match('content="Microsoft OneNote'))return!1;if(!1===A.events.trigger("paste.before",[e]))return e.preventDefault(),!1;if(e&&e.clipboardData&&e.clipboardData.getData){var t="";if(O=e.clipboardData.types,A.helpers.isArray(O))for(var n=0;n<O.length;n++)t+="".concat(O[n],";");else t=O;if(a="",/text\/rtf/.test(t)&&(s=e.clipboardData.getData("text/rtf")),/text\/html/.test(t)?(a=e.clipboardData.getData("text/html"),A.browser.mozilla&&("<p></p>"===a||""===a||/<!--StartFragment-->([ ])<!--EndFragment-->/.test(a)||/<!--StartFragment-->([<p></p>]*)<!--EndFragment-->/.test(a))&&(a=A.win.localStorage.getItem("fr-copied-html"))):/text\/rtf/.test(t)&&A.browser.safari?a=s:/public.rtf/.test(t)&&A.browser.safari&&(a=e.clipboardData.getData("text/rtf")),x=e.clipboardData.getData("text"),""!==a)return f(),e.preventDefault&&(e.stopPropagation(),e.preventDefault()),!1;a=null}return function i(){if(A.selection.save(),A.events.disableBlur(),a=null,l){l.html("");var e=d(A.selection.get().anchorNode)+A.$wp.offset().top;l.css("top",e),A.browser.edge&&A.opts.iframe&&A.$el.append(l)}else{var t=document.getElementsByTagName("BODY")[0],n=window.getComputedStyle(t).transform;if("none"!==n){var r=d(A.selection.get().anchorNode)+A.$wp.offset().top;l=k('<div contenteditable="true" style="position: fixed; top: '+r+'px; left: -9999px; height: 100%; width: 0; word-break: break-all; overflow:hidden; z-index: 2147483647; line-height: 140%; -moz-user-select: text; -webkit-user-select: text;
679 -ms-user-select: text; user-select: text;" tabIndex="-1"></div>')}else l=k('<div contenteditable="true" style="position: fixed; top: 0; left: -9999px; height: 100%; width: 0; word-break: break-all; overflow:hidden; z-index: 2147483647; line-height: 140%; -moz-user-select: text; -webkit-user-select: text; -ms-user-select: text; user-select: text;" tabIndex="-1"></div>');A.browser.webkit||A.browser.mozilla?("none"===n&&l.css("top",A.$sc.scrollTop()),A.$el.after(l)):A.browser.edge&&A.opts.iframe?A.$el.append(l):A.$box.after(l),A.events.on("destroy",function(){l.remove()})}var o;A.helpers.isIOS()&&A.$sc&&(o=A.$sc.scrollTop());A.opts.iframe&&A.$el.attr("contenteditable","false");l.focus(),A.helpers.isIOS()&&A.$sc&&A.$sc.scrollTop(o);A.win.setTimeout(f,1)}(),!1}function c(e){return e&&"false"===e.contentEditable}function o(e){if(e.originalEvent&&(e=e.originalEvent),c(e.target))return!1;if(e&&e.dataTransfer&&e.dataTransfer.getData){var t="";if(O=e.dataTransfer.types,A.helpers.isArray(O))for(var n=0;n<O.length;n++)t+="".concat(O[n],";");else t=O;if(a="",/text\/rtf/.test(t)&&(s=e.dataTransfer.getData("text/rtf")),/text\/html/.test(t)?a=e.dataTransfer.getData("text/html"):/text\/rtf/.test(t)&&A.browser.safari?a=s:/text\/plain/.test(t)&&!this.browser.mozilla&&(a=A.html.escapeEntities(e.dataTransfer.getData("text/plain")).replace(/\n/g,"<br>")),""!==a){A.keys.forceUndo(),w=A.snapshot.get(),A.selection.save(),A.$el.find(".fr-marker").removeClass("fr-marker").addClass("fr-marker-helper");var r=A.markers.insertAtPoint(e);if(A.$el.find(".fr-marker").removeClass("fr-marker").addClass("fr-marker-placeholder"),A.$el.find(".fr-marker-helper").addClass("fr-marker").removeClass("fr-marker-helper"),A.selection.restore(),A.selection.remove(),A.$el.find(".fr-marker-placeholder").addClass("fr-marker").removeClass("fr-marker-placeholder"),!1!==r){var o=A.el.querySelector(".fr-marker");return k(o).replaceWith(V.MARKERS),A.selection.restore(),f(),e.preventDefault&&(e.stopPropagation(),e.preventDefault()),!1}}else a=null}}function d(e){return e.nodeType===Node.TEXT_NODE?e.parentNode.offsetTop:e.offsetTop}function f(){A.opts.iframe&&A.$el.attr("contenteditable","true"),A.browser.edge&&A.opts.iframe&&A.$box.after(l),w||(A.keys.forceUndo(),w=A.snapshot.get()),a||(a=l.get(0).innerHTML,x=l.text(),A.$el[0].setAttribute("plainpaste",!0),A.selection.restore(),A.events.enableBlur());var e=a.match(/(class="?Mso|class='?Mso|class="?Xl|class='?Xl|class=Xl|style="[^"]*\bmso-|style='[^']*\bmso-|w:WordDocument|LibreOffice)/gi),t=A.events.chainTrigger("paste.beforeCleanup",a);if(t&&"string"==typeof t){a=t;var n=(new DOMParser).parseFromString(t,"text/html");x=n.body.innerText}(!e||e&&!1!==A.events.trigger("paste.wordPaste",[a]))&&i(a,e)}function $(e){for(var t="",n=0;n++<e;)t+=" ";return t}function i(e,t,n){var r,o=null,i=null;if(0<=e.toLowerCase().indexOf("<body")){var a="";0<=e.indexOf("<style")&&(a=e.replace(/[.\s\S\w\W<>]*(<style[^>]*>[\s]*[.\s\S\w\W<>]*[\s]*<\/style>)[.\s\S\w\W<>]*/gi,"$1")),e=(e=(e=a+e.replace(/[.\s\S\w\W<>]*<body[^>]*>[\s]*([.\s\S\w\W<>]*)[\s]*<\/body>[.\s\S\w\W<>]*/gi,"$1")).replace(/<pre(?:[\w\W]*?)>(?:[\w\W]*?)<\/pre>/g,function(e){return e.replace(/\n/g,"<br />")})).replace(/ \n/g," ").replace(/\n /g," ").replace(/([^>])\n([^<])/g,"$1 $2")}var s=!1;0<=e.indexOf('id="docs-internal-guid')&&(e=e.replace(/^[\w\W\s\S]* id="docs-internal-guid[^>]*>([\w\W\s\S]*)<\/b>[\w\W\s\S]*$/g,"$1"),s=!0),(0<=e.indexOf('content="Sheets"')||0<=e.indexOf("google-sheets-html-origin"))&&(e=e.replace(/width:0px;/g,""));var l=!1;if(!t)if((l=function y(){var e=null;try{e=A.win.localStorage.getItem("fr-copied-text")}catch(t){}return!(!e||!x||O&&-1===O.indexOf("text/html")||x.replace(/\u00A0/gi," ").replace(/\r|\n/gi,"")!==e.replace(/\u00A0/gi," ").replace(/\r|\n/gi,"")&&x.replace(/\s/g,"")!==e.replace(/\s/g,""))}())&&(e=A.win.localStorage.getItem("fr-copied-html")),l)e=A.clean.html(e,A.opts.pasteDeniedTags,A.opts.pasteDeniedAttrs);else{var c=A.opts.htmlAllowedStyleProps;A.opts.htmlAllowedStyleProps=A.opts.pasteAllowedStyleProps,A.opts.htmlAllowComments=!1,e=(e=(e=e.replace(/<span class="Apple-tab-span">\s*<\/span>/g,$(A.opts.tabSpaces||4))).replace(/<span class="Apple-tab-span" style="white-space:pre">(\t*)<\/span>/g,function(e,t){return $(t.length*(A.opts.tabSpaces||4))})).replace(/\t/g,$(A.opts.tabSpaces||4)),e=A.clean.html(e,A.opts.pasteDeniedTags,A.opts.pasteDeniedAttrs),A.opts.htmlAllowedStyleProps=c,A.o
679pts.htmlAllowComments=!0,A.html.defaultTag()&&"div"===A.html.defaultTag()||(e=H(e)),e=(e=e.replace(/\r/g,"")).replace(/^ */g,"").replace(/ *$/g,"")}!t||A.wordPaste&&n||(0===(e=e.replace(/^\n*/g,"").replace(/^ /g,"")).indexOf("<colgroup>")&&(e="<table>".concat(e,"</table>")),e=H(e=function S(e){var t;e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=(e=e.replace(/<p(.*?)class="?'?MsoListParagraph"?'? ([\s\S]*?)>([\s\S]*?)<\/p>/gi,"<ul><li>$3</li></ul>")).replace(/<p(.*?)class="?'?NumberedText"?'? ([\s\S]*?)>([\s\S]*?)<\/p>/gi,"<ol><li>$3</li></ol>")).replace(/<p(.*?)class="?'?MsoListParagraphCxSpFirst"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi,"<ul><li$3>$5</li>")).replace(/<p(.*?)class="?'?NumberedTextCxSpFirst"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi,"<ol><li$3>$5</li>")).replace(/<p(.*?)class="?'?MsoListParagraphCxSpMiddle"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi,"<li$3>$5</li>")).replace(/<p(.*?)class="?'?NumberedTextCxSpMiddle"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi,"<li$3>$5</li>")).replace(/<p(.*?)class="?'?MsoListBullet"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi,"<li$3>$5</li>")).replace(/<p(.*?)class="?'?MsoListParagraphCxSpLast"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi,"<li$3>$5</li></ul>")).replace(/<p(.*?)class="?'?NumberedTextCxSpLast"?'?([\s\S]*?)(level\d)?([\s\S]*?)>([\s\S]*?)<\/p>/gi,"<li$3>$5</li></ol>")).replace(/<span([^<]*?)style="?'?mso-list:Ignore"?'?([\s\S]*?)>([\s\S]*?)<span/gi,"<span><span")).replace(/<!--\[if !supportLists\]-->([\s\S]*?)<!--\[endif\]-->/gi,"")).replace(/<!\[if !supportLists\]>([\s\S]*?)<!\[endif\]>/gi,"")).replace(/(\n|\r| class=(")?Mso[a-zA-Z0-9]+(")?)/gi," ")).replace(/<!--[\s\S]*?-->/gi,"")).replace(/<(\/)*(meta|link|span|\\?xml:|st1:|o:|font)(.*?)>
vendor: 5,947 bytes, line 679
679/gi,"");var n,r=["style","script","applet","embed","noframes","noscript"];for(t=0;t<r.length;t++){var o=new RegExp("<".concat(r[t],".*?").concat(r[t],"(.*?)>"),"gi");e=e.replace(o,"")}for(e=(e=(e=e.replace(/ /gi," ")).replace(/<td([^>]*)><\/td>/g,"<td$1><br></td>")).replace(/<th([^>]*)><\/th>/g,"<th$1><br></th>");(e=(n=e).replace(/<[^/>][^>]*><\/[^>]+>/gi,""))!==n;);e=(e=e.replace(/<lilevel([^1])([^>]*)>/gi,'<li data-indent="true"$2>')).replace(/<lilevel1([^>]*)>/gi,"<li$1>"),e=(e=(e=A.clean.html(e,A.opts.pasteDeniedTags,A.opts.pasteDeniedAttrs)).replace(/<a>(.[^<]+)<\/a>/gi,"$1")).replace(/<br> */g,"<br>");var i=A.o_doc.createElement("div");i.innerHTML=e;var a=i.querySelectorAll("li[data-indent]");for(t=0;t<a.length;t++){var s=a[t],l=s.previousElementSibling;if(l&&"LI"===l.tagName){var c=l.querySelector(":scope > ul, :scope > ol");c||(c=document.createElement("ul"),l.appendChild(c)),c.appendChild(s)}else s.removeAttribute("data-indent")}return A.html.cleanBlankSpaces(i),e=i.innerHTML}(e))),A.opts.pastePlain&&(e=function N(e){var t,n=null,r=A.doc.createElement("div");r.innerHTML=e;var o=r.querySelectorAll("p, div, h1, h2, h3, h4, h5, h6, pre, blockquote");for(t=0;t<o.length;t++)(n=o[t]).innerText&&(n.outerHTML="<".concat(A.html.defaultTag()||"DIV",">").concat(n.innerText,"</").concat(A.html.defaultTag()||"DIV",">"));for(t=(o=r.querySelectorAll("*:not(".concat("p, div, h1, h2, h3, h4, h5, h6, pre, blockquote, ul, ol, li, table, tbody, thead, tr, td, br, img".split(",").join("):not("),")"))).length-1;0<=t;t--)(n=o[t]).outerHTML=n.innerHTML;return function i(e){for(var t=A.node.contents(e),n=0;n<t.length;n++)t[n].nodeType!==Node.TEXT_NODE&&t[n].nodeType!==Node.ELEMENT_NODE?t[n].parentNode.removeChild(t[n]):i(t[n])}(r),r.innerHTML}(e));var d=A.events.chainTrigger("paste.afterCleanup",e);if(A.$el[0].removeAttribute("plainpaste",!0),"string"==typeof d&&(e=d),""!==e){var f=A.o_doc.createElement("div");0<=(f.innerHTML=e).indexOf("<body>")?(A.html.cleanBlankSpaces(f),A.spaces.normalize(f,!0)):A.spaces.normalize(f);var p=f.getElementsByTagName("span");for(r=p.length-1;0<=r;r--){var h=p[r];0===h.attributes.length&&(h.outerHTML=h.innerHTML)}if(!0===A.opts.linkAlwaysBlank){var u=f.getElementsByTagName("a");for(r=u.length-1;0<=r;r--){var g=u[r];g.getAttribute("target")||g.setAttribute("target","_blank")}}var C=A.selection.element(),m=!1;if(C&&k(C).parentsUntil(A.el,"ul, ol").length&&(m=!0),m){var v=f.children;1===v.length&&0<=["OL","UL"].indexOf(v[0].tagName)&&(v[0].outerHTML=v[0].innerHTML)}if(!s){var b=f.getElementsByTagName("br");for(r=b.length-1;0<=r;r--){var L=b[r];A.node.isBlock(L.previousSibling)&&L.parentNode.removeChild(L)}}if(A.opts.enter===V.ENTER_BR)for(r=(o=f.querySelectorAll("p, div")).length-1;0<=r;r--)0===(i=o[r]).attributes.length&&(i.outerHTML=i.innerHTML+(i.nextSibling&&!A.node.isEmpty(i)?"<br>":""));else if(A.opts.enter===V.ENTER_DIV)for(r=(o=f.getElementsByTagName("p")).length-1;0<=r;r--)0===(i=o[r]).attributes.length&&(i.outerHTML="<div>".concat(i.innerHTML,"</div>"));else A.opts.enter===V.ENTER_P&&1===f.childNodes.length&&"P"===f.childNodes[0].tagName&&0===f.childNodes[0].attributes.length&&(f.childNodes[0].outerHTML=f.childNodes[0].innerHTML);if(f.children&&0<f.children.length)if(A.opts.trackChangesEnabled)for(var E=0;E<f.children.length;E++)f.children[E].setAttribute("id","isPasted");else f.children[0].setAttribute("id","isPasted");e=(e=f.innerHTML).replace(/\n/g,""),l&&(e=function T(e){var t,n=A.o_doc.createElement("div");n.innerHTML=e;var r=n.querySelectorAll("*:empty:not(td):not(th):not(tr):not(iframe):not(svg):not(".concat(V.VOID_ELEMENTS.join("):not("),"):not(").concat(A.opts.htmlAllowedEmptyTags.join("):not("),")"));for(;r.length;){for(t=0;t<r.length;t++)r[t].parentNode.removeChild(r[t]);r=n.querySelectorAll("*:empty:not(td):not(th):not(tr):not(iframe):not(svg):not(".concat(V.VOID_ELEMENTS.join("):not("),"):not(").concat(A.opts.htmlAllowedEmptyTags.join("):not("),")"))}return n.innerHTML}(e)),A.html.insert(e,!0)}!function M(){A.events.trigger("paste.after")}(),A.undo.saveStep(w),w=null,A.undo.saveStep()}function p(e){for(var t=e.length-1;0<=t;t--)e[t].attributes&&e[t].attributes.length&&e.splice(t,1);return e}function H(e){var t,n=A.o_doc.createElement("div");n.innerHTML=e;for(var r=p(Array.prototype.slice.call(n.querySelectorAll(":scope > div:not([style]), td > div:not([style]), th > div:not([style]), li > div:not([style])")));r.length;){var o=r[r.length-1];if(A.html.defaultTag()&&"div"!==A.html.defaultTag())o.querySelector(A.html.blockTagsQuery())?o.outerHTML=o.innerHTML:o.outerHTML="<".concat(A.html.defaultTag(),">").concat(o.innerHTML,"</").concat(A.html.defaultTag(),">");else{var i=o.querySelectorAll("*");!i.length||"BR"!==i[i.length-1].tagName&&0===o.innerText.length?o.outerHTML=o.innerHTML+(o.nextSibling?"<br>":""):!i.length||"BR"!==i[i.length-1].tagName||i[i.length-1].nextSibling?o.outerHTML=o.innerHTML+(o.nextSibling?"<br>":""):o.outerHTML=o.innerHTML}r=p(Array.prototype.slice.call(n.querySelectorAll(":scope > div:not([style]), td > div:not([style]), th > div:not([style]), li > div:not([style])")))}for(r=p(Array.prototype.slice.call(n.querySelectorAll("div:not([style])")));r.length;){for(t=0;t<r.length;t++){var a=r[t],s=a.innerHTML.replace(/\u0009/gi,"").trim();a.outerHTML=s}r=p(Array.prototype.slice.call(n.querySelectorAll("div:not([style])")))}return n.innerHTML}function h(){A.el.removeEventListener("copy",e),A.el.removeEventListener("cut",e),A.el.removeEventListener("paste",t)}return{_init:function u(){A.el.addEventListener("copy",e),A.el.addEventListener("cut",e),A.el.addEventListener("paste",t,{capture:!0}),A.events.on("drop",o),A.browser.msie&&A.browser.version<11&&(A.events.on("mouseup",function(e){2===e.button&&(setTimeout(function(){r=!1},50),r=!0)},!0),A.events.on("beforepaste",t)),A.events.on("destroy",h)},cleanEmptyTagsAndDivs:H,getRtfClipboard:function g(){return s},saveCopiedText:n,clean:i}}
vendor: 5,072 bytes, line 679
679,Object.assign(V.DEFAULTS,{shortcutsEnabled:[],shortcutsHint:!0}),V.SHORTCUTS_MAP={},V.RegisterShortcut=function(e,t,n,r,o,i){V.SHORTCUTS_MAP[(o?"^":"")+(i?"@":"")+e]={cmd:t,val:n,letter:r,shift:o,option:i},V.DEFAULTS.shortcutsEnabled.push(t)},V.RegisterShortcut(V.KEYCODE.E,"show",null,"E",!1,!1),V.RegisterShortcut(V.KEYCODE.B,"bold",null,"B",!1,!1),V.RegisterShortcut(V.KEYCODE.I,"italic",null,"I",!1,!1),V.RegisterShortcut(V.KEYCODE.U,"underline",null,"U",!1,!1),V.RegisterShortcut(V.KEYCODE.S,"strikeThrough",null,"S",!1,!1),V.RegisterShortcut(V.KEYCODE.CLOSE_SQUARE_BRACKET,"indent",null,"]",!1,!1),V.RegisterShortcut(V.KEYCODE.OPEN_SQUARE_BRACKET,"outdent",null,"[",!1,!1),V.RegisterShortcut(V.KEYCODE.Z,"undo",null,"Z",!1,!1),V.RegisterShortcut(V.KEYCODE.Z,"redo",null,"Z",!0,!1),V.RegisterShortcut(V.KEYCODE.Y,"redo",null,"Y",!1,!1),V.MODULES.shortcuts=function(s){var r=null;var l=!1;function e(e){if(!s.core.hasFocus())return!0;var t=e.which,n=-1!==navigator.userAgent.indexOf("Mac OS X")?e.metaKey:e.ctrlKey;if("keyup"===e.type&&l&&t!==V.KEYCODE.META)return l=!1;"keydown"===e.type&&(l=!1);var r=(e.shiftKey?"^":"")+(e.altKey?"@":"")+t,o=s.node.blockParent(s.selection.blocks()[0]);if(o&&"TR"==o.tagName&&o.getAttribute("contenteditable")==undefined&&(o=o.closest("table")),n&&V.SHORTCUTS_MAP[r]&&(!o||"false"!==o.getAttribute("contenteditable"))){var i=V.SHORTCUTS_MAP[r].cmd;if(i&&0<=s.opts.shortcutsEnabled.indexOf(i)){var a=V.SHORTCUTS_MAP[r].val;if(!1===s.events.trigger("shortcut",[e,i,a]))return!(l=!0);if(i&&(s.commands[i]||V.COMMANDS[i]&&V.COMMANDS[i].callback))return e.preventDefault(),e.stopPropagation(),"keydown"===e.type&&((s.commands[i]||V.COMMANDS[i].callback)(),l=!0),!1}}}return{_init:function t(){s.events.on("keydown",e,!0),s.events.on("keyup",e,!0)},get:function o(e){if(!s.opts.shortcutsHint)return null;if(!r)for(var t in r={},V.SHORTCUTS_MAP)Object.prototype.hasOwnProperty.call(V.SHORTCUTS_MAP,t)&&0<=s.opts.shortcutsEnabled.indexOf(V.SHORTCUTS_MAP[t].cmd)&&(r["".concat(V.SHORTCUTS_MAP[t].cmd,".").concat(V.SHORTCUTS_MAP[t].val||"")]={shift:V.SHORTCUTS_MAP[t].shift,option:V.SHORTCUTS_MAP[t].option,letter:V.SHORTCUTS_MAP[t].letter});var n=r[e];return n?(s.helpers.isMac()?String.fromCharCode(8984):"".concat(s.language.translate("Ctrl"),"+"))+(n.shift?s.helpers.isMac()?String.fromCharCode(8679):"".concat(s.language.translate("Shift"),"+"):"")+(n.option?s.helpers.isMac()?String.fromCharCode(8997):"".concat(s.language.translate("Alt"),"+"):"")+n.letter:null}}},V.MODULES.snapshot=function(l){function n(e){for(var t=e.parentNode.childNodes,n=0,r=null,o=0;o<t.length;o++){if(r){var i=t[o].nodeType===Node.TEXT_NODE&&""===t[o].textContent,a=r.nodeType===Node.TEXT_NODE&&t[o].nodeType===Node.TEXT_NODE,s=r.nodeType===Node.TEXT_NODE&&""===r.textContent;i||a||s||n++}if(t[o]===e)return n;r=t[o]}}function o(e){var t=[];if(!e.parentNode)return[];for(;!l.node.isElement(e);)t.push(n(e)),e=e.parentNode;return t.reverse()}function i(e,t){for(;e&&e.nodeType===Node.TEXT_NODE;){var n=e.previousSibling;n&&n.nodeType===Node.TEXT_NODE&&(t+=n.textContent.length),e=n}return t}function c(e){for(var t=l.el,n=0;n<e.length;n++)t=t.childNodes[e[n]];return t}function r(e,t){try{var n=c(t.scLoc),r=t.scOffset,o=c(t.ecLoc),i=t.ecOffset,a=l.doc.createRange();a.setStart(n,r),a.setEnd(o,i),e.addRange(a)}catch(s){}}return{get:function a(){var e,t={};if(l.events.trigger("snapshot.before"),t.html=(l.$wp?l.$el.html():l.$oel.get(0).outerHTML).replace(/ style=""/g,""),t.ranges=[],l.$wp&&l.selection.inEditor()&&l.core.hasFocus())for(var n=l.selection.ranges(),r=0;r<n.length;r++)t.ranges.push({scLoc:o((e=n[r]).startContainer),scOffset:i(e.startContainer,e.startOffset),ecLoc:o(e.endContainer),ecOffset:i(e.endContainer,e.endOffset)});return l.events.trigger("snapshot.after",[t]),t},restore:function s(e){l.$el.html()!==e.html&&(l.opts.htmlExecuteScripts?l.$el.html(e.html):l.el.innerHTML=e.html);var t=l.selection.get();l.selection.clear(),l.events.focus(!0);for(var n=0;n<e.ranges.length;n++)r(t,e.ranges[n])},equal:function d(e,t){return e.html===t.html&&(!l.core.hasFocus()||JSON.stringify(e.ranges)===JSON.stringify(t.ranges))}}},V.MODULES.undo=function(n){function e(e){var t=e.which;n.keys.ctrlKey(e)&&(t===V.KEYCODE.Z&&e.shiftKey&&e.preventDefault(),t===V.KEYCODE.Z&&e.preventDefault())}var t=null;function r(){if(n.undo_stack&&!n.undoing)for(;n.undo_stack.length>n.undo_index;)n.undo_stack.pop()}function o(){n.undo_index=0,n.undo_stack=[]}function i(){n.undo_stack=[]}return{_init:function a(){o(),n.events.on("initialized",function(){t=(n.$wp?n.$el.html():n.$oel.get(0).outerHTML).replace(/ style=""/g,"")}),n.events.on("blur",function(){n.el.querySelector(".fr-dragging")||n.undo.saveStep()}),n.events.on("keydown",e),n.events.on("destroy",i)},run:function s(){if(1<n.undo_index){n.undoing=!0;var e=n.undo_stack[--n.undo_index-1];clearTimeout(n._content_changed_timer),n.snapshot.restore(e),t=e.html,n.popups.hideAll(),n.toolbar.enable(),n.events.trigger("contentChanged"),n.events.trigger("commands.undo"),n.undoing=!1,n.selection.restore(
679)}},redo:function l(){if(n.undo_index<n.undo_stack.length){n.undoing=!0;var e=n.undo_stack[n.undo_index++];clearTimeout(n._content_changed_timer),n.snapshot.restore(e),t=e.html,n.popups.hideAll(),n.toolbar.enable(),n.events.trigger("contentChanged"),n.events.trigger("commands.redo"),n.undoing=!1}},canDo:function c(){return!(0===n.undo_stack.length||n.undo_index<=1)},canRedo:function d(){return n.undo_index!==n.undo_stack.length},dropRedo:r,reset:o,saveStep:function f(e){if(n.undo_stack&&!n.undoing&&!n.el.querySelector(".fr-marker"))if(void 0===e){if((e=n.snapshot.get())&&e.html&&n.undo_stack[n.undo_stack.length-1]&&e.html===n.undo_stack[n.undo_stack.length-1].html)return;n.undo_stack[n.undo_index-1]&&n.snapshot.equal(n.undo_stack[n.undo_index-1],e)||(r(),n.undo_stack.push(e),n.undo_index++,function o(e,t){var n=t.split("fr-selected-cell").join("");n=n.split(' class=""').join("");var r=e.split("fr-selected-cell").join("");return n===(r=r.split(' class=""').join(""))}(t,e.html)||(n.events.trigger("contentChanged"),t=e.html))}else r(),0<n.undo_index?n.undo_stack[n.undo_index-1]=e:(n.undo_stack.push(e),n.undo_index++)}}},Object.assign(V.DEFAULTS,{height:null,heightMax:null,heightMin:null,width:null}),V.MODULES.size=function(r){function e(){o(),r.opts.height&&r.$el.css("minHeight",r.opts.height-r.helpers.getPX(r.$el.css("padding-top"))-r.helpers.getPX(r.$el.css("padding-bottom")));var e=!1;if(r.opts.fullPage)for(var t=r.$el.find("span,p,div"),n=0;n<t.length;n++)if(t[n].style.height&&t[n].style.height.includes("vh")){e=!0;break}r.opts.fullPage&&e&&(r.opts.heightMin&&r.$iframe.css("minHeight",r.opts.heightMin),r.opts.heightMax&&r.$iframe.css("maxHeight",r.opts.heightMax),r.$el.css("overflow-y","auto")),r.$iframe.height(r.$el.outerHeight(!0))}function o(){r.opts.heightMin?r.$el.css("minHeight",r.opts.heightMin):r.$el.css("minHeight",""),r.opts.heightMax?(r.$wp.css("maxHeight",r.opts.heightMax),r.$wp.css("overflow","auto")):(r.$wp.css("maxHeight",""),r.$wp.css("overflow","")),r.opts.height?(r.$wp.css("height",r.opts.height),r.$wp.css("overflow","auto"),r.$el.css("minHeight",r.opts.height-r.helpers.getPX(r.$el.css("padding-top"))-r.helpers.getPX(r.$el.css("padding-bottom")))):(r.$wp.css("height",""),r.opts.heightMin||r.$el.css("minHeight",""),r.opts.heightMax||r.$wp.css("overflow","")),r.opts.width&&r.$box.width(r.opts.width)}return{_init:function t(){if(!r.$wp)return!1;o(),r.$iframe&&(r.events.on("keyup keydown",function(){setTimeout(e,0)},!0),r.events.on("commands.after html.set init initialized paste.after",e))},syncIframe:e,refresh:o}},Object.assign(V.DEFAULTS,{documentReady:!1,editorClass:null,typingTimer:500,iframe:!1,requestWithCORS:!0,requestWithCredentials:!1,requestHeaders:{},useClasses:!0,spellcheck:!0,iframeDefaultStyle:'html{margin:0px;height:auto;}body{height:auto;padding:20px;background:transparent;color:#000000;position:relative;z-index: 2;-webkit-user-select:auto;margin:0px;overflow:hidden;min-height:20px;}body:after{content:"";display:block;clear:both;}body::-moz-selection{background:#b5d6fd;color:#000;}body::selection{background:#b5d6fd;color:#000;}',iframeStyle:"",iframeStyleFiles:[],direction:"auto",zIndex:1,tabIndex:null,disableRightClick:!1,scrollableContainer:"body",keepFormatOnDelete:!1,theme:null}),V.MODULES.core=function(a){var r=a.$;function n(){if(a.$box.addClass("fr-box".concat(a.opts.editorClass?" ".concat(a.opts.editorClass):"")),a.$box.attr("role","application"),a.$wp.addClass("fr-wrapper"),a.opts.documentReady&&a.$box.addClass("fr-document"),function o(){a.opts.iframe||a.$el.addClass("fr-element fr-view"),(a.opts.height&&a.opts.height<window.innerHeight||a.opts.heightMax&&a.opts.heightMax<window.innerHeight)&&a.$el.addClass("fr-element-scroll-visible")}(),a.opts.iframe){a.$iframe.addClass("fr-iframe"),a.$el.addClass("fr-view");for(var e=0;e<a.o_doc.styleSheets.length;e++){var t=void 0;try{t=a.o_doc.styleSheets[e].cssRules}catch(i){}if(t)for(var n=0,r=t.length;n<r;n++)!t[n].selectorText||0!==t[n].selectorText.indexOf(".fr-view")&&0!==t[n].selectorText.indexOf(".fr-element")||0<t[n].style.cssText.length&&(0===t[n].selectorText.indexOf(".fr-view")?a.opts.iframeStyle+="".concat(t[n].selectorText.replace(/\.fr
vendor: 5,841 bytes, line 679
679-view/g,"body"),"{").concat(t[n].style.cssText,"}"):a.opts.iframeStyle+="".concat(t[n].selectorText.replace(/\.fr-element/g,"body"),"{").concat(t[n].style.cssText,"}"))}}"auto"!==a.opts.direction&&a.$box.removeClass("fr-ltr fr-rtl").addClass("fr-".concat(a.opts.direction)),a.$el.attr("dir",a.opts.direction),a.$wp.attr("dir",a.opts.direction),1<a.opts.zIndex&&a.$box.css("z-index",a.opts.zIndex),a.opts.theme&&a.$box.addClass("".concat(a.opts.theme,"-theme")),a.opts.tabIndex=a.opts.tabIndex||a.$oel.attr("tabIndex"),a.opts.tabIndex&&a.$el.attr("tabIndex",a.opts.tabIndex)}return{_init:function o(){if(V.INSTANCES.push(a),function e(){a.drag_support={filereader:"undefined"!=typeof FileReader,formdata:Boolean(a.win.FormData),progress:"upload"in new XMLHttpRequest}}(),a.$wp){n(),a.html.set(a._original_html),a.$el.attr("spellcheck",a.opts.spellcheck),a.helpers.isMobile()&&(a.$el.attr("autocomplete",a.opts.spellcheck?"on":"off"),a.$el.attr("autocorrect",a.opts.spellcheck?"on":"off"),a.$el.attr("autocapitalize",a.opts.spellcheck?"on":"off")),a.opts.disableRightClick&&a.events.$on(a.$el,"contextmenu",function(e){if(2===e.button)return e.preventDefault(),e.stopPropagation(),!1});try{a.doc.execCommand("styleWithCSS",!1,!1)}catch(t){}}"TEXTAREA"===a.$oel.get(0).tagName&&(a.events.on("contentChanged",function(){a.$oel.val(a.html.get())}),a.events.on("form.submit",function(){a.$oel.val(a.html.get())}),a.events.on("form.reset",function(){a.html.set(a._original_html)}),a.$oel.val(a.html.get())),a.helpers.isIOS()&&a.events.$on(a.$doc,"selectionchange",function(){a.$doc.get(0).hasFocus()||a.$win.get(0).focus()}),a.events.trigger("init"),a.opts.autofocus&&!a.opts.initOnClick&&a.$wp&&a.events.on("initialized",function(){a.events.focus(!0)})},destroy:function t(e){"TEXTAREA"===a.$oel.get(0).tagName&&a.$oel.val(e),a.$box&&a.$box.removeAttr("role"),a.$wp&&("TEXTAREA"===a.$oel.get(0).tagName?(a.$el.html(""),a.$wp.html(""),a.$box.replaceWith(a.$oel),a.$oel.show()):(a.$wp.replaceWith(e),a.$el.html(""),a.$box.removeClass("fr-view fr-ltr fr-box ".concat(a.opts.editorClass||"")),a.opts.theme&&a.$box.addClass("".concat(a.opts.theme,"-theme")))),this.$wp=null,this.$el=null,this.el=null,this.$box=null},isEmpty:function e(){return a.node.isEmpty(a.el)},getXHR:function i(e,t){var n=new XMLHttpRequest;for(var r in n.open(t,e,!0),a.opts.requestWithCredentials&&(n.withCredentials=!0),a.opts.requestHeaders)Object.prototype.hasOwnProperty.call(a.opts.requestHeaders,r)&&n.setRequestHeader(r,a.opts.requestHeaders[r]);return n},injectStyle:function s(e){if(a.opts.iframe){a.$head.find("style[data-fr-style], link[data-fr-style]").remove(),a.$head.append('<style data-fr-style="true">'.concat(e,"</style>"));for(var t=0;t<a.opts.iframeStyleFiles.length;t++){var n=r('<link data-fr-style="true" rel="stylesheet" href="'.concat(a.opts.iframeStyleFiles[t],'">'));n.get(0).addEventListener("load",a.size.syncIframe),a.$head.append(n)}}},hasFocus:function l(){return a.browser.mozilla&&a.helpers.isMobile()?a.selection.inEditor():a.node.hasFocus(a.el)||0<a.$el.find("*:focus").length},sameInstance:function c(e){if(!e)return!1;var t=e.data("instance");return!!t&&t.id===a.id}}},V.POPUP_TEMPLATES={"text.edit":"[_EDIT_]"},V.RegisterTemplate=function(e,t){V.POPUP_TEMPLATES[e]=t},V.MODULES.popups=function(h){var r,d=h.$;h.shared.popups||(h.shared.popups={});var u,g=h.shared.popups;function C(e,t){t.isVisible()||(t=h.$sc),t.is(g[e].data("container"))||(g[e].data("container",t),t.append(g[e]))}function o(e){var t;e.find(".fr-upload-progress").addClass("fr-height-set"),e.find(".fr-upload-progress").removeClass("fr-height-auto"),h.popups.get("filesManager.insert").removeClass("fr-height-auto"),e.find(".fr-files-upload-layer").hasClass("fr-active")&&(t=1),e.find(".fr-files-by-url-layer").hasClass("fr-active")&&(t=2),e.find(".fr-files-embed-layer").hasClass("fr-active")&&(t=3),e.find(".fr-upload-progress-layer").get(0).clientHeight+10<e.find(".fr-upload-progress").get(0).clientHeight&&e.find(".fr-upload-progress").addClass("fr-height-auto"),400<e[0].clientHeight&&(e[0].childNodes[4].style.height="".concat(e[0].clientHeight-(e[0].childNodes[0].clientHeight+e[0].childNodes[t].clientHeight)-80,"px"))}var i=2e3;function a(){d(this).toggleClass("fr-not-empty",!0)}function s(){var e=d(this);e.toggleClass("fr-not-empty",""!==e.val())}function m(e){return g[e]&&h.node.hasClass(g[e],"fr-active")&&h.core.sameInstance(g[e])||!1}function v(e){for(var t in g)if(Object.prototype.hasOwnProperty.call(g,t)&&m(t)&&(void 0===e||g[t].data("instance")===e))return g[t];return!1}function n(e){var t=null;if(t="string"!=typeof e?e:g[e],"filesManager.insert"===e&&h.filesManager!==undefined&&h.filesManager.isChildWindowOpen())return!1;if(t&&h.node.hasClass(t,"fr-active")&&(t.removeClass("fr-active fr-above"),h.events.trigger("popups.hide.".concat(e)),h.$tb&&(1<h.opts.zIndex?h.$tb.css("zIndex",h.opts.zIndex+1):h.$tb.css("zIndex","")),h.events.disableBlur(),t.find("input, textarea, button").each(function(){this===this.ownerDocument.activeElement&&this.blur()}),t.find("input, textarea").attr("disabled","disabled"),u))for(var n=0;n<u.length;n++)d(u[n]).removeClass("fr-btn-active-popup")}function b(e){for(var t in void 0===e&&(e=[]),g)Object.prototype.hasOwnProperty.call(g,t)&&e.indexOf(t)<0&&n(t)}function t(){h.shared.exit_flag=!0}function L(){h.shared.exit_flag=!1}function l(){return h.shared.exit_flag}function c(e,t){var n,r=function c(e,t){var n=V.POPUP_TEMPLATES[e];if(!n)return null;for(var r in"function"==typeof n&&(n=n.apply(h)),t)Object.prototype.hasOwnProperty.call(t,r)&&(n=n.replace("[_".concat(r.toUpperCase(),"_]"),t[r]));return n}(e,t),o=d(h.doc.createElement("DIV"));if(!r)return"filesManager.insert"===e?o.addClass("fr-popup fr-files-manager fr-empty"):o.addClass("fr-popup fr-empty"),(n=d("body").first()).append(o),o.data("c
679ontainer",n),g[e]=o;"filesManager.insert"===e?o.addClass("fr-popup fr-files-manager".concat(h.helpers.isMobile()?" fr-mobile":" fr-desktop").concat(h.opts.toolbarInline?" fr-inline":"")):o.addClass("fr-popup".concat(h.helpers.isMobile()?" fr-mobile":" fr-desktop").concat(h.opts.toolbarInline?" fr-inline":"")),o.html(r),h.opts.theme&&o.addClass("".concat(h.opts.theme,"-theme")),1<h.opts.zIndex&&(!h.opts.editInPopup&&h.$tb?h.$tb.css("z-index",h.opts.zIndex+2):o.css("z-index",h.opts.zIndex+2)),"auto"!==h.opts.direction&&o.removeClass("fr-ltr fr-rtl").addClass("fr-".concat(h.opts.direction)),o.find("input, textarea").attr("dir",h.opts.direction).attr("disabled","disabled"),(n=d("body").first()).append(o),o.data("container",n);var i=(g[e]=o).find(".fr-color-hex-layer");if(0<i.length){var a=h.helpers.getPX(o.find(".fr-color-set > span").css("width")),s=h.helpers.getPX(i.css("paddingLeft")),l=h.helpers.getPX(i.css("paddingRight"));i.css("width",a*h.opts.colorsStep+s+l)}return h.button.bindCommands(o,!1),o}function E(a){var s=g[a];return{_windowResize:function(){var e=s.data("instance")||h;if(!e.helpers.isMobile()&&s.isVisible()){var t=s.find(".fr-file-progress-bar-layer");if("file.insert"===a&&0<t.length&&t.hasClass("fr-active")){var n=h.$tb.find('.fr-command[data-cmd="insertFile"]');e.events.disableBlur();var r=h.button.getPosition(n),o=r.left,i=r.top;h.position.at(o,i,g[a],0),e.events.enableBlur()}else e.events.disableBlur(),e.popups.hide(a),e.events.enableBlur()}},_inputFocus:function(e){var t=s.data("instance")||h,n=d(e.currentTarget);if(n.is("input:file")&&n.closest(".fr-layer").addClass("fr-input-focus"),e.preventDefault(),e.stopPropagation(),setTimeout(function(){t.events.enableBlur()},100),t.helpers.isMobile()){var r=d(t.o_win).scrollTop();setTimeout(function(){d(t.o_win).scrollTop(r)},0)}},_inputBlur:function(e){var t=s.data("instance")||h,n=d(e.currentTarget);n.is("input:file")&&n.closest(".fr-layer").removeClass("fr-input-focus"),document.activeElement!==this&&d(this).isVisible()&&(t.events.blurActive()&&t.events.trigger("blur"),t.events.enableBlur())},_editorKeydown:function(e){var t=s.data("instance")||h;t.keys.ctrlKey(e)||e.which===V.KEYCODE.ALT||e.which===V.KEYCODE.ESC||(m(a)&&s.findVisible(".fr-back").length?t.button.exec(s.findVisible(".fr-back").first()):e.which!==V.KEYCODE.ALT&&t.popups.hide(a))},_preventFocus:function(e){var t=s.data("instance")||h,n=e.originalEvent?e.originalEvent.target||e.originalEvent.originalTarget:null;"mouseup"===e.type||d(n).is(":focus")||t.events.disableBlur(),"mouseup"!==e.type||d(n).hasClass("fr-command")||0<d(n).parents(".fr-command").length||d(n).hasClass("fr-dropdown-content")||d(n).hasClass("fr-dropdown-menu")||h.button.hideActiveDropdowns(s),(h.browser.safari||h.browser.mozilla)&&"mousedown"===e.type&&d(n).is("input[type=file]")&&t.events.disableBlur();var r="input, textarea, button, select, label, .fr-command";if(n&&!d(n).is(r)&&0===d(n).parents(r).length)return e.stopPropagation(),!1;n&&d(n).is(r)&&e.stopPropagation(),L()},_editorMouseup:function(){s.isVisible()&&l()&&0<s.findVisible("input:focus, textarea:focus, button:focus, select:focus").length&&h.events.disableBlur()},_windowMouseup:function(e){if(!h.core.sameInstance(s))return!0;var t=s.data("instance")||h;s.isVisible()&&l()&&(e.stopPropagation(),t.markers.remove(),t.popups.hide(a),L())},_windowKeydown:function(e){if(!h.core.sameInstance(s))return!0;var t=s.data("instance")||h,n=e.which;if(V.KEYCODE.ESC===n){if(t.popups.isVisible(a)&&t.opts.toolbarInline)return e.stopPropagation(),t.popups.isVisible(a)&&(s.findVisible(".fr-back").length?(t.button.exec(s.findVisible(".fr-back").first()),t.accessibility.focusPopupButton(s)):s.findVisible(".fr-dismiss").length?t.button.exec(s.findVisible(".fr-dismiss").first()):(t.popups.hide(a),t.toolbar.showInline(null,!0),t.accessibility.focusPopupButton(s))),!1;if(t.popups.isVisible(a))return s.findVisible(".fr-back").length?(t.button.exec(s.findVisible(".fr-back").first),t.accessibility.focusPopupButton(s)):s.findVisible(".fr-dismiss").length?t.button.exec(s.findVisible(".fr-dismiss").first()):(t.popups.hide(a),t.accessibility.focusPopupButton(s)),!1}},_repositionPopup:function(){if(!h.opts.height&&!h.opts.heightMax||h.opts.toolbarInline)return!0;
vendor: 10,066 bytes, line 679
679if(h.$wp&&m(a)&&s.parent().get(0)===h.$sc.get(0)){var e=s.offset().top-h.$wp.offset().top,t=h.$wp.outerHeight();h.node.hasClass(s.get(0),"fr-above")&&(e+=s.outerHeight()),t<e||e<0?s.addClass("fr-hidden"):s.removeClass("fr-hidden")}},handleWindowClick:function(e){if(!h.core.sameInstance(s))return!0;var t=s.data("instance")||h;s.isVisible()&&e.target&&(0<d(e.target).find("body").length||"BODY"===d(e.target)[0].tagName)&&(e.stopPropagation(),t.popups.hide(a))}}}function f(e,t){h.events.on("mouseup",e._editorMouseup,!0),h.$wp&&h.events.on("keydown",e._editorKeydown),h.events.on("focus",function(){g[t].removeClass("focused")}),h.events.on("blur",function(){v()&&h.markers.remove(),h.helpers.isMobile()?g[t].hasClass("focused")?(b(),g[t].removeClass("focused")):g[t].addClass("focused"):g[t].find("iframe").length||b()}),h.$wp&&!h.helpers.isMobile()&&h.events.$on(h.$wp,"scroll.popup".concat(t),e._repositionPopup),h.events.on("window.mouseup",e._windowMouseup,!0),h.events.on("window.keydown",e._windowKeydown,!0),h.opts.iframe&&window.addEventListener("click",e.handleWindowClick),g[t].data("inst".concat(h.id),!0),h.events.on("destroy",function(){h.core.sameInstance(g[t])&&(d("body").first().append(g[t]),g[t].removeClass("fr-active"))},!0)}function p(){var e=d(this).prev().children().first();e.attr("checked",!e.attr("checked"))}function e(){for(var e in g)if(Object.prototype.hasOwnProperty.call(g,e)){var t=g[e];t&&(t.html("").removeData().remove(),g[e]=null)}g=[]}return h.shared.exit_flag=!1,{_init:function y(){r=window.innerHeight,h.events.on("shared.destroy",e,!0),h.events.on("window.mousedown",t),h.events.on("window.touchmove",L),h.events.$on(d(h.o_win),"scroll",L),h.events.on("mousedown",function(e){v()&&(e.stopPropagation(),h.$el.find(".fr-marker").remove(),t(),h.events.disableBlur())})},create:function S(e,t){var n=c(e,t),r=E(e);f(r,e),h.events.$on(n,"mousedown mouseup touchstart touchend touch","*",r._preventFocus,!0),h.events.$on(n,"focus","input, textarea, button, select",r._inputFocus,!0),h.events.$on(n,"blur","input, textarea, button, select",r._inputBlur,!0);var o=n.find("input, textarea");return function i(e){for(var t=0;t<e.length;t++){var n=e[t],r=d(n);0===r.next().length&&r.attr("placeholder")&&(r.after('<label for="'.concat(r.attr("id"),'">').concat(r.attr("placeholder"),"</label>")),r.attr("placeholder",""))}}(o),h.events.$on(o,"focus",a),h.events.$on(o,"blur change",s),h.events.$on(n,"click",".fr-checkbox + label",p),h.accessibility.registerPopup(e),h.helpers.isIOS()&&h.events.$on(n,"touchend","label",function(){d("#".concat(d(this).attr("for"))).prop("checked",function(e,t){return!t})},!0),h.events.$on(d(h.o_win),"resize",r._windowResize,!0),"filesManager.insert"===e&&g["filesManager.insert"].css("zIndex",2147483641),n},get:function N(e){var t=g[e];return t&&!t.data("inst".concat(h.id))&&f(E(e),e),t},show:function T(e,t,n,r,o){if(m(e)||(v()&&0<h.$el.find(".fr-marker").length?(h.events.disableBlur(),h.selection.restore()):v()||(h.events.disableBlur(),h.events.focus(),h.events.enableBlur())),b([e]),!g[e])return!1;var i=h.button.getButtons(".fr-dropdown.fr-active");i.removeClass("fr-active").attr("aria-expanded",!1).parents(".fr-toolbar").css("zIndex","").find("> .fr-dropdown-wrapper").css("height",""),i.next().attr("aria-hidden",!0).css("overflow","").find("> .fr-dropdown-wrapper").css("height",""),g[e].data("instance",h),h.$tb&&h.$tb.data("instance",h);var a=m(e);g[e].addClass("fr-active").removeClass("fr-hidden").find("input, textarea").removeAttr("disabled");var s=g[e].data("container");if(function p(e,t){t.isVisible()||(t=h.$sc),t.contains([g[e].get(0)])||t.append(g[e])}(e,s),h.opts.toolbarInline&&s&&h.$tb&&s.get(0)===h.$tb.get(0)&&(C(e,h.$sc),n=h.$tb.offset().top-h.helpers.getPX(h.$tb.css("margin-top")),t=h.$tb.offset().left+h.$tb.outerWidth()/2,h.node.hasClass(h.$tb.get(0),"fr-above")&&n&&(n+=h.$tb.outerHeight()),r=0),s=g[e].data("container"),h.opts.iframe&&!r&&!a){var l=h.helpers.getPX(h.$wp.find(".fr-iframe").css("padding-top")),c=h.helpers.getPX(h.$wp.find(".fr-iframe").css("padding-left"));t&&(t-=h.$iframe.offset().left+c),n&&(n-=h.$iframe.offset().top+l)}s.is(h.$tb)?h.$tb.css("zIndex",(h.opts.zIndex||1)+4):g[e].css("zIndex",(h.opts.zIndex||1)+3),h.opts.toolbarBottom&&s&&h.$tb&&s.get(0)===h.$tb.get(0)&&(g[e].addClass("fr-above"),n&&(n-=g[e].outerHeight())),o&&(t-=g[e].width()/2),t+g[e].outerWidth()>h.$sc.offset().left+h.$sc.width()&&(t-=t+g[e].outerWidth()-h.$sc.offset().left-h.$sc.width()),t<h.$sc.offset().left&&"rtl"===h.opts.direction&&(t=h.$sc.offset().left),g[e].removeClass("fr-active"),h.position.at(t,n,g[e],r||0);var d=h.node.blockParent(h.selection.blocks()[0]);if(d&&"false"===d.getAttribute("contenteditable"))g[e].removeClass("fr-active");else{var f=h.selection.element().parentElement.getAttribute("contenteditable");f&&"false"===f?g[e].removeClass("fr-active"):g[e].addClass("fr-active")}a||h.accessibility.focusPopup(g[e]),h.opts.toolbarInline&&h.toolbar.hide(),h.$tb&&(u=h.$tb.find(".fr-btn-active-popup")),h.events.trigger("popups.show.".concat(e)),E(e)._repositionPopup(),L()},hide:n,onHide:function M(e,t){h.events.on("popups.hide.".concat(e),t)},hideAll:b,setContainer:C,refresh:function A(e){g[e].data("instance",h),h.events.trigger("popups.refresh.".concat(e));for(var t=g[e].find(".fr-command"),n=0;n<t.length;n++){var r=d(t[n]);0===r.parents(".fr-dropdown-menu").length&&h.button.refresh(r)}},onRefresh:function x(e,t){h.events.on("popups.refresh.".concat(e),t)},onShow:function O(e,t){h.events.on("popups.show.".concat(e),t)},isVisible:m,setFileListHeight:o,areVisible:v,setPopupDimensions:function w(e,t){t&&e.find(".fr-upload-progress-layer").get(0).clientHeight<i&&(e.find(".fr-upload-progress").addClass("fr-height-auto"),h.popups.get("filesManager.insert").addClass("fr-height-auto"),e.find(".fr-upload-progress").removeClass("fr-height-set"),i=2e3),e.get(0).clientHeight>window.innerHeight/2&&(window.innerWidth<500?e.get(0).clientHeight>.6*r&&o(e):400<e.get(0).clientHeight&&o(e),i=e.find(".fr-upload-progress-layer").get(0).clientHeight);var n=window.innerWidth;switch(!0){case n<=320:e.width(200);break;case n<=420:e.width(250);break;case n<=520:e.width(300);break;case n<=720:e.width(400);break;case 720<n:e.width(530)}}}},V.MODULES.accessibility=function(f){var p=f.$,i=!0;function l(t){for(var e=f.$el.find('[contenteditable="true"]'),n=!1,r=0;e.get(r);)p(e.get(r)).is(":focus")&&(n=!0),r++;if(t&&t.length&&!n){t.data("blur-event-set")||t.parents(".fr-popup").length||(f.events.$on(t,"blur",function(){var e=t.parents(".fr-toolbar, .fr-popup").data("instance")||f;e.events.blurActive()&&!f.core.hasFocus()&&e.events.trigger("blur"),setTimeout(function(){e.events.enableBlur()},100)},!0),t.data("blur-event-set",!0));var o=t.parents(".fr-toolbar, .fr-popup").data("instance")||f;f.browser.safari&&(f.shared.safariSelection=f.selection.get().getRangeAt(0).cloneRange()),o.events.disableBlur(),t.get(0).focus(),f.shared.$f_el=t}}function h(e,t){var n=t?"last":"first",r=s(g(e))[n]();if(r.length)return l(r),!0}function a(e){return e.is("input, textarea, select")&&t(),f.events.disableBlur(),e.get(0).focus(),!0}function u(e,t){var n=e.find("input, textarea, button, select").filter(function(){return p(this).isVisible()}).not(":disabled");if((n=t?n.last():n.first()).length)return a(n);if(f.shared.with_kb){var r=e.findVisible(".fr-active-item").first();if(r.length)return a(r);var o=e.findVisible("[tabIndex]").first();if(o.length)return a(o)}}function t(){0===f.$el.find(".fr-marker").length&&f.core.hasFocus()&&f.selection.save()}function c(){var e=f.popups.areVisible();if(e){var t=e.find(".fr-buttons");return t.find("button:focus, .fr-group span:focus").length?!h(e.data("instance").$tb):!h(t)}return!h(f.$tb)}function d(){var e=null;return f.shared.$f_el.is(".fr-dropdown.fr-active")?e=f.shared.$f_el:f.shared.$f_el.closest(".fr-dropdown-menu").prev().is(".fr-dropdown.fr-active")&&(e=f.shared.$f_el.closest(".fr-dropdown-menu").prev()),e}function s(e){for(var t=-1,n=0;n<e.length;n++)p(e[n]).hasClass("fr-open")&&(t=n);var r=e.index(f.$tb.find(".fr-more-toolbar.fr-expanded > button.fr-command").first());if(0<r&&-1!==t){var o=e.slice(r,e.length),i=(e=e.slice(0,r)).slice(0,t+1),a=e.slice(t+1,e.length);e=i;for(var s=0;s<o.length;s++)e.push(o[s]);for(var l=0;l<a.length;l++)e.push(a[l])}return e}function g(e){return e.findVisible("button:not(.fr-disabled), .fr-group span.fr-command").filter(function(e){var t=p(e).parents(".fr-more-toolbar");return 0===t.length||0<t.length&&t.hasClass("fr-expanded")})}function n(e,t,n){if(f.shared.$f_el){var r=d();r&&(f.button.click(r),f.shared.$f_el=r);var o=s(g(e)),i=o.index(f.shared.$f_el);if(0===i&&!n||i===o.length-1&&n){var a;if(t){if(e.parent().is(".fr-popup"))a=!u(e.parent().children().not(".fr-buttons"),!n);!1===a&&(f.shared.$f_el=null)}t&&!1===a||h(e,!n)}else l(p(o.get(i+(n?1:-1))));return!1}}function C(e,t){return n(e,t,!0)}function m(e,t){return n(e,t)}function v(e){if(f.shared.$f_el){var t;if(f.shared.$f_el.is(".fr-dropdown.fr-active"))return l(t=e?f.shared.$f_el.next().find(".fr-command:not(.fr-disabled)").first():f.shared.$f_el.next().find(".fr-command:not(.fr-disabled)").last()),!1;if(f.shared.$f_el.is("a.fr-command"))return(t=e?f.shared.$f_el.closest("li").nextAllVisible().first().find(".fr-command:not(.fr-disabled)").first():f.shared.$f_el.closest("li").prevAllVisible().first().find(".fr-command:not(.fr-disabled)").first()).length||(t=e?f.shared.$f_el.closest(".fr-dropdown-menu").find(".fr-command:not(.fr-disabled)").first():f.shared.$f_el.closest(".fr-dropdown-menu").find(".fr-command:not(.fr-disabled)").last()),l(t),!1}}function b(){if(f.shared.$f_el){if(f.shared.$f_el.hasClass("fr-dropdown"))f.button.click(f.shared.$f_el);else if(f.shared.$f_el.is("button.fr-back")){f.opts.toolbarInline&&(f.events.disableBlur(),f.events.focus());var e=f.popups.areVisible(f);e&&(f.shared.with_kb=!1),f.button.click(f.shared.$f_el),E(e)}else{if(f.events.disableBlur(),f.button.click(f.shared.$f_el),f.shared.$f_el.attr("data-group-name")){var t=f.$tb.find('.fr
679-more-toolbar[data-name="'.concat(f.shared.$f_el.attr("data-group-name"),'"]')),n=f.shared.$f_el;t.hasClass("fr-expanded")&&(n=t.findVisible("button:not(.fr-disabled)").first()),n&&l(n)}else if(f.shared.$f_el.attr("data-popup")){var r=f.popups.areVisible(f);r&&r.data("popup-button",f.shared.$f_el)}else if(f.shared.$f_el.attr("data-modal")){var o=f.modals.areVisible(f);o&&o.data("modal-button",f.shared.$f_el)}f.shared.$f_el=null}return!1}}function L(){f.shared.$f_el&&(f.events.disableBlur(),f.shared.$f_el.blur(),f.shared.$f_el=null),!1!==f.events.trigger("toolbar.focusEditor")&&(f.events.disableBlur(),f.$el.get(0).focus(),f.events.focus())}function o(c){c&&c.length&&(f.events.$on(c,"keydown",function(e){if(!p(e.target).is("a.fr-command, button.fr-command, .fr-group span.fr-command"))return!0;var t=c.parents(".fr-popup").data("instance")||c.data("instance")||f;if(f.shared.with_kb=!0,f.browser.safari&&f.shared.safariSelection){var n=f.shared.safariSelection,r=n.startContainer,o=n.endContainer,i=n.startOffset,a=n.endOffset,s=f.doc.createRange();s.setStart(r,i),s.setEnd(o,a),f.selection.get().addRange(s)}var l=t.accessibility.exec(e,c);return f.shared.with_kb=!1,l},!0),f.events.$on(c,"mouseenter","[tabIndex]",function(e){var t=c.parents(".fr-popup").data("instance")||c.data("instance")||f;if(!i)return e.stopPropagation(),void e.preventDefault();var n=p(e.currentTarget);t.shared.$f_el&&t.shared.$f_el.not(n)&&t.accessibility.focusEditor()},!0),f.$tb&&f.events.$on(f.$tb,"transitionend",".fr-more-toolbar",function(){f.shared.$f_el=p(document.activeElement)}))}function E(e){var t=e.data("popup-button");t&&setTimeout(function(){l(t),e.data("popup-button",null)},0)}function y(e){var t=f.popups.areVisible(e);t&&t.data("popup-button",null)}function e(e){var t=-1!==navigator.userAgent.indexOf("Mac OS X")?e.metaKey:e.ctrlKey;if(e.which!==V.KEYCODE.F10||t||e.shiftKey||!e.altKey)return!0;f.shared.with_kb=!0;var n=f.popups.areVisible(f),r=!1;return n&&(r=u(n.children().not(".fr-buttons"))),r||c(),f.shared.with_kb=!1,e.preventDefault(),e.stopPropagation(),!1}return{_init:function r(){f.$wp?f.events.on("keydown",e,!0):f.events.$on(f.$win,"keydown",e,!0),f.events.on("mousedown",function(e){y(f),f.shared.$f_el&&f.el.isSameNode(f.shared.$f_el[0])&&(f.accessibility.restoreSelection(),e.stopPropagation(),f.events.disableBlur(),f.shared.$f_el=null)},!0),f.events.on("blur",function(){f.shared.$f_el=null,y(f)},!0)},registerPopup:function S(e){var t=f.popups.get(e),n=function r(c){var d=f.popups.get(c);return{_tiKeydown:function(e){var t=d.data("instance")||f;if(!1===t.events.trigger("popup.tab",[e]))return!1;var n=e.which,r=d.find(":focus").first();if(V.KEYCODE.TAB===n){e.preventDefault();var o=d.children().not(".fr-buttons"),i=o.findVisible("input, textarea, button, select").not(".fr-no-touch input, .fr-no-touch textarea, .fr-no-touch button, .fr-no-touch select, :disabled").toArray(),a=i.indexOf(this)+(e.shiftKey?-1:1);if(0<=a&&a<i.length)return t.events.disableBlur(),p(i[a]).focus(),e.stopPropagation(),!1;var s=d.find(".fr-buttons");if(s.length&&h(s,Boolean(e.shiftKey)))return e.stopPropagation(),!1;if(u(o))return e.stopPropagation(),!1}else{if(V.KEYCODE.ENTER!==n||!e.target||"TEXTAREA"===e.target.tagName)return V.KEYCODE.ESC===n?(e.preventDefault(),e.stopPropagation(),t.accessibility.restoreSelection(),t.popups.isVisible(c)&&d.findVisible(".fr-back").length?(t.opts.toolbarInline&&(t.events.disableBlur(),t.events.focus()),t.button.exec(d.findVisible(".fr-back").first()),E(d)):t.popups.isVisible(c)&&d.findVisible(".fr-dismiss").length?t.button.exec(d.findVisible(".fr-dismiss").first()):(t.popups.hide(c),t.opts.toolbarInline&&t.toolbar.showInline(null,!0),E(d)),!1):V.KEYCODE.SPACE===n&&(r.is(".fr-submit")||r.is(".fr-dismiss"))?(e.preventDefault(),e.stopPropagation(),t.events.disableBlur(),t.button.exec(r),!0):t.keys.isBrowserAction(e)?void e.stopPropagation():r.is("input[type=text], textarea")?void e.stopPropagation():V.KEYCODE.SPACE===n&&(r.is(".fr-link-attr")||r.is("input[type=file]"))?void e.stopPropagation():(e.stopPropagation(),e.preventDefault(),!1);var l=null;0<d.findVisible(".fr-submit").length?l=d.findVisible(".fr-submit").first():d.findVisible(".fr-dismiss").length&&(l=d.findVisible(".fr-dismiss").first()),l&&(e.preventDefault(),e.stopPropagation(),t.events.disableBlur(),t.button.exec(l))}},_tiMouseenter:function(){var e=d.data("instance")||f;y(e)}}}(e);o(t.find(".fr-buttons")),f.events.$on(t,"mouseenter","tabIndex",n._tiMouseenter,!0),f.events.$on(t.children().not(".fr-buttons"),"keydown","[tabIndex]",n._tiKeydown,!0),f.popups.onHide(e,function(){(t.data("instance")||f).accessibility.restoreSelection()}),f.popups.onShow(e,function(){i=!1,setTimeout(function(){i=!0},0)})},registerToolbar:o,focusToolbarElement:l,focusToolbar:h,focusContent:u,focusPopup:function N(r){var o=r.children().not(".fr-buttons");o.data("mouseenter-event-set")||(f.events.$on(o,"mouseenter","[tabIndex]",function(e){var t=r.data("instance")||f;if(!i)return e.stopPropagation(),void e.preventDefault();var n=o.find(":focus").first();n.length&&!n.is("input, button, textarea, select")&&(t.events.disableBlur(),n.blur(),t.events.disableBlur(),t.events.focus())}),o.data("mouseenter-event-set",!0)),!u(o)&&f.shared.with_kb&&h(r.find(".fr-buttons"))},focusModal:function T(e){f.core.hasFocus()||(f.events.disableBlur(),f.events.focus()),f.accessibility.saveSelection(),f.events.disableBlur(),f.el.blur(),f.selection.clear(),f.events.disableBlur(),f.shared.with_kb?e.find(".fr-command[tabIndex], [tabIndex]").first().focus():e.find("[tabIndex]").first().focus()},focusEditor:L,focusPopupButton:E,focusModalButton:function M(e){var t=e.data("modal-button");t&&setTimeout(function(){l(t),e.data("modal-button",null)},0)},hasFocus:function A(){return null!==f.shared.$f_el},exec:function x(e,t){var n=-1!==navigator.userAgent.indexOf("Mac OS X")?e.metaKey:e.ctrlKey,r=e.which,o=!1;return r!==V.KEYCODE.TAB||n||e.shiftKey||e.altKey?r!==V.KEYCODE.ARROW_RIGHT||n||e.shiftKey||e.altKey?r!==V.KEYCODE.TAB||n||!e.shiftKey||e.altKey?r!==V.KEYCODE.ARROW_LEFT||n||e.shiftKey||e.altKey?r!==V.KEYCODE.ARROW_UP||n||e.shiftKey||e.altKey?r!==V.KEYCODE.ARROW_DOWN||n||e.shiftKey||e.altKey?r!==V.KEYCODE.ENTER&&r!==V.KEYCODE.SPACE||n||e.shiftKey||e.altKey?r!==V.KEYCODE.ESC||n||e.shiftKey||e.altKey?r!==V.KEYCODE.F10||n||e.shiftKey||!e.altKey||(o=c()):o=function i(e){if(f.shared.$f_el){var t=d();return t?(f.button.click(t),l(t)):e.parent().findVisible(".fr-back").length?(f.shared.with_kb=!1,f.opts.toolbarInline&&(f.events.disableBlur(),f.events.focus()),f.button.exec(e.parent().findVisible(".fr-back")).first(),E(e.parent())):f.shared.$f_el.is("button, .fr-group span")&&(e.parent().is(".fr
679-popup")?(f.accessibility.restoreSelection(),f.shared.$f_el=null,!1!==f.events.trigger("toolbar.esc")&&(f.popups.hide(e.parent()),f.opts.toolbarInline&&f.toolbar.showInline(null,!0),E(e.parent()))):L()),!1}}(t):o=b():o=function a(){return f.shared.$f_el&&f.shared.$f_el.is(".fr-dropdown:not(.fr-active)")?b():v(!0)}():o=function s(){return v()}():o=m(t):o=m(t,!0):o=C(t):o=C(t,!0),f.shared.$f_el||void 0!==o||(o=!0),!o&&f.keys.isBrowserAction(e)&&(o=!0),!!o||(e.preventDefault(),e.stopPropagation(),!1)},saveSelection:t,restoreSelection:function O(){f.$el.find(".fr-marker").length&&(f.events.disableBlur(),f.selection.restore(),f.events.enableBlur())}}},Object.assign(V.DEFAULTS,{tooltips:!0}),V.MODULES.tooltip=function(p){var h=p.$;function r(){p.helpers.isMobile()||p.$tooltip&&p.$tooltip.removeClass("fr-visible").css("left","-3000px").css("position","fixed")}function o(e,t){if(!p.helpers.isMobile()){var n=e.attr("id")&&e.attr("id").split("-")[0],r=e.attr("title"),o=p.opts.trackChangesEnabled,i=p.opts.showChangesEnabled;if(p.opts.toolbarContainer){for(var a=!1,s=0;s<V.INSTANCES.length;s++)if(V.INSTANCES[s].core.hasFocus()){o=V.INSTANCES[s].opts.trackChangesEnabled,i=V.INSTANCES[s].opts.showChangesEnabled,a=!0;break}a||(i=o=e.hasClass("fr-active"))}if("trackChanges"===n)r=o?"Disable Track Changes":"Enable Track Changes";else if("showChanges"===n)r=i?"Hide Changes":"Show Changes";else if(("applyAll"===n||"removeAll"===n||"applyLast"===n||"removeLast"===n)&&0===p.track_changes.getPendingChanges().length)return;if(e.data("title",r),e.data("title")){p.$tooltip||function f(){if(p.opts.tooltips&&!p.helpers.isMobile()){if(p.shared.$tooltip)p.$tooltip=p.shared.$tooltip;else{p.shared.$tooltip=h(p.doc.createElement("DIV")).addClass("fr-tooltip"),p.$tooltip=p.shared.$tooltip,p.opts.theme&&p.$tooltip.addClass("".concat(p.opts.theme,"-theme"));var e=p.$wp.closest("dialog");0<e.length?e.first().append(p.$tooltip):h(p.o_doc).find("body").first().append(p.$tooltip)}p.events.on("shared.destroy",function(){p.$tooltip.html("").removeData().remove(),p.$tooltip=null},!0)}}(),e.removeAttr("title"),p.$tooltip.text(p.language.translate(e.data("title"))),p.$tooltip.addClass("fr-visible");var l=e.offset().left+(e.outerWidth()-p.$tooltip.outerWidth())/2;l<0&&(l=0),l+p.$tooltip.outerWidth()>h(p.o_win).width()&&(l=h(p.o_win).width()-p.$tooltip.outerWidth()),void 0===t&&(t=p.opts.toolbarBottom),e.offset().top-h(window).scrollTop()+e.outerHeight()+10>=h(window).height()&&(t=!0);var c=t?e.offset().top-p.$tooltip.height():e.offset().top+e.outerHeight();p.$tooltip.css("position",""),p.$tooltip.css("left",l),p.$tooltip.css("top",Math.ceil(c));var d=p.$wp.closest("dialog");0<d.length?(p.$tooltip.css("margin-left",-d.first().offset().left),p.$tooltip.css("margin-top",-d.first().offset().top)):"static"!==h(p.o_doc).find("body").first().css("position")?(p.$tooltip.css("margin-left",-h(p.o_doc).find("body").first().offset().left),p.$tooltip.css("margin-top",-h(p.o_doc).find("body").first().offset().top)):(p.$tooltip.css("margin-left",""),p.$tooltip.css("margin-top",""))}}}return{hide:r,to:o,bind:function i(e,t,n){p.opts.tooltips&&!p.helpers.isMobile()&&(p.events.$on(e,"mouseover",t,function(e){p.node.hasClass(e.currentTarget,"fr-disabled")||p.edit.isDisabled()||o(h(e.currentTarget),n)},!0),p.events.$on(e,"mouseout ".concat(p._mousedown," ").concat(p._mouseup),t,function(){r()},!0))}}},V.TOOLBAR_VISIBLE_BUTTONS=3,V.MODULES.button=function(g){var u=g.$,a=[];(g.opts.toolbarInline||g.opts.toolbarContainer)&&(g.shared.buttons||(g.shared.buttons=[]),a=g.shared.buttons);var s=[];function l(e,t,n){for(var r=u(),o=0;o<e.length;o++){var i=u(e[o]);if(i.is(t)&&(r=r.add(i)),n&&i.is(".fr-dropdown")){var a=i.next().find(t);r=r.add(a)}}return r}function C(e,t){var n,r=u();if(!e)return r;for(n in r=(r=r.add(l(a,e,t))).add(l(s,e,t)),g.shared.popups)if(Object.prototype.hasOwnProperty.call(g.shared.popups,n)){var o=g.shared.popups[n].children().find(e);r=r.add(o)}for(n in g.shared.modals)if(Object.prototype.hasOwnProperty.call(g.shared.modals,n)){var i=g.shared.modals[n].$modal.find(e);r=r.add(i)}return r}function i(e){var t=e.next(),n=g.node.hasClass(e.get(0),"fr-active"),r=C(".fr-dropdown.fr-active").not(e),o=e.parents(".fr-toolbar, .fr-popup").data("instance")||g;o.helpers.isIOS()&&!o.el.querySelector(".fr-marker")&&(o.selection.save(),o.selection.clear(),o.selection.restore(
vendor: 5,663 bytes, line 679
679)),t.parents(".fr-more-toolbar").addClass("fr-overflow-visible");var i=0,a=0,s=t.find("> .fr-dropdown-wrapper");if(!n){var l=e.data("cmd");t.find(".fr-command").removeClass("fr-active").attr("aria-selected",!1),V.COMMANDS[l]&&V.COMMANDS[l].refreshOnShow&&V.COMMANDS[l].refreshOnShow.apply(o,[e,t]),t.css("left",e.offset().left-e.parents(".fr-btn-wrap, .fr-toolbar, .fr-buttons").offset().left-("rtl"===g.opts.direction?t.width()-e.outerWidth():0)),t.addClass("test-height"),i=t.outerHeight(),a=g.helpers.getPX(s.css("max-height")),t.removeClass("test-height"),t.css("top","").css("bottom","");var c=e.outerHeight()/10;if(!g.opts.toolbarBottom&&t.offset().top+e.outerHeight()+i<u(g.o_doc).height())t.css("top",e.position().top+e.outerHeight()-c);else{var d=0,f=e.parents(".fr-more-toolbar");0<f.length&&(d=f.first().height()),t.css("bottom",e.parents(".fr-popup, .fr-toolbar").first().height()-d-e.position().top)}}(e.addClass("fr-blink").toggleClass("fr-active"),e.hasClass("fr-options"))&&e.prev().toggleClass("fr-expanded");e.hasClass("fr-active")?(t.attr("aria-hidden",!1),e.attr("aria-expanded",!0),function h(e,t,n){n<=t&&(e.parent().css("overflow","auto"),e.parent().css("overflow-x","hidden")),e.css("height",Math.min(t,n))}(s,i,a)):(t.attr("aria-hidden",!0).css("overflow",""),e.attr("aria-expanded",!1),s.css("height","")),setTimeout(function(){e.removeClass("fr-blink")},300),t.css("margin-left",""),t.offset().left+t.outerWidth()>g.$sc.offset().left+g.$sc.width()&&t.css("margin-left",-(t.offset().left+t.outerWidth()-g.$sc.offset().left-g.$sc.width())),t.offset().left<g.$sc.offset().left&&"rtl"===g.opts.direction&&t.css("margin-left",g.$sc.offset().left),r.removeClass("fr-active").attr("aria-expanded",!1).next().attr("aria-hidden",!0).css("overflow","").find("> .fr-dropdown-wrapper").css("height",""),r.prev(".fr-expanded").removeClass("fr-expanded"),r.parents(".fr-toolbar:not(.fr-inline)").css("zIndex",""),0!==e.parents(".fr-popup").length||g.opts.toolbarInline||(g.node.hasClass(e.get(0),"fr-active")?g.$tb.css("zIndex",(g.opts.zIndex||1)+4):g.$tb.css("zIndex",""));var p=t.find("a.fr-command.fr-active").first();g.helpers.isMobile()||(p.length?(g.accessibility.focusToolbarElement(p),s.scrollTop(Math.abs(p.parents(".fr-dropdown-content").offset().top-p.offset().top)-p.offset().top)):(g.accessibility.focusToolbarElement(e),s.scrollTop(0)))}function c(e){e.addClass("fr-blink"),setTimeout(function(){e.removeClass("fr-blink")},500);for(var t=e.data("cmd"),n=[];void 0!==e.data("param".concat(n.length+1));)n.push(e.data("param".concat(n.length+1)));var r=C(".fr-dropdown.fr-active");r.length&&(r.removeClass("fr-active").attr("aria-expanded",!1).next().attr("aria-hidden",!0).css("overflow","").find("> .fr-dropdown-wrapper").css("height",""),r.prev(".fr-expanded").removeClass("fr-expanded"),r.parents(".fr-toolbar:not(.fr-inline)").css("zIndex","")),e.parents(".fr-popup, .fr-toolbar").data("instance").commands.exec(t,n)}function t(e){var t=e.parents(".fr-popup, .fr-toolbar").data("instance"),n=g.popups.get("link.insert");if(0===e.parents(".fr-popup").length&&e.data("popup")&&!e.hasClass("fr-btn-active-popup")&&(e.attr("id")==="insertLink-".concat(g.id)&&n&&n.hasClass("fr-active")||e.addClass("fr-btn-active-popup")),0!==e.parents(".fr-popup").length||e.data("popup")||t.popups.hideAll(),t.popups.areVisible()&&!t.popups.areVisible(t)){for(var r=0;r<V.INSTANCES.length;r++)V.INSTANCES[r]!==t&&V.INSTANCES[r].popups&&V.INSTANCES[r].popups.areVisible()&&V.INSTANCES[r].$el.find(".fr-marker").remove();t.popups.hideAll()}g.node.hasClass(e.get(0),"fr-dropdown")?i(e):(!function o(e){c(e)}(e),V.COMMANDS[e.data("cmd")]&&!1!==V.COMMANDS[e.data("cmd")].refreshAfterCallback&&t.button.bulkRefresh())}function d(e){t(u(e.currentTarget))}function f(e){var t=e.find(".fr-dropdown.fr-active");t.length&&(t.removeClass("fr-active").attr("aria-expanded",!1).next().attr("aria-hidden",!0).css("overflow","").find("> .fr-dropdown-wrapper").css("height",""),t.parents(".fr-toolbar:not(.fr-inline)").css("zIndex",""),t.prev().removeClass("fr-expanded"))}function p(e){e.preventDefault(),e.stopPropagation()}function h(e){if(e.stopPropagation(),!g.helpers.isMobile())return!1}function m(e){var t=1<arguments.length&&arguments[1]!==undefined?arguments[1]:{},n=2<arguments.length?arguments[2]:undefined;if(g.helpers.isMobile()&&!1===t.showOnMobile)return"";var r=t.displaySelection;"function"==typeof r&&(r=r(g));var o="";if("options"!==t.type)if(r){var i="function"==typeof t.defaultSelection?t.defaultSelection(g):t.defaultSelection;o='<span style="width:'.concat(t.displaySelectionWidth||100,'px">').concat(g.language.translate(i||t.title),"</span>")}else o=g.icon.create(t.icon||e),o+='<span class="fr-sr-only">'.concat(g.language.translate(t.title)||"","</span>");var a=t.popup?' data-popup="true"':"",s=t.modal?' data-modal="true"':"",l=g.shortcuts.get("".concat(e,"."));l=l?" (".concat(l,")"):"";var c="".concat(e,"-").concat(g.id),d="dropdown-menu-".concat(c),f='<button id="'.concat(c,'"').concat(t.more_btn?' data-group-name="'.concat(c,'" '):"",'type="button" tabIndex="-1" role="button"').concat(t.toggle?' aria-pressed="false"':"").concat("dropdown"===t.type||"options"===t.type?' aria-controls="'.concat(d,'" aria-expanded="false" aria-haspopup="true"'):"").concat(t.disabled?' aria-disabled="true"':"",' title="').concat(g.language.translate(t.title)||"").concat(l,'" class="fr-command fr-btn').concat("dropdown"===t.type||"options"==t.type?" fr-dropdown":"").concat("options"==t.type?" fr-options":"").concat("more"==t.type?" fr-more":"").concat(t.displaySelection?" fr-selection":"").concat(t.back?" fr-back":"").concat(t.disabled?" fr-
679disabled":"").concat(n?"":" fr-hidden",'" data-cmd="').concat(e,'"').concat(a).concat(s,">").concat(o,"</button>");if("dropdown"===t.type||"options"===t.type){var p='<div id="'.concat(d,'" class="fr-dropdown-menu" role="listbox" aria-labelledby="').concat(c,'" aria-hidden="true"><div class="fr-dropdown-wrapper" role="presentation"><div class="fr-dropdown-content" role="presentation">');p+=function h(e,t){var n="";if(t.html)"function"==typeof t.html?n+=t.html.call(g):n+=t.html;else{var r=t.options;for(var o in"function"==typeof r&&(r=r()),n+='<ul class="fr-dropdown-list" role="presentation">',r)if(Object.prototype.hasOwnProperty.call(r,o)){var i=g.shortcuts.get("".concat(e,".").concat(o));i=i?'<span class="fr-shortcut">'.concat(i,"</span>"):"",n+='<li role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="'.concat("options"===t.type?e.replace(/Options/g,""):e,'" data-param1="').concat(o,'" title="').concat(r[o],'">').concat(g.language.translate(r[o]),"</a></li>")}n+="</ul>"}return n}(e,t),f+=p+="</div></div></div>"}return t.hasOptions&&t.hasOptions.apply(g)&&(f='<div class="fr-btn-wrap">'.concat(f," ").concat(m(e+"Options",Object.assign({},t,{type:"options",hasOptions:!1}),n)," </div>")),f}function e(o){var i=g.$tb&&g.$tb.data("instance")||g;if(!1===g.events.trigger("buttons.refresh"))return!0;setTimeout(function(){for(var e=i.selection.inEditor()&&i.core.hasFocus(),t=0;t<o.length;t++){var n=u(o[t]),r=n.data("cmd");0===n.parents(".fr-popup").length?e||V.COMMANDS[r]&&V.COMMANDS[r].forcedRefresh?i.button.refresh(n):g.node.hasClass(n.get(0),"fr-dropdown")||(n.removeClass("fr-active"),n.attr("aria-pressed")&&n.attr("aria-pressed",!1)):n.parents(".fr-popup").isVisible()&&i.button.refresh(n)}},0)}function n(){e(a),e(s)}function r(){a=[],s=[]}g.shared.popup_buttons||(g.shared.popup_buttons=[]),s=g.shared.popup_buttons;var o=null;function v(){clearTimeout(o),o=setTimeout(n,50)}return{_init:function b(){g.opts.toolbarInline?g.events.on("toolbar.show",n):(g.events.on("mouseup",v),g.events.on("keyup",v),g.events.on("blur",v),g.events.on("focus",v),g.events.on("contentChanged",v),g.helpers.isMobile()&&g.events.$on(g.$doc,"selectionchange",n)),g.events.on("shared.destroy",r)},build:m,buildList:function L(e,t){for(var n="",r=0;r<e.length;r++){var o=e[r],i=V.COMMANDS[o];i&&"undefined"!=typeof i.plugin&&g.opts.pluginsEnabled.indexOf(i.plugin)<0||(i?n+=m(o,i,void 0===t||0<=t.indexOf(o)):"|"===o?n+='<div class="fr-separator fr-vs" role="separator" aria-orientation="vertical"></div>':"-"===o&&(n+='<div class="fr-separator fr-hs" role="separator" aria-orientation="horizontal"></div>'))}return n},buildGroup:function E(e){var t="",n="";for(var r in e){var o=e[r];if(o.buttons){for(var i="",a="",s=0,l="left",c=V.TOOLBAR_VISIBLE_BUTTONS,d=0;d<o.buttons.length;d++){var f=o.buttons[d],p=V.COMMANDS[f];p||("|"==f?i+='<div class="fr-separator fr-vs" role="separator" aria-orientation="vertical"></div>':"-"==f&&(i+='<div class="fr-separator fr-hs" role="separator" aria-orientation="horizontal"></div>')),!p||p&&"undefined"!=typeof p.plugin&&g.opts.pluginsEnabled.indexOf(p.plugin)<0||(e[r].align!==undefined&&(l=e[r].align),e[r].buttonsVisible!==undefined&&(c=e[r].buttonsVisible),e.showMoreButtons&&c<=s?a+=m(f,p,!0):i+=m(f,p,!0),s++)}if(e.showMoreButtons&&c<s){var h=r,u=V.COMMANDS[h];u.more_btn=!0,i+=m(h,u,!0)}"trackChanges"!==r&&(t+='<div class="fr-btn-grp fr-float-'.concat(l,'">').concat(i,"</div>")),e.showMoreButtons&&0<a.length&&(n+='<div class="fr-more-toolbar" data-name="'.concat(r+"-"+g.id,'">').concat(a,"</div>"))}}return g.opts.toolbarBottom?g.helpers.isMobile()?'<div class="fr-bottom-extended">'.concat(n,"</div><div>").concat(t,"</div>"):"".concat(n,'<div class="fr-newline"></div>').concat(t):"".concat(t,'<div class="fr-newline"></div>').concat(n)},bindCommands:function y(t,e){g.events.bindClick(t,".fr-command:not(.fr-disabled)",d),g.events.$on(t,"".concat(g._mousedown," ").concat(g._mouseup," ").concat(g._move),".fr-dropdown-menu",p,!0),g.events.$on(t,"".concat(g._mousedown," ").concat(g._mouseup," ").concat(g._move),".fr-dropdown-menu .fr-dropdown-wrapper",h,!0);var n=t.get(0).ownerDocument,r="defaultView"in n?n.defaultView:n.parentWindow;function o(e){(!e||e.type===g._mouseup&&e.target!==u("html").get(0)||"keydown"===e.type&&(g.keys.isCharacter(e.which)&&!g.keys.ctrlKey(e)||e.which===V.KEYCODE.ESC))&&(f(t),g.opts.iframe&&function r(e){var t=e.find(".fr-popup.fr-active");if(t.length){t.removeClass("fr-active").attr("aria-expanded",!1).next().attr("aria-hidden",!0).css("overflow","").find("> .fr-dropdown-wrapper").css("height",""),t.parents(".fr-toolbar:not(.fr-inline)").css("zIndex",""),t.prev().removeClass("fr-expanded");var n=g.$tb.find(".fr-btn-active-popup");u(n[0]).removeClass("fr-btn-active-popup")}}(t))}g.events.$on(u(r),"".concat(g._mouseup," resize keydown"),o,!0),g.opts.iframe&&g.events.$on(g.$win,g._mou
vendor: 3,178 bytes, line 679
679seup,o,!0),g.node.hasClass(t.get(0),"fr-popup")?u.merge(s,t.find(".fr-btn").toArray()):u.merge(a,t.find(".fr-btn").toArray()),g.tooltip.bind(t,".fr-btn, .fr-title",e)},refresh:function S(e){var t,n=e.parents(".fr-popup, .fr-toolbar").data("instance")||g,r=e.data("cmd");g.node.hasClass(e.get(0),"fr-dropdown")?t=e.next():(e.removeClass("fr-active"),e.attr("aria-pressed")&&e.attr("aria-pressed",!1)),V.COMMANDS[r]&&V.COMMANDS[r].refresh?V.COMMANDS[r].refresh.apply(n,[e,t]):g.refresh[r]&&n.refresh[r](e,t)},bulkRefresh:n,exec:c,click:t,hideActiveDropdowns:f,addButtons:function N(e){for(var t=0;t<e.length;t++)a.push(e[t])},getButtons:C,getPosition:function T(e){var t=e.offset().left,n=g.opts.toolbarBottom?10:e.outerHeight()-10;return{left:t,top:e.offset().top+n}}}},V.ICON_TEMPLATES={font_awesome:'<i class="fa fa-[NAME]" aria-hidden="true"></i>',font_awesome_5:'<i class="fas fa-[FA5NAME]" aria-hidden="true"></i>',font_awesome_5r:'<i class="far fa-[FA5NAME]" aria-hidden="true"></i>',font_awesome_5l:'<i class="fal fa-[FA5NAME]" aria-hidden="true"></i>',font_awesome_5b:'<i class="fab fa-[FA5NAME]" aria-hidden="true"></i>',text:'<span style="text-align: center;">[NAME]</span>',image:"<img src=[SRC] alt=[ALT] />",svg:'<svg class="fr-svg" focusable="false" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="[PATH]"/></svg>',empty:" "},V.ICONS={bold:{NAME:"bold",SVG_KEY:"bold"},italic:{NAME:"italic",SVG_KEY:"italic"},underline:{NAME:"underline",SVG_KEY:"underline"},strikeThrough:{NAME:"strikethrough",SVG_KEY:"strikeThrough"},subscript:{NAME:"subscript",SVG_KEY:"subscript"},superscript:{NAME:"superscript",SVG_KEY:"superscript"},cancel:{NAME:"cancel",SVG_KEY:"cancel"},color:{NAME:"tint",SVG_KEY:"textColor"},outdent:{NAME:"outdent",SVG_KEY:"outdent"},indent:{NAME:"indent",SVG_KEY:"indent"},undo:{NAME:"rotate-left",FA5NAME:"undo",SVG_KEY:"undo"},redo:{NAME:"rotate-right",FA5NAME:"redo",SVG_KEY:"redo"},insert:{NAME:"insert",SVG_KEY:"insert"},insertAll:{NAME:"insertAll",SVG_KEY:"insertAll"},insertHR:{NAME:"minus",SVG_KEY:"horizontalLine"},clearFormatting:{NAME:"eraser",SVG_KEY:"clearFormatting"},selectAll:{NAME:"mouse-pointer",SVG_KEY:"selectAll"},minimize:{NAME:"minimize",SVG_KEY:"minimize"},moreText:{NAME:"ellipsis-v",SVG_KEY:"textMore"},moreParagraph:{NAME:"ellipsis-v",SVG_KEY:"paragraphMore"},moreRich:{NAME:"ellipsis-v",SVG_KEY:"insertMore"},moreMisc:{NAME:"ellipsis-v",SVG_KEY:"more"}},V.DefineIconTemplate=function(e,t){V.ICON_TEMPLATES[e]=t},V.DefineIcon=function(e,t){V.ICONS[e]=t},Object.assign(V.DEFAULTS,{iconsTemplate:"svg"}),V.MODULES.icon=function(o){return{create:function i(n){var e=null,r=V.ICONS[n];if(void 0!==r){var t=r.template||V.ICON_DEFAULT_TEMPLATE||o.opts.iconsTemplate;t&&t.apply&&(t=t.apply(o)),r.FA5NAME||(r.FA5NAME=r.NAME),"svg"!==t||r.PATH||(r.PATH=V.SVG[r.SVG_KEY]||""),t&&(t=V.ICON_TEMPLATES[t])&&(e=t.replace(/\[([a-zA-Z0-9]*)\]/g,function(e,t){return"NAME"===t?r[t]||n:r[t]}))}return e||n},getTemplate:function r(e){var t=V.ICONS[e],n=o.opts.iconsTemplate;return void 0!==t?n=t.template||V.ICON_DEFAULT_TEMPLATE||o.opts.iconsTemplate:n},getFileIcon:function n(e){var t=V.FILEICONS[e];return void 0!==t?t:e}}},V
vendor: 72,367 bytes, line 679
679.SVG={add:"M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6V13z",advancedImageEditor:"M3,17v2h6v-2H3z M3,5v2h10V5H3z M13,21v-2h8v-2h-8v-2h-2v6H13z M7,9v2H3v2h4v2h2V9H7z M21,13v-2H11v2H21z M15,9h2V7h4V5h-4 V3h-2V9z",alignCenter:"M9,18h6v-2H9V18z M6,11v2h12v-2H6z M3,6v2h18V6H3z",alignJustify:"M3,18h18v-2H3V18z M3,11v2h18v-2H3z M3,6v2h18V6H3z",alignLeft:"M3,18h6v-2H3V18z M3,11v2h12v-2H3z M3,6v2h18V6H3z",alignRight:"M15,18h6v-2h-6V18z M9,11v2h12v-2H9z M3,6v2h18V6H3z",anchors:"M16,4h-4H8C6.9,4,6,4.9,6,6v4v10l6-2.6l6,2.6V10V6C18,4.9,17.1,4,16,4z M16,17l-4-1.8L8,17v-7V6h4h4v4V17z",autoplay:"M 7.570312 0.292969 C 7.542969 0.292969 7.515625 0.292969 7.488281 0.296875 C 7.203125 0.324219 6.984375 0.539062 6.980469 0.792969 L 6.925781 3.535156 C 2.796875 3.808594 -0.0078125 6.425781 -0.0859375 10.09375 C -0.121094 11.96875 0.710938 13.6875 2.265625 14.921875 C 3.769531 16.117188 5.839844 16.796875 8.097656 16.828125 C 8.140625 16.828125 12.835938 16.898438 13.035156 16.886719 C 15.171875 16.796875 17.136719 16.128906 18.558594 15.003906 C 20.066406 13.816406 20.882812 12.226562 20.917969 10.40625 C 20.960938 8.410156 20.023438 6.605469 18.289062 5.335938 C 18.214844 5.277344 18.128906 5.230469 18.035156 5.203125 C 17.636719 5.074219 17.222656 5.199219 17 5.476562 L 15.546875 7.308594 C 15.304688 7.609375 15.363281 8.007812 15.664062 8.265625 C 16.351562 8.851562 16.707031 9.625 16.6875 10.5 C 16.652344 12.25 15.070312 13.390625 12.757812 13.535156 C 12.59375 13.539062 8.527344 13.472656 8.164062 13.464844 C 5.703125 13.429688 4.101562 12.191406 4.140625 10.3125 C 4.175781 8.570312 5.132812 7.46875 6.847656 7.199219 L 6.796875 9.738281 C 6.792969 9.992188 7 10.214844 7.285156 10.253906 C 7.3125 10.257812 7.339844 10.257812 7.367188 10.257812 C 7.503906 10.261719 7.632812 10.222656 7.738281 10.148438 L 14.039062 5.785156 C 14.171875 5.691406 14.253906 5.558594 14.253906 5.410156 C 14.257812 5.261719 14.1875 5.125 14.058594 5.027344 L 7.941406 0.414062 C 7.835938 0.335938 7.707031 0.292969 7.570312 0.292969 ",back:"M20 11L7.83 11 11.425 7.405 10.01 5.991 5.416 10.586 5.414 10.584 4 11.998 4.002 12 4 12.002 5.414 13.416 5.416 13.414 10.01 18.009 11.425 16.595 7.83 13 20 13 20 13 20 11 20 11Z",backgroundColor:"M9.91752,12.24082l7.74791-5.39017,1.17942,1.29591-6.094,7.20747L9.91752,12.24082M7.58741,12.652l4.53533,4.98327a.93412.93412,0,0,0,1.39531-.0909L20.96943,8.7314A.90827.90827,0,0,0,20.99075,7.533l-2.513-2.76116a.90827.90827,0,0,0-1.19509-.09132L7.809,11.27135A.93412.93412,0,0,0,7.58741,12.652ZM2.7939,18.52772,8.41126,19.5l1.47913-1.34617-3.02889-3.328Z",blockquote:"M10.31788,5l.93817,1.3226A12.88271,12.88271,0,0,0,8.1653,9.40125a5.54242,5.54242,0,0,0-.998,3.07866v.33733q.36089-.04773.66067-.084a4.75723,4.75723,0,0,1,.56519-.03691,2.87044,2.87044,0,0,1,2.11693.8427,2.8416,2.8416,0,0,1,.8427,2.09274,3.37183,3.37183,0,0,1-.8898,2.453A3.143,3.143,0,0,1,8.10547,19,3.40532,3.40532,0,0,1,5.375,17.7245,4.91156,4.91156,0,0,1,4.30442,14.453,9.3672,9.3672,0,0,1,5.82051,9.32933,14.75716,14.75716,0,0,1,10.31788,5Zm8.39243,0,.9369,1.3226a12.88289,12.88289,0,0,0-3.09075,3.07865,5.54241,5.54241,0,0,0-.998,3.07866v.33733q.33606-.04773.63775-.084a4.91773,4.91773,0,0,1,.58938-.03691,2.8043,2.8043,0,0,1,2.1042.83,2.89952,2.89952,0,0,1,.80578,2.10547,3.42336,3.42336,0,0,1-.86561,2.453A3.06291,3.06291,0,0,1,16.49664,19,3.47924,3.47924,0,0,1,13.742,17.7245,4.846,4.846,0,0,1,12.64721,14.453,9.25867,9.25867,0,0,1,14.17476,9.3898,15.26076,15.26076,0,0,1,18.71031,5Z",bold:"M15.25,11.8h0A3.68,3.68,0,0,0,17,9a3.93,3.93,0,0,0-3.86-4H6.65V19h7a3.74,3.74,0,0,0,3.7-3.78V15.1A3.64,3.64,0,0,0,15.25,11.8ZM8.65,7h4.2a2.09,2.09,0,0,1,2,1.3,2.09,2.09,0,0,1-1.37,2.61,2.23,2.23,0,0,1-.63.09H8.65Zm4.6,10H8.65V13h4.6a2.09,2.09,0,0,1,2,1.3,2.09,2.09,0,0,1-1.37,2.61A2.23,2.23,0,0,1,13.25,17Z",cancel:"M13.4,12l5.6,5.6L17.6,19L12,13.4L6.4,19L5,17.6l5.6-5.6L5,6.4L6.4,5l5.6,5.6L17.6,5L19,6.4L13.4,12z",cellBackground:"M16.6,12.4L7.6,3.5L6.2,4.9l2.4,2.4l-5.2,5.2c-0.6,0.6-0.6,1.5,0,2.1l5.5,5.5c0.3,0.3,0.7,0.4,1.1,0.4s0.8-0.1,1.1-0.4 l5.5-5.5C17.2,14,17.2,13,16.6,12.4z M5.2,13.5L10,8.7l4.8,4.8H5.2z M19,15c0,0-2,2.2-2,3.5c0,1.1,0.9,2,2,2s2-0.9,2-2 C21,17.2,19,15,19,15z",cellBorderColor:"M22,22H2v2h20V22z",cellOptions:"M20,5H4C2.9,5,2,5.9,2,7v10c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V7C22,5.9,21.1,5,20,5z M9.5,6.5h5V9h-5V6.5z M8,17.5H4 c-0.3,0-0.5-0.2-0.5-0.4c0,0,0,0,0,0V17v-2H8V17.5z M8,13.5H3.5v-3H8V13.5z M8,9H3.5V7c0-0.3,0.2-0.5,0.4-0.5c0,0,0,0,0,0H8V9z M14.5,17.5h-5V15h5V17.5z M20.5,17c0,0.3-0.2,0.5-0.4,0.5c0,0,0,0,0,0H16V15h4.5V17z M20.5,13.5H16v-3h4.5V13.5z M20.5,9H16V6.5h4 c0.3,0,0.5,0.2,0.5,0.4c0,0,0,0,0,0V9z",cellStyle:"M20,19.9l0.9,3.6l-3.2-1.9l-3.3,1.9l0.8-3.6L12.3,17h3.8l1.7-3.5l1.4,3.5H23L20,19.9z M20,5H4C2.9,5,2,5.9,2,7v10 c0,1.1,0.9,2,2,2h7.5l-0.6-0.6L10,17.5H9.5V15h5.4l1.1-2.3v-2.2h4.5v3H20l0.6,1.5H22V7C22,5.9,21.1,5,20,5z M3.5,7 c0-0.3,0.2-0.5,0.4-0.5c0,0,0,0,0.1,0h4V9H3.5V7z M3.5,10.5H8v3H3.5V10.5z M4,17.5c-0.3,0-0.5-0.2-0.5-0.4c0,0,0,0,0-0.1v-2H8v2.5H4 z M14.5,9h-5V6.5h5V9z M20.5,9H16V6.5h4c0.3,0,0.5,0.2,0.5,0.4c0,0,0,0,0,0.1V9z",clearFormatting:"M11.48,10.09l-1.2-1.21L8.8,7.41,6.43,5,5.37,6.1,8.25,9,4.66,19h2l1.43-4h5.14l1.43,4h2l-.89-2.51L18.27,19l1.07-1.06L14.59,13.2ZM8.8,13l.92-2.56L12.27,13Zm.56-7.15L9.66,5h2l1.75,4.9Z",close:"M13.4,12l5.6,5.6L17.6,19L12,13.4L6.4,19L5,17.6l5.6-5.6L5,6.4L6.4,5l5.6,5.6L17.6,5L19,6.4L13.4,12z",codeView:"M9.4,16.6,4.8,12,9.4,7.4,8,6,2,12l6,6Zm5.2,0L19.2,12,14.6,7.4,16,6l6,6-6,6Z",cogs:"M18.877 12.907a6.459 6.459 0 0 0 0 -1.814l1.952 -1.526a0.468 0.468 0 0 0 0.111 -0.593l-1.851 -3.2a0.461 0.461 0 0 0 -0.407 -0.231 0.421 0.421 0 0 0 -0.157 0.028l-2.3 0.925a6.755 6.755 0 0 0 -1.563 -0.907l-0.352 -2.452a0.451 0.451 0 0 0 -0.453 -0.388h-3.7a0.451 0.451 0 0 0 -0.454 0.388L9.347 5.588A7.077 7.077 0 0 0 7.783 6.5l-2.3 -0.925a0.508 0.508 0 0 0 -0.166 -0.028 0.457 0.457 0 0 0 -0.4 0.231l-1.851 3.2a0.457 0.457 0 0 0 0.111 0.593l1.952 1.526A7.348 7.348 0 0 0 5.063 12a7.348 7.348 0 0 0 0.064 0.907L3.175 14.433a0.468 0.468 0 0 0 -0.111 0.593l1.851 3.2a0.461 0.461 0 0 0 0.407 0.231 0.421 0.421 0 0 0 0.157 -0.028l2.3 -0.925a6.74 6.74 0 0 0 1.564 0.907L9.7 20.864a0.451 0.451 0 0 0 0.454 0.388h3.7a0.451 0.451 0 0 0 0.453 -0.388l0.352 -2.452a7.093 7.093 0 0 0 1.563 -0.907l2.3 0.925a0.513 0.513 0 0 0 0.167 0.028 0.457 0.457 0 0 0 0.4 -0.231l1.851 -3.2a0.468 0.468 0 0 0 -0.111 -0.593Zm-0.09 2.029l-0.854 1.476 -2.117 -0.852 -0.673 0.508a5.426 5.426 0 0 1 -1.164 0.679l-0.795 0.323 -0.33 2.269h-1.7l-0.32 -2.269 -0.793 -0.322a5.3 5.3 0 0 1 -1.147 -0.662L8.2 15.56l-2.133 0.86 -0.854 -1.475 1.806 -1.411 -0.1 -0.847c-0.028 -0.292 -0.046 -0.5 -0.046 -0.687s0.018 -0.4 0.045 -0.672l0.106 -0.854L5.217 9.064l0.854 -1.475 2.117 0.851 0.673 -0.508a5.426 5.426 0 0 1 1.164 -0.679l0.8 -0.323 0.331 -2.269h1.7l0.321 2.269 0.792 0.322a5.3 5.3 0 0 1 1.148 0.661l0.684 0.526 2.133 -0.859 0.853 1.473 -1.8 1.421 0.1 0.847a5 5 0 0 1 0.046 0.679c0 0.193 -0.018 0.4 -0.045 0.672l-0.106 0.853ZM12 14.544A2.544 2.544 0 1 1 14.546 12 2.552 2.552 0 0 1 12 14.544Z",columns:"M20,5H4C2.9,5,2,5.9,2,7v10c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V7C22,5.9,21.1,5,20,5z M8,17.5H4c-0.3,0-0.5-0.2-0.5-0.4 c0,0,0,0,0,0V17v-2H8V17.5z M8,13.5H3.5v-3H8V13.5z M8,9H3.5V7c0-0.3,0.2-0.5,0.4-0.5c0,0,0,0,0,0H8V9z M20.5,17 c0,0.3-0.2,0.5-0.4,0.5c0,0,0,0,0,0H16V15h4.5V17z M20.5,13.5H16v-3h4.5V13.5z M20.5,9H16V6.5h4c0.3,0,0.5,0.2,0.5,0.4c0,0,0,0,0,0 V9z",edit:"M17,11.2L12.8,7L5,14.8V19h4.2L17,11.2z M7,16.8v-1.5l5.6-5.6l1.4,1.5l-5.6,5.6H7z M13.5,6.3l0.7-0.7c0.8-0.8,2.1-0.8,2.8,0 c0,0,0,0,0,0L18.4,7c0.8,0.8,0.8,2,0,2.8l-0.7,0.7L13.5,6.3z",exitFullscreen:"M5,16H8v3h2V14H5ZM8,8H5v2h5V5H8Zm6,11h2V16h3V14H14ZM16,8V5H14v5h5V8Z",fileInsert:"M 8.09375 12.75 L 5.90625 12.75 C 5.542969 12.75 5.25 12.394531 5.25 11.953125 L 5.25 6.375 L 2.851562 6.375 C 2.367188 6.375 2.121094 5.660156 2.464844 5.242188 L 6.625 0.1875 C 6.832031 -0.0585938 7.167969 -0.0585938 7.371094 0.1875 L 11.535156 5.242188 C 11.878906 5.660156 11.632812 6.375 11.148438 6.375 L 8.75 6.375 L 8.75 11.953125 C 8.75 12.394531 8.457031 12.75 8.09375 12.75 Z M 14 12.484375 L 14 16.203125 C 14 16.644531 13.707031 17 13.34375 17 L 0.65625 17 C 0.292969 17 0 16.644531 0 16.203125 L 0 12.484375 C 0 12.042969 0.292969 11.6875 0.65625 11.6875 L 4.375 11.6875 L 4.375 11.953125 C 4.375 12.980469 5.0625 13.8125 5.90625 13.8125 L 8.09375 13.8125 C 8.9375 13.8125 9.625 12.980469 9.625 11.953125 L 9.625 11.6875 L 13.34375 11.6875 C 13.707031 11.6875 14 12.042969 14 12.484375 Z M 10.609375 15.40625 C 10.609375 15.039062 10.363281 14.742188 10.0625 14.742188 C 9.761719 14.742188 9.515625 15.039062 9.515625 15.40625 C 9.515625 15.773438 9.761719 16.070312 10.0625 16.070312 C 10.363281 16.070312 10.609375 15.773438 10.609375 15.40625 Z M 12.359375 15.40625 C 12.359375 15.039062 12.113281 14.742188 11.8125 14.742188 C 11.511719 14.742188 11.265625 15.039062 11.265625 15.40625 C 11.265625 15.773438 11.511719 16.070312 11.8125 16.070312 C 12.113281 16.070312 12.359375 15.773438 12.359375 15.40625 Z M 12.359375 15.40625 ",fileManager:"M 0 5.625 L 20.996094 5.625 L 21 15.75 C 21 16.371094 20.410156 16.875 19.6875 16.875 L 1.3125 16.875 C 0.585938 16.875 0 16.371094 0 15.75 Z M 0 5.625 M 21 4.5 L 0 4.5 L 0 2.25 C 0 1.628906 0.585938 1.125 1.3125 1.125 L 6.921875 1.125 C 7.480469 1.125 8.015625 1.316406 8.40625 1.652344 L 9.800781 2.847656 C 10.195312 3.183594 10.730469 3.375 11.289062 3.375 L 19.6875 3.375 C 20.414062 3.375 21 3.878906 21 4.5 Z M 21 4.5",markdown:"M5.55006 17.75V7.35L8.96006 16.89H10.7101L14.2301 7.37V14.0729C14.3951 14.1551 14.5499 14.265 14.6875 14.4026L14.7001 14.4151V11.64C14.7001 10.8583 15.2127 10.1963 15.9201 9.97171V5H13.6801L10.0401 14.86L6.51006 5H4.00006V17.75H5.55006ZM17.2001 11.64C17.2001 11.2258 16.8643 10.89 16.4501 10.89C16.0359 10.89 15.7001 11.2258 15.7001 11.64V16.8294L13.9804 15.1097C13.6875 14.8168 13.2126 14.8168 12.9197 15.1097C12.6269 15.4026 12.6269 15.8775 12.9197 16.1703L15.9197 19.1703C16.2126 19.4632 16.6875 19.4632 16.9804 19.1703L19.9804 16.1703C20.2733 15.8775 20.2733 15.4026 19.9804 15.1097C19.6875 14.8168 19.2126 14.8168 18.9197 15.1097L17.2001 16.8294V11.64Z",fontAwesome:"M18.99018,13.98212V7.52679c-.08038-1.21875-1.33929-.683-1.33929-.683-2.933,1.39282-4.36274.61938-5.85938.15625a6.23272,6.23272,0,0,0-2.79376-.20062l-.00946.004A1.98777,1.98777,0,0,0,7.62189,5.106a.984.984,0,0,0-.17517-.05432c-.02447-.0055-.04882-.01032-.0736-.0149A.9565.9565,0,0,0,7.1908,5H6.82539a.9565.9565,0,0,0-.18232.0368c-.02472.00458-.04907.0094-.07348.01484a.985.985,0,0,0-.17523.05438,1.98585,1.98585,0,0,0-.573,3.49585v9.394A1.004,1.004,0,0,0,6.82539,19H7.1908a1.00406,1.00406,0,0,0,1.00409-1.00409V15.52234c3.64221-1.09827,5.19709.64282,7.09888.57587a5.57291,5.57291,0,0,0,3.25446-1.05805A1.2458,1.2458,0,0,0,18.99018,13.98212Z",fontFamily:"M16,19h2L13,5H11L6,19H8l1.43-4h5.14Zm-5.86-6L12,7.8,13.86,13Z",fontSize:"M20.75,19h1.5l-3-10h-1.5l-3,10h1.5L17,16.5h3Zm-3.3-4,1.05-3.5L19.55,15Zm-5.7,4h2l-5-14h-2l-5,14h2l1.43-4h5.14ZM5.89,13,7.75,7.8,9.61,13Z",fullscreen:"M7,14H5v5h5V17H7ZM5,10H7V7h3V5H5Zm12,7H14v2h5V14H17ZM14,5V7h3v3h2V5Z",help:"M11,17h2v2h-2V17z M12,5C9.8,5,8,6.8,8,9h2c0-1.1,0.9-2,2-2s2,0.9,2,2c0,2-3,1.7-3,5v1h2v-1c0-2.2,3-2.5,3-5 C16,6.8,14.2,5,12,5z",horizontalLine:"M5,12h14 M19,11H5v2h14V11z",imageAltText:"M19,7h-6v12h-2V7H5V5h6h2h6V7z",imageCaption:"M14.2,11l3.8,5H6l3-3.9l2.1,2.7L14,11H14.2z M8.5,11c0.8,0,1.5-0.7,1.5-1.5S9.3,8,8.5,8S7,8.7,7,9.5C7,10.3,7.7,11,8.5,11z M22,6v12c0,1.1-0.9,2-2,2H4c-1.1,0-2-0.9-2-2V6c0-1.1,0.9-2,2-2h16C21.1,4,22,4.9,22,6z M20,8.8V6H4v12h16V8.8z M22,22H2v2h20V22z",imageClass:"M9.5,13.4l-2.9-2.9h3.8L12.2,7l1.4,3.5h3.8l-3,2.9l0.9,3.6L12,15.1L8.8,17L9.5,13.4z M22,6v12c0,1.1-0.9,2-2,2H4 c-1.1,0-2-0.9-2-2V6c0-1.1,0.9-2,2-2h16C21.1,4,22,4.9,22,6z M20,6H4v12h16V8.8V6z",imageDisplay:"M3,5h18v2H3V5z M13,9h8v2h-8V9z M13,13h8v2h-8V13z M3,17h18v2H3V17z M3,9h8v6H3V9z",imageManager:"M20,6h-7l-2-2H4C2.9,4,2,4.9,2,6v12c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V8C22,6.9,21.1,6,20,6z M20,18H4V6h6.2l2,2H20V18z M18,16l-3.8-5H14l-2.9,3.8L9,12.1L6,16H18z M10,9.5C10,8.7,9.3,8,8.5,8S7,8.7,7,9.5S7.7,11,8.5,11S10,10.3,10,9.5z",imageSize:"M16.9,4c-0.3,0-0.5,0.2-0.8,0.3L3.3,13c-0.9,0.6-1.1,1.9-0.5,2.8l2.2,3.3c0.4,0.7,1.2,1,2,0.8c0.3,0,0.5-0.2,0.8-0.3 L20.7,11c0.9-0.6,1.1-1.9,0.5-2.8l-2.2-3.3C18.5,4.2,17.7,3.9,16.9,4L16.9,4z M16.9,9.9L18.1,9l-2-2.9L17,5.6c0.1,0,0.1-0.1,0.2-0.1 c0.2,0,0.4,0,0.5,0.2L19.9,9c0.2,0.2,0.1,0.5-0.1,0.7L7,18.4c-0.1,0-0.1,0.1-0.2,0.1c-0.2,0-0.4,0-0.5-0.2L4.1,15 c-0.2-0.2-0.1-0.5,0.1-0.7L5,13.7l2,2.9l1.2-0.8l-2-2.9L7.5,12l1.1,1.7l1.2-0.8l-1.1-1.7l1.2-0.8l2,2.9l1.2-0.8l-2-2.9l1.2-0.8 l1.1,1.7l1.2-0.8l-1.1-1.7L14.9,7L16.9,9.9z",indent:"M3,9v6l3-3L3,9z M3,19h18v-2H3V19z M3,7h18V5H3V7z M9,11h12V9H9V11z M9,15h12v-2H9V15z",inlineClass:"M9.9,13.313A1.2,1.2,0,0,1,9.968,13H6.277l1.86-5.2,1.841,5.148A1.291,1.291,0,0,1,11.212,12h.426l-2.5-7h-2l-5,14h2l1.43-4H9.9Zm2.651,6.727a2.884,2.884,0,0,1-.655-2.018v-2.71A1.309,1.309,0,0,1,13.208,14h3.113a3.039,3.039,0,0,1,2,1.092s1.728,1.818,2.964,2.928a1.383,1.383,0,0,1,.318,1.931,1.44,1.44,0,0,1-.19.215l-3.347,3.31a1.309,1.309,0,0,1-1.832.258h0a1.282,1.282,0,0,1-.258-.257l-1.71-1.728Zm2.48-3.96a.773.773,0,1,0,.008,0Z",inlineStyle:"M11.88,15h.7l.7-1.7-3-8.3h-2l-5,14h2l1.4-4Zm-4.4-2,1.9-5.2,1.9,5.2ZM15.4,21.545l3.246,1.949-.909-3.637L20.72,17H16.954l-1.429-3.506L13.837,17H10.071l2.857,2.857-.779,3.637Z",insert:"M13.889,11.611c-0.17,0.17-0.443,0.17-0.612,0l-3.189-3.187l-3.363,3.36c-0.171,0.171-0.441,0.171-0.612,0c-0.172-0.169-0.172-0.443,0-0.611l3.667-3.669c0.17-0.17,0.445-0.172,0.614,0l3.496,3.493C14.058,11.167,14.061,11.443,13.889,11.611 M18.25,10c0,4.558-3.693,8.25-8.25,8.25c-4.557,0-8.25-3.692-8.25-8.25c0-4.557,3.693-8.25,8.25-8.25C14.557,1.75,18.25,5.443,18.25,10 M17.383,10c0-4.07-3.312-7.382-7.383-7.382S2.618,5.93,2.618,10S5.93,17.381,10,17.381S17.383,14.07,17.383,10",insertEmbed:"M20.73889,15.45929a3.4768,3.4768,0,0,0-5.45965-.28662L9.5661,12.50861a3.49811,3.49811,0,0,0-.00873-1.01331l5.72174-2.66809a3.55783,3.55783,0,1,0-.84527-1.81262L8.70966,9.6839a3.50851,3.50851,0,1,0,.0111,4.63727l5.7132,2.66412a3.49763,3.49763,0,1,0,6.30493-1.526ZM18.00745,5.01056A1.49993,1.49993,0,1,1,16.39551,6.3894,1.49994,1.49994,0,0,1,18.00745,5.01056ZM5.99237,13.49536a1.49989,1.49989,0,1,1,1.61194-1.37878A1.49982,1.49982,0,0,1,5.99237,13.49536Zm11.78211,5.494a1.49993,1.49993,0,1,1,1.61193-1.37885A1.49987,1.49987,0,0,1,17.77448,18.98932Z",insertFile:"M7,3C5.9,3,5,3.9,5,5v14c0,1.1,0.9,2,2,2h10c1.1,0,2-0.9,2-2V7.6L14.4,3H7z M17,19H7V5h6v4h4V19z",insertImage:"M14.2,11l3.8,5H6l3-3.9l2.1,2.7L14,11H14.2z M8.5,11c0.8,0,1.5-0.7,1.5-1.5S9.3,8,8.5,8S7,8.7,7,9.5C7,10.3,7.7,11,8.5,11z M22,6v12c0,1.1-0.9,2-2,2H4c-1.1,0-2-0.9-2-2V6c0-1.1,0.9-2,2-2h16C21.1,4,22,4.9,22,6z M20,8.8V6H4v12h16V8.8z",insertLink:"M11,17H7A5,5,0,0,1,7,7h4V9H7a3,3,0,0,0,0,6h4ZM17,7H13V9h4a3,3,0,0,1,0,6H13v2h4A5,5,0,0,0,17,7Zm-1,4H8v2h8Z",insertMore:"M16.5,13h-6v6h-2V13h-6V11h6V5h2v6h6Zm5,4.5A1.5,1.5,0,1,1,20,16,1.5,1.5,0,0,1,21.5,17.5Zm0-4A1.5,1.5,0,1,1,20,12,1.5,1.5,0,0,1,21.5,13.5Zm0-4A1.5,1.5,0,1,1,20,8,1.5,1.5,0,0,1,21.5,9.5Z",insertTable:"M20,5H4C2.9,5,2,5.9,2,7v2v1.5v3V15v2c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2v-2v-1.5v-3V9V7C22,5.9,21.1,5,20,5z M9.5,13.5v-3 h5v3H9.5z M14.5,15v2.5h-5V15H14.5z M9.5,9V6.5h5V9H9.5z M3.5,7c0-0.3,0.2-0.5,0.5-0.5h4V9H3.5V7z M3.5,10.5H8v3H3.5V10.5z M3.5,17 v-2H8v2.5H4C3.7,17.5,3.5,17.3,3.5,17z M20.5,17c0,0.3-0.2,0.5-0.5,0.5h-4V15h4.5V17z M20.5,13.5H16v-3h4.5V13.5z M16,9V6.5h4 c0.3,0,0.5,0.2,0.5,0.5v2H16z",insertVideo:"M15,8v8H5V8H15m2,2.5V7a1,1,0,0,0-1-1H4A1,1,0,0,0,3,7V17a1,1,0,0,0,1,1H16a1,1,0,0,0,1-1V13.5l2.29,2.29A1,1,0,0,0,21,15.08V8.91a1,1,0,0,0-1.71-.71Z",upload:"M12 6.66667a4.87654 4.87654 0 0 1 4.77525 3.92342l0.29618 1.50268 1.52794 0.10578a2.57021 2.57021 0 0 1 -0.1827 5.13478H6.5a3.49774 3.49774 0 0 1 -0.3844 -6.97454l1.06682 -0.11341L7.678 9.29387A4.86024 4.86024 0 0 1 12 6.66667m0 -2A6.871 6.871 0 0 0 5.90417 8.37 5.49773 5.49773 0 0 0 6.5 19.33333H18.41667a4.57019 4.57019 0 0 0 0.32083 -9.13A6.86567 6.86567 0 0 0 12 4.66667Zm0.99976 7.2469h1.91406L11.99976 9 9.08618 11.91357h1.91358v3H11V16h2V14h-0.00024Z",uploadFiles:"M12 6.66667a4.87654 4.87654 0 0 1 4.77525 3.92342l0.29618 1.50268 1.52794 0.10578a2.57021 2.57021 0 0 1 -0.1827 5.13478H6.5a3.49774 3.49774 0 0 1 -0.3844 -6.97454l1.06682 -0.11341L7.678 9.29387A4.86024 4.86024 0 0 1 12 6.66667m0 -2A6.871 6.871 0 0 0 5.90417 8.37 5.49773 5.49773 0 0 0 6.5 19.33333H18.41667a4.57019 4.57019 0 0 0 0.32083 -9.13A6.86567 6.86567 0 0 0 12 4.66667Zm0.99976 7.2469h1.91406L11.99976 9 9.08618 11.91357h1.91358v3H11V16h2V14h-0.00024Z",italic:"M11.76,9h2l-2.2,10h-2Zm1.68-4a1,1,0,1,0,1,1,1,1,0,0,0-1-1Z",search:"M15.5 14h-0.79l-0.28 -0.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09 -0.59 4.23 -1.57l0.27 0.28v0.79l5 4.99L20.49 19l-4.99 -5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z",lineHeight:"M6.25,7h2.5L5.25,3.5,1.75,7h2.5V17H1.75l3.5,3.5L8.75,17H6.25Zm4-2V7h12V5Zm0,14h12V17h-12Zm0-6h12V11h-12Z",linkStyles:"M19,17.9l0.9,3.6l-3.2-1.9l-3.3,1.9l0.8-3.6L11.3,15h3.8l1.7-3.5l1.4,3.5H22L19,17.9z M20,12c0,0.3-0.1,0.7-0.2,1h2.1 c0.1-0.3,0.1-0.6,0.1-1c0-2.8-2.2-5-5-5h-4v2h4C18.7,9,20,10.3,20,12z M14.8,11H8v2h3.3h2.5L14.8,11z M9.9,16.4L8.5,15H7 c-1.7,0-3-1.3-3-3s1.3-3,3-3h4V7H7c-2.8,0-5,2.2-5,5s2.2,5,5,5h3.5L9.9,16.4z",mention:"M12.4,5c-4.1,0-7.5,3.4-7.5,7.5S8.3,20,12.4,20h3.8v-1.5h-3.8c-3.3,0-6-2.7-6-6s2.7-6,6-6s6,2.7,6,6v1.1 c0,0.6-0.5,1.2-1.1,1.2s-1.1-0.6-1.1-1.2v-1.1c0-2.1-1.7-3.8-3.8-3.8s-3.7,1.7-3.7,3.8s1.7,3.8,3.8,3.8c1,0,2-0.4,2.7-1.1 c0.5,0.7,1.3,1.1,2.2,1.1c1.5,0,2.6-1.2,2.6-2.7v-1.1C19.9,8.4,16.6,5,12.4,5z M12.4,14.7c-1.2,0-2.3-1-2.3-2.2s1-2.3,2.3-2.3 s2.3,1,2.3,2.3S13.6,14.7,12.4,14.7z",minimize:"M5,12h14 M19,11H5v2h14V11z",more:"M13.5,17c0,0.8-0.7,1.5-1.5,1.5s-1.5-0.7-1.5-1.5s0.7-1.5,1.5-1.5S13.5,16.2,13.5,17z M13.5,12c0,0.8-0.7,1.5-1.5,1.5 s-1.5-0.7-1.5-1.5s0.7-1.5,1.5-1.5S13.5,11.2,13.5,12z M13.5,7c0,0.8-0.7,1.5-1.5,1.5S10.5,7.8,10.5,7s0.7-1.5,1.5-1.5 S13.5,6.2,13.5,7z",openLink:"M17,17H7V7h3V5H7C6,5,5,6,5,7v10c0,1,1,2,2,2h10c1,0,2-1,2-2v-3h-2V17z M14,5v2h1.6l-5.8,5.8l1.4,1.4L17,8.4V10h2V5H14z",orderedList:"M2.5,16h2v.5h-1v1h1V18h-2v1h3V15h-3Zm1-7h1V5h-2V6h1Zm-1,2H4.3L2.5,13.1V14h3V13H3.7l1.8-2.1V10h-3Zm5-5V8h14V6Zm0,12h14V16H7.5Zm0-5h14V11H7.5Z",outdent:"M3,12l3,3V9L3,12z M3,19h18v-2H3V19z M3,7h18V5H3V7z M9,11h12V9H9V11z M9,15h12v-2H9V15z",pageBreaker:"M3,9v6l3-3L3,9z M21,9H8V4h2v3h9V4h2V9z M21,20h-2v-3h-9v3H8v-5h13V20z M11,13H8v-2h3V13z M16,13h-3v-2h3V13z M21,13h-3v-2 h3V13z",paragraphFormat:"M10.15,5A4.11,4.11,0,0,0,6.08,8.18,4,4,0,0,0,10,13v6h2V7h2V19h2V7h2V5ZM8,9a2,2,0,0,1,2-2v4A2,2,0,0,1,8,9Z",paragraphMore:"M7.682,5a4.11,4.11,0,0,0-4.07,3.18,4,4,0,0,0,3.11,4.725h0l.027.005a3.766,3.766,0,0,0,.82.09v6h2V7h2V19h2V7h2V5ZM5.532,9a2,2,0,0,1,2-2v4A2,2,0,0,1,5.532,9Zm14.94,8.491a1.5,1.5,0,1,1-1.5-1.5A1.5,1.5,0,0,1,20.472,17.491Zm0-4a1.5,1.5,0,1,1-1.5-1.5A1.5,1.5,0,0,1,20.472,13.491Zm0-4a1.5,1.5,0,1,1-1.5-1.5A1.5,1.5,0,0,1,20.472,9.491Z",paragraphStyle:"M4,9c0-1.1,0.9-2,2-2v4C4.9,11,4,10.1,4,9z M16.7,20.5l3.2,1.9L19,18.8l3-2.9h-3.7l-1.4-3.5L15.3,16h-3.8l2.9,2.9l-0.9,3.6 L16.7,20.5z M10,17.4V19h1.6L10,17.4z M6.1,5c-1.9,0-3.6,1.3-4,3.2c-0.5,2.1,0.8,4.2,2.9,4.7c0,0,0,0,0,0h0.2C5.5,13,5.8,13,6,13v6 h2V7h2v7h2V7h2V5H6.1z",pdfExport:"M7,3C5.9,3,5,3.9,5,5v14c0,1.1,0.9,2,2,2h10c1.1,0,2-0.9,2-2V7.6L14.4,3H7z M17,19H7V5h6v4h4V19z M16.3,13.5 c-0.2-0.6-1.1-0.8-2.6-0.8c-0.1,0-0.1,0-0.2,0c-0.3-0.3-0.8-0.9-1-1.2c-0.2-0.2-0.3-0.3-0.4-0.6c0.2-0.7,0.2-1,0.3-1.5 c0.1-0.9,0-1.6-0.2-1.8c-0.4-0.2-0.7-0.2-0.9-0.2c-0.1,0-0.3,0.2-0.7,0.7c-0.2,0.7-0.1,1.8,0.6,2.8c-0.2,0.8-0.7,1.6-1,2.4 c-0.8,0.2-1.5,0.7-1.9,1.1c-0.7,0.7-0.9,1.1-0.7,1.6c0,0.3,0.2,0.6,0.7,0.6c0.3-0.1,0.3-0.2,0.7-0.3c0.6-0.3,1.2-1.7,1.7-2.4 c0.8-0.2,1.7-0.3,2-0.3c0.1,0,0.3,0,0.6,0c0.8,0.8,1.2,1.1,1.8,1.2c0.1,0,0.2,0,0.3,0c0.3,0,0.8-0.1,1-0.6 C16.4,14.1,16.4,13.9,16.3,13.5z M8.3,15.7c-0.1,0.1-0.2,0.1-0.2,0.1c0-0.1,0-0.3,0.6-0.8c0.2-0.2,0.6-0.3,0.9-0.7 C9,15,8.6,15.5,8.3,15.7z M11.3,9c0-0.1,0.1-0.2,0.1-0.2S11.6,9,11.5,10c0,0.1,0,0.3-0.1,0.7C11.3,10.1,11,9.5,11.3,9z M10.9,13.1 c0.2-0.6,0.6-1,0.7-1.5c0.1,0.1,0.1,0.1,0.2,0.2c0.1,0.2,0.3,0.7,0.7,0.9C12.2,12.8,11.6,13,10.9,13.1z M15.2,14.1 c-0.1,0-0.1,0-0.2,0c-0.2,0-0.7-0.2-1-0.7c1.1,0,1.6,0.2,1.6,0.6C15.5,14.1,15.4,14.1,15.2,14.1z",print:"M16.1,17c0-0.6,0.4-1,1-1c0.6,0,1,0.4,1,1s-0.4,1-1,1C16.5,18,16.1,17.6,16.1,17z M22,15v4c0,1.1-0.9,2-2,2H4 c-1.1,0-2-0.9-2-2v-4c0-1.1,0.9-2,2-2h1V5c0-1.1,0.9-2,2-2h7.4L19,7.6V13h1C21.1,13,22,13.9,22,15z M7,13h10V9h-4V5H7V13z M20,15H4 v4h16V15z",redo:"M13.6,9.4c1.7,0.3,3.2,0.9,4.6,2L21,8.5v7h-7l2.7-2.7C13,10.1,7.9,11,5.3,14.7c-0.2,0.3-0.4,0.5-0.5,0.8L3,14.6 C5.1,10.8,9.3,8.7,13.6,9.4z",removeTable:"M15,10v8H9v-8H15 M14,4H9.9l-1,1H6v2h12V5h-3L14,4z M17,8H7v10c0,1.1,0.9,2,2,2h6c1.1,0,2-0.9,2-2V8z",insertAll:"M 9.25 12 L 6.75 12 C 6.335938 12 6 11.664062 6 11.25 L 6 6 L 3.257812 6 C 2.703125 6 2.425781 5.328125 2.820312 4.933594 L 7.570312 0.179688 C 7.804688 -0.0546875 8.191406 -0.0546875 8.425781 0.179688 L 13.179688 4.933594 C 13.574219 5.328125 13.296875 6 12.742188 6 L 10 6 L 10 11.25 C 10 11.664062 9.664062 12 9.25 12 Z M 16 11.75 L 16 15.25 C 16 15.664062 15.664062 16 15.25 16 L 0.75 16 C 0.335938 16 0 15.664062 0 15.25 L 0 11.75 C 0 11.335938 0.335938 11 0.75 11 L 5 11 L 5 11.25 C 5 12.214844 5.785156 13 6.75 13 L 9.25 13 C 10.214844 13 11 12.214844 11 11.25 L 11 11 L 15.25 11 C 15.664062 11 16 11.335938 16 11.75 Z M 12.125 14.5 C 12.125 14.15625 11.84375 13.875 11.5 13.875 C 11.15625 13.875 10.875 14.15625 10.875 14.5 C 10.875 14.84375 11.15625 15.125 11.5 15.125 C 11.84375 15.125 12.125 14.84375 12.125 14.5 Z M 14.125 14.5 C 14.125 14.15625 13.84375 13.875 13.5 13.875 C 13.15625 13.875 12.875 14.15625 12.875 14.5 C 12.875 14.84375 13.15625 15.125 13.5 15.125 C 13.84375 15.125 14.125 14.84375 14.125 14.5 Z M 14.125 14.5 ",remove:"M15,10v8H9v-8H15 M14,4H9.9l-1,1H6v2h12V5h-3L14,4z M17,8H7v10c0,1.1,0.9,2,2,2h6c1.1,0,2-0.9,2-2V8z",replaceImage:"M16,5v3H4v2h12v3l4-4L16,5z M8,19v-3h12v-2H8v-3l-4,4L8,19z",row:"M20,5H4C2.9,5,2,5.9,2,7v2v1.5v3V15v2c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2v-2v-1.5v-3V9V7C22,5.9,21.1,5,20,5z M16,6.5h4 c0.3,0,0.5,0.2,0.5,0.5v2H16V6.5z M9.5,6.5h5V9h-5V6.5z M3.5,7c0-0.3,0.2-0.5,0.5-0.5h4V9H3.5V7z M8,17.5H4c-0.3,0-0.5-0.2-0.5-0.5 v-2H8V17.5z M14.5,17.5h-5V15h5V17.5z M20.5,17c0,0.3-0.2,0.5-0.5,0.5h-4V15h4.5V17z",selectAll:"M5,7h2V5C5.9,5,5,5.9,5,7z M5,11h2V9H5V11z M9,19h2v-2H9V19z M5,11h2V9H5V11z M15,5h-2v2h2V5z M17,5v2h2C19,5.9,18.1,5,17,5 z M7,19v-2H5C5,18.1,5.9,19,7,19z M5,15h2v-2H5V15z M11,5H9v2h2V5z M13,19h2v-2h-2V19z M17,11h2V9h-2V11z M17,19c1.1,0,2-0.9,2-2h-2 V19z M17,11h2V9h-2V11z M17,15h2v-2h-2V15z M13,19h2v-2h-2V19z M13,7h2V5h-2V7z M9,15h6V9H9V15z M11,11h2v2h-2V11z",smile:"M11.991,3A9,9,0,1,0,21,12,8.99557,8.99557,0,0,0,11.991,3ZM12,19a7,7,0,1,1,7-7A6.99808,6.99808,0,0,1,12,19Zm3.105-5.2h1.503a4.94542,4.94542,0,0,1-9.216,0H8.895a3.57808,3.57808,0,0,0,6.21,0ZM7.5,9.75A1.35,1.35,0,1,1,8.85,11.1,1.35,1.35,0,0,1,7.5,9.75Zm6.3,0a1.35,1.35,0,1,1,1.35,1.35A1.35,1.35,0,0,1,13.8,9.75Z",spellcheck:"M19.1,13.6l-5.6,5.6l-2.7-2.7l-1.4,1.4l4.1,4.1l7-7L19.1,13.6z M10.8,13.7l2.7,2.7l0.8-0.8L10.5,5h-2l-5,14h2l1.4-4h2.6 L10.8,13.7z M9.5,7.8l1.9,5.2H7.6L9.5,7.8z",star:"M12.1,7.7l1,2.5l0.4,0.9h1h2.4l-2.1,2l-0.6,0.6l0.2,0.9l0.6,2.3l-2.2-1.3L12,15.2l-0.8,0.5L9,17l0.5-2.5l0.1-0.8L9,13.1 l-2-2h2.5h0.9l0.4-0.8L12.1,7.7 M12.2,4L9.5,9.6H3.4L8,14.2L6.9,20l5.1-3.1l5.3,3.1l-1.5-5.8l4.8-4.6h-6.1L12.2,4L12.2,4z",strikeThrough:"M3,12.20294H21v1.5H16.63422a3.59782,3.59782,0,0,1,.34942,1.5929,3.252,3.252,0,0,1-1.31427,2.6997A5.55082,5.55082,0,0,1,12.20251,19a6.4421,6.4421,0,0,1-2.62335-.539,4.46335,4.46335,0,0,1-1.89264-1.48816,3.668,3.668,0,0,1-.67016-2.15546V14.704h.28723v-.0011h.34149v.0011H9.02v.11334a2.18275,2.18275,0,0,0,.85413,1.83069,3.69,3.69,0,0,0,2.32836.67926,3.38778,3.38778,0,0,0,2.07666-.5462,1.73346,1.73346,0,0,0,.7013-1.46655,1.69749,1.69749,0,0,0-.647-1.43439,3.00525,3.00525,0,0,0-.27491-.17725H3ZM16.34473,7.05981A4.18163,4.18163,0,0,0,14.6236,5.5462,5.627,5.627,0,0,0,12.11072,5,5.16083,5.16083,0,0,0,8.74719,6.06213,3.36315,3.36315,0,0,0,7.44006,8.76855a3.22923,3.22923,0,0,0,.3216,1.42786h2.59668c-.08338-.05365-.18537-.10577-.25269-.16064a1.60652,1.60652,0,0,1-.65283-1.30036,1.79843,1.79843,0,0,1,.68842-1.5108,3.12971,3.12971,0,0,1,1.96948-.55243,3.04779,3.04779,0,0,1,2.106.6687,2.35066,2.35066,0,0,1,.736,1.83258v.11341h2.00317V9.17346A3.90013,3.90013,0,0,0,16.34473,7.05981Z",subscript:"M10.4,12l3.6,3.6L12.6,17L9,13.4L5.4,17L4,15.6L7.6,12L4,8.4L5.4,7L9,10.6L12.6,7L14,8.4L10.4,12z M18.31234,19.674 l1.06812-1.1465c0.196-0.20141,0.37093-0.40739,0.5368-0.6088c0.15975-0.19418,0.30419-0.40046,0.432-0.617 c0.11969-0.20017,0.21776-0.41249,0.29255-0.6334c0.07103-0.21492,0.10703-0.43986,0.10662-0.66621 c0.00297-0.28137-0.04904-0.56062-0.1531-0.82206c-0.09855-0.24575-0.25264-0.46534-0.45022-0.6416 c-0.20984-0.18355-0.45523-0.32191-0.72089-0.40646c-0.63808-0.19005-1.3198-0.17443-1.94851,0.04465 c-0.28703,0.10845-0.54746,0.2772-0.76372,0.49487c-0.20881,0.20858-0.37069,0.45932-0.47483,0.73548 c-0.10002,0.26648-0.15276,0.54838-0.15585,0.833l-0.00364,0.237H17.617l0.00638-0.22692 c0.00158-0.12667,0.01966-0.25258,0.05377-0.37458c0.03337-0.10708,0.08655-0.20693,0.15679-0.29437 c0.07105-0.08037,0.15959-0.14335,0.25882-0.1841c0.22459-0.08899,0.47371-0.09417,0.7018-0.01458 c0.0822,0.03608,0.15559,0.08957,0.21509,0.15679c0.06076,0.07174,0.10745,0.15429,0.13761,0.24333 c0.03567,0.10824,0.05412,0.22141,0.05469,0.33538c-0.00111,0.08959-0.0118,0.17881-0.0319,0.26612 c-0.02913,0.10428-0.07076,0.20465-0.124,0.29893c-0.07733,0.13621-0.1654,0.26603-0.26338,0.38823 c-0.13438,0.17465-0.27767,0.34226-0.42929,0.50217l-2.15634,2.35315V21H21v-1.326H18.31234z",superscript:"M10.4,12,14,15.6,12.6,17,9,13.4,5.4,17,4,15.6,7.6,12,4,8.4,5.4,7,9,10.6,12.6,7,14,8.4Zm8.91234-3.326,1.06812-1.1465c.196-.20141.37093-.40739.5368-.6088a4.85745,4.85745,0,0,0,.432-.617,3.29,3.29,0,0,0,.29255-.6334,2.11079,2.11079,0,0,0,.10662-.66621,2.16127,2.16127,0,0,0-.1531-.82206,1.7154,1.7154,0,0,0-.45022-.6416,2.03,2.03,0,0,0-.72089-.40646,3.17085,3.17085,0,0,0-1.94851.04465,2.14555,2.14555,0,0,0-.76372.49487,2.07379,2.07379,0,0,0-.47483.73548,2.446,2.446,0,0,0-.15585.833l-.00364.237H18.617L18.62338,5.25a1.45865,1.45865,0,0,1,.05377-.37458.89552.89552,0,0,1,.15679-.29437.70083.70083,0,0,1,.25882-.1841,1.00569,1.00569,0,0,1,.7018-.01458.62014.62014,0,0,1,.21509.15679.74752.74752,0,0,1,.13761.24333,1.08893,1.08893,0,0,1,.05469.33538,1.25556,1.25556,0,0,1-.0319.26612,1.34227,1.34227,0,0,1-.124.29893,2.94367,2.94367,0,0,1-.26338.38823,6.41629,6.41629,0,0,1-.42929.50217L17.19709,8.92642V10H22V8.674Z",symbols:"M15.77493,16.98885a8.21343,8.21343,0,0,0,1.96753-2.57651,7.34824,7.34824,0,0,0,.6034-3.07618A6.09092,6.09092,0,0,0,11.99515,5a6.13347,6.13347,0,0,0-4.585,1.79187,6.417,6.417,0,0,0-1.756,4.69207,6.93955,6.93955,0,0,0,.622,2.97415,8.06587,8.06587,0,0,0,1.949,2.53076H5.41452V19h5.54114v-.04331h-.00147V16.84107a5.82825,5.82825,0,0,1-2.2052-2.2352A6.40513,6.40513,0,0,1,7.97672,11.447,4.68548,4.68548,0,0,1,9.07785,8.19191a3.73232,3.73232,0,0,1,2.9173-1.22462,3.76839,3.76839,0,0,1,2.91241,1.21489,4.482,4.482,0,0,1,1.11572,3.154,6.71141,6.71141,0,0,1-.75384,3.24732,5.83562,5.83562,0,0,1-2.22357,2.25759v2.11562H13.0444V19h5.54108V16.98885Z",tags:"M8.9749 7.47489a1.5 1.5 0 1 1 -1.5 1.5A1.5 1.5 0 0 1 8.9749 7.47489Zm3.78866 -3.12713L16.5362 8.12041l0.33565 0.33564 2.77038 2.77038a2.01988 2.01988 0 0 1 0.59 1.42 1.95518 1.95518 0 0 1 -0.5854 1.40455l0.00044 0.00043 -5.59583 5.59583 -0.00043 -0.00044a1.95518 1.95518 0 0 1 -1.40455 0.5854 1.98762 1.98762 0 0 1 -1.41 -0.58L8.45605 16.87185l-0.33564 -0.33565L4.35777 12.77357a1.99576 1.99576 0 0 1 -0.59 -1.42V9.36358l0 -3.59582a2.00579 2.00579 0 0 1 2 -2l3.59582 0h1.98995A1.98762 1.98762 0 0 1 12.76356 4.34776ZM15.46186 9.866l-0.33564 -0.33564L11.36359 5.76776H5.76776v5.59583L9.866 15.46186l2.7794 2.7794 5.5878 -5.60385 -0.001 -0.001Z",tableHeader:"M20,5H4C2.9,5,2,5.9,2,7v10c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V7C22,5.9,21.1,5,20,5z M8,17.5H4c-0.3,0-0.5-0.2-0.5-0.4 l0,0V17v-2H8V17.5z M8,13.5H3.5v-3H8V13.5z M14.5,17.5h-5V15h5V17.5z M14.5,13.5h-5v-3h5V13.5z M20.5,17c0,0.3-0.2,0.5-0.4,0.5l0,0 H16V15h4.5V17z M20.5,13.5H16v-3h4.5V13.5z M20.5,9h-4.4H16h-1.5h-5H8H7.9H3.5V7c0-0.3,0.2-0.5,0.4-0.5l0,0h4l0,0h8.2l0,0H20 c0.3,0,0.5,0.2,0.5,0.4l0,0V9z",tableFooter:"M20,19H4a2.006,2.006,0,0,1-2-2V7A2.006,2.006,0,0,1,4,5H20a2.006,2.006,0,0,1,2,2V17A2.006,2.006,0,0,1,20,19ZM8,6.5H4a.458.458,0,0,0-.5.4h0V9H8Zm0,4H3.5v3H8Zm6.5-4h-5V9h5Zm0,4h-5v3h5Zm6-3.5a.458.458,0,0,0-.4-.5H16V9h4.5Zm0,3.5H16v3h4.5Zm0,4.5H3.5v2a.458.458,0,0,0,.4.5H20a.458.458,0,0,0,.5-.4h0Z",tableStyle:"M20.0171,19.89752l.9,3.6-3.2-1.9-3.3,1.9.8-3.6-2.9-2.9h3.8l1.7-3.5,1.4,3.5h3.8ZM20,5H4A2.00591,2.00591,0,0,0,2,7V17a2.00591,2.00591,0,0,0,2,2h7.49115l-.58826-.58826L9.99115,17.5H9.5V14.9975h5.36511L16,12.66089V10.5h4.5v3h-.52783l.599,1.4975H22V7A2.00591,2.00591,0,0,0,20,5ZM3.5,7A.4724.4724,0,0,1,4,6.5H8V9H3.5Zm0,3.5H8v3H3.5Zm.5,7a.4724.4724,0,0,1-.5-.5V15H8v2.5Zm10.5-4h-5v-3h5Zm0-4.5h-5V6.5h5Zm6,0H16V6.5h4a.4724.4724,0,0,1,.5.5Z",textColor:"M15.2,13.494s-3.6,3.9-3.6,6.3a3.65,3.65,0,0,0,7.3.1v-.1C18.9,17.394,15.2,13.494,15.2,13.494Zm-1.47-1.357.669-.724L12.1,5h-2l-5,14h2l1.43-4h2.943A24.426,24.426,0,0,1,13.726,12.137ZM11.1,7.8l1.86,5.2H9.244Z",textMore:"M13.55,19h2l-5-14h-2l-5,14h2l1.4-4h5.1Zm-5.9-6,1.9-5.2,1.9,5.2Zm12.8,4.5a1.5,1.5,0,1,1-1.5-1.5A1.5,1.5,0,0,1,20.45,17.5Zm0-4a1.5,1.5,0,1,1-1.5-1.5A1.5,1.5,0,0,1,20.45,13.5Zm0-4A1.5,1.5,0,1,1,18.95,8,1.5,1.5,0,0,1,20.45,9.5Z",underline:"M19,20v2H5V20Zm-3-6.785a4,4,0,0,1-5.74,3.4A3.75,3.75,0,0,1,8,13.085V5.005H6v8.21a6,6,0,0,0,8,5.44,5.851,5.851,0,0,0,4-5.65v-8H16ZM16,5v0h2V5ZM8,5H6v0H8Z",undo:"M10.4,9.4c-1.7,0.3-3.2,0.9-4.6,2L3,8.5v7h7l-2.7-2.7c3.7-2.6,8.8-1.8,11.5,1.9c0.2,0.3,0.4,0.5,0.5,0.8l1.8-0.9 C18.9,10.8,14.7,8.7,10.4,9.4z",unlink:"M14.4,11l1.6,1.6V11H14.4z M17,7h-4v1.9h4c1.7,0,3.1,1.4,3.1,3.1c0,1.3-0.8,2.4-1.9,2.8l1.4,1.4C21,15.4,22,13.8,22,12 C22,9.2,19.8,7,17,7z M2,4.3l3.1,3.1C3.3,8.1,2,9.9,2,12c0,2.8,2.2,5,5,5h4v-1.9H7c-1.7,0-3.1-1.4-3.1-3.1c0-1.6,1.2-2.9,2.8-3.1 L8.7,11H8v2h2.7l2.3,2.3V17h1.7l4,4l1.4-1.4L3.4,2.9L2,4.3z",unorderedList:"M4,10.5c-0.8,0-1.5,0.7-1.5,1.5s0.7,1.5,1.5,1.5s1.5-0.7,1.5-1.5S4.8,10.5,4,10.5z M4,5.5C3.2,5.5,2.5,6.2,2.5,7 S3.2,8.5,4,8.5S5.5,7.8,5.5,7S4.8,5.5,4,5.5z M4,15.5c-0.8,0-1.5,0.7-1.5,1.5s0.7,1.5,1.5,1.5s1.5-0.7,1.5-1.5S4.8,15.5,4,15.5z M7.5,6v2h14V6H7.5z M7.5,18h14v-2h-14V18z M7.5,13h14v-2h-14V13z",verticalAlignBottom:"M16,13h-3V3h-2v10H8l4,4L16,13z M3,19v2h18v-2H3z",verticalAlignMiddle:"M3,11v2h18v-2H3z M8,18h3v3h2v-3h3l-4-4L8,18z M16,6h-3V3h-2v3H8l4,4L16,6z",verticalAlignTop:"M8,11h3v10h2V11h3l-4-4L8,11z M21,5V3H3v2H21z",trackChanges:"M17.2 20H12.4599L13.9938 19.2076L14.0305 19.1886L14.0616 19.1612C14.1036 19.1242 14.1373 19.0786 14.1603 19.0275C14.1806 18.9825 14.1923 18.9342 14.1948 18.885H14.2H14.3384L14.4364 18.7874L14.7049 18.52H15.45C15.5747 18.52 15.6942 18.4705 15.7823 18.3823C15.8705 18.2942 15.92 18.1746 15.92 18.05C15.92 17.9253 15.8705 17.8058 15.7823 17.7176C15.7351 17.6704 15.6789 17.6343 15.6177 17.6109L17.33 15.9056V19.87C17.33 19.8871 17.3266 19.904 17.3201 19.9197C17.3136 19.9355 17.304 19.9499 17.2919 19.9619C17.2799 19.974 17.2655 19.9836 17.2497 19.9901C17.234 19.9966 17.2171 20 17.2 20ZM4.13 20H11.2508C11.2396 19.9629 11.2337 19.9242 11.2337 19.885C11.2337 19.8133 11.2533 19.7431 11.29 19.6819L11.2739 19.6734L11.8838 18.52H5C4.87535 18.52 4.7558 18.4705 4.66766 18.3823C4.57952 18.2942 4.53 18.1746 4.53 18.05C4.53 17.9253 4.57952 17.8058 4.66766 17.7176C4.7558 17.6295 4.87535 17.58 5 17.58H12.3809L12.3925 17.5582L12.4187 17.5284C12.4558 17.4864 12.5014 17.4527 12.5525 17.4297C12.5836 17.4156 12.6163 17.4057 12.6498 17.4001C12.6522 17.3065 12.6877 17.2166 12.7503 17.1467L13 17.37C12.9902 17.381 12.9847 17.3952 12.9847 17.41C12.9847 17.4247 12.9902 17.439 13 17.45L14.13 18.55H14.2L19.09 13.68V13.6L17.99 12.5C17.979 12.4902 17.9647 12.4847 17.95 12.4847C17.9352 12.4847 17.921 12.4902 17.91 12.5L13 17.37L12.7641 17.1322L15.1759 14.74H5C4.87535 14.74 4.7558 14.6905 4.66766 14.6023C4.57952 14.5142 4.53 14.3946 4.53 14.27C4.53 14.1453 4.57952 14.0258 4.66766 13.9376C4.7558 13.8495 4.87535 13.8 5 13.8H15.45C15.5747 13.8 15.6942 13.8495 15.7823 13.9376C15.8169 13.9722 15.8454 14.0115 15.8675 14.0541L17.33 12.6034V9.3H13.28C13.207 9.30976 13.133 9.30976 13.06 9.3C12.7697 9.22119 12.5113 9.05343 12.3212 8.82027C12.1311 8.58711 12.0187 8.30026 12 8V4H4.13C4.09552 4 4.06246 4.0137 4.03808 4.03808C4.0137 4.06246 4 4.09552 4 4.13V19.87C4 19.9045 4.0137 19.9375 4.03808 19.9619C4.06246 19.9863 4.09552 20 4.13 20ZM11.7889 20H11.8785C11.8902 19.9746 11.898 19.9475 11.9015 19.9197L11.8661 19.9866L11.8117 19.9578L13.84 18.91C13.8464 18.9044 13.8515 18.8974 13.855 18.8897C13.8585 18.8819 13.8603 18.8735 13.8603 18.865C13.8603 18.8565 13.8585 18.8481 13.855 18.8403C13.8515 18.8325 13.8464 18.8256 13.84 18.82L12.76 17.75C12.7544 17.7436 12.7474 17.7385 12.7397 17.735C12.7319 17.7315 12.7235 17.7297 12.715 17.7297C12.7065 17.7297 12.6981 17.7315 12.6903 17.735C12.6825 17.7385 12.6756 17.7436 12.67 17.75L11.57 19.83L11.5023 19.7942L11.58 19.85C11.5727 19.8602 11.5687 19.8724 11.5687 19.885C11.5687 19.8975 11.5727 19.9098 11.58 19.92L11.67 20H11.73L11.7642 19.9823L11.7889 20ZM13.1 4.65L16.6 8.15C16.6212 8.17232 16.6355 8.20028 16.6412 8.23051C16.6469 8.26075 16.6437 8.29199 16.6321 8.32048C16.6205 8.34898 16.6009 8.37352 16.5757 8.39117C16.5505 8.40882 16.5207 8.41883 16.49 8.42H13.06L12.83 8.19V4.76C12.8312 4.72925 12.8412 4.6995 12.8588 4.67429C12.8765 4.64909 12.901 4.62951 12.9295 4.6179C12.958 4.6063 12.9893 4.60315 13.0195 4.60884C13.0497 4.61453 13.0777 4.62882 13.1 4.65ZM11 6.72C11.0027 6.66089 10.9937 6.60183 10.9735 6.54621C10.9534 6.49058 10.9224 6.43948 10.8825 6.39582C10.8425 6.35216 10.7944 6.31681 10.7408 6.29179C10.6871 6.26677 10.6291 6.25257 10.57 6.25H5C4.88239 6.25773 4.77251 6.3113 4.69397 6.39918C4.61543 6.48707 4.57451 6.60226 4.58 6.72C4.57451 6.83774 4.61543 6.95293 4.69397 7.04082C4.77251 7.12871 4.88239 7.18227 5 7.19H10.6C10.714 7.1774 10.8189 7.12173 10.8933 7.03438C10.9676 6.94702 11.0058 6.83457 11 6.72ZM11.1 8.14001H5C4.87535 8.14001 4.7558 8.18953 4.66766 8.27767C4.57952 8.36582 4.53 8.48536 4.53 8.61001C4.53 8.73467 4.57952 8.85421 4.66766 8.94236C4.7558 9.0305 4.87535 9.08001 5 9.08001H11.1C11.2247 9.08001 11.3442 9.0305 11.4323 8.94236C11.5205 8.85421 11.57 8.73467 11.57 8.61001C11.57 8.48536 11.5205 8.36582 11.4323 8.27767C11.3442 8.18953 11.2247 8.14001 11.1 8.14001ZM5 11H15.45C15.5826 11 15.7098 10.9473 15.8036 10.8536C15.8973 10.7598 15.95 10.6326 15.95 10.5C15.95 10.3674 15.8973 10.2402 15.8036 10.1464C15.7098 10.0527 15.5826 10 15.45 10H5C4.86739 10 4.74021 10.0527 4.64645 10.1464C4.55268 10.2402 4.5 10.3674 4.5 10.5C4.5 10.6326 4.55268 10.7598 4.64645 10.8536C4.74021 10.9473 4.86739 11 5 11ZM5 12.86H11.1C11.2211 12.8523 11.3346 12.798 11.4166 12.7085C11.4986 12.6191 11.5428 12.5013 11.54 12.38C11.5427 12.2597 11.4982 12.1431 11.4159 12.0552C11.3337 11.9673 11.2202 11.9152 11.1 11.91H5C4.94089 11.9126 4.88286 11.9268 4.82924 11.9518C4.77562 11.9768 4.72746 12.0122 4.68752 12.0558C4.64758 12.0995 4.61664 12.1506 4.59648 12.2062C4.57631 12.2618 4.56731 12.3209 4.57 12.38C4.56451 12.5004 4.60649 12.6181 4.6869 12.7079C4.76731 12.7976 4.87974 12.8523 5 12.86ZM11.1 16.63H5C4.87535 16.63 4.7558 16.5805 4.66766 16.4923C4.57952 16.4042 4.53 16.2846 4.53 16.16C4.53 16.0353 4.57952 15.9158 4.66766 15.8276C4.7558 15.7395 4.87535 15.69 5 15.69H11.1C11.2247 15.69 11.3442 15.7395 11.4323 15.8276C11.5205 15.9158 11.57 16.0353 11.57 16.16C11.57 16.2846 11.5205 16.4042 11.4323 16.4923C11.3442 16.5805 11.2247 16.63 11.1 16.63ZM18.8503 11.592C18.7991 11.6175 18.7545 11.6544 18.72 11.7L18.26 12.14C18.2501 12.151 18.2447 12.1652 18.2447 12.18C18.2447 12.1947 18.2501 12.209 18.26 12.22L19.37 13.32C19.381 13.3298 19.3952 13.3353 19.41 13.3353C19.4247 13.3353 19.439 13.3298 19.45 13.32L19.86 12.91C19.9057 12.867 19.9421 12.8151 19.967 12.7575C19.9919 12.6998 20.0047 12.6377 20.0047 12.575C20.0047 12.5122 19.9919 12.4501 19.967 12.3925C19.9421 12.3349 19.9057 12.283 19.86 12.24L19.31 11.7C19.2755 11.6544 19.2309 11.6175 19.1797 11.592C19.1285 11.5666 19.0721 11.5533 19.015 11.5533C18.9578 11.5533 18.9014 11.5666 18.8503 11.592Z",showTrackChanges:"M17.2421 13.6048C17.2631 13.6136 17.2841 13.6226 17.305 13.6317V9.29505H13.2626C13.1897 9.30481 13.1159 9.30481 13.043 9.29505C12.7532 9.21632 12.4953 9.04872 12.3056 8.81577C12.1158 8.58283 12.0037 8.29625 11.985 7.99627V4H4.12976C4.09534 4 4.06234 4.01368 4.038 4.03804C4.01367 4.0624 4 4.09543 4 4.12988V19.8552C4 19.8896 4.01367 19.9227 4.038 19.947C4.06234 19.9714 4.09534 19.9851 4.12976 19.9851H13.4875C13.0501 19.8216 12.6281 19.6155 12.2277 19.3686C11.8529 19.1551 11.4911 18.9196 11.1442 18.6632C11.0697 18.6152 10.9982 18.5628 10.9302 18.5065H4.99812C4.87371 18.5065 4.75438 18.457 4.66641 18.3689C4.57843 18.2809 4.529 18.1614 4.529 18.0369C4.529 17.9124 4.57843 17.7929 4.66641 17.7049C4.75438 17.6168 4.87371 17.5673 4.99812 17.5673H10.4396C10.4472 17.4488 10.4756 17.3324 10.5235 17.2235C10.5939 17.017 10.6761 16.8149 10.7694 16.6182H4.99812C4.87371 16.6182 4.75438 16.5687 4.66641 16.4807C4.57843 16.3926 4.529 16.2732 4.529 16.1487C4.529 16.0241 4.57843 15.9047 4.66641 15.8166C4.75438 15.7286 4.87371 15.6791 4.99812 15.6791H11.0867C11.1576 15.6791 11.2268 15.6952 11.2895 15.7253C11.5204 15.361 11.7938 15.027 12.1033 14.73H4.99812C4.87371 14.73 4.75438 14.6805 4.66641 14.5924C4.57843 14.5044 4.529 14.385 4.529 14.2604C4.529 14.1359 4.57843 14.0164 4.66641 13.9284C4.75438 13.8403 4.87371 13.7909 4.99812 13.7909H13.4434C13.9833 13.525 14.5656 13.3516 15.166 13.2795L15.1923 13.2763H15.2189H15.4925C16.0923 13.2609 16.6886 13.3728 17.2421 13.6048ZM13.0829 4.64939L16.5764 8.14613C16.5975 8.16843 16.6118 8.19636 16.6174 8.22657C16.6231 8.25677 16.62 8.28798 16.6084 8.31645C16.5968 8.34492 16.5773 8.36944 16.5521 8.38707C16.527 8.40471 16.4973 8.41471 16.4666 8.41587H13.043L12.8134 8.18609V4.75929C12.8146 4.72857 12.8246 4.69884 12.8422 4.67366C12.8598 4.64849 12.8843 4.62893 12.9128 4.61733C12.9412 4.60573 12.9724 4.60259 13.0026 4.60827C13.0328 4.61396 13.0607 4.62824 13.0829 4.64939ZM10.9869 6.71746C10.9896 6.65841 10.9806 6.59941 10.9604 6.54383C10.9403 6.48825 10.9094 6.4372 10.8696 6.39358C10.8297 6.34997 10.7816 6.31465 10.7281 6.28965C10.6746 6.26466 10.6167 6.25047 10.5577 6.2479H4.99813C4.88074 6.25562 4.77106 6.30914 4.69267 6.39694C4.61428 6.48475 4.57343 6.59983 4.57891 6.71746C4.57343 6.83509 4.61428 6.95017 4.69267 7.03798C4.77106 7.12579 4.88074 7.1793 4.99813 7.18702H10.5876C10.7014 7.17444 10.8061 7.11882 10.8803 7.03154C10.9545 6.94427 10.9927 6.83192 10.9869 6.71746ZM11.0867 8.13614H4.99812C4.87371 8.13614 4.75438 8.18561 4.66641 8.27367C4.57843 8.36173 4.529 8.48116 4.529 8.6057C4.529 8.73023 4.57843 8.84967 4.66641 8.93773C4.75438 9.02579 4.87371 9.07526 4.99812 9.07526H11.0867C11.2111 9.07526 11.3304 9.02579 11.4184 8.93773C11.5064 8.84967 11.5558 8.73023 11.5558 8.6057C11.5558 8.48116 11.5064 8.36173 11.4184 8.27367C11.3304 8.18561 11.2111 8.13614 11.0867 8.13614ZM4.99812 10.9935H15.4285C15.5609 10.9935 15.6878 10.9408 15.7814 10.8472C15.875 10.7535 15.9276 10.6264 15.9276 10.4939C15.9276 10.3614 15.875 10.2344 15.7814 10.1407C15.6878 10.047 15.5609 9.9944 15.4285 9.9944H4.99812C4.86576 9.9944 4.73883 10.047 4.64523 10.1407C4.55164 10.2344 4.49906 10.3614 4.49906 10.4939C4.49906 10.6264 4.55164 10.7535 4.64523 10.8472C4.73883 10.9408 4.86576 10.9935 4.99812 10.9935ZM4.99812 12.8517H11.0867C11.2076 12.844 11.3208 12.7898 11.4027 12.7004C11.4845 12.611 11.5287 12.4934 11.5259 12.3722C11.5286 12.252 11.4841 12.1355 11.402 12.0477C11.3199 11.9599 11.2067 11.9078 11.0867 11.9026H4.99812C4.93912 11.9052 4.8812 11.9194 4.82769 11.9444C4.77417 11.9694 4.7261 12.0047 4.68623 12.0483C4.64637 12.0919 4.61549 12.143 4.59536 12.1985C4.57523 12.2541 4.56625 12.3131 4.56893 12.3722C4.56345 12.4925 4.60535 12.6101 4.68561 12.6998C4.76587 12.7894 4.87809 12.844 4.99812 12.8517ZM19.97 17.4974C19.5787 16.5636 19.0431 15.6971 18.383 14.9298C18.0152 14.5351 17.5679 14.2233 17.0706 14.0148C16.5732 13.8064 16.0373 13.7062 15.4984 13.7209H15.2189C14.4787 13.8098 13.7684 14.0666 13.1423 14.4717C12.5162 14.8769 11.9906 15.4196 11.6057 16.0587C11.3211 16.4677 11.0959 16.9151 10.937 17.3875C10.9006 17.464 10.8817 17.5476 10.8817 17.6323C10.8817 17.717 10.9006 17.8006 10.937 17.877C11.0642 18.0428 11.2196 18.1849 11.3961 18.2967C11.7346 18.5476 12.0879 18.7778 12.4541 18.986C13.4096 19.5767 14.497 19.92 15.6182 19.9851C16.4392 20.0504 17.2632 19.9005 18.0088 19.5501C18.7544 19.1998 19.3959 18.661 19.8702 17.9869C19.9311 17.923 19.9729 17.8432 19.9905 17.7566C20.0082 17.67 20.0011 17.5801 19.97 17.4974ZM15.9775 19.1758C14.3849 19.068 12.8507 18.5331 11.5358 17.6273C11.5788 17.5678 11.6255 17.5111 11.6756 17.4574C12.3061 16.569 13.1295 15.8359 14.0832 15.3126C13.8003 15.7406 13.6785 16.2566 13.7417 16.7681C13.7676 17.0339 13.8465 17.2918 13.9737 17.5265C14.1009 17.7613 14.2739 17.9681 14.4823 18.1348C14.6907 18.3016 14.9304 18.4248 15.1872 18.4972C15.4441 18.5696 15.7128 18.5897 15.9775 18.5564C16.305 18.4971 16.6137 18.3609 16.8785 18.159C17.1432 17.9572 17.3564 17.6954 17.5005 17.3951C17.6446 17.0949 17.7156 16.7647 17.7077 16.4317C17.6997 16.0987 17.613 15.7723 17.4547 15.4793C17.2614 15.3391 17.0533 15.2235 16.8351 15.1339C17.0715 15.226 17.2966 15.3485 17.5046 15.4993C18.0049 15.8976 18.4424 16.3691 18.8022 16.898L18.8927 17.0137L18.8927 17.0137C19.0823 17.2564 19.2729 17.5004 19.4709 17.7072C18.5404 18.6311 17.288 19.1576 15.9775 19.1758ZM16.3168 15.769C16.2085 15.8106 16.1171 15.8873 16.0574 15.9869C15.9977 16.0865 15.9731 16.2032 15.9875 16.3185C15.9949 16.3856 16.0156 16.4505 16.0483 16.5096C16.081 16.5686 16.1251 16.6206 16.178 16.6624C16.2309 16.7042 16.2916 16.7351 16.3566 16.7532C16.4216 16.7714 16.4895 16.7764 16.5564 16.7681H16.6063C16.5618 16.9495 16.4637 17.1132 16.3248 17.238C16.186 17.3627 16.0127 17.4427 15.8278 17.4674H15.6481C15.4335 17.4396 15.2337 17.3427 15.0789 17.1913C14.924 17.04 14.8226 16.8423 14.7897 16.6282C14.7628 16.3782 14.8311 16.1271 14.981 15.9253C15.1305 15.7238 15.3504 15.5861 15.5968 15.5395C15.3446 15.5862 15.12 15.7284 14.9697 15.9364C14.8191 16.1448 14.7547 16.4034 14.7897 16.6582C14.8226 16.8723 14.924 17.0699 15.0789 17.2213C15.2337 17.3727 15.4335 17.4696 15.6481 17.4974H15.8377C16.0209 17.4708 16.1919 17.39 16.3289 17.2654C16.4658 17.1408 16.5625 16.978 16.6063 16.7981C16.7293 16.7633 16.8359 16.686 16.9072 16.5799C16.9785 16.4737 17.0098 16.3457 16.9956 16.2186C16.9882 16.1515 16.9675 16.0865 16.9348 16.0275C16.9021 15.9685 16.858 15.9165 16.805 15.8747C16.7521 15.8329 16.6914 15.802 16.6264 15.7838C16.5615 15.7657 16.4936 15.7607 16.4266 15.769H16.3168Z",acceptAllChanges:"M9.36499 16.7348C9.38499 16.7547 9.41212 16.7659 9.44041 16.7659H10.9881C10.9028 16.6008 10.9289 16.3933 11.0663 16.2541L11.7266 15.585H10.1444C10.0549 15.5701 9.97363 15.5238 9.91498 15.4547C9.85639 15.3856 9.82422 15.298 9.82422 15.2074C9.82422 15.1169 9.85639 15.0292 9.91498 14.9601C9.97363 14.891 10.0549 14.8448 10.1444 14.8298H12.4879C12.5584 14.785 12.6407 14.7607 12.7257 14.7607C12.8106 14.7607 12.893 14.785 12.9635 14.8298H16.5295L18.3303 13.0091C18.4135 12.925 18.5271 12.8776 18.6456 12.8777C18.7642 12.8777 18.8777 12.9252 18.9609 13.0094L20 14.0621V8.25532H16.8001C16.7301 8.27288 16.6568 8.27288 16.5868 8.25532C16.3485 8.1935 16.1367 8.0565 15.9829 7.86478C15.8292 7.67306 15.7416 7.43688 15.7335 7.19149V4H9.44041C9.41293 4.0024 9.38718 4.01437 9.36767 4.03383C9.34816 4.05329 9.33615 4.07897 9.33375 4.10638V16.6596C9.33375 16.6878 9.34499 16.7148 9.36499 16.7348ZM10.0744 17.2979H11.4803L12.259 18.0957H5.06727C5.01734 18.0957 4.96838 18.1057 4.9232 18.1246C4.8788 18.1431 4.83798 18.1702 4.80335 18.2048C4.7333 18.2746 4.69398 18.3693 4.69398 18.468C4.69398 18.5668 4.7333 18.6615 4.80335 18.7313C4.87333 18.8011 4.96832 18.8404 5.06727 18.8404H12.9857L13.7947 19.6693L14.0836 19.9574H4.10733C4.09291 19.9591 4.07829 19.9576 4.06457 19.9528C4.05085 19.9481 4.03838 19.9403 4.02812 19.9301C4.01785 19.9198 4.01004 19.9074 4.00529 19.8937C4.00054 19.88 3.99896 19.8654 4.00067 19.8511V7.29787C4.00067 7.26966 4.01191 7.2426 4.03191 7.22265C4.05192 7.2027 4.07905 7.19149 4.10733 7.19149H8.70447V9.05319H5.06727C4.97294 9.05867 4.88453 9.10069 4.8208 9.17019C4.757 9.23973 4.72302 9.33135 4.72594 9.42553C4.72289 9.52082 4.75654 9.61364 4.82002 9.6849C4.88356 9.75613 4.97203 9.80038 5.06727 9.8085H8.70447V10.5638H5.06727C5.01968 10.5652 4.97274 10.5759 4.92932 10.5954C4.88583 10.6148 4.84664 10.6426 4.8139 10.6772C4.78122 10.7118 4.7557 10.7525 4.73877 10.7969C4.72184 10.8413 4.7139 10.8887 4.71527 10.9361C4.7139 10.9837 4.72184 11.031 4.73877 11.0754C4.74424 11.0897 4.75055 11.1037 4.75778 11.1171C4.76162 11.1243 4.76566 11.1313 4.76995 11.1382C4.78265 11.1585 4.79736 11.1776 4.8139 11.1951C4.84664 11.2297 4.88583 11.2575 4.92932 11.2769C4.95491 11.2884 4.98173 11.2968 5.0092 11.3021C5.02834 11.3058 5.04774 11.3079 5.06727 11.3085H8.70447V12.0638H5.06734C4.97782 12.0789 4.89651 12.1251 4.83792 12.1942C4.77926 12.2633 4.7471 12.351 4.7471 12.4415C4.7471 12.5321 4.77926 12.6197 4.83792 12.6888C4.89651 12.758 4.97782 12.8041 5.06734 12.8192H8.70447V13.5745H5.06734C4.97782 13.5895 4.89651 13.6357 4.83792 13.7048C4.81383 13.7332 4.79424 13.7647 4.77946 13.7983C4.7583 13.8465 4.7471 13.8988 4.7471 13.9522C4.7471 14.0427 4.77926 14.1303 4.83792 14.1994C4.89651 14.2686 4.97782 14.3147 5.06734 14.3298H8.70447V15.0744H5.06727C4.97776 15.0895 4.89651 15.1357 4.83785 15.2048C4.77926 15.2739 4.7471 15.3616 4.7471 15.4521C4.7471 15.5043 4.75778 15.5556 4.77809 15.6029C4.793 15.6376 4.81305 15.6701 4.83785 15.6994C4.89651 15.7685 4.97776 15.8147 5.06727 15.8298H8.70447V16.5851H5.06727C4.97776 16.6001 4.89651 16.6463 4.83785 16.7154C4.79489 16.7661 4.76618 16.8267 4.75387 16.8912C4.74938 16.9146 4.7471 16.9386 4.7471 16.9628C4.7471 17.0533 4.77926 17.1409 4.83785 17.21C4.89651 17.2792 4.97776 17.3253 5.06727 17.3404H9.95241C9.99552 17.3331 10.0367 17.3187 10.0744 17.2979ZM20 15.3204L18.5709 16.7659H19.8933C19.9216 16.7659 19.9487 16.7547 19.9687 16.7348C19.9887 16.7148 20 16.6878 20 16.6596V15.3204ZM14.7526 16.6264L13.7248 15.585H15.7825L14.7526 16.6264ZM14.9498 6.08721C14.9465 6.06854 14.9416 6.05023 14.9353 6.03244C14.9202 5.98939 14.897 5.94929 14.8665 5.91442C14.8145 5.85488 14.7444 5.81394 14.6669 5.79787H10.1337C10.0348 5.79787 9.93978 5.83709 9.8698 5.90693C9.79975 5.97676 9.76043 6.07146 9.76043 6.17022C9.76043 6.19463 9.76283 6.21879 9.76752 6.24239C9.77462 6.2782 9.78692 6.31268 9.80398 6.34479C9.82123 6.37716 9.8433 6.40709 9.8698 6.43348C9.93978 6.50332 10.0348 6.54257 10.1337 6.54257H14.6669C14.6811 6.54023 14.6951 6.53702 14.7088 6.53299C14.7206 6.52955 14.7322 6.52549 14.7436 6.52082C14.7624 6.51309 14.7806 6.50371 14.7979 6.4928C14.8378 6.46764 14.8722 6.43468 14.8991 6.39599C14.9259 6.35729 14.9447 6.31359 14.9543 6.26749C14.9554 6.26232 14.9563 6.25716 14.9571 6.25197C14.9579 6.24739 14.9586 6.24281 14.9591 6.23824C14.9612 6.22129 14.962 6.20424 14.9616 6.18723C14.961 6.16727 14.9588 6.14733 14.9549 6.12766C14.9539 6.11406 14.9523 6.10055 14.9498 6.08721ZM15.0189 7.29788H10.1445C10.0549 7.31291 9.97363 7.35911 9.91504 7.42823C9.85639 7.49738 9.82422 7.585 9.82422 7.67555C9.82422 7.76609 9.85639 7.85369 9.91504 7.92284C9.97363 7.99196 10.0549 8.03815 10.1445 8.05319H15.0189C15.0321 8.05241 15.0451 8.05095 15.058 8.04877C15.0745 8.04601 15.0906 8.04212 15.1064 8.03718C15.1669 8.01822 15.2219 7.98361 15.2654 7.93618C15.3291 7.86664 15.3632 7.77502 15.3602 7.68084C15.3606 7.67392 15.3608 7.66701 15.3608 7.66009C15.3609 7.65087 15.3606 7.64165 15.3599 7.63247C15.3592 7.62263 15.358 7.61279 15.3565 7.60302C15.3532 7.58188 15.3479 7.56104 15.3409 7.54072C15.3254 7.49575 15.301 7.45426 15.2693 7.41868C15.2492 7.39621 15.2265 7.37638 15.2017 7.35959C15.1872 7.34979 15.172 7.34102 15.1562 7.33339C15.1132 7.31265 15.0665 7.3006 15.0189 7.29788ZM10.1445 9.56381H18.496C18.5856 9.54877 18.6669 9.50258 18.7255 9.43346C18.7841 9.3643 18.8163 9.27671 18.8163 9.18617C18.8163 9.09562 18.7841 9.008 18.7255 8.93884C18.6669 8.86973 18.5856 8.82353 18.496 8.8085H10.1445C10.0549 8.82353 9.97363 8.86973 9.91504 8.93884C9.85639 9.008 9.82422 9.09562 9.82422 9.18617C9.82422 9.24412 9.83738 9.30087 9.86224 9.35236C9.87624 9.38132 9.89395 9.40859 9.91504 9.43346C9.97363 9.50258 10.0549 9.54877 10.1445 9.56381ZM10.1445 11.0638H15.0189C15.1084 11.0488 15.1897 11.0026 15.2483 10.9335C15.2854 10.8898 15.3118 10.8387 15.3263 10.7842C15.3347 10.7525 15.3391 10.7195 15.3391 10.6861C15.3391 10.5956 15.3069 10.508 15.2483 10.4389C15.1897 10.3697 15.1084 10.3235 15.0189 10.3085H10.1445C10.0549 10.3235 9.97363 10.3697 9.91504 10.4389C9.85639 10.508 9.82422 10.5956 9.82422 10.6861C9.82422 10.7424 9.83666 10.7976 9.8601 10.8478C9.87442 10.8785 9.89284 10.9073 9.91504 10.9335C9.97363 11.0026 10.0549 11.0488 10.1445 11.0638ZM18.496 12.5745H10.1444C10.0549 12.5594 9.97363 12.5132 9.91498 12.4441C9.85639 12.3749 9.82422 12.2873 9.82422 12.1968C9.82422 12.1062 9.85639 12.0186 9.91498 11.9495C9.97363 11.8803 10.0549 11.8342 10.1444 11.8191H18.496C18.5856 11.8342 18.6669 11.8803 18.7255 11.9495C18.7841 12.0186 18.8163 12.1062 18.8163 12.1968C18.8163 12.2873 18.7841 12.3749 18.7255 12.4441C18.6971 12.4776 18.6633 12.5058 18.6259 12.5276C18.5861 12.5507 18.5421 12.5667 18.496 12.5745ZM15.0189 14.0744H10.1444C10.0968 14.0731 10.0499 14.0624 10.0064 14.0429C9.96296 14.0234 9.92376 13.9956 9.89102 13.961C9.85834 13.9265 9.83282 13.8857 9.81589 13.8413C9.79897 13.7969 9.79102 13.7496 9.79239 13.7021C9.79102 13.6546 9.79897 13.6073 9.81589 13.5628C9.83282 13.5184 9.85834 13.4778 9.89102 13.4432C9.92376 13.4086 9.96296 13.3808 10.0064 13.3613C10.0499 13.3419 10.0968 13.3311 10.1444 13.3297H15.0189C15.0661 13.3311 15.1125 13.3419 15.1554 13.3615C15.1983 13.381 15.2368 13.4091 15.2686 13.4438C15.3005 13.4785 15.325 13.5193 15.3407 13.5637C15.3564 13.608 15.363 13.6551 15.3602 13.7021C15.3631 13.7963 15.3291 13.8879 15.2653 13.9574C15.2016 14.027 15.1132 14.0689 15.0189 14.0744ZM16.6188 4.52128L19.4133 7.30852C19.4293 7.32624 19.4401 7.34808 19.4443 7.37157C19.4485 7.39506 19.446 7.41925 19.4371 7.4414C19.4282 7.46356 19.4133 7.48278 19.394 7.4969C19.3747 7.51102 19.3518 7.51947 19.328 7.52128H16.5868L16.4054 7.34043V4.60639C16.4073 4.5826 16.4157 4.55979 16.4299 4.54056C16.444 4.52133 16.4633 4.50644 16.4855 4.49757C16.5077 4.48871 16.532 4.48624 16.5556 4.49043C16.5791 4.49462 16.601 4.50531 16.6188 4.52128ZM18.6454 13.3192L20 14.6915L14.7522 20L14.7416 19.9894L14.1123 19.3617L13.3976 18.6277L11.3817 16.5638L12.7257 15.2021L14.7522 17.2553L18.6454 13.3192Z",rejectAllChanges:"M9.54637 16.5847H8.96997V15.8295H12.786C12.8024 15.8265 12.8186 15.8223 12.8343 15.817C12.8535 15.8105 12.8719 15.8023 12.8897 15.7926C12.9315 15.7697 12.969 15.738 12.9997 15.6991C13.0268 15.6649 13.0478 15.6261 13.0621 15.5847H13.571V16.7656H9.79386C9.78396 16.7479 9.77269 16.731 9.76011 16.7151C9.70552 16.6459 9.62976 16.5998 9.54637 16.5847ZM13.4717 12.9573V13.3295H9.72523C9.6809 13.3309 9.63716 13.3416 9.59671 13.361C9.57578 13.3711 9.55595 13.3834 9.53745 13.3977C9.5201 13.411 9.50391 13.4262 9.48917 13.4429C9.45872 13.4775 9.43494 13.5182 9.41917 13.5626C9.41778 13.5664 9.41644 13.5703 9.41523 13.5742H8.96997V12.8189H12.786C12.8694 12.8039 12.9452 12.7577 12.9997 12.6886C13.0078 12.6784 13.0153 12.6677 13.0223 12.6568L13.029 12.6458L13.033 12.6389L13.0397 12.6266C13.0452 12.6157 13.0503 12.6046 13.055 12.5931C13.0576 12.5869 13.0599 12.5806 13.0621 12.5742H13.6872C13.6453 12.5965 13.607 12.6269 13.5746 12.6644C13.5059 12.7439 13.469 12.849 13.4717 12.9573ZM9.82598 14.0742H13.4758C13.4809 14.0932 13.4904 14.1108 13.5037 14.1251C13.5242 14.147 13.552 14.1593 13.581 14.1593H13.6008L13.571 14.1912V14.8295H9.72523C9.64183 14.8445 9.56614 14.8907 9.51149 14.9598C9.4845 14.994 9.46351 15.0328 9.4492 15.0741H8.96997V14.3295H9.54637C9.62976 14.3145 9.70552 14.2683 9.76011 14.1992C9.78947 14.162 9.81166 14.1195 9.82598 14.0742ZM18.9075 8.2552V12.5317H17.7846V12.323C17.7978 12.2827 17.8047 12.2399 17.8047 12.1965C17.8047 12.106 17.7747 12.0184 17.7201 11.9493C17.6655 11.8801 17.5897 11.834 17.5063 11.8189H9.72523C9.64183 11.834 9.56614 11.8801 9.51149 11.9493C9.48444 11.9835 9.46351 12.0222 9.4492 12.0636H8.96997V11.3083H9.54637C9.63425 11.3028 9.71662 11.2608 9.776 11.1913C9.80687 11.1551 9.83029 11.113 9.84527 11.0676L9.84654 11.0637H14.2667C14.3501 11.0486 14.4258 11.0024 14.4805 10.9333C14.5231 10.8794 14.5507 10.8142 14.5607 10.7452C14.5636 10.7258 14.565 10.706 14.565 10.686C14.565 10.6658 14.5635 10.6458 14.5606 10.626C14.5572 10.6026 14.5516 10.5796 14.5442 10.5573C14.5299 10.5144 14.5084 10.4741 14.4805 10.4387C14.4258 10.3696 14.3501 10.3234 14.2667 10.3083H9.72529C9.6832 10.3159 9.64299 10.3314 9.60653 10.3538C9.57081 10.3759 9.5386 10.4045 9.51155 10.4387C9.49639 10.4579 9.4831 10.4785 9.47182 10.5002C9.46133 10.5205 9.45259 10.5417 9.44568 10.5636H8.96997V9.80838H9.16873C9.25656 9.80286 9.33899 9.76085 9.39837 9.69131C9.45775 9.62177 9.48947 9.53022 9.48674 9.43601C9.48711 9.42951 9.48735 9.42302 9.48741 9.41653C9.48741 9.41049 9.48729 9.40445 9.48705 9.39848C9.49457 9.41055 9.50269 9.42218 9.51155 9.43334C9.56614 9.50249 9.64189 9.54866 9.72529 9.56372H17.5063C17.5897 9.54866 17.6655 9.50249 17.7201 9.43334C17.7747 9.36419 17.8047 9.2766 17.8047 9.18603C17.8047 9.09552 17.7747 9.00786 17.7201 8.93878C17.6655 8.86963 17.5897 8.82346 17.5063 8.8084H9.72529C9.64189 8.82346 9.56614 8.86963 9.51155 8.93878C9.4569 9.00786 9.42694 9.09552 9.42694 9.18603L9.427 9.19707L9.42754 9.20875C9.41972 9.19661 9.41123 9.18499 9.40201 9.17389C9.38478 9.15311 9.36537 9.1346 9.34427 9.11863C9.33735 9.11344 9.33026 9.1085 9.32298 9.10383C9.31855 9.10097 9.31406 9.09824 9.30951 9.09565L9.30424 9.09266L9.29659 9.08857C9.28792 9.08402 9.27906 9.07993 9.27009 9.07623C9.2616 9.07279 9.25298 9.06974 9.24431 9.06701C9.21974 9.05935 9.19439 9.05461 9.16873 9.05305H8.96997V4.10638C8.97221 4.07897 8.9834 4.05328 9.00157 4.03383C9.01975 4.01437 9.04374 4.0024 9.06935 4H14.9325V7.1914C14.9401 7.43679 15.0216 7.67296 15.1649 7.86468C15.3082 8.0564 15.5055 8.19338 15.7275 8.2552C15.7927 8.27277 15.861 8.27277 15.9262 8.2552H18.9075ZM13.571 17.2975V19.4251L13.5722 19.4615C13.5835 19.6376 13.6323 19.8068 13.7133 19.957H4.10061C4.08718 19.9587 4.07355 19.9571 4.06077 19.9524C4.04799 19.9477 4.03637 19.9399 4.02681 19.9296C4.01724 19.9194 4.00997 19.907 4.00554 19.8933C4.00111 19.8796 3.99964 19.865 4.00124 19.8506V7.29778C4.00124 7.26957 4.01171 7.24251 4.03034 7.22256C4.04898 7.20261 4.07426 7.1914 4.10061 7.1914H8.38368V9.05305H4.99497C4.90708 9.05857 4.82471 9.10052 4.76533 9.17006C4.70589 9.2396 4.67423 9.33121 4.67696 9.42536C4.67411 9.52067 4.70547 9.61346 4.76461 9.68475C4.8238 9.75598 4.90623 9.80026 4.99497 9.80838H8.38368V10.5636H4.99497C4.96682 10.5645 4.93898 10.5692 4.91199 10.5774C4.89647 10.5821 4.88124 10.588 4.86644 10.5952C4.8494 10.6034 4.83308 10.613 4.81762 10.6241C4.79627 10.6393 4.77655 10.657 4.7589 10.6771C4.72846 10.7116 4.70468 10.7523 4.68891 10.7967C4.67314 10.8411 4.66574 10.8885 4.66701 10.9359C4.66641 10.9597 4.66792 10.9834 4.67156 11.0067C4.6752 11.03 4.68102 11.053 4.68891 11.0752C4.70468 11.1196 4.72846 11.1603 4.7589 11.1949C4.7731 11.211 4.78862 11.2256 4.80524 11.2386C4.81452 11.2459 4.82417 11.2527 4.83417 11.259C4.84461 11.2655 4.85534 11.2714 4.86644 11.2767C4.9069 11.2962 4.95063 11.3069 4.99497 11.3083H8.38368V12.0636H4.99503C4.91163 12.0787 4.83587 12.1249 4.78128 12.194C4.7526 12.2303 4.7307 12.2717 4.71639 12.3159C4.70347 12.3559 4.69667 12.3983 4.69667 12.4413C4.69667 12.5318 4.72664 12.6194 4.78128 12.6886C4.809 12.7237 4.84218 12.7529 4.87906 12.7751C4.89416 12.7842 4.90993 12.7921 4.92619 12.7988C4.94833 12.8079 4.97137 12.8147 4.99503 12.8189H8.38368V13.5742H4.99503C4.95275 13.5819 4.91242 13.5975 4.87584 13.62C4.8403 13.642 4.80822 13.6705 4.78128 13.7046C4.72664 13.7737 4.69667 13.8613 4.69667 13.9519C4.69667 14.0424 4.72664 14.13 4.78128 14.1992C4.83587 14.2683 4.91163 14.3145 4.99503 14.3295H8.38368V15.0741H4.99497C4.94644 15.0829 4.90047 15.1022 4.85977 15.1304C4.83878 15.145 4.81919 15.162 4.80136 15.1811C4.79439 15.1885 4.78765 15.1964 4.78122 15.2045C4.77188 15.2163 4.76327 15.2287 4.75539 15.2416C4.74441 15.2594 4.73495 15.2781 4.727 15.2975C4.71924 15.3163 4.71293 15.3358 4.70808 15.3558C4.70407 15.3723 4.7011 15.389 4.69922 15.4061C4.69752 15.4212 4.69667 15.4364 4.69667 15.4518C4.69667 15.5423 4.72664 15.6299 4.78122 15.6991C4.83587 15.7682 4.91157 15.8144 4.99497 15.8295H8.38368V16.5847H4.99497C4.91157 16.5998 4.83587 16.6459 4.78122 16.7151C4.72664 16.7842 4.69667 16.8718 4.69667 16.9624C4.69667 17.0529 4.72664 17.1405 4.78122 17.2097C4.83587 17.2788 4.91157 17.325 4.99497 17.34H9.54637C9.58655 17.3328 9.62496 17.3183 9.66008 17.2975H13.571ZM15.7573 4.52124L18.3609 7.30839C18.3758 7.32612 18.3858 7.34796 18.3897 7.37145C18.3937 7.39493 18.3914 7.41913 18.3831 7.44128C18.3748 7.46343 18.3609 7.48266 18.3429 7.49678C18.325 7.51089 18.3036 7.51934 18.2814 7.52115H15.7275L15.5585 7.34031V4.60634C15.5602 4.58255 15.5681 4.55975 15.5813 4.54051C15.5945 4.52128 15.6125 4.50639 15.6332 4.49753C15.6539 4.48867 15.6765 4.48619 15.6984 4.49038C15.7203 4.49457 15.7407 4.50526 15.7573 4.52124ZM14.1248 5.91437C14.1732 5.97391 14.2021 6.04884 14.2071 6.1276C14.2157 6.17377 14.2155 6.22129 14.2065 6.26739C14.2045 6.27778 14.2021 6.28804 14.1992 6.29817L14.1944 6.31388C14.1847 6.34291 14.1715 6.3705 14.1551 6.39595C14.13 6.43465 14.098 6.46757 14.0608 6.49276C14.0354 6.5099 14.008 6.52328 13.9794 6.53244C13.9661 6.53672 13.9525 6.5401 13.9387 6.5425H9.71529C9.62309 6.5425 9.5346 6.50328 9.4694 6.43342C9.40413 6.36362 9.3675 6.26889 9.3675 6.17013C9.3675 6.07144 9.40413 5.97671 9.4694 5.90691C9.5346 5.83704 9.62309 5.79783 9.71529 5.79783H13.9387C13.9718 5.80516 14.0034 5.81769 14.0326 5.83484C14.0672 5.85522 14.0984 5.88204 14.1248 5.91437ZM14.2667 7.29776H9.72529C9.69606 7.30302 9.66773 7.31211 9.64092 7.3247C9.62612 7.33171 9.61175 7.33977 9.59798 7.34879C9.56565 7.36996 9.53642 7.39664 9.51155 7.42813C9.4569 7.49722 9.42694 7.58487 9.42694 7.67538C9.42694 7.70155 9.42942 7.72752 9.43434 7.75285C9.44635 7.81505 9.47273 7.87355 9.51155 7.9227C9.55292 7.9751 9.60647 8.01432 9.66628 8.03678C9.67762 8.04107 9.6892 8.04477 9.70097 8.04775C9.70898 8.04983 9.71711 8.05158 9.72529 8.05308H14.2667C14.3546 8.04756 14.437 8.00555 14.4964 7.93601C14.5558 7.86647 14.5875 7.77492 14.5847 7.68071C14.5874 7.63318 14.5813 7.58559 14.5667 7.54059C14.5522 7.4956 14.5296 7.45417 14.5 7.41859C14.4704 7.38301 14.4346 7.35398 14.3946 7.33327C14.3546 7.31256 14.3111 7.30048 14.2667 7.29776ZM4.99497 18.84H12.786C12.8783 18.84 12.9667 18.8008 13.032 18.731C13.0972 18.6611 13.1338 18.5664 13.1338 18.4677C13.1338 18.3689 13.0972 18.2742 13.032 18.2044C12.9667 18.1346 12.8783 18.0954 12.786 18.0954H4.99497C4.90277 18.0954 4.81428 18.1346 4.74908 18.2044C4.68381 18.2742 4.64718 18.3689 4.64718 18.4677C4.64718 18.5664 4.68381 18.6611 4.74908 18.731C4.81428 18.8008 4.90277 18.84 4.99497 18.84ZM17.5858 12.7444H19.5733H19.623C19.7249 12.7499 19.821 12.7971 19.8913 12.8764C19.9616 12.9556 20.0007 13.0607 20.0006 13.17V13.8295C20.0007 13.8458 19.9976 13.862 19.9914 13.8769C19.9853 13.8918 19.9764 13.9052 19.9652 13.9163C19.9539 13.9273 19.9407 13.9357 19.9262 13.9409C19.9118 13.9461 19.8965 13.948 19.8814 13.9465H13.7797C13.7507 13.9465 13.7229 13.9342 13.7024 13.9123C13.6819 13.8903 13.6704 13.8606 13.6704 13.8295V13.17C13.6677 13.0617 13.7046 12.9566 13.7733 12.8771C13.842 12.7976 13.9371 12.75 14.0381 12.7444H16.0256V12.5104C16.0352 12.439 16.0687 12.3737 16.1199 12.3268C16.1711 12.2798 16.2365 12.2544 16.3039 12.2551H17.2976C17.3667 12.2517 17.4345 12.276 17.4878 12.3232C17.541 12.3704 17.576 12.4371 17.5858 12.5104V12.7444ZM14.0679 19.4251V14.1912H19.5037V19.4251C19.4935 19.585 19.4256 19.7344 19.3143 19.8416C19.203 19.9488 19.0571 20.0055 18.9075 19.9996H14.6642C14.5146 20.0055 14.3687 19.9488 14.2574 19.8416C14.1461 19.7344 14.0781 19.585 14.0679 19.4251ZM15.5983 15.1593H15.2505C15.0969 15.1593 14.9723 15.2926 14.9723 15.4572V18.7336C14.9723 18.8981 15.0969 19.0315 15.2505 19.0315H15.5983C15.752 19.0315 15.8766 18.8981 15.8766 18.7336V15.4572C15.8766 15.2926 15.752 15.1593 15.5983 15.1593ZM16.9598 15.1593H16.612C16.4583 15.1593 16.3337 15.2926 16.3337 15.4572V18.7336C16.3337 18.8981 16.4583 19.0315 16.612 19.0315H16.9598C17.1135 19.0315 17.238 18.8981 17.238 18.7336V15.4572C17.238 15.2926 17.1135 15.1593 16.9598 15.1593ZM17.9635 15.1593H18.3113C18.465 15.1593 18.5895 15.2926 18.5895 15.4572V18.7336C18.5895 18.8981 18.465 19.0315 18.3113 19.0315H17.9635C17.8098 19.0315 17.6852 18.8981 17.6852 18.7336V15.4572C17.6852 15.2926 17.8098 15.1593 17.9635 15.1593Z",acceptSingleChange:"M17.2 20H15.6628L17.33 18.3091V19.87C17.33 19.8871 17.3266 19.904 17.3201 19.9197C17.3136 19.9355 17.304 19.9499 17.2919 19.9619C17.2799 19.974 17.2655 19.9836 17.2497 19.9901C17.234 19.9966 17.2171 20 17.2 20ZM4.13 20H14.4978L14.1823 19.6791L13.5135 18.9904L13.5123 18.9891L13.0529 18.52H5C4.87537 18.52 4.75586 18.4705 4.66766 18.3823C4.57953 18.2942 4.53003 18.1747 4.53003 18.05C4.53003 17.9253 4.57953 17.8058 4.66766 17.7177C4.75586 17.6295 4.87537 17.58 5 17.58H12.1323L11.6235 17.0604L11.6231 16.48L12.8831 15.19L13.4765 15.1896L15.0807 16.8276L17.33 14.5413V9.3H13.28C13.207 9.30976 13.133 9.30976 13.06 9.3C12.7697 9.22119 12.5113 9.05343 12.3212 8.82027C12.1311 8.58711 12.0187 8.30026 12 8V4H4.13C4.09552 4 4.06246 4.0137 4.03808 4.03808C4.0137 4.06246 4 4.09552 4 4.13V19.87C4 19.9045 4.0137 19.9375 4.03808 19.9619C4.06246 19.9863 4.09552 20 4.13 20ZM13.1 4.65L16.6 8.15C16.6212 8.17232 16.6355 8.20028 16.6412 8.23051C16.6469 8.26075 16.6437 8.29199 16.6321 8.32048C16.6205 8.34898 16.6009 8.37352 16.5757 8.39117C16.5505 8.40882 16.5208 8.41883 16.49 8.42H13.06L12.83 8.19V4.76C12.8312 4.72925 12.8412 4.6995 12.8588 4.67429C12.8765 4.64909 12.901 4.62951 12.9295 4.6179C12.958 4.6063 12.9893 4.60315 13.0195 4.60884C13.0497 4.61453 13.0777 4.62882 13.1 4.65ZM11 6.72C11.0027 6.66089 10.9937 6.60184 10.9735 6.5462C10.9534 6.49057 10.9224 6.43948 10.8825 6.39581C10.8425 6.35217 10.7944 6.3168 10.7408 6.29178C10.6871 6.26678 10.6292 6.25256 10.57 6.25H5C4.88239 6.25772 4.77252 6.31131 4.69397 6.39917C4.61542 6.48706 4.57452 6.60226 4.58002 6.72C4.57452 6.83774 4.61542 6.95294 4.69397 7.04083C4.77252 7.12869 4.88239 7.18228 5 7.19H10.6C10.7141 7.1774 10.8189 7.12173 10.8933 7.03436C10.9677 6.94702 11.0058 6.83456 11 6.72ZM11.1 8.14001H5C4.87537 8.14001 4.75586 8.18954 4.66766 8.27768C4.57953 8.36581 4.53003 8.48535 4.53003 8.61002C4.53003 8.73468 4.57953 8.85422 4.66766 8.94235C4.71558 8.99023 4.77277 9.02673 4.83496 9.05008C4.86932 9.06296 4.90521 9.07184 4.94189 9.07642C4.96106 9.0788 4.98047 9.08002 5 9.08002H11.1C11.2247 9.08002 11.3442 9.03049 11.4324 8.94235C11.5205 8.85422 11.57 8.73468 11.57 8.61002C11.57 8.48535 11.5205 8.36581 11.4324 8.27768C11.3442 8.18954 11.2247 8.14001 11.1 8.14001ZM5 11H15.45C15.5826 11 15.7098 10.9473 15.8035 10.8535C15.8973 10.7598 15.95 10.6326 15.95 10.5C15.95 10.3674 15.8973 10.2402 15.8035 10.1465C15.7098 10.0527 15.5826 10 15.45 10H5C4.86737 10 4.74023 10.0527 4.64642 10.1465C4.55267 10.2402 4.5 10.3674 4.5 10.5C4.5 10.6326 4.55267 10.7598 4.64642 10.8535C4.74023 10.9473 4.86737 11 5 11ZM5 12.86H11.1C11.2211 12.8523 11.3346 12.798 11.4166 12.7085C11.4986 12.6191 11.5428 12.5013 11.54 12.38C11.5427 12.2597 11.4982 12.1431 11.416 12.0552C11.3337 11.9673 11.2203 11.9152 11.1 11.91H5C4.94086 11.9126 4.88287 11.9268 4.82922 11.9518C4.77563 11.9768 4.72748 12.0122 4.6875 12.0558C4.65833 12.0878 4.63391 12.1237 4.61505 12.1624C4.60809 12.1767 4.60193 12.1913 4.5965 12.2062C4.58264 12.2443 4.5741 12.2841 4.57092 12.3243C4.56946 12.3428 4.56915 12.3614 4.57001 12.38C4.56451 12.5004 4.60651 12.6181 4.68689 12.7079C4.76733 12.7976 4.87976 12.8523 5 12.86ZM15.45 14.74H5C4.87537 14.74 4.75586 14.6905 4.66766 14.6023C4.57953 14.5142 4.53003 14.3947 4.53003 14.27C4.53003 14.1453 4.57953 14.0258 4.66766 13.9377C4.75586 13.8495 4.87537 13.8 5 13.8H15.45C15.5747 13.8 15.6942 13.8495 15.7823 13.9377C15.8705 14.0258 15.92 14.1453 15.92 14.27C15.92 14.3947 15.8705 14.5142 15.7823 14.6023C15.6942 14.6905 15.5747 14.74 15.45 14.74ZM11.1 16.63H5C4.87537 16.63 4.75586 16.5805 4.66766 16.4923C4.57953 16.4042 4.53003 16.2846 4.53003 16.16C4.53003 16.0353 4.57953 15.9158 4.66766 15.8276C4.75586 15.7395 4.87537 15.69 5 15.69H11.1C11.2247 15.69 11.3442 15.7395 11.4324 15.8276C11.5205 15.9158 11.57 16.0353 11.57 16.16C11.57 16.2846 11.5205 16.4042 11.4324 16.4923C11.3442 16.5805 11.2247 16.63 11.1 16.63ZM18.73 13.71L20 15.01L15.08 20L15.07 19.99L14.48 19.39L13.81 18.7L11.92 16.77L13.18 15.48L15.08 17.42L18.73 13.71Z",rejectSingleChange:"M17.0495 11.5C17.1461 11.5 17.241 11.5173 17.33 11.5501V9.3H13.28C13.207 9.30976 13.133 9.30976 13.06 9.3C12.7697 9.22119 12.5113 9.05343 12.3212 8.82027C12.1311 8.58711 12.0187 8.30026 12 8V4H4.13C4.09552 4 4.06246 4.0137 4.03808 4.03808C4.0137 4.06246 4 4.09552 4 4.13V19.87C4 19.9045 4.0137 19.9375 4.03808 19.9619C4.06246 19.9863 4.09552 20 4.13 20H13.2305C13.1075 19.8287 13.0338 19.6249 13.0205 19.4112L13.0195 19.3956V18.52H5C4.87537 18.52 4.75586 18.4705 4.66772 18.3823C4.57959 18.2942 4.53003 18.1747 4.53003 18.05C4.53003 18.0119 4.53467 17.9742 4.54358 17.9378C4.56396 17.8552 4.60657 17.7788 4.66772 17.7177C4.75586 17.6295 4.87537 17.58 5 17.58H13.0195V14.74H5C4.87537 14.74 4.75586 14.6905 4.66772 14.6023C4.57959 14.5142 4.53003 14.3947 4.53003 14.27C4.53003 14.1453 4.57959 14.0258 4.66772 13.9377C4.75586 13.8495 4.87537 13.8 5 13.8H12.8393C12.6229 13.6377 12.4998 13.3897 12.4998 13.1032C12.4997 12.8414 12.6008 12.5847 12.7513 12.3911C12.9 12.1998 13.1561 12 13.4994 12L15.2519 12C15.2928 11.8972 15.3589 11.7915 15.4649 11.6992C15.6135 11.5698 15.8041 11.499 16.0011 11.5H17.0495ZM13.1 4.65L16.6 8.15C16.6211 8.17232 16.6354 8.20028 16.6411 8.23051C16.6468 8.26075 16.6437 8.29199 16.6321 8.32048C16.6204 8.34898 16.6009 8.37352 16.5757 8.39117C16.5505 8.40882 16.5207 8.41883 16.49 8.42H13.06L12.83 8.19V4.76C12.8311 4.72925 12.8411 4.6995 12.8588 4.67429C12.8764 4.64909 12.901 4.62951 12.9295 4.6179C12.958 4.6063 12.9892 4.60315 13.0194 4.60884C13.0497 4.61453 13.0776 4.62882 13.1 4.65ZM11 6.72C11.0027 6.66089 10.9937 6.60184 10.9735 6.5462C10.9716 6.5408 10.9695 6.53543 10.9673 6.53012C10.9626 6.51852 10.9575 6.50717 10.9518 6.49603C10.9406 6.47391 10.9275 6.45273 10.9127 6.43274C10.9033 6.41992 10.8932 6.40759 10.8824 6.39581C10.8425 6.35217 10.7943 6.3168 10.7407 6.29178C10.6871 6.26678 10.629 6.25256 10.5699 6.25H5C4.88232 6.25772 4.77246 6.31131 4.69397 6.39917C4.61536 6.48706 4.57446 6.60226 4.57996 6.72C4.57715 6.7811 4.58679 6.84152 4.60767 6.8978C4.61523 6.91803 4.62415 6.93771 4.63452 6.9567C4.65088 6.98669 4.67078 7.01495 4.69397 7.04083C4.77246 7.12869 4.88232 7.18228 5 7.19H10.6C10.714 7.1774 10.8188 7.12173 10.8932 7.03436C10.922 7.00049 10.9454 6.96283 10.9629 6.92273C10.9725 6.9006 10.9805 6.87775 10.9865 6.8544C10.9933 6.82791 10.9977 6.80075 10.9995 6.77325C11.0001 6.76453 11.0004 6.75574 11.0005 6.74695C11.0006 6.73798 11.0005 6.729 11 6.72ZM11.1 8.14001H5C4.97534 8.14001 4.95081 8.14194 4.92676 8.14575C4.89587 8.15063 4.8656 8.15857 4.83643 8.1694C4.77368 8.19272 4.71606 8.2294 4.66772 8.27768C4.57959 8.36581 4.53003 8.48535 4.53003 8.61002C4.53003 8.73468 4.57959 8.85422 4.66772 8.94235C4.75586 9.03049 4.87537 9.08002 5 9.08002H11.1C11.2247 9.08002 11.3442 9.03049 11.4324 8.94235C11.4617 8.91306 11.4867 8.88028 11.5071 8.845C11.5349 8.79691 11.554 8.74414 11.5634 8.68915C11.5677 8.66318 11.5701 8.63672 11.5701 8.61002C11.5701 8.48535 11.5205 8.36581 11.4324 8.27768C11.3929 8.23831 11.3474 8.20663 11.2979 8.18365C11.2365 8.15518 11.1689 8.14001 11.1 8.14001ZM5 11H15.45C15.5826 11 15.7098 10.9473 15.8036 10.8535C15.8973 10.7598 15.95 10.6326 15.95 10.5C15.95 10.3674 15.8973 10.2402 15.8036 10.1465C15.7098 10.0527 15.5826 10 15.45 10H5C4.86743 10 4.74023 10.0527 4.64648 10.1465C4.55273 10.2402 4.5 10.3674 4.5 10.5C4.5 10.6326 4.55273 10.7598 4.64648 10.8535C4.74023 10.9473 4.86743 11 5 11ZM5 12.86H11.1C11.2211 12.8523 11.3346 12.798 11.4166 12.7085C11.4987 12.6191 11.5428 12.5013 11.54 12.38C11.5427 12.2597 11.4982 12.1431 11.4159 12.0552C11.3336 11.9673 11.2202 11.9152 11.1 11.91H5C4.94092 11.9126 4.88281 11.9268 4.82922 11.9518C4.77563 11.9768 4.72742 12.0122 4.6875 12.0558C4.64758 12.0995 4.6167 12.1506 4.59644 12.2062C4.58899 12.2266 4.58313 12.2475 4.57874 12.2687C4.57129 12.3052 4.56824 12.3426 4.56995 12.38C4.56445 12.5004 4.60645 12.6181 4.68689 12.7079C4.76733 12.7976 4.87976 12.8523 5 12.86ZM11.1 16.63H5C4.87537 16.63 4.75586 16.5805 4.66772 16.4923C4.57959 16.4042 4.53003 16.2846 4.53003 16.16C4.53003 16.0353 4.57959 15.9158 4.66772 15.8276C4.75586 15.7395 4.87537 15.69 5 15.69H11.1C11.2247 15.69 11.3442 15.7395 11.4324 15.8276C11.5205 15.9158 11.5701 16.0353 11.5701 16.16C11.5701 16.2846 11.5205 16.4042 11.4324 16.4923C11.3442 16.5805 11.2247 16.63 11.1 16.63ZM19.59 12.53H17.36V12.3C17.3574 12.2195 17.3236 12.1432 17.2657 12.0872C17.2078 12.0313 17.1305 12 17.05 12H16C15.9242 11.9994 15.8509 12.0265 15.7938 12.0762C15.7367 12.126 15.6997 12.1949 15.69 12.27V12.5H13.44C13.3768 12.4994 13.3142 12.5125 13.2565 12.5382C13.1988 12.564 13.1473 12.6019 13.1055 12.6493C13.0638 12.6968 13.0327 12.7526 13.0145 12.8132C12.9963 12.8737 12.9913 12.9374 13 13V13.67C13 13.6871 13.0033 13.704 13.0099 13.7198C13.0164 13.7355 13.026 13.7499 13.038 13.7619C13.0501 13.774 13.0644 13.7836 13.0802 13.7901C13.096 13.7966 13.1129 13.8 13.13 13.8H19.84C19.8611 13.8054 19.8834 13.8054 19.9045 13.8C19.9257 13.7946 19.9452 13.7839 19.9611 13.7689C19.9771 13.754 19.989 13.7352 19.9958 13.7144C20.0026 13.6937 20.004 13.6715 20 13.65V13C20.0028 12.8866 19.9617 12.7765 19.8853 12.6927C19.809 12.6088 19.7031 12.5577 19.59 12.55V12.53ZM13.52 14V19.38C13.5303 19.5454 13.6054 19.7 13.7289 19.8105C13.8525 19.9209 14.0145 19.9782 14.18 19.97H18.84C19.0055 19.9782 19.1676 19.9209 19.2911 19.8105C19.4146 19.7 19.4897 19.5454 19.5 19.38V14H13.52ZM15.52 18.67C15.52 18.7522 15.4874 18.8311 15.4292 18.8892C15.3711 18.9473 15.2922 18.98 15.21 18.98H14.83C14.7478 18.98 14.669 18.9473 14.6108 18.8892C14.5527 18.8311 14.52 18.7522 14.52 18.67V15.33C14.52 15.2893 14.528 15.249 14.5436 15.2114C14.5592 15.1738 14.582 15.1396 14.6108 15.1108C14.6396 15.082 14.6738 15.0592 14.7114 15.0436C14.749 15.028 14.7893 15.02 14.83 15.02H15.21C15.2507 15.02 15.291 15.028 15.3287 15.0436C15.3663 15.0592 15.4004 15.082 15.4292 15.1108C15.458 15.1396 15.4808 15.1738 15.4964 15.2114C15.512 15.249 15.52 15.2893 15.52 15.33V18.67ZM17.01 18.67C17.01 18.7522 16.9774 18.8311 16.9192 18.8892C16.8611 18.9473 16.7822 18.98 16.7 18.98H16.32C16.2798 18.98 16.2399 18.9719 16.2029 18.9562C16.1658 18.9405 16.1323 18.9176 16.1043 18.8886C16.0763 18.8597 16.0544 18.8254 16.0399 18.7879C16.0254 18.7503 16.0187 18.7102 16.02 18.67V15.33C16.0187 15.2898 16.0254 15.2497 16.0399 15.2121C16.0544 15.1746 16.0763 15.1403 16.1043 15.1114C16.1323 15.0824 16.1658 15.0595 16.2029 15.0438C16.2399 15.0281 16.2798 15.02 16.32 15.02H16.7C16.7407 15.02 16.781 15.028 16.8187 15.0436C16.8563 15.0592 16.8904 15.082 16.9192 15.1108C16.948 15.1396 16.9708 15.1738 16.9864 15.2114C17.002 15.249 17.01 15.2893 17.01 15.33V18.67ZM18.51 18.67C18.51 18.7107 18.502 18.751 18.4864 18.7886C18.4708 18.8262 18.448 18.8604 18.4192 18.8892C18.3904 18.918 18.3563 18.9408 18.3187 18.9564C18.281 18.972 18.2407 18.98 18.2 18.98H17.82C17.7378 18.98 17.659 18.9473 17.6008 18.8892C17.5427 18.8311 17.51 18.7522 17.51 18.67V15.33C17.51 15.2893 17.518 15.249 17.5336 15.2114C17.5492 15.1738 17.572 15.1396 17.6008 15.1108C17.6296 15.082 17.6638 15.0592 17.7014 15.0436C17.739 15.028 17.7793 15.02 17.82 15.02H18.2C18.2407 15.02 18.281 15.028 18.3187 15.0436C18.3563 15.0592 18.3904 15.082 18.4192 15.1108C18.448 15.1396 18.4708 15.1738 18.4864 15.2114C18.502 15.249 18.51 15.2893 18.51 15.33V18.67Z"},
679V
vendor: 100,814 bytes, line 679
679.FILEICONS={docIcon:{extension:".doc",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 9.617188 46.875 C 13.234375 46.875 16.160156 43.929688 16.160156 40.292969 C 16.160156 36.695312 13.234375 33.75 9.617188 33.75 L 7.402344 33.75 C 6.820312 33.75 6.371094 34.199219 6.371094 34.78125 L 6.371094 45.84375 C 6.371094 46.335938 6.714844 46.757812 7.191406 46.855469 L 7.402344 46.875 Z M 9.617188 44.792969 L 8.453125 44.792969 L 8.453125 35.832031 L 9.617188 35.832031 C 12.089844 35.832031 14.078125 37.835938 14.078125 40.292969 C 14.078125 42.789062 12.089844 44.773438 9.617188 44.792969 Z M 24.816406 46.875 C 26.539062 46.875 28.191406 46.085938 29.296875 44.867188 C 30.460938 43.648438 31.191406 41.980469 31.191406 40.125 C 31.191406 38.269531 30.460938 36.617188 29.296875 35.382812 C 28.191406 34.144531 26.539062 33.375 24.816406 33.375 C 23.015625 33.375 21.367188 34.144531 20.222656 35.382812 C 19.058594 36.617188 18.367188 38.269531 18.367188 40.125 C 18.367188 41.980469 19.058594 43.648438 20.222656 44.867188 C 21.367188 46.085938 23.015625 46.875 24.816406 46.875 Z M 24.816406 44.738281 C 23.617188 44.738281 22.566406 44.230469 21.777344 43.386719 C 20.992188 42.582031 20.503906 41.398438 20.503906 40.125 C 20.503906 38.851562 20.992188 37.667969 21.777344 36.84375 C 22.566406 36 23.617188 35.511719 24.816406 35.511719 C 25.941406 35.511719 26.992188 36 27.777344 36.84375 C 28.546875 37.667969 29.054688 38.851562 29.054688 40.125 C 29.054688 41.398438 28.546875 42.582031 27.777344 43.386719 C 26.992188 44.230469 25.941406 44.738281 24.816406 44.738281 Z M 39.996094 46.875 C 41.648438 46.875 43.148438 46.332031 44.328125 45.414062 C 44.777344 45.054688 44.851562 44.382812 44.515625 43.914062 C 44.140625 43.460938 43.445312 43.386719 43.015625 43.707031 C 42.171875 44.382812 41.160156 44.738281 39.996094 44.738281 C 38.703125 44.738281 37.503906 44.210938 36.621094 43.386719 C 35.777344 42.5625 35.253906 41.398438 35.253906 40.125 C 35.253906 38.851562 35.777344 37.726562 36.621094 36.863281 C 37.503906 36.039062 38.703125 35.511719 39.996094 35.511719 C 41.160156 35.511719 42.191406 35.867188 43.015625 36.542969 C 43.445312 36.882812 44.140625 36.804688 44.515625 36.335938 C 44.851562 35.867188 44.777344 35.210938 44.328125 34.835938 C 43.148438 33.917969 41.648438 33.375 39.996094 33.375 C 36.246094 33.394531 33.132812 36.414062 33.117188 40.125 C 33.132812 43.855469 36.246094 46.875 39.996094 46.875 Z M 39.996094 46.875 "/>\n </g>'},gifIcon:{extension:".gif",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 17.394531 46.875 C 18.988281 46.875 20.46875 46.332031 21.648438 45.414062 C 21.835938 45.28125 21.949219 45.132812 22.003906 44.960938 L 22.003906 44.945312 C 22.023438 44.90625 22.023438 44.886719 22.042969 44.851562 C 22.0625 44.738281 22.097656 44.664062 22.097656 44.53125 L 22.097656 40.386719 C 22.097656 39.789062 21.613281 39.335938 21.011719 39.335938 L 17.28125 39.335938 C 16.699219 39.335938 16.210938 39.789062 16.210938 40.386719 C 16.210938 40.96875 16.699219 41.457031 17.28125 41.457031 L 19.960938 41.457031 L 19.960938 44.023438 C 19.210938 44.457031 18.332031 44.738281 17.394531 44.738281 C 16.042969 44.738281 14.863281 44.230469 14.019531 43.367188 C 13.136719 42.523438 12.613281 41.382812 12.613281 40.144531 C 12.613281 38.867188 13.136719 37.726562 14.019531 36.882812 C 14.863281 36.019531 16.042969 35.511719 17.394531 35.511719 C 18.519531 35.511719 19.550781 35.90625 20.355469 36.523438 C 20.824219 36.898438 21.519531 36.804688 21.875 36.355469 C 22.230469 35.886719 22.15625 35.195312 21.667969 34.835938 C 20.503906 33.917969 18.988281 33.375 17.394531 33.375 C 13.585938 33.375 10.472656 36.375 10.472656 40.144531 C 10.472656 43.894531 13.585938 46.875 17.394531 46.875 Z M 26.945312 46.875 C 27.507812 46.875 27.996094 46.425781 27.996094 45.84375 L 27.996094 34.78125 C 27.996094 34.199219 27.507812 33.75 26.945312 33.75 C 26.363281 33.75 25.914062 34.199219 25.914062 34.78125 L 25.914062 45.84375 C 25.914062 46.425781 26.363281 46.875 26.945312 46.875 Z M 33.066406 46.875 C 33.648438 46.875 34.117188 46.40625 34.117188 45.84375 L 34.117188 41.34375 L 38.488281 41.34375 C 39.050781 41.34375 39.519531 40.875 39.519531 40.292969 C 39.519531 39.75 39.050781 39.261719 38.488281 39.261719 L 34.117188 39.261719 L 34.117188 35.832031 L 39.199219 35.832031 C 39.742188 35.832031 40.230469 35.363281 40.230469 34.78125 C 40.230469 34.21875 39.742188 33.75 39.199219 33.75 L 33.066406 33.75 C 32.488281 33.75 32.035156 34.21875 32.035156 34.78125 L 32.035156 45.84375 C 32.035156 46.40625 32.488281 46.875 33.066406 46.875 Z M 33.066406 46.875 "/>\n </g>'},jpegIcon:{extension:".jpeg",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 9 43.75 C 11.140625 43.75 12.890625 42.015625 12.890625 39.875 L 12.890625 33.671875 C 12.890625 33.1875 12.5 32.8125 12.03125 32.8125 C 11.546875 32.8125 11.15625 33.1875 11.15625 33.671875 L 11.15625 39.875 C 11.15625 41.046875 10.1875 42.015625 9 42.015625 C 8.046875 42.015625 7.234375 41.390625 6.953125 40.53125 C 6.8125 40.078125 6.328125 39.828125 5.859375 39.984375 C 5.421875 40.109375 5.15625 40.59375 5.3125 41.0625 C 5.8125 42.625 7.28125 43.75 9 43.75 Z M 15.640625 43.75 C 16.125 43.75 16.515625 43.359375 16.515625 42.890625 L 16.515625 39.5 L 18.4375 39.5 C 20.296875 39.5 21.796875 38 21.796875 36.171875 C 21.796875 34.3125 20.296875 32.8125 18.4375 32.8125 L 15.640625 32.8125 C 15.171875 32.8125 14.78125 33.1875 14.78125 33.671875 L 14.78125 42.890625 C 14.78125 43.359375 15.171875 43.75 15.640625 43.75 Z M 18.4375 37.765625 L 16.515625 37.765625 L 16.515625 34.546875 L 18.4375 34.546875 C 19.34375 34.546875 20.046875 35.265625 20.0625 36.171875 C 20.046875 37.046875 19.34375 37.765625 18.4375 37.765625 Z M 29.234375 43.75 C 29.6875 43.75 30.09375 43.359375 30.09375 42.890625 C 30.09375 42.40625 29.6875 42.015625 29.234375 42.015625 L 25 42.015625 L 25 39.140625 L 28.640625 39.140625 C 29.109375 39.140625 29.5 38.75 29.5 38.265625 C 29.5 37.8125 29.109375 37.40625 28.640625 37.40625 L 25 37.40625 L 25 34.546875 L 29.234375 34.546875 C 29.6875 34.546875 30.09375 34.15625 30.09375 33.671875 C 30.09375 33.1875 29.6875 32.8125 29.234375 32.8125 L 24.125 32.8125 C 23.640625 32.8125 23.265625 33.1875 23.265625 33.671875 L 23.265625 42.890625 C 23.265625 43.359375 23.640625 43.75 24.125 43.75 C 24.125 43.75 24.140625 43.734375 24.140625 43.734375 C 24.140625 43.734375 24.140625 43.75 24.171875 43.75 Z M 37.1875 43.75 C 38.515625 43.75 39.75 43.296875 40.734375 42.53125 C 40.890625 42.421875 40.984375 42.296875 41.03125 42.15625 L 41.03125 42.140625 C 41.046875 42.109375 41.046875 42.09375 41.0625 42.0625 C 41.078125 41.96875 41.109375 41.90625 41.109375 41.796875 L 41.109375 38.34375 C 41.109375 37.914062 40.8125 37.578125 40.410156 37.492188 L 40.203125 37.46875 L 37.09375 37.46875 C 36.609375 37.46875 36.203125 37.84375 36.203125 38.34375 C 36.203125 38.828125 36.609375 39.234375 37.09375 39.234375 L 39.328125 39.234375 L 39.328125 41.375 C 38.703125 41.734375 37.96875 41.96875 37.1875 41.96875 C 36.0625 41.96875 35.078125 41.546875 34.375 40.828125 C 33.640625 40.125 33.203125 39.171875 33.203125 38.140625 C 33.203125 37.078125 33.640625 36.125 34.375 35.421875 C 35.078125 34.703125 36.0625 34.28125 37.1875 34.28125 C 38.125 34.28125 38.984375 34.609375 39.65625 35.125 C 40.046875 35.4375 40.625 35.359375 40.921875 34.984375 C 41.21875 34.59375 41.15625 34.015625 40.75 33.71875 C 39.78125 32.953125 38.515625 32.5 37.1875 32.5 C 34.015625 32.5 31.421875 35 31.421875 38.140625 C 31.421875 41.265625 34.015625 43.75 37.1875 43.75 Z M 37.1875 43.75 "/>\n </g>'},logIcon:{extension:".log",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 13.542969 46.875 C 14.085938 46.875 14.574219 46.40625 14.574219 45.84375 C 14.574219 45.261719 14.085938 44.792969 13.542969 44.792969 L 8.460938 44.792969 L 8.460938 34.78125 C 8.460938 34.21875 7.992188 33.75 7.410156 33.75 C 6.828125 33.75 6.378906 34.21875 6.378906 34.78125 L 6.378906 45.84375 C 6.378906 46.40625 6.828125 46.875 7.410156 46.875 Z M 21.742188 46.875 C 23.46875 46.875 25.117188 46.085938 26.222656 44.867188 C 27.386719 43.648438 28.117188 41.980469 28.117188 40.125 C 28.117188 38.269531 27.386719 36.617188 26.222656 35.382812 C 25.117188 34.144531 23.46875 33.375 21.742188 33.375 C 19.941406 33.375 18.292969 34.144531 17.148438 35.382812 C 15.984375 36.617188 15.292969 38.269531 15.292969 40.125 C 15.292969 41.980469 15.984375 43.648438 17.148438 44.867188 C 18.292969 46.085938 19.941406 46.875 21.742188 46.875 Z M 21.742188 44.738281 C 20.542969 44.738281 19.492188 44.230469 18.703125 43.386719 C 17.917969 42.582031 17.429688 41.398438 17.429688 40.125 C 17.429688 38.851562 17.917969 37.667969 18.703125 36.84375 C 19.492188 36 20.542969 35.511719 21.742188 35.511719 C 22.867188 35.511719 23.917969 36 24.703125 36.84375 C 25.472656 37.667969 25.980469 38.851562 25.980469 40.125 C 25.980469 41.398438 25.472656 42.582031 24.703125 43.386719 C 23.917969 44.230469 22.867188 44.738281 21.742188 44.738281 Z M 37.300781 46.875 C 38.894531 46.875 40.375 46.332031 41.558594 45.414062 C 41.746094 45.28125 41.855469 45.132812 41.914062 44.960938 L 41.914062 44.945312 L 41.949219 44.851562 C 41.96875 44.738281 42.007812 44.664062 42.007812 44.53125 L 42.007812 40.386719 C 42.007812 39.789062 41.519531 39.335938 40.917969 39.335938 L 37.1875 39.335938 C 36.605469 39.335938 36.121094 39.789062 36.121094 40.386719 C 36.121094 40.96875 36.605469 41.457031 37.1875 41.457031 L 39.871094 41.457031 L 39.871094 44.023438 C 39.121094 44.457031 38.238281 44.738281 37.300781 44.738281 C 35.949219 44.738281 34.769531 44.230469 33.925781 43.367188 C 33.042969 42.523438 32.519531 41.382812 32.519531 40.144531 C 32.519531 38.867188 33.042969 37.726562 33.925781 36.882812 C 34.769531 36.019531 35.949219 35.511719 37.300781 35.511719 C 38.425781 35.511719 39.457031 35.90625 40.261719 36.523438 C 40.730469 36.898438 41.425781 36.804688 41.78125 36.355469 C 42.136719 35.886719 42.0625 35.195312 41.574219 34.835938 C 40.414062 33.917969 38.894531 33.375 37.300781 33.375 C 33.496094 33.375 30.382812 36.375 30.382812 40.144531 C 30.382812 43.894531 33.496094 46.875 37.300781 46.875 Z M 37.300781 46.875 "/>\n </g>'},movIcon:{extension:".mov",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 15.472656 46.875 C 16.035156 46.875 16.523438 46.40625 16.523438 45.84375 L 16.523438 34.78125 C 16.523438 34.289062 16.152344 33.882812 15.679688 33.777344 L 15.472656 33.75 L 15.453125 33.75 C 15.117188 33.75 14.816406 33.898438 14.609375 34.179688 L 10.878906 39.355469 L 7.148438 34.179688 C 6.960938 33.898438 6.625 33.75 6.324219 33.75 L 6.265625 33.75 C 5.703125 33.75 5.234375 34.21875 5.234375 34.78125 L 5.234375 45.84375 C 5.234375 46.40625 5.703125 46.875 6.265625 46.875 C 6.847656 46.875 7.316406 46.40625 7.316406 45.84375 L 7.316406 37.949219 L 10 41.699219 C 10.203125 41.980469 10.523438 42.132812 10.859375 42.132812 L 10.898438 42.132812 C 11.234375 42.132812 11.535156 41.980469 11.742188 41.699219 L 14.441406 37.949219 L 14.441406 45.84375 C 14.441406 46.40625 14.890625 46.875 15.472656 46.875 Z M 25.460938 46.875 C 27.1875 46.875 28.835938 46.085938 29.941406 44.867188 C 31.105469 43.648438 31.835938 41.980469 31.835938 40.125 C 31.835938 38.269531 31.105469 36.617188 29.941406 35.382812 C 28.835938 34.144531 27.1875 33.375 25.460938 33.375 C 23.660156 33.375 22.011719 34.144531 20.867188 35.382812 C 19.703125 36.617188 19.011719 38.269531 19.011719 40.125 C 19.011719 41.980469 19.703125 43.648438 20.867188 44.867188 C 22.011719 46.085938 23.660156 46.875 25.460938 46.875 Z M 25.460938 44.738281 C 24.261719 44.738281 23.210938 44.230469 22.421875 43.386719 C 21.636719 42.582031 21.148438 41.398438 21.148438 40.125 C 21.148438 38.851562 21.636719 37.667969 22.421875 36.84375 C 23.210938 36 24.261719 35.511719 25.460938 35.511719 C 26.585938 35.511719 27.636719 36 28.421875 36.84375 C 29.191406 37.667969 29.699219 38.851562 29.699219 40.125 C 29.699219 41.398438 29.191406 42.582031 28.421875 43.386719 C 27.636719 44.230469 26.585938 44.738281 25.460938 44.738281 Z M 38.683594 46.855469 L 38.71875 46.855469 C 38.777344 46.835938 38.8125 46.820312 38.871094 46.820312 C 38.886719 46.800781 38.886719 46.800781 38.90625 46.800781 C 38.964844 46.78125 39.019531 46.726562 39.058594 46.707031 L 39.09375 46.6875 L 39.207031 46.59375 C 39.226562 46.574219 39.226562 46.574219 39.246094 46.539062 L 39.339844 46.425781 C 39.355469 46.425781 39.355469 46.425781 39.355469 46.40625 C 39.394531 46.367188 39.414062 46.292969 39.433594 46.257812 L 44.0625 35.304688 C 44.269531 34.800781 44.027344 34.179688 43.5 33.976562 C 42.996094 33.75 42.375 33.992188 42.152344 34.519531 L 38.496094 43.199219 L 34.839844 34.519531 C 34.613281 33.992188 34.011719 33.75 33.507812 33.976562 C 32.964844 34.179688 32.71875 34.800781 32.945312 35.304688 L 37.539062 46.257812 C 37.574219 46.292969 37.613281 46.367188 37.632812 46.40625 C 37.632812 46.425781 37.652344 46.425781 37.652344 46.425781 C 37.667969 46.460938 37.707031 46.5 37.746094 46.539062 C 37.746094 46.574219 37.761719 46.574219 37.761719 46.59375 C 37.820312 46.632812 37.855469 46.648438 37.894531 46.6875 L 37.914062 46.6875 C 37.96875 46.726562 38.042969 46.78125 38.082031 46.800781 L 38.101562 46.800781 C 38.101562 46.800781 38.121094 46.800781 38.121094 46.820312 C 38.15625 46.820312 38.230469 46.835938 38.269531 46.855469 L 38.308594 46.855469 L 38.402344 46.871094 L 38.496094 46.875 C 38.550781 46.875 38.605469 46.875 38.683594 46.855469 Z M 38.683594 46.855469 "/>\n </g>'},ogvIcon:{extension:".ogv",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 11.511719 46.875 C 13.238281 46.875 14.886719 46.085938 15.996094 44.867188 C 17.15625 43.648438 17.886719 41.980469 17.886719 40.125 C 17.886719 38.269531 17.15625 36.617188 15.996094 35.382812 C 14.886719 34.144531 13.238281 33.375 11.511719 33.375 C 9.714844 33.375 8.0625 34.144531 6.917969 35.382812 C 5.757812 36.617188 5.0625 38.269531 5.0625 40.125 C 5.0625 41.980469 5.757812 43.648438 6.917969 44.867188 C 8.0625 46.085938 9.714844 46.875 11.511719 46.875 Z M 11.511719 44.738281 C 10.3125 44.738281 9.261719 44.230469 8.476562 43.386719 C 7.6875 42.582031 7.199219 41.398438 7.199219 40.125 C 7.199219 38.851562 7.6875 37.667969 8.476562 36.84375 C 9.261719 36 10.3125 35.511719 11.511719 35.511719 C 12.636719 35.511719 13.6875 36 14.476562 36.84375 C 15.246094 37.667969 15.75 38.851562 15.75 40.125 C 15.75 41.398438 15.246094 42.582031 14.476562 43.386719 C 13.6875 44.230469 12.636719 44.738281 11.511719 44.738281 Z M 27.25 46.875 C 28.84375 46.875 30.324219 46.332031 31.507812 45.414062 C 31.695312 45.28125 31.804688 45.132812 31.863281 44.960938 L 31.863281 44.945312 C 31.882812 44.90625 31.882812 44.886719 31.898438 44.851562 C 31.917969 44.738281 31.957031 44.664062 31.957031 44.53125 L 31.957031 40.386719 C 31.957031 39.789062 31.46875 39.335938 30.867188 39.335938 L 27.136719 39.335938 C 26.554688 39.335938 26.070312 39.789062 26.070312 40.386719 C 26.070312 40.96875 26.554688 41.457031 27.136719 41.457031 L 29.820312 41.457031 L 29.820312 44.023438 C 29.070312 44.457031 28.1875 44.738281 27.25 44.738281 C 25.898438 44.738281 24.71875 44.230469 23.875 43.367188 C 22.992188 42.523438 22.46875 41.382812 22.46875 40.144531 C 22.46875 38.867188 22.992188 37.726562 23.875 36.882812 C 24.71875 36.019531 25.898438 35.511719 27.25 35.511719 C 28.375 35.511719 29.40625 35.90625 30.210938 36.523438 C 30.679688 36.898438 31.375 36.804688 31.730469 36.355469 C 32.085938 35.886719 32.011719 35.195312 31.523438 34.835938 C 30.363281 33.917969 28.84375 33.375 27.25 33.375 C 23.445312 33.375 20.332031 36.375 20.332031 40.144531 C 20.332031 43.894531 23.445312 46.875 27.25 46.875 Z M 40.191406 46.855469 L 40.230469 46.855469 C 40.285156 46.835938 40.324219 46.820312 40.378906 46.820312 C 40.398438 46.800781 40.398438 46.800781 40.417969 46.800781 C 40.472656 46.78125 40.53125 46.726562 40.566406 46.707031 C 40.605469 46.6875 40.605469 46.6875 40.605469 46.6875 L 40.71875 46.59375 C 40.738281 46.574219 40.738281 46.574219 40.753906 46.539062 L 40.847656 46.425781 C 40.867188 46.425781 40.867188 46.425781 40.867188 46.40625 C 40.90625 46.367188 40.925781 46.292969 40.941406 46.257812 L 45.574219 35.304688 C 45.78125 34.800781 45.535156 34.179688 45.011719 33.976562 C 44.503906 33.75 43.886719 33.992188 43.660156 34.519531 L 40.003906 43.199219 L 36.347656 34.519531 C 36.125 33.992188 35.523438 33.75 35.019531 33.976562 C 34.472656 34.179688 34.230469 34.800781 34.457031 35.304688 L 39.050781 46.257812 C 39.085938 46.292969 39.125 46.367188 39.144531 46.40625 C 39.144531 46.425781 39.160156 46.425781 39.160156 46.425781 C 39.179688 46.460938 39.21875 46.5 39.253906 46.539062 C 39.253906 46.574219 39.273438 46.574219 39.273438 46.59375 C 39.332031 46.632812 39.367188 46.648438 39.40625 46.6875 L 39.425781 46.6875 C 39.480469 46.726562 39.554688 46.78125 39.59375 46.800781 L 39.613281 46.800781 C 39.613281 46.800781 39.628906 46.800781 39.628906 46.820312 C 39.667969 46.820312 39.742188 46.835938 39.78125 46.855469 L 39.816406 46.855469 L 39.910156 46.871094 L 40.003906 46.875 C 40.0625 46.875 40.117188 46.875 40.191406 46.855469 Z M 40.191406 46.855469 "/>\n </g>'},pngIcon:{extension:".png",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 7.523438 46.875 C 8.105469 46.875 8.574219 46.40625 8.574219 45.84375 L 8.574219 41.773438 L 10.878906 41.773438 C 13.109375 41.773438 14.910156 39.976562 14.910156 37.78125 C 14.910156 35.550781 13.109375 33.75 10.878906 33.75 L 7.523438 33.75 C 6.960938 33.75 6.492188 34.199219 6.492188 34.78125 L 6.492188 45.84375 C 6.492188 46.40625 6.960938 46.875 7.523438 46.875 Z M 10.878906 39.695312 L 8.574219 39.695312 L 8.574219 35.832031 L 10.878906 35.832031 C 11.964844 35.832031 12.808594 36.695312 12.828125 37.78125 C 12.808594 38.832031 11.964844 39.695312 10.878906 39.695312 Z M 26.75 46.875 C 27.3125 46.875 27.78125 46.40625 27.78125 45.84375 L 27.78125 34.949219 C 27.78125 34.40625 27.3125 33.9375 26.75 33.9375 C 26.1875 33.9375 25.738281 34.40625 25.738281 34.949219 L 25.738281 42.675781 L 19.679688 34.292969 C 19.363281 33.84375 18.722656 33.75 18.253906 34.070312 C 17.972656 34.273438 17.824219 34.613281 17.84375 34.929688 L 17.84375 45.84375 C 17.84375 46.40625 18.292969 46.875 18.875 46.875 C 19.417969 46.875 19.886719 46.40625 19.886719 45.84375 L 19.886719 38.0625 L 25.886719 46.386719 C 25.90625 46.425781 25.941406 46.460938 25.980469 46.5 C 26.167969 46.726562 26.449219 46.875 26.75 46.875 Z M 38.082031 46.875 C 39.675781 46.875 41.15625 46.332031 42.339844 45.414062 C 42.527344 45.28125 42.636719 45.132812 42.695312 44.960938 L 42.695312 44.945312 C 42.714844 44.90625 42.714844 44.886719 42.730469 44.851562 C 42.75 44.738281 42.789062 44.664062 42.789062 44.53125 L 42.789062 40.386719 C 42.789062 39.789062 42.300781 39.335938 41.699219 39.335938 L 37.96875 39.335938 C 37.386719 39.335938 36.902344 39.789062 36.902344 40.386719 C 36.902344 40.96875 37.386719 41.457031 37.96875 41.457031 L 40.652344 41.457031 L 40.652344 44.023438 C 39.902344 44.457031 39.019531 44.738281 38.082031 44.738281 C 36.730469 44.738281 35.550781 44.230469 34.707031 43.367188 C 33.824219 42.523438 33.300781 41.382812 33.300781 40.144531 C 33.300781 38.867188 33.824219 37.726562 34.707031 36.882812 C 35.550781 36.019531 36.730469 35.511719 38.082031 35.511719 C 39.207031 35.511719 40.238281 35.90625 41.042969 36.523438 C 41.511719 36.898438 42.207031 36.804688 42.5625 36.355469 C 42.917969 35.886719 42.84375 35.195312 42.355469 34.835938 C 41.195312 33.917969 39.675781 33.375 38.082031 33.375 C 34.277344 33.375 31.164062 36.375 31.164062 40.144531 C 31.164062 43.894531 34.277344 46.875 38.082031 46.875 Z M 38.082031 46.875 "/>\n </g>'},txtIcon:{extension:".txt",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 12.847656 46.875 C 13.429688 46.875 13.878906 46.425781 13.878906 45.84375 L 13.878906 35.832031 L 16.859375 35.832031 C 17.421875 35.832031 17.890625 35.34375 17.890625 34.78125 C 17.890625 34.199219 17.421875 33.75 16.859375 33.75 L 8.855469 33.75 C 8.273438 33.75 7.824219 34.199219 7.824219 34.78125 C 7.824219 35.34375 8.273438 35.832031 8.855469 35.832031 L 11.816406 35.832031 L 11.816406 45.84375 C 11.816406 46.425781 12.285156 46.875 12.847656 46.875 Z M 29.019531 46.875 C 29.222656 46.875 29.429688 46.800781 29.617188 46.667969 C 30.085938 46.351562 30.160156 45.695312 29.84375 45.242188 L 26.28125 40.367188 L 29.84375 35.53125 C 30.160156 35.0625 30.085938 34.425781 29.617188 34.105469 C 29.148438 33.75 28.53125 33.84375 28.175781 34.332031 L 25.023438 38.644531 L 21.855469 34.332031 C 21.535156 33.84375 20.878906 33.75 20.429688 34.105469 C 19.960938 34.425781 19.867188 35.0625 20.1875 35.53125 L 23.75 40.367188 L 20.1875 45.242188 C 19.867188 45.695312 19.960938 46.351562 20.429688 46.667969 C 20.597656 46.800781 20.804688 46.875 21.03125 46.875 C 21.347656 46.875 21.648438 46.707031 21.855469 46.445312 L 25.023438 42.113281 L 28.175781 46.445312 C 28.378906 46.707031 28.679688 46.875 29.019531 46.875 Z M 37.464844 46.875 C 38.042969 46.875 38.496094 46.425781 38.496094 45.84375 L 38.496094 35.832031 L 41.476562 35.832031 C 42.039062 35.832031 42.507812 35.34375 42.507812 34.78125 C 42.507812 34.199219 42.039062 33.75 41.476562 33.75 L 33.46875 33.75 C 32.886719 33.75 32.4375 34.199219 32.4375 34.78125 C 32.4375 35.34375 32.886719 35.832031 33.46875 35.832031 L 36.433594 35.832031 L 36.433594 45.84375 C 36.433594 46.425781 36.902344 46.875 37.464844 46.875 Z M 37.464844 46.875 "/>\n </g>'},webmIcon:{extension:".webm",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 7.195312 43.734375 L 7.242188 43.734375 C 7.273438 43.71875 7.304688 43.703125 7.367188 43.703125 C 7.367188 43.6875 7.382812 43.6875 7.382812 43.6875 L 7.398438 43.6875 C 7.429688 43.671875 7.476562 43.625 7.523438 43.59375 L 7.554688 43.59375 C 7.585938 43.5625 7.617188 43.53125 7.648438 43.515625 C 7.648438 43.5 7.664062 43.5 7.664062 43.46875 L 7.757812 43.375 C 7.757812 43.375 7.757812 43.359375 7.773438 43.359375 C 7.789062 43.328125 7.820312 43.265625 7.835938 43.21875 L 9.882812 38.375 L 11.929688 43.21875 C 11.945312 43.265625 11.960938 43.328125 11.992188 43.359375 C 11.992188 43.359375 11.992188 43.375 12.023438 43.375 L 12.085938 43.46875 C 12.101562 43.5 12.101562 43.5 12.117188 43.515625 C 12.148438 43.53125 12.179688 43.5625 12.226562 43.59375 L 12.242188 43.59375 C 12.273438 43.625 12.320312 43.671875 12.382812 43.6875 C 12.398438 43.6875 12.398438 43.6875 12.414062 43.703125 C 12.445312 43.703125 12.476562 43.71875 12.523438 43.734375 L 12.570312 43.734375 L 12.640625 43.746094 L 12.710938 43.75 C 12.773438 43.75 12.820312 43.75 12.867188 43.734375 L 12.898438 43.734375 C 12.945312 43.71875 12.992188 43.703125 13.023438 43.703125 C 13.023438 43.6875 13.039062 43.6875 13.039062 43.6875 L 13.054688 43.6875 C 13.117188 43.671875 13.148438 43.625 13.195312 43.59375 L 13.210938 43.59375 C 13.242188 43.5625 13.289062 43.53125 13.320312 43.515625 C 13.320312 43.5 13.335938 43.5 13.335938 43.46875 C 13.367188 43.4375 13.398438 43.40625 13.414062 43.375 C 13.414062 43.375 13.429688 43.359375 13.429688 43.359375 C 13.460938 43.328125 13.492188 43.265625 13.507812 43.21875 L 17.335938 34.109375 C 17.523438 33.6875 17.320312 33.171875 16.898438 33 C 16.445312 32.8125 15.945312 33.015625 15.757812 33.453125 L 12.710938 40.6875 L 10.695312 35.890625 C 10.539062 35.546875 10.210938 35.359375 9.882812 35.359375 C 9.539062 35.359375 9.210938 35.546875 9.070312 35.890625 L 7.054688 40.6875 L 3.992188 33.453125 C 3.820312 33.015625 3.304688 32.8125 2.882812 33 C 2.429688 33.171875 2.242188 33.6875 2.414062 34.109375 L 6.257812 43.21875 C 6.289062 43.265625 6.304688 43.328125 6.335938 43.359375 L 6.335938 43.375 C 6.367188 43.40625 6.382812 43.4375 6.414062 43.46875 C 6.429688 43.5 6.429688 43.5 6.445312 43.515625 C 6.492188 43.53125 6.507812 43.5625 6.554688 43.59375 L 6.570312 43.59375 C 6.601562 43.625 6.664062 43.671875 6.710938 43.6875 C 6.726562 43.6875 6.726562 43.6875 6.742188 43.703125 C 6.773438 43.703125 6.804688 43.71875 6.851562 43.734375 L 6.898438 43.734375 L 6.976562 43.746094 L 7.054688 43.75 C 7.101562 43.75 7.148438 43.75 7.195312 43.734375 Z M 25.179688 43.75 C 25.632812 43.75 26.039062 43.359375 26.039062 42.890625 C 26.039062 42.40625 25.632812 42.015625 25.179688 42.015625 L 20.945312 42.015625 L 20.945312 39.140625 L 24.585938 39.140625 C 25.054688 39.140625 25.445312 38.75 25.445312 38.265625 C 25.445312 37.8125 25.054688 37.40625 24.585938 37.40625 L 20.945312 37.40625 L 20.945312 34.546875 L 25.179688 34.546875 C 25.632812 34.546875 26.039062 34.15625 26.039062 33.671875 C 26.039062 33.1875 25.632812 32.8125 25.179688 32.8125 L 20.070312 32.8125 C 19.585938 32.8125 19.210938 33.1875 19.210938 33.671875 L 19.210938 42.890625 C 19.210938 43.359375 19.585938 43.75 20.070312 43.75 C 20.070312 43.75 20.085938 43.734375 20.085938 43.734375 C 20.085938 43.734375 20.085938 43.75 20.117188 43.75 Z M 31.539062 43.75 C 33.382812 43.75 34.882812 42.25 34.882812 40.390625 C 34.882812 39.203125 34.242188 38.15625 33.304688 37.5625 C 33.679688 37.0625 33.898438 36.453125 33.898438 35.78125 C 33.898438 34.140625 32.570312 32.8125 30.929688 32.8125 L 28.710938 32.8125 C 28.242188 32.8125 27.851562 33.1875 27.851562 33.671875 L 27.851562 42.890625 C 27.851562 43.359375 28.242188 43.75 28.710938 43.75 L 28.757812 43.734375 C 28.757812 43.734375 28.757812 43.75 28.773438 43.75 Z M 30.929688 37.046875 L 29.585938 37.046875 L 29.585938 34.546875 L 30.929688 34.546875 C 31.617188 34.546875 32.164062 35.09375 32.164062 35.78125 C 32.164062 36.46875 31.617188 37.046875 30.929688 37.046875 Z M 31.539062 42.015625 L 29.585938 42.015625 L 29.585938 38.78125 L 31.539062 38.78125 C 32.429688 38.796875 33.148438 39.5 33.148438 40.390625 C 33.148438 41.296875 32.429688 42 31.539062 42.015625 Z M 45.664062 43.75 C 46.132812 43.75 46.539062 43.359375 46.539062 42.890625 L 46.539062 33.671875 C 46.539062 33.269531 46.242188 32.9375 45.859375 32.839844 L 45.664062 32.8125 L 45.648438 32.8125 C 45.367188 32.8125 45.117188 32.9375 44.945312 33.171875 L 41.835938 37.484375 L 38.726562 33.171875 C 38.570312 32.9375 38.289062 32.8125 38.039062 32.8125 L 37.992188 32.8125 C 37.523438 32.8125 37.132812 33.203125 37.132812 33.671875 L 37.132812 42.890625 C 37.132812 43.359375 37.523438 43.75 37.992188 43.75 C 38.476562 43.75 38.867188 43.359375 38.867188 42.890625 L 38.867188 36.3125 L 41.101562 39.4375 C 41.273438 39.671875 41.539062 39.796875 41.820312 39.796875 L 41.851562 39.796875 C 42.132812 39.796875 42.382812 39.671875 42.554688 39.4375 L 44.804688 36.3125 L 44.804688 42.890625 C 44.804688 43.359375 45.179688 43.75 45.664062 43.75 Z M 45.664062 43.75 "/>\n </g>'},webpIcon:{extension:".webp",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 9.234375 43.734375 L 9.28125 43.734375 C 9.3125 43.71875 9.34375 43.703125 9.40625 43.703125 L 9.414062 43.6875 C 9.421875 43.6875 9.421875 43.6875 9.4375 43.6875 C 9.46875 43.671875 9.515625 43.625 9.5625 43.59375 L 9.59375 43.59375 C 9.625 43.5625 9.65625 43.53125 9.6875 43.515625 C 9.6875 43.5 9.703125 43.5 9.703125 43.46875 L 9.796875 43.375 C 9.796875 43.375 9.796875 43.359375 9.8125 43.359375 C 9.828125 43.328125 9.859375 43.265625 9.875 43.21875 L 11.921875 38.375 L 13.96875 43.21875 C 13.984375 43.265625 14 43.328125 14.03125 43.359375 C 14.03125 43.359375 14.03125 43.375 14.0625 43.375 L 14.125 43.46875 C 14.140625 43.5 14.140625 43.5 14.15625 43.515625 L 14.203125 43.546875 L 14.265625 43.59375 C 14.265625 43.59375 14.265625 43.59375 14.28125 43.59375 C 14.3125 43.625 14.359375 43.671875 14.421875 43.6875 C 14.4375 43.6875 14.4375 43.6875 14.453125 43.703125 C 14.484375 43.703125 14.515625 43.71875 14.5625 43.734375 L 14.609375 43.734375 L 14.679688 43.746094 L 14.75 43.75 C 14.8125 43.75 14.859375 43.75 14.90625 43.734375 L 14.9375 43.734375 C 14.984375 43.71875 15.03125 43.703125 15.0625 43.703125 C 15.0625 43.6875 15.078125 43.6875 15.078125 43.6875 L 15.09375 43.6875 C 15.15625 43.671875 15.1875 43.625 15.234375 43.59375 L 15.25 43.59375 C 15.28125 43.5625 15.328125 43.53125 15.359375 43.515625 C 15.359375 43.5 15.375 43.5 15.375 43.46875 C 15.40625 43.4375 15.4375 43.40625 15.453125 43.375 L 15.46875 43.359375 C 15.5 43.328125 15.53125 43.265625 15.546875 43.21875 L 19.375 34.109375 C 19.5625 33.6875 19.359375 33.171875 18.9375 33 C 18.484375 32.8125 17.984375 33.015625 17.796875 33.453125 L 14.75 40.6875 L 12.734375 35.890625 C 12.578125 35.546875 12.25 35.359375 11.921875 35.359375 C 11.578125 35.359375 11.25 35.546875 11.109375 35.890625 L 9.09375 40.6875 L 6.03125 33.453125 C 5.859375 33.015625 5.34375 32.8125 4.921875 33 C 4.46875 33.171875 4.28125 33.6875 4.453125 34.109375 L 8.296875 43.21875 C 8.328125 43.265625 8.34375 43.328125 8.375 43.359375 L 8.375 43.375 C 8.40625 43.40625 8.421875 43.4375 8.453125 43.46875 C 8.46875 43.5 8.46875 43.5 8.484375 43.515625 L 8.539062 43.546875 L 8.59375 43.59375 C 8.59375 43.59375 8.59375 43.59375 8.609375 43.59375 C 8.640625 43.625 8.703125 43.671875 8.75 43.6875 C 8.765625 43.6875 8.765625 43.6875 8.78125 43.703125 C 8.8125 43.703125 8.84375 43.71875 8.890625 43.734375 L 8.9375 43.734375 L 9.015625 43.746094 L 9.09375 43.75 C 9.140625 43.75 9.1875 43.75 9.234375 43.734375 Z M 27.21875 43.75 C 27.671875 43.75 28.078125 43.359375 28.078125 42.890625 C 28.078125 42.40625 27.671875 42.015625 27.21875 42.015625 L 22.984375 42.015625 L 22.984375 39.140625 L 26.625 39.140625 C 27.09375 39.140625 27.484375 38.75 27.484375 38.265625 C 27.484375 37.8125 27.09375 37.40625 26.625 37.40625 L 22.984375 37.40625 L 22.984375 34.546875 L 27.21875 34.546875 C 27.671875 34.546875 28.078125 34.15625 28.078125 33.671875 C 28.078125 33.1875 27.671875 32.8125 27.21875 32.8125 L 22.109375 32.8125 C 21.625 32.8125 21.25 33.1875 21.25 33.671875 L 21.25 42.890625 C 21.25 43.359375 21.625 43.75 22.109375 43.75 L 22.125 43.734375 C 22.125 43.734375 22.125 43.75 22.15625 43.75 Z M 33.578125 43.75 C 35.421875 43.75 36.921875 42.25 36.921875 40.390625 C 36.921875 39.203125 36.28125 38.15625 35.34375 37.5625 C 35.71875 37.0625 35.9375 36.453125 35.9375 35.78125 C 35.9375 34.140625 34.609375 32.8125 32.96875 32.8125 L 30.75 32.8125 C 30.28125 32.8125 29.890625 33.1875 29.890625 33.671875 L 29.890625 42.890625 C 29.890625 43.359375 30.28125 43.75 30.75 43.75 C 30.765625 43.75 30.765625 43.734375 30.796875 43.734375 C 30.796875 43.734375 30.796875 43.75 30.8125 43.75 Z M 32.96875 37.046875 L 31.625 37.046875 L 31.625 34.546875 L 32.96875 34.546875 C 33.65625 34.546875 34.203125 35.09375 34.203125 35.78125 C 34.203125 36.46875 33.65625 37.046875 32.96875 37.046875 Z M 33.578125 42.015625 L 31.625 42.015625 L 31.625 38.78125 L 33.578125 38.78125 C 34.46875 38.796875 35.1875 39.5 35.1875 40.390625 C 35.1875 41.296875 34.46875 42 33.578125 42.015625 Z M 40.03125 43.75 C 40.515625 43.75 40.90625 43.359375 40.90625 42.890625 L 40.90625 39.5 L 42.828125 39.5 C 44.6875 39.5 46.1875 38 46.1875 36.171875 C 46.1875 34.3125 44.6875 32.8125 42.828125 32.8125 L 40.03125 32.8125 C 39.5625 32.8125 39.171875 33.1875 39.171875 33.671875 L 39.171875 42.890625 C 39.171875 43.359375 39.5625 43.75 40.03125 43.75 Z M 42.828125 37.765625 L 40.90625 37.765625 L 40.90625 34.546875 L 42.828125 34.546875 C 43.734375 34.546875 44.4375 35.265625 44.453125 36.171875 C 44.4375 37.046875 43.734375 37.765625 42.828125 37.765625 Z M 42.828125 37.765625 "/>\n </g>'},wmvIcon:{extension:".wmv",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 8.484375 43.734375 L 8.53125 43.734375 C 8.5625 43.71875 8.59375 43.703125 8.65625 43.703125 L 8.664062 43.6875 C 8.671875 43.6875 8.671875 43.6875 8.6875 43.6875 C 8.71875 43.671875 8.765625 43.625 8.8125 43.59375 L 8.84375 43.59375 C 8.875 43.5625 8.90625 43.53125 8.9375 43.515625 C 8.9375 43.5 8.953125 43.5 8.953125 43.46875 L 9.046875 43.375 C 9.046875 43.375 9.046875 43.359375 9.0625 43.359375 C 9.078125 43.328125 9.109375 43.265625 9.125 43.21875 L 11.171875 38.375 L 13.21875 43.21875 C 13.234375 43.265625 13.25 43.328125 13.28125 43.359375 C 13.28125 43.359375 13.28125 43.375 13.3125 43.375 L 13.375 43.46875 C 13.390625 43.5 13.390625 43.5 13.40625 43.515625 L 13.453125 43.546875 L 13.515625 43.59375 C 13.515625 43.59375 13.515625 43.59375 13.53125 43.59375 C 13.5625 43.625 13.609375 43.671875 13.671875 43.6875 C 13.6875 43.6875 13.6875 43.6875 13.703125 43.703125 C 13.734375 43.703125 13.765625 43.71875 13.8125 43.734375 L 13.859375 43.734375 L 13.929688 43.746094 L 14 43.75 C 14.0625 43.75 14.109375 43.75 14.15625 43.734375 L 14.1875 43.734375 C 14.234375 43.71875 14.28125 43.703125 14.3125 43.703125 C 14.3125 43.6875 14.328125 43.6875 14.328125 43.6875 L 14.34375 43.6875 C 14.40625 43.671875 14.4375 43.625 14.484375 43.59375 L 14.5 43.59375 C 14.53125 43.5625 14.578125 43.53125 14.609375 43.515625 C 14.609375 43.5 14.625 43.5 14.625 43.46875 C 14.65625 43.4375 14.6875 43.40625 14.703125 43.375 L 14.71875 43.359375 C 14.75 43.328125 14.78125 43.265625 14.796875 43.21875 L 18.625 34.109375 C 18.8125 33.6875 18.609375 33.171875 18.1875 33 C 17.734375 32.8125 17.234375 33.015625 17.046875 33.453125 L 14 40.6875 L 11.984375 35.890625 C 11.828125 35.546875 11.5 35.359375 11.171875 35.359375 C 10.828125 35.359375 10.5 35.546875 10.359375 35.890625 L 8.34375 40.6875 L 5.28125 33.453125 C 5.109375 33.015625 4.59375 32.8125 4.171875 33 C 3.71875 33.171875 3.53125 33.6875 3.703125 34.109375 L 7.546875 43.21875 C 7.578125 43.265625 7.59375 43.328125 7.625 43.359375 L 7.625 43.375 C 7.65625 43.40625 7.671875 43.4375 7.703125 43.46875 C 7.71875 43.5 7.71875 43.5 7.734375 43.515625 L 7.789062 43.546875 L 7.84375 43.59375 C 7.84375 43.59375 7.84375 43.59375 7.859375 43.59375 C 7.890625 43.625 7.953125 43.671875 8 43.6875 C 8.015625 43.6875 8.015625 43.6875 8.03125 43.703125 C 8.0625 43.703125 8.09375 43.71875 8.140625 43.734375 L 8.1875 43.734375 L 8.265625 43.746094 L 8.34375 43.75 C 8.390625 43.75 8.4375 43.75 8.484375 43.734375 Z M 29.03125 43.75 C 29.5 43.75 29.90625 43.359375 29.90625 42.890625 L 29.90625 33.671875 C 29.90625 33.269531 29.609375 32.9375 29.226562 32.839844 L 29.03125 32.8125 L 29.015625 32.8125 C 28.734375 32.8125 28.484375 32.9375 28.3125 33.171875 L 25.203125 37.484375 L 22.09375 33.171875 C 21.9375 32.9375 21.65625 32.8125 21.40625 32.8125 L 21.359375 32.8125 C 20.890625 32.8125 20.5 33.203125 20.5 33.671875 L 20.5 42.890625 C 20.5 43.359375 20.890625 43.75 21.359375 43.75 C 21.84375 43.75 22.234375 43.359375 22.234375 42.890625 L 22.234375 36.3125 L 24.46875 39.4375 C 24.640625 39.671875 24.90625 39.796875 25.1875 39.796875 L 25.21875 39.796875 C 25.5 39.796875 25.75 39.671875 25.921875 39.4375 L 28.171875 36.3125 L 28.171875 42.890625 C 28.171875 43.359375 28.546875 43.75 29.03125 43.75 Z M 37.015625 43.734375 L 37.0625 43.734375 C 37.09375 43.71875 37.125 43.703125 37.1875 43.703125 L 37.195312 43.6875 C 37.203125 43.6875 37.203125 43.6875 37.21875 43.6875 C 37.25 43.671875 37.296875 43.625 37.34375 43.59375 L 37.375 43.59375 C 37.40625 43.5625 37.4375 43.53125 37.46875 43.515625 C 37.46875 43.5 37.484375 43.5 37.484375 43.46875 L 37.578125 43.375 C 37.578125 43.375 37.578125 43.359375 37.59375 43.359375 C 37.609375 43.328125 37.640625 43.265625 37.65625 43.21875 L 39.703125 38.375 L 41.75 43.21875 C 41.765625 43.265625 41.78125 43.328125 41.8125 43.359375 C 41.8125 43.359375 41.8125 43.375 41.84375 43.375 L 41.90625 43.46875 C 41.921875 43.5 41.921875 43.5 41.9375 43.515625 L 41.984375 43.546875 L 42.046875 43.59375 C 42.046875 43.59375 42.046875 43.59375 42.0625 43.59375 C 42.09375 43.625 42.140625 43.671875 42.203125 43.6875 C 42.21875 43.6875 42.21875 43.6875 42.234375 43.703125 C 42.265625 43.703125 42.296875 43.71875 42.34375 43.734375 L 42.390625 43.734375 L 42.460938 43.746094 L 42.53125 43.75 C 42.59375 43.75 42.640625 43.75 42.6875 43.734375 L 42.71875 43.734375 C 42.765625 43.71875 42.8125 43.703125 42.84375 43.703125 C 42.84375 43.6875 42.859375 43.6875 42.859375 43.6875 L 42.875 43.6875 C 42.9375 43.671875 42.96875 43.625 43.015625 43.59375 L 43.03125 43.59375 C 43.0625 43.5625 43.109375 43.53125 43.140625 43.515625 C 43.140625 43.5 43.15625 43.5 43.15625 43.46875 C 43.1875 43.4375 43.21875 43.40625 43.234375 43.375 L 43.25 43.359375 C 43.28125 43.328125 43.3125 43.265625 43.328125 43.21875 L 47.15625 34.109375 C 47.34375 33.6875 47.140625 33.171875 46.71875 33 C 46.265625 32.8125 45.765625 33.015625 45.578125 33.453125 L 42.53125 40.6875 L 40.515625 35.890625 C 40.359375 35.546875 40.03125 35.359375 39.703125 35.359375 C 39.359375 35.359375 39.03125 35.546875 38.890625 35.890625 L 36.875 40.6875 L 33.8125 33.453125 C 33.640625 33.015625 33.125 32.8125 32.703125 33 C 32.25 33.171875 32.0625 33.6875 32.234375 34.109375 L 36.078125 43.21875 C 36.109375 43.265625 36.125 43.328125 36.15625 43.359375 L 36.15625 43.375 C 36.1875 43.40625 36.203125 43.4375 36.234375 43.46875 C 36.25 43.5 36.25 43.5 36.265625 43.515625 L 36.320312 43.546875 L 36.375 43.59375 C 36.375 43.59375 36.375 43.59375 36.390625 43.59375 C 36.421875 43.625 36.484375 43.671875 36.53125 43.6875 C 36.546875 43.6875 36.546875 43.6875 36.5625 43.703125 C 36.59375 43.703125 36.625 43.71875 36.671875 43.734375 L 36.71875 43.734375 L 36.796875 43.746094 L 36.875 43.75 C 36.921875 43.75 36.96875 43.75 37.015625 43.734375 Z M 37.015625 43.734375 "/>\n </g>'},xlsIcon:{extension:".xls",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 17.21875 46.875 C 17.425781 46.875 17.632812 46.800781 17.820312 46.667969 C 18.289062 46.351562 18.363281 45.695312 18.042969 45.242188 L 14.480469 40.367188 L 18.042969 35.53125 C 18.363281 35.0625 18.289062 34.425781 17.820312 34.105469 C 17.351562 33.75 16.730469 33.84375 16.375 34.332031 L 13.226562 38.644531 L 10.054688 34.332031 C 9.738281 33.84375 9.082031 33.75 8.632812 34.105469 C 8.164062 34.425781 8.070312 35.0625 8.386719 35.53125 L 11.949219 40.367188 L 8.386719 45.242188 C 8.070312 45.695312 8.164062 46.351562 8.632812 46.667969 C 8.800781 46.800781 9.007812 46.875 9.230469 46.875 C 9.550781 46.875 9.851562 46.707031 10.054688 46.445312 L 13.226562 42.113281 L 16.375 46.445312 C 16.582031 46.707031 16.882812 46.875 17.21875 46.875 Z M 29.351562 46.875 C 29.894531 46.875 30.382812 46.40625 30.382812 45.84375 C 30.382812 45.261719 29.894531 44.792969 29.351562 44.792969 L 24.269531 44.792969 L 24.269531 34.78125 C 24.269531 34.21875 23.800781 33.75 23.21875 33.75 C 22.636719 33.75 22.1875 34.21875 22.1875 34.78125 L 22.1875 45.84375 C 22.1875 46.335938 22.53125 46.757812 23.007812 46.855469 L 23.222656 46.875 Z M 37.28125 46.855469 C 38.613281 46.855469 39.832031 46.460938 40.75 45.789062 C 41.6875 45.113281 42.363281 44.082031 42.363281 42.882812 C 42.363281 42.300781 42.195312 41.738281 41.914062 41.289062 C 41.480469 40.59375 40.804688 40.105469 40.039062 39.730469 C 39.289062 39.375 38.40625 39.132812 37.449219 38.945312 L 37.414062 38.945312 C 36.398438 38.757812 35.554688 38.457031 35.070312 38.117188 C 34.824219 37.949219 34.65625 37.78125 34.5625 37.632812 C 34.46875 37.480469 34.429688 37.332031 34.429688 37.105469 C 34.429688 36.710938 34.636719 36.300781 35.144531 35.925781 C 35.648438 35.550781 36.398438 35.289062 37.242188 35.289062 C 38.386719 35.289062 39.304688 35.851562 40.261719 36.488281 C 40.710938 36.789062 41.3125 36.65625 41.59375 36.207031 C 41.894531 35.773438 41.761719 35.175781 41.332031 34.875 C 40.375 34.257812 39.042969 33.375 37.242188 33.375 C 36.023438 33.375 34.882812 33.730469 34 34.367188 C 33.136719 35.007812 32.5 35.980469 32.5 37.105469 C 32.5 37.667969 32.648438 38.195312 32.929688 38.644531 C 33.34375 39.300781 33.960938 39.769531 34.675781 40.105469 C 35.386719 40.445312 36.210938 40.667969 37.09375 40.835938 L 37.132812 40.835938 C 38.238281 41.042969 39.15625 41.363281 39.699219 41.71875 C 39.980469 41.90625 40.148438 42.09375 40.261719 42.28125 C 40.375 42.46875 40.429688 42.636719 40.429688 42.882812 C 40.429688 43.351562 40.1875 43.820312 39.625 44.230469 C 39.0625 44.644531 38.21875 44.925781 37.28125 44.925781 C 35.949219 44.945312 34.523438 44.15625 33.699219 43.480469 C 33.289062 43.144531 32.667969 43.199219 32.332031 43.613281 C 32.011719 44.023438 32.070312 44.644531 32.480469 44.980469 C 33.550781 45.824219 35.257812 46.835938 37.28125 46.855469 Z M 37.28125 46.855469 "/>\n </g>'},xlsxIcon:{extension:".xlsx",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 13.070312 43.75 C 13.242188 43.75 13.414062 43.6875 13.570312 43.578125 C 13.960938 43.3125 14.023438 42.765625 13.757812 42.390625 L 10.789062 38.328125 L 13.757812 34.296875 C 14.023438 33.90625 13.960938 33.375 13.570312 33.109375 C 13.179688 32.8125 12.664062 32.890625 12.367188 33.296875 L 9.742188 36.890625 L 7.101562 33.296875 C 6.835938 32.890625 6.289062 32.8125 5.914062 33.109375 C 5.523438 33.375 5.445312 33.90625 5.710938 34.296875 L 8.679688 38.328125 L 5.710938 42.390625 C 5.445312 42.765625 5.523438 43.3125 5.914062 43.578125 C 6.054688 43.6875 6.226562 43.75 6.414062 43.75 C 6.679688 43.75 6.929688 43.609375 7.101562 43.390625 L 9.742188 39.78125 L 12.367188 43.390625 C 12.539062 43.609375 12.789062 43.75 13.070312 43.75 Z M 23.179688 43.75 C 23.632812 43.75 24.039062 43.359375 24.039062 42.890625 C 24.039062 42.40625 23.632812 42.015625 23.179688 42.015625 L 18.945312 42.015625 L 18.945312 33.671875 C 18.945312 33.203125 18.554688 32.8125 18.070312 32.8125 C 17.585938 32.8125 17.210938 33.203125 17.210938 33.671875 L 17.210938 42.890625 C 17.210938 43.359375 17.585938 43.75 18.070312 43.75 Z M 29.789062 43.734375 C 30.898438 43.734375 31.914062 43.40625 32.679688 42.84375 C 33.460938 42.28125 34.023438 41.421875 34.023438 40.421875 C 34.023438 39.9375 33.882812 39.46875 33.648438 39.09375 C 33.289062 38.515625 32.726562 38.109375 32.085938 37.796875 C 31.460938 37.5 30.726562 37.296875 29.929688 37.140625 L 29.898438 37.140625 C 29.054688 36.984375 28.351562 36.734375 27.945312 36.453125 C 27.742188 36.3125 27.601562 36.171875 27.523438 36.046875 C 27.445312 35.921875 27.414062 35.796875 27.414062 35.609375 C 27.414062 35.28125 27.585938 34.9375 28.007812 34.625 C 28.429688 34.3125 29.054688 34.09375 29.757812 34.09375 C 30.710938 34.09375 31.476562 34.5625 32.273438 35.09375 C 32.648438 35.34375 33.148438 35.234375 33.382812 34.859375 C 33.632812 34.5 33.523438 34 33.164062 33.75 C 32.367188 33.234375 31.257812 32.5 29.757812 32.5 C 28.742188 32.5 27.789062 32.796875 27.054688 33.328125 C 26.335938 33.859375 25.804688 34.671875 25.804688 35.609375 C 25.804688 36.078125 25.929688 36.515625 26.164062 36.890625 C 26.507812 37.4375 27.023438 37.828125 27.617188 38.109375 C 28.210938 38.390625 28.898438 38.578125 29.632812 38.71875 L 29.664062 38.71875 C 30.585938 38.890625 31.351562 39.15625 31.804688 39.453125 C 32.039062 39.609375 32.179688 39.765625 32.273438 39.921875 C 32.367188 40.078125 32.414062 40.21875 32.414062 40.421875 C 32.414062 40.8125 32.210938 41.203125 31.742188 41.546875 C 31.273438 41.890625 30.570312 42.125 29.789062 42.125 C 28.679688 42.140625 27.492188 41.484375 26.804688 40.921875 C 26.460938 40.640625 25.945312 40.6875 25.664062 41.03125 C 25.398438 41.375 25.445312 41.890625 25.789062 42.171875 C 26.679688 42.875 28.101562 43.71875 29.789062 43.734375 Z M 43.179688 43.75 C 43.351562 43.75 43.523438 43.6875 43.679688 43.578125 C 44.070312 43.3125 44.132812 42.765625 43.867188 42.390625 L 40.898438 38.328125 L 43.867188 34.296875 C 44.132812 33.90625 44.070312 33.375 43.679688 33.109375 C 43.289062 32.8125 42.773438 32.890625 42.476562 33.296875 L 39.851562 36.890625 L 37.210938 33.296875 C 36.945312 32.890625 36.398438 32.8125 36.023438 33.109375 C 35.632812 33.375 35.554688 33.90625 35.820312 34.296875 L 38.789062 38.328125 L 35.820312 42.390625 C 35.554688 42.765625 35.632812 43.3125 36.023438 43.578125 C 36.164062 43.6875 36.335938 43.75 36.523438 43.75 C 36.789062 43.75 37.039062 43.609375 37.210938 43.390625 L 39.851562 39.78125 L 42.476562 43.390625 C 42.648438 43.609375 42.898438 43.75 43.179688 43.75 Z M 43.179688 43.75 "/>\n </g>'},zipIcon:{extension:".zip",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 20.175781 46.875 C 20.855469 46.875 21.402344 46.351562 21.402344 45.671875 C 21.402344 44.992188 20.855469 44.445312 20.175781 44.445312 L 13.132812 44.445312 L 21.183594 33.488281 L 21.183594 33.445312 C 21.203125 33.421875 21.226562 33.378906 21.25 33.335938 C 21.269531 33.3125 21.269531 33.289062 21.292969 33.269531 C 21.3125 33.203125 21.3125 33.179688 21.335938 33.136719 C 21.335938 33.09375 21.378906 33.070312 21.378906 33.007812 C 21.378906 32.984375 21.378906 32.960938 21.402344 32.917969 L 21.402344 32.679688 C 21.402344 32.632812 21.402344 32.613281 21.378906 32.546875 C 21.378906 32.503906 21.378906 32.480469 21.335938 32.4375 C 21.335938 32.414062 21.3125 32.371094 21.3125 32.304688 C 21.292969 32.285156 21.269531 32.242188 21.269531 32.21875 C 21.25 32.195312 21.226562 32.152344 21.203125 32.109375 C 21.183594 32.066406 21.160156 32.042969 21.117188 32.023438 C 21.09375 32 21.074219 31.957031 21.050781 31.933594 C 21.03125 31.914062 21.007812 31.867188 20.964844 31.847656 C 20.941406 31.824219 20.941406 31.804688 20.898438 31.78125 L 20.875 31.78125 C 20.832031 31.757812 20.8125 31.738281 20.765625 31.714844 C 20.746094 31.695312 20.722656 31.648438 20.65625 31.648438 L 20.570312 31.605469 L 20.4375 31.585938 C 20.417969 31.585938 20.375 31.5625 20.351562 31.5625 L 10.75 31.5625 C 10.070312 31.5625 9.546875 32.085938 9.546875 32.765625 C 9.546875 33.421875 10.070312 33.992188 10.75 33.992188 L 17.8125 33.992188 L 9.785156 44.972656 L 9.765625 44.972656 C 9.742188 45.015625 9.71875 45.058594 9.699219 45.082031 C 9.699219 45.101562 9.675781 45.148438 9.632812 45.167969 C 9.632812 45.210938 9.609375 45.257812 9.609375 45.277344 C 9.589844 45.320312 9.589844 45.367188 9.566406 45.386719 L 9.566406 45.496094 C 9.546875 45.539062 9.546875 45.585938 9.546875 45.648438 L 9.546875 45.738281 C 9.546875 45.78125 9.566406 45.824219 9.566406 45.890625 C 9.566406 45.933594 9.589844 45.957031 9.589844 45.976562 L 9.632812 46.109375 C 9.632812 46.152344 9.675781 46.175781 9.699219 46.21875 C 9.699219 46.242188 9.71875 46.261719 9.742188 46.328125 C 9.765625 46.351562 9.785156 46.394531 9.808594 46.414062 C 9.828125 46.4375 9.851562 46.460938 9.894531 46.480469 L 9.9375 46.542969 L 9.984375 46.589844 C 10.003906 46.613281 10.027344 46.632812 10.046875 46.632812 L 10.046875 46.65625 C 10.070312 46.679688 10.09375 46.679688 10.136719 46.699219 C 10.179688 46.722656 10.222656 46.742188 10.246094 46.742188 C 10.265625 46.789062 10.289062 46.789062 10.3125 46.808594 C 10.375 46.808594 10.421875 46.832031 10.464844 46.832031 C 10.484375 46.851562 10.507812 46.851562 10.53125 46.851562 L 10.648438 46.871094 Z M 26.214844 46.875 C 26.871094 46.875 27.4375 46.351562 27.4375 45.671875 L 27.4375 32.765625 C 27.4375 32.085938 26.871094 31.5625 26.214844 31.5625 C 25.535156 31.5625 25.011719 32.085938 25.011719 32.765625 L 25.011719 45.671875 C 25.011719 46.351562 25.535156 46.875 26.214844 46.875 Z M 32.734375 46.875 C 33.410156 46.875 33.957031 46.328125 33.957031 45.671875 L 33.957031 40.925781 L 36.648438 40.925781 C 39.25 40.925781 41.351562 38.824219 41.351562 36.265625 C 41.351562 33.664062 39.25 31.5625 36.648438 31.5625 L 32.734375 31.5625 C 32.078125 31.5625 31.53125 32.085938 31.53125 32.765625 L 31.53125 45.671875 C 31.53125 46.328125 32.078125 46.875 32.734375 46.875 Z M 36.648438 38.496094 L 33.957031 38.496094 L 33.957031 33.992188 L 36.648438 33.992188 C 37.917969 33.992188 38.902344 34.996094 38.921875 36.265625 C 38.902344 37.492188 37.917969 38.496094 36.648438 38.496094 Z M 36.648438 38.496094 "/>\n </g>'},docxIcon:{extension:".docx",path:'<g id="surface9" clip-path="url(#clip1)">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n </g>\n </defs>\n <g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <use xlink:href="#surface9" mask="url(#mask0)"/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 7.789062 43.75 C 9.589844 43.75 10.988281 43.269531 11.984375 42.304688 C 12.980469 41.339844 13.476562 39.984375 13.476562 38.234375 C 13.476562 36.496094 12.980469 35.144531 11.984375 34.179688 C 10.988281 33.214844 9.589844 32.734375 7.789062 32.734375 L 4.695312 32.734375 C 4.394531 32.734375 4.15625 32.816406 3.984375 32.984375 C 3.8125 33.152344 3.726562 33.386719 3.726562 33.6875 L 3.726562 42.796875 C 3.726562 43.097656 3.8125 43.332031 3.984375 43.5 C 4.15625 43.667969 4.394531 43.75 4.695312 43.75 Z M 7.664062 42.109375 L 5.742188 42.109375 L 5.742188 34.375 L 7.664062 34.375 C 10.195312 34.375 11.460938 35.660156 11.460938 38.234375 C 11.460938 40.816406 10.195312 42.109375 7.664062 42.109375 Z M 20.414062 43.890625 C 21.476562 43.890625 22.402344 43.660156 23.1875 43.203125 C 23.972656 42.746094 24.582031 42.089844 25.007812 41.234375 C 25.433594 40.378906 25.648438 39.378906 25.648438 38.234375 C 25.648438 37.089844 25.4375 36.089844 25.015625 35.242188 C 24.59375 34.394531 23.988281 33.738281 23.203125 33.28125 C 22.417969 32.824219 21.488281 32.59375 20.414062 32.59375 C 19.339844 32.59375 18.410156 32.824219 17.617188 33.28125 C 16.824219 33.738281 16.21875 34.394531 15.796875 35.242188 C 15.375 36.089844 15.164062 37.089844 15.164062 38.234375 C 15.164062 39.378906 15.378906 40.378906 15.804688 41.234375 C 16.230469 42.089844 16.839844 42.746094 17.625 43.203125 C 18.410156 43.660156 19.339844 43.890625 20.414062 43.890625 Z M 20.414062 42.28125 C 19.394531 42.28125 18.597656 41.933594 18.03125 41.234375 C 17.464844 40.535156 17.179688 39.535156 17.179688 38.234375 C 17.179688 36.933594 17.464844 35.933594 18.03125 35.242188 C 18.597656 34.550781 19.394531 34.203125 20.414062 34.203125 C 21.425781 34.203125 22.214844 34.550781 22.78125 35.242188 C 23.347656 35.933594 23.632812 36.933594 23.632812 38.234375 C 23.632812 39.535156 23.347656 40.535156 22.78125 41.234375 C 22.214844 41.933594 21.425781 42.28125 20.414062 42.28125 Z M 32.601562 43.890625 C 33.289062 43.890625 33.933594 43.789062 34.539062 43.585938 C 35.144531 43.382812 35.679688 43.089844 36.148438 42.703125 C 36.285156 42.597656 36.378906 42.488281 36.429688 42.367188 C 36.480469 42.246094 36.507812 42.109375 36.507812 41.953125 C 36.507812 41.722656 36.445312 41.53125 36.320312 41.375 C 36.195312 41.21875 36.042969 41.140625 35.867188 41.140625 C 35.753906 41.140625 35.644531 41.160156 35.539062 41.203125 C 35.433594 41.246094 35.332031 41.296875 35.226562 41.359375 C 34.746094 41.683594 34.316406 41.910156 33.9375 42.046875 C 33.558594 42.183594 33.144531 42.25 32.695312 42.25 C 31.613281 42.25 30.792969 41.910156 30.234375 41.234375 C 29.675781 40.558594 29.398438 39.558594 29.398438 38.234375 C 29.398438 36.921875 29.675781 35.925781 30.234375 35.25 C 30.792969 34.574219 31.613281 34.234375 32.695312 34.234375 C 33.164062 34.234375 33.589844 34.300781 33.976562 34.429688 C 34.363281 34.558594 34.777344 34.792969 35.226562 35.125 C 35.445312 35.269531 35.660156 35.34375 35.867188 35.34375 C 36.042969 35.34375 36.195312 35.265625 36.320312 35.109375 C 36.445312 34.953125 36.507812 34.761719 36.507812 34.53125 C 36.507812 34.363281 36.480469 34.222656 36.429688 34.109375 C 36.378906 33.996094 36.285156 33.886719 36.148438 33.78125 C 35.679688 33.394531 35.144531 33.101562 34.539062 32.898438 C 33.933594 32.695312 33.289062 32.59375 32.601562 32.59375 C 31.539062 32.59375 30.609375 32.824219 29.8125 33.28125 C 29.015625 33.738281 28.402344 34.394531 27.976562 35.242188 C 27.550781 36.089844 27.335938 37.089844 27.335938 38.234375 C 27.335938 39.378906 27.550781 40.378906 27.976562 41.234375 C 28.402344 42.089844 29.015625 42.746094 29.8125 43.203125 C 30.609375 43.660156 31.539062 43.890625 32.601562 43.890625 Z M 46.132812 43.84375 C 46.382812 43.84375 46.605469 43.75 46.796875 43.5625 C 46.988281 43.375 47.085938 43.15625 47.085938 42.90625 C 47.085938 42.707031 47.003906 42.511719 46.835938 42.3125 L 43.445312 38.15625 L 46.710938 34.171875 C 46.867188 34.003906 46.945312 33.808594 46.945312 33.578125 C 46.945312 33.328125 46.847656 33.113281 46.65625 32.929688 C 46.464844 32.746094 46.242188 32.65625 45.992188 32.65625 C 45.730469 32.65625 45.507812 32.769531 45.320312 33 L 42.273438 36.765625 L 39.226562 33 C 39.027344 32.769531 38.800781 32.65625 38.539062 32.65625 C 38.289062 32.65625 38.070312 32.746094 37.882812 32.929688 C 37.695312 33.113281 37.601562 33.328125 37.601562 33.578125 C 37.601562 33.808594 37.679688 34.003906 37.835938 34.171875 L 41.101562 38.15625 L 37.695312 42.3125 C 37.539062 42.5 37.460938 42.699219 37.460938 42.90625 C 37.460938 43.15625 37.558594 43.371094 37.75 43.554688 C 37.941406 43.738281 38.164062 43.828125 38.414062 43.828125 C 38.675781 43.828125 38.898438 43.71875 39.085938 43.5 L 42.273438 39.5625 L 45.445312 43.5 C 45.644531 43.730469 45.871094 43.84375 46.132812 43.84375 Z M 46.132812 43.84375 "/>\n </g>'},jpgIcon:{extension:".jpg",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <use xlink:href="#surface9" mask="url(#mask0)"/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 8.789062 47.007812 L 9.488281 46.960938 C 12.214844 46.757812 13.578125 45.277344 13.578125 42.523438 L 13.578125 32.742188 C 13.578125 32.320312 13.453125 31.980469 13.195312 31.726562 C 12.941406 31.472656 12.59375 31.34375 12.15625 31.34375 C 11.734375 31.34375 11.394531 31.472656 11.140625 31.726562 C 10.886719 31.980469 10.757812 32.320312 10.757812 32.742188 L 10.757812 42.523438 C 10.757812 43.238281 10.605469 43.769531 10.296875 44.117188 C 9.992188 44.46875 9.539062 44.660156 8.941406 44.6875 L 8.242188 44.730469 C 7.847656 44.761719 7.558594 44.867188 7.378906 45.046875 C 7.195312 45.230469 7.105469 45.496094 7.105469 45.847656 C 7.105469 46.664062 7.667969 47.050781 8.789062 47.007812 Z M 18.304688 47.007812 C 18.742188 47.007812 19.089844 46.878906 19.34375 46.625 C 19.597656 46.367188 19.726562 46.023438 19.726562 45.585938 L 19.726562 40.882812 L 23.640625 40.882812 C 25.289062 40.882812 26.574219 40.464844 27.492188 39.632812 C 28.410156 38.804688 28.871094 37.644531 28.871094 36.15625 C 28.871094 34.667969 28.410156 33.511719 27.492188 32.6875 C 26.574219 31.863281 25.289062 31.453125 23.640625 31.453125 L 18.261719 31.453125 C 17.839844 31.453125 17.507812 31.570312 17.265625 31.804688 C 17.023438 32.035156 16.90625 32.363281 16.90625 32.789062 L 16.90625 45.585938 C 16.90625 46.023438 17.03125 46.367188 17.289062 46.625 C 17.542969 46.878906 17.882812 47.007812 18.304688 47.007812 Z M 23.292969 38.714844 L 19.726562 38.714844 L 19.726562 33.640625 L 23.292969 33.640625 C 25.230469 33.640625 26.203125 34.488281 26.203125 36.179688 C 26.203125 37.871094 25.230469 38.714844 23.292969 38.714844 Z M 38.605469 47.070312 C 39.320312 47.070312 40.0625 47.011719 40.835938 46.898438 C 41.609375 46.78125 42.285156 46.621094 42.871094 46.414062 C 43.410156 46.242188 43.765625 46.015625 43.941406 45.738281 C 44.117188 45.460938 44.203125 44.988281 44.203125 44.316406 L 44.203125 39.613281 C 44.203125 39.292969 44.101562 39.03125 43.898438 38.835938 C 43.695312 38.640625 43.425781 38.539062 43.089844 38.539062 L 39.21875 38.539062 C 38.867188 38.539062 38.59375 38.628906 38.398438 38.804688 C 38.199219 38.976562 38.101562 39.226562 38.101562 39.546875 C 38.101562 39.867188 38.199219 40.117188 38.398438 40.289062 C 38.59375 40.464844 38.867188 40.554688 39.21875 40.554688 L 41.6875 40.554688 L 41.6875 44.425781 C 40.699219 44.703125 39.707031 44.839844 38.714844 44.839844 C 35.390625 44.839844 33.726562 42.945312 33.726562 39.152344 C 33.726562 37.300781 34.132812 35.90625 34.941406 34.964844 C 35.75 34.023438 36.949219 33.554688 38.539062 33.554688 C 39.238281 33.554688 39.867188 33.644531 40.421875 33.828125 C 40.972656 34.007812 41.574219 34.324219 42.214844 34.777344 C 42.390625 34.894531 42.542969 34.980469 42.671875 35.03125 C 42.804688 35.082031 42.949219 35.105469 43.109375 35.105469 C 43.359375 35.105469 43.570312 34.996094 43.746094 34.777344 C 43.921875 34.558594 44.007812 34.289062 44.007812 33.96875 C 44.007812 33.75 43.96875 33.558594 43.886719 33.398438 C 43.808594 33.238281 43.679688 33.078125 43.503906 32.917969 C 42.191406 31.808594 40.507812 31.257812 38.453125 31.257812 C 36.90625 31.257812 35.5625 31.574219 34.425781 32.207031 C 33.289062 32.84375 32.410156 33.753906 31.789062 34.941406 C 31.171875 36.128906 30.859375 37.535156 30.859375 39.152344 C 30.859375 40.800781 31.171875 42.21875 31.789062 43.40625 C 32.410156 44.597656 33.304688 45.503906 34.46875 46.132812 C 35.636719 46.757812 37.015625 47.070312 38.605469 47.070312 Z M 38.605469 47.070312 "/>\n </g>'},mp3Icon:{extension:".mp3",path:'<g id="surface9" clip-path="url(#clip1)">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 43.828125 43.710938 C 43.605469 44.28125 43.273438 44.804688 42.84375 45.265625 C 42.40625 45.730469 41.867188 46.113281 41.242188 46.398438 C 40.597656 46.699219 39.851562 46.855469 39.027344 46.855469 C 38.328125 46.855469 37.703125 46.757812 37.160156 46.570312 C 36.609375 46.378906 36.160156 46.136719 35.769531 45.839844 C 35.386719 45.550781 35.050781 45.210938 34.796875 44.832031 C 34.570312 44.507812 34.394531 44.195312 34.265625 43.890625 C 34.140625 43.59375 34.054688 43.335938 33.996094 43.101562 C 33.792969 42.261719 34.304688 41.417969 35.140625 41.210938 C 35.980469 41.007812 36.828125 41.519531 37.03125 42.355469 C 37.039062 42.390625 37.066406 42.488281 37.144531 42.671875 C 37.191406 42.777344 37.265625 42.914062 37.371094 43.0625 C 37.4375 43.160156 37.53125 43.257812 37.65625 43.351562 C 37.792969 43.453125 37.972656 43.542969 38.195312 43.625 C 38.332031 43.667969 38.59375 43.730469 39.027344 43.730469 C 39.390625 43.730469 39.695312 43.675781 39.925781 43.566406 C 40.1875 43.445312 40.398438 43.300781 40.558594 43.132812 C 40.71875 42.957031 40.839844 42.773438 40.914062 42.578125 C 40.996094 42.371094 41.03125 42.195312 41.03125 42.023438 C 41.03125 41.789062 41 41.585938 40.921875 41.398438 C 40.871094 41.257812 40.785156 41.148438 40.660156 41.039062 C 40.515625 40.910156 40.296875 40.792969 40.011719 40.699219 C 39.6875 40.59375 39.253906 40.539062 38.738281 40.535156 C 37.882812 40.527344 37.1875 39.832031 37.1875 38.972656 L 37.1875 38.832031 C 37.1875 37.984375 37.859375 37.292969 38.699219 37.265625 C 39.070312 37.257812 39.398438 37.195312 39.679688 37.101562 C 39.921875 37.011719 40.121094 36.902344 40.273438 36.773438 C 40.40625 36.652344 40.507812 36.519531 40.582031 36.359375 C 40.652344 36.210938 40.6875 36.027344 40.6875 35.8125 C 40.6875 35.523438 40.644531 35.289062 40.574219 35.125 C 40.5 34.96875 40.414062 34.847656 40.304688 34.757812 C 40.1875 34.660156 40.042969 34.582031 39.867188 34.53125 C 39.402344 34.386719 38.878906 34.398438 38.480469 34.542969 C 38.289062 34.617188 38.121094 34.714844 37.976562 34.84375 C 37.820312 34.984375 37.695312 35.148438 37.59375 35.339844 C 37.484375 35.550781 37.40625 35.773438 37.367188 36.039062 C 37.230469 36.890625 36.429688 37.472656 35.574219 37.335938 C 34.722656 37.195312 34.140625 36.398438 34.28125 35.542969 C 34.378906 34.9375 34.5625 34.378906 34.835938 33.871094 C 35.109375 33.355469 35.464844 32.898438 35.890625 32.519531 C 36.320312 32.132812 36.824219 31.828125 37.382812 31.617188 C 38.433594 31.226562 39.667969 31.199219 40.78125 31.539062 C 41.351562 31.714844 41.863281 31.992188 42.308594 32.355469 C 42.777344 32.753906 43.148438 33.242188 43.414062 33.824219 C 43.679688 34.402344 43.8125 35.070312 43.8125 35.8125 C 43.8125 36.476562 43.679688 37.097656 43.421875 37.660156 C 43.25 38.046875 43.023438 38.394531 42.746094 38.707031 C 43.242188 39.148438 43.609375 39.671875 43.835938 40.261719 C 44.046875 40.804688 44.15625 41.398438 44.15625 42.023438 C 44.15625 42.578125 44.046875 43.148438 43.828125 43.710938 Z M 31.445312 38.492188 C 31.148438 39.140625 30.734375 39.703125 30.199219 40.164062 C 29.6875 40.605469 29.078125 40.957031 28.390625 41.199219 C 27.71875 41.4375 26.976562 41.5625 26.191406 41.5625 L 25 41.5625 L 25 45 C 25 45.859375 24.296875 46.5625 23.4375 46.5625 C 22.578125 46.5625 21.875 45.859375 21.875 45 L 21.875 32.8125 C 21.875 31.945312 22.578125 31.25 23.4375 31.25 L 26.191406 31.25 C 27.890625 31.25 29.257812 31.667969 30.253906 32.5 C 31.339844 33.398438 31.886719 34.714844 31.886719 36.40625 C 31.886719 37.148438 31.738281 37.851562 31.445312 38.492188 Z M 18.730469 45.210938 C 18.730469 46.070312 18.03125 46.773438 17.167969 46.773438 C 16.300781 46.773438 15.605469 46.070312 15.605469 45.210938 L 15.605469 39.28125 L 14.015625 43.140625 C 14.007812 43.164062 13.996094 43.191406 13.984375 43.214844 C 13.71875 43.777344 13.15625 44.117188 12.566406 44.117188 L 12.53125 44.117188 C 11.9375 44.117188 11.375 43.777344 11.109375 43.214844 L 11.082031 43.160156 L 9.339844 39.101562 L 9.339844 45.210938 C 9.339844 46.070312 8.640625 46.773438 7.777344 46.773438 C 6.910156 46.773438 6.214844 46.070312 6.214844 45.210938 L 6.214844 32.824219 C 6.214844 31.960938 6.910156 31.261719 7.777344 31.261719 L 7.835938 31.261719 C 8.472656 31.261719 9.046875 31.617188 9.335938 32.1875 L 12.527344 39.09375 L 15.59375 32.207031 C 15.894531 31.617188 16.46875 31.261719 17.105469 31.261719 L 17.167969 31.261719 C 18.03125 31.261719 18.730469 31.960938 18.730469 32.824219 Z M 41.382812 28.125 L 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.136719 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.136719 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 41.382812 28.125 "/>\n </g>\n </defs>\n <g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <use xlink:href="#surface9" mask="url(#mask0)"/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 28.257812 34.902344 C 27.835938 34.550781 27.140625 34.375 26.191406 34.375 L 25 34.375 L 25 38.4375 L 26.191406 38.4375 C 26.621094 38.4375 27.007812 38.375 27.34375 38.253906 C 27.667969 38.140625 27.929688 37.992188 28.148438 37.804688 C 28.34375 37.632812 28.492188 37.4375 28.601562 37.195312 C 28.710938 36.964844 28.757812 36.703125 28.757812 36.40625 C 28.757812 35.324219 28.382812 35.003906 28.257812 34.902344 "/>\n <path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(99.607843%,99.607843%,99.607843%);stroke-opacity:1;stroke-miterlimit:4;" d="M 11.34125 13.57875 C 11.345 13.5925 11.3525 13.62375 11.36375 13.67375 C 11.3775 13.7225 11.3975 13.78125 11.42625 13.85 C 11.45375 13.9175 11.49375 13.9875 11.54625 14.0625 C 11.5975 14.13875 11.66625 14.20875 11.75 14.27125 C 11.83375 14.33625 11.9375 14.38875 12.0575 14.43125 C 12.1775 14.4725 12.32 14.49375 12.4875 14.49375 C 12.67875 14.49375 12.845 14.46125 12.9875 14.39375 C 13.13 14.32875 13.24875 14.245 13.34375 14.1425 C 13.43875 14.0425 13.51125 13.93 13.55875 13.8075 C 13.6075 13.6825 13.63125 13.56375 13.63125 13.4475 C 13.63125 13.31125 13.6075 13.1825 13.5625 13.065 C 13.515 12.9475 13.4425 12.845 13.3425 12.7575 C 13.2425 12.67 13.115 12.6 12.96 12.55 C 12.805 12.49875 12.6175 12.4725 12.4 12.4725 L 12.4 12.42625 C 12.57 12.42 12.72375 12.3925 12.8625 12.34375 C 13.0025 12.29625 13.11875 12.2275 13.21625 12.14375 C 13.31375 12.05875 13.3875 11.96 13.44125 11.845 C 13.4925 11.7275 13.52 11.60125 13.52 11.46 C 13.52 11.29375 13.4925 11.1525 13.43875 11.0325 C 13.38375 10.91375 13.31125 10.81625 13.21875 10.74 C 13.1275 10.66375 13.0225 10.6075 12.90375 10.5725 C 12.78625 10.535 12.66375 10.5175 12.5375 10.5175 C 12.395 10.5175 12.26125 10.54 12.14 10.58625 C 12.0175 10.6325 11.91 10.69625 11.81875 10.77875 C 11.72625 10.8625 11.64875 10.96 11.5875 11.07375 C 11.5275 11.18875 11.48625 11.315 11.4625 11.45375 M 7.5 14.4 L 7.5 10.5 L 8.3825 10.5 C 8.8075 10.5 9.13375 10.595 9.3625 10.78375 C 9.59 10.975 9.7025 11.2625 9.7025 11.65 C 9.7025 11.81625 9.6725 11.97125 9.6075 12.11125 C 9.5425 12.2525 9.4525 12.37375 9.335 12.475 C 9.21875 12.5775 9.0775 12.65625 8.9175 12.71375 C 8.75625 12.77125 8.5775 12.8 8.3825 12.8 L 7.6 12.8 M 2.4875 14.4675 L 2.4875 10.50375 L 2.5075 10.50375 C 2.5225 10.50375 2.53375 10.5125 2.5425 10.52625 L 3.9925 13.58625 C 3.99875 13.5975 4.005 13.6075 4.00875 13.6175 M 4.02125 13.6175 C 4.02625 13.6075 4.03125 13.5975 4.0375 13.58625 L 5.44 10.52625 C 5.4475 10.5125 5.45875 10.50375 5.4725 10.50375 L 5.4925 10.50375 L 5.4925 14.4675 " transform="matrix(3.125,0,0,3.125,0,0)"/>\n </g>'},mp4Icon:{extension:".mp4",path:'<g id="surface6" clip-path="url(#clip1)">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 36.898438 40.625 L 40.625 35.480469 L 40.625 40.625 Z M 28.761719 36.40625 C 28.761719 36.703125 28.707031 36.964844 28.605469 37.195312 C 28.496094 37.433594 28.347656 37.632812 28.148438 37.804688 C 27.929688 37.992188 27.667969 38.144531 27.34375 38.257812 C 27.003906 38.375 26.621094 38.4375 26.191406 38.4375 L 25 38.4375 L 25 34.375 L 26.191406 34.375 C 27.140625 34.375 27.835938 34.554688 28.253906 34.902344 C 28.378906 35.007812 28.761719 35.324219 28.761719 36.40625 Z M 44.6875 43.75 L 43.75 43.75 L 43.75 45.3125 C 43.75 46.175781 43.050781 46.875 42.1875 46.875 C 41.324219 46.875 40.625 46.175781 40.625 45.3125 L 40.625 43.75 L 34.066406 43.75 C 33.199219 43.75 32.503906 43.050781 32.503906 42.1875 L 32.503906 41.875 C 32.503906 41.546875 32.605469 41.226562 32.800781 40.957031 L 39.363281 31.898438 C 39.660156 31.492188 40.128906 31.25 40.628906 31.25 L 42.1875 31.25 C 43.050781 31.25 43.75 31.949219 43.75 32.8125 L 43.75 40.625 L 44.6875 40.625 C 45.550781 40.625 46.25 41.324219 46.25 42.1875 C 46.25 43.050781 45.550781 43.75 44.6875 43.75 Z M 31.445312 38.492188 C 31.148438 39.140625 30.730469 39.703125 30.195312 40.167969 C 29.6875 40.605469 29.082031 40.957031 28.390625 41.203125 C 27.71875 41.441406 26.976562 41.5625 26.191406 41.5625 L 25 41.5625 L 25 45 C 25 45.863281 24.300781 46.5625 23.4375 46.5625 C 22.578125 46.5625 21.875 45.863281 21.875 45 L 21.875 32.8125 C 21.875 31.949219 22.578125 31.25 23.4375 31.25 L 26.191406 31.25 C 27.890625 31.25 29.257812 31.671875 30.253906 32.5 C 31.339844 33.398438 31.886719 34.714844 31.886719 36.40625 C 31.886719 37.148438 31.738281 37.851562 31.445312 38.492188 Z M 18.730469 45.210938 C 18.730469 46.070312 18.027344 46.773438 17.167969 46.773438 C 16.300781 46.773438 15.605469 46.070312 15.605469 45.210938 L 15.605469 39.6875 L 14.035156 43.105469 C 14.019531 43.144531 14.003906 43.179688 13.984375 43.214844 C 13.71875 43.78125 13.15625 44.117188 12.566406 44.117188 L 12.53125 44.117188 C 11.941406 44.117188 11.378906 43.78125 11.113281 43.214844 C 11.097656 43.183594 11.078125 43.152344 11.066406 43.125 L 9.339844 39.484375 L 9.339844 45.210938 C 9.339844 46.070312 8.640625 46.773438 7.777344 46.773438 C 6.910156 46.773438 6.214844 46.070312 6.214844 45.210938 L 6.214844 32.824219 C 6.214844 31.960938 6.910156 31.261719 7.777344 31.261719 L 7.835938 31.261719 C 8.472656 31.261719 9.046875 31.617188 9.335938 32.191406 L 9.355469 32.226562 L 12.523438 38.90625 L 15.578125 32.242188 C 15.585938 32.226562 15.597656 32.210938 15.605469 32.191406 C 15.894531 31.617188 16.46875 31.261719 17.105469 31.261719 L 17.164062 31.261719 C 18.027344 31.261719 18.726562 31.960938 18.726562 32.824219 L 18.726562 45.210938 Z M 41.382812 28.125 L 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 41.382812 28.125 "/>\n </g>\n </defs>\n <g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <use xlink:href="#surface6" mask="url(#mask0)"/>\n <path style="fill:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke:rgb(99.607843%,99.607843%,99.607843%);stroke-opacity:1;stroke-miterlimit:4;" d="M 14.3 13.5 L 10.90125 13.5 L 10.90125 13.4 L 13.00125 10.5 L 13.5 10.5 L 13.5 14.5 M 7.5 14.4 L 7.5 10.5 L 8.3825 10.5 C 8.8075 10.5 9.13375 10.595 9.3625 10.78375 C 9.59 10.975 9.7025 11.2625 9.7025 11.65 C 9.7025 11.81625 9.6725 11.97125 9.6075 12.11125 C 9.5425 12.2525 9.4525 12.37375 9.335 12.47625 C 9.21875 12.5775 9.0775 12.65625 8.9175 12.71375 C 8.75625 12.77125 8.5775 12.8 8.3825 12.8 L 7.6 12.8 M 2.4875 14.4675 L 2.4875 10.50375 L 2.5075 10.50375 C 2.5225 10.50375 2.53375 10.5125 2.5425 10.52625 L 3.9925 13.58625 C 3.99875 13.5975 4.005 13.6075 4.00875 13.6175 M 4.02125 13.6175 C 4.02625 13.6075 4.03125 13.5975 4.0375 13.58625 L 5.44 10.52625 C 5.4475 10.5125 5.45875 10.50375 5.4725 10.50375 L 5.4925 10.50375 L 5.4925 14.4675 " transform="matrix(3.125,0,0,3.125,0,0)"/>\n </g>'},oggIcon:{extension:".ogg",path:'<g id="surface9" clip-path="url(#clip1)">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.621094 28.125 C 3.859375 28.125 0 31.984375 0 36.742188 L 0 41.378906 C 0 46.140625 3.859375 50 8.621094 50 L 41.378906 50 C 46.140625 50 50 46.140625 50 41.382812 L 50 36.746094 C 50 31.984375 46.140625 28.125 41.382812 28.125 Z M 8.621094 28.125 "/>\n </g>\n </defs>\n <g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.578125 25 L 39.421875 25 C 41.53125 25 43.527344 25.492188 45.3125 26.367188 L 45.3125 15.367188 C 45.3125 13.90625 44.976562 13.097656 43.984375 12.109375 C 42.996094 11.121094 35.105469 3.226562 34.503906 2.628906 C 33.90625 2.027344 33.070312 1.5625 31.617188 1.5625 L 6.5625 1.5625 C 5.527344 1.5625 4.6875 2.402344 4.6875 3.4375 L 4.6875 26.367188 C 6.476562 25.492188 8.472656 25 10.578125 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.710938 L 42.164062 12.5 L 34.515625 12.5 C 34.464844 12.46875 34.414062 12.425781 34.375 12.390625 Z M 6.25 25.722656 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.25 13.980469 32.496094 15.210938 33.742188 15.539062 C 33.902344 15.59375 34.074219 15.625 34.257812 15.625 L 43.75 15.625 L 43.75 25.722656 C 44.859375 26.105469 45.910156 26.625 46.875 27.269531 L 46.875 15.363281 C 46.875 13.511719 46.375 12.289062 45.089844 11.003906 L 35.609375 1.523438 C 34.582031 0.496094 33.273438 0 31.617188 0 L 6.5625 0 C 4.667969 0 3.125 1.542969 3.125 3.4375 L 3.125 27.269531 C 4.089844 26.625 5.140625 26.105469 6.25 25.722656 Z M 6.25 25.722656 "/>\n <use xlink:href="#surface9" mask="url(#mask0)"/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);
vendor: 2,573 bytes, line 679
679fill-opacity:1;" d="M 8.976562 47.070312 C 10.464844 47.070312 11.757812 46.75 12.859375 46.109375 C 13.960938 45.46875 14.808594 44.550781 15.40625 43.351562 C 16.003906 42.15625 16.304688 40.757812 16.304688 39.152344 C 16.304688 37.550781 16.007812 36.152344 15.417969 34.964844 C 14.828125 33.777344 13.980469 32.859375 12.882812 32.21875 C 11.78125 31.578125 10.480469 31.257812 8.976562 31.257812 C 7.472656 31.257812 6.167969 31.578125 5.0625 32.21875 C 3.953125 32.859375 3.101562 33.777344 2.511719 34.964844 C 1.921875 36.152344 1.625 37.550781 1.625 39.152344 C 1.625 40.757812 1.925781 42.15625 2.523438 43.351562 C 3.121094 44.550781 3.972656 45.46875 5.070312 46.109375 C 6.171875 46.75 7.472656 47.070312 8.976562 47.070312 Z M 8.976562 44.820312 C 7.546875 44.820312 6.433594 44.332031 5.640625 43.351562 C 4.847656 42.375 4.449219 40.976562 4.449219 39.152344 C 4.449219 37.332031 4.847656 35.933594 5.640625 34.964844 C 6.433594 33.996094 7.546875 33.507812 8.976562 33.507812 C 10.390625 33.507812 11.496094 33.996094 12.289062 34.964844 C 13.085938 35.933594 13.484375 37.332031 13.484375 39.152344 C 13.484375 40.976562 13.085938 42.375 12.289062 43.351562 C 11.496094 44.332031 10.390625 44.820312 8.976562 44.820312 Z M 26.410156 47.070312 C 27.125 47.070312 27.871094 47.011719 28.640625 46.898438 C 29.414062 46.78125 30.09375 46.621094 30.675781 46.414062 C 31.214844 46.242188 31.574219 46.015625 31.75 45.738281 C 31.921875 45.460938 32.011719 44.988281 32.011719 44.316406 L 32.011719 39.613281 C 32.011719 39.292969 31.910156 39.03125 31.703125 38.835938 C 31.5 38.640625 31.230469 38.539062 30.894531 38.539062 L 27.023438 38.539062 C 26.671875 38.539062 26.398438 38.628906 26.203125 38.804688 C 26.007812 38.976562 25.90625 39.226562 25.90625 39.546875 C 25.90625 39.867188 26.007812 40.117188 26.203125 40.289062 C 26.398438 40.464844 26.671875 40.554688 27.023438 40.554688 L 29.496094 40.554688 L 29.496094 44.425781 C 28.503906 44.703125 27.511719 44.839844 26.519531 44.839844 C 23.195312 44.839844 21.53125 42.945312 21.53125 39.152344 C 21.53125 37.300781 21.9375 35.90625 22.746094 34.964844 C 23.554688 34.023438 24.753906 33.554688 26.34375 33.554688 C 27.046875 33.554688 27.671875 33.644531 28.226562 33.828125 C 28.78125 34.007812 29.378906 34.324219 30.019531 34.777344 C 30.195312 34.894531 30.347656 34.980469 30.480469 35.03125 C 30.609375 35.082031 30.757812 35.105469 30.917969 35.105469 C 31.164062 35.105469 31.375 34.996094 31.550781 34.777344 C 31.726562 34.558594 31.8125 34.289062 31.8125 33.96875 C 31.8125 33.75 3
vendor: 7,442 bytes, line 679
6791.773438 33.558594 31.695312 33.398438 C 31.613281 33.238281 31.484375 33.078125 31.3125 32.917969 C 30 31.808594 28.3125 31.257812 26.257812 31.257812 C 24.710938 31.257812 23.371094 31.574219 22.234375 32.207031 C 21.09375 32.84375 20.214844 33.753906 19.597656 34.941406 C 18.976562 36.128906 18.667969 37.535156 18.667969 39.152344 C 18.667969 40.800781 18.976562 42.21875 19.597656 43.40625 C 20.214844 44.597656 21.109375 45.503906 22.277344 46.132812 C 23.441406 46.757812 24.820312 47.070312 26.410156 47.070312 Z M 42.445312 47.070312 C 43.160156 47.070312 43.902344 47.011719 44.675781 46.898438 C 45.449219 46.78125 46.128906 46.621094 46.710938 46.414062 C 47.25 46.242188 47.609375 46.015625 47.78125 45.738281 C 47.957031 45.460938 48.046875 44.988281 48.046875 44.316406 L 48.046875 39.613281 C 48.046875 39.292969 47.941406 39.03125 47.738281 38.835938 C 47.535156 38.640625 47.265625 38.539062 46.929688 38.539062 L 43.058594 38.539062 C 42.707031 38.539062 42.433594 38.628906 42.238281 38.804688 C 42.039062 38.976562 41.941406 39.226562 41.941406 39.546875 C 41.941406 39.867188 42.039062 40.117188 42.238281 40.289062 C 42.433594 40.464844 42.707031 40.554688 43.058594 40.554688 L 45.53125 40.554688 L 45.53125 44.425781 C 44.539062 44.703125 43.546875 44.839844 42.554688 44.839844 C 39.230469 44.839844 37.566406 42.945312 37.566406 39.152344 C 37.566406 37.300781 37.972656 35.90625 38.78125 34.964844 C 39.589844 34.023438 40.789062 33.554688 42.378906 33.554688 C 43.078125 33.554688 43.707031 33.644531 44.261719 33.828125 C 44.816406 34.007812 45.414062 34.324219 46.054688 34.777344 C 46.230469 34.894531 46.382812 34.980469 46.515625 35.03125 C 46.644531 35.082031 46.792969 35.105469 46.953125 35.105469 C 47.199219 35.105469 47.410156 34.996094 47.585938 34.777344 C 47.761719 34.558594 47.847656 34.289062 47.847656 33.96875 C 47.847656 33.75 47.808594 33.558594 47.726562 33.398438 C 47.648438 33.238281 47.519531 33.078125 47.34375 32.917969 C 46.03125 31.808594 44.347656 31.257812 42.292969 31.257812 C 40.746094 31.257812 39.40625 31.574219 38.265625 32.207031 C 37.128906 32.84375 36.25 33.753906 35.632812 34.941406 C 35.011719 36.128906 34.703125 37.535156 34.703125 39.152344 C 34.703125 40.800781 35.011719 42.21875 35.632812 43.40625 C 36.25 44.597656 37.144531 45.503906 38.3125 46.132812 C 39.476562 46.757812 40.855469 47.070312 42.445312 47.070312 Z M 42.445312 47.070312 "/>\n </g>'},pdfIcon:{extension:".pdf",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(99.607843%,99.607843%,99.607843%);fill-opacity:1;" d="M 10.59375 25 L 39.4375 25 C 41.476562 25.003906 43.484375 25.472656 45.3125 26.375 L 45.3125 15.375 C 45.347656 14.191406 44.867188 13.054688 44 12.25 L 34.625 2.875 C 33.875 2.003906 32.773438 1.523438 31.625 1.5625 L 6.625 1.5625 C 5.589844 1.5625 4.75 2.402344 4.75 3.4375 L 4.75 26.375 C 6.566406 25.480469 8.566406 25.007812 10.59375 25 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 34.375 4.71875 L 42.15625 12.5 L 34.53125 12.5 C 34.480469 12.511719 34.425781 12.511719 34.375 12.5 Z M 6.25 25.71875 L 6.25 3.4375 C 6.25 3.265625 6.390625 3.125 6.5625 3.125 L 31.25 3.125 L 31.25 12.5 C 31.300781 13.980469 32.316406 15.253906 33.75 15.625 C 33.957031 15.675781 34.167969 15.675781 34.375 15.625 L 43.75 15.625 L 43.75 25.71875 C 44.859375 26.09375 45.910156 26.621094 46.875 27.28125 L 46.875 15.375 C 46.964844 13.722656 46.3125 12.117188 45.09375 11 L 35.71875 1.625 C 34.648438 0.523438 33.160156 -0.0664062 31.625 0 L 6.625 0 C 5.703125 -0.015625 4.8125 0.339844 4.152344 0.984375 C 3.496094 1.632812 3.125 2.515625 3.125 3.4375 L 3.125 27.28125 C 4.09375 26.625 5.144531 26.101562 6.25 25.71875 Z M 6.25 25.71875 "/>\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 8.625 28.125 C 6.335938 28.117188 4.136719 29.023438 2.515625 30.640625 C 0.898438 32.261719 -0.0078125 34.460938 0 36.75 L 0 41.375 C 0 46.136719 3.863281 50 8.625 50 L 41.375 50 C 46.132812 49.984375 49.984375 46.132812 50 41.375 L 50 36.75 C 50 31.988281 46.136719 28.125 41.375 28.125 Z M 8.625 28.125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 14.40625 41.78125 L 12.09375 41.78125 L 12.09375 45.84375 C 12.003906 46.351562 11.5625 46.726562 11.046875 46.726562 C 10.53125 46.726562 10.089844 46.351562 10 45.84375 L 10 34.78125 C 10 34.210938 10.460938 33.75 11.03125 33.75 L 14.40625 33.75 C 15.925781 33.617188 17.390625 34.351562 18.191406 35.648438 C 18.992188 36.945312 18.992188 38.585938 18.191406 39.882812 C 17.390625 41.179688 15.925781 41.914062 14.40625 41.78125 Z M 12.09375 39.6875 L 14.40625 39.6875 C 15.152344 39.78125 15.882812 39.4375 16.289062 38.804688 C 16.691406 38.171875 16.691406 37.359375 16.289062 36.726562 C 15.882812 36.09375 15.152344 35.75 14.40625 35.84375 L 12.09375 35.84375 Z M 12.09375 39.6875 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 20.3125 45.84375 L 20.3125 34.78125 C 20.3125 34.210938 20.773438 33.75 21.34375 33.75 L 23.5625 33.75 C 27.1875 33.75 30.125 36.6875 30.125 40.3125 C 30.125 43.9375 27.1875 46.875 23.5625 46.875 L 21.34375 46.875 C 20.773438 46.875 20.3125 46.414062 20.3125 45.84375 Z M 22.40625 44.78125 L 23.5625 44.78125 C 26.03125 44.78125 28.03125 42.78125 28.03125 40.3125 C 28.03125 37.84375 26.03125 35.84375 23.5625 35.84375 L 22.40625 35.84375 Z M 22.40625 44.78125 "/>\n <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 33.1875 45.84375 L 33.1875 34.78125 C 33.183594 34.476562 33.3125 34.1875 33.542969 33.992188 C 33.769531 33.792969 34.074219 33.703125 34.375 33.75 L 40.625 33.75 C 41.132812 33.839844 41.507812 34.28125 41.507812 34.796875 C 41.507812 35.3125 41.132812 35.753906 40.625 35.84375 L 35.25 35.84375 L 35.25 39.28125 L 39.625 39.28125 C 40.195312 39.28125 40.65625 39.742188 40.65625 40.3125 C 40.65625 40.882812 40.195312 41.34375 39.625 41.34375 L 35.25 41.34375 L 35.25 45.84375 C 35.257812 46.359375 34.882812 46.796875 34.375 46.875 C 34.074219 46.921875 33.769531 46.832031 33.542969 46.632812 C 33.3125 46.4375 33.183594 46.148438 33.1875 45.84375 Z M 33.1875 45.84375 "/>\n </g>'},defaultIcon:{extension:".default",path:'<g id="surface1">\n <path style=" stroke:none;fill-rule:evenodd;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 3.117188 44.777344 C 1.394531 44.777344 0 43.386719 0 41.671875 L 0 3.484375 C 0 1.769531 1.394531 0.378906 3.117188 0.378906 L 25.792969 0.378906 C 27.164062 0.304688 28.5 0.808594 29.480469 1.765625 L 37.980469 10.230469 C 39.144531 11.242188 39.769531 12.730469 39.683594 14.265625 L 39.683594 41.671875 C 39.683594 43.386719 38.289062 44.777344 36.5625 44.777344 Z M 25.511719 3.203125 L 3.117188 3.203125 C 2.960938 3.203125 2.832031 3.328125 2.832031 3.484375 L 2.832031 41.671875 C 2.832031 41.828125 2.960938 41.957031 3.117188 41.957031 L 36.5625 41.957031 C 36.679688 41.949219 36.785156 41.867188 36.820312 41.757812 L 36.820312 14.492188 L 28.34375 14.492188 C 28.160156 14.539062 27.964844 14.539062 27.777344 14.492188 C 26.480469 14.15625 25.554688 13.007812 25.511719 11.671875 Z M 28.34375 4.640625 L 28.34375 11.671875 C 28.390625 11.683594 28.441406 11.683594 28.488281 11.671875 L 35.402344 11.671875 Z M 28.34375 4.640625 "/>\n </g>'}},
vendor: 1,430 bytes, line 679
679V.MODULES.modals=function(l){var a=l.$;l.shared.modals||(l.shared.modals={});var o,c=l.shared.modals;function e(){for(var e in c)if(Object.prototype.hasOwnProperty.call(c,e)){var t=c[e];t&&t.$modal&&t.$modal.removeData().remove()}o&&o.removeData().remove(),c={}}function s(e,t){if(c[e]){var n=c[e].$modal,r=n.data("instance")||l;r.events.enableBlur(),n.hide(),o.hide(),a(r.o_doc).find("body").first().removeClass("fr-prevent-scroll fr-mobile"),n.removeClass("fr-active"),t||(r.accessibility.restoreSelection(),r.events.trigger("modals.hide"))}}function n(e){var t;if("string"==typeof e){if(!c[e])return;t=c[e].$modal}else t=e;return t&&l.node.hasClass(t,"fr-active")&&l.core.sameInstance(t)||!1}return{_init:function t(){l.events.on("shared.destroy",e,!0)},get:function r(e){return c[e]},create:function d(n,e,t){if(e='<div class="fr-modal-head-line">'.concat(e,"</div>"),l.shared.$overlay||(l.shared.$overlay=a(l.doc.createElement("DIV")).addClass("fr-overlay"),a("body").first().append(l.shared.$overlay)),o=l.shared.$overlay,l.opts.theme&&o.addClass("".concat(l.opts.theme,"-theme")),!c[n]){var r=function i(e,t){var n='<div tabIndex="-1" class="fr-modal'.concat(l.opts.theme?" ".concat(l.opts.theme,"-theme"):"",'"><div class="fr-modal-wrapper">'),r='<button title="'.concat(l.language.translate("Cancel"),'" class="fr-command fr-btn fr-modal-close"><svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" viewBox="0 0 24 24">
679<path d="').concat(V.SVG.close,'"/></svg></button>');n+='<div class="fr-modal-head">'.concat(e).concat(r,"</div>"),n+='<div tabIndex="-1" class="fr-modal-body">'.concat(t,"</div>"),n+="</div></div>";var o=a(l.doc.createElement("DIV"));return o.html(n),o.find("> .fr-modal")}(e,t);c[n]={$modal:r,$head:r.find(".fr-modal-head"),$body:r.find(".fr-modal-body")},l.helpers.isMobile()||r.addClass("fr-desktop"),a("body").first().append(r),l.events.$on(r,"click",".fr-modal-close",function(){s(n)},!0),c[n].$body.css("margin-top",c[n].$head.outerHeight()),l.events.$on(r,"keydown",function(e){var t=e.which;return t===V.KEYCODE.ESC?(s(n),l.accessibility.focusModalButton(r),!1):!(!a(e.currentTarget).is("input[type=text], textarea")&&t!==V.KEYCODE.ARROW_UP&&t!==V.KEYCODE.ARROW_DOWN&&!l.keys.isBrowserAction(e)&&(e.preventDefault(),e.stopPropagation(),1))},!0),s(n,!0)}return c[n]},show:function i(e){if(c[e]){var t=c[e].$modal;t.data("instance",l),t.show(),o.show(),a(l.o_doc).find("body").first().addClass("fr-prevent-scroll"),l.helpers.isMobile()&&a(l.o_doc).find("body").first().addClass("fr-mobile"),t.addClass("fr-active"),l.accessibility.focusModal(t)}},hide:s,resize:function f(e){if(c[e]){var t=c[e],n=t.$modal,r=t.$body,o=l.o_win.innerHeight,i=n.find(".fr-modal-wrapper"),a=o-i.outerHeight(!0)+(i.height()-(r.outerHeight(!0)-r.height())),s="auto";a<r.get(0).scrollHeight&&(s=a),r.height(s)}},isVisible:n,areVisible:function p(e){for(var t in c)if(Object.prototype.hasOwnProperty.call(c,t)&&n(t)&&(void 0===e||c[t].$modal.data("instance")===e))return c[t].$modal;return!1}}},V.MODULES.position=function(L){var E=L.$;function o(){var e=L.selection.ranges(0),t=e.getBoundingClientRect();if(0===t.top&&0===t.left&&0===t.width||0===t.height){var n=!1,r=L.opts.toolbarInline&&e.startContainer&&e.startContainer.firstChild&&"BR"===e.startContainer.firstChild.tagName;0===L.$el.find(".fr-marker").length&&(r?E(e.startContainer.firstChild).after(V.MARKERS):L.selection.save(),n=!0);var o=L.$el.find(".fr-marker").first();o.css("display","inline"),o.css("line-height","");var i=o.offset(),a=o.outerHeight();o.css("display","none"),o.css("line-height",0),(t={}).left=i&&i.left,t.width=0,t.height=a,t.top=i&&i.top-(L.helpers.isMobile()&&!L.helpers.isIOS()||L.opts.iframe?0:L.helpers.scrollTop()),o&&0<o.length&&(t.top-=E(o.get(0).parentNode).height()),t.right=1,t.bottom=1,t.ok=!0,n&&(r?L.$el.find(".fr-marker").remove():L.selection.restore())}return t}function i(e,t,n,r){var o=n.data("container");if(!o||"BODY"===o.get(0).tagName&&"static"===o.css("position")||(e&&(e-=o.offset().left),t&&(t-=o.offset().top),"BODY"!==o.get(0).tagName?(e&&(e+=o.get(0).scrollLeft),t&&(t+=o.get(0).scrollTop)):"absolute"===o.css("position")&&(e&&(e+=o.position().left),t&&(t+=o.position().top))),L.opts.iframe&&o&&L.$tb&&o.get(0)!==L.$tb.get(0)){var i=L.helpers.getPX(L.$wp.find(".fr-iframe").css("padding-top")),a=L.helpers.getPX(L.$wp.find(".fr-iframe").css("padding-left"));e&&(e+=L.$iframe.offset().left+a),t&&(t+=L.$iframe.offset().top+i)}var s=function l(e,t){var n=e.outerWidth(!0);return t+n>L.$sc.get(0).clientWidth-10&&(t=L.$sc.get(0).clientWidth-n-10),t<0&&(t=10),t}(n,e);e&&n.css("left",s),t&&n.css("top",function c(e,t,n){var r=e.outerHeight(!0);if(!L.helpers.isMobile()&&L.$tb&&e.parent().get(0)!==L.$tb.get(0)){var o=e.parent().offset().top,i=t-r-(n||0);e.parent().get(0)===L.$sc.get(0)&&(o-=e.parent().position().top);var a=L.$sc.get(0).clientHeight;o+t+r>L.$sc.offset().top+a&&0<e.parent().offset().top+i&&0<i?i>L.$wp.scrollTop()&&(t=i,e.addClass("fr-above")):e.removeClass("fr-above")}return t}(n,t,r))}function a(e){var n=E(e),t=n.is(".fr-sticky-on"),r=n.data("sticky-top"),o=n.data("sticky-scheduled");if(void 0===r){n.data("sticky-top",0);var i=E('<div class="fr-sticky-dummy" style="height: '.concat(n.outerHeight(),'px;"></div>'));L.$box.prepend(i)}else L.$box.find(".fr-sticky-dummy").css("height",n.outerHeight());if(L.core.hasFocus()||0<L.$tb.findVisible("input:focus").length){var a=L.helpers.scrollTop(),s=Math.min(Math.max(a-L.$tb.parent().offset().top,0),L.$tb.parent().outerHeight()-n.outerHeight());if(s!==r&&s!==o&&(clearTimeout(n.data("sticky-timeout")),n.data("sticky-scheduled",s),n.outerHeight()<a-L.$tb.parent().offset().top&&n.addClass("fr-opacity-0"),n.data("sticky-timeout",setTimeout(function(){var e=L.helpers.scrollTop(),t=Math.min(Math.max(e-L.$tb.parent().offset().top,0),L.$tb.parent().outerHeight()-n.outerHeight());0<t&&"BODY"===L.$tb.parent().get(0).tagName&&(t+=L.$tb.parent().position().top),t!==r&&(n.css("top",Math.max(t,0)),n.data("sticky-top",t),n.data("sticky-scheduled",t)),n.removeClass("fr-opacity-0")},100))),!t){var l=L.$tb.parent(),c=l.get(0).offsetWidth-l.get(0).clientWidth;n.css("top","0"),n.width(l.width()-c),n.addClass("fr-sticky-on"),L.$box.addClass("fr-sticky-box")}}else clearTimeout(E(e).css("sticky-timeout")),n.css("top","0"),n.css("position",""),n.css("width",""),n.data("sticky-top",0),n.removeClass("fr-sticky-on"),L.$box.removeClass("fr-sticky-box")}function t(e){if(e.offsetWidth){var t=E(e),n=t.outerHeight(),r=t.data("sticky-position"),o=E("body"===L.opts.scrollableContainer?L.o_win:L.opts.scrollableContainer).outerHeight(),i=0,a=0;"body"!==L.opts.scrollableContainer&&(i=L.$sc.offset().top,a=E(L.o_win).outerHeight()-i-o);var s="body"===L.opts.scrollableContainer?L.helpers.scrollTop():i,l=t.is(".fr-sticky-on");t.data("sticky-parent")||t.data("sticky-parent",t.parent());var c=t.data("sticky-parent"),d=c.offset().top,f=c.outerHeight();if(t.data("sticky-offset")?L.$box.find(".fr-sticky-dummy").css("height","".concat(n,"px")):(t.data("sticky-offset",!0),t.after('<div class="fr-sticky-dummy" style="height: '.concat(n,'px;"></div>'))),!r){var p="auto"!==t.css("top")||"auto"!==t.css("bottom");p||t.css("position","fixed"),r={top:L.node.hasClass(t.get(0),"fr-top"),bottom:L.node.hasClass(t.get(0),"fr-bottom")},p||t.css("position",""),t.data("sticky-position",r),t.data("top",L.node.hasClass(t.get(0),"fr-top")?t.css("top"):"auto"),t.data("bottom",L.node.hasClass(t.get(0),"fr-bottom")?t.css("bottom"):"auto")}var h=L.helpers.getPX(t.data("top")),u=L.helpers.getPX(t.data("bottom")),g=r.top&&function v(){return d<s+h&&s+h<=d+f-n}()&&(L.helpers.isInViewPort(L.$sc.get(0))||"body"===L.opts.scrollableContainer),C=r.bottom&&function b(){return d+n<s+o-u&&s+o-u<d+f}();if(g||C){var m=c.get(0).offsetWidth-c.get(0).clientWidth;t.css("width","".concat(c.get(0).getBoundingClientRect().width-m,"px")),l||(t.addClass("fr-sticky-on"),t.removeClass("fr-sticky-off"),t.css("top")&&("auto"!==t.data("top")?t.css("top",L.helpers.getPX(t.data("top"))+i):t.data("top","auto")),t.css("bottom")&&("auto"!==t.data("bottom")?t.css("bottom",L.helpers.getPX(t.data("bottom"))+a):t.css("bottom","auto")))}else L.node.hasClass(t.get(0),"fr-sticky-off")||(t.css("width",""),t.removeClass("fr-sticky-on"),t.addClass("fr-sticky-off"),t.css("top")&&"auto"!==t.data("top")&&r.top&&t.css("top",0),t.css("bottom")&&"auto"!==t.data("bottom")&&r.bottom&&t.css("bottom",0))}}function s(){if(L.helpers.requestAnimationFrame()(s),!1!==L.events.trigger("position.refresh"))for(var e=0;e<L._stickyElements.length;e++)if(L.opts.toolbarBottom){var t=L.$tb.parent(),n=t.get(0).offsetWidth-t.get(0).clientWidth,r=E(L._stickyElements[e]);r.width(t.width()-n),r.addClass("fr-sticky-on"),L.$box.addClass("fr-sticky-box")}else a(L._stickyElements[e])}function n(){if(L._stickyElements)for(var e=0;e<L._stickyElements.length;e++)t(L._stickyElements[e])}return{_init:function r(){!function e(){L._stickyElements=[],L.helpers.isIOS()?(s(),L.events.$on(E(L.o_win),"scroll",function(){if(L.core.hasFocus())for(var e=0;e<L._stickyElements.length;e++){var t=E(L._stickyElements[e]),n=t.parent(),r=L.helpers.scrollTop();
vendor: 1,830 bytes, line 679
679t.outerHeight()<r-n.offset().top&&(L.opts.toolbarBottom&&L.helpers.isIOS()||(t.addClass("fr-opacity-0"),t.data("sticky-top",-1),t.data("sticky-scheduled",-1)))}},!0)):("body"!==L.opts.scrollableContainer&&L.events.$on(E(L.opts.scrollableContainer),"scroll",n,!0),L.events.$on(E(L.o_win),"scroll",n,!0),L.events.$on(E(L.o_win),"resize",n,!0),L.events.on("initialized",n),L.events.on("focus",n),L.events.$on(E(L.o_win),"resize","textarea",n,!0)),L.events.on("destroy",function(){L._stickyElements=[]})}()},forSelection:function l(e){var t=o();if(t.top!=undefined){e.css({top:0,left:0});var n=t.top+t.height,r=t.left+t.width/2-e.get(0).offsetWidth/2+L.helpers.scrollLeft();L.opts.iframe||(n+=L.helpers.scrollTop()),i(r,n,e,t.height)}},addSticky:function c(e){e.addClass("fr-sticky"),L.helpers.isIOS()&&!L.opts.toolbarBottom&&e.addClass("fr-sticky-ios"),e.removeClass("fr-sticky"),L._stickyElements.push(e.get(0))},refresh:n,at:i,getBoundingRect:o}},V.MODULES.refresh=function(l){var c=l.$;function i(e,t){e.toggleClass("fr-disabled",t).attr("aria-disabled",t)}function e(e){var t=l.$tb.find('.fr-more-toolbar[data-name="'.concat(e.attr("data-group-name"),'"]')),n=function s(e,t){var n=0,r=t.find("> .fr-command, > .fr-btn-wrap");r.each(function(e,t){n+=c(t).outerWidth()});var o,i=l.helpers.getPX(c(r[0]).css("margin-left")),a=l.helpers.getPX(c(r[0]).css("margin-right"));o="rtl"===l.opts.direction?l.$tb.outerWidth()-e.offset().left+l.$tb.offset().left-(n+e.outerWidth()+r.length*(i+a))/2:e.offset().left-l.$tb.offset().left-(n-e.outerWidth()+r.length*(i+a))/2;o+n+r.length*(i+a)>l.$tb.outerWidth()&&(o-=(n+r.length*(i+a)-e.outerWidth())/2);o<0&&(o=0);return o}(e,t);"rtl"===l.opts.direction?t.css("padding-right",n):t.css("padding-left",n)}return{undo:function t(e){i(e,!l.undo.canDo())},redo:function n(e){i(e,!l.undo.canRedo())}
vendor: 5,309 bytes, line 679
679,outdent:function a(e){if(l.node.hasClass(e.get(0),"fr-no-refresh"))return!1;if(c("button#markdown-".concat(l.id,".fr-active")).length)return!1;for(var t=l.selection.blocks(),n=0;n<t.length;n++){var r="rtl"===l.opts.direction||"rtl"===c(t[n]).css("direction")?"margin-right":"margin-left",o=t[0].parentElement;if(["HTML","P","DIV","UL","OL","LI","TR","BLOCKQUOTE","BODY"].indexOf(o.parentNode.tagName)<0)return i(e,!0),!0;if(t[0].previousSibling&&"none"==o.parentNode.style.listStyleType)return i(e,!0),!0;if("LI"===t[n].tagName||"LI"===t[n].parentNode.tagName)return i(e,!1),!0;if(0<l.helpers.getPX(c(t[n]).css(r)))return i(e,!1),!0}i(e,!0)},indent:function o(e){if(l.node.hasClass(e.get(0),"fr-no-refresh"))return!1;if(c("button#markdown-".concat(l.id,".fr-active")).length)return!1;for(var t=l.selection.blocks(),n=0;n<t.length;n++){for(var r=t[n].previousSibling;r&&r.nodeType===Node.TEXT_NODE&&0===r.textContent.length;)r=r.previousSibling;if("LI"!==t[n].tagName||r)return i(e,!1),!0;i(e,!0)}},moreText:e,moreParagraph:e,moreMisc:e,moreRich:e}},Object.assign(V.DEFAULTS,{attribution:!0,toolbarBottom:!1,toolbarButtons:null,toolbarButtonsXS:null,toolbarButtonsSM:null,toolbarButtonsMD:null,toolbarContainer:null,toolbarInline:!1,toolbarSticky:!0,toolbarStickyOffset:0,toolbarVisibleWithoutSelection:!1}),V.TOOLBAR_BUTTONS={moreText:{buttons:["bold","italic","underline","strikeThrough","subscript","superscript","fontFamily","fontSize","textColor","backgroundColor","inlineClass","inlineStyle","clearFormatting"]},moreParagraph:{buttons:["alignLeft","alignCenter","formatOLSimple","alignRight","alignJustify","formatOL","formatUL","paragraphFormat","paragraphStyle","lineHeight","outdent","indent","quote"]},moreRich:{buttons:["trackChanges","markdown","insertLink","insertFiles","insertImage","insertVideo","insertTable","emoticons","fontAwesome","specialCharacters","embedly","insertFile","insertHR"],buttonsVisible:4},moreMisc:{buttons:["undo","redo","fullscreen","print","getPDF","spellChecker","selectAll","html","help"],align:"right",buttonsVisible:2},trackChanges:{buttons:["showChanges","applyAll","removeAll","applyLast","removeLast"],buttonsVisible:0}},V.TOOLBAR_BUTTONS_MD=null,(V.TOOLBAR_BUTTONS_SM={}).moreText=Object.assign({},V.TOOLBAR_BUTTONS.moreText,{buttonsVisible:2}),V.TOOLBAR_BUTTONS_SM.moreParagraph=Object.assign({},V.TOOLBAR_BUTTONS.moreParagraph,{buttonsVisible:2}),V.TOOLBAR_BUTTONS_SM.moreRich=Object.assign({},V.TOOLBAR_BUTTONS.moreRich,{buttonsVisible:2}),V.TOOLBAR_BUTTONS_SM.moreMisc=Object.assign({},V.TOOLBAR_BUTTONS.moreMisc,{buttonsVisible:2}),V.TOOLBAR_BUTTONS_SM.trackChanges=Object.assign({},V.TOOLBAR_BUTTONS.trackChanges,{buttonsVisible:0}),(V.TOOLBAR_BUTTONS_XS={}).moreText=Object.assign({},V.TOOLBAR_BUTTONS.moreText,{buttonsVisible:0}),V.TOOLBAR_BUTTONS_XS.moreParagraph=Object.assign({},V.TOOLBAR_BUTTONS.moreParagraph,{buttonsVisible:0}),V.TOOLBAR_BUTTONS_XS.moreRich=Object.assign({},V.TOOLBAR_BUTTONS.moreRich,{buttonsVisible:0}),V.TOOLBAR_BUTTONS_XS.moreMisc=Object.assign({},V.TOOLBAR_BUTTONS.moreMisc,{buttonsVisible:2}),V.TOOLBAR_BUTTONS_XS.trackChanges=Object.assign({},V.TOOLBAR_BUTTONS.trackChanges,{buttonsVisible:0}),V.POWERED_BY='<a id="fr-logo" href="https://froala.com/wysiwyg-editor" target="_blank" title="Froala WYSIWYG HTML Editor"><span>Powered by</span><svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 822.8 355.33"><defs><style>.fr-logo{fill:#b1b2b7;}</style></defs><title>Froala</title><path class="fr-logo" d="M123.58,78.65A16.16,16.16,0,0,0,111.13,73H16.6C7.6,73,0,80.78,0,89.94V128.3a16.45,16.45,0,0,0,32.9,0V104.14h78.5A15.63,15.63,0,0,0,126.87,91.2,15.14,15.14,0,0,0,123.58,78.65Z"/><path class="fr-logo" d="M103.54,170a16.05,16.05,0,0,0-11.44-4.85H15.79A15.81,15.81,0,0,0,0,180.93v88.69a16.88,16.88,0,0,0,5,11.92,16,16,0,0,0,11.35,4.7h.17a16.45,16.45,0,0,0,16.41-16.6v-73.4H92.2A15.61,15.61,0,0,0,107.89,181,15.1,15.1,0,0,0,103.54,170Z"/><path class="fr-logo" d="M233,144.17c-5.29-6.22-16-7.52-24.14-7.52-16.68,0-28.72,7.71-36.5,23.47v-5.67a16.15,16.15,0,1,0-32.3,0v115.5a16.15,16.15,0,1,0,32.3,0v-38.7c0-19.09,3.5-63.5,35.9-63.5a44.73,44.73,0,0,1,5.95.27h.12c12.79,1.2,20.06-2.73,21.6-11.69C236.76,151.48,235.78,147.39,233,144.17Z"/><path class="fr-logo" d="M371.83,157c-13.93-13.11-32.9-20.33-53.43-20.33S279,143.86,265.12,157c-14.67,13.88-22.42,32.82-22.42,54.77,0,21.68,8,41.28,22.4,55.2,13.92,13.41,32.85,20.8,53.3,20.8s39.44-7.38,53.44-20.79c14.55-13.94,22.56-33.54,22.56-55.21S386.39,170.67,371.83,157Zm-9.73,54.77c0,25.84-18.38,44.6-43.7,44.6s-43.7-18.76-43.7-44.6c0-25.15,18.38-43.4,43.7-43.4S362.1,186.59,362.1,211.74Z"/><path class="fr-logo" d="M552.7,138.14a16.17,16.17,0,0,0-16,16.3v1C526.41,143.85,509,136.64,490,136.64c-19.83,0-38.19,7.24-51.69,20.4C424,171,416.4,190,416.4,212c0,21.61,7.78,41.16,21.9,55,13.56,13.33,31.92,20.67,51.7,20.67,18.83,0,36.29-7.41,46.7-19.37v1.57a16.15,16.15,0,1,0,32.3,0V154.44A16.32,16.32,0,0,0,552.7,138.14Zm-16.3,73.6c0,30.44-22.81,44.3-44,44.3-24.57,0-43.1-19-43.1-44.3s18.13-43.4,43.1-43.4C513.73,168.34,536.4,183.55,536.4,211.74Z"/><path class="fr-logo" d="M623.5,61.94a16.17,16.17,0,0,0-16,16.3v191.7a16.15,16.15,0,1,0,32.3,0V78.24A16.32,16.32,0,0,0,623.5,61.94Z"/><path class="fr-logo" d="M806.5,138.14a16.17,16.17,0,0,0-16,16.3v1c-10.29-11.
67963-27.74-18.84-46.7-18.84-19.83,0-38.19,7.24-51.69,20.4-14.33,14-21.91,33-21.91,55,0,21.61,7.78,41.16,21.9,55,13.56,13.33,31.92,20.67,51.7,20.67,18.83,0,36.29-7.41,46.7-19.37v1.57a16.15,16.15,0,1,0,32.3,0V154.44A16.32,16.32,0,0,0,806.5,138.14Zm-16.3,73.6c0,30.44-22.81,44.3-44,44.3-24.57,0-43.1-19-43.1-44.3s18.13-43.4,43.1-43.4C767.53,168.34,790.2,183.55,790.2,211.74Z"/></svg></a>',V.MODULES.toolbar=function(E){var y,S=E.$,t=[];function e(e){var n={};if(Array.isArray(e)){if(!Array.isArray(e[0])){for(var t=[],r=[],o=0;o<e.length;o++)"|"===e[o]||"-"===e[o]?(0<r.length&&t.push(r),r=[]):r.push(e[o]);0<r.length&&t.push(r),e=t}e.forEach(function(e,t){n["group".concat(t+1)]={buttons:e}}),n.showMoreButtons=!1}else"object"!==M(e)||Array.isArray(e)||((n=e).showMoreButtons=!0);return n}function N(){var e=E.helpers.screenSize();return t[y=e]}function T(){for(var e=E.$tb.find(".fr-more-toolbar"),t=0;t<e.length;t++){var c=S(e[t]);c.hasClass("fr-expanded")?function(){var n=E.helpers.getPX(c.css("padding-left")),e=c.find("> .fr-command, > .fr-btn-wrap"),t=S(e[0]),r=E.helpers.getPX(t.css("margin-left")),o=E.helpers.getPX(t.css("margin-right")),i=E.helpers.getPX(t.css("margin-top")),a=E.helpers.getPX(t.css("margin-bottom"));if(e.each(function(e,t){n+=S(t).outerWidth()+r+o}),E.$tb.outerWidth()<n){var s=Math.floor(n/E.$tb.outerWidth());n+=s*(n/c[0].childElementCount),s=Math.ceil(n/E.$tb.outerWidth());var l=(E.helpers.getPX(t.css("height"))+i+a)*s;c.css("height",l)}}():c.css("height","")}!E.helpers.isMobile()&&E.opts.toolbarBottom?E.$tb.find(".fr-toolbar .fr-more-toolbar").removeClass("position-relative"):E.$tb.find(".fr-toolbar .fr-more-toolbar").addClass("position-relative")}function o(){if(0==E.$tb.find("[data-name='trackChanges-".concat(E.id,"']")).length&&-1<E.opts.pluginsEnabled.indexOf("track_changes")){E.$tb.append(S('<div class="fr-more-toolbar"></div>').data("name","trackChanges-".concat(E.id)));for(var e=0,t=["showChanges","applyAll","removeAll","applyLast","removeLast"];e<t.length;e++){var n=t[e],r=V.COMMANDS[n];if(r){r.more_btn=!0;var o=S(E.button.build(n,r,!0));E.button.addButtons(o),E.$tb.find("[data-name='trackChanges-".concat(E.id,"']")).append(o)}}}if(y!==E.helpers.screenSize()){var i=N(),a=S(),s=S();for(var l in E.$tb.find(".fr-btn-grp > .fr-command, .fr-more-toolbar > .fr-command, .fr-btn-grp > .fr-btn-wrap > .fr-command, .fr-more-toolbar > .fr-btn-wrap > .fr-command").addClass("fr-hidden"),function L(){for(var t=E.$tb.find(".fr-btn-grp, .fr-more-toolbar"),r=function r(e){var n=S(t[e]);n.children().each(function(e,t){n.before(t)}),n.remove()},e=0;e<t.length;e++)r(e)}(),i){var c=i[l];if(c.buttons&&("trackChanges"!==l||-1!==E.opts.pluginsEnabled.indexOf("track_changes"))){var d=void 0,f=0,p=3,h=void 0;"trackChanges"!==l&&(h=S('<div class="fr-btn-grp fr-float-'.concat(i[l].align?i[l].align:"left",'"></div>'))),i.showMoreButtons&&(d=S('<div class="fr-more-toolbar"></div>').data("name","".concat(l,"-").concat(E.id)),"trackChanges"!==l&&"moreRich"!==l||!E.opts.trackChangesEnabled||d.addClass("fr-expanded"));for(var u=0;u<c.buttons.length;u++){c.buttonsVisible!==undefined&&(p=c.buttonsVisible);var g=E.$tb.find('> .fr-command[data-cmd="'+c.buttons[u]+'"], > div.fr-btn-wrap > .fr-command[data-cmd="'+c.buttons[u]+'"]'),C=null;E.node.hasClass(g.next().get(0),"fr-dropdown-menu")&&(C=g.next()),E.node.hasClass(g.next().get(0),"fr-options")&&(g.removeClass("fr-hidden"),g.next().removeClass("fr-hidden"),g=g.parent()),g.removeClass("fr-hidden"),i.showMoreButtons&&p<=f?(d.append(g),C&&d.append(C)):(h.append(g),C&&h.append(C)),f++}if(i.showMoreButtons&&p<f){var m=E.$tb.find('.fr-command[data-cmd="'.concat(l,'"]'));if(0<m.length)m.removeClass("fr-hidden fr-open");else{var v=l,b=V.COMMANDS[v];b&&(b.more_btn=!0,m=S(E.button.build(v,b,!0)),E.button.addButtons(m))}h&&h.append(m)}h&&a.push(h),i.showMoreButtons&&s.push(d)}}E.opts.toolbarBottom?(E.$tb.append(s),E.$tb.find(".fr-newline").remove(),E.$tb.append('<div class="fr-newline"></div>'),E.$tb.append(a)):(E.$tb.append(a),E.$tb.find(".fr-newline").remove(),E.$tb.append('<div class="fr-newline"></div>'),E.$tb.append(s)),E.$tb.removeClass("fr-toolbar-open"),E.$box.removeClass("fr-toolbar-open"),E.events.trigger("codeView.toggle")}T()}function n(e,t){setTimeout(function(){if((!e||e.which!=V.KEYCODE.ESC)&&E.selection.inEditor()&&E.core.hasFocus()&&!E.popups.areVisible()&&"false"!=S(E.selection.blocks()[0]).closest("table").attr("contenteditable")&&(E.opts.toolbarVisibleWithoutSelection||!E.selection.isCollapsed()&&!E.keys.isIME()||t)){if(E.$tb.data("instance",E),!1===E.events.trigger("toolbar.show",[e]))return;E.$tb.show(),E.opts.toolbarContainer||E.position.forSelection(E.$tb),1<E.opts.zIndex?E.$tb.css("z-index",E.opts.zIndex+1):E.$tb.css("z-index",null)}},0)}function i(e){return(!e||"blur"!==e.type||document.activeElement!==E.el)&&(!(!e||"keydown"!==e.type||!E.keys.ctrlKey(e))||(!!E.button.getButtons(".fr-dropdown.fr-active").next().find(E.o_doc.activeElement).length||(E.helpers.isMobile()&&E.opts.toolbarInline&&(E.$tb.find(".fr-expanded").toggleClass("fr-expanded"),E.$tb.find(".fr-open").removeClass("fr-open"),E.$tb.removeClass("fr-toolbar-open"),T()),void(!1!==E.events.trigger("toolbar.hide")&&E.$tb.hide()))))}t[V.XS]=e(E.opts.toolbarButtonsXS||E.opts.toolbarButtons||V.TOOLBAR_BUTTONS_XS||V.TOOLBAR_BUTTONS||[]),t[V.SM]=e(E.opts.toolbarButtonsSM||E.opts.toolbarButtons||V.TOOLBAR_BUTTONS_SM||V.TOOLBAR_BUTTONS||[]),t[V.MD]=e(E.opts.toolbarButtonsMD||E.opts.toolbarButtons||V.TOOLBAR_BUTTONS_MD||V.TOOLBAR_BUTTONS||[]),t[V.LG]=e(E.opts.toolbarButtons||V.TOOLBAR_BUTTONS||[]);var r=null;function a(e){clearTimeout(r),e&&e.which===V.KEYCODE.ESC||(r=setTimeout(n,E.opts.typingTimer))}function s(){E.events.on("window.mousedown",i),E.events.on("keydown",i),E.events.on("blur",i),E.events.$on(E.$tb,"transitionend",".fr-more-toolbar",function(){E.position.forSelection(E.$tb)}),E.helpers.isMobile()||E.events.on("window.mouseup",n),E.helpers.isMobile()?E.helpers.isIOS()||(E.events.on("window.touchend",n),E.browser.mozilla&&setInterval(n,200)):E.events.on("window.keyup",a),E.events.on("keydown",function(e){e&&e.which===V.KEYCODE.ESC&&E.events.trigger("toolbar.esc")}),E.events.on("keydown",function(e){if(e.which===V.KEYCODE.ALT)return e.stopPropagation(),!1},!0),E.events.$on(E.$wp,"scroll.toolbar",n),E.events.on("commands.after",n),E.helpers.isMobile()&&(E.events.$on(E.$doc,"selectionchange",a),E.events.$on(E.$doc,"orientationchange",n))}
vendor: 5,051 bytes, line 679
679function l(){E.$tb.html("").removeData().remove(),E.$tb=null,E.$second_tb&&(E.$second_tb.html("").removeData().remove(),E.$second_tb=null)}function c(){E.$box.removeClass("fr-top fr-bottom fr-inline fr-basic"),E.$box.find(".fr-sticky-dummy").remove()}function d(){E.opts.theme&&E.$tb.addClass("".concat(E.opts.theme,"-theme")),1<E.opts.zIndex&&E.$tb.css("z-index",E.opts.zIndex+1),"auto"!==E.opts.direction&&E.$tb.removeClass("fr-ltr fr-rtl").addClass("fr-".concat(E.opts.direction)),E.helpers.isMobile()?E.$tb.addClass("fr-mobile"):E.$tb.addClass("fr-desktop"),E.opts.toolbarContainer?(E.opts.toolbarInline&&(s(),i()),E.opts.toolbarBottom?E.$tb.addClass("fr-bottom"):E.$tb.addClass("fr-top")):function e(){E.opts.toolbarInline?(E.$sc.append(E.$tb),E.$tb.data("container",E.$sc),E.$tb.addClass("fr-inline"),s(),E.opts.toolbarBottom=!1):(E.opts.toolbarBottom?(E.$box.append(E.$tb),E.$tb.addClass("fr-bottom"),E.$box.addClass("fr-bottom")):(E.opts.toolbarBottom=!1,E.$box.prepend(E.$tb),E.$tb.addClass("fr-top"),E.$box.addClass("fr-top")),E.$tb.addClass("fr-basic"),E.opts.toolbarSticky&&(E.opts.toolbarStickyOffset&&(E.opts.toolbarBottom?E.$tb.css("bottom",E.opts.toolbarStickyOffset):E.$tb.css("top",E.opts.toolbarStickyOffset)),E.position.addSticky(E.$tb)))}(),function t(){var e=E.button.buildGroup(N());E.$tb.append(e),T(),E.button.bindCommands(E.$tb)}(),function r(){E.events.$on(S(E.o_win),"resize",o),E.events.$on(S(E.o_win),"orientationchange",o),E.opts.toolbarButtons&&-1<JSON.stringify(E.opts.toolbarButtons).indexOf("trackChanges")&&o();var e=E.$tb.find(".fr-more-toolbar[data-name=trackChanges-".concat(E.id,"]")),t=0!==e.length&&e.hasClass("fr-expanded");if(E.opts.trackChangesEnabled&&!t){var n=E.$tb.find(".fr-command.fr-btn[data-cmd=trackChanges");e.addClass("fr-expanded"),n.toggleClass("fr-open"),E.toolbar.enable()}}(),E.accessibility.registerToolbar(E.$tb),E.events.$on(E.$tb,"".concat(E._mousedown," ").concat(E._mouseup),function(e){var t=e.originalEvent?e.originalEvent.target||e.originalEvent.originalTarget:null;if(t&&"INPUT"!==t.tagName&&!E.edit.isDisabled())return e.stopPropagation(),e.preventDefault(),!1},!0),E.helpers.isMobile()&&E.events.$on(E.$tb,"click",function(){E.popups.areVisible().length||E.id!==E.shared.selected_editor&&E.shared.selected_editor||E.$el.focus()}),E.events.$on(E.$tb,"transitionend",".fr-more-toolbar",function(){E.$box.hasClass("fr-fullscreen")&&(E.opts.height=E.o_win.innerHeight-(E.opts.toolbarInline?0:E.$tb.outerHeight()+(E.$second_tb?E.$second_tb.outerHeight():0)),E.size.refresh())})}var f=!1;return{_init:function p(){if(E.$sc=S(E.opts.scrollableContainer).first(),!E.$wp)return!1;E.opts.toolbarInline||E.opts.toolbarBottom||(E.$second_tb=S(E.doc.createElement("div")).attr("class","fr-second-toolbar"),E.$box.append(E.$second_tb),(!1!==E.ul||E.opts.attribution)&&E.$second_tb.prepend(V.POWERED_BY)),E.opts.toolbarContainer?(E.shared.$tb?(E.$tb=E.shared.$tb,E.opts.toolbarInline&&s()):(E.shared.$tb=S(E.doc.createElement("DIV")),E.shared.$tb.addClass("fr-toolbar"),E.$tb=E.shared.$tb,S(E.opts.toolbarContainer).append(E.$tb),d(),E.$tb.data("instance",E)),E.opts.toolbarInline?E.$box.addClass("fr-inline"):E.$box.addClass("fr-basic"),E.events.on("focus",function(){E.$tb.data("instance",E)},!0),E.opts.toolbarInline=!1):E.opts.toolbarInline?(E.$box.addClass("fr-inline"),E.shared.$tb?(E.$tb=E.shared.$tb,s()):(E.shared.$tb=S(E.doc.createElement("DIV")),E.shared.$tb.addClass("fr-toolbar"),E.$tb=E.shared.$tb,d())):(E.$box.addClass("fr-basic"),E.$tb=S(E.doc.createElement("DIV")),E.$tb.addClass("fr-toolbar"),d(),E.$tb.data("instance",E)),E.events.on("destroy",c,!0),E.events.on(E.opts.toolbarInline||E.opts.toolbarContainer?"shared.destroy":"destroy",l,!0),E.events.on("edit.on",function(){E.$tb.removeClass("fr-disabled").removeAttr("aria-disabled")}),E.events.on("edit.off",function(){E.$tb.addClass("fr-disabled").attr("aria-disabled",!0)}),function e(){E.events.on("shortcut",function(e,t,n){var r;if(t&&!n?r=E.$tb.find('.fr-command[data-cmd="'.concat(t,'"]')):t&&n&&(r=E.$tb.find('.fr-command[data-cmd="'.concat(t,'"][data-param1="').concat(n,'"]'))),r.length&&(e.preventDefault(),e.stopPropagation(),r.parents(".fr-toolbar").data("instance",E),"keydown"===e.type))return E.button.exec(r),!1})}()},hide:i,show:function h(){if(!1===E.events.trigger("toolbar.show"))return!1;E.$tb.show()},showInline:n,disable:function u(){!f&&E.$tb&&(E.$tb.find(".fr-btn-grp > .fr-command, .fr-more-toolbar > .fr-command, .fr-btn-wrap > .fr-command").addClass("fr-disabled fr-no-refresh").attr("aria-disabled",!0),f=!0)},enable:function g(){f&&E.$tb&&(E.$tb.find(".fr-btn-grp > .fr-command, .fr-more-toolbar > .fr-command, .fr-btn-wrap > .fr-command").removeClass("fr-disabled fr-no-refresh").attr("aria-disabled",!1),f=!1),E.button.bulkRefresh()},setMoreToolbarsHeight:T}};var c=["scroll","wheel","touchmove","touchstart","touchend"],d=["webkit","moz","ms","o"],f=["transitionend"],o=document.createElement("div").style,i=["Webkit","Moz","ms","O","css","style"],s={visibility:"hidden",display:"block"}
vendor: 10,138 bytes, line 679
679,r=["focus","blur","click"],a={},l=function l(e,t){return{altKey:e.altKey,bubbles:e.bubbles,cancelable:e.cancelable,changedTouches:e.changedTouches,ctrlKey:e.ctrlKey,detail:e.detail,eventPhase:e.eventPhase,metaKey:e.metaKey,pageX:e.pageX,pageY:e.pageY,shiftKey:e.shiftKey,view:e.view,"char":e["char"],key:e.key,keyCode:e.keyCode,button:e.button,buttons:e.buttons,clientX:e.clientX,clientY:e.clientY,offsetX:e.offsetX,offsetY:e.offsetY,pointerId:e.pointerId,pointerType:e.pointerType,screenX:e.screenX,screenY:e.screenY,targetTouches:e.targetTouches,toElement:e.toElement,touches:e.touches,type:e.type,which:e.which,target:e.target,currentTarget:t,originalEvent:e,stopPropagation:function(){e.stopPropagation()},stopImmediatePropagation:function(){e.stopImmediatePropagation()},preventDefault:function(){-1===c.indexOf(e.type)&&e.preventDefault()}}},p=function p(e){return e.ownerDocument&&e.ownerDocument.body&&e.ownerDocument.body.contains(e)||"#document"===e.nodeName||"HTML"===e.nodeName||e===window},h=function h(n,r){return function(e){var t=e.target;if(r)for(r=g(r);t&&t!==this;)Element.prototype.matches.call(t,g(r))&&n.call(t,l(e,t)),t=t.parentNode;else p(t)&&n.call(t,l(e,t))}},u=function u(e,t){return new v(e,t)},g=function g(e){return e&&"string"==typeof e?e.replace(/^\s*>/g,":scope >").replace(/,\s*>/g,", :scope >"):e},C=function C(e){return"function"==typeof e&&"number"!=typeof e.nodeType},m=u;u.fn=u.prototype={constructor:u,length:0,contains:function(e){if(!e)return!1;if(Array.isArray(e)){for(var t=0;t<e.length;t++)if(this.contains(e[t])&&this!=e[t])return!0;return!1}for(var n=0;n<this.length;n++)for(var r=e;r;){if(r==this[n]||r[0]&&r[0].isEqualNode(this[n]))return!0;r=r.parentNode}return!1},findVisible:function(e){for(var t=this.find(e),n=t.length-1;0<=n;n--)m(t[n]).isVisible()||t.splice(n,1);return t},formatParams:function(t){var e="".concat(Object.keys(t).map(function(e){return"".concat(e,"=").concat(encodeURIComponent(t[e]))}).join("&"));return e||""},ajax:function(t){var n=new XMLHttpRequest,e=this.formatParams(t.data);for(var r in"GET"===t.method.toUpperCase()&&(t.url=e?t.url+"?"+e:t.url),n.open(t.method,t.url,!0),t.withCredentials&&(n.withCredentials=!0),t.crossDomain&&n.setRequestHeader("Access-Control-Allow-Origin","*"),t.headers)Object.prototype.hasOwnProperty.call(t.headers,r)&&n.setRequestHeader(r,t.headers[r]);Object.prototype.hasOwnProperty.call(t.headers,"Content-Type")||("json"===t.dataType?n.setRequestHeader("Content-Type","application/json"):n.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8")),n.onload=function(){if(200==n.status){var e=n.responseText;"json"===t.dataType&&(e=JSON.parse(e)),t.done(e,n.status,n)}else t.fail(n)},n.send(e)},prevAll:function(){var e=m();if(!this[0])return e;for(var t=this[0];t&&t.previousSibling;)t=t.previousSibling,e.push(t);return e},index:function(e){return e?"string"==typeof e?[].indexOf.call(m(e),this[0]):[].indexOf.call(this,e.length?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},isVisible:function(){return!!this[0]&&!!(this[0].offsetWidth||this[0].offsetHeight||this[0].getClientRects().length)},toArray:function(){return[].slice.call(this)},get:function(e){return null==e?[].slice.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=u.merge(this.constructor(),e);return t.prevObject=this,t},wrapAll:function(e){var t;return this[0]&&(C(e)&&(e=e.call(this[0])),t=u(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){if("string"==typeof e){for(var t=e.split(" "),n=0;n<t.length&&0===t[n].trim().length;)n++;if(n<t.length&&(m(e).length&&t[n].trim()===m(e)[0].tagName&&(e=document.createElement(t[n].trim())),n++),"string"!=typeof e)for(var r=m(e);n<t.length;n++){t[n]=t[n].trim();var o=t[n].split("=");r.attr(o[0],o[1].replace('"',""))}}for(;this[0].firstChild&&this[0].firstChild!==e&&"string"!=typeof e;)e.appendChild(this[0].firstChild)},wrap:function(t){var n=C(t);return this.each(function(e){m(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(){return this.parent().each(function(){this.nodeName&&this.nodeName.toLowerCase()===name.toLowerCase()||u(this).replaceWith(this.childNodes)})},grep:function(e,t,n){for(var r=[],o=0,i=e.length,a=!n;o<i;o++)!t(e[o],o)!==a&&r.push(e[o]);return r},map:function(n){return this.pushStack(u.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack([].slice.apply(this,arguments))},each:function(e){if(this.length)for(var t=0;t<this.length&&!1!==e.call(this[t],t,this[t]);t++);return this},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},empty:function(){for(var e=0;e<this.length;e++)this[e].innerHTML=""},contents:function(){for(var e=m(),t=0;t<this.length;t++)for(var n=this[t].childNodes,r=0;r<n.length;r++)e.push(n[r]);return e},attr:function(e,t){if("object"===M(e)){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&null!==e[n]&&this.attr(n,e[n]);return this}if(void 0===t)return 0===this.length||!this[0].getAttribute&&"checked"!==e?undefined:"checked"===e?this[0].checked:"tagName"===e?this[0].tagName:this[0].getAttribute(e);if("checked"===e)for(var r=0;r<this.length;r++)this[r].checked=t;else if("tagName"===e)for(var o=0;o<this.length;o++)this[o].tagName=t;else for(var i=0;i<this.length;i++)this[i].setAttribute(e,t);return this},removeAttr:function(e){for(var t=0;t<this.length;t++)this[t].removeAttribute&&this[t].removeAttribute(e);return this},hide:function(){return this.css("display","none"),this},show:function(){return this.css("display","block"),this},focus:function(){return this.length&&this[0].focus(),this},blur:function(){return this.length&&this[0].blur(),this},data:function(e,t){if(void 0!==t){for(var n=0;n<this.length;n++)"object"!==M(this[n]["data-"+e]=t)&&"function"!=typeof t&&this[n].setAttribute&&this[n].setAttribute("data-"+e,t);return this}if(void 0!==t)return this.attr("data-"+e,t);if(0===this.length)return undefined;for(var r=0;r<this.length;r++){var o=this[r]["data-"+e];if(null==o&&this[r].getAttribute&&(o=this[r].getAttribute("data-"+e)),void 0!==o&&null!=o)return o}return undefined},removeData:function(e){for(var t=0;t<this.length;t++)this[t].removeAttribute&&this[t].removeAttribute("data-"+e),this[t]["data-"+e]=null;return this},getCorrectStyleName:function(e){if(!a[e]){var t;e in o&&(t=e);for(var n=e[0].toUpperCase()+e.slice(1),r=i.length;r--;)(e=i[r]+n)in o&&(t=e);a[e]=t}return a[e]},css:function(e,t){if(void 0!==t){if(0===this.length)return this;("string"!=typeof t||""===t.trim()||isNaN(t))&&"number"!=typeof t||!/(margin)|(padding)|(height)|(width)|(top)|(left)|(right)|(bottom)/gi.test(e)||/(line-height)/gi.test(e)||(t+="px");for(var n=0;n<this.length;n++)e=m(this).getCorrectStyleName(e),this[n].style[e]=t;return this}if("string"==typeof e){if(0===this.length)return undefined;var r=this[0].ownerDocument||document,o=r.defaultView||r.parentWindow;return e=m(this).getCorrectStyleName(e),o.getComputedStyle(this[0])[e]}for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&this.css(i,e[i]);return this},toggleClass:function(e,t){if(1<e.split(" ").length){for(var n=e.split(" "),r=0;r<n.length;r++)this.toggleClass(n[r],t);return this}for(var o=0;o<this.length;o++)void 0===t?this[o].classList.contains(e)?this[o].classList.remove(e):this[o].classList.add(e):t?this[o].classList.contains(e)||this[o].classList.add(e):this[o].classList.contains(e)&&this[o].classList.remove(e);return this},addClass:function(e){if(0===e.length)return this;if(1<e.split(" ").length){for(var t=e.split(" "),n=0;n<t.length;n++)this.addClass(t[n]);return this}for(var r=0;r<this.length;r++)this[r].classList.add(e);return this},removeClass:function(e){if(1<e.split(" ").length){for(var t=e.split(" "),n=0;n<t.length;n++)t[n]=t[n].trim(),t[n].length&&this.removeClass(t[n]);return this}for(var r=0;r<this.length;r++)e.length&&this[r].classList.remove(e);return this},getClass:function(e){return e.getAttribute&&e.getAttribute("class")||""},stripAndCollapse:function(e){return(e.match(/[^\x20\t\r\n\f]+/g)||[]).join(" ")},hasClass:function(e){var t,n,r=0;for(t=" "+e+" ";n=this[r++];)if(1===n.nodeType&&-1<(" "+m(this).stripAndCollapse(m(this).getClass(n))+" ").indexOf(t))return!0;return!1},scrollTop:function(e){if(void 0===e)return 0===this.length?undefined:this[0]===document?document.documentElement.scrollTop:this[0].scrollTop;for(var t=0;t<this.length;t++)this[t]===document?window.scrollTo(document.documentElement.scrollLeft,e):this[t].scrollTop=e},scrollLeft:function(e){if(void 0===e)return 0===this.length?undefined:this[0]===document?document.documentElement.scrollLeft:this[0].scrollLeft;for(var t=0;t<this.length;t++)this[t]===document?window.scrollTo(e,document.documentElement.scrollTop):this[t].scrollLeft=e},on:function(e,t,n){if(1<e.split(" ").length){for(var r=e.split(" "),o=0;o<r.length;o++)if(-1!==f.indexOf(e))for(var i=0;i<d.length;i++)this.on(d[i]+e[0].toUpperCase()+e.slice(1),t,n);else this.on(r[o],t,n);return this}n="function"==typeof t?h(t,null):h(n,t);for(var a=0;a<this.length;a++){var s=m(this[a]);s.data("events")||s.data("events",[]),s.data("events").push([e,n]);var l=e.split(".");l=l[0],0<=c.indexOf(l)?s.get(0).addEventListener(l,n,{passive:!0}):s.get(0).addEventListener(l,n)}},off:function(e){if(1<e.split(" ").length){for(var t=e.split(" "),n=0;n<t.length;n++)this.off(t[n]);return this}for(var r=0;r<this.length;r++){var o=m(this[r]);if(o.data("events")){var i=e.split(".");i=i[0];for(var a=o.data("events")||[],s=a.length-1;0<=s;s--){var l=a[s];l[0]==e&&(o.get(0).removeEventListener(i,l[1]),a.splice(s,1))}}}},trigger:function(e){for(var t=0;t<this.length;t++){var n=void 0;"function"==typeof Event?n=0<=e.search(/^mouse/g)?new MouseEvent(e,{view:window,cancelable:!0,bubbles:!0}):new Event(e):0<=e.search(/^mouse/g)?(n=document.createEvent("MouseEvents")).initMouseEvent(e,!0,!0,window,0,0,0,0,0,!1,!1,
vendor: 10,294 bytes, line 679
679!1,!1,0,null):(n=document.createEvent("Event")).initEvent(e,!0,!0),0<=r.indexOf(e)&&"function"==typeof this[t][e]?this[t][e]():this[t].dispatchEvent(n)}},triggerHandler:function(){},val:function(e){if(void 0===e)return this[0].value;for(var t=0;t<this.length;t++)this[t].value=e;return this},siblings:function(){return m(this[0]).parent().children().not(this)},find:function(e){var t=m();if("string"!=typeof e){for(var n=0;n<e.length;n++)for(var r=0;r<this.length;r++)if(this[r]!==e[n]&&m(this[r]).contains(e[n])){t.push(e[n]);break}return t}var o=function o(e){return"object"===("undefined"==typeof HTMLElement?"undefined":M(HTMLElement))?e instanceof HTMLElement:e&&"object"===M(e)&&null!==e&&1===e.nodeType&&"string"==typeof e.nodeName};e=g(e);for(var i=0;i<this.length;i++)if(this[i].querySelectorAll){var a=[];if(e&&"string"==typeof e)try{a=this[i].querySelectorAll(e)}catch(l){a=this[i].children}else o(e)&&(a=[e]);for(var s=0;s<a.length;s++)t.push(a[s])}return t},children:function(){for(var e=m(),t=0;t<this.length;t++)for(var n=this[t].children,r=0;r<n.length;r++)e.push(n[r]);return e},not:function(e){if("string"==typeof e)for(var t=this.length-1;0<=t;t--)Element.prototype.matches.call(this[t],e)&&this.splice(t,1);else if(e instanceof u){for(var n=this.length-1;0<=n;n--)for(var r=0;r<e.length;r++)if(this[n]===e[r]){this.splice(n,1);break}}else for(var o=this.length-1;0<=o;o--)this[o]===e[0]&&this.splice(o,1);return this},add:function(e){for(var t=0;t<e.length;t++)this.push(e[t]);return this},closest:function(e){for(var t=0;t<this.length;t++){var n=Element.prototype.closest.call(this[t],e);if(n)return m(n)}return m()},html:function(e){if(void 0===e)return 0===this.length?undefined:this[0].innerHTML;if("string"==typeof e)for(var t=0;t<this.length;t++){this[t].innerHTML=e;for(var n=this[t].children,r=this[t].ownerDocument||document,o=0;o<n.length;o++)if("SCRIPT"===n[o].tagName){var i=r.createElement("script");i.innerHTML=n[o].innerHTML,n[o].hasAttribute("async")&&i.setAttribute("async",""),i.src=n[o].src,n[o].hasAttribute("defer")&&i.setAttribute("defer",""),r.head.appendChild(i).parentNode.removeChild(i)}}else{this[0].innerHTML="",this.append(e[0]);var a=this[0].ownerDocument||document;if("SCRIPT"===e[0].tagName){var s=a.createElement("script");s.innerHTML=e[0].innerHTML,a.head.appendChild(s).parentNode.removeChild(s)}}return this},text:function(e){if(!e)return this.length?this[0].textContent:"";for(var t=0;t<this.length;t++)this[t].textContent=e},after:function e(t){if(t)if("string"==typeof t)for(var n=0;n<this.length;n++){var e=this[n];if(e.nodeType!=Node.ELEMENT_NODE){var r=e.ownerDocument.createElement("SPAN");m(e).after(r),m(r).after(t).remove()}else e.insertAdjacentHTML("afterend",t)}else{var o=this[0];if(o.nextSibling)if(t instanceof u)for(var i=0;i<t.length;i++)o.nextSibling.parentNode.insertBefore(t[i],o.nextSibling);else o.nextSibling.parentNode.insertBefore(t,o.nextSibling);else m(o.parentNode).append(t)}return this},clone:function(e){for(var t=m(),n=0;n<this.length;n++)t.push(this[n].cloneNode(e));return t},replaceWith:function(e){if("string"==typeof e)for(var t=0;t<this.length;t++)this[t].parentNode&&(this[t].outerHTML=e);else if(e&&e.length)for(var n=0;n<this.length;n++)this.replaceWith(e[n]);else this.after(e).remove()},insertBefore:function(e){return m(e).before(this[0]),this},before:function e(t){if(t instanceof u){for(var n=0;n<t.length;n++)this.before(t[n]);return this}if(t)if("string"==typeof t)for(var r=0;r<this.length;r++){var e=this[r];if(e.nodeType!=Node.ELEMENT_NODE){var o=e.ownerDocument.createElement("SPAN");m(e).before(o),m(o).before(t).remove()}else e.parentNode&&e.insertAdjacentHTML("beforebegin",t)}else{var i=this[0];if(i.parentNode)if(t instanceof u)for(var a=0;a<t.length;a++)i.parentNode.insertBefore(t[a],i);else i.parentNode.insertBefore(t,i)}return this},append:function(e){if(0==this.length)return this;if("string"==typeof e)for(var t=0;t<this.length;t++){var n=this[t],r=n.ownerDocument.createElement("SPAN");m(n).append(r),m(r).after(e).remove()}else if(e instanceof u||Array.isArray(e))for(var o=0;o<e.length;o++)this.append(e[o]);else"function"!=typeof e&&this[0].appendChild(e);return this},prepend:function(e){if(0==this.length)return this;if("string"==typeof e)for(var t=0;t<this.length;t++){var n=this[t],r=n.ownerDocument.createElement("SPAN");m(n).prepend(r),m(r).before(e).remove()}else if(e instanceof u)for(var o=0;o<e.length;o++)this.prepend(e[o]);else{var i=this[0];i.firstChild?i.firstChild?i.insertBefore(e,i.firstChild):i.appendChild(e):m(i).append(e)}return this},remove:function(){for(var e=0;e<this.length;e++)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this},prev:function(){return this.length&&this[0].previousElementSibling?m(this[0].previousElementSibling):m()},next:function(){return this.length&&this[0].nextElementSibling?m(this[0].nextElementSibling):m()},nextAllVisible:function(){return this.next()},prevAllVisible:function(){return this.prev()},outerHeight:function(e){if(0===this.length)return undefined;var t=this[0];if(t===t.window)return t.innerHeight;var n={},r=this.isVisible();if(!r)for(var o in s)n[o]=t.style[o],t.style[o]=s[o];var i=t.offsetHeight;if(e&&(i+=parseInt(m(t).css("marginTop"))+parseInt(m(t).css("marginBottom"))),!r)for(var a in s)t.style[a]=n[a];return i},outerWidth:function(e){if(0===this.length)return undefined;var t=this[0];if(t===t.window)return t.outerWidth;var n={},r=this.isVisible();if(!r)for(var o in s)n[o]=t.style[o],t.style[o]=s[o];var i=t.offsetWidth;if(e&&(i+=parseInt(m(t).css("marginLeft"))+parseInt(m(t).css("marginRight"))),!r)for(var a in s)t.style[a]=n[a];return i},width:function(e){if(e===undefined){if(this[0]instanceof HTMLDocument)return this[0].body.offsetWidth;if(this[0])return this[0].offsetWidth}else this[0].style.width=e+"px"},height:function(e){var t=this[0];if(e===undefined){if(t instanceof HTMLDocument){var n=t.documentElement;return Math.max(t.body.scrollHeight,n.scrollHeight,t.body.offsetHeight,n.offsetHeight,n.clientHeight)}return t.offsetHeight}t.style.height=e+"px"},is:function(e){return 0!==this.length&&("string"==typeof e&&this[0].matches?this[0].matches(e):e instanceof u?this[0]==e[0]:this[0]==e)},parent:function(){return 0===this.length?m():m(this[0].parentNode)},_matches:function(e,t){var n=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector;return e&&!t?n:n.call(e,t)},parents:function(e){for(var t=m(),n=0;n<this.length;n++)for(var r=this[n].parentNode;r&&r!=document&&this._matches(r);)e?this._matches(r,e)&&t.push(r):t.push(r),r=r.parentNode;return t},parentsUntil:function(e,t){var n=m();e instanceof u&&0<e.length&&(e=e[0]);for(var r=0;r<this.length;r++)for(var o=this[r].parentNode;o&&o!=document&&o!=e&&this[r]!=e&&("string"!=typeof e||!Element.prototype.matches.call(o,e));)t?Element.prototype.matches.call(o,t)&&n.push(o):n.push(o),o=o.parentNode;return n},insertAfter:function(e){var t=e.parent()[0];t&&t.insertBefore(this[0],e[0].nextElementSibling)},filter:function(e){var t=m();if("function"==typeof e)for(var n=0;n<this.length;n++)e.call(this[n],this[n])&&t.push(this[n]);else if("string"==typeof e)for(var r=0;r<this.length;r++)this[r].matches(e)&&t.push(this[r]);return t},offset:function(){if(0===this.length)return undefined;var e=this[0].getBoundingClientRect(),t=this[0].ownerDocument.defaultView;return{top:e.top+t.pageYOffset,left:e.left+t.pageXOffset}},position:function(){return{left:this[0].offsetLeft,top:this[0].offsetTop}},push:[].push,splice:[].splice},u.extend=function(e){e=e||{};for(var t=1;t<arguments.length;t++)if(arguments[t])for(var n in arguments[t])Object.prototype.hasOwnProperty.call(arguments[t],n)&&(e[n]=arguments[t][n]);return e},u.merge=function(e,t){for(var n=+t.length,r=0,o=e.length;r<n;r++)e[o++]=t[r];return e.length=o,e},u.map=function(e,t,n){var r,o,i=0,a=[];if(Array.isArray(e))for(r=e.length;i<r;i++)null!=(o=t(e[i],i,n))&&a.push(o);else for(i in e)null!=(o=t(e[i],i,n))&&a.push(o);return[].concat.apply([],a)};var v=function v(e,t){if(!e)return this;if("string"==typeof e&&"<"===e[0]){var n=document.createElement("DIV");return n.innerHTML=e,m(n.firstElementChild)}if(t=t instanceof u?t[0]:t,"string"!=typeof e)return e instanceof u?e:(this[0]=e,this.length=1,this);e=g(e);for(var r=(t||document).querySelectorAll(e),o=0;o<r.length;o++)this[o]=r[o];return this.length=r.length,this};v.prototype=u.prototype;var b=V;function L(){this.doc=this.$el.get(0).ownerDocument,this.win="defaultView"in this.doc?this.doc.defaultView:this.doc.parentWindow,this.$doc=u(this.doc),this.$win=u(this.win),this.opts.pluginsEnabled||(this.opts.pluginsEnabled=Object.keys(b.PLUGINS)),this.opts.initOnClick?(this.load(b.MODULES),this.$el.on("touchstart.init",function(){u(this).data("touched",!0)}),this.$el.on("touchmove.init",function(){u(this).removeData("touched")}),this.$el.on("mousedown.init touchend.init dragenter.init focus.init",function r(e){if("false"!==this.$el.attr("contentEditable")||!this.opts.initOnClick){if("touchend"===e.type&&!this.$el.data("touched"))return!0;if(1===e.which||!e.which){this.$el.off("mousedown.init touchstart.init touchmove.init touchend.init dragenter.init focus.init"),this.load(b.MODULES),this.load(b.PLUGINS);var t=e.originalEvent&&e.originalEvent.originalTarget;if(t&&"IMG"===t.tagName&&u(t).trigger("mousedown"),"undefined"==typeof this.ul&&this.destroy(),"touchend"===e.type&&this.image&&e.originalEvent&&e.originalEvent.target&&u(e.originalEvent.target).is("img")){var n=this;setTimeout(function(){n.image.edit(u(e.originalEvent.target))},100)}this.ready=!0,this.events.trigger("initialized")}}}.bind(this)),this.events.trigger("initializationDelayed")):(this.load(b.MODULES),this.load(b.PLUGINS),u(this.o_win).scrollTop(this.c_scroll),"undefined"==typeof this.ul&&this.destroy(),this.ready=!0,this.events.trigger("initialized"))}return b.Bootstrap=function(e,t,n){this.id=++b.ID,this.$=u;var r={};"function"==typeof t&&(n=t,t={}),n&&(t.events||(t.events={}),t.events.initialized=n),t&&t.documentReady&&(r.toolbarButtons=[["fullscreen","undo","redo","getPDF","print"],["bold","italic","underline","textColor","backgroundColor","clearFormatting"],["alignLeft","alignCenter","alignRight","alignJustify"],["formatO
679L","formatUL","indent","outdent"],["paragraphFormat"],["fontFamily"],["fontSize"],["insertLink","insertImage","quote"]],r.paragraphFormatSelection=!0,r.fontFamilySelection=!0,r.fontSizeSelection=!0,r.placeholderText="",r.quickInsertEnabled=!1,r.charCounterCount=!1),this.opts=Object.assign({},Object.assign({},b.DEFAULTS,r,"object"===M(t)&&t));var o=JSON.stringify(this.opts);b.OPTS_MAPPING[o]=b.OPTS_MAPPING[o]||this.id,this.sid=b.OPTS_MAPPING[o],b.SHARED[this.sid]=b.SHARED[this.sid]||{},this.shared=b.SHARED[this.sid],this.shared.count=(this.shared.count||0)+1,this.$oel=u(e),this.$oel.data("froala.editor",this),this.o_doc=e.ownerDocument,this.o_win="defaultView"in this.o_doc?this.o_doc.defaultView:this.o_doc.parentWindow,this.c_scroll=u(this.o_win).scrollTop(),this._init()},b.Bootstrap.prototype._init=function(){var e=this.$oel.get(0).tagName;this.$oel.closest("label").length;var t=function(){"TEXTAREA"!==e&&(this._original_html=this._original_html||this.$oel.html()),this.$box=this.$box||this.$oel,this.opts.fullPage&&(this.opts.iframe=!0),this.opts.iframe?(this.$iframe=u('<iframe src="about:blank" frameBorder="0">'),this.$wp=u("<div></div>"),this.$box.html(this.$wp),this.$wp.append(this.$iframe),this.$iframe.get(0).contentWindow.document.open(),this.$iframe.get(0).contentWindow.document.write("<!DOCTYPE html>"),this.$iframe.get(0).contentWindow.document.write("<html><head></head><body></body></html>"),this.$iframe.get(0).contentWindow.document.close(),this.iframe_document=this.$iframe.get(0).contentWindow.document,this.$el=u(this.iframe_document.querySelector("body")),this.el=this.$el.get(0),this.$head=u(this.iframe_document.querySelector("head")),this.$html=u(this.iframe_document.querySelector("html"))):(this.$el=u(this.o_doc.createElement("DIV")),this.el=this.$el.get(0),this.$wp=u(this.o_doc.createElement("DIV")).append(this.$el),this.$box.html(this.$wp)),setTimeout(L.bind(this),0)}.bind(this),n=function(){this.$box=u("<div>"),this.$oel.before(this.$box).hide(),this._original_html=this.$oel.val();var e=this;this.$oel.parents("form").on("submit.".concat(this.id),function(){e.events.trigger("form.submit")}),this.$oel.parents("form").on("reset.".concat(this.id),function(){e.events.trigger("form.reset")}),t()}.bind(this),r=function(){this.$el=this.$oel,this.el=this.$el.get(0),this.$el.attr("contenteditable",!0).css("outline","none").css("display","inline-block"),this.opts.multiLine=!1,this.opts.toolbarInline=!1,setTimeout(L.bind(this),0)}.bind(this),o=function(){this.$el=this.$oel,this.el=this.$el.get(0),this.opts.toolbarInline=!1,setTimeout(L.bind(this),0)}.bind(this),i=function(){this.$el=this.$oel,this.el=this.$el.get(0),this.opts.toolbarInline=!1,this.$oel.on("click.popup",function(e){e.preventDefault()}),setTimeout(L.bind(this),0)}.bind(this);this.opts.editInPopup?i():"TEXTAREA"===e?n():"A"===e?r():"IMG"===e?o():"BUTTON"===e||"INPUT"===e?(this.opts.editInPopup=!0,this.opts.toolbarInline=!1,i()):t()},b.Bootstrap.prototype.load=function(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)){if(this[t])continue;if(b.PLUGINS[t]&&this.opts.pluginsEnabled.indexOf(t)<0)continue;if(this[t]=new e[t](this),this[t]._init&&(this[t]._init(),this.opts.initOnClick&&"core"===t))return!1}},b.Bootstrap.prototype.destroy=function(){this.destrying=!0,this.shared.count--,this.events&&this.events.$off();var e=this.html&&this.html.get();if(this.opts.iframe&&(this.events.disableBlur(),this.win.focus(),this.events.enableBlur()),this.events&&(this.events.trigger("destroy",[],!0),this.events.trigger("shared.destroy",[],!0)),0===this.shared.count){for(var t in this.shared)Object.prototype.hasOwnProperty.call(this.shared,t)&&(this.shared[t]=null,b.SHARED[this.sid][t]=null);delete b.SHARED[this.sid]}this.$oel.parents("form").off(".".concat(this.id)),this.$oel.off("click.popup"),this.$oel.removeData("froala.editor"),this.$oel.off("froalaEditor"),this.core&&this.core.destroy(e),b.INSTANCES.splice(b.INSTANCES.indexOf(this),1)},V}); 680},{}],9:[function(require,module,exports){ 681/*! 682 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 683 * License https://froala.com/wysiwyg-editor/terms/ 684 * Copyright 2014-2023 Froala Labs 685 */ 686 687!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(n.FroalaEditor)}(this,function(i){"use strict";(i=i&&i.hasOwnProperty("default")?i["default"]:i).PLUGINS.align=function(a){var l=a.$;
vendor: 4,146 bytes, lines 687-695
687return{apply:function r(n){var t=a.selection.element();if(l(t).parents(".fr-img-caption").length)l(t).css("text-align",n);else{a.selection.save(),a.html.wrap(!0,!0,!0,!0),a.selection.restore();for(var e=a.selection.blocks(),i=0;i<e.length;i++)l(e[i]).css("text-align",n).removeClass("fr-temp-div"),""===l(e[i]).attr("class")&&l(e[i]).removeAttr("class"),""===l(e[i]).attr("style")&&l(e[i]).removeAttr("style");a.selection.save(),a.html.unwrap(),a.selection.restore()}},refresh:function i(n){var t=a.selection.blocks();if(t.length){var e=a.helpers.getAlignment(l(t[0]));n.find("> *").first().replaceWith(a.icon.create("align-".concat(e)))}},refreshOnShow:function o(n,t){var e=a.selection.blocks();if(e.length){var i=a.helpers.getAlignment(l(e[0]));t.find('a.fr-command[data-param1="'.concat(i,'"]')).addClass("fr-active").attr("aria-selected",!0)}},refreshForToolbar:function s(n){var t=a.selection.blocks();if(t.length){var e=a.helpers.getAlignment(l(t[0]));e=e.charAt(0).toUpperCase()+e.slice(1),"align".concat(e)===n.attr("data-cmd")&&n.addClass("fr-active")}}}},i.DefineIcon("align",{NAME:"align-left",SVG_KEY:"alignLeft"}),i.DefineIcon("align-left",{NAME:"align-left",SVG_KEY:"alignLeft"}),i.DefineIcon("align-right",{NAME:"align-right",SVG_KEY:"alignRight"}),i.DefineIcon("align-center",{NAME:"align-center",SVG_KEY:"alignCenter"}),i.DefineIcon("align-justify",{NAME:"align-justify",SVG_KEY:"alignJustify"}),i.RegisterCommand("align",{type:"dropdown",title:"Align",options:{left:"Align Left",center:"Align Center",right:"Align Right",justify:"Align Justify"},html:function(){var n='<ul class="fr-dropdown-list" role="presentation">',t=i.COMMANDS.align.options;for(var e in t)t.hasOwnProperty(e)&&(n+='<li role="presentation"><a class="fr-command fr-title" tabIndex="-1" role="option" data-cmd="align"data-param1="\n '.concat(e,'" title="').concat(this.language.translate(t[e]),'">').concat(this.icon.create("align-".concat(e)),'<span class="fr-sr-only">\n ').concat(this.language.translate(t[e]),"</span></a></li>"));return n+="</ul>"},callback:function(n,t){this.align.apply(t)},refresh:function(n){this.align.refresh(n)},refreshOnShow:function(n,t){this.align.refreshOnShow(n,t)},plugin:"align"}),i.RegisterCommand("alignLeft",{type:"button",icon:"align-left",title:"Align Left",callback:function(){this.align.apply("left")},refresh:function(n){this.align.refreshForToolbar(n)},plugin:"align"}),i.RegisterCommand("alignRight",{type:"button",icon:"align-right",title:"Align Right",callback:function(){this.align.apply("right")},refresh:function(n){this.align.refreshForToolbar(n)},plugin:"align"}),i.RegisterCommand("alignCenter",{type:"button",icon:"align-center",title:"Align Center",callback:function(){this.align.apply("center")},refresh:function(n){this.align.refreshForToolbar(n)},plugin:"align"}),i.RegisterCommand("alignJustify",{type:"button",icon:"align-justify",title:"Align Justify",callback:function(){this.align.apply("justify")},refresh:function(n){this.align.refreshForToolbar(n)},plugin:"align"})}); 688},{"froala-editor":8}],10:[function(require,module,exports){ 689/*! 690 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 691 * License https://froala.com/wysiwyg-editor/terms/ 692 * Copyright 2014-2023 Froala Labs 693 */ 694 695!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],e):e(t.FroalaEditor)}(this,function(t){"use strict";(t=t&&t.hasOwnProperty("default")?t["default"]:t).PLUGINS.codeBeautifier=function(){var t,e,n,i,Q={};function y(i,t){var e={"@page":!0,"@font-face":!0,"@keyframes":!0,"@media":!0,"@supports":!0,"@document":!0},n={"@media":!0,"@supports":!0,"@document":!0};t=t||{},i=(i=i||"").replace(/\r\n|[\r\u2028\u2029]/g,"\n");var r=t.indent_size||4,s=t.indent_char||" ",a=t.selector_separator_newline===undefined||t.selector_separator_newline,_=t.end_with_newline!==undefined&&t.end_with_newline,o=t.newline_between_rules===undefined||t.newline_between_rules,c=t.eol?t.eol:"\n";"string"==typeof r&&(r=parseInt(r,10)),t.indent_with_tabs&&(s="\t",r=1),c=c.replace(/\\r/,"\r").replace(/\\n
vendor: 5,222 bytes, line 695
695/,"\n");var l,h=/^\s+$/,u=-1,p=0;function d(){return(l=i.charAt(++u))||""}function f(t){var e,n=u;return t&&E(),e=i.charAt(u+1)||"",u=n-1,d(),e}function T(t){for(var e=u;d();)if("\\"===l)d();else{if(-1!==t.indexOf(l))break;if("\n"===l)break}return i.substring(e,u+1)}function E(){for(var t="";h.test(f());)d(),t+=l;return t}function g(){var t="";for(l&&h.test(l)&&(t=l);h.test(d());)t+=l;return t}function x(t){var e=u;for(t="/"===f(),d();d();){if(!t&&"*"===l&&"/"===f()){d();break}if(t&&"\n"===l)return i.substring(e,u)}return i.substring(e,u)+l}function w(t){return i.substring(u-t.length,u).toLowerCase()===t}function K(){for(var t=0,e=u+1;e<i.length;e++){var n=i.charAt(e);if("{"===n)return!0;if("("===n)t+=1;else if(")"===n){if(0===t)return!1;t-=1}else if(" "===n||"}"===n)return!1}return!1}var R=i.match(/^[\t ]*/)[0],m=new Array(r+1).join(s),b=0,v=0;for(var S,A,k,y={"{":function(t){y.singleSpace(),O.push(t),y.newLine()},"}":function(t){y.newLine(),O.push(t),y.newLine()},_lastCharWhitespace:function(){return h.test(O[O.length-1])},newLine:function(t){O.length&&(t||"\n"===O[O.length-1]||y.trim(),O.push("\n"),R&&O.push(R))},singleSpace:function(){O.length&&!y._lastCharWhitespace()&&O.push(" ")},preserveSingleSpace:function(){S&&y.singleSpace()},trim:function(){for(;y._lastCharWhitespace();)O.pop()}},O=[],N=!1,D=!1,C=!1,L="",I="";;){var V=g();S=""!==V;var P=-1!==V.indexOf("\n");if(I=L,!(L=l))break;if("/"===l&&"*"===f()){var B=0===b;(P||B)&&y.newLine(),O.push(x()),y.newLine(),B&&y.newLine(!0)}else if("/"===l&&"/"===f())P||"{"===I||y.trim(),y.singleSpace(),O.push(x()),y.newLine();else if("@"===l){y.preserveSingleSpace(),O.push(l);var j=(void 0,A=u,k=T(": , {}()[]/='\""),u=A-1,d(),k);j.match(/[ :]$/)&&(d(),j=T(": ").replace(/\s$/,""),O.push(j),y.singleSpace()),(j=j.replace(/\s$/,""))in e&&(v+=1,j in n&&(C=!0))}else"#"===l&&"{"===f()?(y.preserveSingleSpace(),O.push(T("}"))):"{"===l?"}"===f(!0)?(E(),d(),y.singleSpace(),O.push("{}"),y.newLine(),o&&0===b&&y.newLine(!0)):(b++,R+=m,y["{"](l),N=C?(C=!1,v<b):v<=b):"}"===l?(b--,R=R.slice(0,-r),y["}"](l),D=N=!1,v&&v--,o&&0===b&&y.newLine(!0)):":"===l?(E(),!N&&!C||w("&")||K()?":"===f()?(d(),O.push("::")):O.push(":"):(D=!0,O.push(":"),y.singleSpace())):'"'===l||"'"===l?(y.preserveSingleSpace(),O.push(T(l))):" "===l?(D=!1,O.push(l),y.newLine()):"("===l?w("url")?(O.push(l),E(),d()&&(")"!==l&&'"'!==l&&"'"!==l?O.push(T(")")):u--)):(p++,y.preserveSingleSpace(),O.push(l),E()):")"===l?(O.push(l),p--):","===l?(O.push(l),E(),a&&!D&&p<1?y.newLine():y.singleSpace()):("]"===l||("["===l?y.preserveSingleSpace():"="===l?(E(),l="="):y.preserveSingleSpace()),O.push(l))}var M="";return R&&(M+=R),M+=O.join("").replace(/[\r\n\t ]+$/,""),_&&(M+="\n"),"\n"!=c&&(M=M.replace(/[\n]/g,c)),M}function Y(t,e){for(var n=0;n<e.length;n+=1)if(e[n]===t)return!0;return!1}function H(t){return t.replace(/^\s+|\s+$/g,"")}function O(t,e){return new r(t,e).beautify()}t=Q,e="\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u
69519c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",n=new RegExp("[".concat(e,"]")),i=new RegExp("[".concat(e," ").concat("\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u0620-\u0649\u0672-\u06d3\u06e7-\u06e8\u06fb-\u06fc\u0730-\u074a\u0800-\u0814\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0840-\u0857\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962-\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09d7\u09df-\u09e0\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2-\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5f-\u0b60\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62-\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2-\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d46-\u0d48\u0d57\u0d62-\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e34-\u0e3a\u0e40-\u0e45\u0e50-\u0e59\u0eb4-\u0eb9\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f41-\u0f47\u0f71-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1029\u1040-\u1049\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u170e-\u1710\u1720-\u1730\u1740-\u1750\u1772\u1773\u1780-\u17b2\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1920-\u192b\u1930-\u193b\u1951-\u196d\u19b0-\u19c0\u19c8-\u19c9\u19d0-\u19d9\u1a00-\u1a15\u1a20-\u1a53\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b46-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1bb0-\u1bb9\u1be6-\u1bf3\u1c00-\u1c22\u1c40-\u1c49\u1c5b-\u1c7d\u1cd0-\u1cd2\u1d00-\u1dbe\u1e01-\u1f15\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2d81-\u2d96\u2de0-\u2dff\u3021-\u3028\u3099\u309a\ua640-\ua66d\ua674-\ua67d\ua69f\ua6f0-\ua6f1\ua7f8-\ua800\ua806\ua80b\ua823-\ua827\ua880-\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8f3-\ua8f7\ua900-\ua909\ua926-\ua92d\ua930-\ua945\ua980-\ua983\ua9b3-\ua9c0\uaa00-\uaa27\uaa40-\uaa41\uaa4c-\uaa4d\uaa50-\uaa59\uaa7b\uaae0-\uaae9\uaaf2-\uaaf3\uabc0-\uabe1\uabec\uabed\uabf0-\uabf9\ufb20-\ufb28\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f","]")),t.newline=/[\n\r\u2028\u2029]/,t.lineBreak=new RegExp("\r\n|".concat(t.newline.source)),t.allLineBreaks=new RegExp(t.lineBreak.source,"g"),t.isIdentifierStart=function(t){return t<65?36===t||64===t:t<91||(t<97?95===t:t<123||170<=t&&n.test(String.fromCharCode(t)))},t.isIdentifierChar=function(t){return t<48?36===t:t<58||!(t<65)&&(t<91||(t<97?95===t:t<123||170<=t&&i.test(String.fromCharCode(t))))};var Z={BlockStatement:"BlockStatement",Statement:"Statement",ObjectLiteral
vendor: 12,651 bytes, line 695
695:"ObjectLiteral",ArrayLiteral:"ArrayLiteral",ForInitializer:"ForInitializer",Conditional:"Conditional",Expression:"Expression"};function r(i,t){var c,r,s,l,a,_,o,h,u,e,n,p,d,f=[],T="";function E(t,e){var n=0;return t&&(n=t.indentation_level,!c.just_added_newline()&&t.line_indent_level>n&&(n=t.line_indent_level)),{mode:e,parent:t,last_text:t?t.last_text:"",last_word:t?t.last_word:"",declaration_statement:!1,declaration_assignment:!1,multiline_frame:!1,if_block:!1,else_block:!1,do_block:!1,do_while:!1,in_case_statement:!1,in_case:!1,case_body:!1,indentation_level:n,line_indent_level:t?t.line_indent_level:n,start_line_index:c.get_line_number(),ternary_depth:0}}for(p={TK_START_EXPR:function L(){O();var t=Z.Expression;if("["===l.text){if("TK_WORD"===a||")"===h.last_text)return"TK_RESERVED"===a&&Y(h.last_text,s.line_starters)&&(c.space_before_token=!0),v(t),m(),b(),void(d.space_in_paren&&(c.space_before_token=!0));t=Z.ArrayLiteral,S(h.mode)&&("["!==h.last_text&&(","!==h.last_text||"]"!==_&&"}"!==_)||d.keep_array_indentation||K())}else"TK_RESERVED"===a&&"for"===h.last_text?t=Z.ForInitializer:"TK_RESERVED"===a&&Y(h.last_text,["if","while"])&&(t=Z.Conditional);" "===h.last_text||"TK_START_BLOCK"===a?K():"TK_END_EXPR"===a||"TK_START_EXPR"===a||"TK_END_BLOCK"===a||"."===h.last_text?w(l.wanted_newline):"TK_RESERVED"===a&&"("===l.text||"TK_WORD"===a||"TK_OPERATOR"===a?"TK_RESERVED"===a&&("function"===h.last_word||"typeof"===h.last_word)||"*"===h.last_text&&"function"===_?d.space_after_anon_function&&(c.space_before_token=!0):"TK_RESERVED"!==a||!Y(h.last_text,s.line_starters)&&"catch"!==h.last_text||d.space_before_conditional&&(c.space_before_token=!0):c.space_before_token=!0;"("===l.text&&"TK_RESERVED"===a&&"await"===h.last_word&&(c.space_before_token=!0);"("===l.text&&("TK_EQUALS"!==a&&"TK_OPERATOR"!==a||y()||w());v(t),m(),d.space_in_paren&&(c.space_before_token=!0);b()},TK_END_EXPR:function I(){for(;h.mode===Z.Statement;)k();h.multiline_frame&&w("]"===l.text&&S(h.mode)&&!d.keep_array_indentation);d.space_in_paren&&("TK_START_EXPR"!==a||d.space_in_empty_paren?c.space_before_token=!0:(c.trim(),c.space_before_token=!1));"]"===l.text&&d.keep_array_indentation?(m(),k()):(k(),m());c.remove_redundant_indentation(u),h.do_while&&u.mode===Z.Conditional&&(u.mode=Z.Expression,h.do_block=!1,h.do_while=!1)},TK_START_BLOCK:function V(){var t=D(1),e=D(2);e&&(":"===e.text&&Y(t.type,["TK_STRING","TK_WORD","TK_RESERVED"])||Y(t.text,["get","set"])&&Y(e.type,["TK_WORD","TK_RESERVED"]))?Y(_,["class","interface"])?v(Z.BlockStatement):v(Z.ObjectLiteral):v(Z.BlockStatement);var n=!t.comments_before.length&&"}"===t.text&&"function"===h.last_word&&"TK_END_EXPR"===a;"expand"===d.brace_style||"none"===d.brace_style&&l.wanted_newline?"TK_OPERATOR"!==a&&(n||"TK_EQUALS"===a||"TK_RESERVED"===a&&N(h.last_text)&&"else"!==h.last_text)?c.space_before_token=!0:K(!1,!0):"TK_OPERATOR"!==a&&"TK_START_EXPR"!==a?"TK_START_BLOCK"===a?K():c.space_before_token=!0:S(u.mode)&&","===h.last_text&&("}"===_?c.space_before_token=!0:K());m(),b()},TK_END_BLOCK:function P(){for(;h.mode===Z.Statement;)k();var t="TK_START_BLOCK"===a;"expand"===d.brace_style?t||K():t||(S(h.mode)&&d.keep_array_indentation?(d.keep_array_indentation=!1,K(),d.keep_array_indentation=!0):K());k(),m()},TK_WORD:C,TK_RESERVED:C,TK_SEMICOLON:function B(){O()&&(c.space_before_token=!1);for(;h.mode===Z.Statement&&!h.if_block&&!h.do_block;)k();m()},TK_STRING:function j(){O()?c.space_before_token=!0:"TK_RESERVED"===a||"TK_WORD"===a?c.space_before_token=!0:"TK_COMMA"===a||"TK_START_EXPR"===a||"TK_EQUALS"===a||"TK_OPERATOR"===a?y()||w():K();m()},TK_EQUALS:function M(){O();h.declaration_statement&&(h.declaration_assignment=!0);c.space_before_token=!0,m(),c.space_before_token=!0},TK_OPERATOR:function U(){O();if("TK_RESERVED"===a&&N(h.last_text))return c.space_before_token=!0,void m();if("*"===l.text&&"TK_DOT"===a)return void m();if(":"===l.text&&h.in_case)return h.case_body=!0,b(),m(),K(),void(h.in_case=!1);if("::"===l.text)return void m();"TK_OPERATOR"===a&&w();var t=!0,e=!0;Y(l.text,["--","++","!","~"])||Y(l.text,["-","+"])&&(Y(a,["TK_START_BLOCK","TK_START_EXPR","TK_EQUALS","TK_OPERATOR"])||Y(h.last_text,s.line_starters)||","===h.last_text)?(e=t=!1,!l.wanted_newline||"--"!==l.text&&"++"!==l.text||K(!1,!0)," "===h.last_text&&A(h.mode)&&(t=!0),"TK_RESERVED"===a?t=!0:"TK_END_EXPR"===a?t=!("]"===h.last_text&&("--"===l.text||"++"===l.text)):"TK_OPERATOR"===a&&(t=Y(l.text,["--","-","++","+"])&&Y(h.last_text,["--","-","++","+"]),Y(l.text,["+","-"])&&Y(h.last_text,["--","++"])&&(e=!0)),h.mode!==Z.BlockStatement&&h.mode!==Z.Statement||"{"!==h.last_text&&" "!==h.last_text||K()):":"===l.text?0===h.ternary_depth?t=!1:h.ternary_depth-=1:"?"===l.text?h.ternary_depth+=1:"*"===l.text&&"TK_RESERVED"===a&&"function"===h.last_text&&(e=t=!1);c.space_before_token=c.space_before_token||t,m(),c.space_before_token=e},TK_COMMA:function W(){if(h.declaration_statement)return A(h.parent.mode)&&(h.declaration_assignment=!1),m(),void(h.declaration_assignment?K(h.declaration_assignment=!1,!0):(c.space_before_token=!0,d.comma_first&&w()));m(),h.mode===Z.ObjectLiteral||h.mode===Z.Statement&&h.parent.mode===Z.ObjectLiteral?(h.mode===Z.Statement&&k(),K()):(c.space_before_token=!0,d.comma_first&&w())},TK_BLOCK_COMMENT:function z(){if(c.raw)return c.add_raw_token(l),void(l.directives&&"end"===l.directives.preserve&&(d.test_output_raw||(c.raw=!1)));if(l.directives)return K(!1,!0),m(),"start"===l.directives.preserve&&(c.raw=!0),void K(!1,!0);if(!Q.newline.test(l.text)&&!l.wanted_newline)return c.space_before_token=!0,m(),void(c.space_before_token=!0);var t,e=function a(t){var e;t=t.replace(/\x0d/g,"");var n=[];e=t.indexOf("\n");for(;-1!==e;)n.push(t.substring(0,e)),t=t.substring(e+1),e=t.indexOf("\n");t.length&&n.push(t);return n}(l.text),n=!1,i=!1,r=l.whitespace_before,s=r.length;K(!1,!0),1<e.length&&(!function _(t,e){for(var n=0;n<t.length;n++){var i=H(t[n]);if(i.charAt(0)!==e)return!1}return!0}(e.slice(1),"*")?function o(t,e){for(var n,i=0,r=t.length;i<r;i++)if((n=t[i])&&0!==n.indexOf(e))return!1;return!0}(e.slice(1),r)&&(i=!0):n=!0);for(m(e[0]),t=1;t<e.length;t++)K(!1,!0),n?m(" ".concat(e[t].replace(/^\s+/g,""))):i&&e[t].length>s?m(e[t].substring(s)):c.add_token(e[t]);K(!1,!0)},TK_COMMENT:function G(){l.wanted_newline?K(!1,!0):c.trim(!0);c.space_before_token=!0,m(),K(!1,!0)},TK_DOT:function X(){O();"TK_RESERVED"===a&&N(h.last_text)?c.space_before_token=!0:w(")"===h.last_text&&d.break_chained_methods);m()},TK_UNKNOWN:function F(){m(),"\n"===l.text[l.text.length-1]&&K()},TK_EOF:function $(){for(;h.mode===Z.Statement;)k()}},d={},(t=t||{}).braces_on_own_line!==undefined&&(d.brace_style=t.braces_on_own_line?"expand":"collapse"),d.brace_style=t.brace_style?t.brace_style:d.brace_style?d.brace_style:"collapse","expand-strict"===d.brace_style&&(d.brace_style="expand"),d.indent_size=t.indent_size?parseInt(t.indent_size,10):4,d.indent_char=t.indent_char?t.indent_char:" ",d.eol=t.eol?t.eol:"\n",d.preserve_newlines=t.preserve_newlines===undefined||t.preserve_newlines,d.break_chained_methods=t.break_chained_methods!==undefined&&t.break_chained_methods,d.max_preserve_newlines=t.max_preserve_newlines===undefined?0:parseInt(t.max_preserve_newlines,10),d.space_in_paren=t.space_in_paren!==undefined&&t.space_in_paren,d.space_in_empty_paren=t.space_in_empty_paren!==undefined&&t.space_in_empty_paren,d.jslint_happy=t.jslint_happy!==undefined&&t.jslint_happy,d.space_after_anon_function=t.space_after_anon_function!==undefined&&t.space_after_anon_function,d.keep_array_indentation=t.keep_array_indentation!==undefined&&t.keep_array_indentation,d.space_before_conditional=t.space_before_conditional===undefined||t.space_before_conditional,d.unescape_strings=t.unescape_strings!==undefined&&t.unescape_strings,d.wrap_line_length=t.wrap_line_length===undefined?0:parseInt(t.wrap_line_length,10),d.e4x=t.e4x!==undefined&&t.e4x,d.end_with_newline=t.end_with_newline!==undefined&&t.end_with_newline,d.comma_first=t.comma_first!==undefined&&t.comma_first,d.test_output_raw=t.test_output_raw!==undefined&&t.test_output_raw,d.jslint_happy&&(d.space_after_anon_function=!0),t.indent_with_tabs&&(d.indent_char="\t",d.indent_size=1),d.eol=d.eol.replace(/\\r/,"\r").replace(/\\n/,"\n"),o="";0<d.indent_size;)o+=d.indent_char,d.indent_size-=1;var g=0;if(i&&i.length){for(;" "===i.charAt(g)||"\t"===i.charAt(g);)T+=i.charAt(g),g+=1;i=i.substring(g)}function x(t){var e=t.newlines;if(d.keep_array_indentation&&S(h.mode))for(var n=0;n<e;n+=1)K(0<n);else if(d.max_preserve_newlines&&e>d.max_preserve_newlines&&(e=d.max_preserve_newlines),d.preserve_newlines&&1<t.newlines){K();for(var i=1;i<e;i+=1)K(!0)}p[(l=t).type]()}function w(t){if(t=t!==undefined&&t,!c.just_added_newline())if(d.preserve_newlines&&l.wanted_newline||t)K(!1,!0);else if(d.wrap_line_length){c.current_line.get_character_count()+l.text.length+(c.space_before_token?1:0)>=d.wrap_line_length&&K(!1,!0)}}function K(t,e){if(!e&&" "!==h.last_text&&","!==h.last_text&&"="!==h.last_text&&"TK_OPERATOR"!==a)for(;h.mode===Z.Statement&&!h.if_block&&!h.do_block;)k();c.add_new_line(t)&&(h.multiline_frame=!0)}function R(){c.just_added_newline()&&(d.keep_array_indentation&&S(h.mode)&&l.wanted_newline?(c.current_line.push(l.whitespace_before),c.space_before_token=!1):c.set_indent(h.indentation_level)&&(h.line_indent_level=h.indentation_level))}function m(t){c.raw?c.add_raw_token(l):(d.comma_first&&"TK_COMMA"===a&&c.just_added_newline()&&","===c.previous_line.last()&&(c.previous_line.pop(),R(),c.add_token(","),c.space_before_token=!0),t=t||l.text,R(),c.add_token(t))}function b(){h.indentation_level+=1}function v(t){u=h?(e.push(h),h):E(null,t),h=E(u,t)}function S(t){return t===Z.ArrayLiteral}function A(t){return Y(t,[Z.Expression,Z.ForInitializer,Z.Conditional])}function k(){0<e.length&&(u=h,h=e.pop(),u.mode===Z.Statement&&c.remove_redundant_indentation(u))}function y(){return h.parent.mode===Z.ObjectLiteral&&h.mode===Z.Statement&&(":"===h.last_text&&0===h.ternary_depth||"TK_RESERVED"===a&&Y(h.last_text,["get","set"]))}function O(){return!!("TK_RESERVED"===a&&Y(h.last_text,["const","let","const"])&&"TK_WORD"===l.type||"TK_RESERVED"===a&&"do"===h.last_text||"TK_RESERVED"===a&&"return"===h.last_text&&!l.wanted_newline||"TK_RESERVED"===a&&"else"===h.last_text&&("TK_RESERVED"!==l.type||"if"!==l.text)||"TK_END_EXPR"===a&&(u.mode===Z.ForInitializer||u.mode===Z.Conditional)||"TK_WORD"===a&&h.mode===Z.BlockStatement&&!h.in_case&&"--"!==l.text&&"++"!==l.text&&"function"!==_&&"TK_WORD"!==l.type&&"TK_RESERVED"!==l.type||h.mode===Z.ObjectLiteral&&(":"===h.last_text&&0===h.ternary_depth||"TK_RESERVED"===a&&Y(h.last_text,["get","set"])))&&(v(Z.Statement),b(),"TK_RESERVED"===a&&Y(h.last_text,["const","let","const"])&&"TK_WORD"===l.type&&(h.declaration_statement=!0),y()||w("TK_RESERVED"===l.type&&Y(l.text,["do","for","if","while"])),!0)}function N(t){return Y(t,["case","return","do","if","throw","else"])}function D(t){var e=r+(t||0);return e<0||e>=f.length?null:f[e]}function C(){("TK_RESERVED"===l.type&&h.mode!==Z.ObjectLiteral&&Y(l.text,["set","get"])&&(l.type="TK_WORD"),"TK_RESERVED"===l.type&&h.mode===Z.ObjectLiteral)&&(":"===D(1).text&&(l.type="TK_WORD"));if(O()||!l.wanted_newline||A(h.mode)||"TK_OPERATOR"===a&&"--"!==h.last_text&&"++"!==h.last_text||"TK_EQUALS"===a||!d.preserve_newlines&&"TK_RESERVED"===a&&Y(h.last_text,["const","let","const","set","get"])||K(),h.do_block&&!h.do_while){if("TK_RESERVED"===l.type&&"while"===l.text)return c.space_before_token=!0,m(),c.space_before_token=!0,void(h.do_while=!0);K(),h.do_block=!1}if(h.if_block)if(h.else_block||"TK_RESERVED"!==l.type||"else"!==l.text){for(;h.mode===Z.Statement;)k();h.if_block=!1,h.else_block=!1}else h.else_block=!0;if("TK_RESERVED"===l.type&&("case"===l.text||"default"===l.text&&h.in_case_statement))return K(),(h.case_body||d.jslint_happy)&&(!function t(){0<h.indentation_level&&(!h.parent||h.indentation_level>h.parent.indentation_level)&&(h.indentation_level-=1)}(),h.case_body=!1),m(),h.in_case=!0,void(h.in_case_statement=!0);if("TK_RESERVED"===l.type&&"function"===l.text&&((Y(h.last_text,["}"," "])||c.just_added_newline()&&!Y(h.last_text,["[","{",":","=",","]))&&(c.just_added_blankline()||l.comments_before.length||(K(),K(!0))),"TK_RESERVED"===a||"TK_WORD"===a?"TK_RESERVED"===a&&Y(h.last_text,["get","set","new","return","export","async"])?c.space_before_token=!0:"TK_RESERVED"===a&&"default"===h.last_text&&"export"===_?c.space_before_token=!0:K():"TK_OPERATOR"===a||"="===h.last_text?c.space_before_token=!0:(h.multiline_frame||!A(h.mode)&&!S(h.mode))&&K()),"TK_COMMA"!==a&&"TK_START_EXPR"!==a&&"TK_EQUALS"!==a&&"TK_OPE
695RATOR"!==a||y()||w(),"TK_RESERVED"===l.type&&Y(l.text,["function","get","set"]))return m(),void(h.last_word=l.text);(n="NONE","TK_END_BLOCK"===a?"TK_RESERVED"===l.type&&Y(l.text,["else","catch","finally"])?"expand"===d.brace_style||"end-expand"===d.brace_style||"none"===d.brace_style&&l.wanted_newline?n="NEWLINE":(n="SPACE",c.space_before_token=!0):n="NEWLINE":"TK_SEMICOLON"===a&&h.mode===Z.BlockStatement?n="NEWLINE":"TK_SEMICOLON"===a&&A(h.mode)?n="SPACE":"TK_STRING"===a?n="NEWLINE":"TK_RESERVED"===a||"TK_WORD"===a||"*"===h.last_text&&"function"===_?n="SPACE":"TK_START_BLOCK"===a?n="NEWLINE":"TK_END_EXPR"===a&&(c.space_before_token=!0,n="NEWLINE"),"TK_RESERVED"===l.type&&Y(l.text,s.line_starters)&&")"!==h.last_text&&(n="else"===h.last_text||"export"===h.last_text?"SPACE":"NEWLINE"),"TK_RESERVED"===l.type&&Y(l.text,["else","catch","finally"]))?"TK_END_BLOCK"!==a||"expand"===d.brace_style||"end-expand"===d.brace_style||"none"===d.brace_style&&l.wanted_newline?K():(c.trim(!0),"}"!==c.current_line.last()&&K(),c.space_before_token=!0):"NEWLINE"===n?"TK_RESERVED"===a&&N(h.last_text)?c.space_before_token=!0:"TK_END_EXPR"!==a?"TK_START_EXPR"===a&&"TK_RESERVED"===l.type&&Y(l.text,["const","let","const"])||":"===h.last_text||("TK_RESERVED"===l.type&&"if"===l.text&&"else"===h.last_text?c.space_before_token=!0:K()):"TK_RESERVED"===l.type&&Y(l.text,s.line_starters)&&")"!==h.last_text&&K():h.multiline_frame&&S(h.mode)&&","===h.last_text&&"}"===_?K():"SPACE"===n&&(c.space_before_token=!0);m(),h.last_word=l.text,"TK_RESERVED"===l.type&&"do"===l.text&&(h.do_block=!0),"TK_RESERVED"===l.type&&"if"===l.text&&(h.if_block=!0)}a="TK_START_BLOCK",_="",(c=new q(o,T)).raw=d.test_output_raw,e=[],v(Z.BlockStatement),this.beautify=function(){var t,e;for(s=new tt(i,d,o),f=s.tokenize(),r=0;t=D();){for(var n=0;n<t.comments_before.length;n++)x(t.comments_before[n]);x(t),_=h.last_text,a=t.type,h.last_text=t.text,r+=1}return e=c.get_code(),d.end_with_newline&&(e+="\n"),"\n"!=d.eol&&(e=e.replace(/[\n]/g,d.eol)),e}}function s(e){var n=0,i=-1,r=[],s=!0;this.set_indent=function(t){n=e.baseIndentLength+t*e.indent_length,i=t},this.get_character_count=function(){return n},this.is_empty=function(){return s},this.last=function(){return this._empty?null:r[r.length-1]},this.push=function(t){r.push(t),n+=t.length,s=!1},this.pop=function(){var t=null;return s||(t=r.pop(),n-=t.length,s=0===r.length),t},this.remove_indent=function(){0<i&&(i-=1,n-=e.indent_length)},this.trim=function(){for(;" "===this.last();)r.pop(),n-=1;s=0===r.length},this.toString=function(){var t="";return this._empty||(0<=i&&(t=e.indent_cache[i]),t+=r.join("")),t}}function q(e,n){n=n||"",this.indent_cache=[n],this.baseIndentLength=n.length,this.indent_length=e.length,this.raw=!1;var i=[];this.baseIndentString=n,this.indent_string=e,this.previous_line=null,this.current_line=null,this.space_before_token=!1,this.add_outputline=function(){this.previous_line=this.current_line,this.current_line=new s(this),i.push(this.current_line)},this.add_outputline(),this.get_line_number=function(){return i.length},this.add_new_line=function(t){return(1!==this.get_line_number()||!this.just_added_newline())&&(!(!t&&this.just_added_newline())&&(this.raw||this.add_outputline(),!0))},this.get_code=function(){return i.join("\n").replace(/[\r\n\t ]+$/,"")},this.set_indent=function(t){if(1<i.length){for(;t>=this.indent_cache.length;)this.indent_cache.push(this.indent_cache[this.indent_cache.length-1]+this.indent_string);return this.current_line.set_indent(t),!0}return this.current_line.set_indent(0),!1},this.add_raw_token=function(t){for(var e=0;e<t.newlines;e++)this.add_outputline();this.current_line.push(t.whitespace_before),this.current_line.push(t.text),this.space_before_token=!1},this.add_token=function(t){this.add_space_before_token(),this.current_line.push(t)},this.add_space_before_token=function(){this.space_before_token&&!this.just_added_newline()&&this.current_line.push(" "),this.space_before_token=!1},this.remove_redundant_indentation=function(t){if(!t.multiline_frame&&t.mode!==Z.ForInitializer&&t.mode!==Z.Conditional)for(var e=t.start_line_index,n=i.length;e<n;)i[e].remove_indent(),e++},this.trim=function(t){for(t=t!==undefined&&t,this.current_line.trim(e,n);t&&1<i.length&&this.current_line.is_empty();)i.pop(),this.current_line=i[i.length-1],this.current_line.trim();this.previous_line=1<i.length?i[i.length-2]:null},this.just_added_newline=function(){return this.current_line.is_empty()},this.just_added_blankline=function(){return!!this.just_added_newline()&&(1===i.length||i[i.length-2].is_empty())}}var J=function J(t,e,n,i,r,s){this.type=t,this.text=e,this.comments_before=[],this.newlines=n||0,this.wanted_newline=0<n,this.whitespace_before=i||"",this.parent=null,this.directives=null};function tt(k,y,t){var O="\n\r\t ".split(""),N=/[0-9]/,D=/[01234567]/,C=/[0123456789abcdefABCDEF]/,L="+ - * / % & ++ -- = += -= *= /= %= == === != !== > < >= <= >> << >>> >>>= >>= <<= && &= | || ! ~ , : ? ^ ^= |= :: =>".split(" ");
vendor: 5,111 bytes, line 695
695this.line_starters="continue,try,throw,return,const,let,const,if,switch,case,default,for,while,break,function,import,export".split(",");var I,V,P,B,j,M,U=this.line_starters.concat(["do","in","else","get","set","new","catch","finally","typeof","yield","async","await"]),W=/([\s\S]*?)((?:\*\/)|$)/g,z=/([^\n\r\u2028\u2029]*)/g,G=/\/\* beautify( \w+[:]\w+)+ \*\//g,X=/ (\w+)[:](\w+)/g,F=/([\s\S]*?)((?:\/\*\sbeautify\signore:end\s\*\/)|$)/g,$=/((<\?php|<\?=)[\s\S]*?\?>)|(<%[\s\S]*?%>)/g;function a(){var t,e,n=[];if(I=0,V="",M<=j)return["","TK_EOF"];e=B.length?B[B.length-1]:new J("TK_START_BLOCK","{");var i=k.charAt(j);for(j+=1;Y(i,O);){if(Q.newline.test(i)?"\n"===i&&"\r"===k.charAt(j-2)||(I+=1,n=[]):n.push(i),M<=j)return["","TK_EOF"];i=k.charAt(j),j+=1}if(n.length&&(V=n.join("")),N.test(i)){var r=!0,s=!0,a=N;for("0"===i&&j<M&&/[Xxo]/.test(k.charAt(j))?(s=r=!1,i+=k.charAt(j),j+=1,a=/[o]/.test(k.charAt(j))?D:C):(i="",j-=1);j<M&&a.test(k.charAt(j));)i+=k.charAt(j),j+=1,r&&j<M&&"."===k.charAt(j)&&(i+=k.charAt(j),j+=1,r=!1),s&&j<M&&/[Ee]/.test(k.charAt(j))&&(i+=k.charAt(j),(j+=1)<M&&/[+-]/.test(k.charAt(j))&&(i+=k.charAt(j),j+=1),r=s=!1);return[i,"TK_WORD"]}if(Q.isIdentifierStart(k.charCodeAt(j-1))){if(j<M)for(;Q.isIdentifierChar(k.charCodeAt(j))&&(i+=k.charAt(j),(j+=1)!==M););return"TK_DOT"===e.type||"TK_RESERVED"===e.type&&Y(e.text,["set","get"])||!Y(i,U)?[i,"TK_WORD"]:"in"===i?[i,"TK_OPERATOR"]:[i,"TK_RESERVED"]}if("("===i||"["===i)return[i,"TK_START_EXPR"];if(")"===i||"]"===i)return[i,"TK_END_EXPR"];if("{"===i)return[i,"TK_START_BLOCK"];if("}"===i)return[i,"TK_END_BLOCK"];if(" "===i)return[i,"TK_SEMICOLON"];if("/"===i){var _="";if("*"===k.charAt(j)){j+=1,W.lastIndex=j;var o=W.exec(k);_="/*".concat(o[0]),j+=o[0].length;var c=function S(t){if(!t.match(G))return null;var e={};X.lastIndex=0;for(var n=X.exec(t);n;)e[n[1]]=n[2],n=X.exec(t);return e}(_);return c&&"start"===c.ignore&&(F.lastIndex=j,_+=(o=F.exec(k))[0],j+=o[0].length),[_=_.replace(Q.lineBreak,"\n"),"TK_BLOCK_COMMENT",c]}if("/"===k.charAt(j)){j+=1,z.lastIndex=j;var l=z.exec(k);return _="//".concat(l[0]),j+=l[0].length,[_,"TK_COMMENT"]}}if("`"===i||"'"===i||'"'===i||("/"===i||y.e4x&&"<"===i&&k.slice(j-1).match(/^<([-a-zA-Z:0-9_.]+|{[^{}]*}|!\[CDATA\[[\s\S]*?\]\])(\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{.*?}))*\s*(\/?)\s*>/))&&("TK_RESERVED"===e.type&&Y(e.text,["return","case","throw","else","do","typeof","yield"])||"TK_END_EXPR"===e.type&&")"===e.text&&e.parent&&"TK_RESERVED"===e.parent.type&&Y(e.parent.text,["if","while","for"])||Y(e.type,["TK_COMMENT","TK_START_EXPR","TK_START_BLOCK","TK_END_BLOCK","TK_OPERATOR","TK_EQUALS","TK_EOF","TK_SEMICOLON","TK_COMMA"]))){var h=i,u=!1,p=!1;if(t=i,"/"===h)for(var d=!1;j<M&&(u||d||k.charAt(j)!==h)&&!Q.newline.test(k.charAt(j));)t+=k.charAt(j),u?u=!1:(u="\\"===k.charAt(j),"["===k.charAt(j)?d=!0:"]"===k.charAt(j)&&(d=!1)),j+=1;else if(y.e4x&&"<"===h){var f=/<(\/?)([-a-zA-Z:0-9_.]+|{[^{}]*}|!\[CDATA\[[\s\S]*?\]\])(\s+[-a-zA-Z:0-9_.]+\s*=\s*('[^']*'|"[^"]*"|{.*?}))*\s*(\/?)\s*>/g,T=k.slice(j-1),E=f.exec(T);if(E&&0===E.index){for(var g=E[2],x=0;E;){var w=!!E[1],K=E[2],R=!!E[E.length-1]||"![CDATA["===K.slice(0,8);if(K!==g||R||(w?--x:++x),x<=0)break;E=f.exec(T)}var m=E?E.index+E[0].length:T.length;return T=T.slice(0,m),j+=m-1,[T=T.replace(Q.lineBreak,"\n"),"TK_STRING"]}}else for(;j<M&&(u||k.charAt(j)!==h&&("`"===h||!Q.newline.test(k.charAt(j))));)(u||"`"===h)&&Q.newline.test(k.charAt(j))?("\r"===k.charAt(j)&&"\n"===k.charAt(j+1)&&(j+=1),t+="\n"):t+=k.charAt(j),u=u?("x"!==k.charAt(j)&&"u"!==k.charAt(j)||(p=!0),!1):"\\"===k.charAt(j),j+=1;if(p&&y.unescape_strings&&(t=function A(t){var e,n=!1,i="",r=0,s="",a=0;for(;n||r<t.length;)if(e=t.charAt(r),r++,n){if(n=!1,"x"===e)s=t.substr(r,2),r+=2;else{if("u"!==e){i+="\\".concat(e);continue}s=t.substr(r,4),r+=4}if(!s.match(/^[0123456789abcdefABCDEF]+$/))return t;if(0<=(a=parseInt(s,16))&&a<32){i+="x"===e?"\\x".concat(s):"\\u".concat(s);continue}if(34===a||39===a||92===a)i+="\\".concat(String.fromCharCode(a));else{if("x"===e&&126<a&&a<=255)return t;i+=String.fromCharCode(a)}}else"\\"===e?n=!0:i+=e;return i}(t)),j<M&&k.charAt(j)===h&&(t+=h,j+=1,"/"===h))for(;j<M&&Q.isIdentifierStart(k.charCodeAt(j));)t+=k.charAt(j),j+=1;return[t,"TK_STRING"]}if("#"===i){if(0===B.length&&"!"===k.charAt(j)){for(t=i;j<M&&"\n"!==i;)t+=i=k.charAt(j),j+=1;return["".concat(H(t),"\n"),"TK_UNKNOWN"]}var b="#";if(j<M&&N.test(k.charAt(j))){for(;b+=i=k.charAt(j),(j+=1)<M&&"#"!==i&&"="!==i;);return"#"===i||("["===k.charAt(j)&&"]"===k.charAt(j+1)?(b+="[]",j+=2):"{"===k.charAt(j)&&"}"===k.charAt(j+1)&&(b+="{}",j+=2)),[b,"TK_WORD"]}}if("<"===i&&("?"===k.charAt(j)||"%"===k.charAt(j))){$.lastIndex=j-1;var v=$.exec(k);if(v)return i=v[0],j+=i.length-1,[i=i.replace(Q.lineBreak,"\n"),"TK_STRING"]}if("<"===i&&"\x3c!--"===k.substring(j-1,j+3)){for(j+=3,i="\x3c!--";!Q.newline.test(k.charAt(j))&&j<M;)i+=k.charAt(j),j++;return P=!0,[i,"TK_COMMENT"]}if("-"===i&&P&&"--\x3e"===k.substring(j-1,j+2))return P=!1,j+=2,["--\x3e","TK_COMMENT"];if("."===i)return[i,"TK_DOT"];if(Y(i,L)){for(;j<M&&Y(i+k.charAt(j),L)&&(i+=k.charAt(j),!(M<=(j+=1))););
vendor: 8,083 bytes, line 695
695return","===i?[i,"TK_COMMA"]:"="===i?[i,"TK_EQUALS"]:[i,"TK_OPERATOR"]}return[i,"TK_UNKNOWN"]}this.tokenize=function(){var t,e,n;M=k.length,j=0,P=!1,B=[];for(var i=null,r=[],s=[];!e||"TK_EOF"!==e.type;){for(n=a(),t=new J(n[1],n[0],I,V);"TK_COMMENT"===t.type||"TK_BLOCK_COMMENT"===t.type||"TK_UNKNOWN"===t.type;)"TK_BLOCK_COMMENT"===t.type&&(t.directives=n[2]),s.push(t),n=a(),t=new J(n[1],n[0],I,V);s.length&&(t.comments_before=s,s=[]),"TK_START_BLOCK"===t.type||"TK_START_EXPR"===t.type?(t.parent=e,r.push(i),i=t):("TK_END_BLOCK"===t.type||"TK_END_EXPR"===t.type)&&i&&("]"===t.text&&"["===i.text||")"===t.text&&"("===i.text||"}"===t.text&&"{"===i.text)&&(t.parent=i.parent,i=r.pop()),B.push(t),e=t}return B}}return{run:function N(t,e){function a(t){return t.replace(/\s+$/g,"")}var n,i,r,T,s,_,E,o,c,g,x,w,l,h;for((e=e||{}).wrap_line_length!==undefined&&0!==parseInt(e.wrap_line_length,10)||e.max_char===undefined||0===parseInt(e.max_char,10)||(e.wrap_line_length=e.max_char),i=e.indent_inner_html!==undefined&&e.indent_inner_html,r=e.indent_size===undefined?4:parseInt(e.indent_size,10),T=e.indent_char===undefined?" ":e.indent_char,_=e.brace_style===undefined?"collapse":e.brace_style,s=0===parseInt(e.wrap_line_length,10)?32786:parseInt(e.wrap_line_length||250,10),E=e.unformatted||["a","span","img","bdo","em","strong","dfn","code","samp","kbd","const","cite","abbr","acronym","q","sub","sup","tt","i","b","big","small","u","s","strike","font","ins","del","address","pre"],o=e.preserve_newlines===undefined||e.preserve_newlines,c=o?isNaN(parseInt(e.max_preserve_newlines,10))?32786:parseInt(e.max_preserve_newlines,10):0,g=e.indent_handlebars!==undefined&&e.indent_handlebars,x=e.wrap_attributes===undefined?"auto":e.wrap_attributes,w=e.wrap_attributes_indent_size===undefined?r:parseInt(e.wrap_attributes_indent_size,10)||r,l=e.end_with_newline!==undefined&&e.end_with_newline,h=Array.isArray(e.extra_liners)?e.extra_liners.concat():"string"==typeof e.extra_liners?e.extra_liners.split(","):"head,body,/html".split(","),e.indent_with_tabs&&(T="\t",r=1),(n=new function k(){return this.pos=0,this.token="",this.current_mode="CONTENT",this.tags={parent:"parent1",parentcount:1,parent1:""},this.tag_type="",this.token_text=this.last_token=this.last_text=this.token_type="",this.newlines=0,this.indent_content=i,this.Utils={whitespace:"\n\r\t ".split(""),single_token:"br,input,link,meta,source,!doctype,basefont,base,area,hr,wbr,param,img,isindex,embed".split(","),extra_liners:h,in_array:function(t,e){for(var n=0;n<e.length;n++)if(t===e[n])return!0;return!1}},this.is_whitespace=function(t){for(;0<t.length;t++)if(!this.Utils.in_array(t.charAt(0),this.Utils.whitespace))return!1;return!0},this.traverse_whitespace=function(){var t="";if(t=this.input.charAt(this.pos),this.Utils.in_array(t,this.Utils.whitespace)){for(this.newlines=0;this.Utils.in_array(t,this.Utils.whitespace);)o&&"\n"===t&&this.newlines<=c&&(this.newlines+=1),this.pos++,t=this.input.charAt(this.pos);return!0}return!1},this.space_or_wrap=function(t){this.line_char_count>=this.wrap_line_length?(this.print_newline(!1,t),this.print_indentation(t)):(this.line_char_count++,t.push(" "))},this.get_content=function(){for(var t="",e=[];"<"!=this.input.charAt(this.pos);){if(this.pos>=this.input.length)return e.length?e.join(""):["","TK_EOF"];if(this.traverse_whitespace())this.space_or_wrap(e);else{if(g){var n=this.input.substr(this.pos,3);if("{{#"===n||"{{/"===n)break;if("{{!"===n)return[this.get_tag(),"TK_TAG_HANDLEBARS_COMMENT"];if("{{"===this.input.substr(this.pos,2)&&"{{else}}"===this.get_tag(!0))break}t=this.input.charAt(this.pos),this.pos++,this.line_char_count++,e.push(t)}}return e.length?e.join(""):""},this.get_contents_to=function(t){if(this.pos===this.input.length)return["","TK_EOF"];var e="",n=new RegExp("</".concat(t,"\\s*>"),"igm");n.lastIndex=this.pos;var i=n.exec(this.input),r=i?i.index:this.input.length;return this.pos<r&&(e=this.input.substring(this.pos,r),this.pos=r),e},this.record_tag=function(t){this.tags["".concat(t,"count")]?this.tags["".concat(t,"count")]++:this.tags["".concat(t,"count")]=1,this.tags[t+this.tags["".concat(t,"count")]]=this.indent_level,this.tags[t+this.tags["".concat(t,"count")]+"parent"]=this.tags.parent,this.tags.parent=t+this.tags["".concat(t,"count")]},this.retrieve_tag=function(t){if(this.tags["".concat(t,"count")]){for(var e=this.tags.parent;e&&t+this.tags["".concat(t,"count")]!==e;)e=this.tags["".concat(e,"parent")];e&&(this.indent_level=this.tags[t+this.tags["".concat(t,"count")]],this.tags.parent=this.tags[e+"parent"]),delete this.tags[t+this.tags["".concat(t,"count")]+"parent"],delete this.tags[t+this.tags["".concat(t,"count")]],1===this.tags["".concat(t,"count")]?delete this.tags["".concat(t,"count")]:this.tags["".concat(t,"count")]--}},this.indent_to_tag=function(t){if(this.tags["".concat(t,"count")]){for(var e=this.tags.parent;e&&t+this.tags["".concat(t,"count")]!==e;)e=this.tags["".concat(e,"parent")];e&&(this.indent_level=this.tags[t+this.tags["".concat(t,"count")]])}},this.get_tag=function(t){var e,n,i="",r=[],s="",a=!1,_=!0,o=this.pos,c=this.line_char_count;t=t!==undefined&&t;do{if(this.pos>=this.input.length)return t&&(this.pos=o,this.line_char_count=c),r.length?r.join(""):["","TK_EOF"];if(i=this.input.charAt(this.pos),this.pos++,this.Utils.in_array(i,this.Utils.whitespace))a=!0;else{if("'"!==i&&'"'!==i||(i+=this.get_unformatted(i),a=!0),"="===i&&(a=!1),r.length&&"="!=r[r.length-1]&&">"!=i&&a){if(this.space_or_wrap(r),a=!1,!_&&"force"===x&&"/"!=i){this.print_newline(!0,r),this.print_indentation(r);for(var l=0;l<w;l++)r.push(T)}for(var h=0;h<r.length;h++)if(" "===r[h]){_=!1;break}}if(g&&"<"===n&&i+this.input.charAt(this.pos)==="{{"&&(i+=this.get_unformatted("}}"),r.length&&" "!=r[r.length-1]&&"<"!=r[r.length-1]&&(i=" ".concat(i)),a=!0),"<"!==i||n||(e=this.pos-1,n="<"),g&&!n&&2<=r.length&&"{"===r[r.length-1]&&"{"===r[r.length-2]&&(e="#"===i||"/"===i||"!"===i?this.pos-3:this.pos-2,n="{"),this.line_char_count++,r.push(i),r[1]&&("!"===r[1]||"?"===r[1]||"%"===r[1])){r=[this.get_comment(e)];break}if(g&&r[1]&&"{"===r[1]&&r[2]&&"!"===r[2]){r=[this.get_comment(e)];break}if(g&&"{"===n&&2<r.length&&"}"===r[r.length-2]&&"}"===r[r.length-1])break}}while(">"!=i);var u,p,d=r.join("");u=-1!=d.indexOf(" ")?d.indexOf(" "):"{"===d[0]?d.indexOf("}"):d.indexOf(">"),p="<"!==d[0]&&g?"#"===d[2]?3:2:1;var f=d.substring(p,u).toLowerCase();return"/"===d.charAt(d.length-2)||this.Utils.in_array(f,this.Utils.single_token)?t||(this.tag_type="SINGLE"):g&&"{"===d[0]&&"else"===f?t||(this.indent_to_tag("if"),this.tag_type="HANDLEBARS_ELSE",this.indent_content=!0,this.traverse_whitespace()):this.is_unformatted(f,E)?(s=this.get_unformatted("</".concat(f,">"),d),r.push(s),this.pos,this.tag_type="SINGLE"):"script"===f&&(-1===d.search("type")||-1<d.search("type")&&-1<d.search(/\b(text|application)\/(x-)?(javascript|ecmascript|jscript|livescript)/))?t||(this.record_tag(f),this.tag_type="SCRIPT"):"style"===f&&(-1===d.search("type")||-1<d.search("type")&&-1<d.search("text/css"))?t||(this.record_tag(f),this.tag_type="STYLE"):"!"===f.charAt(0)?t||(this.tag_type="SINGLE",this.traverse_whitespace()):t||("/"===f.charAt(0)?(this.retrieve_tag(f.substring(1)),this.tag_type="END"):(this.record_tag(f),"html"!=f.toLowerCase()&&(this.indent_content=!0),this.tag_type="START"),this.traverse_whitespace()&&this.space_or_wrap(r),this.Utils.in_array(f,this.Utils.extra_liners)&&(this.print_newline(!1,this.output),this.output.length&&"\n"!=this.output[this.output.length-2]&&this.print_newline(!0,this.output))),t&&(this.pos=o,this.line_char_count=c),r.join("")},this.get_comment=function(t){var e="",n=">",i=!1;this.pos=t;var r=this.input.charAt(this.pos);for(this.pos++;this.pos<=this.input.length&&((e+=r)[e.length-1]!==n[n.length-1]||-1==e.indexOf(n));)!i&&e.length<10&&(0===e.indexOf("<![if")?(n="<![endif]>",i=!0):0===e.indexOf("<![cdata[")?(n="]]>",i=!0):0===e.indexOf("<![")?(n="]>",i=!0):0===e.indexOf("\x3c!--")?(n="--\x3e",i=!0):0===e.indexOf("{{!")?(n="}}",i=!0):0===e.indexOf("<?")?(n="?>",i=!0):0===e.indexOf("<%")&&(n="%>
695",i=!0)),r=this.input.charAt(this.pos),this.pos++;return e},this.get_unformatted=function(t,e){if(e&&-1!=e.toLowerCase().indexOf(t))return"";var n="",i="",r=0,s=!0;do{if(this.pos>=this.input.length)return i;if(n=this.input.charAt(this.pos),this.pos++,this.Utils.in_array(n,this.Utils.whitespace)){if(!s){this.line_char_count--;continue}if("\n"===n||"\r"===n){i+="\n",this.line_char_count=0;continue}}i+=n,this.line_char_count++,s=!0,g&&"{"===n&&i.length&&"{"===i[i.length-2]&&(r=(i+=this.get_unformatted("}}")).length)}while(-1===i.toLowerCase().indexOf(t,r));return i},this.get_token=function(){var t;if("TK_TAG_SCRIPT"!==this.last_token&&"TK_TAG_STYLE"!==this.last_token)return"CONTENT"===this.current_mode?"string"!=typeof(t=this.get_content())?t:[t,"TK_CONTENT"]:"TAG"===this.current_mode?"string"!=typeof(t=this.get_tag())?t:[t,"TK_TAG_".concat(this.tag_type)]:void 0;var e=this.last_token.substr(7);return"string"!=typeof(t=this.get_contents_to(e))?t:[t,"TK_".concat(e)]},this.get_full_indent=function(t){return(t=this.indent_level+t||0)<1?"":new Array(t+1).join(this.indent_string)},this.is_unformatted=function(t,e){if(!this.Utils.in_array(t,e))return!1;if("a"!=t.toLowerCase()||!this.Utils.in_array("a",e))return!0;var n=(this.get_tag(!0)||"").match(/^\s*<\s*\/?([a-z]*)\s*[^>]*>\s*$/);return!(n&&!this.Utils.in_array(n,e))},this.printer=function(t,e,n,i,r){this.input=t||"",this.output=[],this.indent_character=e,this.indent_string="",this.indent_size=n,this.brace_style=r,this.indent_level=0,this.wrap_line_length=i;for(var s=this.line_char_count=0;s<this.indent_size;s++)this.indent_string+=this.indent_character;this.print_newline=function(t,e){this.line_char_count=0,e&&e.length&&(t||"\n"!=e[e.length-1])&&("\n"!=e[e.length-1]&&(e[e.length-1]=a(e[e.length-1])),e.push("\n"))},this.print_indentation=function(t){for(var e=0;e<this.indent_level;e++)t.push(this.indent_string),this.line_char_count+=this.indent_string.length},this.print_token=function(t){this.is_whitespace(t)&&!this.output.length||((t||""!==t)&&this.output.length&&"\n"===this.output[this.output.length-1]&&(this.print_indentation(this.output),t=function e(t){return t.replace(/^\s+/g,"")}(t)),this.print_token_raw(t))},this.print_token_raw=function(t){0<this.newlines&&(t=a(t)),t&&""!==t&&(1<t.length&&"\n"===t[t.length-1]?(this.output.push(t.slice(0,-1)),this.print_newline(!1,this.output)):this.output.push(t));for(var e=0;e<this.newlines;e++)this.print_newline(0<e,this.output);this.newlines=0},this.indent=function(){this.indent_level++},this.unindent=function(){0<this.indent_level&&this.indent_level--}},this}).printer(t,T,r,s,_);;){var u=n.get_token();if(n.token_text=u[0],n.token_type=u[1],"TK_EOF"===n.token_type)break;switch(n.token_type){case"TK_TAG_START":n.print_newline(!1,n.output),n.print_token(n.token_text),n.indent_content&&(n.indent(),n.indent_content=!1),n.current_mode="CONTENT";break;case"TK_TAG_STYLE":case"TK_TAG_SCRIPT":n.print_newline(!1,n.output),n.print_token(n.token_text),n.current_mode="CONTENT";break;case"TK_TAG_END":if("TK_CONTENT"===n.last_token&&""===n.last_text){var p=n.token_text.match(/\w+/)[0],d=null;n.output.length&&(d=n.output[n.output.length-1].match(/(?:<|{{#)\/?\s*(\w+)/)),(null===d||d[1]!=p&&!n.Utils.in_array(d[1],E))&&n.print_newline(!1,n.output)}n.print_token(n.token_text),n.current_mode="CONTENT";break;case"TK_TAG_SINGLE":var f=n.token_text.match(/^\s*<([a-z-]+)/i);f&&n.Utils.in_array(f[1],E)||n.print_newline(!1,n.output),n.print_token(n.token_text),n.current_mode="CONTENT";break;case"TK_TAG_HANDLEBARS_ELSE":n.print_token(n.token_text),n.indent_content&&(n.indent(),n.indent_content=!1),n.current_mode="CONTENT";break;case"TK_TAG_HANDLEBARS_COMMENT":case"TK_CONTENT":n.print_token(n.token_text),n.current_mode="TAG";break;case"TK_STYLE":case"TK_SCRIPT":if(""!==n.token_text){n.print_newline(!1,n.output);var K=n.token_text,R=void 0,m=1;"TK_SCRIPT"===n.token_type?R=O:"TK_STYLE"===n.token_type&&(R=y),"keep"===e.indent_scripts?m=0:"separate"===e.indent_scripts&&(m=-n.indent_level);var b=n.get_full_indent(m);if(R)K=R(K.replace(/^\s*/,b),e);else{var v=K.match(/^\s*/)[0].match(/[^\n\r]*$/)[0].split(n.indent_string).length-1,S=n.get_full_indent(m-v);K=K.replace(/^\s*/,b).replace(/\r\n|\r|\n/g,"\n"+S).replace(/\s+$/,"")}K&&(n.print_token_raw(K),n.print_newline(!0,n.output))}n.current_mode="TAG";break;default:""!==n.token_text&&n.print_token(n.token_text)}n.last_token=n.token_type,n.last_text=n.token_text}var A=n.output.join("").replace(/[\r\n\t ]+$/,"");return l&&(A+="\n"),A}}}}); 696},{"froala-editor":8}],11:[function(require,module,exports){ 697/*! 698 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 699 * License https://froala.com/wysiwyg-editor/terms/ 700 * Copyright 2014-2023 Froala Labs 701 */ 702 703!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(e.FroalaEditor)}(this,function(e){"use strict";e=e&&e.hasOwnProperty("default")?e["default"]:e,Object.assign(e.DEFAULTS,{codeMirror:window.CodeMirror,codeMirrorOptions:{lineNumbers:!0,tabMode:"indent",indentWithTabs:!0,lineWrapping:!0,mode:"text/html",tabSize:2},codeBeautifierOptions:{end_with_newline:!0,indent_inner_html:!0,extra_liners:["p","h1","h2","h3","h4","h5","h6","blockquote","pre","ul","ol","table","dl"],brace_style:"expand",indent_char:"\t",indent_size:1,wrap_line_length:0},codeViewKeepActiveButtons:["fullscreen"]}),e.PLUGINS.codeView=function(c){var d,f,h=c.$,p=function p(){return c.$box.hasClass("fr-code-view")};function u(){return f?f.getValue():d.val()}function g(){p()&&(f&&f.setSize(null,c.opts.height?c.opts.height:"auto"),c.opts.heightMin||c.opts.height?(c.$box.find(".CodeMirror-scroll, .CodeMirror-gutters").css("min-height",c.opts.heightMin||c.opts.height),d.css("height",c.opts.height)):c.$box.find(".CodeMirror-scroll, .CodeMirror-gutters").css("min-height",""))}var m,b=!1;function v(){p()&&c.events.trigger("blur")}function w(){p()&&b&&c.events.trigger("focus")}function o(e){d||(!function l(){d=h('<textarea class="fr-code" tabIndex="-1">'),c.$wp.append(d),d.attr("dir",c.opts.direction),c.$box.hasClass("fr-basic")||(m=h('<a data-cmd="html" title="Code View" class="fr-command fr-btn html-switch'.concat(c.helpers.isMobile()?"":" fr-desktop",'" role="button" tabIndex="-1"><i class="fa fa-code"></i></button>')),c.$box.append(m),c.events.bindClick(c.$box,"a.html-switch",function(){c.events.trigger("commands.before",["html"]),M(!1),c.events.trigger("commands.after",["html"])}));var e=function e(){return!p()};c.events.on("buttons.refresh",e),c.events.on("copy",e,!0),c.events.on("cut",e,!0),c.events.on("paste",e,!0),c.events.on("destroy",x,!0),c.events.on("html.set",function(){p()&&M(!0)}),c.events.on("codeView.update",g),c.events.on("codeView.toggle",function(){c.$box.hasClass("fr-code-view")&&M()}),c.events.on("form.submit",function(){p()&&(c.html.set(u()),c.events.trigger("contentChanged",[],!0))},!0)}(),!f&&c.opts.codeMirror?((f=c.opts.codeMirror.fromTextArea(d.get(0),c.opts.codeMirrorOptions)).on("blur",v),f.on("focus",w)):(c.events.$on(d,"keydown keyup change input",function(){c.opts.height?this.removeAttribute("rows"):(this.rows=1,0===this.value.length?this.style.height="auto":this.style.height="".concat(this.scrollHeight,"px"))}),c.events.$on(d,"blur",v),c.events.$on(d,"focus",w))),c.undo.saveStep(),c.html.cleanEmptyTags(),c.html.cleanWhiteTags(!0),c.core.hasFocus()&&(c.core.isEmpty()||(c.selection.save(),c.$el.find('.fr
703-marker[data-type="true"]').first().replaceWith('<span class="fr-tmp fr-sm">F</span>'),c.$el.find('.fr-marker[data-type="false"]').last().replaceWith('<span class="fr-tmp fr-em">F</span>')));var t=c.html.get(!1,!0);c.$el.find("span.fr-tmp").remove(),c.$box.toggleClass("fr-code-view",!0);var r,o,n=!1;if(c.core.hasFocus()&&(n=!0,c.events.disableBlur(),c.$el.blur()),t=(t=t.replace(/<span class="fr-tmp fr-sm">F<\/span>/,"FROALA-SM")).replace(/<span class="fr-tmp fr-em">F<\/span>/,"FROALA-EM"),c.codeBeautifier&&!t.includes("fr-embedly")&&(t=c.codeBeautifier.run(t,c.opts.codeBeautifierOptions)),f){r=t.indexOf("FROALA-SM"),(o=t.indexOf("FROALA-EM"))<r?r=o:o-=9;var s=(t=t.replace(/FROALA-SM/g,"").replace(/FROALA-EM/g,"")).substring(0,r).length-t.substring(0,r).replace(/\n/g,"").length,i=t.substring(0,o).length-t.substring(0,o).replace(/\n/g,"").length;r=t.substring(0,r).length-t.substring(0,t.substring(0,r).lastIndexOf("\n")+1).length,o=t.substring(0,o).length-t.substring(0,t.substring(0,o).lastIndexOf("\n")+1).length,f.setSize(null,c.opts.height?c.opts.height:"auto"),c.opts.heightMin&&c.$box.find(".CodeMirror-scroll").css("min-height",c.opts.heightMin),f.setValue(t),b=!n,f.focus(),b=!0,f.setSelection({line:s,ch:r},{line:i,ch:o}),f.refresh(),f.clearHistory()}else{r=t.indexOf("FROALA-SM"),o=t.indexOf("FROALA-EM")-9,c.opts.heightMin&&d.css("min-height",c.opts.heightMin),c.opts.height&&d.css("height",c.opts.height),c.opts.heightMax&&d.css("max-height",c.opts.height||c.opts.heightMax),d.val(t.replace(/FROALA-SM/g,"").replace(/FROALA-EM/g,"")).trigger("change");var a=h(c.o_doc).scrollTop();b=!n,d.focus(),b=!0,d.get(0).setSelectionRange(r,o),h(c.o_doc).scrollTop(a)}c.$tb.find(".fr-btn-grp > .fr-command, .fr-more-toolbar > .fr-command, .fr-btn-grp > .fr-btn-wrap > .fr-command, .fr-more-toolbar > .fr-btn-wrap > .fr-command").not(e).filter(function(){return c.opts.codeViewKeepActiveButtons.indexOf(h(this).data("cmd"))<0}).addClass("fr-disabled").attr("aria-disabled",!0),e.addClass("fr-active").attr("aria-pressed",!0),!c.helpers.isMobile()&&c.opts.toolbarInline&&c.toolbar.hide()}function M(e){void 0===e&&(e=!p());var t=c.$tb.find('.fr-command[data-cmd="html"]');e?(c.popups.hideAll(),o(t)):(c.$box.toggleClass("fr-code-view",!1),function r(e){var t=u();c.html.set(t),c.$el.blur(),c.$tb.find(".fr-btn-grp > .fr-command, .fr-more-toolbar > .fr-command, .fr-btn-grp > .fr-btn-wrap > .fr-command, .fr-more-toolbar > .fr-btn-wrap > .fr-command").not(e).removeClass("fr-disabled").attr("aria-disabled",!1),e.removeClass("fr-active").attr("aria-pressed",!1),c.selection.setAtStart(c.el),c.selection.restore(),c.placeholder.refresh(),c.undo.saveStep()}(t),c.events.trigger("codeView.update"))}function x(){p()&&M(!1),f&&f.toTextArea(),d.val("").removeData().remove(),d=null,m&&(m.remove(),m=null)}return{_init:function e(){if(c.events.on("focus",function(){c.opts.toolbarContainer&&function t(){var e=c.$tb.find('.fr-command[data-cmd="html"]');p()?(c.$tb.find(".fr-btn-grp > .fr-command, .fr-more-toolbar > .fr-command").not(e).filter(function(){return c.opts.codeViewKeepActiveButtons.indexOf(h(this).data("cmd"))<0}).addClass("fr-disabled").attr("aria-disabled",!1),e.addClass("fr-active").attr("aria-pressed",!1)):(c.$tb.find(".fr-btn-grp > .fr-command, .fr-more-toolbar > .fr-command").not(e).removeClass("fr-disabled").attr("aria-disabled",!1),e.removeClass("fr-active").attr("aria-pressed",!1))}()}),!c.$wp)return!1},toggle:M,isActive:p,get:u}},e.RegisterCommand("html",{title:"Code View",undo:!1,focus:!1,forcedRefresh:!0,toggle:!0,callback:function(){this.codeView.toggle()},plugin:"codeView"}),e.DefineIcon("html",{NAME:"code",SVG_KEY:"codeView"})}); 704},{"froala-editor":8}],12:[function(require,module,exports){ 705/*! 706 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 707 * License https://froala.com/wysiwyg-editor/terms/ 708 * Copyright 2014-2023 Froala Labs 709 */ 710 711!function(o,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(o.FroalaEditor)}(this,function(k){"use strict";k=k&&k.hasOwnProperty("default")?k["default"]:k,Object.assign(k.POPUP_TEMPLATES,{"textColor.picker":"[_BUTTONS_][_TEXT_COLORS_][_CUSTOM_COLOR_]","backgroundColor.picker":"[_BUTTONS_][_BACKGROUND_COLORS_][_CUSTOM_COLOR_]"}),Object.assign(k.DEFAULTS,{colorsText:["#61BD6D","#1ABC9C","#54ACD2","#2C82C9","#9365B8","#475577","#CCCCCC","#41A85F","#00A885","#3D8EB9","#2969B0","#553982","#28324E","#000000","#F7DA64","#FBA026","#EB6B56","#E25041","#A38F84","#EFEFEF","#FFFFFF","#FAC51C","#F37934","#D14841","#B8312F","#7C706B","#D1D5D8","REMOVE"],colorsBackgroun
vendor: 4,554 bytes, line 711
711d:["#61BD6D","#1ABC9C","#54ACD2","#2C82C9","#9365B8","#475577","#CCCCCC","#41A85F","#00A885","#3D8EB9","#2969B0","#553982","#28324E","#000000","#F7DA64","#FBA026","#EB6B56","#E25041","#A38F84","#EFEFEF","#FFFFFF","#FAC51C","#F37934","#D14841","#B8312F","#7C706B","#D1D5D8","REMOVE"],colorsStep:7,colorsHEXInput:!0,colorsButtons:["colorsBack","|","-"]}),k.PLUGINS.colors=function(g){var E=g.$,l='<div class="fr-color-hex-layer fr-active fr-layer" id="fr-color-hex-layer- \n '.concat(g.id,'"><div class="fr-input-line"><input maxlength="7" id="[ID]"\n type="text" placeholder="').concat(g.language.translate("HEX Color"),'" \n tabIndex="1" aria-required="true"></div><div class="fr-action-buttons"><button \n type="button" class="fr-command fr-submit" data-cmd="[COMMAND]" tabIndex="2" role="button">\n ').concat(g.language.translate("OK"),"</button></div></div>");function s(o){for(var t="text"===o?g.opts.colorsText:g.opts.colorsBackground,r='<div class="fr-color-set fr-'.concat(o,'-color fr-selected-set">'),e=0;e<t.length;e++)0!==e&&e%g.opts.colorsStep==0&&(r+="<br>"),"REMOVE"!==t[e]?r+='<span class="fr-command fr-select-color" style="background:'.concat(t[e],';" \n tabIndex="-1" aria-selected="false" role="button" data-cmd="apply').concat(o,'Color" \n data-param1="').concat(t[e],'"><span class="fr-sr-only"> ').concat(g.language.translate("Color")).concat(t[e]," \n </span></span>"):r+='<span class="fr-command fr-select-color" data-cmd="apply'.concat(o,'Color"\n tabIndex="-1" role="button" data-param1="REMOVE" \n title="').concat(g.language.translate("Clear Formatting"),'">').concat(g.icon.create("remove"),' \n <span class="fr-sr-only"> ').concat(g.language.translate("Clear Formatting")," </span></span>");return"".concat(r,"</div>")}function i(o){var t,r=g.popups.get("".concat(o,"Color.picker")),e=E(g.selection.element());t="background"===o?"background-color":"color";var c=r.find(".fr-".concat(o,"-color .fr-select-color"));for(c.find(".fr-selected-color").remove(),c.removeClass("fr-active-item"),c.not('[data-param1="REMOVE"]').attr("aria-selected",!1);e.get(0)!==g.el;){if("transparent"!==e.css(t)&&"rgba(0, 0, 0, 0)"!==e.css(t)){var a=r.find(".fr-".concat(o,'-color .fr-select-color[data-param1="').concat(g.helpers.RGBToHex(e.css(t)),'"]'));a.append('<span class="fr-selected-color" aria-hidden="true">\uf00c</span>'),a.addClass("fr-active-item").attr("aria-selected",!0);break}e=e.parent()}!function n(o){var t=g.popups.get("".concat(o,"Color.picker")),r=t.find(".fr-".concat(o,"-color .fr-active-item")).attr("data-param1"),e=t.find(".fr-color-hex-layer input");r||(r="");e.length&&E(e.val(r).input).trigger("change")}(o)}function e(o){"REMOVE"!==o?g.format.applyStyle("background-color",g.helpers.HEXtoRGB(o)):g.format.removeStyle("background-color"),g.popups.hide("backgroundColor.picker")}function c(o){"REMOVE"!==o?g.format.applyStyle("color",g.helpers.HEXtoRGB(o)):g.format.removeStyle("color"),g.popups.hide("textColor.picker")}return{showColorsPopup:function p(o){var t=g.$tb.find('.fr-command[data-cmd="'.concat(o,'"]')),r=g.popups.get("".concat(o,".picker"));if(r||(r=function n(o){var t="";g.opts.toolbarInline&&0<g.opts.colorsButtons.length&&(t+='<div class="fr-buttons fr-colors-buttons fr-tabs">\n '.concat(g.button.buildList(g.opts.colorsButtons),"\n </div>"));var r,e="";r="textColor"===o?(g.opts.colorsHEXInput&&(e=l.replace(/\[ID\]/g,"fr-color-hex-layer-text-".concat(g.id)).replace(/\[COMMAND\]/g,"customTextColor")),{buttons:t,text_colors:s("text"),custom_color:e}):(g.opts.colorsHEXInput&&(e=l.replace(/\[ID\]/g,"fr-color-hex-layer-background-".concat(g.id)).replace(/\[COMMAND\]/g,"customBackgroundColor")),{buttons:t,background_colors:s("background"),custom_color:e});var c=g.popups.create("".concat(o,".picker"),r);return function a(C,b){g.events.on("popup.tab",function(o){var t=E(o.currentTarget);if(!g.popups.isVisible(b)||!t.is("span"))return!0;var r=o.which,e=!0;if(k.KEYCODE.TAB===r){var c=C.find(".fr-buttons");e=!g.accessibility.focusToolbar(c,!!o.shiftKey)}else if(k.KEYCODE.ARROW_UP===r||k.KEYCODE.ARROW_DOWN===r||k.KEYCODE.ARROW_LEFT===r||k.KEYCODE.ARROW_RIGHT===r){if(t.is("span.fr-select-color")){var a=t.parent().find("span.fr-select-color"),n=a.index(t),l=g.opts.colorsStep,s=Math.floor(a.length/l),i=n%l,p=Math.floor(n/l),u=p*l+i,d=s*l;k.KEYCODE.ARROW_UP===r?u=((u-l)%d+d)%d:k.KEYCODE.ARROW_DOWN===r?u=(u+l)%d:k.KEYCODE.ARROW_LEFT===r?u=((u-1)%d+d)%d:k.KEYCODE.ARROW_RIGHT===r&&(u=(u+1)%d);var f=E(a.get(u));
vendor: 12,491 bytes, lines 711-727
711g.events.disableBlur(),f.focus(),e=!1}}else k.KEYCODE.ENTER===r&&(g.button.exec(t),e=!1);return!1===e&&(o.preventDefault(),o.stopPropagation()),e},!0)}(c,"".concat(o,".picker")),c}(o)),!r.hasClass("fr-active"))if(g.popups.setContainer("".concat(o,".picker"),g.$tb),i("textColor"===o?"text":"background"),t.isVisible()){var e=g.button.getPosition(t),c=e.left,a=e.top;g.popups.show("".concat(o,".picker"),c,a,t.outerHeight())}else g.position.forSelection(r),g.popups.show("".concat(o,".picker"))},background:e,customColor:function a(o){var t=g.popups.get("".concat(o,"Color.picker")).find(".fr-color-hex-layer input");if(t.length){var r=t.val();"background"===o?e(r):c(r)}},text:c,back:function o(){g.popups.hide("textColor.picker"),g.popups.hide("backgroundColor.picker"),g.toolbar.showInline()}}},k.DefineIcon("textColor",{NAME:"tint",SVG_KEY:"textColor"}),k.RegisterCommand("textColor",{title:"Text Color",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible("textColor.picker")?(this.$el.find(".fr-marker").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide("textColor.picker")):this.colors.showColorsPopup("textColor")}}),k.RegisterCommand("applytextColor",{undo:!0,callback:function(o,t){this.colors.text(t)}}),k.RegisterCommand("customTextColor",{title:"OK",undo:!0,callback:function(){this.colors.customColor("text")}}),k.DefineIcon("backgroundColor",{NAME:"paint-brush",SVG_KEY:"backgroundColor"}),k.RegisterCommand("backgroundColor",{title:"Background Color",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible("backgroundColor.picker")?(this.$el.find(".fr-marker").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide("backgroundColor.picker")):this.colors.showColorsPopup("backgroundColor")}}),k.RegisterCommand("applybackgroundColor",{undo:!0,callback:function(o,t){this.colors.background(t)}}),k.RegisterCommand("customBackgroundColor",{title:"OK",undo:!0,callback:function(){this.colors.customColor("background")}}),k.DefineIcon("colorsBack",{NAME:"arrow-left",SVG_KEY:"back"}),k.RegisterCommand("colorsBack",{title:"Back",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.colors.back()}}),k.DefineIcon("remove",{NAME:"eraser",SVG_KEY:"remove"})}); 712},{"froala-editor":8}],13:[function(require,module,exports){ 713/*! 714 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 715 * License https://froala.com/wysiwyg-editor/terms/ 716 * Copyright 2014-2023 Froala Labs 717 */ 718 719!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(e.FroalaEditor)}(this,function(c){"use strict";c=c&&c.hasOwnProperty("default")?c["default"]:c,Object.assign(c.DEFAULTS,{dragInline:!0}),c.PLUGINS.draggable=function(g){var d=g.$;function e(e){return!(!e.originalEvent||!e.originalEvent.target||e.originalEvent.target.nodeType!==Node.TEXT_NODE)||(e.target&&"A"===e.target.tagName&&1===e.target.childNodes.length&&"IMG"===e.target.childNodes[0].tagName&&(e.target=e.target.childNodes[0]),d(e.target).hasClass("fr-draggable")?(g.undo.canDo()||g.undo.saveStep(),g.opts.dragInline?g.$el.attr("contenteditable",!0):g.$el.attr("contenteditable",!1),g.opts.toolbarInline&&g.toolbar.hide(),d(e.target).addClass("fr-dragging"),g.browser.msie||g.browser.edge||g.selection.clear(),void e.originalEvent.dataTransfer.setData("text","Froala")):(e.preventDefault(),!1))}var p,v=function v(e){return!(e&&("HTML"===e.tagName||"BODY"===e.tagName||g.node.isElement(e)))};function m(e,t,r){if(g.opts.iframe){var n=g.helpers.getPX(g.$wp.find(".fr-iframe").css("padding-top")),a=g.helpers.getPX(g.$wp.find(".fr-iframe").css("padding-left"));e+=g.$iframe.offset().top+n,t+=g.$iframe.offset().left+a}p.offset().top!==e&&p.css("top",e),p.offset().left!==t&&p.css("left",t),p.width()!==r&&p.css("width",r)}function t(e){e.originalEvent.dataTransfer.dropEffect="move",g.opts.dragInline?(!function r(){for(var e=null,t=0;t<c.INSTANCES.length;t++)if((e=c.INSTANCES[t].$el.find(".fr-dragging")).length)return e.get(0)}()||g.browser.msie||g.browser.edge)&&e.preventDefault():(e.preventDefault(),function f(e){var t=g.doc.elementFromPoint(e.originalEvent.pageX-g.win.pageXOffset,e.originalEvent.pageY-g.win.pageYOffset);if(!v(t)){for(var r=0,n=t;!v(n)&&n===t&&0<e.originalEvent.pageY-g.win.pageYOffset-r;)r++,n=g.doc.elementFromPoint(e.originalEvent.pageX-g.win.pageXOffset,e.originalEvent.pageY-g.win.pageYOffset-r);(!v(n)||p&&0===g.$el.find(n).length&&n!==p.get(0))&&(n=null);for(var a=0,o=t;!v(o)&&o===t&&e.originalEvent.pageY-g.win.pageYOffset+a<d(g.doc).height();)a++,o=g.doc.elementFromPoint(e.originalEvent.pageX-g.win.pageXOffset,e.originalEvent.pageY-g.win.pageYOffset+a);(!v(o)||p&&0===g.$el.find(o).length&&o!==p.get(0))&&(o=null),t=null===o&&n?n:o&&null===n?o:o&&n?r<a?n:o:null}if(d(t).hasClass("fr-drag-helper"))return!1;if(t&&!g.node.isBlock(t)&&(t=g.node.blockParent(t)),t&&0<=["TD","TH","TR","THEAD","TBODY"].indexOf(t.tagName)&&(t=d(t).parents("table").get(0)),t&&0<=["LI"].indexOf(t.tagName)&&(t=d(t).parents("UL, OL").get(0)),t&&!d(t).hasClass("fr-drag-helper")){var i;p||(c.$draggable_helper||(c.$draggable_helper=d(document.createElement("div")).attr("class","fr-drag-helper")),p=c.$draggable_helper,g.events.on("shared.destroy",function(){p.html("").removeData().remove(),p=null},!0)),i=e.originalEvent.pageY<d(t).offset().top+d(t).outerHeight()/2;var l=d(t),s=0;i||0!==l.next().length?(i||(l=l.next()),"before"===p.data("fr-position")&&l.is(p.data("fr-tag"))||(0<l.prev().length&&(s=parseFloat(l.prev().css("margin-bottom"))||0),s=Math.max(s,parseFloat(l.css("margin-top"))||0),m(l.offset().top-s/2-g.$box.offset().top,l.offset().left-g.win.pageXOffset-g.$box.offset().left,l.width()),p.data("fr-position","before"))):"after"===p.data("fr-position")&&l.is(p.data("fr-tag"))||(s=parseFloat(l.css("margin-bottom"))||0,m(l.offset().top+d(t).height()+s/2-g.$box.offset().top,l.offset().left-g.win.pageXOffset-g.$box.offset().left,l.width()),p.data("fr-position","after")),p.data("fr-tag",l),p.addClass("fr-visible"),g.$box.append(p)}else p&&0<g.$box.find(p).length&&p.removeClass("fr-visible")}(e))}function r(e){e.originalEvent.dataTransfer.dropEffect="move",g.opts.dragInline||e.preventDefault()}function n(e){g.$el.attr("contenteditable",!0);var t=g.$el.find(".fr-dragging");p&&p.hasClass("fr-visible")&&g.$box.find(p).length?a(e):t.length&&(e.preventDefault(),e.stopPropagation()),p&&g.$box.find(p).length&&p.removeClass("fr-visible"),t.removeClass("fr-dragging")}function a(e){var t,r;g.$el.attr("contenteditable",!0);for(var n=0;n<c.INSTANCES.length;n++)if((t=c.INSTANCES[n].$el.find(".fr-dragging")).length){r=c.INSTANCES[n];break}if(t.length){if(e.preventDefault(),e.stopPropagation(),p&&p.hasClass("fr-visible")&&g.$box.find(p).length)p.data("fr-tag")[p.data("fr-position")]('<span class="fr-marker"></span>'),p.removeClass("fr-visible");else if(!1===g.markers.insertAtPoint(e.originalEvent))return!1;if(t.removeClass("fr-dragging"),!1===(t=g.events.chainTrigger("element.beforeDrop",t)))return!1;var a=t;if(t.parent().is("A")&&1===t.parent().get(0).childNodes.length&&(a=t.parent()),g.core.isEmpty())g.events.focus();else g.$el.find(".fr-marker").replaceWith(c.MARKERS),g.selection.restore();if(r===g||g.undo.canDo()||g.undo.saveStep(),g.core.isEmpty())g.$el.html(a);else{var o=g.markers.insert();0===a.find(o).length?d(o).replaceWith(a):0===t.find(o).length&&d(o).replaceWith(t),t.after(c.MARKERS),g.selection.restore()}return g.popups.hideAll(),g.selection.save(),g.$el.find(g.html.emptyBlockTagsQuery()).not("TD, TH, LI, .fr-inner").not(g.opts.htmlAllowedEmptyTags.join(",")).remove(),g.html.wrap(),g.html.fillEmptyBlocks(),g.selection.restore(),g.undo.saveStep(),g.opts.iframe&&g.size.syncIframe(),r!==g&&(r.popups.hideAll(),r.$el.find(r.html.emptyBlockTagsQuery()).not("TD, TH, LI, .fr-inner").remove(),r.html.wrap(),r.html.fillEmptyBlocks(),r.undo.saveStep(),r.events.trigger("element.dropped"),r.opts.iframe&&r.size.syncIframe()),g.events.trigger("element.dropped",[a]),!1}p&&p.removeClass("fr-visible"),g.undo.canDo()||g.undo.saveStep(),setTimeout(function(){g.undo.saveStep()},0)}function o(e){if(e&&"DIV"===e.tagName&&g.node.hasClass(e,"fr-drag-helper"))e.parentNode.removeChild(e);else if(e&&e.nodeType===Node.ELEMENT_NODE)for(var t=e.querySelectorAll("div.fr-drag-helper"),r=0;r<t.length;r++)t[r].parentNode.removeChild(t[r])}return{_init:function i(){g.opts.enter===c.ENTER_BR&&(g.opts.dragInline=!0),g.events.on("dragstart",e,!0),g.events.on("dragover",t,!0),g.events.on("dragenter",r,!0),g.events.on("document.dragend",n,!0),g.events.on("document.drop",n,!0),g.events.on("drop",a,!0),g.events.on("html.processGet",o)}}}}); 720},{"froala-editor":8}],14:[function(require,module,exports){ 721/*! 722 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 723 * License https://froala.com/wysiwyg-editor/terms/ 724 * Copyright 2014-2023 Froala Labs 725 */ 726 727!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(e.FroalaEditor)}(this,function(m){"use strict";m=m&&m.hasOwnProperty("default")?m["default"]:m,Object.assign(m.POPUP_TEMPLATES,{"file.insert":"[_BUTTONS_][_UPLOAD_LAYER_][_PROGRESS_BAR_]"}),Object.assign(m.DEFAULTS,{fileUpload:!0,fileUploadURL:null,fileUploadParam:"file",fileUploadParams:{},fileUploadToS3:!1,fileUploadToAzure:!1,fileUploadMethod:"POST",fileMaxSize:10485760,fileAllowedTypes:["*"],fileInsertButtons:["fileBack","|"],fileUseSelectedText:!1}),m.PLUGINS.file=function(T){var i,u=T.$,A="https://i.froala.com/upload",c=2,v=3,g=4,S=5,P=6,o={};function k(){var e=T.popups.get("file.insert");e||(e=l()),e.find(".fr-layer.fr-active").removeClass("fr-active").addClass("fr-pactive"),e.find(".fr-file-progress-bar-layer").addClass("fr-active"),e.find(".fr-buttons").hide(),r(T.language.translate("Uploading"),0)}function a(e){var t=T.popups.get("file.insert");t&&(t.find(".fr-layer.fr-pactive").addClass("fr-active").removeClass("fr-pactive"),t.find(".fr-file-progress-bar-layer").removeClass("fr-active"),t.find(".fr-buttons").show(),e&&(T.events.focus(),T.popups.hide("file.insert")))}function r(e,t){var o=T.popups.get("file.insert");if(o){var i=o.find(".fr-file-progress-bar-layer");i.find("h3").text(e+(t?" ".concat(t,"%"):"")),i.removeClass("fr-error"),t?(i.find("div").removeClass("fr-indeterminate"),i.find("div > span").css("width","".concat(t,"%"))):i.find("div").addClass("fr-indeterminate")}}function h(e,t,o){T.edit.on(),T.events.focus(!0),T.selection.restore(),T.opts.fileUseSelectedText&&T.selection.text().length&&(t=T.selection.text()),T.html.insert('<a href="'.concat(e,'" target="_blank" id="fr-inserted-file" class="fr-file">').concat(t,"</a>"));var i=T.$el.find("#fr-inserted-file");i.removeAttr("id"),T.popups.hide("file.insert"),T.undo.saveStep(),f(),T.events.trigger("file.inserted",[i,o])}function w(e,t,o){var i=this.status,r=this.response,a=this.responseXML,n=this.responseText;try{if(T.opts.fileUploadToS3||T.opts.fileUploadToAzure)if(201===i){var s;if(T.opts.fileUploadToAzure){if(!1===T.events.trigger("file.uploadedToAzure",[this.responseURL,o,r],!0))return T.edit.on(),!1;s=t}else s=function p(e){try{var t=u(e).find("Location").text(),o=u(e).find("Key").text();return!1===T.events.trigger("file.uploadedToS3",[t,o,e],!0)?(T.edit.on(),!1):t}catch(i){return x(g,e),!1}}(a);s&&h(s,e,r||a)}else x(g,r||a);else if(200<=i&&i<300){var l=function f(e){try{if(!1===T.events.trigger("file.uploaded",[e],!0))return T.edit.on(),!1;var t=JSON.parse(e);return t.link?t:(x(c,e),!1)}catch(o){return x(g,e),!1}}(n);l&&h(l.link,e,r||n)}else x(v,r||n)}catch(d){x(g,r||n)}}function R(){x(g,this.response||this.responseText||this.responseXML)}function C(e){if(e.lengthComputable){var t=e.loaded/e.total*100|0;r(T.language.translate("Uploading"),t)}}function x(e,t){T.edit.on(),function i(e){k();var t=T.popups.get("file.insert").find(".fr-file-progress-bar-layer");t.addClass("fr-error");var o=t.find("h3");o.text(e),T.events.disableBlur(),o.focus()}(T.language.translate("Something went wrong. Please try again.")),T.events.trigger("file.error",[{code:e,message:o[e]},t])}function z(){T.edit.on(),a(!0)}function n(e){if(void 0!==e&&0<e.length){var t=e[0].type;if(e[0].name&&e[0].name.endsWith(".msg")&&(t="application/vnd.ms-outlook"),!1===T.events.trigger("file.beforeUpload",[e]))return!1;var o,i=e[0];
vendor: 5,835 bytes, line 727
727if(!(null!==T.opts.fileUploadURL&&T.opts.fileUploadURL!==A||T.opts.fileUploadToS3||T.opts.fileUploadToAzure))return function y(a){var n=new FileReader;n.onload=function(){for(var e=n.result,t=atob(n.result.split(",")[1]),o=[],i=0;i<t.length;i++)o.push(t.charCodeAt(i));var r=a.type;a.name&&a.name.endsWith(".msg")&&(r="application/vnd.ms-outlook"),e=window.URL.createObjectURL(new Blob([new Uint8Array(o)],{type:r})),T.file.insert(e,a.name,null)},k(),n.readAsDataURL(a)}(i),!1;if(i.size>T.opts.fileMaxSize)return x(S),!1;if(T.opts.fileAllowedTypes.indexOf("*")<0&&T.opts.fileAllowedTypes.indexOf(t.replace(/file\//g,""))<0)return x(P),!1;if(T.drag_support.formdata&&(o=T.drag_support.formdata?new FormData:null),o){var r;if(!1!==T.opts.fileUploadToS3)for(r in o.append("key",T.opts.fileUploadToS3.keyStart+(new Date).getTime()+"-"+(i.name||"untitled")),o.append("success_action_status","201"),o.append("X-Requested-With","xhr"),o.append("Content-Type",t),T.opts.fileUploadToS3.params)T.opts.fileUploadToS3.params.hasOwnProperty(r)&&o.append(r,T.opts.fileUploadToS3.params[r]);for(r in T.opts.fileUploadParams)T.opts.fileUploadParams.hasOwnProperty(r)&&o.append(r,T.opts.fileUploadParams[r]);o.append(T.opts.fileUploadParam,i);var a,n,s=T.opts.fileUploadURL;T.opts.fileUploadToS3&&(s=T.opts.fileUploadToS3.uploadURL?T.opts.fileUploadToS3.uploadURL:"https://".concat(T.opts.fileUploadToS3.region,".amazonaws.com/").concat(T.opts.fileUploadToS3.bucket));var l=T.opts.fileUploadMethod;T.opts.fileUploadToAzure&&(s=T.opts.fileUploadToAzure.uploadURL?"".concat(T.opts.fileUploadToAzure.uploadURL,"/").concat(i.name):encodeURI("https://".concat(T.opts.fileUploadToAzure.account,".blob.core.windows.net/").concat(T.opts.fileUploadToAzure.container,"/").concat(i.name)),a=s,T.opts.fileUploadToAzure.SASToken&&(s+=T.opts.fileUploadToAzure.SASToken),l="PUT");var p=T.core.getXHR(s,l);if(T.opts.fileUploadToAzure){var f=(new Date).toUTCString();if(!T.opts.fileUploadToAzure.SASToken&&T.opts.fileUploadToAzure.accessKey){var d=T.opts.fileUploadToAzure.account,u=T.opts.fileUploadToAzure.container;if(T.opts.fileUploadToAzure.uploadURL){var c=T.opts.fileUploadToAzure.uploadURL.split("/");u=c.pop(),d=c.pop().split(".")[0]}var v="x-ms-blob-type:BlockBlob\nx-ms-date:".concat(f,"\nx-ms-version:2019-07-07"),g=encodeURI("/"+d+"/"+u+"/"+i.name),h=l+"\n\n\n"+i.size+"\n\n"+t+"\n\n\n\n\n\n\n"+v+"\n"+g,U=T.cryptoJSPlugin.cryptoJS.HmacSHA256(h,T.cryptoJSPlugin.cryptoJS.enc.Base64.parse(T.opts.fileUploadToAzure.accessKey)).toString(T.cryptoJSPlugin.cryptoJS.enc.Base64),m="SharedKey "+d+":"+U;n=U,p.setRequestHeader("Authorization",m)}for(r in p.setRequestHeader("x-ms-version","2019-07-07"),p.setRequestHeader("x-ms-date",f),p.setRequestHeader("Content-Type",t),p.setRequestHeader("x-ms-blob-type","BlockBlob"),T.opts.fileUploadParams)T.opts.fileUploadParams.hasOwnProperty(r)&&p.setRequestHeader(r,T.opts.fileUploadParams[r]);for(r in T.opts.fileUploadToAzure.params)T.opts.fileUploadToAzure.params.hasOwnProperty(r)&&p.setRequestHeader(r,T.opts.fileUploadToAzure.params[r])}p.onload=function(){w.call(p,i.name,a,n)},p.onerror=R,p.upload.onprogress=C,p.onabort=z,k();var b=T.popups.get("file.insert");b&&(b.off("abortUpload"),b.on("abortUpload",function(){4!==p.readyState&&p.abort()})),p.send(T.opts.fileUploadToAzure?i:o)}}}function s(){a()}function l(e){if(e)return T.popups.onHide("file.insert",s),!0;var t;T.opts.fileUpload||T.opts.fileInsertButtons.splice(T.opts.fileInsertButtons.indexOf("fileUpload"),1),t='<div class="fr-buttons fr-tabs">'.concat(T.button.buildList(T.opts.fileInsertButtons),"</div>");var o="";T.opts.fileUpload&&(o='<div class="fr-file-upload-layer fr-layer fr-active" id="fr-file-upload-layer-'.concat(T.id,'"><strong>').concat(T.language.translate("Drop file"),"</strong><br>(").concat(T.language.translate("or click"),')<div class="fr-form"><input type="file" name="').concat(T.opts.fileUploadParam,'" accept="').concat(0<=T.opts.fileAllowedTypes.indexOf("*")?"/":"").concat(T.opts.fileAllowedTypes.join(", ").toLowerCase(),'" tabIndex="-1" aria-labelledby="fr-file-upload-layer-').concat(T.id,'" role="button"></div></div>'));var i={buttons:t,upload_layer:o,progress_bar:'<div class="fr-file-progress-bar-layer fr-layer"><h3 tabIndex="-1" class="fr-message">Uploading</h3><div class="fr-loader"><span class="fr-progress"></span></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-dismiss" data-cmd="fileDismissError" tabIndex="2" role="button">OK</button></div></div>'},r=T.popups.create("file.insert",i);return function a(o){T.events.$on(o,"dragover dragenter",".fr-file-upload-layer",function(){return u(this).addClass("fr-drop"),!1},!0),T.events.$on(o,"dragleave dragend",".fr-file-upload-layer",function(){return u(this).removeClass("fr-drop"),!1},!0),T.events.$on(o,"drop",".fr-file-upload-layer",function(e){e.preventDefault(),e.stopPropagation(),u(this).removeClass("fr-drop");var t=e.originalEvent.dataTransfer;t&&t.files&&(o.data("instance")||T).file.upload(t.files)},!0),T.helpers.isIOS()&&T.events.$on(o,"touchstart",'.fr-file-upload-layer input[type="file"]',function(){u(this).trigger("click")}),T.events.$on(o,"change",'.fr-file-upload-layer input[type="file"]',function(){if(this.files){var e=o.data("instance")||T;e.events.disableBlur(),o.find("input:focus").blur(),e.events.enableBlur(),e.file.upload(this.files)}u(this).val("")},!0)}(r),r}function t(e){T.node.hasClass(e,"fr-file")}function p(e){var t=e.originalEvent.dataTransfer;if(t&&t.files&&t.files.length){var o=t.files[0];if(o&&"undefined"!=typeof o.type){if(o.type.indexOf("image")<0){if(!T.opts.fileUpload)return e.preventDefault(),e.stopPropagation(),!1;T.markers.remove(),T.markers.insertAtPoint(e.originalEvent),T.$el.find(".fr-marker").replaceWith(m.MARKERS),T.popups.hideAll();var i=T.popups.get("file.insert");
vendor: 4,410 bytes, lines 727-735
727return i||(i=l()),T.popups.setContainer("file.insert",T.$sc),T.popups.show("file.insert",e.originalEvent.pageX,e.originalEvent.pageY),k(),n(t.files),e.preventDefault(),e.stopPropagation(),!1}}else o.type.indexOf("image")<0&&(e.preventDefault(),e.stopPropagation())}}function f(){var e,t=Array.prototype.slice.call(T.el.querySelectorAll("a.fr-file")),o=[];for(e=0;e<t.length;e++)o.push(t[e].getAttribute("href"));if(i)for(e=0;e<i.length;e++)o.indexOf(i[e].getAttribute("href"))<0&&T.events.trigger("file.unlink",[i[e]]);i=t}return o[1]="File cannot be loaded from the passed link.",o[c]="No link in upload response.",o[v]="Error during file upload.",o[g]="Parsing response failed.",o[S]="File is too large.",o[P]="File file type is invalid.",o[7]="Files can be uploaded only to same domain in IE 8 and IE 9.",{_init:function d(){!function e(){T.events.on("drop",p),T.events.$on(T.$win,"keydown",function(e){var t=e.which,o=T.popups.get("file.insert");o&&t===m.KEYCODE.ESC&&o.trigger("abortUpload")}),T.events.on("destroy",function(){var e=T.popups.get("file.insert");e&&e.trigger("abortUpload")})}(),T.events.on("link.beforeRemove",t),T.$wp&&(f(),T.events.on("contentChanged",f)),l(!0)},showInsertPopup:function U(){var e=T.$tb.find('.fr-command[data-cmd="insertFile"]'),t=T.popups.get("file.insert");if(t||(t=l()),a(),!t.hasClass("fr-active"))if(T.popups.refresh("file.insert"),T.popups.setContainer("file.insert",T.$tb),e.isVisible){var o=T.button.getPosition(e),i=o.left,r=o.top;T.popups.show("file.insert",i,r,e.outerHeight())}else T.position.forSelection(t),T.popups.show("file.insert")},upload:n,insert:h,back:function e(){T.events.disableBlur(),T.selection.restore(),T.events.enableBlur(),T.popups.hide("file.insert"),T.toolbar.showInline()},hideProgressBar:a}},m.DefineIcon("insertFile",{NAME:"file-o",FA5NAME:"file",SVG_KEY:"insertFile"}),m.RegisterCommand("insertFile",{title:"Upload File",undo:!1,focus:!0,refreshAfterCallback:!1,popup:!0,callback:function(){this.popups.isVisible("file.insert")?(this.$el.find(".fr-marker").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide("file.insert")):this.file.showInsertPopup()},plugin:"file"}),m.DefineIcon("fileBack",{NAME:"arrow-left",SVG_KEY:"back"}),m.RegisterCommand("fileBack",{title:"Back",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.file.back()},refresh:function(e){this.opts.toolbarInline?(e.removeClass("fr-hidden"),e.next(".fr-separator").removeClass("fr-hidden")):(e.addClass("fr-hidden"),e.next(".fr-separator").addClass("fr-hidden"))}}),m.RegisterCommand("fileDismissError",{title:"OK",callback:function(){this.file.hideProgressBar(!0)}})}); 728},{"froala-editor":8}],15:[function(require,module,exports){ 729/*! 730 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 731 * License https://froala.com/wysiwyg-editor/terms/ 732 * Copyright 2014-2023 Froala Labs 733 */ 734 735!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(e.FroalaEditor)}(this,function(Me){"use strict";function Ke(e){return(Ke="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}Me=Me&&Me.hasOwnProperty("default")?Me["default"]:Me,Object.assign(Me.POPUP_TEMPLATES,{"image.insert":"[_BUTTONS_][_UPLOAD_LAYER_][_BY_URL_LAYER_][_PROGRESS_BAR_]","image.edit":"[_BUTTONS_]","image.alt":"[_BUTTONS_][_ALT_LAYER_]","image.size":"[_BUTTONS_][_SIZE_LAYER_]"}),Object.assign(Me.DEFAULTS,{imageInsertButtons:["imageBack","|","imageUpload","imageByURL"],imageEditButtons:["imageReplace","imageAlign","imageCaption","imageRemove","imageLink","linkOpen","linkEdit","linkRemove","-","imageDisplay","imageStyle","imageAlt","imageSize"],imageAltButtons:["imageBack","|"],imageSizeButtons:["imageBack","|"],imageUpload:!0,imageUploadURL:null,imageCORSProxy:"https://cors-anywhere.froala.com",imageUploadRemoteUrls:!0,imageUploadParam:"file",imageUploadParams:{},imageUploadToS3:!1,imageUploadToAzure:!1,imageUploadMethod:"POST",imageMaxSize:10485760,imageAllowedTypes:["jpeg","jpg","png","gif","webp"],imageResize:!0,imageResizeWithPercent:!1,imageRoundPercent:!1,imageDefaultWidth:300,imageDefaultAlign:"center",imageDefaultDisplay:"block",imageSplitHTML:!1,imageStyles:{"fr
735-rounded":"Rounded","fr-bordered":"Bordered","fr-shadow":"Shadow"},imageMove:!0,imageMultipleStyles:!0,imageTextNear:!0,imagePaste:!0,imagePasteProcess:!1,imageMinWidth:16,imageOutputSize:!1,imageDefaultMargin:5,imageAddNewLine:!1}),Me.IMAGE_ALLOW_REGEX=/\.(gif|jpe?g|tiff?|png|webp|bmp)$/i,Me.PLUGINS.image=function(A){var C,p,g,f,s,a,S=A.$,E="https://i.froala.com/upload",t=!1,i=1,c=2,d=3,m=4,R=5,U=6,r={};function u(){var e=A.popups.get("image.insert").find(".fr-image-by-url-layer input");e.val(""),C&&e.val(C.attr("src")),e.trigger("change")}function o(e){return window.pageYOffset+e.get(0).getBoundingClientRect().top}function n(){var e=A.popups.get("image.edit");if(e||(e=P()),e){var t=C;A.popups.setContainer("image.edit",A.$sc),A.popups.refresh("image.edit");var a=t.offset().left+t.outerWidth()/2,i=t&&o(t),r=A.$wp&&o(A.$wp);r||(r=i);var n=0;A.opts.iframe?((n=A.$wp.scrollTop()+e.outerHeight())<t.get(0).getBoundingClientRect().top&&(n=t.get(0).getBoundingClientRect().top),n>t.get(0).getBoundingClientRect().top+t.height()&&(n=t.get(0).getBoundingClientRect().top+t.height())):n=r<i?i:A.$wp&&i+t.height()<r+A.$wp.height()?i+t.height():r+e.outerHeight(),C.hasClass("fr-uploading")?N():A.popups.show("image.edit",a,n,1,!0)}}function h(){k()}function l(e){0<e.parents(".fr-img-caption").length&&(e=e.parents(".fr-img-caption").first());var t=e.hasClass("fr-dib")?"block":e.hasClass("fr-dii")?"inline":null,a=e.hasClass("fr-fil")?"left":e.hasClass("fr-fir")?"right":ve(e);he(e,t,a),e.removeClass("fr-dib fr-dii fr-fir fr-fil")}function v(){for(var e,t="IMG"==A.el.tagName?[A.el]:A.el.querySelectorAll("img"),a=0;a<t.length;a++){var i=S(t[a]);!A.opts.htmlUntouched&&A.opts.useClasses?((A.opts.imageDefaultAlign||A.opts.imageDefaultDisplay)&&(0<(e=i).parents(".fr-img-caption").length&&(e=e.parents(".fr-img-caption").first()),e.hasClass("fr-dii")||e.hasClass("fr-dib")||(e.addClass("fr-fi".concat(ve(e)[0])),e.addClass("fr-di".concat(be(e)[0])),e.css("margin",""),e.css("float",""),e.css("display",""),e.css("z-index",""),e.css("position",""),e.css("overflow",""),e.css("vertical-align",""))),A.opts.imageTextNear||(0<i.parents(".fr-img-caption").length?i.parents(".fr-img-caption").first().removeClass("fr-dii").addClass("fr-dib"):i.removeClass("fr-dii").addClass("fr-dib"))):A.opts.htmlUntouched||A.opts.useClasses||(A.opts.imageDefaultAlign||A.opts.imageDefaultDisplay)&&l(i),A.opts.iframe&&i.on("load",A.size.syncIframe)}}function b(e){void 0===e&&(e=!0);var t,a=Array.prototype.slice.call(A.el.querySelectorAll("img")),i=[];for(t=0;t<a.length;t++)if(i.push(a[t].getAttribute("src")),S(a[t]).toggleClass("fr-draggable",A.opts.imageMove),""===a[t].getAttribute("class")&&a[t].removeAttribute("class"),""===a[t].getAttribute("style")&&a[t].removeAttribute("style"),a[t].parentNode&&a[t].parentNode.parentNode&&A.node.hasClass(a[t].parentNode.parentNode,"fr-img-caption")){var r=a[t].parentNode.parentNode;A.browser.mozilla||r.setAttribute("contenteditable",!1),r.setAttribute("draggable",!1),r.classList.add("fr-draggable");var n=a[t].nextSibling;n&&!A.browser.mozilla&&n.setAttribute("contenteditable",!0)}if(s)for(t=0;t<s.length;t++)i.indexOf(s[t].getAttribute("src"))<0&&A.events.trigger("image.removed",[S(s[t])]);if(s&&e){var o=[];for(t=0;t<s.length;t++)o.push(s[t].getAttribute("src"));for(t=0;t<a.length;t++)o.indexOf(a[t].getAttribute("src"))<0&&A.events.trigger("image.loaded",[S(a[t])])}s=a}function D(){if(p||function o(){var e;A.shared.$image_resizer?(p=A.shared.$image_resizer,f=A.shared.$img_overlay,A.events.on("destroy",function(){S("body").first().append(p.removeClass("fr-active"))},!0)):(A.shared.$image_resizer=S(document.createElement("div")).attr("class","fr-image-resizer"),p=A.shared.$image_resizer,A.events.$on(p,"mousedown",function(e){e.stopPropagation()},!0),A.opts.imageResize&&(p.append(y("nw")+y("ne")+y("sw")+y("se")),A.shared.$img_overlay=S(document.createElement("div")).attr("class","fr-image-overlay"),f=A.shared.$img_overlay,e=p.get(0).ownerDocument,S(e).find("body").first().append(f)));A.events.on("shared.destroy",function(){p.html("").removeData().remove(),p=null,A.opts.imageResize&&(f.remove(),f=null)},!0),A.helpers.isMobile()||A.events.$on(S(A.o_win),"resize",function(){C&&!C.hasClass("fr-uploading")?ce(!0):C&&(D(),ye(),N(!1))});if(A.opts.imageResize){e=p.get(0).ownerDocument,A.events.$on(p,A._mousedown,".fr-handler",x),A.events.$on(S(e),A._mousemove,T),A.events.$on(S(e.defaultView||e.parentWindow),A._mouseup,$),A.events.$on(f,"mouseleave",$);var i=1,r=null,n=0;A.events.on("keydown",function(e){if(C){var t=-1!=navigator.userAgent.indexOf("Mac OS X")?e.metaKey:e.ctrlKey,a=e.which;(a!==r||200<e.timeStamp-n)&&(i=1),(a==Me.KEYCODE.EQUALS||A.browser.mozilla&&a==Me.KEYCODE.FF_EQUALS)&&t&&!e.altKey?i=te.call(this,e,1,1,i):(a==Me.KEYCODE.HYPHEN||A.browser.mozilla&&a==Me.KEYCODE.FF_HYPHEN)&&t&&!e.altKey?i=te.call(this,e,2,-1,i):A.keys.ctrlKey(e)||a!=Me.KEYCODE.ENTER||(C.before("<br>"),z(C)),r=a,n=e.timeStamp}},!0),A.events.on("keyup",function(){i=1})}}(),!C)return!1;var e=A.$wp||A.$sc;e.append(p),p.data("instance",A);var t=e.scrollTop()-("static"!=e.css("position")?e.offset().top:0),a=e.scrollLeft()-("static"!=e.css("position")?e.offset().left:0);a-=A.helpers.getPX(e.css("border-left-width")),t-=A.helpers.getPX(e.css("border-top-width")),A.$el.is("img")&&A.$sc.is("body")&&(a=t=0);var i=Ce();Se()&&(i=i.find(".fr-img-wrap"));var r=0,n=0;A.opts.iframe&&(r=A.helpers.getPX(A.$wp.find(".fr-iframe").css("padding-top")),n=A.helpers.getPX(A.$wp.find(".fr-iframe").css("padding-left"))),p.css("top",(A.opts.iframe?i.offset().top+r:i.offset().top+t)-1).css("left",(A.opts.iframe?i.offset().left+n:i.offset().left+a)-1).css("width",i.get(0).getBoundingClientRect().width).css("height",i.get(0).getBoundingClientRect().height).addClass("fr-active")}function y(e){return'<div class="fr-handler fr-h'.concat(e,'"></div>')}function w(e){Se()&&C.parents(".fr-img-caption").css("width",e),C.css("width",e)}function x(e){if(!A.core.sameInstance(p))return!0;
vendor: 19,404 bytes, line 735
735if(e.preventDefault(),e.stopPropagation(),A.$el.find("img.fr-error").left)return!1;A.undo.canDo()||A.undo.saveStep();var t=e.pageX||e.originalEvent.touches[0].pageX;if("mousedown"==e.type){var a=A.$oel.get(0),i=a.ownerDocument,r=i.defaultView||i.parentWindow,n=!1;try{n=r.location!=r.parent.location&&!(r.$&&r.$.FE)}catch(l){}n&&r.frameElement&&(t+=A.helpers.getPX(S(a).offset().left)+r.frameElement.clientLeft)}(g=S(this)).data("start-x",t),g.data("start-width",C.width()),g.data("start-height",C.height());var o=C.width();if(A.opts.imageResizeWithPercent){var s=C.parentsUntil(A.$el,A.html.blockTagsQuery()).get(0)||A.el;o=(o/S(s).outerWidth()*100).toFixed(2)+"%"}w(o),f.show(),A.popups.hideAll(),ue()}function T(e){if(!A.core.sameInstance(p))return!0;var t;if(g&&C){if(e.preventDefault(),A.$el.find("img.fr-error").left)return!1;var a=e.pageX||(e.originalEvent.touches?e.originalEvent.touches[0].pageX:null);if(!a)return!1;var i=a-g.data("start-x"),r=g.data("start-width");if((g.hasClass("fr-hnw")||g.hasClass("fr-hsw"))&&(i=0-i),A.opts.imageResizeWithPercent){var n=C.parentsUntil(A.$el,A.html.blockTagsQuery()).get(0)||A.el;r=((r+i)/S(n).outerWidth()*100).toFixed(2),A.opts.imageRoundPercent&&(r=Math.round(r)),w("".concat(r,"%")),(t=Se()?(A.helpers.getPX(C.parents(".fr-img-caption").css("width"))/S(n).outerWidth()*100).toFixed(2):(A.helpers.getPX(C.css("width"))/S(n).outerWidth()*100).toFixed(2))===r||A.opts.imageRoundPercent||w("".concat(t,"%")),C.css("height","").removeAttr("height")}else r+i>=A.opts.imageMinWidth&&(w(r+i),t=Se()?A.helpers.getPX(C.parents(".fr-img-caption").css("width")):A.helpers.getPX(C.css("width"))),t!==r+i&&w(t),((C.attr("style")||"").match(/(^height:)|(; *height:)/)||C.attr("height"))&&(C.css("height",g.data("start-height")*C.width()/g.data("start-width")),C.removeAttr("height"));D(),A.events.trigger("image.resize",[Ae()])}}function $(e){if(!A.core.sameInstance(p))return!0;if(g&&C){if(e&&e.stopPropagation(),A.$el.find("img.fr-error").left)return!1;g=null,f.hide(),D(),n(),A.undo.saveStep(),A.events.trigger("image.resizeEnd",[Ae()])}else p.removeClass("fr-active")}function I(e,t,a){A.edit.on(),C&&C.addClass("fr-error"),r[e]?O(A.language.translate(r[e])):O(A.language.translate("Something went wrong. Please try again.")),!C&&a&&ae(a),A.events.trigger("image.error",[{code:e,message:r[e]},t,a])}function P(e){if(e)return A.$wp&&A.events.$on(A.$wp,"scroll.image-edit",function(){C&&A.popups.isVisible("image.edit")&&(A.events.disableBlur(),n())}),!0;var t="";if(0<A.opts.imageEditButtons.length){var a={buttons:t+='<div class="fr-buttons">\n '.concat(A.button.buildList(A.opts.imageEditButtons),"\n </div>")};return A.popups.create("image.edit",a)}return!1}function N(e){var t=A.popups.get("image.insert");if(t||(t=X()),t.find(".fr-layer.fr-active").removeClass("fr-active").addClass("fr-pactive"),t.find(".fr-image-progress-bar-layer").addClass("fr-active"),t.find(".fr-buttons").hide(),C){var a=Ce();A.popups.setContainer("image.insert",A.$sc);var i=a.offset().left,r=a.offset().top+a.height();A.popups.show("image.insert",i,r,a.outerHeight())}void 0===e&&B(A.language.translate("Uploading"),0)}function k(e){var t=A.popups.get("image.insert");if(t&&(t.find(".fr-layer.fr-pactive").addClass("fr-active").removeClass("fr-pactive"),t.find(".fr-image-progress-bar-layer").removeClass("fr-active"),t.find(".fr-buttons").show(),e||A.$el.find("img.fr-error").length)){if(A.events.focus(),A.$el.find("img.fr-error").length&&(A.$el.find("img.fr-error").remove(),A.undo.saveStep(),A.undo.run(),A.undo.dropRedo()),!A.$wp&&C){var a=C;ce(!0),A.selection.setAfter(a.get(0)),A.selection.restore()}A.popups.hide("image.insert")}}function B(e,t){var a=A.popups.get("image.insert");if(a){var i=a.find(".fr-image-progress-bar-layer");i.find("h3").text(e+(t?" ".concat(t,"%"):"")),i.removeClass("fr-error"),t?(i.find("div").removeClass("fr-indeterminate"),i.find("div > span").css("width","".concat(t,"%"))):i.find("div").addClass("fr-indeterminate")}}function O(e){N();var t=A.popups.get("image.insert").find(".fr-image-progress-bar-layer");t.addClass("fr-error");var a=t.find("h3");a.text(e),A.events.disableBlur(),a.focus()}function z(e){fe.call(e.get(0))}function L(){var e=S(this);A.popups.hide("image.insert"),e.removeClass("fr-uploading"),e.next().is("br")&&e.next().remove(),z(e),A.events.trigger("image.loaded",[e])}function _(o,e,s,l,p){l&&"string"==typeof l&&(l=A.$(l)),A.edit.off(),B(A.language.translate("Loading image")),e&&(o=A.helpers.sanitizeURL(o));var t=new Image;t.onload=function(){var e,t;if(l){A.undo.canDo()||l.hasClass("fr-uploading")||A.undo.saveStep();var a=l.data("fr-old-src");l.data("fr-image-pasted")&&(a=null),A.$wp?((e=l.clone().removeData("fr-old-src").removeClass("fr-uploading").removeAttr("data-fr-image-pasted")).off("load"),a&&l.attr("src",a),!A.opts.trackChangesEnabled||l[0].parentNode&&"SPAN"===l[0].parentNode.tagName&&l[0].parentNode.hasAttribute("data-tracking")||A.track_changes.replaceSpecialItem(l),l.replaceWith(e)):e=l;for(var i=e.get(0).attributes,r=0;r<i.length;r++){var n=i[r];0===n.nodeName.indexOf("data-")?e.removeAttr(n.nodeName):s&&s.hasOwnProperty(n.nodeName)&&e.removeAttr(n.nodeName)}if(void 0!==s)for(t in s)s.hasOwnProperty(t)&&"link"!=t&&e.attr("".concat(t),s[t]);e.on("load",L),e.attr("src",o),A.edit.on(),b(!1),l[0].src!=o&&A.selection.restore(),A.undo.saveStep(),A.events.disableBlur(),A.$el.blur(),A.events.trigger(a?"image.replaced":"image.inserted",[e,p])}else(e=W(o,s,L))&&(b(!1),A.undo.saveStep(),A.events.disableBlur(),A.$el.blur(),A.events.trigger("image.inserted",[e,p]))},t.onerror=function(){I(i)},N(A.language.translate("Loading image")),t.src=o}function M(e,t,a){B(A.language.translate("Loading image"));var i=this.status,r=this.response,n=this.responseXML,o=this.responseText;try{if(A.opts.imageUploadToS3||A.opts.imageUploadToAzure)if(201==i){var s;if(A.opts.imageUploadToAzure){if(!1===A.events.trigger("image.uploadedToAzure",[this.responseURL,a,r],!0))return A.edit.on(),!1;s=t}else s=function p(e){try{var t=S(e).find("Location").text(),a=S(e).find("Key").text();return!1===A.events.trigger("image.uploadedToS3",[t,a,e],!0)?(A.edit.on(),!1):t}catch(i){return I(m,e),!1}}(n);s&&_(s,!1,[],e,r||n)}else I(m,r||n,e);else if(200<=i&&i<300){var l=function g(e){try{if(!1===A.events.trigger("image.uploaded",[e],!0))return A.edit.on(),!1;var t=JSON.parse(e);return t.link?t:(I(c,e),!1)}catch(a){return I(m,e),!1}}(o);l&&_(l.link,!1,l,e,r||o)}else I(d,r||o,e)}catch(f){I(m,r||o,e)}}function K(){I(m,this.response||this.responseText||this.responseXML)}function Y(e){if(e.lengthComputable){var t=e.loaded/e.total*100|0;B(A.language.translate("Uploading"),t)}}function W(e,t,a){var i,r=S(document.createElement("img")).attr("src",e);if(t&&void 0!==t)for(i in t)t.hasOwnProperty(i)&&"link"!=i&&(" data-".concat(i,'="').concat(t[i],'"'),r.attr("".concat(i),t[i]));var n=A.opts.imageDefaultWidth;n&&"auto"!=n&&(n=A.opts.imageResizeWithPercent?"100%":"".concat(n,"px")),r.attr("style",n?"width: ".concat(n,";"):""),he(r,A.opts.imageDefaultDisplay,A.opts.imageDefaultAlign),r.on("load",a),r.on("error",a),A.edit.on(),A.events.focus(!0),A.selection.restore(),A.undo.saveStep(),A.opts.imageSplitHTML?A.markers.split():A.markers.insert(),A.html.wrap();var o=A.$el.find(".fr-marker");if(o.length)(o.parent().is("hr")||o.parent().is("IMG"))&&o.parent().after(o),A.node.isLastSibling(o)&&o.parent().hasClass("fr-deletable")&&o.insertAfter(o.parent()),o.replaceWith(r);else{if(A.opts.trackChangesEnabled)return k(!0),!1;A.$el.append(r)}return A.selection.clear(),r}function G(){A.edit.on(),k(!0)}function H(e,t){if(void 0!==e&&0<e.length){if(!1===A.events.trigger("image.beforeUpload",[e,t]))return!1;var a,i=e[0];if(!(null!==A.opts.imageUploadURL&&A.opts.imageUploadURL!=E||A.opts.imageUploadToS3||A.opts.imageUploadToAzure))return function y(r,n){var o=new FileReader;o.onload=function(){var e=o.result;if(o.result.indexOf("svg+xml")<0){for(var t=atob(o.result.split(",")[1]),a=[],i=0;i<t.length;i++)a.push(t.charCodeAt(i));e=window.URL.createObjectURL(new Blob([new Uint8Array(a)],{type:r.type})),n&&n.data("fr-old-src",n.attr("src")),A.image.insert(e,!1,null,n)}else A.image.insert(e,null,null,A.image.get())},N(),o.readAsDataURL(r)}(i,t||C),!1;if(i.name||(i.name=(new Date).getTime()+"."+(i.type||"image/jpeg").replace(/image\//g,"")),i.size>A.opts.imageMaxSize)return I(R),!1;if(A.opts.imageAllowedTypes.indexOf(i.type.replace(/image\//g,""))<0)return I(U),!1;if(A.drag_support.formdata&&(a=A.drag_support.formdata?new FormData:null),a){var r;if(!1!==A.opts.imageUploadToS3)for(r in a.append("key",A.opts.imageUploadToS3.keyStart+(new Date).getTime()+"-"+(i.name||"untitled")),a.append("success_action_status","201"),a.append("X-Requested-With","xhr"),a.append("Content-Type",i.type),A.opts.imageUploadToS3.params)A.opts.imageUploadToS3.params.hasOwnProperty(r)&&a.append(r,A.opts.imageUploadToS3.params[r]);for(r in A.opts.imageUploadParams)A.opts.imageUploadParams.hasOwnProperty(r)&&a.append(r,A.opts.imageUploadParams[r]);a.append(A.opts.imageUploadParam,i,i.name);var n,o,s=A.opts.imageUploadURL,l=A.opts.imageUploadMethod;A.opts.imageUploadToS3&&(s=A.opts.imageUploadToS3.uploadURL?A.opts.imageUploadToS3.uploadURL:"https://".concat(A.opts.imageUploadToS3.region,".amazonaws.com/").concat(A.opts.imageUploadToS3.bucket)),A.opts.imageUploadToAzure&&(n=s=A.opts.imageUploadToAzure.uploadURL?"".concat(A.opts.imageUploadToAzure.uploadURL,"/").concat(i.name):encodeURI("https://".concat(A.opts.imageUploadToAzure.account,".blob.core.windows.net/").concat(A.opts.imageUploadToAzure.container,"/").concat(i.name)),A.opts.imageUploadToAzure.SASToken&&(s+=A.opts.imageUploadToAzure.SASToken),l="PUT");var p=A.core.getXHR(s,l);if(A.opts.imageUploadToAzure){var g=(new Date).toUTCString();if(!A.opts.imageUploadToAzure.SASToken&&A.opts.imageUploadToAzure.accessKey){var f=A.opts.imageUploadToAzure.account,c=A.opts.imageUploadToAzure.container;if(A.opts.imageUploadToAzure.uploadURL){var d=A.opts.imageUploadToAzure.uploadURL.split("/");c=d.pop(),f=d.pop().split(".")[0]}var m="x-ms-blob-type:BlockBlob\nx-ms-date:".concat(g,"\nx-ms-version:2019-07-07"),u=encodeURI("/"+f+"/"+c+"/"+i.name),h=l+"\n\n\n"+i.size+"\n\n"+i.type+"\n\n\n\n\n\n\n"+m+"\n"+u,v=A.cryptoJSPlugin.cryptoJS.HmacSHA256(h,A.cryptoJSPlugin.cryptoJS.enc.Base64.parse(A.opts.imageUploadToAzure.accessKey)).toString(A.cryptoJSPlugin.cryptoJS.enc.Base64),b="SharedKey "+f+":"+v;o=v,p.setRequestHeader("Authorization",b)}for(r in p.setRequestHeader("x-ms-version","2019-07-07"),p.setRequestHeader("x-ms-date",g),p.setRequestHeader("Content-Type",i.type),p.setRequestHeader("x-ms-blob-type","BlockBlob"),A.opts.imageUploadParams)A.opts.imageUploadParams.hasOwnProperty(r)&&p.setRequestHeader(r,A.opts.imageUploadParams[r]);for(r in A.opts.imageUploadToAzure.params)A.opts.imageUploadToAzure.params.hasOwnProperty(r)&&p.setRequestHeader(r,A.opts.imageUploadToAzure.params[r])}!function w(t,a,i,r,n,o){function s(){var e=S(this);e.off("load"),e.addClass("fr-uploading"),e.next().is("br")&&e.next().remove(),A.placeholder.refresh(),z(e),D(),N(),A.edit.off(),t.onload=function(){M.call(t,e,n,o)},t.onerror=K,t.upload.onprogress=Y,t.onabort=G,S(e.off("abortUpload")).on("abortUpload",function(){4!=t.readyState&&(t.abort(),r?(r.attr("src",r.data("fr-old-src")),r.removeClass("fr-uploading")):e.remove(),ce(!0))}),t.send(A.opts.imageUploadToAzure?i:a)}var l=new FileReader;l.onload=function(){var e=l.result;if(l.result.indexOf("svg+xml")<0){for(var t=atob(l.result.split(",")[1]),a=[],i=0;i<t.length;i++)a.push(t.charCodeAt(i));e=window.URL.createObjectURL(new Blob([new Uint8Array(a)],{type:"image/jpeg"}))}r?(r.on("load",s),r.on("error",function(){s(),S(this).off("error")}),A.edit.on(),A.undo.saveStep(),r.data("fr-old-src",r.attr("src")),r.attr("src",e)):W(e,null,s)},l.readAsDataURL(i)}(p,a,i,t||C,n,o)}}}function F(e){if(e.is("img")&&0<e.parents(".fr-img-caption").length)return e.parents(".fr-img-caption")}function V(e){var t=e.originalEvent.dataTransfer;if(t&&t.files&&t.files.length){var a=t.files[0];if(a&&a.type&&-1!==a.type.indexOf("image")&&0<=A.opts.imageAllowedTypes.indexOf(a.type.replace(/image\//g,""))){if(!A.opts.imageUpload)return e.preventDefault(),e.stopPropagation(),!1;A.markers.remove(),A.markers.insertAtPoint(e.originalEvent),A.$el.find(".fr-marker").replaceWith(Me.MARKERS),0===A.$el.find(".fr-marker").length&&A.selection.setAtEnd(A.el),A.popups.hideAll();var i=A.popups.get("image.insert");i||(i=X()),A.popups.setContainer("image.insert",A.$sc);var r=e.originalEvent.pageX,n=e.originalEvent.pageY;if(A.opts.iframe){var o=A.helpers.getPX(A.$wp.find(".fr-iframe").css("padding-top")),s=A.helpers.getPX(A.$wp.find(".fr-iframe").css("padding-left"));n+=A.$iframe.offset().top+o,r+=A.$iframe.offset().left+s}return A.popups.show("image.insert",r,n),N(),0<=A.opts.imageAllowedTypes.indexOf(a.type.replace(/image\//g,""))?(ce(!0),H(t.files)):I(U),e.preventDefault(),e.stopPropagation(),!1}}}function X(e){if(e)return A.popups.onRefresh("image.insert",u),A.popups.onHide("image.insert",h),!0;var t,a,i="";A.opts.imageUpload||-1===A.opts.imageInsertButtons.indexOf("imageUpload")||A.opts.imageInsertButtons.splice(A.opts.imageInsertButtons.indexOf("imageUpload"),1);var r=A.button.buildList(A.opts.imageInsertButtons);""!==r&&(i='<div class="fr-buttons fr-tabs">'.concat(r,"</div>"));var n=A.opts.imageInsertButtons.indexOf("imageUpload"),o=A.opts.imageInsertButtons.indexOf("imageByURL"),s="";0<=n&&(t=" fr-active",0<=o&&o<n&&(t=""),s='<div class="fr-image-upload-layer'.concat(t,' fr-layer" id="fr-image-upload-layer-').concat(A.id,'"><strong>').concat(A.language.translate("Drop image"),"</strong><br>(").concat(A.language.translate("or click"),')<div class="fr-form"><input type="file" accept="image/').concat(A.opts.imageAllowedTypes.join(", image/").toLowerCase(),'" tabIndex="-1" aria-labelledby="fr-image-upload-layer-').concat(A.id,'" role="button"></div></div>'));var l="";0<=o&&(t=" fr-active",0<=n&&n<o&&(t=""),l='<div class="fr-image-by-url-layer'.concat(t,' fr-layer" id="fr-image-by-url-layer-').concat(A.id,'"><div class="fr-input-line"><input id="fr-image-by-url-layer-text-').concat(A.id,'" type="text" placeholder="http://" tabIndex="1" aria-required="true"></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-submit" data-cmd="imageInsertByURL" tabIndex="2" role="button">').concat(A.language.translate("Insert"),"</button></div></div>"));var p={buttons:i,upload_layer:s,by_url_layer:l,progress_bar:'<div class="fr-image-progress-bar-layer fr-layer"><h3 tabIndex="-1" class="fr-message">Uploading</h3><div class="fr-loader"><span class="fr-progress"></span></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-dismiss" data-cmd="imageDismissError" tabIndex="2" role="button">OK</button></div></div>'};return 1<=A.opts.imageInsertButtons.length&&(a=A.popups.create("image.insert",p)),A.$wp&&A.events.$on(A.$wp,"scroll",function(){C&&A.popups.isVisible("image.insert")&&ye()}),function g(i){A.events.$on(i,"dragover dragenter",".fr-image-upload-layer",function(e){return S(this).addClass("fr-drop"),(A.browser.msie||A.browser.edge)&&e.preventDefault(),!1},!0),A.events.$on(i,"dragleave dragend",".fr-image-upload-layer",function(e){return S(this).removeClass("fr-drop"),(A.browser.msie||A.browser.edge)&&e.preventDefault(),!1},!0),A.events.$on(i,"drop",".fr-image-upload-layer",function(e){e.preventDefault(),e.stopPropagation(),S(this).removeClass("fr-drop");var t=e.originalEvent.dataTransfer;if(t&&t.files){var a=i.data("instance")||A;a.events.disableBlur(),a.image.upload(t.files),a.events.enableBlur()}},!0),A.helpers.isIOS()&&A.events.$on(i,"touchstart",'.fr-image-upload-layer input[type="file"]',function(){S(this).trigger("click")},!0),A.events.$on(i,"change",'.fr-image-upload-layer input[type="file"]',function(){if(this.files){var e=i.data("instance")||A;e.events.disableBlur(),i.find("input:focus").blur(),e.events.enableBlur(),e.image.upload(this.files,C)}S(this).val("")},!0)}(a),a}function q(){C&&A.popups.get("image.alt").find("input").val(C.attr("alt")||"").trigger("change")}function j(){var e=A.popups.get("image.alt");e||(e=J()),k(),A.popups.refresh("image.alt"),A.popups.setContainer("image.alt",A.$sc);var t=Ce(),a=t.outerWidth()/2;Se()&&(t=t.find(".fr-img-wrap"),a=C.outerWidth()/2);var i=t.offset().left+a,r=t.offset().top+t.outerHeight(),n=t.outerHeight();A.opts.iframe&&Se()&&(n=C?C.outerHeight():0),A.popups.show("image.alt",i,r,n,!0)}function J(e){if(e)return A.popups.onRefresh("image.alt",q),!0;var t={buttons:'<div class="fr-buttons fr-tabs">'.concat(A.button.buildList(A.opts.imageAltButtons),"</div>"),alt_layer:'<div class="fr-image-alt-layer fr-layer fr-active" id="fr-image-alt-layer-'.concat(A.id,'"><div class="fr-input-line"><input id="fr-image-alt-layer-text-').concat(A.id,'" type="text" placeholder="').concat(A.language.translate("Alternative Text"),'" tabIndex="1"></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-submit" data-cmd="imageSetAlt" tabIndex="2" role="button">').concat(A.language.translate("Update"),"</button></div></div>")},a=A.popups.create("image.alt",t);return A.$wp&&A.events.$on(A.$wp,"scroll.image-alt",function(){C&&A.popups.isVisible("image.alt")&&j()}),a}function Q(){var e=A.popups.get("image.size"),t=C.get(0).style.height?C.get(0).style.height:"auto",a=C.get(0).style.width?C.get(0).style.width:"auto";if(C)if(Se()){var i=C.parent();i.get(0).style.width||(i=C.parent().parent()),e.find('input[name="width"]').val(a).trigger("change"),e.find('input[name="height"]').val(t).trigger("change")}else e.find('input[name="width"]').val(a).trigger("change"),e.find('input[name="height"]').val(t).trigger("change")}function Z(){var e=A.popups.get("image.size");e||(e=ee()),k(),A.popups.refresh("image.size"),A.popups.setContainer("image.size",A.$sc);var t=Ce(),a=t.outerWidth()/2;Se()&&(t=t.find(".fr-img-wrap"),a=C.outerWidth()/2);var i=t.outerHeight();A.opts.iframe&&Se()&&(i=C?C.outerHeight():0);var r=t.offset().left+a,n=t.offset().top+t.outerHeight();A.popups.show("image.size",r,n,i,!0)}function ee(e){if(e)return A.popups.onRefresh("image.size",Q),!0;var t={buttons:'<div class="fr-buttons fr-tabs">'.concat(A.button.buildList(A.opts.imageSizeButtons),"</div>"),size_layer:'<div class="fr-image-size-layer fr-layer fr-active" id="fr-image-size-layer-'.concat(A.id,'"><div class="fr-image-group"><div class="fr-input-line"><input id="fr-image-size-layer-width-\'').concat(A.id,'" type="text" name="width" placeholder="').concat(A.language.translate("Width"),'" tabIndex="1"></div><div class="fr-input-line"><input id="fr-image-size-layer-height').concat(A.id,'" type="text" name="height" placeholder="').concat(A.language.translate("Height"),'" tabIndex="1"></div></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-submit" data-cmd="imageSetSize" tabIndex="2" role="button">').concat(A.language.translate("Update"),"</button></div></div>")},a=A.popups.create("image.size",t);return A.$wp&&A.events.$on(A.$wp,"scroll.image-size",function(){C&&A.popups.isVisible("image.size")&&Z()}),a}function te(e,t,a,i){return e.pageX=t,x.call(this,e),e.pageX=e.pageX+a*Math.floor(Math.pow(1.1,i)),T.call(this,e),$.call(this,e),++i}function ae(e){if(e=e||Ce(),A.opts.trackChangesEnabled&&!A.helpers.isMobile()&&(!e[0].parentNode||"
735SPAN"!==e[0].parentNode.tagName||!e[0].parentNode.hasAttribute("data-tracking")))return A.track_changes.removeSpecialItem(e),A.popups.hideAll(),void ce(!0);e&&!1!==A.events.trigger("image.beforeRemove",[e])&&(A.popups.hideAll(),we(),ce(!0),A.undo.canDo()||A.undo.saveStep(),e.get(0)==A.el?e.removeAttr("src"):(e.get(0).parentNode&&"A"==e.get(0).parentNode.tagName?(A.selection.setBefore(e.get(0).parentNode)||A.selection.setAfter(e.get(0).parentNode)||e.parent().after(Me.MARKERS),S(e.get(0).parentNode).remove()):(A.selection.setBefore(e.get(0))||A.selection.setAfter(e.get(0))||e.after(Me.MARKERS),e.remove()),A.html.fillEmptyBlocks(),A.selection.restore()),A.undo.saveStep())}function ie(e){var t=e.which;if(C&&(t==Me.KEYCODE.BACKSPACE||t==Me.KEYCODE.DELETE))return e.preventDefault(),e.stopPropagation(),ae(),!1;if(C&&t==Me.KEYCODE.ESC){var a=C;return ce(!0),A.selection.setAfter(a.get(0)),A.selection.restore(),e.preventDefault(),!1}if(!C||t!=Me.KEYCODE.ARROW_LEFT&&t!=Me.KEYCODE.ARROW_RIGHT)return C&&t===Me.KEYCODE.TAB?(e.preventDefault(),e.stopPropagation(),ce(!0),!1):C&&t!=Me.KEYCODE.F10&&!A.keys.isBrowserAction(e)?(e.preventDefault(),e.stopPropagation(),!1):void 0;var i=C.get(0);return ce(!0),t==Me.KEYCODE.ARROW_LEFT?A.selection.setBefore(i):A.selection.setAfter(i),A.selection.restore(),e.preventDefault(),!1}function re(e){if(e&&"IMG"==e.tagName){if(A.node.hasClass(e,"fr-uploading")||A.node.hasClass(e,"fr-error")?e.parentNode.removeChild(e):A.node.hasClass(e,"fr-draggable")&&e.classList.remove("fr-draggable"),e.parentNode&&e.parentNode.parentNode&&A.node.hasClass(e.parentNode.parentNode,"fr-img-caption")){var t=e.parentNode.parentNode;t.removeAttribute("contenteditable"),t.removeAttribute("draggable"),t.classList.remove("fr-draggable");var a=e.nextSibling;a&&a.removeAttribute("contenteditable")}}else if(e&&e.nodeType==Node.ELEMENT_NODE)for(var i=e.querySelectorAll("img.fr-uploading, img.fr-error, img.fr-draggable"),r=0;r<i.length;r++)re(i[r])}function ne(e){if(!1===A.events.trigger("image.beforePasteUpload",[e]))return S(e).removeAttr("data-fr-image-pasted"),!1;C=S(e),D(),n(),ye(),N(),C.on("load",function(){var t=[];D(),S(A.popups.get("image.insert").get(0)).find("div.fr-active.fr-error").length<1&&N(),S(this).data("events").filter(function(e){"load"===e[0]&&t.push(e)}),t.length<=1&&S(this).off("load")});for(var t=S(e).attr("src").split(","),a=atob(t[1]),i=[],r=0;r<a.length;r++)i.push(a.charCodeAt(r));H([A.browser.safari&&!A.opts.imageUploadURL?new Blob([new Uint8Array(i)],{type:t[0].replace(/data\:/g,"")}):new Blob([new Uint8Array(i)],{type:t[0].replace(/data\:/g,"").replace(/;base64/g,"")})],C)}function oe(){A.opts.imagePaste?A.$el.find("img[data-fr-image-pasted]").each(function(e,a){if(A.opts.imagePasteProcess){var t=A.opts.imageDefaultWidth;t&&"auto"!=t&&(t+=A.opts.imageResizeWithPercent?"%":"px"),S(a).css("width",t).removeClass("fr-dii fr-dib fr-fir fr-fil"),he(S(a),A.opts.imageDefaultDisplay,A.opts.imageDefaultAlign)}if(0===a.src.indexOf("data:"))ne(a);else if(0===a.src.indexOf("blob:")||0===a.src.indexOf("http")&&A.opts.imageUploadRemoteUrls&&A.opts.imageCORSProxy){var i=new Image;i.crossOrigin="Anonymous",i.onload=function(){var e=A.o_doc.createElement("CANVAS"),t=e.getContext("2d");e.height=this.naturalHeight,e.width=this.naturalWidth,t.drawImage(this,0,0),setTimeout(function(){ne(a)},0),a.src=e.toDataURL(Me.IMAGE_TYPE)},A.browser.msie&&Me.IMAGE_ALLOW_REGEX.test(a.src)&&(Me.IMAGE_TYPE="image/"+a.src.split(Me.IMAGE_ALLOW_REGEX)[1]),i.src=(0===a.src.indexOf("blob:")?"":"".concat(A.opts.imageCORSProxy,"/"))+a.src,0!==a.src.indexOf("blob:")&&A.undo.saveStep()}else 0!==a.src.indexOf("http")||0===a.src.indexOf("https://mail.google.com/mail")?(A.selection.save(),S(a).remove(),A.selection.restore()):S(a).removeAttr("data-fr-image-pasted")}):A.$el.find("img[data-fr-image-pasted]").remove()}function se(e){var t=e.target.result,a=A.opts.imageDefaultWidth;a&&"auto"!=a&&(a+=A.opts.imageResizeWithPercent?"%":"px"),A.undo.saveStep(),A.html.insert('<img data-fr-image-pasted="true" src="'.concat(t,'"').concat(a?' style="width: '.concat(a,';"'):"",">"));var i=A.$el.find('img[data-fr-image-pasted="true"]');i&&he(i,A.opts.imageDefaultDisplay,A.opts.imageDefaultAlign),A.events.trigger("paste.after")}function le(e,t){var a=new FileReader;a.onload=function i(e){var t=A.opts.imageDefaultWidth;t&&"auto"!=t&&(t+=A.opts.imageResizeWithPercent?"%":"px"),A.html.insert('<img data-fr-image-pasted="true" src="'.concat(e,'"').concat(t?' style="width: '.concat(t,';"'):"",">"));var a=A.$el.find('img[data-fr-image-pasted="true"]');a&&he(a,A.opts.imageDefaultDisplay,A.opts.imageDefaultAlign),A.events.trigger("paste.after")}(t),a.readAsDataURL(e,t)}function pe(e){if(e&&e.clipboardData&&e.clipboardData.items){var t=(e.clipboardData||window.clipboardData).getData("text/html")||"";A.browser.mozilla&&(""===t||/<!--StartFragment-->([ ])<!--EndFragment-->/.test(t))&&(t=A.win.localStorage.getItem("fr-copied-html"));var a=(new DOMParser).parseFromString(t,"text/html").querySelector("img");if(a){if(!a)return!1;var i=a.src,r=null;if(e.clipboardData.types&&-1!=[].indexOf.call(e.clipboardData.types,"text/rtf")||e.clipboardData.getData("text/rtf"))r=e.clipboardData.items[0].getAsFile();else for(var n=0;n<e.clipboardData.items.length;n++)if(r=e.clipboardData.items[n].getAsFile()){Me.IMAGE_TYPE=r.type;break}if(r)return le(r,i),!1}else{var o=null;if(e.clipboardData.types&&-1!=[].indexOf.call(e.clipboardData.types,"text/rtf")||e.clipboardData.getData("text/rtf"))o=e.clipboardData.items[0].getAsFile();else for(var s=0;s<e.clipboardData.items.length&&!(o=e.clipboardData.items[s].getAsFile());s++);if(o)return function l(e){var t=new FileReader;
vendor: 5,705 bytes, line 735
735t.onload=se,t.readAsDataURL(e)}(o),!1}}}function ge(e){return e=e.replace(/<img /gi,'<img data-fr-image-pasted="true" ')}function fe(e){if("false"==S(this).parents("[contenteditable]").not(".fr-element").not(".fr-img-caption").not("body").first().attr("contenteditable"))return!0;if(e&&"touchend"==e.type&&a)return!0;if(e&&A.edit.isDisabled())return e.stopPropagation(),e.preventDefault(),!1;for(var t=0;t<Me.INSTANCES.length;t++)Me.INSTANCES[t]!=A&&Me.INSTANCES[t].events.trigger("image.hideResizer");A.toolbar.disable(),e&&(e.stopPropagation(),e.preventDefault()),A.helpers.isMobile()&&(A.events.disableBlur(),A.$el.blur(),A.events.enableBlur()),A.opts.iframe&&A.size.syncIframe(),C=S(this),we(),D(),n(),A.browser.msie?(A.popups.areVisible()&&A.events.disableBlur(),A.win.getSelection&&(A.win.getSelection().removeAllRanges(),A.win.getSelection().addRange(A.doc.createRange()))):A.selection.clear(),A.helpers.isIOS()&&(A.events.disableBlur(),A.$el.blur()),A.button.bulkRefresh(),A.events.trigger("video.hideResizer")}function ce(e){C&&(function t(){return de}()||!0===e)&&(A.toolbar.enable(),p.removeClass("fr-active"),A.popups.hideAll(),C=null,ue(),g=null,f&&f.hide())}r[i]="Image cannot be loaded from the passed link.",r[c]="No link in upload response.",r[d]="Error during file upload.",r[m]="Parsing response failed.",r[R]="File is too large.",r[U]="Image file type is invalid.",r[7]="Files can be uploaded only to same domain in IE 8 and IE 9.";var de=!(r[8]="Image file is corrupted.");function me(){de=!0}function ue(){de=!1}function he(e,t,a){if(!A.opts.htmlUntouched&&A.opts.useClasses)e.removeClass("fr-fil fr-fir fr-dib fr-dii"),a&&e.addClass("fr-fi".concat(a[0])),t&&e.addClass("fr-di".concat(t[0]));else if("inline"==t)if(e.css({display:"inline-block",verticalAlign:"bottom",margin:A.opts.imageDefaultMargin}),"center"==a)e.css({"float":"none",marginBottom:"",marginTop:"",maxWidth:"calc(100% - ".concat(2*A.opts.imageDefaultMargin,"px)"),textAlign:"center"});else if("left"==a){var i="0px",r=e.parent("span.fr-img-caption").get(0);r||(r=e.parent().get(0)),r&&"li"===r.tagName.toLowerCase()?i="20px":r&&"p"===r.tagName.toLowerCase()&&(i="15px"),e.css({"float":"left",marginLeft:0,maxWidth:"calc(100% - ".concat(A.opts.imageDefaultMargin,"px)"),textAlign:"left",marginRight:i})}else e.css({"float":"right",marginRight:0,maxWidth:"calc(100% - ".concat(A.opts.imageDefaultMargin,"px)"),textAlign:"right"});else"block"==t&&(e.css({display:"block","float":"none",verticalAlign:"top",margin:"".concat(A.opts.imageDefaultMargin,"px auto"),textAlign:"center"}),"left"==a?e.css({marginLeft:0,textAlign:"left"}):"right"==a&&e.css({marginRight:0,textAlign:"right"}))}function ve(e){if(void 0===e&&(e=Ce()),e){if(e.hasClass("fr-fil"))return"left";if(e.hasClass("fr-fir"))return"right";if(e.hasClass("fr-dib")||e.hasClass("fr-dii"))return"center";var t=e.css("float");if(e.css("float","none"),"block"==e.css("display")){if(e.css("float",""),e.css("float")!=t&&e.css("float",t),0===parseInt(e.css("margin-left"),10))return"left";if(0===parseInt(e.css("margin-right"),10))return"right"}else{if(e.css("float",""),e.css("float")!=t&&e.css("float",t),"left"==e.css("float"))return"left";if("right"==e.css("float"))return"right"}}return"center"}function be(e){void 0===e&&(e=Ce());var t=e.css("float");return e.css("float","none"),"block"==e.css("display")?(e.css("float",""),e.css("float")!=t&&e.css("float",t),"block"):(e.css("float",""),e.css("float")!=t&&e.css("float",t),"inline")}function ye(){var e=A.popups.get("image.insert");e||(e=X()),A.popups.isVisible("image.insert")||(k(),A.popups.refresh("image.insert"),A.popups.setContainer("image.insert",A.$sc));var t=Ce(),a=t.outerWidth()/2;Se()&&(t=t.find(".fr-img-wrap"),a=C.outerWidth()/2);var i=t.offset().left+a,r=t.outerHeight(!0);A.opts.iframe&&Se()&&(r=C?C.outerHeight():0);var n=t.offset().top+t.outerHeight();A.popups.show("image.insert",i,n,r,!0)}function we(){if(C){A.events.disableBlur(),A.selection.clear();var e=A.doc.createRange();e.selectNode(C.get(0)),A.browser.msie&&e.collapse(!0),A.selection.get().addRange(e),A.events.enableBlur()}}function Ae(){return C}function Ce(){return Se()?C.parents(".fr-img-caption").first():C}function Se(){return!!C&&0<C.parents(".fr-img-caption").length}function Ee(e){for(var t=document.createDocumentFragment();e.firstChild;){var a=e.removeChild(e.firstChild);t.appendChild(a)}e.parentNode.replaceChild(t,e)}return{_init:function Re(){var i;(function e(){A.events.$on(A.$el,A._mousedown,"IMG"==A.el.tagName?null:'img:not([contenteditable="false"])',function(e){if("false"==S(this).parents("contenteditable").not(".fr-element").not(".fr-img-caption").not("body").first().attr("contenteditable"))return!0;A.helpers.isMobile()||A.selection.clear(),t=!0,A.popups.areVisible()&&A.events.disableBlur(),A.browser.msie&&(A.events.disableBlur(),A.$el.attr("contenteditable",!1)),A.draggable||"touchstart"==e.type||e.preventDefault(),e.stopPropagation()}),A.events.$on(A.$el,A._mousedown,".fr-img-caption .fr-inner",function(e){A.core.hasFocus()||A.events.focus(),e.stopPropagation()}),A.events.$on(A.$el,"paste",".fr-img-caption .fr-inner",function(e){!0===A.opts.toolbarInline&&(A.toolbar.hide(),e.stopPropagation())}),A.events.$on(A.$el,A._mouseup,"IMG"==A.el.tagName?null:'img:not([contenteditable="false"])',function(e){if("false"==S(this).parents("contenteditable").not(".fr-element").not(".fr-img-caption").not("body").first().attr("contenteditable"))return!0;t&&(t=!1,e.stopPropagation(),A.browser.msie&&(A.$el.attr("contenteditable",!0),A.events.enableBlur()))}),A.events.on("keyup",function(e){if(e.shiftKey&&""===A.selection.text().replace(/\n/g,"")&&A.keys.isArrow(e.which)){var t=A.selection.element
vendor: 4,192 bytes, line 735
735(),a=A.selection.endElement();t&&"IMG"==t.tagName?z(S(t)):a&&"IMG"==a.tagName&&z(S(a))}},!0),A.events.on("drop",V),A.events.on("element.beforeDrop",F),A.events.on("mousedown window.mousedown",me),A.events.on("window.touchmove",ue),A.events.on("mouseup window.mouseup",function(){if(C&&!A.helpers.isMobile())return ce(),!1;ue()}),A.events.on("touchstart touchend",function(){if(C&&A.helpers.isMobile())return ce(),!1;ue()}),A.events.on("commands.mousedown",function(e){0<e.parents(".fr-toolbar").length&&ce()}),A.events.on("image.resizeEnd",function(){A.opts.iframe&&A.size.syncIframe()}),A.events.on("blur image.hideResizer commands.undo commands.redo element.dropped",function(){ce(!(t=!1))}),A.events.on("modals.hide",function(){C&&(we(),A.selection.clear())}),A.events.on("image.resizeEnd",function(){A.win.getSelection&&z(C)}),A.opts.imageAddNewLine&&A.events.on("image.inserted",function(e){var t=e.get(0);for(t.nextSibling&&"BR"===t.nextSibling.tagName&&(t=t.nextSibling);t&&!A.node.isElement(t);)t=A.node.isLastSibling(t)?t.parentNode:null;A.node.isElement(t)&&(A.opts.enter===Me.ENTER_BR?e.after("<br>"):S(A.node.blockParent(e.get(0))).after("<".concat(A.html.defaultTag(),"><br></").concat(A.html.defaultTag(),">")))})})(),"IMG"==A.el.tagName&&A.$el.addClass("fr-view"),A.events.$on(A.$el,A.helpers.isMobile()&&!A.helpers.isWindowsPhone()?"touchend":"click","IMG"==A.el.tagName?null:'img:not([contenteditable="false"])',fe),A.helpers.isMobile()&&(A.events.$on(A.$el,"touchstart","IMG"==A.el.tagName?null:'img:not([contenteditable="false"])',function(){a=!1}),A.events.$on(A.$el,"touchmove",function(){a=!0})),A.$wp?(A.events.on("window.keydown keydown",ie,!0),A.events.on("keyup",function(e){if(C&&e.which==Me.KEYCODE.ENTER)return!1},!0),A.events.$on(A.$el,"keydown",function(){var e=A.selection.element();(e.nodeType===Node.TEXT_NODE||"BR"==e.tagName&&A.node.isLastSibling(e))&&(e=e.parentNode),A.node.hasClass(e,"fr-inner")||(A.node.hasClass(e,"fr-img-caption")||(e=S(e).parents(".fr-img-caption").get(0)),A.node.hasClass(e,"fr-img-caption")&&(A.opts.trackChangesEnabled||S(e).after(Me.INVISIBLE_SPACE+Me.MARKERS),A.selection.restore()))})):A.events.$on(A.$win,"keydown",ie),A.events.on("toolbar.esc",function(){if(C){if(A.$wp)A.events.disableBlur(),A.events.focus();else{var e=C;ce(!0),A.selection.setAfter(e.get(0)),A.selection.restore()}return!1}},!0),A.events.on("toolbar.focusEditor",function(){if(C)return!1},!0),A.events.on("window.cut window.copy",function(e){if(C&&A.popups.isVisible("image.edit")&&!A.popups.get("image.edit").find(":focus").length){var t=Ce();Se()?(t.before(Me.START_MARKER),t.after(Me.END_MARKER),A.selection.restore(),A.paste.saveCopiedText(t.get(0).outerHTML,t.text())):(we(),A.paste.saveCopiedText(C.get(0).outerHTML,C.attr("alt"))),"copy"==e.type?setTimeout(function(){z(C)}):(ce(!0),A.undo.saveStep(),setTimeout(function(){A.undo.saveStep()},0))}},!0),A.browser.msie&&A.events.on("keydown",function(e){if(!A.selection.isCollapsed()||!C)return!0;var t=e.which;t==Me.KEYCODE.C&&A.keys.ctrlKey(e)?A.events.trigger("window.copy"):t==Me.KEYCODE.X&&A.keys.ctrlKey(e)&&A.events.trigger("window.cut")}),A.events.$on(S(A.o_win),"keydown",function(e){var t=e.which;if(C&&t==Me.KEYCODE.BACKSPACE)return e.preventDefault(),!1}),A.events.$on(A.$win,"keydown",function(e){var t=e.which;C&&C.hasClass("fr-uploading")&&t==Me.KEYCODE.ESC&&C.trigger("abortUpload")}),A.events.on("destroy",function(){C&&C.hasClass("fr-uploading")&&C.trigger("abortUpload")}),A.events.on("paste.before",pe),A.events.on("paste.beforeCleanup",ge),A.events.on("paste.after",oe),A.events.on("html.set",v),A.events.on("html.inserted",v),v(),A.events.on("destroy",function(){s=[]}),A.events.on("html.processGet",re),A.opts.imageOutputSize&&A.events.on("html.beforeGet",function(){i=A.el.querySelectorAll("img");for(var e=0;e<i.length;e++){var t=i[e].style.width||S(i[e]).width(),a=i[e].style.height||S(i[e]).height();t&&i[e].setAttribute("width","".concat(t).replace(/px/,"")),a&&i[e].setAttribute("height","".concat(a).replace(/px/,""))}}),A.opts.iframe&&A.events.on("image.loaded",A.size.syncIframe),A.$wp&&(b(),A.events.on("contentChanged",b)),A.events.$on(S(A.o_win),"orientationchange.
735image",function(){setTimeout(function(){C&&z(C)},100)}),P(!0),X(!0),ee(!0),J(!0),A.events.on("node.remove",function(e){if("IMG"==e.get(0).tagName)return ae(e),!1})},showInsertPopup:function Ue(){var e=A.$tb.find('.fr-command[data-cmd="insertImage"]'),t=A.popups.get("image.insert");if(t||(t=X()),k(),!t.hasClass("fr-active"))if(A.popups.refresh("image.insert"),A.popups.setContainer("image.insert",A.$tb),e.isVisible()){var a=A.button.getPosition(e),i=a.left,r=a.top;A.popups.show("image.insert",i,r,e.outerHeight())}else A.position.forSelection(t),A.popups.show("image.insert")},showLayer:function De(e){var t,a,i=A.popups.get("image.insert");if(C||A.opts.toolbarInline){if(C){var r=Ce(),n=0;Se()&&(r=r.find(".fr-img-wrap"),n=C.outerWidth()/2),a=r.offset().top+r.outerHeight(),t=r.offset().left+n}}else{var o=A.$tb.find('.fr-command[data-cmd="insertImage"]');t=o.offset().left,a=o.offset().top+(A.opts.toolbarBottom?10:o.outerHeight()-10)}!C&&A.opts.toolbarInline&&(a=i.offset().top-A.helpers.getPX(i.css("margin-top")),i.hasClass("fr-above")&&(a+=i.outerHeight())),i.find(".fr-layer").removeClass("fr-active"),i.find(".fr-".concat(e,"-layer")).addClass("fr-active"),A.popups.show("image.insert",t,a,C?C.outerHeight():0,Se()),A.accessibility.focusPopup(i)},refreshUploadButton:function xe(e){var t=A.popups.get("image.insert");t&&t.find(".fr-image-upload-layer").hasClass("fr-active")&&e.addClass("fr-active").attr("aria-pressed",!0)},refreshByURLButton:function Te(e){var t=A.popups.get("image.insert");t&&t.find(".fr-image-by-url-layer").hasClass("fr-active")&&e.addClass("fr-active").attr("aria-pressed",!0)},upload:H,insertByURL:function $e(){var e=A.popups.get("image.insert").find(".fr-image-by-url-layer input");if(0<e.val().length){N(),B(A.language.translate("Loading image"));var t=e.val().trim();if(A.opts.imageUploadRemoteUrls&&A.opts.imageCORSProxy&&A.opts.imageUpload){var a=new XMLHttpRequest;a.onload=function(){200==this.status?H([new Blob([this.response],{type:this.response.type||"image/png"})],C):I(i)},a.onerror=function(){_(t,!0,[],C)},a.open("GET","".concat(A.opts.imageCORSProxy,"/").concat(t),!0),a.responseType="blob",a.send()}else _(t,!0,[],C);e.val(""),e.blur()}},align:function Ie(e){var t=Ce();t.removeClass("fr-fir fr-fil"),!A.opts.htmlUntouched&&A.opts.useClasses?"left"==e?t.addClass("fr-fil"):"right"==e&&t.addClass("fr-fir"):he(t,be(),e),we(),D(),n(),A.selection.clear()},refreshAlign:function Pe(e){C&&e.find("> *").first().replaceWith(A.icon.create("image-align-".concat(ve())))}
vendor: 4,220 bytes, line 735
735,refreshAlignOnShow:function Ne(e,t){C&&t.find('.fr-command[data-param1="'.concat(ve(),'"]')).addClass("fr-active").attr("aria-selected",!0)},display:function ke(e){var t=Ce();t.removeClass("fr-dii fr-dib"),!A.opts.htmlUntouched&&A.opts.useClasses?"inline"==e?t.addClass("fr-dii"):"block"==e&&t.addClass("fr-dib"):he(t,e,ve()),we(),D(),n(),A.selection.clear()},refreshDisplayOnShow:function Be(e,t){C&&t.find('.fr-command[data-param1="'.concat(be(),'"]')).addClass("fr-active").attr("aria-selected",!0)},replace:ye,back:function e(){C?(A.events.disableBlur(),S(".fr-popup input:focus").blur(),z(C)):(A.events.disableBlur(),A.selection.restore(),A.events.enableBlur(),A.popups.hide("image.insert"),A.toolbar.showInline())},get:Ae,getEl:Ce,insert:_,showProgressBar:N,remove:ae,hideProgressBar:k,applyStyle:function Oe(e,t,a){if(void 0===t&&(t=A.opts.imageStyles),void 0===a&&(a=A.opts.imageMultipleStyles),!C)return!1;var i=Ce();if(!a){var r=Object.keys(t);r.splice(r.indexOf(e),1),i.removeClass(r.join(" "))}"object"==Ke(t[e])?(i.removeAttr("style"),i.css(t[e].style)):(i.toggleClass(e),Se()&&C.hasClass(e)&&C.removeClass(e)),z(C)},showAltPopup:j,showSizePopup:Z,setAlt:function ze(e){if(C){var t=A.popups.get("image.alt");C.attr("alt",e||t.find("input").val()||""),t.find("input:focus").blur(),z(C)}},setSize:function Le(e,t){if(C){var a=A.popups.get("image.size");e=e||a.find('input[name="width"]').val()||"",t=t||a.find('input[name="height"]').val()||"";var i=/^[\d]+((px)|%)*$/g;C.removeAttr("width").removeAttr("height"),e.match(i)?C.css("width",e):C.css("width",""),t.match(i)?C.css("height",t):C.css("height",""),Se()&&(C.parents(".fr-img-caption").removeAttr("width").removeAttr("height"),e.match(i)?C.parents(".fr-img-caption").css("width",e):C.parents(".fr-img-caption").css("width",""),t.match(i)?C.parents(".fr-img-caption").css("height",t):C.parents(".fr-img-caption").css("height","")),a&&a.find("input:focus").blur(),z(C)}},toggleCaption:function _e(){var e;if(C&&!Se()){(e=C).parent().is("a")&&(e=C.parent());var t,a,i=C.parents("ul")&&0<C.parents("ul").length?C.parents("ul"):C.parents("ol")&&0<C.parents("ol").length?C.parents("ol"):[];if(0<i.length){var r=i.find("li").length,n=C.parents("li"),o=document.createElement("li");r-1===n.index()&&(i.append(o),o.innerHTML=" ")}e.attr("style")?a=-1<(t=e.attr("style").split(":")).indexOf("width")?t[t.indexOf("width")+1].replace(";",""):"":e.attr("width")&&(a=e.attr("width"));var s=A.opts.imageResizeWithPercent?(-1<a.indexOf("px")?null:a)||"100%":C.width()+"px";e.wrap('<div class="fr-img-space-wrap"><span '+(A.browser.mozilla?"":'contenteditable="false"')+'class="fr-img-caption '+C.attr("class")+'" style="'+(A.opts.useClasses?"":e.attr("style"))+'" draggable="false"></span></div>'),e.wrap('<span class="fr-img-wrap"></span>'),C.after('<span class="fr-inner"'.concat(A.browser.mozilla?"":' contenteditable="true"',">").concat(Me.START_MARKER).concat(A.language.translate("Image Caption")).concat(Me.END_MARKER,"</span>")),C.parents(".fr-img-caption").css("width",s);var l=C.parents(".fr-img-space-wrap").length;1==l?Ee(document.querySelector(".fr-img-space-wrap")):1<l&&(Ee(document.querySelector(".fr-img-space-wrap")),Ee(document.querySelector(".fr-img-space-wrap2"))),ce(!0),A.selection.restore()}else{if(e=Ce(),C.insertBefore(e),null!==e[0].querySelector("a")){for(var p,g=e[0].querySelector("a"),f=document.createElement("a"),c=0,d=g.attributes,m=d.length;c<m;c++)p=d[c],f.setAttribute(p.nodeName,p.nodeValue);C.wrap(f)}C.attr("class",e.attr("class").replace("fr-img-caption","")).attr("style",e.attr("style")),e.remove();var u=C.parents(".fr-img-space-wrap").length;1==u?Ee(document.querySelector(".fr-img-space-wrap")):1<u&&(Ee(document.querySelector(".fr-img-space-wrap")),Ee(document.querySelector(".fr-img-space-wrap2"))),z(C)}},hasCaption:Se,exitEdit:ce,edit:z}},Me.DefineIcon("insertImage",{NAME:"image",SVG_KEY:"insertImage"}),Me.RegisterShortcut(Me.KEYCODE.P,"insertImage",null,"P"),Me.RegisterCommand("insertImage",{title:"Insert Image",undo:!1,focus:!0,refreshAfterCallback:!1,popup:!0,callback:function(){this.popups.isVisible("image.insert")?(this.$el.find(".fr-marker").length&&(this.events.disableBlur(),this.selection.restore(
vendor: 4,419 bytes, line 735
735)),this.popups.hide("image.insert")):this.image.showInsertPopup()},plugin:"image"}),Me.DefineIcon("imageUpload",{NAME:"upload",SVG_KEY:"upload"}),Me.RegisterCommand("imageUpload",{title:"Upload Image",undo:!1,focus:!1,toggle:!0,callback:function(){this.image.showLayer("image-upload")},refresh:function(e){this.image.refreshUploadButton(e)}}),Me.DefineIcon("imageByURL",{NAME:"link",SVG_KEY:"insertLink"}),Me.RegisterCommand("imageByURL",{title:"By URL",undo:!1,focus:!1,toggle:!0,callback:function(){this.image.showLayer("image-by-url")},refresh:function(e){this.image.refreshByURLButton(e)}}),Me.RegisterCommand("imageInsertByURL",{title:"Insert Image",undo:!0,refreshAfterCallback:!1,callback:function(){this.image.insertByURL()},refresh:function(e){this.image.get()?e.text(this.language.translate("Replace")):e.text(this.language.translate("Insert"))}}),Me.DefineIcon("imageDisplay",{NAME:"star",SVG_KEY:"imageDisplay"}),Me.RegisterCommand("imageDisplay",{title:"Display",type:"dropdown",options:{inline:"Inline",block:"Break Text"},callback:function(e,t){this.image.display(t)},refresh:function(e){this.opts.imageTextNear||e.addClass("fr-hidden")},refreshOnShow:function(e,t){this.image.refreshDisplayOnShow(e,t)}}),Me.DefineIcon("image-align",{NAME:"align-left",SVG_KEY:"alignLeft"}),Me.DefineIcon("image-align-left",{NAME:"align-left",SVG_KEY:"alignLeft"}),Me.DefineIcon("image-align-right",{NAME:"align-right",SVG_KEY:"alignRight"}),Me.DefineIcon("image-align-center",{NAME:"align-justify",SVG_KEY:"alignCenter"}),Me.DefineIcon("imageAlign",{NAME:"align-justify",SVG_KEY:"alignJustify"}),Me.RegisterCommand("imageAlign",{type:"dropdown",title:"Align",options:{left:"Align Left",center:"None",right:"Align Right"},html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t=Me.COMMANDS.imageAlign.options;for(var a in t)t.hasOwnProperty(a)&&(e+='<li role="presentation"><a class="fr-command fr-title" tabIndex="-1" role="option" data-cmd="imageAlign" data-param1="'.concat(a,'" title="').concat(this.language.translate(t[a]),'">').concat(this.icon.create("image-align-".concat(a)),'<span class="fr-sr-only">').concat(this.language.translate(t[a]),"</span></a></li>"));return e+="</ul>"},callback:function(e,t){this.image.align(t)},refresh:function(e){this.image.refreshAlign(e)},refreshOnShow:function(e,t){this.image.refreshAlignOnShow(e,t)}}),Me.DefineIcon("imageReplace",{NAME:"exchange",FA5NAME:"exchange-alt",SVG_KEY:"replaceImage"}),Me.RegisterCommand("imageReplace",{title:"Replace",undo:!1,focus:!1,popup:!0,refreshAfterCallback:!1,callback:function(){this.image.replace()}}),Me.DefineIcon("imageRemove",{NAME:"trash",SVG_KEY:"remove"}),Me.RegisterCommand("imageRemove",{title:"Remove",callback:function(){this.image.remove()}}),Me.DefineIcon("imageBack",{NAME:"arrow-left",SVG_KEY:"back"}),Me.RegisterCommand("imageBack",{title:"Back",undo:!1,focus:!1,back:!0,callback:function(){this.image.back()},refresh:function(e){this.$;this.image.get()||this.opts.toolbarInline?(e.removeClass("fr-hidden"),e.next(".fr-separator").removeClass("fr-hidden")):(e.addClass("fr-hidden"),e.next(".fr-separator").addClass("fr-hidden"))}}),Me.RegisterCommand("imageDismissError",{title:"OK",undo:!1,callback:function(){this.image.hideProgressBar(!0)}}),Me.DefineIcon("imageStyle",{NAME:"magic",SVG_KEY:"imageClass"}),Me.RegisterCommand("imageStyle",{title:"Style",type:"dropdown",html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t=this.opts.imageStyles;for(var a in t)if(t.hasOwnProperty(a)){var i=t[a];"object"==Ke(i)&&(i=i.title),e+='<li role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="imageStyle" data-param1="'.concat(a,'">').concat(this.language.translate(i),"</a></li>")}return e+="</ul>"},callback:function(e,t){this.image.applyStyle(t)},refreshOnShow:function(e,t){var a=this.$,i=this.image.getEl();i&&t.find(".fr-command").each(function(){var e=a(this).data("param1"),t=i.hasClass(e);a(this).toggleClass("fr-active",t).attr("aria-selected",t)})}}),Me.DefineIcon("imageAlt",{NAME:"info",SVG_KEY:"imageAltText"}),Me.RegisterCommand("imageAlt",{undo:!1,focus:!1,popup:!0,title:"Alternative Text",callback:function(){this.image.showAltPopup()}}),Me.RegisterCommand("imageSetAlt",{undo:!0,focus:!1,title:"Update",refreshAfterCallback:!1,callback:function(){this.image.setAlt()}}),Me.DefineIcon("imageSize",{NAME:"arrows-alt",SVG_KEY:"imageSize"}
vendor: 4,738 bytes, lines 735-751
735),Me.RegisterCommand("imageSize",{undo:!1,focus:!1,popup:!0,title:"Change Size",callback:function(){this.image.showSizePopup()}}),Me.RegisterCommand("imageSetSize",{undo:!0,focus:!1,title:"Update",refreshAfterCallback:!1,callback:function(){this.image.setSize()}}),Me.DefineIcon("imageCaption",{NAME:"commenting",FA5NAME:"comment-alt",SVG_KEY:"imageCaption"}),Me.RegisterCommand("imageCaption",{undo:!0,focus:!1,title:"Image Caption",refreshAfterCallback:!0,callback:function(){this.image.toggleCaption()},refresh:function(e){this.image.get()&&e.toggleClass("fr-active",this.image.hasCaption())}})}); 736},{"froala-editor":8}],16:[function(require,module,exports){ 737/*! 738 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 739 * License https://froala.com/wysiwyg-editor/terms/ 740 * Copyright 2014-2023 Froala Labs 741 */ 742 743!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(e.FroalaEditor)}(this,function(e){"use strict";e=e&&e.hasOwnProperty("default")?e["default"]:e,Object.assign(e.DEFAULTS,{inlineStyles:{"Big Red":"font-size: 20px; color: red;","Small Blue":"font-size: 14px; color: blue;"}}),e.PLUGINS.inlineStyle=function(i){return{apply:function a(e){for(var t=e.split(";"),n=0;n<t.length;n++){var l=t[n].split(":");t[n].length&&2==l.length&&i.format.applyStyle(l[0].trim(),l[1].trim())}}}},e.RegisterCommand("inlineStyle",{type:"dropdown",html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t=this.opts.inlineStyles;for(var n in t)if(t.hasOwnProperty(n)){var l=t[n]+(-1===t[n].indexOf("display:block;")?" display:block;":"");e+='<li role="presentation"><span style="'.concat(l,'" role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="inlineStyle" data-param1="').concat(t[n],'" title="').concat(this.language.translate(n),'">').concat(this.language.translate(n),"</a></span></li>")}return e+="</ul>"},title:"Inline Style",callback:function(e,t){this.inlineStyle.apply(t)},plugin:"inlineStyle"}),e.DefineIcon("inlineStyle",{NAME:"paint-brush",SVG_KEY:"inlineStyle"})}); 744},{"froala-editor":8}],17:[function(require,module,exports){ 745/*! 746 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 747 * License https://froala.com/wysiwyg-editor/terms/ 748 * Copyright 2014-2023 Froala Labs 749 */ 750 751!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(e.FroalaEditor)}(this,function(y){"use strict";y=y&&y.hasOwnProperty("default")?y["default"]:y,Object.assign(y.POPUP_TEMPLATES,{"link.edit":"[_BUTTONS_]","link.insert":"[_BUTTONS_][_INPUT_LAYER_]"}),Object.assign(y.DEFAULTS,{linkEditButtons:["linkOpen","linkStyle","linkEdit","linkRemove"],linkInsertButtons:["linkBack","|","linkList"],linkAttributes:{},linkAutoPrefix:"http://",linkStyles:{"fr-green":"Green","fr-strong":"Thick"},linkMultipleStyles:!0,linkConvertEmailAddress:!0,linkAlwaysBlank:!1,linkAlwaysNoFollow:!1,linkNoOpener:!0,linkNoReferrer:!0,linkList:[{text:"Froala",href:"https://froala.com",target:"_blank"},{text:"Google",href:"https://google.com",target:"_blank"},{displayText:"Facebook",href:"https://facebook.com"}],linkText:!0}),y.PLUGINS.link=function(h){var m=h.$;function v(){var e=h.image?h.image.get():null;if(e||!h.$wp)return"A"==h.el.tagName?h.el:e&&e.get(0).parentNode&&"A"==e.get(0).parentNode.tagName?e.get(0).parentNode:void 0;var t=h.selection.ranges(0).commonAncestorContainer;try{t&&(t.contains&&t.contains(h.el)||!h.el.contains(t)||h.el==t)&&(t=null)}catch(r){t=null}if(t&&"A"===t.tagName)return t;var n=h.selection.element(),i=h.selection.endElement();"A"==n.tagName||h.node.isElement(n)||(n=m(n).parentsUntil(h.$el,"a").first().get(0)),"A"==i.tagName||h.node.isElement(i)||(i=m(i).parentsUntil(h.$el,"a").first().get(0));try{i&&(i.contains&&i.contains(h.el)||!h.el.contains(i)||h.el==i)&&(i=null)}catch(r){i=null}try{n&&(n.contains&&n.contains(h.el)||!h.el.contains(n)||h.el==n)&&(n=null)}catch(r){n=null}return i&&i==n&&"A"==i.tagName?(h.browser.msie||h.helpers.isMobile())&&(h.selection.info(n).atEnd||h.selection.info(n).atStart)?null:n:null}function b(){var e,t,n,i,r=h.image?h.image.get():null,a=[];if(r)"A"==r.get(0).parentNode.tagName&&a.push(r.get(0).parentNode);else if(h.win.getSelection){var l=h.win.getSelection();if(l.getRangeAt&&l.rangeCount){i=h.doc.createRange();for(var s=0;s<l.rangeCount;++s)if((t=(e=l.getRangeAt(s)).commonAncestorContainer)&&1!=t.nodeType&&(t=t.parentNode),t&&"a"==t.nodeName.toLowerCase())a.push(t);else{n=t.getElementsByTagName("a");for(var o=0;o<n.length;++o)i.selectNodeContents(n[o]),i.compareBoundaryPoints(e.END_TO_START,e)<1&&-1<i.
vendor: 19,339 bytes, lines 751-759
751compareBoundaryPoints(e.START_TO_END,e)&&a.push(n[o])}}}else if(h.doc.selection&&"Control"!=h.doc.selection.type)if("a"==(t=(e=h.doc.selection.createRange()).parentElement()).nodeName.toLowerCase())a.push(t);else{n=t.getElementsByTagName("a"),i=h.doc.body.createTextRange();for(var p=0;p<n.length;++p)i.moveToElementText(n[p]),-1<i.compareEndPoints("StartToEnd",e)&&i.compareEndPoints("EndToStart",e)<1&&a.push(n[p])}return a}function E(r){if(h.core.hasFocus()){if(a(),r&&"keyup"===r.type&&(r.altKey||r.which==y.KEYCODE.ALT))return!0;setTimeout(function(){if(!r||r&&(1==r.which||"mouseup"!=r.type)){var e=v(),t=h.image?h.image.get():null;if(e&&!t){if(h.image){var n=h.node.contents(e);if(1==n.length&&"IMG"==n[0].tagName){var i=h.selection.ranges(0);return 0===i.startOffset&&0===i.endOffset?m(e).before(y.INVISIBLE_SPACE+y.MARKERS):m(e).after(y.INVISIBLE_SPACE+y.MARKERS),h.selection.restore(),!1}}r&&r.stopPropagation(),l(e)}}},h.helpers.isIOS()?100:0)}}function l(e){var t=h.popups.get("link.edit");t||(t=function a(){var e="";1<=h.opts.linkEditButtons.length&&("A"==h.el.tagName&&0<=h.opts.linkEditButtons.indexOf("linkRemove")&&h.opts.linkEditButtons.splice(h.opts.linkEditButtons.indexOf("linkRemove"),1),e='<div class="fr-buttons">'.concat(h.button.buildList(h.opts.linkEditButtons),"</div>"));var t={buttons:e},n=h.popups.create("link.edit",t);h.$wp&&h.events.$on(h.$wp,"scroll.link-edit",function(){v()&&h.popups.isVisible("link.edit")&&l(v())});return n}());var n=m(e);h.popups.isVisible("link.edit")||h.popups.refresh("link.edit"),h.popups.setContainer("link.edit",h.$sc);var i=n.offset().left+n.outerWidth()/2,r=n.offset().top+n.outerHeight();h.popups.show("link.edit",i,r,n.outerHeight(),!0)}function a(){h.popups.hide("link.edit")}function o(){var e=h.popups.get("link.insert"),t=v();if(t){var n,i,r=m(t),a=e.find('input.fr-link-attr[type="text"]'),l=e.find('input.fr-link-attr[type="checkbox"]');for(n=0;n<a.length;n++)(i=m(a[n])).val(r.attr(i.attr("name")||""));for(l.attr("checked",!1),n=0;n<l.length;n++)i=m(l[n]),r.attr(i.attr("name"))==i.data("checked")&&i.attr("checked",!0);e.find('input.fr-link-attr[type="text"][name="text"]').val(r.text())}else e.find('input.fr-link-attr[type="text"]').val(""),e.find('input.fr-link-attr[type="checkbox"]').attr("checked",!1),e.find('input.fr-link-attr[type="text"][name="text"]').val(h.selection.text());e.find("input.fr-link-attr").trigger("change"),(h.image?h.image.get():null)?e.find('.fr-link-attr[name="text"]').parent().hide():e.find('.fr-link-attr[name="text"]').parent().show()}function s(e){if(e)return h.popups.onRefresh("link.insert",o),!0;var t="";1<=h.opts.linkInsertButtons.length&&(t='<div class="fr-buttons fr-tabs">'.concat(h.button.buildList(h.opts.linkInsertButtons),"</div>"));var n="",i=0;for(var r in n='<div class="fr-link-insert-layer fr-layer fr-active" id="fr-link-insert-layer-'.concat(h.id,'">'),n+='<div class="fr-input-line"><input id="fr-link-insert-layer-url-'.concat(h.id,'" name="href" type="text" class="fr-link-attr" placeholder="').concat(h.language.translate("URL"),'" tabIndex="').concat(++i,'"></div>'),h.opts.linkText&&(n+='<div class="fr-input-line"><input id="fr-link-insert-layer-text-'.concat(h.id,'" name="text" type="text" class="fr-link-attr" placeholder="').concat(h.language.translate("Text"),'" tabIndex="').concat(++i,'"></div>')),h.opts.linkAttributes)if(h.opts.linkAttributes.hasOwnProperty(r)){var a=h.opts.linkAttributes[r];n+='<div class="fr-input-line"><input name="'.concat(r,'" type="text" class="fr-link-attr" placeholder="').concat(h.language.translate(a),'" tabIndex="').concat(++i,'"></div>')}h.opts.linkAlwaysBlank||(n+='<div class="fr-checkbox-line"><span class="fr-checkbox"><input name="target" class="fr-link-attr" data-checked="_blank" type="checkbox" id="fr-link-target-'.concat(h.id,'" tabIndex="').concat(++i,'"><span>').concat('<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10" height="10" viewBox="0 0 32 32"><path d="M27 4l-15 15-7-7-5 5 12 12 20-20z" fill="#FFF"></path></svg>','</span></span><label id="fr-label-target-').concat(h.id,'">').concat(h.language.translate("Open in new tab"),"</label></div>"));var l={buttons:t,input_layer:n+='<div class="fr-action-buttons"><button class="fr-command fr-submit" role="button" data-cmd="linkInsert" href="#" tabIndex="'.concat(++i,'" type="button">').concat(h.language.translate("Insert"),"</button></div></div>")},s=h.popups.create("link.insert",l);return h.$wp&&h.events.$on(h.$wp,"scroll.link-insert",function(){(h.image?h.image.get():null)&&h.popups.isVisible("link.insert")&&f(),h.popups.isVisible("link.insert")&&c()}),s}function p(e,t,n){if(h.opts.trackChangesEnabled){if(h.edit.on(),h.events.focus(!0),h.undo.saveStep(),h.markers.insert(),h.html.wrap(),!h.$el.find(".fr-marker").length)return void h.popups.hide("link.insert");h.markers.remove()}if(void 0===n&&(n={}),!1===h.events.trigger("link.beforeInsert",[e,t,n]))return!1;var i=h.image?h.image.get():null;i||"A"==h.el.tagName?"A"==h.el.tagName&&h.$el.focus():(h.selection.restore(),h.popups.hide("link.insert"));var r=e;h.opts.linkConvertEmailAddress&&h.helpers.isEmail(e)&&!/^mailto:.*/i.test(e)&&(e="mailto:".concat(e));if(""===h.opts.linkAutoPrefix||new RegExp("^("+y.LinkProtocols.join("|")+"):.","i").test(e)||/^data:image.*/i.test(e)||/^(https?:|ftps?:|file:|)\/\//i.test(e)||/^([A-Za-z]:(\\){1,2}|[A-Za-z]:((\\){1,2}[^\\]+)+)(\\)?$/i.test(e)||["/","{","[","#","(","."].indexOf((e||"")[0])<0&&(e=h.opts.linkAutoPrefix+e),e=h.helpers.sanitizeURL(e),h.opts.linkAlwaysBlank&&(n.target="_blank"),h.opts.linkAlwaysNoFollow&&(n.rel="nofollow"),h.helpers.isEmail(r)&&(n.target=null,n.rel=null),"_blank"==n.target?(h.opts.linkNoOpener&&(n.rel?n.rel+=" noopener":n.rel="noopener"),h.opts.linkNoReferrer&&(n.rel?n.rel+=" noreferrer":n.rel="noreferrer")):null==n.target&&(n.rel?n.rel=n.rel.replace(/noopener/,"").replace(/noreferrer/,""):n.rel=null),t=t||"",e===h.opts.linkAutoPrefix)return h.popups.get("link.insert").find('input[name="href"]').addClass("fr-error"),h.events.trigger("link.bad",[r]),!1;var a,l=v();if(l){if((a=m(l)).attr("href",e),0<t.length&&a.text()!=t&&!i){if(h.opts.trackChangesEnabled){var s=m(a.get(0).outerHTML);s.insertBefore(a.parent());var o=h.track_changes.wrapLinkInTracking(s,h.track_changes.getPendingChanges().length-1),p=h.track_changes.wrapInDelete(o);a.parent().append(p)}for(var c=a.get(0);1===c.childNodes.length&&c.childNodes[0].nodeType==Node.ELEMENT_NODE;)c=c.childNodes[0];m(c).text(t)}for(var f in i||a.prepend(y.START_MARKER).append(y.END_MARKER),n)n[f]?a.attr(f,n[f]):a.removeAttr(f);i||h.selection.restore()}else{i?(i.wrap('<a href="'.concat(e,'"></a>')),h.image.hasCaption()&&i.parent().append(i.parents(".fr-img-caption").find(".fr-inner"))):(h.format.remove("a"),h.selection.isCollapsed()?(t=0===t.length?r:t,h.html.insert('<a href="'.concat(e,'">').concat(y.START_MARKER).concat(t.replace(/&/g,"&").replace(/</,"<",">",">")).concat(y.END_MARKER,"</a>")),h.selection.restore()):0<t.length&&t!=h.selection.text().replace(/\n/g,"")?(h.selection.remove(),h.html.insert('<a href="'.concat(e,'">').concat(y.START_MARKER).concat(t.replace(/&/g,"&")).concat(y.END_MARKER,"</a>")),h.selection.restore()):(!function g(){if(!h.selection.isCollapsed()){h.selection.save();for(var e=h.$el.find(".fr-marker").addClass("fr-unprocessed").toArray();e.length;){var t=m(e.pop());t.removeClass("fr-unprocessed");var n=h.node.deepestParent(t.get(0));if(n){for(var i=t.get(0),r="",a="";i=i.parentNode,h.node.isBlock(i)||(r+=h.node.closeTagString(i),a=h.node.openTagString(i)+a),i!=n;);var l=h.node.openTagString(t.get(0))+t.html()+h.node.closeTagString(t.get(0));t.replaceWith('<span id="fr-break"></span>');var s=n.outerHTML;s=(s=s.replace(/<span id="fr-break"><\/span>/g,r+l+a)).replace(a+r,""),n.outerHTML=s}e=h.$el.find(".fr-marker.fr-unprocessed").toArray()}h.html.cleanEmptyTags(),h.selection.restore()}}(),h.format.apply("a",{href:e})));for(var d=b(),u=0;u<d.length;u++)(a=m(d[u])).attr(n),a.removeAttr("_moz_dirty");1==d.length&&h.$wp&&!i&&(m(d[0]).prepend(y.START_MARKER).append(y.END_MARKER),h.selection.restore())}if(i){var k=h.popups.get("link.insert");k&&k.find("input:focus").blur(),h.image.edit(i)}else E()}function c(){a();var e=v();if(e){var t=h.popups.get("link.insert");t||(t=s()),h.popups.isVisible("link.insert")||(h.popups.refresh("link.insert"),h.selection.save(),h.helpers.isMobile()&&(h.events.disableBlur(),h.$el.blur(),h.events.enableBlur())),h.popups.setContainer("link.insert",h.$sc);var n=(h.image?h.image.get():null)||m(e),i=n.offset().left+n.outerWidth()/2,r=n.offset().top+n.outerHeight();h.popups.show("link.insert",i,r,n.outerHeight(),!0)}}function f(){var e=h.image?h.image.getEl():null;if(e){var t=h.popups.get("link.insert"),n=e.outerWidth()/2;h.image.hasCaption()&&(e=e.find(".fr-img-wrap"),m(e)&&m(e).find("img")&&(n=m(e).find("img").outerWidth()/2)),t||(t=s()),o(),h.popups.setContainer("link.insert",h.$sc);var i=e.offset().left+n,r=e.offset().top+e.outerHeight(),a=e.outerHeight();h.opts.iframe&&h.image.hasCaption()&&m(e)&&m(e).find("img")&&(a=m(e).find("img").outerHeight()),h.popups.show("link.insert",i,r,a,!0)}}return{_init:function e(){h.events.on("keyup",function(e){e.which!=y.KEYCODE.ESC&&E(e)}),h.events.on("window.mouseup",E),h.events.$on(h.$el,"click","a",function(e){h.edit.isDisabled()&&e.preventDefault()}),h.helpers.isMobile()&&h.events.$on(h.$doc,"selectionchange",E),s(!0),"A"==h.el.tagName&&h.$el.addClass("fr-view"),h.events.on("toolbar.esc",function(){if(h.popups.isVisible("link.edit"))return h.events.disableBlur(),h.events.focus(),!1},!0)},remove:function i(){var e=v(),t=h.image?h.image.get():null;if(!1===h.events.trigger("link.beforeRemove",[e]))return!1;if(t&&e)if(h.image.hasCaption()){t.addClass("img-link-caption"),m(e).replaceWith(m(e).html());var n=document.querySelectorAll("img.img-link-caption");h.image.edit(m(n[0])),m(n[0]).removeClass("img-link-caption")}else t.unwrap(),h.image.edit(t);else e&&(h.selection.save(),m(e).replaceWith(m(e).html()),h.selection.restore(),a())},showInsertPopup:function d(){var e=h.$tb.find('.fr-command[data-cmd="insertLink"]'),t=h.popups.get("link.insert");if(t||(t=s()),!t.hasClass("fr-active"))if(h.popups.refresh("link.insert"),h.popups.setContainer("link.insert",h.$tb||h.$sc),e.isVisible()){var n=h.button.getPosition(e),i=n.left,r=n.top;h.popups.show("link.insert",i,r,e.outerHeight())}else h.position.forSelection(t),h.popups.show("link.insert")},usePredefined:function u(e){var t,n,i=h.opts.linkList[e],r=h.popups.get("link.insert"),a=r.find('input.fr-link-attr[type="text"]'),l=r.find('input.fr-link-attr[type="checkbox"]');for(i.rel&&(r.rel=i.rel),n=0;n<a.length;n++)i[(t=m(a[n])).attr("name")]?(t.val(i[t.attr("name")]),t.toggleClass("fr-not-empty",!0)):"text"!=t.attr("name")&&t.val("");for(n=0;n<l.length;n++)(t=m(l[n])).attr("checked",t.data("checked")==i[t.attr("name")]);h.accessibility.focusPopup(r)},insertCallback:function k(){var e,t,n=h.popups.get("link.insert"),i=n.find('input.fr-link-attr[type="text"]'),r=n.find('input.fr-link-attr[type="checkbox"]'),a=(i.filter('[name="href"]').val()||"").trim(),l=h.opts.linkText?i.filter('[name="text"]').val():"",s={};for(t=0;t<i.length;t++)e=m(i[t]),["href","text"].indexOf(e.attr("name"))<0&&(s[e.attr("name")]=e.val());for(t=0;t<r.length;t++)(e=m(r[t])).is(":checked")?s[e.attr("name")]=e.data("checked"):s[e.attr("name")]=e.data("unchecked")||null;n.rel&&(s.rel=n.rel);var o=h.helpers.scrollTop();p(a,l,s),m(h.o_win).scrollTop(o)},insert:p,update:c,get:v,allSelected:b,back:function t(){h.image&&h.image.get()?h.image.back():(h.events.disableBlur(),h.selection.restore(),h.events.enableBlur(),v()&&h.$wp?(h.selection.restore(),a(),E()):"A"==h.el.tagName?(h.$el.focus(),E()):(h.popups.hide("link.insert"),h.toolbar.showInline()))},imageLink:f,applyStyle:function g(e,t,n){void 0===n&&(n=h.opts.linkMultipleStyles),void 0===t&&(t=h.opts.linkStyles);var i=v();if(!i)return!1;if(!n){var r=Object.keys(t);r.splice(r.indexOf(e),1),m(i).removeClass(r.join(" "))}m(i).toggleClass(e),E()}}},y.DefineIcon("insertLink",{NAME:"link",SVG_KEY:"insertLink"}),y.RegisterShortcut(y.KEYCODE.K,"insertLink",null,"K"),y.RegisterCommand("insertLink",{title:"Insert Link",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible("link.insert")?(this.$el.find(".fr-marker").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide("link.insert")):this.link.showInsertPopup()},plugin:"link"}),y.DefineIcon("linkOpen",{NAME:"external-link",FA5NAME:"external-link-alt",SVG_KEY:"openLink"}),y.RegisterCommand("linkOpen",{title:"Open Link",undo:!1,refresh:function(e){this.link.get()?e.removeClass("fr-hidden"):e.addClass("fr-hidden")},callback:function(){var e=this.link.get();e&&(-1!==e.href.indexOf("mailto:")?this.o_win.open(e.href).close():(e.target||(e.target="_self"),this.browser.msie||this.browser.edge?this.o_win.open(e.href,e.target):this.o_win.open(e.href,e.target,"noopener")),this.popups.hide("link.edit"))},plugin:"link"}),y.DefineIcon("linkEdit",{NAME:"edit",SVG_KEY:"edit"}),y.RegisterCommand("linkEdit",{title:"Edit Link",undo:!1,refreshAfterCallback:!1,popup:!0,callback:function(){this.link.update()},refresh:function(e){this.link.get()?e.removeClass("fr-hidden"):e.addClass("fr-hidden")},plugin:"link"}),y.DefineIcon("linkRemove",{NAME:"unlink",SVG_KEY:"unlink"}),y.RegisterCommand("linkRemove",{title:"Unlink",callback:function(){this.link.remove()},refresh:function(e){this.link.get()?e.removeClass("fr-hidden"):e.addClass("fr-hidden")},plugin:"link"}),y.DefineIcon("linkBack",{NAME:"arrow-left",SVG_KEY:"back"}),y.RegisterCommand("linkBack",{title:"Back",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.link.back()},refresh:function(e){var t=this.link.get()&&this.doc.hasFocus();(this.image?this.image.get():null)||t||this.opts.toolbarInline?(e.removeClass("fr-hidden"),e.next(".fr-separator").removeClass("fr-hidden")):(e.addClass("fr-hidden"),e.next(".fr-separator").addClass("fr-hidden"))},plugin:"link"}),y.DefineIcon("linkList",{NAME:"search",SVG_KEY:"search"}),y.RegisterCommand("linkList",{title:"Choose Link",type:"dropdown",focus:!1,undo:!1,refreshAfterCallback:!1,html:function(){for(var e='<ul class="fr-dropdown-list" role="presentation">',t=this.opts.linkList,n=0;n<t.length;n++)e+='<li role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="linkList" data-param1="'.concat(n,'">').concat(t[n].displayText||t[n].text,"</a></li>");return e+="</ul>"},callback:function(e,t){this.link.usePredefined(t)},plugin:"link"}),y.RegisterCommand("linkInsert",{focus:!1,refreshAfterCallback:!1,callback:function(){this.link.insertCallback()},refresh:function(e){this.link.get()?e.text(this.language.translate("Update")):e.text(this.language.translate("Insert"))},plugin:"link"}),y.DefineIcon("imageLink",{NAME:"link",SVG_KEY:"insertLink"}),y.RegisterCommand("imageLink",{title:"Insert Link",undo:!1,focus:!1,popup:!0,callback:function(){this.link.imageLink()},refresh:function(e){var t;this.link.get()?((t=e.prev()).hasClass("fr-separator")&&t.removeClass("fr-hidden"),e.addClass("fr-hidden")):((t=e.prev()).hasClass("fr-separator")&&t.addClass("fr-hidden"),e.removeClass("fr-hidden"))},plugin:"link"}),y.DefineIcon("linkStyle",{NAME:"magic",SVG_KEY:"linkStyles"}),y.RegisterCommand("linkStyle",{title:"Style",type:"dropdown",html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t=this.opts.linkStyles;for(var n in t)t.hasOwnProperty(n)&&(e+='<li role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="linkStyle" data-param1="'.concat(n,'">').concat(this.language.translate(t[n]),"</a></li>"));return e+="</ul>"},callback:function(e,t){this.link.applyStyle(t)},refreshOnShow:function(e,t){var n=this.$,i=this.link.get();if(i){var r=n(i);t.find(".fr-command").each(function(){var e=n(this).data("param1"),t=r.hasClass(e);n(this).toggleClass("fr-active",t).attr("aria-selected",t)})}},refresh:function(e){this.link.get()?e.removeClass("fr-hidden"):e.addClass("fr-hidden")},plugin:"link"})}); 752},{"froala-editor":8}],18:[function(require,module,exports){ 753/*! 754 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 755 * License https://froala.com/wysiwyg-editor/terms/ 756 * Copyright 2014-2023 Froala Labs 757 */ 758 759!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(e.FroalaEditor)}(this,function(i){"use strict";i=i&&i.hasOwnProperty("default")?i["default"]:i,Object.assign(i.DEFAULTS,{listAdvancedTypes:!0}),i.PLUGINS.lists=function(m){var g=m.$;function d(e){return'<span class="fr-open-'.concat(e.toLowerCase(),'"></span>')}function f(e){return'<span class="fr-close-'.concat(e.toLowerCase(),'"></span>')}function o(e,t){!function c(e,t){for(var a=[],n=0;n<e.length;n++){var r=e[n].parentNode;"LI"==e[n].tagName&&r.tagName!=t&&a.indexOf(r)<0&&a.push(r)}for(var o=a.length-1;0<=o;o--){var l=g(a[o]);l.replaceWith("<".concat(t.toLowerCase()," ").concat(m.node.attributes(l.get(0)),">").concat(l.html(),"</").concat(t.toLowerCase(),">"))}}(e,t);var a,n=m.html.defaultTag(),r=null;e.length&&(a="rtl"==m.opts.direction||"rtl"==g(e[0]).css("direction")?"margin-right":"margin-left");for(var o=0;o<e.length;o++)if("TD"!=e[o].tagName&&"TH"!=e[o].tagName&&"LI"!=e[o].tagName){var l=m.helpers.getPX(g(e[o]).css(a))||0;(e[o].style.marginLeft=null)===r&&(r=l);var i=0<r?"<".concat(t,' style="').concat(a,": ").concat(r,'px ">'):"<".concat(t,">"),s="</".concat(t,">");for(l-=r;0<l/m.opts.indentMargin;)i+="</".concat(t,">"),s+=s,l-=m.opts.indentMargin;n&&e[o].tagName.toLowerCase()==n?g(e[o]).replaceWith("".concat(i,"<li").concat(m.node.attributes(e[o]),">").concat(g(e[o]).html(),"</li>").concat(s)):g(e[o]).wrap("".concat(i,"<li></li>").concat(s))}m.clean.lists()}function c(e){var t,a;for(t=e.length-1;0<=t;t--)for(a=t-1;0<=a;a--){if(g(e[a]).find(e[t]).length||e[a]==e[t]){e.splice(t,1);break}if(g(e[a]).contains(e[t])){e.splice(a,1);break}}var n=[];for(t=0;t<e.length;t++){var r=g(e[t]),o=e[t].parentNode,l=r.attr("class");if(r.before(f(o.tagName)),"LI"==o.parentNode.tagName)r.before(f("LI")),r.after(d("LI"));else if("OL"==o.parentNode.tagName)r.before(f("OL")),r.after(d("OL"));else if("UL"==o.parentNode.tagName)r.before(f("UL")),r.after(d("UL"));else{var i="";l&&(i+=' class="'.concat(l,'"'));var s="rtl"==m.opts.direction||"rtl"==r.css("direction")?"margin-right":"margin-left";m.helpers.getPX(g(o).css(s))&&0<=(g(o).attr("style")||"").indexOf("".concat(s,":"))&&(i+=' style="'.concat(s,":").concat(m.helpers.getPX(g(o).css(s)),'px;"')),m.html.defaultTag()&&0===r.find(m.html.blockTagsQuery()).length&&r.wrapInner(m.html.defaultTag()+i),m.node.isEmpty(r.get(0),!0)||0!==r.find(m.html.blockTagsQuery()).length||("DIV"==o.parentNode.tagName&&m.html.defaultTag()?(r.prepend(d(m.html.defaultTag())),r.append(f(m.html.defaultTag()))):r.append("<br>")),r.append(d("LI")),r.prepend(f("LI"))}r.after(d(o.tagName)),"LI"==o.parentNode.tagName&&(o=o.parentNode.parentNode),n.indexOf(o)<0&&n.push(o)}for(t=0;t<n.length;t++){var c=g(n[t]),p=c.html();p=(p=p.replace(/<span class="fr-close-([a-z]*)"><\/span>/g,"</$1>")).replace(/<span class="fr-open-([a-z]*)"><\/span>/g,"<$1>
759"),c.replaceWith(m.node.openTagString(c.get(0))+p+m.node.closeTagString(c.get(0)))}m.$el.find("li:empty").remove(),m.$el.find("ul:empty, ol:empty").remove(),m.clean.lists(),m.$el.find("ul:empty, ol:empty").remove(),m.html.wrap()}function e(e){if("indent"==e||"outdent"==e){var t=!1,a=m.selection.blocks(),n=[],r=a[0].previousSibling||a[0].parentElement;if("outdent"==e){if("UL"!=a[0].parentNode.tagName&&"UL"!=r.parentNode.tagName&&"OL"!=r.parentNode.tagName&&"LI"!=r.parentNode.tagName)return;if(!a[0].previousSibling&&"none"==r.parentNode.style.listStyleType)return void function l(e){for(m.selection.save();0<e.childNodes.length;)e.parentNode.parentNode.append(e.childNodes[0]);m.clean.lists(),m.selection.restore()}(r)}else{if("UL"!=a[0].parentElement.tagName&&"OL"!=a[0].parentElement.tagName&&"LI"!=a[0].parentElement.tagName)return;if(m.node.isBlock(a[0])&&"LI"!==a[0].tagName&&0<g(a[0]).parentsUntil(m.$el,"LI").length&&(a[0]=a[0].parentElement,r=a[0].parentElement),!a[0].previousSibling||"LI"!=a[0].previousSibling.tagName)return void function i(e){m.selection.save();for(var t="OL"==e.tagName?document.createElement("ol"):document.createElement("ul");0<e.childNodes.length;)t.append(e.childNodes[0]);var a=document.createElement("li");t.append(a),e.append(t),m.clean.lists(),m.selection.restore()}(r)}for(var o=0;o<a.length;o++)"LI"==a[o].tagName?(t=!0,n.push(a[o])):"LI"==a[o].parentNode.tagName&&(t=!0,n.push(a[o].parentNode));t&&("indent"==e?function f(e){m.selection.save();for(var t=0;t<e.length;t++){var a=e[t].previousSibling;if(a){var n=g(e[t]).find("> ul, > ol").last().get(0);if(n){var r=g(document.createElement("li"));if(n.childNodes.length)for(var o=n.childNodes[0].attributes,l=0;l<o.length;l++){var i=o[l];"style"===i.name&&(r[0].style.cssText+=i.value)}g(n).prepend(r);for(var s=m.node.contents(e[t])[0];s&&!m.node.isList(s);){var c=s.nextSibling;r.append(s),s=c}g(a).append(g(n)),g(e[t]).remove()}else{var p=g(a).find("> ul, > ol").last().get(0);if(p)g(p).append(g(e[t]));else{var d=g("<".concat(e[t].parentNode.tagName,">"));g(a).append(d),d.append(g(e[t]))}}}}m.clean.lists(),m.selection.restore()}(n):function s(e){m.selection.save(),c(e),m.selection.restore()}(n))}}return{_init:function t(){m.events.on("commands.after",e),m.events.on("keydown",function(e){if(e.which==i.KEYCODE.TAB){for(var t=m.selection.blocks(),a=[],n=0;n<t.length;n++)"LI"==t[n].tagName?a.push(t[n]):"LI"==t[n].parentNode.tagName&&a.push(t[n].parentNode);if(1<a.length||a.length&&(m.selection.info(a[0]).atStart||m.node.isEmpty(a[0])))return e.preventDefault(),e.stopPropagation(),e.shiftKey?m.commands.outdent():m.commands.indent(),!1}},!0)},format:function l(e,t){var a,n;for(m.html.syncInputs(),m.selection.save(),m.html.wrap(!0,!0,!0,!0),m.selection.restore(),n=m.selection.blocks(!0),a=0;a<n.length;a++)"LI"!=n[a].tagName&&"LI"==n[a].parentNode.tagName&&(n[a]=n[a].parentNode);if(m.selection.save(),function r(e,t){for(var a=!0,n=0;n<e.length;n++){if("LI"!=e[n].tagName)return!1;e[n].parentNode.tagName!=t&&(a=!1)}return a}(n,e)?t||c(n):o(n,e),m.html.unwrap(),m.selection.restore(),t=t||"default"){for(n=m.selection.blocks(),a=0;a<n.length;a++)"LI"!=n[a].tagName&&"LI"==n[a].parentNode.tagName&&(n[a]=n[a].parentNode);for(a=0;a<n.length;a++)"LI"==n[a].tagName&&(g(n[a].parentNode).css("list-style-type","default"===t?"":t),0===(g(n[a].parentNode).attr("style")||"").length&&g(n[a].parentNode).removeAttr("style"))}},refresh:function r(e,t){var a=g(m.selection.element());if(a.get(0)!=m.el){var n=a.get(0);(n="LI"!=n.tagName&&n.firstElementChild&&"LI"!=n.firstElementChild.tagName?a.parents("li").get(0):"LI"==n.tagName||n.firstElementChild?n.firstElementChild&&"LI"==n.firstElementChild.tagName?a.get(0).firstChild:a.get(0):a.parents("li").get(0))&&n.parentNode.tagName==t&&m.el.contains(n.parentNode)&&e.addClass("fr-active")}}}},i.DefineIcon("formatOLSimple",{NAME:"list-ol",SVG_KEY:"orderedList"}),i.RegisterCommand("formatOLSimple",{title:"Ordered List",type:"button",options:{"default":"Default",circle:"Circle",disc:"Disc",square:"Square"},refresh:function(e){this.lists.refresh(e,"OL")},callback:function(e,t){this.lists.format("OL",t)},plugin:"lists"}),i.RegisterCommand("formatUL",{title:"Unordered List",type:"button",hasOptions:function(){return this.opts.listAdvancedTypes},options:{"default":"Default",circle:"Circle",disc:"Disc",square:"Square"},refresh:function(e){this.lists.refresh(e,"UL")},callback:function(e,t){this.lists.format("UL",t)},plugin:"lists"}),i.RegisterCommand("formatOL",{title:"Ordered List",hasOptions:function(){return this.opts.listAdvancedTypes},options:{"default":"Default","lower-alpha":"Lower Alpha","lower-greek":"Lower Greek","lower-roman":"Lower Roman","upper-alpha":"Upper Alpha","upper-roman":"Upper Roman"},refresh:function(e){this.lists.refresh(e,"OL")},callback:function(e,t){this.lists.format("OL",t)},plugin:"lists"}),i.DefineIcon("formatUL",{NAME:"list-ul",SVG_KEY:"unorderedList"}),i.DefineIcon("formatOL",{NAME:"list-ol",SVG_KEY:"orderedList"})}); 760},{"froala-editor":8}],19:[function(require,module,exports){ 761/*! 762 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 763 * License https://froala.com/wysiwyg-editor/terms/ 764 * Copyright 2014-2023 Froala Labs 765 */ 766 767!function(a,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(a.FroalaEditor)}(this,function(a){"use strict";a=a&&a.hasOwnProperty("default")?a["default"]:a,Object.assign(a.DEFAULTS,{paragraphFormat:{N:"Normal",H1:"Heading 1",H2:"Heading 2",H3:"Heading 3",H4:"Heading 4",PRE:"Code"},paragraphFormatSelection:!1,paragraphDefaultSelection:"Paragraph Format"}),a.PLUGINS.paragraphFormat=function(h){var g=h.$;function c(a,t){var e=h.html.defaultTag();if(t&&t.toLowerCase()!=e)if(0<a.find("ul, ol").length){var r=g("<"+t+">");a.prepend(r);for(var n=h.node.contents(a.get(0))[0];n&&["UL","OL"].indexOf(n.tagName)<0;){var o=n.nextSibling;r.append(n),n=o}}else a.html("<"+t+">"+a.html()+"</"+t+">")}return{apply:function u(a){"N"==a&&(a=h.html.defaultTag()),h.selection.save(),h.html.wrap(!0,!0,!h.opts.paragraphFormat.BLOCKQUOTE,!0,!0),h.selection.restore(
vendor: 1,523 bytes, line 767
767);var t,e,r,n,o,i,p,l,s=h.selection.blocks();h.selection.save(),h.$el.find("pre").attr("skip",!0);for(var m=0;m<s.length;m++)if(s[m].tagName!=a&&!h.node.isList(s[m])){var d=g(s[m]);if("LI"==s[m].tagName)c(d,a);else if("LI"==s[m].parentNode.tagName&&s[m])i=d,p=a,l=h.html.defaultTag(),p&&p.toLowerCase()!=l||(p='div class="fr-temp-div"'),i.replaceWith(g("<"+p+">").html(i.html()));else if(0<=["TD","TH"].indexOf(s[m].parentNode.tagName))r=d,n=a,o=h.html.defaultTag(),n||(n='div class="fr-temp-div"'+(h.node.isEmpty(r.get(0),!0)?' data-empty="true"':"")),n.toLowerCase()==o?(h.node.isEmpty(r.get(0),!0)||r.append("<br/>"),r.replaceWith(r.html())):r.replaceWith(g("<"+n+">").html(r.html()));else{if("PRE"===a&&null===d[0].nextSibling){var f=g("<br>");d[0].after(f[0])}t=d,(e=a)||(e='div class="fr-temp-div"'+(h.node.isEmpty(t.get(0),!0)?' data-empty="true"':"")),("H1"==e||"H2"==e||"H3"==e||"H4"==e||"H5"==e)&&-1<h.node.attributes(t.get(0)).indexOf("font-size:")?t.replaceWith(g("<"+e+" "+h.node.attributes(t.get(0)).replace(/font-size:[0-9]+px;?/,"")+">").html(t.html()).removeAttr("data-empty")):t.replaceWith(g("<"+e+" "+h.node.attributes(t.get(0))+">").html(t.html()).removeAttr("data-empty"))}}h.$el.find('pre:not([skip="true"]) + pre:not([skip="true"])').each(function(){g(this).prev().append("<br>"+g(this).html()),g(this).remove()}),h.$el.find("pre").removeAttr("skip"),h.html.unwrap(),h.selection.restore()},refreshOnShow:function i(a,t){var e=h.selection.blocks();if(e.length){var r=e[0],n="N",o=h.html.defaultTag();
vendor: 2,631 bytes, lines 767-775
767r.tagName.toLowerCase()!=o&&r!=h.el&&(n=r.tagName),t.find('.fr-command[data-param1="'+n+'"]').addClass("fr-active").attr("aria-selected",!0)}else t.find('.fr-command[data-param1="N"]').addClass("fr-active").attr("aria-selected",!0)},refresh:function o(a){if(h.opts.paragraphFormatSelection){var t=h.selection.blocks();if(t.length){var e=t[0],r="N",n=h.html.defaultTag();e.tagName.toLowerCase()!=n&&e!=h.el&&(r=e.tagName),0<=["LI","TD","TH"].indexOf(r)&&(r="N"),a.find(">span").text(h.language.translate(h.opts.paragraphFormat[r]))}else a.find(">span").text(h.language.translate(h.opts.paragraphFormat.N))}}}},a.RegisterCommand("paragraphFormat",{type:"dropdown",displaySelection:function(a){return a.opts.paragraphFormatSelection},defaultSelection:function(a){return a.language.translate(a.opts.paragraphDefaultSelection)},displaySelectionWidth:80,html:function(){var a='<ul class="fr-dropdown-list" role="presentation">',t=this.opts.paragraphFormat;for(var e in t)if(t.hasOwnProperty(e)){var r=this.shortcuts.get("paragraphFormat."+e);r=r?'<span class="fr-shortcut">'+r+"</span>":"",a+='<li role="presentation"><'+("N"==e?this.html.defaultTag()||"DIV":e)+' style="padding: 0 !important; margin: 0 !important; border: 0 !important; background-color: transparent !important; '+("PRE"==e||"N"==e?"font-size: 15px":"font-weight: bold !important; ")+("H1"==e?"font-size: 2em !important; ":"")+("H2"==e?"font-size: 1.5em !important; ":"")+("H3"==e?"font-size: 1.17em !important; ":"")+("H4"==e?"font-size: 15px !important;":"")+'" role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="paragraphFormat" data-param1="'+e+'" title="'+this.language.translate(t[e])+'">'+this.language.translate(t[e])+"</a></"+("N"==e?this.html.defaultTag()||"DIV":e)+"></li>"}return a+="</ul>"},title:"Paragraph Format",callback:function(a,t){this.paragraphFormat.apply(t)},refresh:function(a){this.paragraphFormat.refresh(a)},refreshOnShow:function(a,t){this.paragraphFormat.refreshOnShow(a,t)},plugin:"paragraphFormat"}),a.DefineIcon("paragraphFormat",{NAME:"paragraph",SVG_KEY:"paragraphFormat"})}); 768},{"froala-editor":8}],20:[function(require,module,exports){ 769/*! 770 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 771 * License https://froala.com/wysiwyg-editor/terms/ 772 * Copyright 2014-2023 Froala Labs 773 */ 774 775!function(a,e){"object"==typeof exports&&"undefined"!=typeof module?e(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],e):e(a.FroalaEditor)}(this,function(a){"use strict";a=a&&a.hasOwnProperty("default")?a["default"]:a,Object.assign(a.DEFAULTS,{paragraphStyles:{"fr
775-text-gray":"Gray","fr-text-bordered":"Bordered","fr-text-spaced":"Spaced","fr-text-uppercase":"Uppercase"},paragraphMultipleStyles:!0}),a.PLUGINS.paragraphStyle=function(i){var p=i.$;return{_init:function a(){},apply:function c(a,e,t){void 0===e&&(e=i.opts.paragraphStyles),void 0===t&&(t=i.opts.paragraphMultipleStyles);var r="";t||((r=Object.keys(e)).splice(r.indexOf(a),1),r=r.join(" ")),i.selection.save(),i.html.wrap(!0,!0,!0,!0),i.selection.restore();var l=i.selection.blocks();i.selection.save();for(var n=p(l[0]).hasClass(a),s=0;s<l.length;s++)p(l[s]).removeClass(r).toggleClass(a,!n),p(l[s]).hasClass("fr-temp-div")&&p(l[s]).removeClass("fr-temp-div"),""===p(l[s]).attr("class")&&p(l[s]).removeAttr("class");if(1===l.length&&"fr-text-bordered"===a&&null===l[0].nextSibling){var o=p("<br>");l[0].after(o[0])}i.html.unwrap(),i.selection.restore()},refreshOnShow:function l(a,e){var t=i.selection.blocks();if(t.length){var r=p(t[0]);e.find(".fr-command").each(function(){var a=p(this).data("param1"),e=r.hasClass(a);p(this).toggleClass("fr-active",e).attr("aria-selected",e)})}}}},a.RegisterCommand("paragraphStyle",{type:"dropdown",html:function(){var a='<ul class="fr-dropdown-list" role="presentation">',e=this.opts.paragraphStyles;for(var t in e)e.hasOwnProperty(t)&&(a+='<li role="presentation"><a class="fr-command '.concat(t,'" tabIndex="-1" role="option" data-cmd="paragraphStyle" data-param1="').concat(t,'" title="').concat(this.language.translate(e[t]),'">').concat(this.language.translate(e[t]),"</a></li>"));return a+="</ul>"},title:"Paragraph Style",callback:function(a,e){this.paragraphStyle.apply(e)},refreshOnShow:function(a,e){this.paragraphStyle.refreshOnShow(a,e)},plugin:"paragraphStyle"}),a.DefineIcon("paragraphStyle",{NAME:"magic",SVG_KEY:"paragraphStyle"})}); 776},{"froala-editor":8}],21:[function(require,module,exports){ 777/*! 778 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 779 * License https://froala.com/wysiwyg-editor/terms/ 780 * Copyright 2014-2023 Froala Labs 781 */ 782 783!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(e.FroalaEditor)}(this,function(e){"use strict";(e=e&&e.hasOwnProperty("default")?e["default"]:e).PLUGINS.quote=function(r){var c=r.$;function s(e){for(;e.parentNode&&e.parentNode!=r.el;)e=e.parentNode;return e}return{apply:function t(e){r.selection.save(),r.html.wrap(!0,!0,!0,!0),r.selection.restore(),"increase"==e?function o(){var e,t=r.selection.blocks();for(e=0;e<t.length;e++)t[e]=s(t[e]);r.selection.save();var n=c(document.createElement("blockquote"));for(n.insertBefore(t[0]),e=0;e<t.length;e++)n.append(t[e]);r.opts.trackChangesEnabled&&r.track_changes.addQuote(n),r.html.unwrap(),r.selection.restore()}():"decrease"==e&&function a(){var e,t=r.opts.trackChangesEnabled,n=r.selection.blocks();for(e=0;e<n.length;e++)"BLOCKQUOTE"!=n[e].tagName&&(n[e]=t&&c(n[e]).parentsUntil(r.$el,"[data-track-id^=pending]").get(0)||c(n[e]).parentsUntil(r.$el,"BLOCKQUOTE").get(0));for(r.selection.save(),e=0;e<n.length;e++)n[e]&&(t?r.track_changes.removeQuote(c(n[e]),e):c(n[e]).replaceWith(n[e].innerHTML));r.html.unwrap(),r.selection.restore()}()}}},e.RegisterShortcut(e.KEYCODE.SINGLE_QUOTE,"quote","increase","'"),e.RegisterShortcut(e.KEYCODE.SINGLE_QUOTE,"quote","decrease","'",!0),e.RegisterCommand("quote",{title:"Quote",type:"dropdown",html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t={increase:"Increase",decrease:"Decrease"};for(var n in t)if(t.hasOwnProperty(n)){var o=this.shortcuts.get("quote.".concat(n));e+='<li role="presentation"><a class="fr-command fr-active '.concat(n,'" tabIndex="-1" role="option" data-cmd="quote" data-param1="').concat(n,'" title="').concat(t[n],'">').concat(this.language.translate(t[n])).concat(o?'<span class="fr-shortcut">'.concat(o,"</span>"):"","</a></li>")}return e+="</ul>"},callback:function(e,t){this.quote.apply(t)},plugin:"quote"}),e.DefineIcon("quote",{NAME:"quote-left",SVG_KEY:"blockquote"})}); 784},{"froala-editor":8}],22:[function(require,module,exports){ 785/*! 786 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 787 * License https://froala.com/wysiwyg-editor/terms/ 788 * Copyright 2014-2023 Froala Labs 789 */ 790 791!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(e.FroalaEditor)}(this,function(e){"use strict";e=e&&e.hasOwnProperty("default")?e["default"]:e,Object.assign(e.DEFAULTS,{saveInterval:1e4,saveURL:null,saveParams:{}
791,saveParam:"body",saveMethod:"POST"}),e.PLUGINS.save=function(i){var f=i.$,n=null,l=null,t=!1,v=1,c=2,s={};function u(e,t){i.events.trigger("save.error",[{code:e,message:s[e]},t])}function a(e){void 0===e&&(e=i.html.get());var n=e,t=i.events.trigger("save.before",[e]);if(!1===t)return!1;if("string"==typeof t&&(e=t),i.opts.saveURL){var s={};for(var a in i.opts.saveParams)if(i.opts.saveParams.hasOwnProperty(a)){var o=i.opts.saveParams[a];s[a]="function"==typeof o?o.call(this):o}var r={};r[i.opts.saveParam]=e,f(this).ajax({method:i.opts.saveMethod,url:i.opts.saveURL,data:Object.assign(r,s),crossDomain:i.opts.requestWithCORS,withCredentials:i.opts.requestWithCredentials,headers:i.opts.requestHeaders,done:function(e,t,s){l=n,i.events.trigger("save.after",[e])},fail:function(e){u(c,e.response||e.responseText)}})}else u(v)}function o(){clearTimeout(n),n=setTimeout(function(){var e=i.html.get();(l!=e||t)&&(t=!1,a(l=e))},0)}return s[v]="Missing saveURL option.",s[c]="Something went wrong during save.",{_init:function r(){if(i.opts.letteringClass)for(var e=i.opts.letteringClass,t=i.$el.find(".".concat(e)).length,s=0;s<t;s++)i.$el.find(".".concat(e))[s].innerHTML=i.$el.find(".".concat(e))[s].innerText.replace(/([\w'-]+|[?.",])/g,"<span class = 'fr-word-select'>$1</span>");i.opts.saveInterval&&(l=i.html.get(),i.events.on("contentChanged",function(){setTimeout(o,i.opts.saveInterval)}),i.events.on("keydown destroy",function(){clearTimeout(n)}))},save:a,reset:function e(){o(),t=!1},force:function d(){t=!0}}},e.DefineIcon("save",{NAME:"floppy-o",FA5NAME:"save"}),e.RegisterCommand("save",{title:"Save",undo:!1,focus:!1,refreshAfterCallback:!1,callback:function(){this.save.save()},plugin:"save"})}); 792},{"froala-editor":8}],23:[function(require,module,exports){ 793/*! 794 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 795 * License https://froala.com/wysiwyg-editor/terms/ 796 * Copyright 2014-2023 Froala Labs 797 */ 798 799!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(e.FroalaEditor)}(this,function(Ce){"use strict";Ce=Ce&&Ce.hasOwnProperty("default")?Ce["default"]:Ce,Object.assign(Ce.POPUP_TEMPLATES,{"table.insert":"[_BUTTONS_][_ROWS_COLUMNS_]","table.edit":"[_BUTTONS_]","table.colors":"[_BUTTONS_][_COLORS_][_CUSTOM_COLOR_]"}),Object.assign(Ce.DEFAULTS,{tableInsertMaxSize:10,tableEditButtons:["tableHeader","tableFooter","tableRemove","tableRows","tableColumns","tableStyle","-","tableCells","tableCellBackgroun
799d","tableCellVerticalAlign","tableCellHorizontalAlign","tableCellStyle"],tableInsertButtons:["tableBack","|"],tableResizer:!0,tableDefaultWidth:"100%",tableResizerOffset:5,tableResizingLimit:30,tableColorsButtons:["tableBack","|"],tableColors:["#61BD6D","#1ABC9C","#54ACD2","#2C82C9","#9365B8","#475577","#CCCCCC","#41A85F","#00A885","#3D8EB9","#2969B0","#553982","#28324E","#000000","#F7DA64","#FBA026","#EB6B56","#E25041","#A38F84","#EFEFEF","#FFFFFF","#FAC51C","#F37934","#D14841","#B8312F","#7C706B","#D1D5D8","REMOVE"],tableColorsStep:7,tableCellStyles:{"fr-highlighted":"Highlighted","fr-thick":"Thick"},tableStyles:{"fr-dashed-borders":"Dashed Borders","fr-alternate-rows":"Alternate Rows"},tableCellMultipleStyles:!0,tableMultipleStyles:!0,tableInsertHelper:!0,tableInsertHelperOffset:15}),Ce.PLUGINS.table=function(R){var A,f,n,r,l,o,O,y=R.$;function h(){var e=$();if(e){var t=R.popups.get("table.edit");if(t||(t=p()),t){R.popups.setContainer("table.edit",R.$sc);var a=S(e),l=a.left+(a.right-a.left)/2,n=a.bottom;R.popups.show("table.edit",l,n,a.bottom-a.top,!0),R.edit.isDisabled()&&(R.$el.removeClass("fr-no-selection"),R.edit.on(),R.button.bulkRefresh(),R.selection.setAtEnd(R.$el.find(".fr-selected-cell").last().get(0)),R.selection.restore())}}}function s(){var e=$();if(e){var t=R.popups.get("table.colors");t||(t=function o(){var e="";0<R.opts.tableColorsButtons.length&&(e='<div class="fr-buttons fr-tabs">'.concat(R.button.buildList(R.opts.tableColorsButtons),"</div>"));var t="";R.opts.colorsHEXInput&&(t='<div class="fr-color-hex-layer fr-table-colors-hex-layer fr-active fr-layer" id="fr-table-colors-hex-layer-'.concat(R.id,'"><div class="fr-input-line"><input maxlength="7" id="fr-table-colors-hex-layer-text-').concat(R.id,'" type="text" placeholder="').concat(R.language.translate("HEX Color"),'" tabIndex="1" aria-required="true"></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-submit" data-cmd="tableCellBackgroun
799dCustomColor" tabIndex="2" role="button">').concat(R.language.translate("OK"),"</button></div></div>"));var a={buttons:e,colors:function n(){for(var e='<div class="fr-color-set fr-table-colors">',t=0;t<R.opts.tableColors.length;t++)0!==t&&t%R.opts.tableColorsStep==0&&(e+="<br>"),"REMOVE"!=R.opts.tableColors[t]?e+='<span class="fr-command" style="background: '.concat(R.opts.tableColors[t],';" tabIndex="-1" role="button" data-cmd="tableCellBackgroundColor" data-param1="').concat(R.opts.tableColors[t],'"><span class="fr-sr-only">').concat(R.language.translate("Color")," ").concat(R.opts.tableColors[t]," </span></span>"):e+='<span class="fr-command" data-cmd="tableCellBackgroundColor" tabIndex="-1" role="button" data-param1="REMOVE" title="'.concat(R.language.translate("Clear Formatting"),'">').concat(R.icon.create("tableColorRemove"),'<span class="fr-sr-only">').concat(R.language.translate("Clear Formatting"),"</span></span>");return e+="</div>"}(),custom_color:t},l=R.popups.create("table.colors",a);return R.events.$on(R.$wp,"scroll.table-colors",function(){R.popups.isVisible("table.colors")&&s()}),function r(u){R.events.on("popup.tab",function(e){var t=y(e.currentTarget);if(!R.popups.isVisible("table.colors")||!t.is("span"))return!0;var a=e.which,l=!0;if(Ce.KEYCODE.TAB==a){var n=u.find(".fr-buttons");l=!R.accessibility.focusToolbar(n,!!e.shiftKey)}else if(Ce.KEYCODE.ARROW_UP==a||Ce.KEYCODE.ARROW_DOWN==a||Ce.KEYCODE.ARROW_LEFT==a||Ce.KEYCODE.ARROW_RIGHT==a){var r=t.parent().find("span.fr-command"),o=r.index(t),s=R.opts.colorsStep,i=Math.floor(r.length/s),f=o%s,c=Math.floor(o/s),d=c*s+f,p=i*s;Ce.KEYCODE.ARROW_UP==a?d=((d-s)%p+p)%p:Ce.KEYCODE.ARROW_DOWN==a?d=(d+s)%p:Ce.KEYCODE.ARROW_LEFT==a?d=((d-1)%p+p)%p:Ce.KEYCODE.ARROW_RIGHT==a&&(d=(d+1)%p);var h=y(r.get(d));R.events.disableBlur(),h.focus(),l=!1}else Ce.KEYCODE.ENTER==a&&(R.button.exec(t),l=!1);return!1===l&&(e.preventDefault(),e.stopPropagation()),l},!0)}(l),l}()),R.popups.setContainer("table.colors",R.$sc);var a=S(e),l=(a.left+a.right)/2,n=a.bottom;!function r(){var e=R.popups.get("table.colors"),t=R.$el.find(".fr-selected-cell").first(),a=R.helpers.RGBToHex(t.css("background-color")),l=e.find(".fr-table-colors-hex-layer input");e.find(".fr-selected-color").removeClass("fr-selected-color fr-active-item"),e.find('span[data-param1="'.concat(a,'"]')).addClass("fr-selected-color fr-active-item"),l.val(a).trigger("change")}(),R.popups.show("table.colors",l,n,a.bottom-a.top,!0)}}function i(){0===Q().length&&R.toolbar.enable()}function c(e){if(e)return R.popups.onHide("table.insert",function(){R.popups.get("table.insert").find('.fr-table-size .fr-select-table-size > span[data-row="1"][data-col="1"]').trigger("mouseover")}),!0;var t="";0<R.opts.tableInsertButtons.length&&(t='<div class="fr-buttons fr-tabs">'.concat(R.button.buildList(R.opts.tableInsertButtons),"</div>"));var a={buttons:t,rows_columns:function r(){for(var e='<div class="fr-table-size"><div class="fr-table-size-info">1 × 1</div><div class="fr-select-table-size">',t=1;t<=R.opts.tableInsertMaxSize;t++){for(var a=1;a<=R.opts.tableInsertMaxSize;a++){var l="inline-block";2<t&&!R.helpers.isMobile()&&(l="none");var n="fr-table-cell ";1==t&&1==a&&(n+=" hover"),e+='<span class="fr-command '.concat(n,'" tabIndex="-1" data-cmd="tableInsert" data-row="').concat(t,'" data-col="').concat(a,'" data-param1="').concat(t,'" data-param2="').concat(a,'" style="display: ').concat(l,';" role="button"><span></span><span class="fr-sr-only">').concat(t," × ").concat(a," </span></span>")}e+='<div class="new-line"></div>'}return e+="</div></div>"}()},l=R.popups.create("table.insert",a);return R.events.$on(l,"mouseover",".fr-table-size .fr-select-table-size .fr-table-cell",function(e){d(y(e.currentTarget))},!0),function n(e){R.events.$on(e,"focus","[tabIndex]",function(e){var t=y(e.currentTarget);d(t)}),R.events.on("popup.tab",function(e){var t=y(e.currentTarget);if(!R.popups.isVisible("table.insert")||!t.is("span, a"))return!0;var a,l=e.which;if(Ce.KEYCODE.ARROW_UP==l||Ce.KEYCODE.ARROW_DOWN==l||Ce.KEYCODE.ARROW_LEFT==l||Ce.KEYCODE.ARROW_RIGHT==l){if(t.is("span.fr-table-cell")){var n=t.parent().find("span.fr-table-cell"),r=n.index(t),o=R.opts.tableInsertMaxSize,s=r%o,i=Math.floor(r/o);Ce.KEYCODE.ARROW_UP==l?i=Math.max(0,i-1):Ce.KEYCODE.ARROW_DOWN==l?i=Math.min(R.opts.tableInsertMaxSize-1,i+1):Ce.KEYCODE.ARROW_LEFT==l?s=Math.max(0,s-1):Ce.KEYCODE.ARROW_RIGHT==l&&(s=Math.min(R.opts.tableInsertMaxSize-1,s+1));var f=i*o+s,c=y(n.get(f));d(c),R.events.disableBlur(),c.focus(),a=!1}}else Ce.KEYCODE.ENTER==l&&(R.button.exec(t),a=!1);return!1===a&&(e.preventDefault(),e.stopPropagation()),a},!0)}(l),l}function d(e){var t=e.data("row");null!==t&&(t=parseInt(t));var a=e.data("col");null!==a&&(a=parseInt(a));var l=e.parent();l.siblings(".fr-table-size-info").html("".concat(t," × ").concat(a)),l.find("> span").removeClass("hover fr-active-item");for(var n=1;n<=R.opts.tableInsertMaxSize;n++)for(var r=0;r<=R.opts.tableInsertMaxSize;r++){var o=l.find('> span[data-row="'.concat(n,'"][data-col="').concat(r,'"]'));n<=t&&r<=a?o.addClass("hover"):n<=t+1||n<=2&&!R.helpers.isMobile()?o.css("display","inline-block"):2<n&&!R.helpers.isMobile()&&o.css("display","none")}e.addClass("fr-active-item")}function p(e){if(e)return R.popups.onHide("table.edit",i),!0;if(0<R.opts.tableEditButtons.length){var t={buttons:'<div class="fr-buttons">'.concat(R.button.buildList(R.opts.tableEditButtons),"</div>")},a=R.popups.create("table.edit",t);return R.events.$on(R.$wp,"scroll.table-edit",function(){R.popups.isVisible("table.edit")&&h()}),a}return!1}function u(){if(0<Q().length){var e=ee();R.selection.setBefore(e.get(0))||R.selection.setAfter(e.get(0)),R.selection.restore(
vendor: 17,811 bytes, line 799
799),R.popups.hide("table.edit"),R.opts.trackChangesEnabled?(R.track_changes.removedTable(e),_()):e.remove(),R.toolbar.enable()}}function g(e){var t=ee();if(0<t.length){if(0<R.$el.find("thead .fr-selected-cell").length&&"above"==e||0<R.$el.find("tfoot td.fr-selected-cell").length&&"below"==e)return;var a,l,n,r=$(),o=M(r);if(null==o)return;l="above"==e?o.min_i:o.max_i;var s="<tr>";for(a=0;a<r[l].length;a++){if("below"==e&&l<r.length-1&&r[l][a]==r[l+1][a]||"above"==e&&0<l&&r[l][a]==r[l-1][a]){if(0===a||0<a&&r[l][a]!=r[l][a-1]){var i=y(r[l][a]);i.attr("rowspan",parseInt(i.attr("rowspan"),10)+1)}}else s+='<td style="'+y(r[l][a]).attr("style")+'" ><br></td>'}s+="</tr>",n=0<R.$el.find("thead .fr-selected-cell").length&&"below"==e||0<R.$el.find("tfoot td.fr-selected-cell").length&&"above"==e?y(t.find("tbody").not(t.find("> table tbody"))):y(t.find("tr").not(t.find("> table tr")).get(l)),"below"==e?"TBODY"==n.attr("tagName")?n.prepend(s):n[0].parentNode&&n[0].insertAdjacentHTML("afterend",s):"above"==e&&("TBODY"==n.attr("tagName")?n.append(s):n.before(s),R.popups.isVisible("table.edit")&&h())}}function b(e,t,a){var l,n,r,o,s,i=0,f=$(a);if(e<(t=Math.min(t,f[0].length-1)))for(n=e;n<=t;n++)if(!(e<n&&f[0][n]==f[0][n-1])&&1<(o=Math.min(parseInt(f[0][n].getAttribute("colspan"),10)||1,t-e+1))&&f[0][n]==f[0][n+1])for(i=o-1,l=1;l<f.length;l++)if(f[l][n]!=f[l-1][n]){for(r=n;r<n+o;r++)if(f[l][r]!==undefined)if(1<(s=parseInt(f[l][r].getAttribute("colspan"),10)||1)&&f[l][r]==f[l][r+1])r+=i=Math.min(i,s-1);else if(!(i=Math.max(0,i-1)))break;if(!i)break}i&&v(f,i,"colspan",0,f.length-1,e,t)}function m(e,t,a){var l,n,r,o,s,i=0,f=$(a);if(e<(t=Math.min(t,f.length-1)))for(l=e;l<=t;l++)if(!(e<l&&f[l][0]==f[l-1][0])&&f[l][0]!==undefined&&1<(o=Math.min(parseInt(f[l][0].getAttribute("rowspan"),10)||1,t-e+1))&&f[l][0]==f[l+1][0])for(i=o-1,n=1;n<f[0].length;n++)if(f[l][n]!=f[l][n-1]){for(r=l;r<l+o;r++)if(f[r][n]!==undefined)if(1<(s=parseInt(f[r][n].getAttribute("rowspan"),10)||1)&&f[r][n]==f[r+1][n])r+=i=Math.min(i,s-1);else if(!(i=Math.max(0,i-1)))break;if(!i)break}i&&v(f,i,"rowspan",e,t,0,f[0].length-1)}function v(e,t,a,l,n,r,o){var s,i,f;for(s=l;s<=n;s++)for(i=r;i<=o;i++)l<s&&e[s][i]==e[s-1][i]||r<i&&e[s][i]==e[s][i-1]||e[s][i]!==undefined&&1<(f=parseInt(e[s][i].getAttribute(a),10)||1)&&(1<f-t?e[s][i].setAttribute(a,f-t):e[s][i].removeAttribute(a))}function w(e,t,a,l,n){m(e,t,n),b(a,l,n)}function t(e){var t=R.$el.find(".fr-selected-cell");"REMOVE"!=e?t.css("background-color",R.helpers.HEXtoRGB(e)):t.css("background-color",""),h()}function C(e){e.style.removeProperty("border"),e.style.removeProperty("border-top"),e.style.removeProperty("border-bottom"),e.style.removeProperty("border-left"),e.style.removeProperty("border-right")}function $(e){var f=[];if(null==(e=e||null)&&0<Q().length&&(e=ee()),e){if(!e.find("tr").html().match(/xl[0-9]+/gi))for(var t=e.find("tr:empty"),a=t.length-1;0<=a;a--)y(t[a]).remove();e.findVisible("tr").not(e.find("> table tr")).each(function(s,e){var t=y(e),i=0;t.find("> th, > td").each(function(e,t){for(var a=y(t),l=parseInt(a.attr("colspan"),10)||1,n=parseInt(a.attr("rowspan"),10)||1,r=s;r<s+n;r++)for(var o=i;o<i+l;o++)f[r]||(f[r]=[]),f[r][o]?i++:f[r][o]=t;i+=l})})}return f}function D(e,t){for(var a=0;a<t.length;a++)for(var l=0;l<t[a].length;l++)if(t[a][l]==e)return{row:a,col:l}}function x(e,t,a){for(var l=e+1,n=t+1;l<a.length;){if(a[l][t]!=a[e][t]){l--;break}l++}for(l==a.length&&l--;n<a[e].length;){if(a[e][n]!=a[e][t]){n--;break}n++}return n==a[e].length&&n--,{row:l,col:n}}function E(){R.el.querySelector(".fr-cell-fixed")&&R.el.querySelector(".fr-cell-fixed").classList.remove("fr-cell-fixed"),R.el.querySelector(".fr-cell-handler")&&R.el.querySelector(".fr-cell-handler").classList.remove("fr-cell-handler")}function _(){var e=R.$el.find(".fr-selected-cell");0<e.length&&e.each(function(){var e=y(this);e.removeClass("fr-selected-cell"),""===e.attr("class")&&e.removeAttr("class")}),E()}function T(){R.events.disableBlur(),R.selection.clear(),R.$el.addClass("fr-no-selection"),R.$el.blur(),R.events.enableBlur()}function M(e){var t=R.$el.find(".fr-selected-cell");if(0<t.length){var a,l=e.length,n=0,r=e[0].length,o=0;for(a=0;a<t.length;a++){var s=D(t[a],e),i=x(s.row,s.col,e);l=Math.min(s.row,l),n=Math.max(i.row,n),r=Math.min(s.col,r),o=Math.max(i.col,o)}return{min_i:l,max_i:n,min_j:r,max_j:o}}return null}function S(e){var t=M(e);if(null!=t){var a=y(e[t.min_i][t.min_j]),l=y(e[t.min_i][t.max_j]),n=y(e[t.max_i][t.min_j]);return{left:a.length&&a.offset().left,right:l.length&&l.offset().left+l.outerWidth(),top:a.length&&a.offset().top,bottom:n.length&&n.offset().top+n.outerHeight()}}}function N(e,t){if(y(e).is(t))_(),y(e).addClass("fr-selected-cell");else{T(),R.edit.off();var a=$(),l=D(e,a),n=D(t,a);if(!l||!n)return;var r=function h(e,t,a,l,n){var r,o,s,i,f=e,c=t,d=a,p=l;for(r=f;r<=c;r++)(1<(parseInt(y(n[r][d]).attr("rowspan"),10)||1)||1<(parseInt(y(n[r][d]).attr("colspan"),10)||1))&&(i=x((s=D(n[r][d],n)).row,s.col,n),f=Math.min(s.row,f),c=Math.max(i.row,c),d=Math.min(s.col,d),p=Math.max(i.col,p)),(1<(parseInt(y(n[r][p]).attr("rowspan"),10)||1)||1<(parseInt(y(n[r][p]).attr("colspan"),10)||1))&&(i=x((s=D(n[r][p],n)).row,s.col,n),f=Math.min(s.row,f),c=Math.max(i.row,c),d=Math.min(s.col,d),p=Math.max(i.col,p));for(o=d;o<=p;o++)(1<(parseInt(y(n[f][o]).attr("rowspan"),10)||1)||1<(parseInt(y(n[f][o]).attr("colspan"),10)||1))&&(i=x((s=D(n[f][o],n)).row,s.col,n),f=Math.min(s.row,f),c=Math.max(i.row,c),d=Math.min(s.col,d),p=Math.max(i.col,p)),(1<(parseInt(y(n[c][o]).attr("rowspan"),10)||1)||1<(parseInt(y(n[c][o]).attr("colspan"),10)||1))&&(i=x((s=D(n[c][o],n)).row,s.col,n),f=Math.min(s.row,f),c=Math.max(i.row,c),d=Math.min(s.col,d),p=Math.max(i.col,p));return f==e&&c==t&&d==a&&p==l?{min_i:e,max_i:t,min_j:a,max_j:l}:h(f,c,d,p,n)}(Math.min(l.row,n.row),Math.max(l.row,n.row),Math.min(l.col,n.col),Math.max(l.col,n.col),a);_(),e.classList.add("fr-cell-fixed"),t.classList.add("fr-cell-handler");for(var o=r.min_i;o<=r.max_i;o++)for(var s=r.min_j;s<=r.max_j;s++)y(e).closest("table").is(y(a[o][s]).closest("table"))&&y(a[o][s]).addClass("fr-selected-cell")}}function I(e){var t=null,a=y(e.target);return"TD"==e.target.tagName||"TH"==e.target.tagName?t=e.target:0<a.closest("th",a.closest("thead")[0]).length?t=a.closest("th",a.closest("thead")[0]).get(0):0<a.closest("td",a.closest("tr")[0]).length&&(t=a.closest("td",a.closest("tr")[0]).get(0)),-1===R.$el.html.toString().search(t)?null:t}function K(){_(),R.popups.hide("table.edit")}function e(e){var t=I(e);if("false"==y(t).parents("[contenteditable]").not(".fr-element").not(".fr-img-caption").not("body").first().attr("contenteditable"))return!0;if(0<Q().length&&!t&&K(),!R.edit.isDisabled()||R.popups.isVisible("table.edit"))if(1!=e.which||1==e.which&&R.helpers.isMac()&&e.ctrlKey)(3==e.which||1==e.which&&R.helpers.isMac()&&e.ctrlKey)&&t&&K();else if(r=!0,t){0<Q().length&&!e.shiftKey&&K(),e.stopPropagation(),R.events.trigger("image.hideResizer"),R.events.trigger("video.hideResizer"),n=!0;var a=t.tagName.toLowerCase();e.shiftKey&&0<R.$el.find("".concat(a,".fr-selected-cell")).length?y(R.$el.find("".concat(a,".fr-selected-cell")).closest("table")).is(y(t).closest("table"))?N(l,t):T():((R.keys.ctrlKey(e)||e.shiftKey)&&"TD"===e.currentTarget.tagName&&(1<Q().length||0===y(t).find(R.selection.element()).length&&!y(t).is(R.selection.element()))&&T(),l=t,0<R.opts.tableEditButtons.length&&N(l,l))}}function a(e){if(!R.edit.isDisabled()&&R.popups.areVisible())return!0;var t=I(e);if(1===Q().length&&null===t&&(R.toolbar.enable(),_()),(1===Q().length&&t&&"TD"!==t.tagName&&"TH"!==t.tagName||!n&&!R.$tb.is(e.target)&&!R.$tb.is(y(e.target).closest(".fr-toolbar")))&&(R.toolbar.enable(),_()),("BODY"===e.target.tagName||"HTML"===e.target.tagName)&&!t&&0<Q().length&&R.toolbar.enable(),!(1!=e.which||1==e.which&&R.helpers.isMac()&&e.ctrlKey)){if(r=!1,n)n=!1,I(e)||1!=Q().length?0<Q().length?R.selection.isCollapsed()?(h(),R.toolbar.enable()):(_(),R.edit.on()):Q().length||(R.$el.removeClass("fr-no-selection"),R.edit.on()):_();if(O){O=!1,A.removeClass("fr-moving"),R.$el.removeClass("fr-no-selection"),R.edit.on();var a=parseFloat(A.css("left"))+R.opts.tableResizerOffset+R.$wp.offset().left;R.opts.iframe&&(a-=R.$iframe.offset().left),A.data("release-position",a),A.removeData("max-left"),A.removeData("max-right"),function C(){var e=A.data("origin"),t=A.data("release-position");if(e!==t){var a=A.data("first"),l=A.data("second"),n=A.data("table"),r=n.outerWidth();if(R.undo.canDo()||R.undo.saveStep(),null!=a&&null!=l){var o,s,i,f=$(n),c=[],d=[],p=[],h=[];for(o=0;o<f.length;o++)s=y(f[o][a]),i=y(f[o][l]),c[o]=s.outerWidth(),p[o]=i.outerWidth(),d[o]=c[o]/r*100,h[o]=p[o]/r*100;for(o=0;o<f.length;o++)if(s=y(f[o][a]),i=y(f[o][l]),f[o][a]!=f[o][l]){var u=(d[o]*(c[o]+t-e)/c[o]).toFixed(4);s.css("width",u+"%"),i.css("width",(d[o]+h[o]-u).toFixed(4)+"%")}}else{var g,b=n.parent(),m=r/b.width()*100,v=(parseInt(n.css("margin-left"),10)||0)/b.width()*100,w=(parseInt(n.css("margin-right"),10)||0)/b.width()*100;"rtl"==R.opts.direction&&0===l||"rtl"!=R.opts.direction&&0!==l?(g=(r+t-e)/r*m,n.css("margin-right","calc(100% - ".concat(Math.round(g).toFixed(4),"% - ").concat(Math.round(v).toFixed(4),"%)"))):("rtl"==R.opts.direction&&0!==l||"rtl"!=R.opts.direction&&0===l)&&(g=(r-t+e)/r*m,n.css("margin-left","calc(100% - ".concat(Math.round(g).toFixed(4),"% - ").concat(Math.round(w).toFixed(4),"%)"))),n.css("width","".concat(Math.round(g).toFixed(4),"%"))}R.selection.restore(),R.undo.saveStep(),R.events.trigger("table.resized",[n.get(0)])}A.removeData("origin"),A.removeData("release-position"),A.removeData("first"),A.removeData("second"),A.removeData("table")}(),z()}}}function k(e){if(!(y(e.currentTarget).is(y(e.originalEvent.relatedTarget))||e.currentTarget.contains(e.originalEvent.relatedTarget)||e.originalEvent.relatedTarget&&e.originalEvent.relatedTarget.contains(e.currentTarget))&&(R.events.$on(y("input"),"click",te),!0===n&&0<R.opts.tableEditButtons.length)){if(y(e.currentTarget).closest("table").is(ee())){if("TBODY"===e.currentTarget.parentElement.parentElement.tagName&&"TD"==e.currentTarget.tagName&&0===R.$el.find("th.fr-selected-cell").length&&0===R.$el.find("tfoot td.fr-selected-cell").length)return void N(l,e.currentTarget);if("TFOOT"===e.currentTarget.parentElement.parentElement.tagName&&"TD"==e.currentTarget.tagName&&0===R.$el.find("tbody td.fr-selected-cell").length)return void N(l,e.currentTarget);if("TH"==e.currentTarget.tagName&&0===R.$el.find("td.fr-selected-cell").length)return void N(l,e.currentTarget)}"TD"!==e.currentTarget.tagName&&"TH"!==e.currentTarget.tagName&&T()}}function B(e,t,a,l){for(var n,r=t;r!=R.el&&"TD"!=r.tagName&&"TH"!=r.tagName&&("up"==l?n=r.previousElementSibling:"down"==l&&(n=r.nextElementSibling),!n);)r=r.parentNode;"TD"==r.tagName||"TH"==r.tagName?function o(e,t){for(var a=e;a&&"TABLE"!=a.tagName&&a.parentNode!=R.el;)a=a.parentNode;if(a&&"TABLE"==a.tagName){var l=$(y(a));"up"==t?Y(D(e,l),a,l):"down"==t&&F(D(e,l),a,l)}}(r,l):n&&("up"==l&&R.selection.setAtEnd(n),"down"==l&&R.selection.setAtStart(n))}function Y(e,t,a){0<y(".tribute-container").length&&"none"!=y(".tribute-container").css("display")||(0<e.row?R.selection.setAtEnd(a[e.row-1][e.col]):B(0,t,0,"up"))}function F(e,t,a){if(!(0<y(".tribute-container").length&&"none"!=y(".tribute-container").css("display"))){var l=parseInt(a[e.row][e.col].getAttribute("rowspan"),10)||1;e.row<a.length-l?R.selection.setAtStart(a[e.row+l][e.col]):B(0,t,0,"down")}}function z(){A&&(A.find("div").css("opacity",0),A.css("top",0),A.css("left",0),A.css("height",0),A.find("div").css("height",0),A.hide())}function W(){f&&f.removeClass("fr-visible").css("left","-9999px")}function L(e,t){var a=y(t),l=a.closest("table"),n=l.parent();if(t&&"TD"!=t.tagName&&"TH"!=t.tagName&&(0<a.closest("td").length?t=a.closest("td"):0<a.closest("th").length&&(t=a.closest("th"))),!t||"TD"!=t.tagName&&"TH"!=t.tagName)A&&a.get(0)!=A.get(0)&&a.parent().get(0)!=A.get(0)&&R.core.sameInstance(A)&&z();else{if(a=y(t),0===R.$el.find(a).length)return!1;var r=a.offset().left-1,o=r+a.outerWidth();if(Math.abs(e.pageX-r)<=R.opts.tableResizerOffset||Math.abs(o-e.pageX)<=R.opts.tableResizerOffset){var s,i,f,c,d,p=$(l),h=D(t,p),u=x(h.row,h.col,p),g=l.offset().top,b=l.outerHeight()-1;"rtl"!=R.opts.direction?e.pageX-r<=R.opts.tableResizerOffset?(f=r,0<h.col?(c=r-G(h.col-1,p)+R.opts.tableResizingLimit,d=r+G(h.col,p)-R.opts.tableResizingLimit,s=h.col-1,i=h.col):(s=null,i=0,c=l.offset().left-1-parseInt(l.css("margin-left"),10),d=l.offset().left-1+l.width()-p[0].length*R.opts.tableResizingLimit)):o-e.pageX<=R.opts.tableResizerOffset&&(f=o,u.col<p[u.row].length&&p[u.row][u.col+1]?(c=o-G(u.col,p)+R.opts.tableResizingLimit,d=o+G(u.col+1,p)-R.opts.tableResizingLimit,s=u.col,i=u.col+1):(s=u.col,i=null,c=l.offset().left-1+p[0].length*R.opts.tableResizingLimit,d=n.offset().left-1+n.width()+parseFloat(n.css("padding-left")))):o-e.pageX<=R.opts.tableResizerOffset?(f=o,0<h.col?(c=o-G(h.col,p)+R.opts.tableResizingLimit,d=o+G(h.col-1,p)-R.opts.tableResizingLimit,s=h.col,i=h.col-1):(s=null,i=0,c=l.offset().left+p[0].length*R.opts.tableResizingLimit,d=n.offset().left-1+n.width()+parseFloat(n.css("padding-left")))):e.pageX-r<=R.opts.tableResizerOffset&&(f=r,u.col<p[u.row].length&&p[u.row][u.col+1]?(c=r-G(u.col+1,p)+R.opts.tableResizingLimit,d=r+G(u.col,p)-R.opts.tableResizingLimit,s=u.col+1,i=u.col):(s=u.col,i=null,c=n.offset().left+parseFloat(n.css("padding-left")),d=l.offset().left-1+l.width()-p[0].length*R.opts.tableResizingLimit)),A||function E(){R.shared.$table_resizer||(R.shared.$table_resizer=y(document.createElement("div")).attr("class","fr-table-resizer").html("<div></div>")),A=R.shared.$table_resizer,R.events.$on(A,"mousedown",function(e){return!R.core.sameInstance(A)||(0<Q().length&&K(),1==e.which?(R.selection.save(),O=!0,A.addClass("fr-moving"),T(),R.edit.off(),A.find("div").css("opacity",1),!1):void 0)}),R.events.$on(A,"mousemove",function(e){if(!R.core.sameInstance(A))return!0;O&&(R.opts.iframe&&(e.pageX-=R.$iframe.offset().left),U(e))}),R.events.on("shared.destroy",function(){A.html("").removeData().remove(),A=null},!0),R.events.on("destroy",function(){R.$el.find(".fr-selected-cell").removeClass("fr-selected-cell"),y("body").first().append(A.hide())},!0)}(),A.data("table",l),A.data("first",s),A.data("second",i),A.data("instance",R),R.$wp.append(A);var m=f-R.win.pageXOffset-R.opts.tableResizerOffset-R.$wp.offset().left,v=g-R.$wp.offset().top+R.$wp.scrollTop();if(R.opts.iframe){var w=R.helpers.getPX(R.$wp.find(".fr-iframe").css("padding-top")),C=R.helpers.getPX(R.$wp.find(".fr-iframe").css("padding-left"));m+=R.$iframe.offset().left+C,v+=R.$iframe.offset().top+w,c+=R.$iframe.offset().left,d+=R.$iframe.offset().left}A.data("max-left",c),A.data("max-right",d),A.data("origin",f-R.win.pageXOffset),A.css("top",v),A.css("left",m),A.css("height",b),A.find("div").css("height",b),A.css("padding-left",R.opts.tableResizerOffset),A.css("padding-right",R.opts.tableResizerOffset),A.show()}else R.core.sameInstance(A)&&z()}}function H(e,t){if(R.$box.find(".fr-line-breaker").isVisible())return!1;f||J(),R.$box.append(f),f.data("instance",R);var a,l=y(t).find("tr").first(),n=e.pageX,r=0,o=0;if(R.opts.iframe){var s=R.helpers.getPX(R.$wp.find(".fr-iframe").css("padding-top")),i=R.helpers.getPX(R.$wp.find(".fr-iframe").css("padding-left"));r+=R.$iframe.offset().left-R.helpers.scrollLeft()+i,o+=R.$iframe.offset().top-R.helpers.scrollTop()+s}l.find("th, td").each(function(){var e=y(this);return e.offset().left<=n&&n<e.offset().left+e.outerWidth()/2?(a=parseInt(f.find("a").css("width"),10),f.css("top",o+e.offset().top-R.$box.offset().top-a-5),f.css("left",r+e.offset().left-R.$box.offset().left-a/2),f.data("selected-cell",e),f.data("position","before"),f.addClass("fr-visible"),!1):e.offset().left+e.outerWidth()/2<=n&&n<e.offset().left+e.outerWidth()?(a=parseInt(f.find("a").css("width"),10),f.css("top",o+e.offset().top-R.$box.offset().top-a-5),f.css("left",r+e.offset().left-R.$box.offset().left+e.outerWidth()-a/2),f.data("selected-cell",e),f.data("position","after"),f.addClass("fr-visible"),!1):void 0})}function P(e,t){if(R.$box.find(".fr-line-breaker").isVisible())return!1;f||J(),R.$box.append(f),f.data("instance",R);var a,l=y(t),n=e.pageY,r=0,o=0;if(R.opts.iframe){var s=R.helpers.getPX(R.$wp.find(".fr-iframe").css("padding-top")),i=R.helpers.getPX(R.$wp.find(".fr-iframe").css("padding-left"));r+=R.$iframe.offset().left-R.helpers.scrollLeft()+i,o+=R.$iframe.offset().top-R.helpers.scrollTop()+s}l.find("tr").each(function(){var e=y(this);a=parseInt(f.find("a").css("width"),10);var t=r+e.offset().left-R.$box.offset().left;return t=0!==R.$box.offset().left?t-a-5:t+a-5,e.offset().top<=n&&n<e.offset().top+e.outerHeight()/2?(f.css("top",o+e.offset().top-R.$box.offset().top-a/2),f.css("left",t),f.data("selected-cell",e.find("td").first()),f.data("position","above"),f.addClass("fr-visible"),!1):e.offset().top+e.outerHeight()/2<=n&&n<e.offset().top+e.outerHeight()?(f.css("top",o+e.offset().top-R.$box.offset().top+e.outerHeight()-a/2),f.css("left",t),f.data("selected-cell",e.find("td").first()),f.data("position","below"),f.addClass("fr-visible"),!1):void 0})}function V(e){o=null;var t=R.doc.elementFromPoint(e.pageX-R.win.pageXOffset,e.pageY-R.win.pageYOffset);R.opts.tableResizer&&(!R.popups.areVisible()||R.popups.areVisible()&&R.popups.isVisible("table.edit"))&&L(e,t),!R.opts.tableInsertHelper||R.popups.areVisible()||R.$tb.hasClass("fr-inline")&&R.$tb.isVisible()||function r(e,t){if(0===Q().length){var a,l,n;if(t&&("HTML"==t.tagName||"BODY"==t.tagName||R.node.isElement(t)))for(a=1;a<=R.opts.tableInsertHelperOffset;a++){if(l=R.doc.elementFromPoint(e.pageX-R.win.pageXOffset,e.pageY-R.win.pageYOffset+a),y(l).hasClass("fr-tooltip"))return!0;
vendor: 13,848 bytes, line 799
799if(l&&("TH"==l.tagName||"TD"==l.tagName||"TABLE"==l.tagName)&&(y(l).parents(".fr-wrapper").length||R.opts.iframe)&&"false"!=y(l).closest("table").attr("contenteditable"))return H(e,y(l).closest("table")),!0;if(n=R.doc.elementFromPoint(e.pageX-R.win.pageXOffset+a,e.pageY-R.win.pageYOffset),y(n).hasClass("fr-tooltip"))return!0;if(n&&("TH"==n.tagName||"TD"==n.tagName||"TABLE"==n.tagName)&&(y(n).parents(".fr-wrapper").length||R.opts.iframe)&&"false"!=y(n).closest("table").attr("contenteditable"))return P(e,y(n).closest("table")),!0}R.core.sameInstance(f)&&W()}}(e,t)}function j(){if(O){var e=A.data("table").offset().top-R.win.pageYOffset;if(R.opts.iframe){var t=R.helpers.getPX(R.$wp.find(".fr-iframe").css("padding-top"));e+=R.$iframe.offset().top-R.helpers.scrollTop()+t}A.css("top",e)}}function G(e,t){var a,l=y(t[0][e]).outerWidth();for(a=1;a<t.length;a++)l=Math.min(l,y(t[a][e]).outerWidth());return l}function X(e,t,a){var l,n=0;for(l=e;l<=t;l++)n+=G(l,a);return n}function U(e){if(1<Q().length&&r&&T(),!1===r&&!1===n&&!1===O)o&&clearTimeout(o),R.edit.isDisabled()&&!R.popups.isVisible("table.edit")||(o=setTimeout(V,30,e));else if(O){var t=e.pageX-R.win.pageXOffset;R.opts.iframe&&(t+=R.$iframe.offset().left);var a=A.data("max-left"),l=A.data("max-right");a<=t&&t<=l?A.css("left",t-R.opts.tableResizerOffset-R.$wp.offset().left):t<a&&parseFloat(A.css("left"),10)>a-R.opts.tableResizerOffset?A.css("left",a-R.opts.tableResizerOffset-R.$wp.offset().left):l<t&&parseFloat(A.css("left"),10)<l-R.opts.tableResizerOffset&&A.css("left",l-R.opts.tableResizerOffset-R.$wp.offset().left)}else r&&W()}function q(e){R.node.isEmpty(e.get(0))?e.prepend(Ce.MARKERS):e.prepend(Ce.START_MARKER).append(Ce.END_MARKER)}function J(){R.shared.$ti_helper||(R.shared.$ti_helper=y(document.createElement("div")).attr("class","fr-insert-helper").html('<a class="fr-floating-btn" role="button" tabIndex="-1" title="'.concat(R.language.translate("Insert"),'"><svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"><path d="M22,16.75 L16.75,16.75 L16.75,22 L15.25,22.000 L15.25,16.75 L10,16.75 L10,15.25 L15.25,15.25 L15.25,10 L16.75,10 L16.75,15.25 L22,15.25 L22,16.75 Z"/></svg></a>')),R.events.bindClick(R.shared.$ti_helper,"a",function(){var e=f.data("selected-cell"),t=f.data("position"),a=f.data("instance")||R;"before"==t?(R.undo.saveStep(),e.addClass("fr-selected-cell"),a.table.insertColumn(t),e.removeClass("fr-selected-cell"),R.undo.saveStep()):"after"==t?(R.undo.saveStep(),e.addClass("fr-selected-cell"),a.table.insertColumn(t),e.removeClass("fr-selected-cell"),R.undo.saveStep()):"above"==t?(R.undo.saveStep(),e.addClass("fr-selected-cell"),a.table.insertRow(t),e.removeClass("fr-selected-cell"),R.undo.saveStep()):"below"==t&&(R.undo.saveStep(),e.addClass("fr-selected-cell"),a.table.insertRow(t),e.removeClass("fr-selected-cell"),R.undo.saveStep()),W()}),R.events.on("shared.destroy",function(){R.shared.$ti_helper.html("").removeData().remove(),R.shared.$ti_helper=null},!0),R.events.$on(R.shared.$ti_helper,"mousemove",function(e){e.stopPropagation()},!0),R.events.$on(y(R.o_win),"scroll",function(){W()},!0),R.events.$on(R.$wp,"scroll",function(){W()},!0)),f=R.shared.$ti_helper,R.events.on("destroy",function(){f=null}),R.tooltip.bind(R.$box,".fr-insert-helper > a.fr-floating-btn")}function Z(){l=null,clearTimeout(o)}function Q(){return R.el.querySelectorAll(".fr-selected-cell")}function ee(){var e=Q();if(e.length){for(var t=e[0];t&&"TABLE"!=t.tagName&&t.parentNode!=R.el;)t=t.parentNode;return t&&"TABLE"==t.tagName?y(t):y([])}return y([])}function te(e){n=!1}return{_init:function ae(){if(!R.$wp)return!1;if(R.helpers.isMobile()&&(R.events.$on(R.$el,"mousedown",e),R.events.$on(R.$win,"mouseup",a)),!R.helpers.isMobile()){O=n=r=!1,R.events.$on(R.$el,"mousedown",e),R.popups.onShow("image.edit",function(){_(),n=r=!1}),R.popups.onShow("link.edit",function(){_(),n=r=!1}),R.events.on("commands.mousedown",function(e){0<e.parents(".fr-toolbar").length&&_()}),R.events.$on(R.$el,"mouseover","th, td",k),R.events.$on(R.$win,"mouseup",a),R.opts.iframe&&R.events.$on(y(R.o_win),"mouseup",a),R.events.$on(R.$win,"mousemove",U),R.events.$on(y(R.o_win),"scroll",j),R.events.on("contentChanged",function(){0<Q().length&&(h(),R.$el.find("img").on("load.selected-cells",function(){y(this).off("load.selected-cells"),0<Q().length&&h()}))}),R.events.$on(y(R.o_win),"resize",function(){_()}),R.events.on("toolbar.esc",function(){if(0<Q().length)return R.events.disableBlur(),R.events.focus(),!1},!0),R.events.$on(y(R.o_win),"keydown",function(){r&&n&&(n=r=!1,R.$el.removeClass("fr-no-selection"),R.edit.on(),R.selection.setAtEnd(R.$el.find(".fr-selected-cell").last().get(0)),R.selection.restore(),_())}),R.events.$on(R.$el,"keydown",function(e){e.shiftKey?!1===function o(e){var t=Q();if(null!=t&&0<t.length){var a,l=$(),n=e.which,r=D(1==t.length?a=t[0]:(a=R.el.querySelector(".fr-cell-fixed"),R.el.querySelector(".fr-cell-handler")),l);if(Ce.KEYCODE.ARROW_RIGHT==n){if(r.col<l[0].length-1)return N(a,l[r.row][r.col+1]),!1}else if(Ce.KEYCODE.ARROW_DOWN==n){if(r.row<l.length-1)return N(a,l[r.row+1][r.col]),!1}else if(Ce.KEYCODE.ARROW_LEFT==n){if(0<r.col)return N(a,l[r.row][r.col-1]),!1}else if(Ce.KEYCODE.ARROW_UP==n&&0<r.row)return N(a,l[r.row-1][r.col]),!1}}(e)&&setTimeout(function(){h()},0):function s(e){var t=e.which,a=R.selection.blocks();if(a.length&&("P"!==(a=a[0]).tagName&&"DIV"!==a.tagName||(a=a.parentNode),"TD"==a.tagName||"TH"==a.tagName)){for(var l=a;l&&"TABLE"!=l.tagName&&l.parentNode!=R.el;)l=l.parentNode;if(l&&"TABLE"==l.tagName&&(Ce.KEYCODE.ARROW_LEFT==t||Ce.KEYCODE.ARROW_UP==t||Ce.KEYCODE.ARROW_RIGHT==t||Ce.KEYCODE.ARROW_DOWN==t)&&(0<Q().length&&K(),R.browser.webkit&&(Ce.KEYCODE.ARROW_UP==t||Ce.KEYCODE.ARROW_DOWN==t))){var n=R.selection.ranges(0).startContainer;if(n.nodeType==Node.TEXT_NODE&&(Ce.KEYCODE.ARROW_UP==t&&(n.previousSibling&&"BR"!==n.previousSibling.tagName||n.previousSibling&&"BR"===n.previousSibling.tagName&&n.previousSibling.previousSibling)||Ce.KEYCODE.ARROW_DOWN==t&&(n.nextSibling&&"BR"!==n.nextSibling.tagName||n.nextSibling&&"BR"===n.nextSibling.tagName&&n.nextSibling.nextSibling)))return;e.preventDefault(),e.stopPropagation();var r=$(y(l)),o=D(a,r);return Ce.KEYCODE.ARROW_UP==t?Y(o,l,r):Ce.KEYCODE.ARROW_DOWN==t&&F(o,l,r),R.selection.restore(),!1}}}(e)}),R.events.on("keydown",function(e){if(!1===function l(e){if(e.which==Ce.KEYCODE.TAB){var t;if(0<Q().length)t=R.$el.find(".fr-selected-cell").last();else{var a=R.selection.element();"TD"==a.tagName||"TH"==a.tagName?t=y(a):a!=R.el&&(0<y(a).parentsUntil(R.$el,"td").length?t=y(a).parents("td").first():0<y(a).parentsUntil(R.$el,"th").length&&(t=y(a).parents("th").first()))}if(t)return e.preventDefault(),!!(0===R.selection.get().focusOffset&&0<y(R.selection.element()).parentsUntil(R.$el,"ol, ul").length&&(0<y(R.selection.element()).closest("li").prev().length||y(R.selection.element()).is("li")&&0<y(R.selection.element()).prev().length))||(K(),e.shiftKey?0<t.prev().length?q(t.prev()):0<t.closest("tr").length&&0<t.closest("tr").prev().length?q(t.closest("tr").prev().find("td").last()):0<t.closest("tbody").length&&0<t.closest("table").find("thead tr").length&&q(t.closest("table").find("thead tr th").last()):0<t.next().length?q(t.next()):0<t.closest("tr").length&&0<t.closest("tr").next().length?q(t.closest("tr").next().find("td").first()):0<t.closest("thead").length&&0<t.closest("table").find("tbody tr").length?q(t.closest("table").find("tbody tr td").first()):(t.addClass("fr-selected-cell"),g("below"),_(),q(t.closest("tr").next().find("td").first())),R.selection.restore(),!1)}}(e))return!1;var t=Q();if(0<t.length){if(0<t.length&&R.keys.ctrlKey(e)&&e.which==Ce.KEYCODE.A)return _(),R.popups.isVisible("table.edit")&&R.popups.hide("table.edit"),t=[],!0;if(e.which==Ce.KEYCODE.ESC&&R.popups.isVisible("table.edit"))return _(),R.popups.hide("table.edit"),e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation(),!(t=[]);if(1<t.length&&(e.which==Ce.KEYCODE.BACKSPACE||e.which==Ce.KEYCODE.DELETE)){R.undo.saveStep();for(var a=0;a<t.length;a++)y(t[a]).html("<br>"),a==t.length-1&&y(t[a]).prepend(Ce.MARKERS);return R.selection.restore(),R.undo.saveStep(),!(t=[])}if(1<t.length&&e.which!=Ce.KEYCODE.F10&&!R.keys.isBrowserAction(e))return e.preventDefault(),!(t=[])}else if(!(t=[])===function n(e){if(e.altKey&&e.which==Ce.KEYCODE.SPACE){var t,a=R.selection.element();if("TD"==a.tagName||"TH"==a.tagName?t=a:0<y(a).closest("td").length?t=y(a).closest("td").get(0):0<y(a).closest("th").length&&(t=y(a).closest("th").get(0)),t)return e.preventDefault(),N(t,t),h(),!1}}(e))return!1},!0);var t=[];R.events.on("html.beforeGet",function(){t=Q();for(var e=0;e<t.length;e++)t[e].className=(t[e].className||"").replace(/fr-selected-cell/g,"")}),R.events.on("html.afterGet",function(){for(var e=0;e<t.length;e++)t[e].className=(t[e].className?t[e].className.trim()+" ":"")+"fr-selected-cell";t=[]}),c(!0),p(!0)}R.events.on("destroy",Z)},insert:function le(e,t){var a,l,n="<table "+(R.opts.tableDefaultWidth?'style="width: '+R.opts.tableDefaultWidth+';" ':"")+'class="fr-inserted-table"><tbody>',r=100/t;for(a=0;a<e;a++){for(n+="<tr>",l=0;l<t;l++)n+="<td"+(R.opts.tableDefaultWidth?' style="width: '+r.toFixed(4)+'%;"':"")+">",0===a&&0===l&&(n+=Ce.MARKERS),n+="<br></td>";n+="</tr>"}if(n+="</tbody></table>",R.opts.trackChangesEnabled){R.edit.on(),R.events.focus(!0),R.selection.restore(),R.undo.saveStep(),R.markers.insert(),R.html.wrap();var o=R.$el.find(".fr-marker");R.node.isLastSibling(o)&&o.parent().hasClass("fr-deletable")&&o.insertAfter(o.parent()),o.replaceWith(n),R.selection.clear()}else R.html.insert(n);R.selection.restore();var s=R.$el.find(".fr-inserted-table");s.removeClass("fr-inserted-table"),R.events.trigger("table.inserted",[s.get(0)])},remove:u,insertRow:g,deleteRow:function ne(){var e=ee();if(0<e.length){var t,a,l,n=$(),r=M(n);if(null==r)return;if(0===r.min_i&&r.max_i==n.length-1)u();else{for(t=r.max_i;t>=r.min_i;t--){for(l=y(e.find("tr").not(e.find("> table tr")).get(t)),a=0;a<n[t].length;a++)if(0===a||n[t][a]!=n[t][a-1]){var o=y(n[t][a]);if(1<parseInt(o.attr("rowspan"),10)){var s=parseInt(o.attr("rowspan"),10)-1;1==s?o.removeAttr("rowspan"):o.attr("rowspan",s)}if(t<n.length-1&&n[t][a]==n[t+1][a]&&(0===t||n[t][a]!=n[t-1][a])){for(var i=n[t][a],f=a;0<f&&n[t][f]==n[t][f-1];)f--;0===f?y(e.find("tr").not(e.find("> table tr")).get(t+1)).prepend(i):y(n[t+1][f-1])[0].parentNode&&y(n[t+1][f-1])[0].insertAdjacentElement("afterend",i)}}var c=l.parent();l.remove(),0===c.find("tr").length&&c.remove(),n=$(e)}w(0,n.length-1,0,n[0].length-1,e),0<r.min_i?R.selection.setAtEnd(n[r.min_i-1][0]):R.selection.setAtEnd(n[0][0]),R.selection.restore(),R.popups.hide("table.edit")}}},insertColumn:function re(i){var e=ee();if(0<e.length){var f,c=$(),t=M(c);f="before"==i?t.min_j:t.max_j;var a,d=100/c[0].length,p=100/(c[0].length+1);e.find("th, td").each(function(){(a=y(this)).data("old-width",a.outerWidth()/e.outerWidth()*100)}),e.find("tr").not(e.find("> table tr")).each(function(e){for(var t,a=y(this),l=0,n=0;l-1<f;){if(!(t=a.find("> th, > td").get(n))){t=null;break}t==c[e][l]?(l+=parseInt(y(t).attr("colspan"),10)||1,n++):(l+=parseInt(y(c[e][l]).attr("colspan"),10)||1,"after"==i&&(t=0===n?-1:a.find("> th, > td").get(n-1)))}var r,o=y(t);if("after"==i&&f<l-1||"before"==i&&0<f&&c[e][f]==c[e][f-1]){if(0===e||0<e&&c[e][f]!=c[e-1][f]){var s=parseInt(o.attr("colspan"),10)+1;o.attr("colspan",s),o.css("width",(o.data("old-width")*p/d+p).toFixed(4)+"%"),o.removeData("old-width")}}else r=0<a.find("th").length?'<th style="width: '.concat(p.toFixed(4),'%;"><br></th>'):'<td style="width: '.concat(p.toFixed(4),'%;"><br></td>'),-1==t?a.prepend(r):null==t?a.append(r):"before"==i?o.before(r):"after"==i&&o[0].parentNode&&o[0].insertAdjacentHTML("afterend",r)}),e.find("th, td").each(function(){(a=y(this)).data("old-width")&&(a.css("width",(a.data("old-width")*p/d).toFixed(4)+"%"),a.removeData("old-width"))}),R.popups.isVisible("table.edit")&&h()}},deleteColumn:function oe(){var e=ee();if(0<e.length){var t,a,l,n=$(),r=M(n);if(null==r)return;if(0===r.min_j&&r.max_j==n[0].length-1)u();else{var o=0;for(t=0;t<n.length;t++)for(a=0;a<n[0].length;a++)(l=y(n[t][a])).hasClass("fr-selected-cell")||(l.data("old-width",l.outerWidth()/e.outerWidth()*100),(a<r.min_j||a>r.max_j)&&(o+=l.outerWidth()/e.outerWidth()*100));for(o/=n.length,a=r.max_j;a>=r.min_j;a--)for(t=0;t<n.length;t++)if(0===t||n[t][a]!=n[t-1][a])if(l=y(n[t][a]),1<(parseInt(l.attr("colspan"),10)||1)){var s=parseInt(l.attr("colspan"),10)-1;1==s?l.removeAttr("colspan"):l.attr("colspan",s),l.css("width",(100*(l.data("old-width")-G(a,n))/o).toFixed(4)+"%"),l.removeData("old-width")}else{var i=y(l.parent().get(0));l.remove(),0===i.find("> th, > td").length&&(0===i.prev().length||0===i.next().length||i.prev().find("> th[rowspan], > td[rowspan]").length<i.prev().find("> th, > td").length)&&i.remove()}w(0,n.length-1,0,n[0].length-1,e),0<r.min_j?R.selection.setAtEnd(n[r.min_i][r.min_j-1]):R.selection.setAtEnd(n[r.min_i][0]),R.selection.restore(),R.popups.hide("table.edit"),e.find("th, td").each(function(){(l=y(this)).data("old-width")&&(l.css("width",(100*l.data("old-width")/o).toFixed(4)+"%"),l.removeData("old-width"))})}}},mergeCells:function se(){if(1<Q().length&&(0===R.$el.find("th.fr-selected-cell").length||0===R.$el.find("td.fr-selected-cell").length)){E();var e,t,a=M($());if(null==a)return;var l=R.$el.find(".fr-selected-cell"),n=y(l[0]),r=n.parent().find(".fr-selected-cell"),o=n.closest("table"),s=n.html(),i=0;for(e=0;e<r.length;e++)i+=y(r[e]).outerWidth();for(n.css("width",Math.min(100,i/o.outerWidth()*100).toFixed(4)+"%"),a.min_j<a.max_j&&n.attr("colspan",a.max_j-a.min_j+1),a.min_i<a.max_i&&n.attr("rowspan",a.max_i-a.min_i+1),e=1;e<l.length;e++)"<br>"!=(t=y(l[e])).html()&&""!==t.html()&&(s+="<br>".concat(t.html())),t.remove();
vendor: 4,740 bytes, line 799
799n.html(s),R.selection.setAtEnd(n.get(0)),R.selection.restore(),R.toolbar.enable(),m(a.min_i,a.max_i,o);var f=o.find("tr:empty");for(e=f.length-1;0<=e;e--)y(f[e]).remove();b(a.min_j,a.max_j,o),h()}},splitCellVertically:function ie(){if(1==Q().length){var e=R.$el.find(".fr-selected-cell"),t=parseInt(e.attr("colspan"),10)||1,a=e.parent().outerWidth(),l=e.outerWidth(),n=e.clone().html("<br>"),r=$(),o=D(e.get(0),r);if(1<t){var s=Math.ceil(t/2);l=X(o.col,o.col+s-1,r)/a*100;var i=X(o.col+s,o.col+t-1,r)/a*100;1<s?e.attr("colspan",s):e.removeAttr("colspan"),1<t-s?n.attr("colspan",t-s):n.removeAttr("colspan"),e.css("width",l.toFixed(4)+"%"),n.css("width",i.toFixed(4)+"%")}else{var f;for(f=0;f<r.length;f++)if(0===f||r[f][o.col]!=r[f-1][o.col]){var c=y(r[f][o.col]);if(!c.is(e)){var d=(parseInt(c.attr("colspan"),10)||1)+1;c.attr("colspan",d)}}l=l/a*100/2,e.css("width","".concat(l.toFixed(4),"%")),n.css("width","".concat(l.toFixed(4),"%"))}e[0].parentNode&&e[0].insertAdjacentElement("afterend",n[0]),_(),R.popups.hide("table.edit")}},splitCellHorizontally:function fe(){if(1==Q().length){var e=R.$el.find(".fr-selected-cell"),t=e.parent(),a=e.closest("table"),l=parseInt(e.attr("rowspan"),10),n=$(),r=D(e.get(0),n),o=e.clone().html("<br>");if(1<l){var s=Math.ceil(l/2);1<s?e.attr("rowspan",s):e.removeAttr("rowspan"),1<l-s?o.attr("rowspan",l-s):o.removeAttr("rowspan");for(var i=r.row+s,f=0===r.col?r.col:r.col-1;0<=f&&(n[i][f]==n[i][f-1]||0<i&&n[i][f]==n[i-1][f]);)f--;-1==f?y(a.find("tr").not(a.find("> table tr")).get(i)).prepend(o):y(n[i][f])[0].parentNode&&y(n[i][f])[0].insertAdjacentElement("afterend",o[0])}else{var c,d=y(document.createElement("tr")).append(o);for(c=0;c<n[0].length;c++)if(0===c||n[r.row][c]!=n[r.row][c-1]){var p=y(n[r.row][c]);p.is(e)||p.attr("rowspan",(parseInt(p.attr("rowspan"),10)||1)+1)}t[0].parentNode&&t[0].insertAdjacentElement("afterend",d[0])}_(),R.popups.hide("table.edit")}},addHeader:function ce(){var e=ee();if(0<e.length&&0===e.find("> th").length){var t,a="<thead><tr>",l=0;for(l=e.find("tr").first().find("> th").length,e.find("tr").first().find("> td").each(function(){var e=y(this);l+=parseInt(e.attr("colspan"),10)||1}),t=0;t<l;t++)a+="<th><br></th>";a+="</tr></thead>",e.prepend(a),h()}},addFooter:function de(){var e=ee();if(0<e.length&&0===e.find("tfoot").length){var t,a="<tfoot><tr>",l=0,n="> td";for(0<e.find("thead").length&&(n="> th"),e.find("tr").first().find(n).each(function(){var e=y(this);l+=parseInt(e.attr("colspan"),10)||1}),t=0;t<l;t++)a+="<td><br></td>";a+="</tr></tfoot>",e.append(a),h()}},removeHeader:function pe(){var e=ee(),t=e.find("> thead");if(0<(t=y(t)).length)if(0===e.find("tbody tr").length)u();else if(t.remove(),0<Q().length)h();else{R.popups.hide("table.edit");var a=e.find("tbody tr").first().find("td").first().get(0);a&&(R.selection.setAtEnd(a),R.selection.restore())}},removeFooter:function he(){var e=ee(),t=e.find("tfoot");if(0<t.length)if(0===e.find("tbody tr").length)u();else if(t.remove(),0<Q().length)h();else{R.popups.hide("table.edit");var a=e.find("tbody tr").first().find("td").first().get(0);a&&(R.selection.setAtEnd(a),R.selection.restore())}},setBackground:t,showInsertPopup:function ue(){var e=R.$tb.find('.fr-command[data-cmd="insertTable"]'),t=R.popups.get("table.insert");if(t||(t=c()),!t.hasClass("fr-active")){R.popups.refresh("table.insert"),R.popups.setContainer("table.insert",R.$tb);var a=R.button.getPosition(e),l=a.left,n=a.top;R.popups.show("table.insert",l,n,e.outerHeight())}},showEditPopup:h,showColorsPopup:s,back:function ge(){0<Q().length?h():(R.popups.hide("table.insert"),R.toolbar.showInline())},verticalAlign:function be(e){R.$el.find(".fr-selected-cell").css("vertical-align",e)},horizontalAlign:function me(e){R.$el.find(".fr-selected-cell").css("text-align",e)},applyStyle:function ve(e,t,a,l){if(0<t.length){if(R.opts.useClasses||("TABLE"===t.get(0).tagName?function r(e,t){var a=e.childNodes;if(0<a.length)for(var l=0;l<a.length;l++)"TD"===a[l].tagName?"fr-dashed-borders"===t||"fr-highlighted"===t||"fr-thick"===t?C(a[l]):"fr-alternate-rows"===t&&a[l].style.removeProperty("background-color"):r(a[l],t)}(t.get(0),e):C(t.get(0))),!a){var n=Object.keys(l);n.splice(n.indexOf(e),1),t.removeClass(n.join(" "))}t.toggleClass(e)}},selectedTable:ee,selectedCells:Q,customColor:function we(){var e=R.popups.get("table.colors").find(".fr-table-colors-hex-layer input");e.length&&t(e.val())},selectCells:N}},Ce.DefineIcon("insertTable",{NAME:"table",SVG_KEY:"insertTable"}),Ce.RegisterCommand("insertTable",{title:"Insert Table",undo:!1,focus:!0,refreshOnCallback:!1,popup:!0,callback:function(){this.popups.isVisible("table.insert")?(this.$el.find(".fr-marker").length&&(this.events.disableBlur(),this.selection.restore(
vendor: 5,178 bytes, line 799
799)),this.popups.hide("table.insert")):this.table.showInsertPopup()},plugin:"table"}),Ce.RegisterCommand("tableInsert",{callback:function(e,t,a){this.table.insert(t,a),this.popups.hide("table.insert")}}),Ce.DefineIcon("tableHeader",{NAME:"header",FA5NAME:"heading",SVG_KEY:"tableHeader"}),Ce.RegisterCommand("tableHeader",{title:"Table Header",focus:!1,toggle:!0,callback:function(){this.popups.get("table.edit").find('.fr-command[data-cmd="tableHeader"]').hasClass("fr-active")?this.table.removeHeader():this.table.addHeader()},refresh:function(e){var t=this.table.selectedTable();0<t.length&&(0===t.find("> thead").length?e.removeClass("fr-active").attr("aria-pressed",!1):e.addClass("fr-active").attr("aria-pressed",!0))}}),Ce.DefineIcon("tableFooter",{NAME:"table",FA5NAME:"table",SVG_KEY:"tableFooter"}),Ce.RegisterCommand("tableFooter",{title:"Table Footer",focus:!1,toggle:!0,callback:function(){this.popups.get("table.edit").find('.fr-command[data-cmd="tableFooter"]').hasClass("fr-active")?this.table.removeFooter():this.table.addFooter()},refresh:function(e){var t=this.table.selectedTable();0<t.length&&(0===t.find("tfoot").length?e.removeClass("fr-active").attr("aria-pressed",!1):e.addClass("fr-active").attr("aria-pressed",!0))}}),Ce.DefineIcon("tableRows",{NAME:"bars",SVG_KEY:"row"}),Ce.RegisterCommand("tableRows",{type:"dropdown",focus:!1,title:"Row",options:{above:"Insert row above",below:"Insert row below","delete":"Delete row"},html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t=Ce.COMMANDS.tableRows.options;for(var a in t)t.hasOwnProperty(a)&&(e+='<li role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="tableRows" data-param1="'+a+'" title="'+this.language.translate(t[a])+'">'+this.language.translate(t[a])+"</a></li>");return e+="</ul>"},callback:function(e,t){"above"==t||"below"==t?this.table.insertRow(t):this.table.deleteRow()}}),Ce.DefineIcon("tableColumns",{NAME:"bars fa-rotate-90",SVG_KEY:"columns"}),Ce.RegisterCommand("tableColumns",{type:"dropdown",focus:!1,title:"Column",options:{before:"Insert column before",after:"Insert column after","delete":"Delete column"},html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t=Ce.COMMANDS.tableColumns.options;for(var a in t)t.hasOwnProperty(a)&&(e+='<li role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="tableColumns" data-param1="'.concat(a,'" title="').concat(this.language.translate(t[a]),'">').concat(this.language.translate(t[a]),"</a></li>"));return e+="</ul>"},callback:function(e,t){"before"==t||"after"==t?this.table.insertColumn(t):this.table.deleteColumn()}}),Ce.DefineIcon("tableCells",{NAME:"square-o",FA5NAME:"square",SVG_KEY:"cellOptions"}),Ce.RegisterCommand("tableCells",{type:"dropdown",focus:!1,title:"Cell",options:{merge:"Merge cells","vertical-split":"Vertical split","horizontal-split":"Horizontal split"},html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t=Ce.COMMANDS.tableCells.options;for(var a in t)t.hasOwnProperty(a)&&(e+='<li role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="tableCells" data-param1="'.concat(a,'" title="').concat(this.language.translate(t[a]),'">').concat(this.language.translate(t[a]),"</a></li>"));return e+="</ul>"},callback:function(e,t){"merge"==t?this.table.mergeCells():"vertical-split"==t?this.table.splitCellVertically():this.table.splitCellHorizontally()},refreshOnShow:function(e,t){1<this.$el.find(".fr-selected-cell").length?(t.find('a[data-param1="vertical-split"]').addClass("fr-disabled").attr("aria-disabled",!0),t.find('a[data-param1="horizontal-split"]').addClass("fr-disabled").attr("aria-disabled",!0),t.find('a[data-param1="merge"]').removeClass("fr-disabled").attr("aria-disabled",!1)):(t.find('a[data-param1="merge"]').addClass("fr-disabled").attr("aria-disabled",!0),t.find('a[data-param1="vertical-split"]').removeClass("fr-disabled").attr("aria-disabled",!1),t.find('a[data-param1="horizontal-split"]').removeClass("fr-disabled").attr("aria-disabled",!1))}}),Ce.DefineIcon("tableRemove",{NAME:"trash",SVG_KEY:"removeTable"}),Ce.RegisterCommand("tableRemove",{title:"Remove Table",focus:!1,callback:function(){this.table.remove()}}),Ce.DefineIcon("tableStyle",{NAME:"paint-brush",SVG_KEY:"tableStyle"}),Ce.RegisterCommand("tableStyle",{title:"Table Style",type:"dropdown",focus:!1,html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t=this.opts.tableStyles;for(var a in t)t.hasOwnProperty(a)&&(e+='<li role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="tableStyle" data-param1="'.concat(a,'" title="').concat(this.language.translate(t[a]),'">').concat(this.language.translate(t[a]),"</a></li>"));return e+="</ul>"},callback:function(e,t){this.table.applyStyle(t,this.$el.find(".fr-selected-cell").closest("table"),this.opts.tableMultipleStyles,this.opts.tableStyles)},refreshOnShow:function(e,t){var a=this.$,l=this.$el.find(".fr-selected-cell").closest("table");l&&t.find(".fr-command").each(function(){var e=a(this).data("param1"),t=l.hasClass(e);a(this).toggleClass("fr-active",t).attr("aria-selected",t)})}}
vendor: 4,084 bytes, line 799
799),Ce.DefineIcon("tableCellBackground",{NAME:"tint",SVG_KEY:"cellBackground"}),Ce.RegisterCommand("tableCellBackground",{title:"Cell Background",focus:!1,popup:!0,callback:function(){this.table.showColorsPopup()}}),Ce.RegisterCommand("tableCellBackgroundColor",{undo:!0,focus:!1,callback:function(e,t){this.table.setBackground(t)}}),Ce.DefineIcon("tableBack",{NAME:"arrow-left",SVG_KEY:"back"}),Ce.RegisterCommand("tableBack",{title:"Back",undo:!1,focus:!1,back:!0,callback:function(){this.table.back()},refresh:function(e){0!==this.table.selectedCells().length||this.opts.toolbarInline?(e.removeClass("fr-hidden"),e.next(".fr-separator").removeClass("fr-hidden")):(e.addClass("fr-hidden"),e.next(".fr-separator").addClass("fr-hidden"))}}),Ce.DefineIcon("tableCellVerticalAlign",{NAME:"arrows-v",FA5NAME:"arrows-alt-v",SVG_KEY:"verticalAlignMiddle"}),Ce.RegisterCommand("tableCellVerticalAlign",{type:"dropdown",focus:!1,title:"Vertical Align",options:{Top:"Align Top",Middle:"Align Middle",Bottom:"Align Bottom"},html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t=Ce.COMMANDS.tableCellVerticalAlign.options;for(var a in t)t.hasOwnProperty(a)&&(e+='<li role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="tableCellVerticalAlign" data-param1="'.concat(a.toLowerCase(),'" title="').concat(this.language.translate(t[a]),'">').concat(this.language.translate(a),"</a></li>"));return e+="</ul>"},callback:function(e,t){this.table.verticalAlign(t)},refreshOnShow:function(e,t){t.find('.fr-command[data-param1="'+this.$el.find(".fr-selected-cell").css("vertical-align")+'"]').addClass("fr-active").attr("aria-selected",!0)}}),Ce.DefineIcon("tableCellHorizontalAlign",{NAME:"align-left",SVG_KEY:"alignLeft"}),Ce.DefineIcon("align-left",{NAME:"align-left",SVG_KEY:"alignLeft"}),Ce.DefineIcon("align-right",{NAME:"align-right",SVG_KEY:"alignRight"}),Ce.DefineIcon("align-center",{NAME:"align-center",SVG_KEY:"alignCenter"}),Ce.DefineIcon("align-justify",{NAME:"align-justify",SVG_KEY:"alignJustify"}),Ce.RegisterCommand("tableCellHorizontalAlign",{type:"dropdown",focus:!1,title:"Horizontal Align",options:{left:"Align Left",center:"Align Center",right:"Align Right",justify:"Align Justify"},html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t=Ce.COMMANDS.tableCellHorizontalAlign.options;for(var a in t)t.hasOwnProperty(a)&&(e+='<li role="presentation"><a class="fr-command fr-title" tabIndex="-1" role="option" data-cmd="tableCellHorizontalAlign" data-param1="'.concat(a,'" title="').concat(this.language.translate(t[a]),'">').concat(this.icon.create("align-".concat(a)),'<span class="fr-sr-only">').concat(this.language.translate(t[a]),"</span></a></li>"));return e+="</ul>"},callback:function(e,t){this.table.horizontalAlign(t)},refresh:function(e){var t=this.table.selectedCells(),a=this.$;t.length&&e.find("> *").first().replaceWith(this.icon.create("align-".concat(this.helpers.getAlignment(a(t[0])))))},refreshOnShow:function(e,t){t.find('.fr-command[data-param1="'+this.helpers.getAlignment(this.$el.find(".fr-selected-cell").first())+'"]').addClass("fr-active").attr("aria-selected",!0)}}),Ce.DefineIcon("tableCellStyle",{NAME:"magic",SVG_KEY:"cellStyle"}),Ce.RegisterCommand("tableCellStyle",{title:"Cell Style",type:"dropdown",focus:!1,html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t=this.opts.tableCellStyles;for(var a in t)t.hasOwnProperty(a)&&(e+='<li role="presentation"><a class="fr-command" tabIndex="-1" role="option" data-cmd="tableCellStyle" data-param1="'.concat(a,'" title="').concat(this.language.translate(t[a]),'">').concat(this.language.translate(t[a]),"</a></li>"));return e+="</ul>"},callback:function(e,t){this.table.applyStyle(t,this.$el.find(".fr-selected-cell"),this.opts.tableCellMultipleStyles,this.opts.tableCellStyles)},refreshOnShow:function(e,t){var a=this.$,l=this.$el.find(".fr-selected-cell").first();l&&t.find(".fr-command").each(function(){var e=a(this).data("param1"),t=l.hasClass(e);a(this).toggleClass("fr-active",t).attr("aria-selected",t)})}}
vendor: 4,547 bytes, lines 799-807
799),Ce.RegisterCommand("tableCellBackgroundCustomColor",{title:"OK",undo:!0,callback:function(){this.table.customColor()}}),Ce.DefineIcon("tableColorRemove",{NAME:"eraser",SVG_KEY:"remove"})}); 800},{"froala-editor":8}],24:[function(require,module,exports){ 801/*! 802 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 803 * License https://froala.com/wysiwyg-editor/terms/ 804 * Copyright 2014-2023 Froala Labs 805 */ 806 807!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],t):t(e.FroalaEditor)}(this,function(we){"use strict";we=we&&we.hasOwnProperty("default")?we["default"]:we,Object.assign(we.POPUP_TEMPLATES,{"video.insert":"[_BUTTONS_][_BY_URL_LAYER_][_EMBED_LAYER_][_UPLOAD_LAYER_][_PROGRESS_BAR_]","video.edit":"[_BUTTONS_]","video.size":"[_BUTTONS_][_SIZE_LAYER_]"}),Object.assign(we.DEFAULTS,{videoAllowedTypes:["mp4","webm","ogg","mp3","mpeg","url"],videoAllowedProviders:[".*"],videoDefaultAlign:"center",videoDefaultDisplay:"block",videoDefaultWidth:600,videoEditButtons:["videoReplace","videoRemove","videoDisplay","videoAlign","videoSize","autoplay"],videoInsertButtons:["videoBack","|","videoByURL","videoEmbed","videoUpload"],videoMaxSize:52428800,videoMove:!0,videoResize:!0,videoResponsive:!1,videoSizeButtons:["videoBack","|"],videoSplitHTML:!1,videoTextNear:!0,videoUpload:!0,videoUploadMethod:"POST",videoUploadParam:"file",videoUploadParams:{},videoUploadToS3:!1,videoUploadToAzure:!1,videoUploadURL:null}),we.VIDEO_PROVIDERS=[{test_regex:/^.*((youtu.be)|(youtube.com))\/((v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))?\??v?=?([^#\&\?]*).*/,url_regex:/(?:https?:\/\/)?(?:www\.)?(?:m\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=|embed\/)?([0-9a-zA-Z_\-]+)(.+)?/g,url_text:"https://www.youtube.com/embed/$1?$2",html:'<iframe width="640" height="360" src="{url}&wmode=opaque&rel=0" frameborder="0" allowfullscreen></iframe>',provider:"youtube"},{test_regex:/^.*(?:vimeo.com)\/(?:channels(\/\w+\/)?|groups\/*\/videos\/\u200b\d+\/|video\/|)(\d+)(?:$|\/|\?)/,url_regex:/(?:https?:\/\/)?(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/(?:[^\/]*)\/videos\/|album\/(?:\d+)\/video\/|video\/|)(\d+)(?:[a-zA-Z0-9_\-]+)?(\/[a-zA-Z0-9_\-]+)?/i,url_text:"https://player.vimeo.com/video/$1",html:'<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen></iframe>',provider:"vimeo"},{test_regex:/^.+(dailymotion.com|dai.ly)\/(video|hub)?\/?([^_]+)[^#]*(#video=([^_&]+))?/,url_regex:/(?:https?:\/\/)?(?:www\.)?(?:dailymotion\.com|dai\.ly)\/(?:video|hub)?\/?(.+)/g,url_text:"https://www.dailymotion.com/embed/video/$1",html:'<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen></iframe>',provider:"dailymotion"},{test_regex:/^.+(screen.yahoo.com)\/[^_&]+/,url_regex:"",url_text:"",html:'<iframe width="640" height="360" src="{url}?format=embed" frameborder="0" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" allowtransparency="true"></iframe>',provider:"yahoo"},{test_regex:/^.+(rutube.ru)\/[^_&]+/,url_regex:/(?:https?:\/\/)?(?:www\.)?(?:rutube\.ru)\/(?:video)?\/?(.+)/g,url_text:"https://rutube.ru/play/embed/$1",html:'<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true" allowtransparency="true"></iframe>',provider:"rutube"},{test_regex:/^(?:.+)vidyard.com\/(?:watch)?\/?([^.&/]+)\/?(?:[^_.&]+)?/,url_regex:/^(?:.+)vidyard.com\/(?:watch)?\/?([^.&/]+)\/?(?:[^_.&]+)?/g,url_text:"https://play.vidyard.com/$1",html:'<iframe width="640" height="360" src="{url}" frameborder="0" allowfullscreen></iframe>',provider:"vidyard"}],we.VIDEO_EMBED_REGEX=/^\W*((<iframe(.|\n)*>(\s|\n)*<\/iframe>)|(<embed(.|\n)*>))\W*$/i,we.PLUGINS.video=function(w){var s,p,f,E,i,o,A=w.$,C="https://i.froala.com/upload",c=2,v=3,u=4,S=5,U=6,a={};function g(){var e=w.popups.get("video.insert");e.find(".fr-video-by-url-layer input").val("").trigger("change");var t=e.find(".fr-video-embed-layer textarea");t.val("").trigger("change"),(t=e.find(".fr-video-upload-layer input")).val("").trigger("change")}function r(){var e=w.popups.get("video.edit");if(e||(e=function n(){var e="";if(0<w.opts.videoEditButtons.length){w.opts.videoResponsive&&(-1<w.opts.videoEditButtons.indexOf("videoSize")&&w.opts.videoEditButtons.splice(w.opts.videoEditButtons.indexOf("videoSize"),1),-1<w.opts.videoEditButtons.indexOf("videoDisplay")&&w.opts.videoEditButtons.splice(w.opts.videoEditButtons.indexOf("videoDisplay"),
vendor: 23,005 bytes, line 807
8071),-1<w.opts.videoEditButtons.indexOf("videoAlign")&&w.opts.videoEditButtons.splice(w.opts.videoEditButtons.indexOf("videoAlign"),1));var t={buttons:e+='<div class="fr-buttons"> \n '.concat(w.button.buildList(w.opts.videoEditButtons)," \n </div>")},o=w.popups.create("video.edit",t);return w.events.$on(w.$wp,"scroll.video-edit",function(){E&&w.popups.isVisible("video.edit")&&(w.events.disableBlur(),l(E))}),o}return!1}()),e){w.popups.setContainer("video.edit",w.$sc),w.popups.refresh("video.edit");var t=E.find("iframe, embed, ".concat(E.find("iframe, embed, audio").get(0)?"audio":"video")),o=t.offset().left+t.outerWidth()/2,i=t.offset().top+t.outerHeight(),a=t.get(0).src?t.get(0).src:t.get(0).currentSrc,r=!(!(a=(a=a.split("."))[a.length-1]).includes("pdf")&&!a.includes("txt"));t.hasClass("fr-file")||r||E.find("audio").get(0)?(document.getElementById("autoplay-".concat(w.id))&&(document.getElementById("autoplay-".concat(w.id)).style.display="none"),document.getElementById("videoReplace-".concat(w.id))&&(document.getElementById("videoReplace-".concat(w.id)).style.display="none")):(document.getElementById("autoplay-".concat(w.id))&&(document.getElementById("autoplay-".concat(w.id)).style.display=""),document.getElementById("videoReplace-".concat(w.id))&&(document.getElementById("videoReplace-".concat(w.id)).style.display="")),w.popups.show("video.edit",o,i,t.outerHeight(),!0)}}function n(e){if(e)return w.popups.onRefresh("video.insert",g),w.popups.onHide("video.insert",J),!0;var t="";w.opts.videoUpload||-1===w.opts.videoInsertButtons.indexOf("videoUpload")||w.opts.videoInsertButtons.splice(w.opts.videoInsertButtons.indexOf("videoUpload"),1);var o=w.button.buildList(w.opts.videoInsertButtons);""!==o&&(t='<div class="fr-buttons">'+o+"</div>");var i,a="",r=w.opts.videoInsertButtons.indexOf("videoUpload"),n=w.opts.videoInsertButtons.indexOf("videoByURL"),s=w.opts.videoInsertButtons.indexOf("videoEmbed");if(0<=n){i=" fr-active",(r<n&&0<=r||s<n&&0<=s)&&(i="");a='<div class="fr-video-by-url-layer fr-layer'.concat(i,'" id="fr-video-by-url-layer-').concat(w.id,'"><div class="fr-input-line"><input id="fr-video-by-url-layer-text-').concat(w.id,'" type="text" placeholder="').concat(w.language.translate("Paste in a video URL"),'" tabIndex="1" aria-required="true"></div><div class="fr-action-buttons"><span style=\'float:left\'><div class="fr-checkbox-line fr-autoplay-margin"><span class="fr-checkbox"> <input id=\'videoPluginAutoplay\' data-checked="_blank" type="checkbox"> <span>').concat('<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="10" height="10" viewBox="0 0 32 32"><path d="M27 4l-15 15-7-7-5 5 12 12 20-20z" fill="#FFF"></path></svg>','</span></span> <label id="fr-label-target-').concat(w.id,'">Autoplay</label></div> </span><button type="button" class="fr-command fr-submit" data-cmd="videoInsertByURL" tabIndex="2" role="button">').concat(w.language.translate("Insert"),"</button></div></div>")}var d="";0<=s&&(i=" fr-active",(r<s&&0<=r||n<s&&0<=n)&&(i=""),d='<div class="fr-video-embed-layer fr-layer'.concat(i,'" id="fr-video-embed-layer-').concat(w.id,'"><div class="fr-input-line"><textarea id="fr-video-embed-layer-text').concat(w.id,'" type="text" placeholder="').concat(w.language.translate("Embedded Code"),'" tabIndex="1" aria-required="true" rows="5"></textarea></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-submit" data-cmd="videoInsertEmbed" tabIndex="2" role="button">').concat(w.language.translate("Insert"),"</button></div></div>"));var l="";0<=r&&(i=" fr-active",(s<r&&0<=s||n<r&&0<=n)&&(i=""),l='<div class="fr-video-upload-layer fr-layer'.concat(i,'" id="fr-video-upload-layer-').concat(w.id,'"><strong>').concat(w.language.translate("Drop video"),"</strong><br>(").concat(w.language.translate("or click"),')<div class="fr-form"><input type="file" accept="video/').concat(w.opts.videoAllowedTypes.join(", video/").toLowerCase(),'" tabIndex="-1" aria-labelledby="fr-video-upload-layer-').concat(w.id,'" role="button"></div></div>'));var p={buttons:t,by_url_layer:a,embed_layer:d,upload_layer:l,progress_bar:'<div class="fr-video-progress-bar-layer fr-layer"><h3 tabIndex="-1" class="fr-message">Uploading</h3><div class="fr-loader"><span class="fr-progress"></span></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-dismiss" data-cmd="videoDismissError" tabIndex="2" role="button">OK</button></div></div>'},f=w.popups.create("video.insert",p);return function c(i){w.events.$on(i,"dragover dragenter",".fr-video-upload-layer",function(){return A(this).addClass("fr-drop"),!1},!0),w.events.$on(i,"dragleave dragend",".fr-video-upload-layer",function(){return A(this).removeClass("fr-drop"),!1},!0),w.events.$on(i,"drop",".fr-video-upload-layer",function(e){e.preventDefault(),e.stopPropagation(),A(this).removeClass("fr-drop");var t=e.originalEvent.dataTransfer;if(t&&t.files){var o=i.data("instance")||w;o.events.disableBlur(),o.video.upload(t.files),o.events.enableBlur()}},!0),w.helpers.isIOS()&&w.events.$on(i,"touchstart",'.fr-video-upload-layer input[type="file"]',function(){A(this).trigger("click")},!0);w.events.$on(i,"change",'.fr-video-upload-layer input[type="file"]',function(){if(this.files){var e=i.data("instance")||w;e.events.disableBlur(),i.find("input:focus").blur(),e.events.enableBlur(),e.video.upload(this.files)}A(this).val("")},!0)}(f),f}function h(e){w.events.focus(!0),w.selection.restore();var t=!1;if(E&&(q(),t=!0),w.opts.trackChangesEnabled){w.edit.on(),w.events.focus(!0),w.selection.restore(),w.undo.saveStep(),w.markers.insert(),w.html.wrap();var o=w.$el.find(".fr-marker");w.node.isLastSibling(o)&&o.parent().hasClass("fr-deletable")&&o.insertAfter(o.parent()),o.replaceWith('<span contenteditable="false" draggable="true" class="fr-jiv fr-video fr-deletable">'.concat(e,"</span>")),w.selection.clear()}else w.html.insert('<span contenteditable="false" draggable="true" class="fr-jiv fr-video fr-deletable">'.concat(e,"</span>"),!1,w.opts.videoSplitHTML);w.popups.hide("video.insert");var i=w.$el.find(".fr-jiv");i.removeClass("fr-jiv"),i.toggleClass("fr-rv",w.opts.videoResponsive),Z(i,w.opts.videoDefaultDisplay,w.opts.videoDefaultAlign),i.toggleClass("fr-draggable",w.opts.videoMove),w.events.trigger(t?"video.replaced":"video.inserted",[i])}function m(){var e=A(this);w.popups.hide("video.insert"),e.removeClass("fr-uploading"),e.parent().next().is("br")&&e.parent().next().remove(),l(e.parent()),w.events.trigger("video.loaded",[e.parent()])}function x(s,e,d,l,p){w.edit.off(),b("Loading video"),e&&(s=w.helpers.sanitizeURL(s));var f=function f(){var e,t;if(l){w.undo.canDo()||l.find("video").hasClass("fr-uploading")||w.undo.saveStep();var o=l.find("video").data("fr-old-src"),i=l.data("fr-replaced");if(l.data("fr-replaced",!1),0<l.find("iframe").length)l.remove(),e=k(s,d,m);else{w.$wp?((e=l.clone(!0)).find("video").removeData("fr-old-src").removeClass("fr-uploading"),e.find("video").off("canplay"),o&&l.find("video").attr("src",o),l.replaceWith(e)):e=l;for(var a=e.find("video").get(0).attributes,r=0;r<a.length;r++){var n=a[r];0===n.nodeName.indexOf("data-")&&e.find("video").removeAttr(n.nodeName)}if(void 0!==d)for(t in d)d.hasOwnProperty(t)&&"link"!=t&&e.find("video").attr("data-".concat(t),d[t]);e.find("video").on("canplay",m),e.find("video").attr("src",s)}w.edit.on(),L(),w.undo.saveStep(),w.$el.blur(),w.events.trigger(i?"video.replaced":"video.inserted",[e,p])}else e=k(s,d,m),L(),w.undo.saveStep(),w.events.trigger("video.inserted",[e,p])};R("Loading video"),f()}function R(e){var t=w.popups.get("video.insert");if(t||(t=n()),t.find(".fr-layer.fr-active").removeClass("fr-active").addClass("fr-pactive"),t.find(".fr-video-progress-bar-layer").addClass("fr-active"),t.find(".fr-buttons").hide(),E){var o=E.find("iframe, embed, ".concat(E.find("iframe, embed, audio").get(0)?"audio":"video"));w.popups.setContainer("video.insert",w.$sc);var i=o.offset().left,a=o.offset().top+o.height();w.popups.show("video.insert",i,a,o.outerHeight())}void 0===e&&b(w.language.translate("Uploading"),0)}function d(e){var t=w.popups.get("video.insert");if(t&&(t.find(".fr-layer.fr-pactive").addClass("fr-active").removeClass("fr-pactive"),t.find(".fr-video-progress-bar-layer").removeClass("fr-active"),t.find(".fr-buttons").show(),e||w.$el.find("video.fr-error").length)){if(w.events.focus(),w.$el.find("video.fr-error").length&&(w.$el.find("video.fr-error").parent().remove(),w.undo.saveStep(),w.undo.run(),w.undo.dropRedo()),!w.$wp&&E){var o=E;V(!0),w.selection.setAfter(o.find("video").get(0)),w.selection.restore()}w.popups.hide("video.insert")}}function b(e,t){var o=w.popups.get("video.insert");if(o){var i=o.find(".fr-video-progress-bar-layer");i.find("h3").text(e+(t?" ".concat(t,"%"):"")),i.removeClass("fr-error"),t?(i.find("div").removeClass("fr-indeterminate"),i.find("div > span").css("width","".concat(t,"%"))):i.find("div").addClass("fr-indeterminate")}}function y(e){R();var t=w.popups.get("video.insert").find(".fr-video-progress-bar-layer");t.addClass("fr-error");var o=t.find("h3");o.text(e),w.events.disableBlur(),o.focus()}function l(e){t.call(e.get(0))}function _(e,t,o){b("Loading video");var i=this.status,a=this.response,r=this.responseXML,n=this.responseText;try{if(w.opts.videoUploadToS3||w.opts.videoUploadToAzure)if(201==i){var s;if(w.opts.videoUploadToAzure){if(!1===w.events.trigger("video.uploadedToAzure",[this.responseURL,o,a],!0))return w.edit.on(),!1;s=t}else s=function l(e){try{var t=A(e).find("Location").text(),o=A(e).find("Key").text();return!1===w.events.trigger("video.uploadedToS3",[t,o,e],!0)?(w.edit.on(),!1):t}catch(i){return F(u,e),!1}}(r);s&&x(s,!1,[],e,a||r)}else F(u,a||r);else if(200<=i&&i<300){var d=function p(e){try{if(!1===w.events.trigger("video.uploaded",[e],!0))return w.edit.on(),!1;var t=JSON.parse(e);return t.link?t:(F(c,e),!1)}catch(o){return F(u,e),!1}}(n);d&&x(d.link,!1,d,e,a||n)}else F(v,a||n)}catch(f){F(u,a||n)}}function B(){F(u,this.response||this.responseText||this.responseXML)}function D(e){if(e.lengthComputable){var t=e.loaded/e.total*100|0;b(w.language.translate("Uploading"),t)}}function I(){w.edit.on(),d(!0)}function k(e,t,o){var i,a="";if(t&&void 0!==t)for(i in t)t.hasOwnProperty(i)&&"link"!=i&&(a+=" data-".concat(i,'="').concat(t[i],'"'));var r=w.opts.videoDefaultWidth;r&&"auto"!=r&&(r="".concat(r,"px")),w.helpers.isMobile()&&w.browser.safari&&(a+=" autoplay playsinline");var n=A(document.createElement("span")).attr("contenteditable","false").attr("draggable","true").attr("class","fr-video fr-dv"+w.opts.videoDefaultDisplay[0]+("center"!=w.opts.videoDefaultAlign?" fr-fv"+w.opts.videoDefaultAlign[0]:"")).html('<video src="'+e+'" '+a+(r?' style="width: '+r+';" ':"")+" controls>"+w.language.translate("Your browser does not support HTML5 video.")+"</video>");n.toggleClass("fr-draggable",w.opts.videoMove),w.edit.on(),w.events.focus(!0),w.selection.restore(),w.undo.saveStep(),w.opts.videoSplitHTML?w.markers.split():(w.cursor.enter(),w.markers.insert()),w.html.wrap();var s=w.$el.find(".fr-marker");return w.node.isLastSibling(s)&&s.parent().hasClass("fr-deletable")&&s.insertAfter(s.parent()),s.replaceWith(n),w.selection.clear(),n.find("video").get(0).readyState>n.find("video").get(0).HAVE_FUTURE_DATA||w.helpers.isIOS()?o.call(n.find("video").get(0)):n.find("video").on("canplaythrough load",o),n}function T(e){if(!w.core.sameInstance(f))return!0;e.preventDefault(),e.stopPropagation();var t=e.pageX||(e.originalEvent.touches?e.originalEvent.touches[0].pageX:null),o=e.pageY||(e.originalEvent.touches?e.originalEvent.touches[0].pageY:null);if(!t||!o)return!1;if("mousedown"==e.type){var i=w.$oel.get(0).ownerDocument,a=i.defaultView||i.parentWindow,r=!1;try{r=a.location!=a.parent.location&&!(a.$&&a.$.FE)}catch(n){}r&&a.frameElement&&(t+=w.helpers.getPX(A(a.frameElement).offset().left)+a.frameElement.clientLeft,o=e.clientY+w.helpers.getPX(A(a.frameElement).offset().top)+a.frameElement.clientTop)}w.undo.canDo()||w.undo.saveStep(),(p=A(this)).data("start-x",t),p.data("start-y",o),s.show(),w.popups.hideAll(),Y()}function z(e){if(!w.core.sameInstance(f))return!0;if(p){e.preventDefault();var t=e.pageX||(e.originalEvent.touches?e.originalEvent.touches[0].pageX:null),o=e.pageY||(e.originalEvent.touches?e.originalEvent.touches[0].pageY:null);if(!t||!o)return!1;var i=p.data("start-x"),a=p.data("start-y");p.data("start-x",t),p.data("start-y",o);var r=t-i,n=o-a,s=E.find("iframe, embed, ".concat(E.find("iframe, embed, audio").get(0)?"audio":"video")),d=s.width(),l=s.height();(p.hasClass("fr-hnw")||p.hasClass("fr-hsw"))&&(r=0-r),(p.hasClass("fr-hnw")||p.hasClass("fr-hne"))&&(n=0-n),s.css("width",d+r),s.css("height",l+n),s.removeAttr("width"),s.removeAttr("height"),M()}}function P(e){if(!w.core.sameInstance(f))return!0;p&&E&&(e&&e.stopPropagation(),p=null,s.hide(),M(),r(),w.undo.saveStep())}function $(e){return'<div class="fr-handler fr-h'.concat(e,'"></div>')}function O(e,t,o,i){return e.pageX=t,e.pageY=t,T.call(this,e),e.pageX=e.pageX+o*Math.floor(Math.pow(1.1,i)),e.pageY=e.pageY+o*Math.floor(Math.pow(1.1,i)),z.call(this,e),P.call(this,e),++i}function L(){var e,t=Array.prototype.slice.call(w.el.querySelectorAll("video, .fr-video > *")),o=[];for(e=0;e<t.length;e++)o.push(t[e].getAttribute("src")),A(t[e]).toggleClass("fr-draggable",w.opts.videoMove),""===t[e].getAttribute("class")&&t[e].removeAttribute("class"),""===t[e].getAttribute("style")&&t[e].removeAttribute("style");if(i)for(e=0;e<i.length;e++)o.indexOf(i[e].getAttribute("src"))<0&&w.events.trigger("video.removed",[A(i[e])]);i=t}function M(){f||function n(){var e;if(w.shared.$video_resizer?(f=w.shared.$video_resizer,s=w.shared.$vid_overlay,w.events.on("destroy",function(){A("body").first().append(f.removeClass("fr-active"))},!0)):(w.shared.$video_resizer=A(document.createElement("div")).attr("class","fr-video-resizer"),f=w.shared.$video_resizer,w.events.$on(f,"mousedown",function(e){e.stopPropagation()},!0),w.opts.videoResize&&(f.append($("nw")+$("ne")+$("sw")+$("se")),w.shared.$vid_overlay=A(document.createElement("div")).attr("class","fr-video-overlay"),s=w.shared.$vid_overlay,e=f.get(0).ownerDocument,A(e).find("body").first().append(s))),w.events.on("shared.destroy",function(){f.html("").removeData().remove(),f=null,w.opts.videoResize&&(s.remove(),s=null)},!0),w.helpers.isMobile()||w.events.$on(A(w.o_win),"resize.video",function(){V(!0)}),w.opts.videoResize){e=f.get(0).ownerDocument,w.events.$on(f,w._mousedown,".fr-handler",T),w.events.$on(A(e),w._mousemove,z),w.events.$on(A(e.defaultView||e.parentWindow),w._mouseup,P),w.events.$on(s,"mouseleave",P);var i=1,a=null,r=0;w.events.on("keydown",function(e){if(E){var t=-1!=navigator.userAgent.indexOf("Mac OS X")?e.metaKey:e.ctrlKey,o=e.which;(o!==a||200<e.timeStamp-r)&&(i=1),(o==we.KEYCODE.EQUALS||w.browser.mozilla&&o==we.KEYCODE.FF_EQUALS)&&t&&!e.altKey?i=O.call(this,e,1,1,i):(o==we.KEYCODE.HYPHEN||w.browser.mozilla&&o==we.KEYCODE.FF_HYPHEN)&&t&&!e.altKey&&(i=O.call(this,e,2,-1,i)),a=o,r=e.timeStamp}}),w.events.on("keyup",function(){i=1})}}(),(w.$wp||w.$sc).append(f),f.data("instance",w);var e=E.find("iframe, embed, ".concat(E.find("iframe, embed, audio").get(0)?"audio":"video")),t=0,o=0;w.opts.iframe&&(o=w.helpers.getPX(w.$wp.find(".fr-iframe").css("padding-top")),t=w.helpers.getPX(w.$wp.find(".fr-iframe").css("padding-left"))),f.css("top",(w.opts.iframe?e.offset().top+o-1:e.offset().top-w.$wp.offset().top-1)+w.$wp.scrollTop()).css("left",(w.opts.iframe?e.offset().left+t-1:e.offset().left-w.$wp.offset().left-1)+w.$wp.scrollLeft()).css("width",e.get(0).getBoundingClientRect().width).css("height",e.get(0).getBoundingClientRect().height).addClass("fr-active")}function t(e){if(e&&"touchend"==e.type&&o)return!0;if(e&&w.edit.isDisabled())return e.stopPropagation(),e.preventDefault(),!1;if(w.edit.isDisabled())return!1;for(var t=0;t<we.INSTANCES.length;t++)we.INSTANCES[t]!=w&&we.INSTANCES[t].events.trigger("video.hideResizer");w.toolbar.disable(),w.helpers.isMobile()&&(w.events.disableBlur(),w.$el.blur(),w.events.enableBlur()),w.$el.find(".fr-video.fr-active").removeClass("fr-active"),(E=A(this)).addClass("fr-active"),w.opts.iframe&&w.size.syncIframe(),te(),M(),r(),w.selection.clear(),w.button.bulkRefresh(),w.events.trigger("image.hideResizer")}function V(e){E&&(function t(){return w.shared.vid_exit_flag}()||!0===e)&&(f.removeClass("fr-active"),w.toolbar.enable(),E.removeClass("fr-active"),E=null,Y())}function N(){w.shared.vid_exit_flag=!0}function Y(){w.shared.vid_exit_flag=!1}function H(e){var t=e.originalEvent.dataTransfer;if(t&&t.files&&t.files.length){var o=t.files[0];if(o&&o.type&&-1!==o.type.indexOf("video")){if(!w.opts.videoUpload)return e.preventDefault(),e.stopPropagation(),!1;w.markers.remove(),w.markers.insertAtPoint(e.originalEvent),w.$el.find(".fr-marker").replaceWith(we.MARKERS),w.popups.hideAll();var i=w.popups.get("video.insert");return i||(i=n()),w.popups.setContainer("video.insert",w.$sc),w.popups.show("video.insert",e.originalEvent.pageX,e.originalEvent.pageY),R(),0<=w.opts.videoAllowedTypes.indexOf(o.type.replace(/video\//g,""))?K(t.files):F(U),e.preventDefault(),e.stopPropagation(),!1}}}function K(e){if(void 0!==e&&0<e.length){if(!1===w.events.trigger("video.beforeUpload",[e]))return!1;var t,o=e[0];if(!(null!==w.opts.videoUploadURL&&w.opts.videoUploadURL!=C||w.opts.videoUploadToS3||w.opts.videoUploadToAzure))return function y(i){E&&E.find("iframe")&&E.find("iframe").length&&q();var a=new FileReader;a.onload=function(){a.result;for(var e=atob(a.result.split(",")[1]),t=[],o=0;o<e.length;o++)t.push(e.charCodeAt(o));x(window.URL.createObjectURL(new Blob([new Uint8Array(t)],{type:i.type})),!1,null,E)},R(),a.readAsDataURL(i)}(o),!1;if(o.size>w.opts.videoMaxSize)return F(S),!1;if(w.opts.videoAllowedTypes.indexOf(o.type.replace(/video\//g,""))<0)return F(U),!1;if(w.drag_support.formdata&&(t=w.drag_support.formdata?new FormData:null),t){var i;if(!1!==w.opts.videoUploadToS3)for(i in t.append("key",w.opts.videoUploadToS3.keyStart+(new Date).getTime()+"-"+(o.name||"untitled")),t.append("success_action_status","201"),t.append("X-Requested-With","xhr"),t.append("Content-Type",o.type),w.opts.videoUploadToS3.params)w.opts.videoUploadToS3.params.hasOwnProperty(i)&&t.append(i,w.opts.videoUploadToS3.params[i]);for(i in w.opts.videoUploadParams)w.opts.videoUploadParams.hasOwnProperty(i)&&t.append(i,w.opts.videoUploadParams[i]);t.append(w.opts.videoUploadParam,o);var a,r,n=w.opts.videoUploadURL;w.opts.videoUploadToS3&&(n=w.opts.videoUploadToS3.uploadURL?w.opts.videoUploadToS3.uploadURL:"https://".concat(w.opts.videoUploadToS3.region,".amazonaws.com/").concat(w.opts.videoUploadToS3.bucket));var s=w.opts.videoUploadMethod;w.opts.videoUploadToAzure&&(n=w.opts.videoUploadToAzure.uploadURL?"".concat(w.opts.videoUploadToAzure.uploadURL,"/").concat(o.name):encodeURI("https://".concat(w.opts.videoUploadToAzure.account,".blob.core.windows.net/").concat(w.opts.videoUploadToAzure.container,"/").concat(o.name)),a=n,w.opts.videoUploadToAzure.SASToken&&(n+=w.opts.videoUploadToAzure.SASToken),s="PUT");var d=w.core.getXHR(n,s);if(w.opts.videoUploadToAzure){var l=(new Date).toUTCString();if(!w.opts.videoUploadToAzure.SASToken&&w.opts.videoUploadToAzure.accessKey){var p=w.opts.videoUploadToAzure.account,f=w.opts.videoUploadToAzure.container;if(w.opts.videoUploadToAzure.uploadURL){var c=w.opts.videoUploadToAzure.uploadURL.split("/");f=c.pop(),p=c.pop().split(".")[0]}var v="x-ms-blob-type:BlockBlob\nx-ms-date:".concat(l,"\nx-ms-version:2019-07-07"),u=encodeURI("/"+p+"/"+f+"/"+o.name),g=s+"\n\n\n"+o.size+"\n\n"+o.type+"\n\n\n\n\n\n\n"+v+"\n"+u,h=w.cryptoJSPlugin.cryptoJS.HmacSHA256(g,w.cryptoJSPlugin.cryptoJS.enc.Base64.parse(w.opts.videoUploadToAzure.accessKey)).toString(w.cryptoJSPlugin.cryptoJS.enc.Base64),m="SharedKey "+p+":"+h;r=h,d.setRequestHeader("Authorization",m)}for(i in d.setRequestHeader("x-ms-version","2019-07-07"),d.setRequestHeader("x-ms-date",l),d.setRequestHeader("Content-Type",o.type),d.setRequestHeader("x-ms-blob-type","BlockBlob"),w.opts.videoUploadParams)w.opts.videoUploadParams.hasOwnProperty(i)&&d.setRequestHeader(i,w.opts.videoUploadParams[i]);for(i in w.opts.videoUploadToAzure.params)w.opts.videoUploadToAzure.params.hasOwnProperty(i)&&d.setRequestHeader(i,w.opts.videoUploadToAzure.params[i])}d.onload=function(){_.call(d,E,a,r)},d.onerror=B,d.upload.onprogress=D,d.onabort=I,R(),w.events.disableBlur(),w.edit.off(),w.events.enableBlur();var b=w.popups.get("video.insert");b&&A(b.off("abortUpload")).on("abortUpload",function(){4!=d.readyState&&d.abort()}),d.send(w.opts.videoUploadToAzure?o:t)}}}function F(e,t){w.edit.on(),E&&E.find("video").addClass("fr-error"),y(w.language.translate("Something went wrong. Please try again.")),w.events.trigger("video.error",[{code:e,message:a[e]},t])}function X(){if(E){var e=w.popups.get("video.size"),t=E.find("iframe, embed, ".concat(E.find("iframe, embed, audio").get(0)?"audio":"video"));e.find('input[name="width"]').val(t.get(0).style.width||t.attr("width")).trigger("change"),e.find('input[name="height"]').val(t.get(0).style.height||t.attr("height")).trigger("change")}}function G(e){if(e)return w.popups.onRefresh("video.size",X),!0;var t={buttons:'<div class="fr-buttons fr-tabs">'.concat(w.button.buildList(w.opts.videoSizeButtons),"</div>"),size_layer:'<div class="fr-video-size-layer fr-layer fr-active" id="fr-video-size-layer-'.concat(w.id,'"><div class="fr-video-group"><div class="fr-input-line"><input id="fr-video-size-layer-width-').concat(w.id,'" type="text" name="width" placeholder="').concat(w.language.translate("Width"),'" tabIndex="1"></div><div class="fr-input-line"><input id="fr-video-size-layer-height-').concat(w.id,'" type="text" name="height" placeholder="').concat(w.language.translate("Height"),'" tabIndex="1"></div></div><div class="fr-action-buttons"><button type="button" class="fr-command fr-submit" data-cmd="videoSetSize" tabIndex="2" role="button">').concat(w.language.translate("Update"),"</button></div></div>")},o=w.popups.create("video.size",t);return w.events.$on(w.$wp,"scroll",function(){E&&w.popups.isVisible("video.size")&&(w.events.disableBlur(),l(E))}),o}function j(e){if(void 0===e&&(e=E),e){if(e.hasClass("fr-fvl"))return"left";if(e.hasClass("fr-fvr"))return"right";if(e.hasClass("fr-dvb")||e.hasClass("fr-dvi"))return"center";if("block"==e.css("display")){if("left"==e.css("text-algin"))return"left";if("right"==e.css("text-align"))return"right"}else{if("left"==e.css("float"))return"left";if("right"==e.css("float"))return"right"}}return"center"}function W(e){void 0===e&&(e=E);var t=e.css("float");return e.css("float","none"),"block"==e.css("display")?(e.css("float",""),e.css("float")!=t&&e.css("float",t),"block"):(e.css("float",""),e.css("float")!=t&&e.css("float",t),"inline")}function q(){if(E&&!1!==w.events.trigger("video.beforeRemove",[E])){var e=E;if(w.popups.hideAll(),V(!0),w.opts.trackChangesEnabled&&(!e[0].parentNode||"
807SPAN"!==e[0].parentNode.tagName||!e[0].parentNode.hasAttribute("data-tracking")))return void w.track_changes.removeSpecialItem(e);w.selection.setBefore(e.get(0))||w.selection.setAfter(e.get(0)),e.remove(),w.selection.restore(),w.html.fillEmptyBlocks()}}function J(){d()}function Z(e,t,o){!w.opts.htmlUntouched&&w.opts.useClasses?(e.removeClass("fr-fvl fr-fvr fr-dvb fr-dvi"),e.addClass("fr-fv".concat(o[0]," fr-dv").concat(t[0]))):"inline"==t?(e.css({display:"inline-block"}),"center"==o?e.css({"float":"none"}):"left"==o?e.css({"float":"left"}):e.css({"float":"right"})):(e.css({display:"block",clear:"both"}),"left"==o?e.css({textAlign:"left"}):"right"==o?e.css({textAlign:"right"}):e.css({textAlign:"center"}))}function Q(){var e=w.$el.find("video").filter(function(){return 0===A(this).parents("span.fr-video").length});if(0!=e.length){e.wrap(A(document.createElement("span")).attr("class","fr-video fr-deletable").attr("contenteditable","false")),w.$el.find("embed, iframe").filter(function(){if(w.browser.safari&&this.getAttribute("src")&&this.setAttribute("src",this.src),0<A(this).parents("span.fr-video").length)return!1;for(var e=A(this).attr("src"),t=0;t<we.VIDEO_PROVIDERS.length;t++){var o=we.VIDEO_PROVIDERS[t];if(o.test_regex.test(e)&&new RegExp(w.opts.videoAllowedProviders.join("|")).test(o.provider))return!0}return!1}).map(function(){return 0===A(this).parents("object").length?this:A(this).parents("object").get(0)}).wrap(A(document.createElement("span")).attr("class","fr-video").attr("contenteditable","false"));for(var t,o,i,a,r=w.$el.find("span.fr-video, video"),n=0;n<r.length;n++){var s=A(r[n]);!w.opts.htmlUntouched&&w.opts.useClasses?((a=s).hasClass("fr-dvi")||a.hasClass("fr-dvb")||(a.addClass("fr-fv".concat(j(a)[0])),a.addClass("fr-dv".concat(W(a)[0]))),w.opts.videoTextNear||s.removeClass("fr-dvi").addClass("fr-dvb")):w.opts.htmlUntouched||w.opts.useClasses||(void 0,o=(t=s).hasClass("fr-dvb")?"block":t.hasClass("fr-dvi")?"inline":null,i=t.hasClass("fr-fvl")?"left":t.hasClass("fr-fvr")?"right":j(t),Z(t,o,i),t.removeClass("fr-dvb fr-dvi fr-fvr fr-fvl"))}r.toggleClass("fr-draggable",w.opts.videoMove)}}function ee(e){document.getElementById("autoplay-".concat(w.id)).style.cssText="background:".concat(e)}function te(){if(E){w.selection.clear();var e=w.doc.createRange();e.selectNode(E.get(0)),w.selection.get().addRange(e)}}return a[1]="Video cannot be loaded from the passed link.",a[c]="No link in upload response.",a[v]="Error during file upload.",a[u]="Parsing response failed.",a[S]="File is too large.",a[U]="Video file type is invalid.",a[7]="Files can be uploaded only to same domain in IE 8 and IE 9.",w.shared.vid_exit_flag=!1,{_init:function oe(){w.opts.videoResponsive&&(w.opts.videoResize=!1),function e(){w.events.on("drop",H,!0),w.events.on("mousedown window.mousedown",N),w.events.on("window.touchmove",Y),w.events.on("mouseup window.mouseup",V),w.events.on("commands.mousedown",function(e){0<e.parents(".fr-toolbar").length&&V()}),w.events.on("video.hideResizer commands.undo commands.redo element.dropped",function(){V(!0)})}(),w.helpers.isMobile()&&(w.events.$on(w.$el,"touchstart","span.fr-video",function(){o=!1}),w.events.$on(w.$el,"touchmove",function(){o=!0})),w.events.on("html.set",Q),Q(),w.events.$on(w.$el,"mousedown","span.fr-video",function(e){e.stopPropagation(),(w.browser.msie||w.browser.edge)&&(e.target.innerText||(e.target.dragDrop(),t.call(this,e)))}),w.events.$on(w.$el,"click touchend","span.fr-video",function(e){if(e.target.innerText.length||"false"==A(this).parents("[contenteditable]").not(".fr-element").not(".fr-img-caption").not("body").first().attr("contenteditable"))return!0;t.call(this,e)}),w.events.on("keydown",function(e){var t=e.which;return!E||t!=we.KEYCODE.BACKSPACE&&t!=we.KEYCODE.DELETE?E&&t==we.KEYCODE.ESC?(V(!0),e.preventDefault(),!1):E&&t!=we.KEYCODE.F10&&!w.keys.isBrowserAction(e)?(e.preventDefault(),!1):void 0:(e.preventDefault(),q(),w.undo.saveStep(),!1)},!0),w.events.on("toolbar.esc",function(){if(E)return w.events.disableBlur(),w.events.focus(),!1},!0),w.events.on("toolbar.focusEditor",function(){if(E)return!1},!0),w.events.on("keydown",function(){w.$el.find("span.fr-video:empty").remove()}),w.$wp&&(L(),w.events.on("contentChanged",L)),n(!0),G(!0)}
vendor: 9,527 bytes, line 807
807,showInsertPopup:function ie(){var e=w.$tb.find('.fr-command[data-cmd="insertVideo"]'),t=w.popups.get("video.insert");if(t||(t=n()),d(),!t.hasClass("fr-active"))if(w.popups.refresh("video.insert"),w.popups.setContainer("video.insert",w.$tb),e.isVisible()){var o=w.button.getPosition(e),i=o.left,a=o.top;w.popups.show("video.insert",i,a,e.outerHeight())}else w.position.forSelection(t),w.popups.show("video.insert")},showLayer:function ae(e){var t,o,i=w.popups.get("video.insert");if(!E&&!w.opts.toolbarInline){var a=w.$tb.find('.fr-command[data-cmd="insertVideo"]');t=a.offset().left,o=a.offset().top+(w.opts.toolbarBottom?10:a.outerHeight()-10)}w.opts.toolbarInline&&(o=i.offset().top-w.helpers.getPX(i.css("margin-top")),i.hasClass("fr-above")&&(o+=i.outerHeight())),i.find(".fr-layer").removeClass("fr-active"),i.find(".fr-".concat(e,"-layer")).addClass("fr-active"),w.popups.show("video.insert",t,o,0),w.accessibility.focusPopup(i)},refreshByURLButton:function re(e){var t=w.popups.get("video.insert");t&&t.find(".fr-video-by-url-layer").hasClass("fr-active")&&e.addClass("fr-active").attr("aria-pressed",!0)},refreshEmbedButton:function ne(e){var t=w.popups.get("video.insert");t&&t.find(".fr-video-embed-layer").hasClass("fr-active")&&e.addClass("fr-active").attr("aria-pressed",!0)},refreshUploadButton:function se(e){var t=w.popups.get("video.insert");t&&t.find(".fr-video-upload-layer").hasClass("fr-active")&&e.addClass("fr-active").attr("aria-pressed",!0)},upload:K,insertByURL:function de(e){var t=!!document.getElementById("videoPluginAutoplay")&&document.getElementById("videoPluginAutoplay").checked;if(void 0===e){var o=(e=(w.popups.get("video.insert").find('.fr-video-by-url-layer input[type="text"]').val()||"").trim()).match(/(https?:\/\/)?(www\.)?(player\.)?vimeo\.com\/?(showcase\/)*([0-9))([a-z]*\/)*([0-9]{6,11})[?]?.*/);if(o&&7==o.length){var i=o[6],a=e.substring(0,e.lastIndexOf("/")),r=e.substring(e.lastIndexOf("/")+1,e.length);e=r.includes("?h=")||r.includes("?v=")||i===r?("".concat(a,"/").concat(r)||"").trim():("".concat(a,"?h=").concat(r)||"").trim()}}var n=null;if(/^http/.test(e)||(e="https://".concat(e)),w.helpers.isURL(e))for(var s=0;s<we.VIDEO_PROVIDERS.length;s++){var d=we.VIDEO_PROVIDERS[s],l="autoplay=1&mute=1";if(d.html.includes("autoplay=1")&&document.getElementById("videoPluginAutoplay").checked)d.html=d.html,document.getElementById("videoPluginAutoplay").checked=!1;else if(t){var p=d.html.indexOf("{url}")+5;d.html=[d.html.slice(0,p),l,d.html.slice(p)].join(""),t=!1,document.getElementById("videoPluginAutoplay").checked=!1}else(d=we.VIDEO_PROVIDERS[s]).html=d.html.replace(l,"");if(d.test_regex.test(e)&&new RegExp(w.opts.videoAllowedProviders.join("|")).test(d.provider)){n=e.replace(d.url_regex,d.url_text),n=d.html.replace(/\{url\}/,n);break}}n?h(n):(y(w.language.translate("Something went wrong. Please try again.")),w.events.trigger("video.linkError",[e]))},insertEmbed:function le(e){void 0===e&&(e=w.popups.get("video.insert").find(".fr-video-embed-layer textarea").val()||""),0!==e.length&&we.VIDEO_EMBED_REGEX.test(e)?h(e):(y(w.language.translate("Something went wrong. Please try again.")),w.events.trigger("video.codeError",[e]))},insert:h,align:function pe(e){E.removeClass("fr-fvr fr-fvl"),!w.opts.htmlUntouched&&w.opts.useClasses?"left"==e?E.addClass("fr-fvl"):"right"==e&&E.addClass("fr-fvr"):Z(E,W(),e),te(),M(),r(),w.selection.clear()},refreshAlign:function fe(e){if(!E)return!1;e.find(">*").first().replaceWith(w.icon.create("video-align-".concat(j())))},refreshAlignOnShow:function ce(e,t){E&&t.find('.fr-command[data-param1="'.concat(j(),'"]')).addClass("fr-active").attr("aria-selected",!0)},display:function ve(e){E.removeClass("fr-dvi fr-dvb"),!w.opts.htmlUntouched&&w.opts.useClasses?"inline"==e?E.addClass("fr-dvi"):"block"==e&&E.addClass("fr-dvb"):Z(E,e,j()),te(),M(),r(),w.selection.clear()},refreshDisplayOnShow:function ue(e,t){E&&t.find('.fr-command[data-param1="'.concat(W(),'"]')).addClass("fr-active").attr("aria-selected",!0)},remove:q,hideProgressBar:d,showSizePopup:function ge(){var e=w.popups.get("video.size");e||(e=G()),d(),w.popups.refresh("video.size"),w.popups.setContainer("video.size",w.$sc);var t=E.find("iframe, embed, ".concat(E.find("iframe, embed, audio").get(0)?"audio":"video")),o=t.offset().left+t.outerWidth()/2,i=t.offset().top+t.height();w.popups.show("video.size",o,i,t.height(),!0)},replace:function he(){var e=w.popups.get("video.insert");e||(e=n()),w.popups.isVisible("video.insert")||(d(),w.popups.refresh("video.insert"),w.popups.setContainer("video.insert",w.$sc));var t=E.offset().left+E.outerWidth()/2,o=E.offset().top+E.height();w.popups.show("video.insert",t,o,E.outerHeight(),!0)},back:function e(){E?(w.events.disableBlur(),E[0].click()):(w.events.disableBlur(),w.selection.restore(),w.events.enableBlur(),w.popups.hide("video.insert"),w.toolbar.showInline())},setSize:function me(e,t){if(E){var o=w.popups.get("video.size"),i=E.find("iframe, embed, ".concat(E.find("iframe, embed, audio").get(0)?"audio":"video"));i.css("width",e||o.find('input[name="width"]').val()),i.css("height",t||o.find('input[name="height"]').val()),i.get(0).style.width&&i.removeAttr("width"),i.get(0).style.height&&i.removeAttr("height"),o.find("input:focus").blur(),setTimeout(function(){E.trigger("click")},w.helpers.isAndroid()?50:0)}},get:function be(){return E},showProgressBar:R,_editVideo:l,setAutoplay:function ye(){var e;if(E.find("iframe, embed, audio").get(0))(e=E.find("iframe, embed, audio")).get(0).src.includes("autoplay=1")?(ee("#FFFFFF"),e.get(0).src=e.get(0).src.replace("&autoplay=1","")):(ee("#D6D6D6"),e.get(0).src=e.get(0).src+"&autoplay=1");else if((e=E.find("iframe, embed, video")).get(0).outerHTML.includes("autoplay"))ee("#FFFFFF"),e.get(0).outerHTML=e.get(0).outerHTML.replace("autoplay","");else{ee("#D6D6D6");var t=e.get(0).outerHTML.indexOf("class")-1;e.get(0).outerHTML=[e.get(0).outerHTML.slice(0,t),"autoplay",e.get(0).outerHTML.slice(t)].join("")}}}},we.RegisterCommand("insertVideo",{title:"Insert Video",undo:!1,focus:!0,refreshAfterCallback:!1,popup:!0,callback:function(){this.popups.isVisible("video.insert")?(this.$el.find(".fr-marker").length&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide("video.insert")):this.video.showInsertPopup()},plugin:"video"}),we.DefineIcon("insertVideo",{NAME:"video-camera",FA5NAME:"camera",SVG_KEY:"insertVideo"}),we.DefineIcon("videoByURL",{NAME:"link",SVG_KEY:"insertLink"}),we.RegisterCommand("videoByURL",{title:"By URL",undo:!1,focus:!1,toggle:!0,callback:function(){this.video.showLayer("video-by-url")},refresh:function(e){this.video.refreshByURLButton(e)}}),we.DefineIcon("videoEmbed",{NAME:"code",SVG_KEY:"codeView"}),we.RegisterCommand("videoEmbed",{title:"Embedded Code",undo:!1,focus:!1,toggle:!0,callback:function(){this.video.showLayer("video-embed")},refresh:function(e){this.video.refreshEmbedButton(e)}}),we.DefineIcon("videoUpload",{NAME:"upload",SVG_KEY:"upload"}),we.RegisterCommand("videoUpload",{title:"Upload Video",undo:!1,focus:!1,toggle:!0,callback:function(){this.video.showLayer("video-upload")},refresh:function(e){this.video.refreshUploadButton(e)}}),we.RegisterCommand("videoInsertByURL",{undo:!0,focus:!0,callback:function(){this.video.insertByURL()}}),we.RegisterCommand("videoInsertEmbed",{undo:!0,focus:!0,callback:function(){this.video.insertEmbed()}}),we.DefineIcon("videoDisplay",{NAME:"star",SVG_KEY:"star"}),we.RegisterCommand("videoDisplay",{title:"Display",type:"dropdown",options:{inline:"Inline",block:"Break Text"},callback:function(e,t){this.video.display(t)},refresh:function(e){this.opts.videoTextNear||e.addClass("fr-hidden")},refreshOnShow:function(e,t){this.video.refreshDisplayOnShow(e,t)}}),we.DefineIcon("video-align",{NAME:"align-left",SVG_KEY:"align Left"}),we.DefineIcon("video-align-left",{NAME:"align-left",SVG_KEY:"alignLeft"}),we.DefineIcon("video-align-right",{NAME:"align-right",SVG_KEY:"alignRight"}),we.DefineIcon("video-align-center",{NAME:"align-justify",SVG_KEY:"alignJustify"}),we.DefineIcon("videoAlign",{NAME:"align-center",SVG_KEY:"alignCenter"}),we.RegisterCommand("videoAlign",{type:"dropdown",title:"Align",options:{left:"Align Left",center:"None",right:"Align Right"},html:function(){var e='<ul class="fr-dropdown-list" role="presentation">',t=we.COMMANDS.videoAlign.options;for(var o in t)t.hasOwnProperty(o)&&(e+='<li role="presentation"><a class="fr-command fr-title" tabIndex="-1" role="option" data-cmd="videoAlign" data-param1="'.concat(o,'" title="').concat(this.language.translate(t[o]),'">').concat(this.icon.create("video-align-".concat(o)),'<span class="fr-sr-only">').concat(this.language.translate(t[o]),"</span></a></li>"));return e+="</ul>"},callback:function(e,t){this.video.align(t)},refresh:function(e){this.video.refreshAlign(e)},refreshOnShow:function(e,t){this.video.refreshAlignOnShow(e,t)}}),we.DefineIcon("videoReplace",{NAME:"exchange",FA5NAME:"exchange-alt",SVG_KEY:"replaceImage"}),we.RegisterCommand("videoReplace",{title:"Replace",undo:!1,focus:!1,popup:!0,refreshAfterCallback:!1,callback:function(){this.video.replace()}}),we.DefineIcon("videoRemove",{NAME:"trash",SVG_KEY:"remove"}),we.RegisterCommand("videoRemove",{title:"Remove",callback:function(){this.video.remove()}}),we.DefineIcon("autoplay",{NAME:"autoplay",SVG_KEY:"autoplay"}),we.RegisterCommand("autoplay",{undo:!1,focus:!1,popup:!0,title:"Autoplay",callback:function(){this.video.setAutoplay()}}),we.DefineIcon("videoSize",{NAME:"arrows-alt",SVG_KEY:"imageSize"}
vendor: 1,498 bytes, lines 807-815
807),we.RegisterCommand("videoSize",{undo:!1,focus:!1,popup:!0,title:"Change Size",callback:function(){this.video.showSizePopup()}}),we.DefineIcon("videoBack",{NAME:"arrow-left",SVG_KEY:"back"}),we.RegisterCommand("videoBack",{title:"Back",undo:!1,focus:!1,back:!0,callback:function(){this.video.back()},refresh:function(e){this.video.get()||this.opts.toolbarInline?(e.removeClass("fr-hidden"),e.next().hasClass("fr-separator")&&e.next().removeClass("fr-hidden")):(e.addClass("fr-hidden"),e.next().hasClass("fr-separator")&&e.next().addClass("fr-hidden"))}}),we.RegisterCommand("videoDismissError",{title:"OK",undo:!1,callback:function(){this.video.hideProgressBar(!0)}}),we.RegisterCommand("videoSetSize",{undo:!0,focus:!1,title:"Update",refreshAfterCallback:!1,callback:function(){this.video.setSize()}})}); 808},{"froala-editor":8}],25:[function(require,module,exports){ 809/*! 810 * froala_editor v4.0.17 (https://www.froala.com/wysiwyg-editor) 811 * License https://froala.com/wysiwyg-editor/terms/ 812 * Copyright 2014-2023 Froala Labs 813 */ 814 815!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?a(require("froala-editor")):"function"==typeof define&&define.amd?define(["froala-editor"],a):a(e.FroalaEditor)}(this,function(g){"use strict";g=g&&g.hasOwnProperty("default")?g["default"]:g,Object.assign(g.DEFAULTS,{fontAwesomeTemplate:'<i class="fa fa-[NAME] fr-deletable" aria-hidden="true"> </i>',fontAwesomeTemplate5:'<i class="fa [FPREFIX] fa-[NAME] fr-deletable" aria-hidden="true">
vendor: 9,501 bytes, line 815
815</i>',fontAwesomeSets:[{title:"Web Application Icons",icon:"address-book",list:["address-book","address-book-o","address-card","address-card-o","adjust","american-sign-language-interpreting","anchor","archive","area-chart","arrows","arrows-h","arrows-v","asl-interpreting ","assistive-listening-systems","asterisk","at","audio-description","automobile ","balance-scale","ban","bank ","bar-chart","bar-chart-o ","barcode","bars","bath","bathtub ","battery ","battery-0 ","battery-1 ","battery-2 ","battery-3 ","battery-4 ","battery-empty","battery-full","battery-half","battery-quarter","battery-three-quarters","bed","beer","bell","bell-o","bell-slash","bell-slash-o","bicycle","binoculars","birthday-cake","blind","bluetooth","bluetooth-b","bolt","bomb","book","bookmark","bookmark-o","braille","briefcase","bug","building","building-o","bullhorn","bullseye","bus","cab ","calculator","calendar","calendar-check-o","calendar-minus-o","calendar-o","calendar-plus-o","calendar-times-o","camera","camera-retro","car","caret-square-o-down","caret-square-o-left","caret-square-o-right","caret-square-o-up","cart-arrow-down","cart-plus","cc","certificate","check","check-circle","check-circle-o","check-square","check-square-o","child","circle","circle-o","circle-o-notch","circle-thin","clock-o","clone","close ","cloud","cloud-download","cloud-upload","code","code-fork","coffee","cog","cogs","comment","comment-o","commenting","commenting-o","comments","comments-o","compass","copyright","creative-commons","credit-card","credit-card-alt","crop","crosshairs","cube","cubes","cutlery","dashboard ","database","deaf","deafness ","desktop","diamond","dot-circle-o","download","drivers-license ","drivers-license-o ","edit ","ellipsis-h","ellipsis-v","envelope","envelope-o","envelope-open","envelope-open-o","envelope-square","eraser","exchange","exclamation","exclamation-circle","exclamation-triangle","external-link","external-link-square","eye","eye-slash","eyedropper","fax","feed ","female","fighter-jet","file-archive-o","file-audio-o","file-code-o","file-excel-o","file-image-o","file-movie-o ","file-pdf-o","file-photo-o ","file-picture-o ","file-powerpoint-o","file-sound-o ","file-video-o","file-word-o","file-zip-o ","film","filter","fire","fire-extinguisher","flag","flag-checkered","flag-o","flash ","flask","folder","folder-o","folder-open","folder-open-o","frown-o","futbol-o","gamepad","gavel","gear ","gears ","gift","glass","globe","graduation-cap","group ","hand-grab-o ","hand-lizard-o","hand-paper-o","hand-peace-o","hand-pointer-o","hand-rock-o","hand-scissors-o","hand-spock-o","hand-stop-o ","handshake-o","hard-of-hearing ","hashtag","hdd-o","headphones","heart","heart-o","heartbeat","history","home","hotel ","hourglass","hourglass-1 ","hourglass-2 ","hourglass-3 ","hourglass-end","hourglass-half","hourglass-o","hourglass-start","i-cursor","id-badge","id-card","id-card-o","image ","inbox","industry","info","info-circle","institution ","key","keyboard-o","language","laptop","leaf","legal ","lemon-o","level-down","level-up","life-bouy ","life-buoy ","life-ring","life-saver ","lightbulb-o","line-chart","location-arrow","lock","low-vision","magic","magnet","mail-forward ","mail-reply ","mail-reply-all ","male","map","map-marker","map-o","map-pin","map-signs","meh-o","microchip","microphone","microphone-slash","minus","minus-circle","minus-square","minus-square-o","mobile","mobile-phone ","money","moon-o","mortar-board ","motorcycle","mouse-pointer","music","navicon ","newspaper-o","object-group","object-ungroup","paint-brush","paper-plane","paper-plane-o","paw","pencil","pencil-square","pencil-square-o","percent","phone","phone-square","photo ","picture-o","pie-chart","plane","plug","plus","plus-circle","plus-square","plus-square-o","podcast","power-off","print","puzzle-piece","qrcode","question","question-circle","question-circle-o","quote-left","quote-right","random","recycle","refresh","registered","remove ","reorder ","reply","reply-all","retweet","road","rocket","rss","rss-square","s15 ","search","search-minus","search-plus","send ","send-o ","server","share","share-alt","share-alt-square","share-square","share-square-o","shield","ship","shopping-bag","shopping-basket","shopping-cart","shower","sign-in","sign-language","sign-out","signal","signing ","sitemap","sliders","smile-o","snowflake-o","soccer-ball-o ","sort","sort-alpha-asc","sort-alpha-desc","sort-amount-asc","sort-amount-desc","sort-asc","sort-desc","sort-down ","sort-numeric-asc","sort-numeric-desc","sort-up ","space-shuttle","spinner","spoon","square","square-o","star","star-half","star-half-empty ","star-half-full ","star-half-o","star-o","sticky-note","sticky-note-o","street-view","suitcase","sun-o","support ","tablet","tachometer","tag","tags","tasks","taxi","television","terminal","thermometer ","thermometer-0 ","thermometer-1 ","thermometer-2 ","thermometer-3 ","thermometer-4 ","thermometer-empty","thermometer-full","thermometer-half","thermometer-quarter","thermometer-three-quarters","thumb-tack","thumbs-down","thumbs-o-down","thumbs-o-up","thumbs-up","ticket","times","times-circle","times-circle-o","times-rectangle ","times-rectangle-o ","tint","toggle-down ","toggle-left ","toggle-off","toggle-on","toggle-right ","toggle-up ","trademark","trash","trash-o","tree","trophy","truck","tty","tv ","umbrella","universal-access","university","unlock","unlock-alt","unsorted ","upload","user","user-circle","user-circle-o","user-o","user-plus","user-secret","user-times","users","vcard ","vcard-o ","video-camera","volume-control-phone","volume-down","volume-off","volume-up","warning ","wheelchair","wheelchair-alt","wifi","window-close","window-close-o","window-maximize","window-minimize","window-restore","wrench"]},{title:"Accessibility Icons",icon:"american-sign-language-interpreting",list:["american-sign-language-interpreting","asl-interpreting ","assistive-listening-systems","audio-description","blind","braille","cc","deaf","deafness ","hard-of-hearing ","low-vision","question-circle-o","sign-language","signing ","tty","universal-access","volume-control-phone","wheelchair","wheelchair-alt"]},{title:"Hand Icons",icon:"hand-grab-o",list:["hand-grab-o ","hand-lizard-o","hand-o-down","hand-o-left","hand-o-right","hand-o-up","hand-paper-o","hand-peace-o","hand-pointer-o","hand-rock-o","hand-scissors-o","hand-spock-o","hand-stop-o ","thumbs-down","thumbs-o-down","thumbs-o-up","thumbs-up"]},{title:"Transportation Icons",icon:"ambulance",list:["ambulance","automobile ","bicycle","bus","cab ","car","fighter-jet","motorcycle","plane","rocket","ship","space-shuttle","subway","taxi","train","truck","wheelchair","wheelchair-alt"]},{title:"Gender Icons",icon:"genderless",list:["genderless","intersex ","mars","mars-double","mars-stroke","mars-stroke-h","mars-stroke-v","mercury","neuter","transgender","transgender-alt","venus","venus-double","venus-mars"]},{title:"Form Control Icons",icon:"check-square",list:["check-square","check-square-o","circle","circle-o","dot-circle-o","minus-square","minus-square-o","plus-square","plus-square-o","square","square-o"]},{title:"Payment Icons",icon:"cc-amex",list:["cc-amex","cc-diners-club","cc-discover","cc-jcb","cc-mastercard","cc-paypal","cc-stripe","cc-visa","credit-card","credit-card-alt","google-wallet","paypal"]},{title:"Chart Icons",icon:"area-chart",list:["area-chart","bar-chart","bar-chart-o ","line-chart","pie-chart"]},{title:"Currency Icons",icon:"bitcoin",list:["bitcoin ","btc","cny ","dollar ","eur","euro ","gbp","gg","gg-circle","ils","inr","jpy","krw","money","rmb ","rouble ","rub","ruble ","rupee ","shekel ","sheqel ","try","turkish-lira ","usd","viacoin","won ","yen"]},{title:"Text Editor Icons",icon:"align-center",list:["align-center","align-justify","align-left","align-right","bold","chain ","chain-broken","clipboard","columns","copy ","cut ","dedent ","eraser","file","file-o","file-text","file-text-o","files-o","floppy-o","font","header","indent","italic","link","list","list-alt","list-ol","list-ul","outdent","paperclip","paragraph","paste ","repeat","rotate-left ","rotate-right ","save ","scissors","strikethrough","subscript","superscript","table","text-height","text-width","th","th-large","th-list","underline","undo","unlink"]},{title:"Brand Icons",icon:"500px",list:["500px","adn","amazon","android","angellist","apple","bandcamp","behance","behance-square","bitbucket","bitbucket-square","bitcoin ","black-tie","bluetooth","bluetooth-b","btc","buysellads","cc-amex","cc-diners-club","cc-discover","cc-jcb","cc-mastercard","cc-paypal","cc-stripe","cc-visa","chrome","codepen","codiepie","connectdevelop","contao","css3","dashcube","delicious","deviantart","digg","dribbble","dropbox","drupal","edge","eercast","empire","envira","etsy","expeditedssl","fa ","facebook","facebook-f ","facebook-official","facebook-square","firefox","first-order","flickr","font-awesome","fonticons","fort-awesome","forumbee","foursquare","free-code-camp","ge ","get-pocket","gg","gg-circle","git","git-square","github","github-alt","github-square","gitlab","gittip ","glide","glide-g","google","google-plus","google-plus-circle ","google-plus-official","google-plus-square","google-wallet","gratipay","grav","hacker-news","houzz","html5","imdb","instagram","internet-explorer","ioxhost","joomla","jsfiddle","lastfm","lastfm-square","leanpub","linkedin","linkedin-square","linode","linux","maxcdn","meanpath","medium","meetup","mixcloud","modx","odnoklassniki","odnoklassniki-square","o
vendor: 11,697 bytes, line 815
815pencart","openid","opera","optin-monster","pagelines","paypal","pied-piper","pied-piper-alt","pied-piper-pp","pinterest","pinterest-p","pinterest-square","product-hunt","qq","quora","ra ","ravelry","rebel","reddit","reddit-alien","reddit-square","renren","resistance ","safari","scribd","sellsy","share-alt","share-alt-square","shirtsinbulk","simplybuilt","skyatlas","skype","slack","slideshare","snapchat","snapchat-ghost","snapchat-square","soundcloud","spotify","stack-exchange","stack-overflow","steam","steam-square","stumbleupon","stumbleupon-circle","superpowers","telegram","tencent-weibo","themeisle","trello","tripadvisor","tumblr","tumblr-square","twitch","twitter","twitter-square","usb","viacoin","viadeo","viadeo-square","vimeo","vimeo-square","vine","vk","wechat ","weibo","weixin","whatsapp","wikipedia-w","windows","wordpress","wpbeginner","wpexplorer","wpforms","xing","xing-square","y-combinator","y-combinator-square ","yahoo","yc ","yc-square ","yelp","yoast","youtube","youtube-play","youtube-square"]}],fontAwesome5Sets:[{title:"Web Application Icons",icon:"address-book",list:["address-book","far address-book","fas address-card","far address-card","adjust","fas american-sign-language-interpreting","anchor","archive","fas chart-area","fas arrows-alt","fas arrows-alt-h","fas arrows-alt-v","assistive-listening-systems","asterisk","at","audio-description","fas car","balance-scale","ban","fas university","far chart-bar","barcode","bars","fas bath","fas battery-full","fas battery-empty","fas battery-quarter","fas battery-half","fas battery-three-quarters","bed","beer","bell","far bell","bell-slash","far bell-slash","bicycle","binoculars","birthday-cake","blind","fab bluetooth","fab bluetooth-b","bolt","bomb","book","bookmark","far bookmark","braille","briefcase","bug","building","far building","bullhorn","bullseye","bus","fas taxi","calculator","calendar","far calendar-check","far calendar-minus","far calendar","far calendar-plus","far calendar-times","camera","camera-retro","car","far caret-square-down","far caret-square-left","far caret-square-right","far caret-square-up","cart-arrow-down","cart-plus","far closed-captioning","certificate","check","check-circle","far check-circle","check-square","far check-square","child","circle","far circle","fas circle-notch","far clock","clone","fas times","cloud","fas cloud-download-alt","fas cloud-upload-alt","code","fas code-branch","coffee","fas cog","fas cogs","comment","far comment","comments","far comments","compass","copyright","fab creative-commons","far credit-card","fas credit-card","crop","crosshairs","cube","cubes","fas utensils","fas tachometer-alt","database","fas deaf","desktop","far gem","far dot-circle","download","fas id-card","far id-card","edit ","ellipsis-h","ellipsis-v","envelope","far envelope","envelope-open","far envelope-open","envelope-square","eraser","fas exchange-alt","exclamation","exclamation-circle","fas exclamation-triangle","fas external-link-alt","fas external-link-square-alt","eye","eye-slash","fas eye-dropper","fax","fas rss","female","fighter-jet","far file-archive","far file-audio","far file-code","far file-excel","far file-image","far file-video","far file-pdf","far file-powerpoint","far file-word","film","filter","fire","fire-extinguisher","flag","flag-checkered","far flag","fas bolt","flask","folder","far folder","folder-open","far folder-open","far frown","far futbol","gamepad","fas gavel","gift","fas glass-martini","globe","fas graduation-cap","fas users","far hand-rock","far hand-lizard","far hand-paper","far hand-peace","far hand-pointer","far hand-scissors","far hand-spock","far handshake","hashtag","far hdd","headphones","heart","far heart","heartbeat","history","home","fas bed","hourglass","fas hourglass-start","fas hourglass-half","fas hourglass-end","far hourglass","i-cursor","id-badge","image ","inbox","industry","info","info-circle","key","far keyboard","language","laptop","leaf","far lemon","fas level-down-alt","fas level-up-alt","far life-ring","far lightbulb","fas chart-line","location-arrow","lock","low-vision","magic","magnet","fas share","fas reply ","fas reply-all ","male","map","map-marker","far map","map-pin","map-signs","far meh","microchip","microphone","microphone-slash","minus","minus-circle","minus-square","far minus-square","mobile","far money-bill-alt","far moon","motorcycle","mouse-pointer","music","fas bars","far newspaper","object-group","object-ungroup","paint-brush","fas paper-plane","far paper-plane","paw","fas pencil-alt","fas pen-square","far edit","percent","phone","phone-square","far image","fas chart-pie","plane","plug","plus","plus-circle","plus-square","far plus-square","podcast","power-off","print","puzzle-piece","qrcode","question","question-circle","far question-circle","quote-left","quote-right","random","recycle","fas sync","registered","reply","reply-all","retweet","road","rocket","rss","rss-square","search","search-minus","search-plus","server","share-alt","share-alt-square","share-square","far share-square","fas shield-alt","ship","shopping-bag","shopping-basket","shopping-cart","shower","fas sign-in-alt","fas sign-language","fas sign-out-alt","signal","sitemap","fas sliders-h","far smile","far snowflake","sort","fas sort-alpha-down","fas sort-alpha-up","fas sort-amount-down","fas sort-amount-up","fas sort-up","fas sort-down","fas sort-numeric-down","fas sort-numeric-up","space-shuttle","spinner","fas utensil-spoon","square","far square","star","far star-half","far star","sticky-note","far sticky-note","street-view","suitcase","far sun","tablet","tag","tags","tasks","taxi","fas tv","terminal","fas thermometer-empty","fas thermometer-full","fas thermometer-half","fas thermometer-quarter","fas thermometer-three-quarters","fas thumbtack","thumbs-down","far thumbs-down","far thumbs-up","thumbs-up","fas ticket-alt","times","times-circle","far times-circle","fas window-close","far window-close ","tint","toggle-off","toggle-on","trademark","trash","far trash-alt","tree","trophy","truck","tty","tv ","umbrella","universal-access","university","unlock","unlock-alt","fas sort","upload","user","user-circle","far user-circle","far user","user-plus","user-secret","user-times","fas video","fas phone-volume","volume-down","volume-off","volume-up","wheelchair","fab accessible-icon","wifi","window-maximize","window-minimize","window-restore","wrench"]},{title:"Accessibility Icons",icon:"american-sign-language-interpreting",list:["fas american-sign-language-interpreting","assistive-listening-systems","audio-description","blind","braille","far closed-captioning","fas deaf","low-vision","far question-circle","fas sign-language","tty","universal-access","fas phone-volume","wheelchair","fab accessible-icon"]},{title:"Hand Icons",icon:"hand-grab-o",list:["far hand-rock","far hand-lizard","far hand-point-down","far hand-point-left","far hand-point-right","far hand-point-up","far hand-paper","far hand-peace","far hand-pointer","far hand-scissors","far hand-spock","thumbs-down","far thumbs-down","far thumbs-up","thumbs-up"]},{title:"Transportation Icons",icon:"ambulance",list:["ambulance","fas car","bicycle","bus","fas taxi","car","fighter-jet","motorcycle","plane","rocket","ship","space-shuttle","subway","taxi","train","truck","wheelchair","fab accessible-icon"]},{title:"Gender Icons",icon:"genderless",list:["genderless","mars","mars-double","mars-stroke","mars-stroke-h","mars-stroke-v","mercury","neuter","fas transgender","transgender-alt","venus","venus-double","venus-mars"]},{title:"Form Control Icons",icon:"check-square",list:["check-square","far check-square","circle","far circle","far dot-circle","minus-square","far minus-square","plus-square","far plus-square","square","far square"]},{title:"Payment Icons",icon:"cc-amex",list:["fab cc-amex","fab cc-diners-club","fab cc-discover","fab cc-jcb","fab cc-mastercard","fab cc-paypal","fab cc-stripe","fab cc-visa","far credit-card","fas credit-card","fab google-wallet","fab paypal"]},{title:"Chart Icons",icon:"area-chart",list:["fas chart-area","far chart-bar","fas chart-line","fas chart-pie"]},{title:"Currency Icons",icon:"bitcoin",list:["fab btc","fas yen-sign","fas dollar-sign","fas euro-sign","fas pound-sign","fab gg","fab gg-circle","fas shekel-sign","fas rupee-sign","fas won-sign","far money-bill-alt","fas ruble-sign ","fas lira-sign","fab viacoin"]},{title:"Text Editor Icons",icon:"align-center",list:["align-center","align-justify","align-left","align-right","bold","fas link","fas unlink","clipboard","columns","copy ","cut ","fas outdent","eraser","file","far file","fas file-alt","far file-alt","far copy","far save","font","fas heading","indent","italic","list","list-alt","list-ol","list-ul","paperclip","paragraph","paste ","fas undo","fas redo ","save","strikethrough","subscript","superscript","table","text-height","text-width","th","th-large","th-list","underline"]},{title:"Brand Icons",icon:"500px",list:["fab 500px","fab adn","fab amazon","fab android","fab angellist","fab apple","fab bandcamp","fab behance","fab behance-square","fab bitbucket","fab btc","fab black-tie","fab bluetooth","fab bluetooth-b","fab buysellads","fab cc-amex","fab cc-diners-club","fab cc-discover","fab cc-jcb","fab cc-mastercard","fab cc-paypal","fab cc-stripe","fab cc-visa","fab chrome","fab codepen","fab codiepie","fab connectdevelop","fab contao","fab css3","fab dashcube","fab delicious","fab deviantart","fab digg","fab dribbble","fab dropbox","fab drupal","fab edge","fab sellcast","fab empire","fab envira","fab etsy","fab expeditedssl","fab font-awesome","fab facebook-f","fab facebook","fab facebook-square","fab firefox","fab first-order","fab flickr","fab fonticons","fab fort-awesome","fab forumbee","fab foursquare","fab free-code-camp","fab get-pocket","fab gg","fab gg-circle","fab git","fab git-square","fab github","fab github-alt","fab github-square","fab gitlab","fab gratipay","fab glide","fab glide-g","fab google","fab google-plus-g","fab google-plus","fab google-plus-square","fab google-wallet","fab grav","fab hacker-news","fab houzz","fab html5","fab imdb","fab instagram","fab internet-explorer","fab ioxhost","fab joomla","fab jsfiddle","fab lastfm","fab lastfm-square","fab leanpub","fab linkedin-in","fab linkedin","fab linode","fab linux","fab maxcdn","fab medium","fab meetup","fab mixcloud","fab modx","fab odnoklassniki","fab odnoklassniki-square","fab opencart","fab openid","fab opera","fab optin-monster","fab pagelines","fab paypal","fab pied-piper","fab pied-piper-alt","fab pied-piper-pp","fab pinterest","fab pinterest-p","fab pinterest-square","fab product-hunt","fab qq","fab quora","fab rebel","fab ravelry","fab reddit","fab reddit-alien","fab reddit-square","fab renren","fab safari","fab scribd","fab sellsy","share-alt","share-alt-square","fab shirtsinbulk","fab simplybuilt","fab skyatlas","fab skype","fab slack","fab slideshare","fab snapchat","fab snapchat-ghost","fab snapchat-square","fab soundcloud","fab spotify","fab stack-exchange","fab stack-overflow","fab steam","fab steam-square","fab stumbleupon","fab stumbleupon-circle","fab superpowers","fab telegram","fab tencent-weibo","fab themeisle","fab trello","fab tripadvisor","fab tumblr","fab tumblr-square","fab twitch","fab twitter","fab twitter-square","fab usb","fab viacoin","fab viadeo","fab viadeo-square","fab vimeo","fab vimeo-square","fab vine","fab vk","fab weixin","fab weibo","fab whatsapp","fab wikipedia-w","fab windows","fab wordpress","fab wpbeginner","fab wpexplorer","fab wpforms","fab xing","fab xing-square","fab y-combinator","fab yahoo","fab yelp","fab yoast","fab youtube","fab youtube-square"]}],faButtons:["fontAwesomeBack","|"]}),Object.assign(
815g.POPUP_TEMPLATES,{fontAwesome:"[_BUTTONS_][_CUSTOM_LAYER_]"}),g.PLUGINS.fontAwesome=function(h){var m=h.$;"font_awesome_5"===h.opts.iconsTemplate&&(h.opts.fontAwesomeSets=h.opts.fontAwesome5Sets,h.opts.fontAwesomeTemplate=h.opts.fontAwesomeTemplate5);var t=h.opts.fontAwesomeSets[0],o=h.opts.fontAwesomeSets,r="";function i(){h.opts.toolbarInline&&0<h.opts.faButtons.length&&(r='<div class="fr-buttons fr-tabs">'.concat(h.button.buildList(h.opts.faButtons),"</div>"));var e={buttons:r,custom_layer:s()},a=h.popups.create("fontAwesome",e);return function t(d){h.events.on("popup.tab",function(e){var a=m(e.currentTarget);if(!h.popups.isVisible("fontAwesome")||!a.is("span, a"))return!0;var t,r,s,o=e.which;if(g.KEYCODE.TAB==o){if(a.is("span.fr-icon")&&e.shiftKey||a.is("a")&&!e.shiftKey){var i=d.find(".fr-buttons");t=!h.accessibility.focusToolbar(i,!!e.shiftKey)}if(!1!==t){var n=d.find("span.fr-icon:focus").first().concat(d.findVisible(" span.fr-icon").first().concat(d.find("a")));a.is("span.fr-icon")&&(n=n.not("span.fr-icon:not(:focus)")),r=n.index(a),r=e.shiftKey?((r-1)%n.length+n.length)%n.length:(r+1)%n.length,s=n.get(r),h.events.disableBlur(),s.focus(),t=!1}}else if(g.KEYCODE.ARROW_UP==o||g.KEYCODE.ARROW_DOWN==o||g.KEYCODE.ARROW_LEFT==o||g.KEYCODE.ARROW_RIGHT==o){if(a.is("span.fr-icon")){var l=a.parent().find("span.fr-icon");r=l.index(a);var c=Math.floor(l.length/8),f=r%8,u=Math.floor(r/8),p=8*u+f,b=8*c;g.KEYCODE.ARROW_UP==o?p=((p-8)%b+b)%b:g.KEYCODE.ARROW_DOWN==o?p=(p+8)%b:g.KEYCODE.ARROW_LEFT==o?p=((p-1)%b+b)%b:g.KEYCODE.ARROW_RIGHT==o&&(p=(p+1)%b),s=m(l.get(p)),h.events.disableBlur(),s.focus(),t=!1}}else g.KEYCODE.ENTER==o&&(a.is("a")?a[0].click():h.button.exec(a),t=!1);return!1===t&&(e.preventDefault(),e.stopPropagation()),t},!0)}(a),a}function s(){return"".concat(function r(e,a,t){return'\n <div class="fr-buttons fr-tabs fr-tabs-scroll">\n '.concat(function n(e,t,r){var s="";if("font_awesome_5"===h.opts.iconsTemplate){var o="",i=r;e.forEach(function(e){o="cc-amex"===e.icon||"bitcoin"==e.icon||"500px"==e.icon?i.replace("fa ","fab "):r;var a={elementClass:e.title===t.title?"fr-active fr-active-tab":"",title:e.title,dataCmd:"setIconCategory",dataParam1:e.title,iconValue:o.replace(/\[NAME\]/g,e.icon)};s+='<button class="fr-fa-icon-category fr-command fr-btn '.concat(a.elementClass,'" title="').concat(a.title,'" data-cmd="').concat(a.dataCmd,'" data-param1="').concat(a.dataParam1,'"</button><span>').concat(a.iconValue,"</span>")})}else e.forEach(function(e){var a={elementClass:e.title===t.title?"fr-active fr-active-tab":"",title:e.title,dataCmd:"setIconCategory",dataParam1:e.title,iconValue:r.replace(/\[NAME\]/g,e.icon)};s+='<button class="fr-fa-icon-category fr-command fr-btn '.concat(a.elementClass,'" title="').concat(a.title,'" data-cmd="').concat(a.dataCmd,'" data-param1="').concat(a.dataParam1,'"</button><span>').concat(a.iconValue,"</span>")});return s}(e,a,t),"\n </div>\n ")}(o,t,h.opts.fontAwesomeTemplate),"\n ").concat(function s(e,a){return'\n <div class="fr-icon-container fr-fa-container">\n '.concat(function t(e,n){var l="";return e.list.forEach(function(e){if("font_awesome_5"===h.opts.iconsTemplate){var a={name:e,fprefix:"fa"},t=e.trim().split(" ");1<t.length&&(a={name:t[1],fprefix:t[0]});var r=h.opts.fontAwesomeTemplate.replace(/\[NAME\]|\[FPREFIX\]/g,function(e){return a[e.substring(1,e.length-1).toLowerCase()]});0<r.search("fab")&&(r=r.replace("fa",""));var s=e,o=e;
815n.replace(/\[NAME\]/g,e),l+='<span class="fr-command fr-fa-icon fr-icon" data-cmd="insertIcon" data-param1="'+s+'" title="'+o+'" tabIndex="-1" role="button" value="'+a.name+'" data-fprefix="'+a.fprefix+'">'+r+'<span class="fr-sr-only">'+h.language.translate("Example of")+a.name+" </span></span>"}else{var i={dataParam1:e,title:e,iconValue:n.replace(/\[NAME\]/g,e)};l+='<span class="fr-command fr-fa-icon fr-icon" role="button" data-cmd="insertIcon" data-param1="'.concat(i.dataParam1,'" title="').concat(i.title,'">').concat(i.iconValue,"</span>")}}),l}(e,a),"\n </div>\n ")}(t,h.opts.fontAwesomeTemplate))}return{setIconCategory:function n(a){t=o.filter(function(e){return e.title===a})[0],function e(){h.popups.get("fontAwesome").html(r+s())}()},showFontAwesomePopup:function l(){var e=h.popups.get("fontAwesome");if(e||(e=i()),!e.hasClass("fr-active")){h.popups.refresh("fontAwesome"),h.popups.setContainer("fontAwesome",h.$tb);var a=h.$tb.find('.fr-command[data-cmd="fontAwesome"]'),t=h.button.getPosition(a),r=t.left,s=t.top;h.popups.show("fontAwesome",r,s,a.outerHeight())}},back:function e(){h.popups.hide("fontAwesome"),h.toolbar.showInline()}}},g.DefineIcon("fontAwesome",{NAME:"flag",SVG_KEY:"fontAwesome"}),g.RegisterCommand("fontAwesome",{title:"Font Awesome",icon:"fontAwesome",undo:!1,focus:!1,refreshAfterCallback:!1,popup:!0,callback:function(){this.popups.isVisible("fontAwesome")?(this.$el.find(".fr-marker")&&(this.events.disableBlur(),this.selection.restore()),this.popups.hide("fontAwesome")):this.fontAwesome.showFontAwesomePopup()},plugin:"fontAwesome",showOnMobile:!0}),g.RegisterCommand("insertIcon",{callback:function(e,a){if(this.opts&&"font_awesome_5"===this.opts.iconsTemplate){var t={name:a,fprefix:"fa"},r=this.opts.fontAwesomeTemplate.replace(/\[NAME\]|\[FPREFIX\]/g,function(e){return t[e.substring(1,e.length-1).toLowerCase()]});this.undo.saveStep(),this.html.insert(r,!0),this.undo.saveStep()}else this.undo.saveStep(),this.html.insert("".concat(this.opts.fontAwesomeTemplate.replace(/\[NAME\]/g,a)," ")),this.undo.saveStep();this.popups.hide("fontAwesome")}}),g.RegisterCommand("setIconCategory",{undo:!1,focus:!1,callback:function(e,a){this.fontAwesome.setIconCategory(a)}}),g.DefineIcon("fontAwesomeBack",{NAME:"arrow-left",SVG_KEY:"back"}),g.RegisterCommand("fontAwesomeBack",{title:"Back",undo:!1,focus:!1,back:!0,refreshAfterCallback:!1,callback:function(){this.fontAwesome.back()}})}); 816},{"froala-editor":8}],26:[function(require,module,exports){ 817(function (global){(function (){ 818 819; require("jquery"); 820; var __browserify_shim_require__=require;(function browserifyShim(module, define, require) { 821/*! 822 * jQuery Validation Plugin v1.19.5 823 * 824 * https://jqueryvalidation.org/ 825 * 826 * Copyright (c) 2022 Jörn Zaefferer 827 * Released under the MIT license 828 */ 829(function( factory ) { 830 if ( typeof define === "function" && define.amd ) { 831 define( ["jquery"], factory ); 832 } else if (typeof module === "object" && module.exports) { 833 module.exports = factory( (typeof window !== "undefined" ? window['$'] : typeof global !== "undefined" ? global['$'] : null) ); 834 } else { 835 factory( jQuery ); 836 } 837}(function( $ ) { 838 839$.extend( $.fn, { 840 841 // https://jqueryvalidation.org/validate/ 842 validate: function( options ) { 843 844 // If nothing is selected, return nothing; can't chain anyway 845 if ( !this.length ) { 846 if ( options && options.debug && window.console ) { 847 console.warn( "Nothing selected, can't validate, returning nothing." ); 848 } 849 return; 850 } 851 852 // Check if a validator for this form was already created 853 var validator = $.data( this[ 0 ], "validator" ); 854 if ( validator ) { 855 return validator; 856 } 857 858 // Add novalidate tag if HTML5. 859 this.attr( "novalidate", "novalidate" ); 860 861 validator = new $.validator( options, this[ 0 ] ); 862 $.data( this[ 0 ], "validator", validator ); 863 864 if ( validator.settings.onsubmit ) { 865 866 this.on( "click.validate", ":submit", function( event ) { 867 868 // Track the used submit button to properly handle scripted 869 // submits later. 870 validator.submitButton = event.currentTarget; 871 872 // Allow suppressing validation by adding a cancel class to the submit button 873 if ( $( this ).hasClass( "cancel" ) ) { 874 validator.cancelSubmit = true; 875 } 876 877 // Allow suppressing validation by adding the html5 formnovalidate attribute to the submit button 878 if ( $( this ).attr( "formnovalidate" ) !== undefined ) { 879 validator.cancelSubmit = true; 880 } 881 } ); 882 883 // Validate the form on submit 884 this.on( "submit.validate", function( event ) { 885 if ( validator.settings.debug ) { 886 887 // Prevent form submit to be able to see console output 888 event.preventDefault(); 889 } 890 891 function handle() { 892 var hidden, result; 893 894 // Insert a hidden input as a replacement for the missing submit button 895 // The hidden input is inserted in two cases: 896 // - A user defined a `submitHandler` 897 // - There was a pending request due to `remote` method and `stopRequest()` 898 // was called to submit the form in case it's valid 899 if ( validator.submitButton && ( validator.settings.submitHandler || validator.formSubmitted ) ) { 900 hidden = $( "<input type='hidden'/>" ) 901 .attr( "name", validator.submitButton.name ) 902 .val( $( validator.submitButton ).val() ) 903 .appendTo( validator.currentForm ); 904 } 905 906 if ( validator.settings.submitHandler && !validator.settings.debug ) { 907 result = validator.settings.submitHandler.call( validator, validator.currentForm, event ); 908 if ( hidden ) { 909 910 // And clean up afterwards; thanks to no-block-scope, hidden can be referenced 911 hidden.remove(); 912 } 913 if ( result !== undefined ) { 914 return result; 915 } 916 return false;
vendor: 24,311 bytes, lines 917-1739
917 } 918 return true; 919 } 920 921 // Prevent submit for invalid forms or custom submit handlers 922 if ( validator.cancelSubmit ) { 923 validator.cancelSubmit = false; 924 return handle(); 925 } 926 if ( validator.form() ) { 927 if ( validator.pendingRequest ) { 928 validator.formSubmitted = true; 929 return false; 930 } 931 return handle(); 932 } else { 933 validator.focusInvalid(); 934 return false; 935 } 936 } ); 937 } 938 939 return validator; 940 }, 941 942 // https://jqueryvalidation.org/valid/ 943 valid: function() { 944 var valid, validator, errorList; 945 946 if ( $( this[ 0 ] ).is( "form" ) ) { 947 valid = this.validate().form(); 948 } else { 949 errorList = []; 950 valid = true; 951 validator = $( this[ 0 ].form ).validate(); 952 this.each( function() { 953 valid = validator.element( this ) && valid; 954 if ( !valid ) { 955 errorList = errorList.concat( validator.errorList ); 956 } 957 } ); 958 validator.errorList = errorList; 959 } 960 return valid; 961 }, 962 963 // https://jqueryvalidation.org/rules/ 964 rules: function( command, argument ) { 965 var element = this[ 0 ], 966 isContentEditable = typeof this.attr( "contenteditable" ) !== "undefined" && this.attr( "contenteditable" ) !== "false", 967 settings, staticRules, existingRules, data, param, filtered; 968 969 // If nothing is selected, return empty object; can't chain anyway 970 if ( element == null ) { 971 return; 972 } 973 974 if ( !element.form && isContentEditable ) { 975 element.form = this.closest( "form" )[ 0 ]; 976 element.name = this.attr( "name" ); 977 } 978 979 if ( element.form == null ) { 980 return; 981 } 982 983 if ( command ) { 984 settings = $.data( element.form, "validator" ).settings; 985 staticRules = settings.rules; 986 existingRules = $.validator.staticRules( element ); 987 switch ( command ) { 988 case "add": 989 $.extend( existingRules, $.validator.normalizeRule( argument ) ); 990 991 // Remove messages from rules, but allow them to be set separately 992 delete existingRules.messages; 993 staticRules[ element.name ] = existingRules; 994 if ( argument.messages ) { 995 settings.messages[ element.name ] = $.extend( settings.messages[ element.name ], argument.messages ); 996 } 997 break; 998 case "remove": 999 if ( !argument ) { 1000 delete staticRules[ element.name ]; 1001 return existingRules; 1002 } 1003 filtered = {}; 1004 $.each( argument.split( /\s/ ), function( index, method ) { 1005 filtered[ method ] = existingRules[ method ]; 1006 delete existingRules[ method ]; 1007 } ); 1008 return filtered; 1009 } 1010 } 1011 1012 data = $.validator.normalizeRules( 1013 $.extend( 1014 {}, 1015 $.validator.classRules( element ), 1016 $.validator.attributeRules( element ), 1017 $.validator.dataRules( element ), 1018 $.validator.staticRules( element ) 1019 ), element ); 1020 1021 // Make sure required is at front 1022 if ( data.required ) { 1023 param = data.required; 1024 delete data.required; 1025 data = $.extend( { required: param }, data ); 1026 } 1027 1028 // Make sure remote is at back 1029 if ( data.remote ) { 1030 param = data.remote; 1031 delete data.remote; 1032 data = $.extend( data, { remote: param } ); 1033 } 1034 1035 return data; 1036 } 1037} ); 1038 1039// JQuery trim is deprecated, provide a trim method based on String.prototype.trim 1040var trim = function( str ) { 1041 1042 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/trim#Polyfill 1043 return str.replace( /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "" ); 1044}; 1045 1046// Custom selectors 1047$.extend( $.expr.pseudos || $.expr[ ":" ], { // '|| $.expr[ ":" ]' here enables backwards compatibility to jQuery 1.7. Can be removed when dropping jQ 1.7.x support 1048 1049 // https://jqueryvalidation.org/blank-selector/ 1050 blank: function( a ) { 1051 return !trim( "" + $( a ).val() ); 1052 }, 1053 1054 // https://jqueryvalidation.org/filled-selector/ 1055 filled: function( a ) { 1056 var val = $( a ).val(); 1057 return val !== null && !!trim( "" + val ); 1058 }, 1059 1060 // https://jqueryvalidation.org/unchecked-selector/ 1061 unchecked: function( a ) { 1062 return !$( a ).prop( "checked" ); 1063 } 1064} ); 1065 1066// Constructor for validator 1067$.validator = function( options, form ) { 1068 this.settings = $.extend( true, {}, $.validator.defaults, options ); 1069 this.currentForm = form; 1070 this.init(); 1071}; 1072 1073// https://jqueryvalidation.org/jQuery.validator.format/ 1074$.validator.format = function( source, params ) { 1075 if ( arguments.length === 1 ) { 1076 return function() { 1077 var args = $.makeArray( arguments ); 1078 args.unshift( source ); 1079 return $.validator.format.apply( this, args ); 1080 }; 1081 } 1082 if ( params === undefined ) { 1083 return source; 1084 } 1085 if ( arguments.length > 2 && params.constructor !== Array ) { 1086 params = $.makeArray( arguments ).slice( 1 ); 1087 } 1088 if ( params.constructor !== Array ) { 1089 params = [ params ]; 1090 } 1091 $.each( params, function( i, n ) { 1092 source = source.replace( new RegExp( "\\{" + i + "\\}", "g" ), function() { 1093 return n; 1094 } ); 1095 } ); 1096 return source; 1097}; 1098 1099$.extend( $.validator, { 1100 1101 defaults: { 1102 messages: {}, 1103 groups: {}, 1104 rules: {}, 1105 errorClass: "error", 1106 pendingClass: "pending", 1107 validClass: "valid", 1108 errorElement: "label", 1109 focusCleanup: false, 1110 focusInvalid: true, 1111 errorContainer: $( [] ), 1112 errorLabelContainer: $( [] ), 1113 onsubmit: true, 1114 ignore: ":hidden", 1115 ignoreTitle: false, 1116 onfocusin: function( element ) { 1117 this.lastActive = element; 1118 1119 // Hide error label and remove error class on focus if enabled 1120 if ( this.settings.focusCleanup ) { 1121 if ( this.settings.unhighlight ) { 1122 this.settings.unhighlight.call( this, element, this.settings.errorClass, this.settings.validClass ); 1123 } 1124 this.hideThese( this.errorsFor( element ) ); 1125 } 1126 }, 1127 onfocusout: function( element ) { 1128 if ( !this.checkable( element ) && ( element.name in this.submitted || !this.optional( element ) ) ) { 1129 this.element( element ); 1130 } 1131 }, 1132 onkeyup: function( element, event ) { 1133 1134 // Avoid revalidate the field when pressing one of the following keys 1135 // Shift => 16 1136 // Ctrl => 17 1137 // Alt => 18 1138 // Caps lock => 20 1139 // End => 35 1140 // Home => 36 1141 // Left arrow => 37 1142 // Up arrow => 38 1143 // Right arrow => 39 1144 // Down arrow => 40 1145 // Insert => 45 1146 // Num lock => 144 1147 // AltGr key => 225 1148 var excludedKeys = [ 1149 16, 17, 18, 20, 35, 36, 37, 1150 38, 39, 40, 45, 144, 225 1151 ]; 1152 1153 if ( event.which === 9 && this.elementValue( element ) === "" || $.inArray( event.keyCode, excludedKeys ) !== -1 ) { 1154 return; 1155 } else if ( element.name in this.submitted || element.name in this.invalid ) { 1156 this.element( element ); 1157 } 1158 }, 1159 onclick: function( element ) { 1160 1161 // Click on selects, radiobuttons and checkboxes 1162 if ( element.name in this.submitted ) { 1163 this.element( element ); 1164 1165 // Or option elements, check parent select in that case 1166 } else if ( element.parentNode.name in this.submitted ) { 1167 this.element( element.parentNode ); 1168 } 1169 }, 1170 highlight: function( element, errorClass, validClass ) { 1171 if ( element.type === "radio" ) { 1172 this.findByName( element.name ).addClass( errorClass ).removeClass( validClass ); 1173 } else { 1174 $( element ).addClass( errorClass ).removeClass( validClass ); 1175 } 1176 }, 1177 unhighlight: function( element, errorClass, validClass ) { 1178 if ( element.type === "radio" ) { 1179 this.findByName( element.name ).removeClass( errorClass ).addClass( validClass ); 1180 } else { 1181 $( element ).removeClass( errorClass ).addClass( validClass ); 1182 } 1183 } 1184 }, 1185 1186 // https://jqueryvalidation.org/jQuery.validator.setDefaults/ 1187 setDefaults: function( settings ) { 1188 $.extend( $.validator.defaults, settings ); 1189 }, 1190 1191 messages: { 1192 required: "This field is required.", 1193 remote: "Please fix this field.", 1194 email: "Please enter a valid email address.", 1195 url: "Please enter a valid URL.", 1196 date: "Please enter a valid date.", 1197 dateISO: "Please enter a valid date (ISO).", 1198 number: "Please enter a valid number.", 1199 digits: "Please enter only digits.", 1200 equalTo: "Please enter the same value again.", 1201 maxlength: $.validator.format( "Please enter no more than {0} characters." ), 1202 minlength: $.validator.format( "Please enter at least {0} characters." ), 1203 rangelength: $.validator.format( "Please enter a value between {0} and {1} characters long." ), 1204 range: $.validator.format( "Please enter a value between {0} and {1}." ), 1205 max: $.validator.format( "Please enter a value less than or equal to {0}." ), 1206 min: $.validator.format( "Please enter a value greater than or equal to {0}." ), 1207 step: $.validator.format( "Please enter a multiple of {0}." ) 1208 }, 1209 1210 autoCreateRanges: false, 1211 1212 prototype: { 1213 1214 init: function() { 1215 this.labelContainer = $( this.settings.errorLabelContainer ); 1216 this.errorContext = this.labelContainer.length && this.labelContainer || $( this.currentForm ); 1217 this.containers = $( this.settings.errorContainer ).add( this.settings.errorLabelContainer ); 1218 this.submitted = {}; 1219 this.valueCache = {}; 1220 this.pendingRequest = 0; 1221 this.pending = {}; 1222 this.invalid = {}; 1223 this.reset(); 1224 1225 var currentForm = this.currentForm, 1226 groups = ( this.groups = {} ), 1227 rules; 1228 $.each( this.settings.groups, function( key, value ) { 1229 if ( typeof value === "string" ) { 1230 value = value.split( /\s/ ); 1231 } 1232 $.each( value, function( index, name ) { 1233 groups[ name ] = key; 1234 } ); 1235 } ); 1236 rules = this.settings.rules; 1237 $.each( rules, function( key, value ) { 1238 rules[ key ] = $.validator.normalizeRule( value ); 1239 } ); 1240 1241 function delegate( event ) { 1242 var isContentEditable = typeof $( this ).attr( "contenteditable" ) !== "undefined" && $( this ).attr( "contenteditable" ) !== "false"; 1243 1244 // Set form expando on contenteditable 1245 if ( !this.form && isContentEditable ) { 1246 this.form = $( this ).closest( "form" )[ 0 ]; 1247 this.name = $( this ).attr( "name" ); 1248 } 1249 1250 // Ignore the element if it belongs to another form. This will happen mainly 1251 // when setting the `form` attribute of an input to the id of another form. 1252 if ( currentForm !== this.form ) { 1253 return; 1254 } 1255 1256 var validator = $.data( this.form, "validator" ), 1257 eventType = "on" + event.type.replace( /^validate/, "" ), 1258 settings = validator.settings; 1259 if ( settings[ eventType ] && !$( this ).is( settings.ignore ) ) { 1260 settings[ eventType ].call( validator, this, event ); 1261 } 1262 } 1263 1264 $( this.currentForm ) 1265 .on( "focusin.validate focusout.validate keyup.validate", 1266 ":text, [type='password'], [type='file'], select, textarea, [type='number'], [type='search'], " + 1267 "[type='tel'], [type='url'], [type='email'], [type='datetime'], [type='date'], [type='month'], " + 1268 "[type='week'], [type='time'], [type='datetime-local'], [type='range'], [type='color'], " + 1269 "[type='radio'], [type='checkbox'], [contenteditable], [type='button']", delegate ) 1270 1271 // Support: Chrome, oldIE 1272 // "select" is provided as event.target when clicking a option 1273 .on( "click.validate", "select, option, [type='radio'], [type='checkbox']", delegate ); 1274 1275 if ( this.settings.invalidHandler ) { 1276 $( this.currentForm ).on( "invalid-form.validate", this.settings.invalidHandler ); 1277 } 1278 }, 1279 1280 // https://jqueryvalidation.org/Validator.form/ 1281 form: function() { 1282 this.checkForm(); 1283 $.extend( this.submitted, this.errorMap ); 1284 this.invalid = $.extend( {}, this.errorMap ); 1285 if ( !this.valid() ) { 1286 $( this.currentForm ).triggerHandler( "invalid-form", [ this ] ); 1287 } 1288 this.showErrors(); 1289 return this.valid(); 1290 }, 1291 1292 checkForm: function() { 1293 this.prepareForm(); 1294 for ( var i = 0, elements = ( this.currentElements = this.elements() ); elements[ i ]; i++ ) { 1295 this.check( elements[ i ] ); 1296 } 1297 return this.valid(); 1298 }, 1299 1300 // https://jqueryvalidation.org/Validator.element/ 1301 element: function( element ) { 1302 var cleanElement = this.clean( element ), 1303 checkElement = this.validationTargetFor( cleanElement ), 1304 v = this, 1305 result = true, 1306 rs, group; 1307 1308 if ( checkElement === undefined ) { 1309 delete this.invalid[ cleanElement.name ]; 1310 } else { 1311 this.prepareElement( checkElement ); 1312 this.currentElements = $( checkElement ); 1313 1314 // If this element is grouped, then validate all group elements already 1315 // containing a value 1316 group = this.groups[ checkElement.name ]; 1317 if ( group ) { 1318 $.each( this.groups, function( name, testgroup ) { 1319 if ( testgroup === group && name !== checkElement.name ) { 1320 cleanElement = v.validationTargetFor( v.clean( v.findByName( name ) ) ); 1321 if ( cleanElement && cleanElement.name in v.invalid ) { 1322 v.currentElements.push( cleanElement ); 1323 result = v.check( cleanElement ) && result; 1324 } 1325 } 1326 } ); 1327 } 1328 1329 rs = this.check( checkElement ) !== false; 1330 result = result && rs; 1331 if ( rs ) { 1332 this.invalid[ checkElement.name ] = false; 1333 } else { 1334 this.invalid[ checkElement.name ] = true; 1335 } 1336 1337 if ( !this.numberOfInvalids() ) { 1338 1339 // Hide error containers on last error 1340 this.toHide = this.toHide.add( this.containers ); 1341 } 1342 this.showErrors(); 1343 1344 // Add aria-invalid status for screen readers 1345 $( element ).attr( "aria-invalid", !rs ); 1346 } 1347 1348 return result; 1349 }, 1350 1351 // https://jqueryvalidation.org/Validator.showErrors/ 1352 showErrors: function( errors ) { 1353 if ( errors ) { 1354 var validator = this; 1355 1356 // Add items to error list and map 1357 $.extend( this.errorMap, errors ); 1358 this.errorList = $.map( this.errorMap, function( message, name ) { 1359 return { 1360 message: message, 1361 element: validator.findByName( name )[ 0 ] 1362 }; 1363 } ); 1364 1365 // Remove items from success list 1366 this.successList = $.grep( this.successList, function( element ) { 1367 return !( element.name in errors ); 1368 } ); 1369 } 1370 if ( this.settings.showErrors ) { 1371 this.settings.showErrors.call( this, this.errorMap, this.errorList ); 1372 } else { 1373 this.defaultShowErrors(); 1374 } 1375 }, 1376 1377 // https://jqueryvalidation.org/Validator.resetForm/ 1378 resetForm: function() { 1379 if ( $.fn.resetForm ) { 1380 $( this.currentForm ).resetForm(); 1381 } 1382 this.invalid = {}; 1383 this.submitted = {}; 1384 this.prepareForm(); 1385 this.hideErrors(); 1386 var elements = this.elements() 1387 .removeData( "previousValue" ) 1388 .removeAttr( "aria-invalid" ); 1389 1390 this.resetElements( elements ); 1391 }, 1392 1393 resetElements: function( elements ) { 1394 var i; 1395 1396 if ( this.settings.unhighlight ) { 1397 for ( i = 0; elements[ i ]; i++ ) { 1398 this.settings.unhighlight.call( this, elements[ i ], 1399 this.settings.errorClass, "" ); 1400 this.findByName( elements[ i ].name ).removeClass( this.settings.validClass ); 1401 } 1402 } else { 1403 elements 1404 .removeClass( this.settings.errorClass ) 1405 .removeClass( this.settings.validClass ); 1406 } 1407 }, 1408 1409 numberOfInvalids: function() { 1410 return this.objectLength( this.invalid ); 1411 }, 1412 1413 objectLength: function( obj ) { 1414 /* jshint unused: false */ 1415 var count = 0, 1416 i; 1417 for ( i in obj ) { 1418 1419 // This check allows counting elements with empty error 1420 // message as invalid elements 1421 if ( obj[ i ] !== undefined && obj[ i ] !== null && obj[ i ] !== false ) { 1422 count++; 1423 } 1424 } 1425 return count; 1426 }, 1427 1428 hideErrors: function() { 1429 this.hideThese( this.toHide ); 1430 }, 1431 1432 hideThese: function( errors ) { 1433 errors.not( this.containers ).text( "" ); 1434 this.addWrapper( errors ).hide(); 1435 }, 1436 1437 valid: function() { 1438 return this.size() === 0; 1439 }, 1440 1441 size: function() { 1442 return this.errorList.length; 1443 }, 1444 1445 focusInvalid: function() { 1446 if ( this.settings.focusInvalid ) { 1447 try { 1448 $( this.findLastActive() || this.errorList.length && this.errorList[ 0 ].element || [] ) 1449 .filter( ":visible" ) 1450 .trigger( "focus" ) 1451 1452 // Manually trigger focusin event; without it, focusin handler isn't called, findLastActive won't have anything to find 1453 .trigger( "focusin" ); 1454 } catch ( e ) { 1455 1456 // Ignore IE throwing errors when focusing hidden elements 1457 } 1458 } 1459 }, 1460 1461 findLastActive: function() { 1462 var lastActive = this.lastActive; 1463 return lastActive && $.grep( this.errorList, function( n ) { 1464 return n.element.name === lastActive.name; 1465 } ).length === 1 && lastActive; 1466 }, 1467 1468 elements: function() { 1469 var validator = this, 1470 rulesCache = {}; 1471 1472 // Select all valid inputs inside the form (no submit or reset buttons) 1473 return $( this.currentForm ) 1474 .find( "input, select, textarea, [contenteditable]" ) 1475 .not( ":submit, :reset, :image, :disabled" ) 1476 .not( this.settings.ignore ) 1477 .filter( function() { 1478 var name = this.name || $( this ).attr( "name" ); // For contenteditable 1479 var isContentEditable = typeof $( this ).attr( "contenteditable" ) !== "undefined" && $( this ).attr( "contenteditable" ) !== "false"; 1480 1481 if ( !name && validator.settings.debug && window.console ) { 1482 console.error( "%o has no name assigned", this ); 1483 } 1484 1485 // Set form expando on contenteditable 1486 if ( isContentEditable ) { 1487 this.form = $( this ).closest( "form" )[ 0 ]; 1488 this.name = name; 1489 } 1490 1491 // Ignore elements that belong to other/nested forms 1492 if ( this.form !== validator.currentForm ) { 1493 return false; 1494 } 1495 1496 // Select only the first element for each name, and only those with rules specified 1497 if ( name in rulesCache || !validator.objectLength( $( this ).rules() ) ) { 1498 return false; 1499 } 1500 1501 rulesCache[ name ] = true; 1502 return true; 1503 } ); 1504 }, 1505 1506 clean: function( selector ) { 1507 return $( selector )[ 0 ]; 1508 }, 1509 1510 errors: function() { 1511 var errorClass = this.settings.errorClass.split( " " ).join( "." ); 1512 return $( this.settings.errorElement + "." + errorClass, this.errorContext ); 1513 }, 1514 1515 resetInternals: function() { 1516 this.successList = []; 1517 this.errorList = []; 1518 this.errorMap = {}; 1519 this.toShow = $( [] ); 1520 this.toHide = $( [] ); 1521 }, 1522 1523 reset: function() { 1524 this.resetInternals(); 1525 this.currentElements = $( [] ); 1526 }, 1527 1528 prepareForm: function() { 1529 this.reset(); 1530 this.toHide = this.errors().add( this.containers ); 1531 }, 1532 1533 prepareElement: function( element ) { 1534 this.reset(); 1535 this.toHide = this.errorsFor( element ); 1536 }, 1537 1538 elementValue: function( element ) { 1539 var $element = $( element ), 1540 type = element.type, 1541 isContentEditable = typeof $element.attr( "contenteditable" ) !== "undefined" && $element.attr( "contenteditable" ) !== "false", 1542 val, idx; 1543 1544 if ( type === "radio" || type === "checkbox" ) { 1545 return this.findByName( element.name ).filter( ":checked" ).val(); 1546 } else if ( type === "number" && typeof element.validity !== "undefined" ) { 1547 return element.validity.badInput ? "NaN" : $element.val(); 1548 } 1549 1550 if ( isContentEditable ) { 1551 val = $element.text(); 1552 } else { 1553 val = $element.val(); 1554 } 1555 1556 if ( type === "file" ) { 1557 1558 // Modern browser (chrome & safari) 1559 if ( val.substr( 0, 12 ) === "C:\\fakepath\\" ) { 1560 return val.substr( 12 ); 1561 } 1562 1563 // Legacy browsers 1564 // Unix-based path 1565 idx = val.lastIndexOf( "/" ); 1566 if ( idx >= 0 ) { 1567 return val.substr( idx + 1 ); 1568 } 1569 1570 // Windows-based path 1571 idx = val.lastIndexOf( "\\" ); 1572 if ( idx >= 0 ) { 1573 return val.substr( idx + 1 ); 1574 } 1575 1576 // Just the file name 1577 return val; 1578 } 1579 1580 if ( typeof val === "string" ) { 1581 return val.replace( /\r/g, "" ); 1582 } 1583 return val; 1584 }, 1585 1586 check: function( element ) { 1587 element = this.validationTargetFor( this.clean( element ) ); 1588 1589 var rules = $( element ).rules(), 1590 rulesCount = $.map( rules, function( n, i ) { 1591 return i; 1592 } ).length, 1593 dependencyMismatch = false, 1594 val = this.elementValue( element ), 1595 result, method, rule, normalizer; 1596 1597 // Prioritize the local normalizer defined for this element over the global one 1598 // if the former exists, otherwise user the global one in case it exists. 1599 if ( typeof rules.normalizer === "function" ) { 1600 normalizer = rules.normalizer; 1601 } else if ( typeof this.settings.normalizer === "function" ) { 1602 normalizer = this.settings.normalizer; 1603 } 1604 1605 // If normalizer is defined, then call it to retreive the changed value instead 1606 // of using the real one. 1607 // Note that `this` in the normalizer is `element`. 1608 if ( normalizer ) { 1609 val = normalizer.call( element, val ); 1610 1611 // Delete the normalizer from rules to avoid treating it as a pre-defined method. 1612 delete rules.normalizer; 1613 } 1614 1615 for ( method in rules ) { 1616 rule = { method: method, parameters: rules[ method ] }; 1617 try { 1618 result = $.validator.methods[ method ].call( this, val, element, rule.parameters ); 1619 1620 // If a method indicates that the field is optional and therefore valid, 1621 // don't mark it as valid when there are no other rules 1622 if ( result === "dependency-mismatch" && rulesCount === 1 ) { 1623 dependencyMismatch = true; 1624 continue; 1625 } 1626 dependencyMismatch = false; 1627 1628 if ( result === "pending" ) { 1629 this.toHide = this.toHide.not( this.errorsFor( element ) ); 1630 return; 1631 } 1632 1633 if ( !result ) { 1634 this.formatAndAdd( element, rule ); 1635 return false; 1636 } 1637 } catch ( e ) { 1638 if ( this.settings.debug && window.console ) { 1639 console.log( "Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method.", e ); 1640 } 1641 if ( e instanceof TypeError ) { 1642 e.message += ". Exception occurred when checking element " + element.id + ", check the '" + rule.method + "' method."; 1643 } 1644 1645 throw e; 1646 } 1647 } 1648 if ( dependencyMismatch ) { 1649 return; 1650 } 1651 if ( this.objectLength( rules ) ) { 1652 this.successList.push( element ); 1653 } 1654 return true; 1655 }, 1656 1657 // Return the custom message for the given element and validation method 1658 // specified in the element's HTML5 data attribute 1659 // return the generic message if present and no method specific message is present 1660 customDataMessage: function( element, method ) { 1661 return $( element ).data( "msg" + method.charAt( 0 ).toUpperCase() + 1662 method.substring( 1 ).toLowerCase() ) || $( element ).data( "msg" ); 1663 }, 1664 1665 // Return the custom message for the given element name and validation method 1666 customMessage: function( name, method ) { 1667 var m = this.settings.messages[ name ]; 1668 return m && ( m.constructor === String ? m : m[ method ] ); 1669 }, 1670 1671 // Return the first defined argument, allowing empty strings 1672 findDefined: function() { 1673 for ( var i = 0; i < arguments.length; i++ ) { 1674 if ( arguments[ i ] !== undefined ) { 1675 return arguments[ i ]; 1676 } 1677 } 1678 return undefined; 1679 }, 1680 1681 // The second parameter 'rule' used to be a string, and extended to an object literal 1682 // of the following form: 1683 // rule = { 1684 // method: "method name", 1685 // parameters: "the given method parameters" 1686 // } 1687 // 1688 // The old behavior still supported, kept to maintain backward compatibility with 1689 // old code, and will be removed in the next major release. 1690 defaultMessage: function( element, rule ) { 1691 if ( typeof rule === "string" ) { 1692 rule = { method: rule }; 1693 } 1694 1695 var message = this.findDefined( 1696 this.customMessage( element.name, rule.method ), 1697 this.customDataMessage( element, rule.method ), 1698 1699 // 'title' is never undefined, so handle empty string as undefined 1700 !this.settings.ignoreTitle && element.title || undefined, 1701 $.validator.messages[ rule.method ], 1702 "<strong>Warning: No message defined for " + element.name + "</strong>" 1703 ), 1704 theregex = /\$?\{(\d+)\}/g; 1705 if ( typeof message === "function" ) { 1706 message = message.call( this, rule.parameters, element ); 1707 } else if ( theregex.test( message ) ) { 1708 message = $.validator.format( message.replace( theregex, "{$1}" ), rule.parameters ); 1709 } 1710 1711 return message; 1712 }, 1713 1714 formatAndAdd: function( element, rule ) { 1715 var message = this.defaultMessage( element, rule ); 1716 1717 this.errorList.push( { 1718 message: message, 1719 element: element, 1720 method: rule.method 1721 } ); 1722 1723 this.errorMap[ element.name ] = message; 1724 this.submitted[ element.name ] = message; 1725 }, 1726 1727 addWrapper: function( toToggle ) { 1728 if ( this.settings.wrapper ) { 1729 toToggle = toToggle.add( toToggle.parent( this.settings.wrapper ) ); 1730 } 1731 return toToggle; 1732 }, 1733 1734 defaultShowErrors: function() { 1735 var i, elements, error; 1736 for ( i = 0; this.errorList[ i ]; i++ ) { 1737 error = this.errorList[ i ]; 1738 if ( this.settings.highlight ) { 1739 this.settings.highlight.call( this, error.element, this.settings.errorClass, this.settings.val
1739idClass ); 1740 } 1741 this.showLabel( error.element, error.message ); 1742 } 1743 if ( this.errorList.length ) { 1744 this.toShow = this.toShow.add( this.containers ); 1745 } 1746 if ( this.settings.success ) { 1747 for ( i = 0; this.successList[ i ]; i++ ) { 1748 this.showLabel( this.successList[ i ] ); 1749 } 1750 } 1751 if ( this.settings.unhighlight ) { 1752 for ( i = 0, elements = this.validElements(); elements[ i ]; i++ ) { 1753 this.settings.unhighlight.call( this, elements[ i ], this.settings.errorClass, this.settings.validClass ); 1754 } 1755 } 1756 this.toHide = this.toHide.not( this.toShow ); 1757 this.hideErrors(); 1758 this.addWrapper( this.toShow ).show(); 1759 }, 1760 1761 validElements: function() { 1762 return this.currentElements.not( this.invalidElements() ); 1763 }, 1764 1765 invalidElements: function() { 1766 return $( this.errorList ).map( function() { 1767 return this.element; 1768 } ); 1769 }, 1770 1771 showLabel: function( element, message ) { 1772 var place, group, errorID, v, 1773 error = this.errorsFor( element ), 1774 elementID = this.idOrName( element ), 1775 describedBy = $( element ).attr( "aria-describedby" ); 1776 1777 if ( error.length ) { 1778 1779 // Refresh error/success class 1780 error.removeClass( this.settings.validClass ).addClass( this.settings.errorClass ); 1781 1782 // Replace message on existing label 1783 error.html( message ); 1784 } else { 1785 1786 // Create error element 1787 error = $( "<" + this.settings.errorElement + ">" ) 1788 .attr( "id", elementID + "-error" ) 1789 .addClass( this.settings.errorClass ) 1790 .html( message || "" ); 1791 1792 // Maintain reference to the element to be placed into the DOM 1793 place = error; 1794 if ( this.settings.wrapper ) { 1795 1796 // Make sure the element is visible, even in IE 1797 // actually showing the wrapped element is handled elsewhere 1798 place = error.hide().show().wrap( "<" + this.settings.wrapper + "/>" ).parent(); 1799 } 1800 if ( this.labelContainer.length ) { 1801 this.labelContainer.append( place ); 1802 } else if ( this.settings.errorPlacement ) { 1803 this.settings.errorPlacement.call( this, place, $( element ) ); 1804 } else { 1805 place.insertAfter( element ); 1806 } 1807 1808 // Link error back to the element 1809 if ( error.is( "label" ) ) { 1810 1811 // If the error is a label, then associate using 'for' 1812 error.attr( "for", elementID ); 1813 1814 // If the element is not a child of an associated label, then it's necessary 1815 // to explicitly apply aria-describedby 1816 } else if ( error.parents( "label[for='" + this.escapeCssMeta( elementID ) + "']" ).length === 0 ) { 1817 errorID = error.attr( "id" ); 1818 1819 // Respect existing non-error aria-describedby 1820 if ( !describedBy ) { 1821 describedBy = errorID; 1822 } else if ( !describedBy.match( new RegExp( "\\b" + this.escapeCssMeta( errorID ) + "\\b" ) ) ) { 1823 1824 // Add to end of list if not already present 1825 describedBy += " " + errorID; 1826 } 1827 $( element ).attr( "aria-describedby", describedBy ); 1828 1829 // If this element is grouped, then assign to all elements in the same group 1830 group = this.groups[ element.name ]; 1831 if ( group ) { 1832 v = this; 1833 $.each( v.groups, function( name, testgroup ) { 1834 if ( testgroup === group ) { 1835 $( "[name='" + v.escapeCssMeta( name ) + "']", v.currentForm ) 1836 .attr( "aria-describedby", error.attr( "id" ) ); 1837 } 1838 } ); 1839 } 1840 } 1841 } 1842 if ( !message && this.settings.success ) { 1843 error.text( "" ); 1844 if ( typeof this.settings.success === "string" ) { 1845 error.addClass( this.settings.success ); 1846 } else { 1847 this.settings.success( error, element ); 1848 } 1849 } 1850 this.toShow = this.toShow.add( error ); 1851 }, 1852 1853 errorsFor: function( element ) { 1854 var name = this.escapeCssMeta( this.idOrName( element ) ), 1855 describer = $( element ).attr( "aria-describedby" ), 1856 selector = "label[for='" + name + "'], label[for='" + name + "'] *"; 1857 1858 // 'aria-describedby' should directly reference the error element 1859 if ( describer ) { 1860 selector = selector + ", #" + this.escapeCssMeta( describer ) 1861 .replace( /\s+/g, ", #" ); 1862 } 1863 1864 return this 1865 .errors() 1866 .filter( selector ); 1867 }, 1868 1869 // See https://api.jquery.com/category/selectors/, for CSS 1870 // meta-characters that should be escaped in order to be used with JQuery 1871 // as a literal part of a name/id or any selector. 1872 escapeCssMeta: function( string ) { 1873 if ( string === undefined ) { 1874 return ""; 1875 } 1876 1877 return string.replace( /([\\!"#$%&'()*+,./:;<=>?@\[\]^`{|}~])/g, "\\$1" ); 1878 }, 1879 1880 idOrName: function( element ) { 1881 return this.groups[ element.name ] || ( this.checkable( element ) ? element.name : element.i
vendor: 15,592 bytes, lines 1881-2362
1881d || element.name ); 1882 }, 1883 1884 validationTargetFor: function( element ) { 1885 1886 // If radio/checkbox, validate first element in group instead 1887 if ( this.checkable( element ) ) { 1888 element = this.findByName( element.name ); 1889 } 1890 1891 // Always apply ignore filter 1892 return $( element ).not( this.settings.ignore )[ 0 ]; 1893 }, 1894 1895 checkable: function( element ) { 1896 return ( /radio|checkbox/i ).test( element.type ); 1897 }, 1898 1899 findByName: function( name ) { 1900 return $( this.currentForm ).find( "[name='" + this.escapeCssMeta( name ) + "']" ); 1901 }, 1902 1903 getLength: function( value, element ) { 1904 switch ( element.nodeName.toLowerCase() ) { 1905 case "select": 1906 return $( "option:selected", element ).length; 1907 case "input": 1908 if ( this.checkable( element ) ) { 1909 return this.findByName( element.name ).filter( ":checked" ).length; 1910 } 1911 } 1912 return value.length; 1913 }, 1914 1915 depend: function( param, element ) { 1916 return this.dependTypes[ typeof param ] ? this.dependTypes[ typeof param ]( param, element ) : true; 1917 }, 1918 1919 dependTypes: { 1920 "boolean": function( param ) { 1921 return param; 1922 }, 1923 "string": function( param, element ) { 1924 return !!$( param, element.form ).length; 1925 }, 1926 "function": function( param, element ) { 1927 return param( element ); 1928 } 1929 }, 1930 1931 optional: function( element ) { 1932 var val = this.elementValue( element ); 1933 return !$.validator.methods.required.call( this, val, element ) && "dependency-mismatch"; 1934 }, 1935 1936 startRequest: function( element ) { 1937 if ( !this.pending[ element.name ] ) { 1938 this.pendingRequest++; 1939 $( element ).addClass( this.settings.pendingClass ); 1940 this.pending[ element.name ] = true; 1941 } 1942 }, 1943 1944 stopRequest: function( element, valid ) { 1945 this.pendingRequest--; 1946 1947 // Sometimes synchronization fails, make sure pendingRequest is never < 0 1948 if ( this.pendingRequest < 0 ) { 1949 this.pendingRequest = 0; 1950 } 1951 delete this.pending[ element.name ]; 1952 $( element ).removeClass( this.settings.pendingClass ); 1953 if ( valid && this.pendingRequest === 0 && this.formSubmitted && this.form() && this.pendingRequest === 0 ) { 1954 $( this.currentForm ).trigger( "submit" ); 1955 1956 // Remove the hidden input that was used as a replacement for the 1957 // missing submit button. The hidden input is added by `handle()` 1958 // to ensure that the value of the used submit button is passed on 1959 // for scripted submits triggered by this method 1960 if ( this.submitButton ) { 1961 $( "input:hidden[name='" + this.submitButton.name + "']", this.currentForm ).remove(); 1962 } 1963 1964 this.formSubmitted = false; 1965 } else if ( !valid && this.pendingRequest === 0 && this.formSubmitted ) { 1966 $( this.currentForm ).triggerHandler( "invalid-form", [ this ] ); 1967 this.formSubmitted = false; 1968 } 1969 }, 1970 1971 previousValue: function( element, method ) { 1972 method = typeof method === "string" && method || "remote"; 1973 1974 return $.data( element, "previousValue" ) || $.data( element, "previousValue", { 1975 old: null, 1976 valid: true, 1977 message: this.defaultMessage( element, { method: method } ) 1978 } ); 1979 }, 1980 1981 // Cleans up all forms and elements, removes validator-specific events 1982 destroy: function() { 1983 this.resetForm(); 1984 1985 $( this.currentForm ) 1986 .off( ".validate" ) 1987 .removeData( "validator" ) 1988 .find( ".validate-equalTo-blur" ) 1989 .off( ".validate-equalTo" ) 1990 .removeClass( "validate-equalTo-blur" ) 1991 .find( ".validate-lessThan-blur" ) 1992 .off( ".validate-lessThan" ) 1993 .removeClass( "validate-lessThan-blur" ) 1994 .find( ".validate-lessThanEqual-blur" ) 1995 .off( ".validate-lessThanEqual" ) 1996 .removeClass( "validate-lessThanEqual-blur" ) 1997 .find( ".validate-greaterThanEqual-blur" ) 1998 .off( ".validate-greaterThanEqual" ) 1999 .removeClass( "validate-greaterThanEqual-blur" ) 2000 .find( ".validate-greaterThan-blur" ) 2001 .off( ".validate-greaterThan" ) 2002 .removeClass( "validate-greaterThan-blur" ); 2003 } 2004 2005 }, 2006 2007 classRuleSettings: { 2008 required: { required: true }, 2009 email: { email: true }, 2010 url: { url: true }, 2011 date: { date: true }, 2012 dateISO: { dateISO: true }, 2013 number: { number: true }, 2014 digits: { digits: true }, 2015 creditcard: { creditcard: true } 2016 }, 2017 2018 addClassRules: function( className, rules ) { 2019 if ( className.constructor === String ) { 2020 this.classRuleSettings[ className ] = rules; 2021 } else { 2022 $.extend( this.classRuleSettings, className ); 2023 } 2024 }, 2025 2026 classRules: function( element ) { 2027 var rules = {}, 2028 classes = $( element ).attr( "class" ); 2029 2030 if ( classes ) { 2031 $.each( classes.split( " " ), function() { 2032 if ( this in $.validator.classRuleSettings ) { 2033 $.extend( rules, $.validator.classRuleSettings[ this ] ); 2034 } 2035 } ); 2036 } 2037 return rules; 2038 }, 2039 2040 normalizeAttributeRule: function( rules, type, method, value ) { 2041 2042 // Convert the value to a number for number inputs, and for text for backwards compability 2043 // allows type="date" and others to be compared as strings 2044 if ( /min|max|step/.test( method ) && ( type === null || /number|range|text/.test( type ) ) ) { 2045 value = Number( value ); 2046 2047 // Support Opera Mini, which returns NaN for undefined minlength 2048 if ( isNaN( value ) ) { 2049 value = undefined; 2050 } 2051 } 2052 2053 if ( value || value === 0 ) { 2054 rules[ method ] = value; 2055 } else if ( type === method && type !== "range" ) { 2056 2057 // Exception: the jquery validate 'range' method 2058 // does not test for the html5 'range' type 2059 rules[ type === "date" ? "dateISO" : method ] = true; 2060 } 2061 }, 2062 2063 attributeRules: function( element ) { 2064 var rules = {}, 2065 $element = $( element ), 2066 type = element.getAttribute( "type" ), 2067 method, value; 2068 2069 for ( method in $.validator.methods ) { 2070 2071 // Support for <input required> in both html5 and older browsers 2072 if ( method === "required" ) { 2073 value = element.getAttribute( method ); 2074 2075 // Some browsers return an empty string for the required attribute 2076 // and non-HTML5 browsers might have required="" markup 2077 if ( value === "" ) { 2078 value = true; 2079 } 2080 2081 // Force non-HTML5 browsers to return bool 2082 value = !!value; 2083 } else { 2084 value = $element.attr( method ); 2085 } 2086 2087 this.normalizeAttributeRule( rules, type, method, value ); 2088 } 2089 2090 // 'maxlength' may be returned as -1, 2147483647 ( IE ) and 524288 ( safari ) for text inputs 2091 if ( rules.maxlength && /-1|2147483647|524288/.test( rules.maxlength ) ) { 2092 delete rules.maxlength; 2093 } 2094 2095 return rules; 2096 }, 2097 2098 dataRules: function( element ) { 2099 var rules = {}, 2100 $element = $( element ), 2101 type = element.getAttribute( "type" ), 2102 method, value; 2103 2104 for ( method in $.validator.methods ) { 2105 value = $element.data( "rule" + method.charAt( 0 ).toUpperCase() + method.substring( 1 ).toLowerCase() ); 2106 2107 // Cast empty attributes like `data-rule-required` to `true` 2108 if ( value === "" ) { 2109 value = true; 2110 } 2111 2112 this.normalizeAttributeRule( rules, type, method, value ); 2113 } 2114 return rules; 2115 }, 2116 2117 staticRules: function( element ) { 2118 var rules = {}, 2119 validator = $.data( element.form, "validator" ); 2120 2121 if ( validator.settings.rules ) { 2122 rules = $.validator.normalizeRule( validator.settings.rules[ element.name ] ) || {}; 2123 } 2124 return rules; 2125 }, 2126 2127 normalizeRules: function( rules, element ) { 2128 2129 // Handle dependency check 2130 $.each( rules, function( prop, val ) { 2131 2132 // Ignore rule when param is explicitly false, eg. required:false 2133 if ( val === false ) { 2134 delete rules[ prop ]; 2135 return; 2136 } 2137 if ( val.param || val.depends ) { 2138 var keepRule = true; 2139 switch ( typeof val.depends ) { 2140 case "string": 2141 keepRule = !!$( val.depends, element.form ).length; 2142 break; 2143 case "function": 2144 keepRule = val.depends.call( element, element ); 2145 break; 2146 } 2147 if ( keepRule ) { 2148 rules[ prop ] = val.param !== undefined ? val.param : true; 2149 } else { 2150 $.data( element.form, "validator" ).resetElements( $( element ) ); 2151 delete rules[ prop ]; 2152 } 2153 } 2154 } ); 2155 2156 // Evaluate parameters 2157 $.each( rules, function( rule, parameter ) { 2158 rules[ rule ] = typeof parameter === "function" && rule !== "normalizer" ? parameter( element ) : parameter; 2159 } ); 2160 2161 // Clean number parameters 2162 $.each( [ "minlength", "maxlength" ], function() { 2163 if ( rules[ this ] ) { 2164 rules[ this ] = Number( rules[ this ] ); 2165 } 2166 } ); 2167 $.each( [ "rangelength", "range" ], function() { 2168 var parts; 2169 if ( rules[ this ] ) { 2170 if ( Array.isArray( rules[ this ] ) ) { 2171 rules[ this ] = [ Number( rules[ this ][ 0 ] ), Number( rules[ this ][ 1 ] ) ]; 2172 } else if ( typeof rules[ this ] === "string" ) { 2173 parts = rules[ this ].replace( /[\[\]]/g, "" ).split( /[\s,]+/ ); 2174 rules[ this ] = [ Number( parts[ 0 ] ), Number( parts[ 1 ] ) ]; 2175 } 2176 } 2177 } ); 2178 2179 if ( $.validator.autoCreateRanges ) { 2180 2181 // Auto-create ranges 2182 if ( rules.min != null && rules.max != null ) { 2183 rules.range = [ rules.min, rules.max ]; 2184 delete rules.min; 2185 delete rules.max; 2186 } 2187 if ( rules.minlength != null && rules.maxlength != null ) { 2188 rules.rangelength = [ rules.minlength, rules.maxlength ]; 2189 delete rules.minlength; 2190 delete rules.maxlength; 2191 } 2192 } 2193 2194 return rules; 2195 }, 2196 2197 // Converts a simple string to a {string: true} rule, e.g., "required" to {required:true} 2198 normalizeRule: function( data ) { 2199 if ( typeof data === "string" ) { 2200 var transformed = {}; 2201 $.each( data.split( /\s/ ), function() { 2202 transformed[ this ] = true; 2203 } ); 2204 data = transformed; 2205 } 2206 return data; 2207 }, 2208 2209 // https://jqueryvalidation.org/jQuery.validator.addMethod/ 2210 addMethod: function( name, method, message ) { 2211 $.validator.methods[ name ] = method; 2212 $.validator.messages[ name ] = message !== undefined ? message : $.validator.messages[ name ]; 2213 if ( method.length < 3 ) { 2214 $.validator.addClassRules( name, $.validator.normalizeRule( name ) ); 2215 } 2216 }, 2217 2218 // https://jqueryvalidation.org/jQuery.validator.methods/ 2219 methods: { 2220 2221 // https://jqueryvalidation.org/required-method/ 2222 required: function( value, element, param ) { 2223 2224 // Check if dependency is met 2225 if ( !this.depend( param, element ) ) { 2226 return "dependency-mismatch"; 2227 } 2228 if ( element.nodeName.toLowerCase() === "select" ) { 2229 2230 // Could be an array for select-multiple or a string, both are fine this way 2231 var val = $( element ).val(); 2232 return val && val.length > 0; 2233 } 2234 if ( this.checkable( element ) ) { 2235 return this.getLength( value, element ) > 0; 2236 } 2237 return value !== undefined && value !== null && value.length > 0; 2238 }, 2239 2240 // https://jqueryvalidation.org/email-method/ 2241 email: function( value, element ) { 2242 2243 // From https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address 2244 // Retrieved 2014-01-14 2245 // If you have a problem with this implementation, report a bug against the above spec 2246 // Or use custom methods to implement your own email validation 2247 return this.optional( element ) || /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/.test( value ); 2248 }, 2249 2250 // https://jqueryvalidation.org/url-method/ 2251 url: function( value, element ) { 2252 2253 // Copyright (c) 2010-2013 Diego Perini, MIT licensed 2254 // https://gist.github.com/dperini/729294 2255 // see also https://mathiasbynens.be/demo/url-regex 2256 // modified to allow protocol-relative URLs 2257 return this.optional( element ) || /^(?:(?:(?:https?|ftp):)?\/\/)(?:(?:[^\]\[?\/<~#`!@$^&*()+=}|:";',>{ ]|%[0-9A-Fa-f]{2})+(?::(?:[^\]\[?\/<~#`!@$^&*()+=}|:";',>{ ]|%[0-9A-Fa-f]{2})*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?$/i.test( value ); 2258 }, 2259 2260 // https://jqueryvalidation.org/date-method/ 2261 date: ( function() { 2262 var called = false; 2263 2264 return function( value, element ) { 2265 if ( !called ) { 2266 called = true; 2267 if ( this.settings.debug && window.console ) { 2268 console.warn( 2269 "The `date` method is deprecated and will be removed in version '2.0.0'.\n" + 2270 "Please don't use it, since it relies on the Date constructor, which\n" + 2271 "behaves very differently across browsers and locales. Use `dateISO`\n" + 2272 "instead or one of the locale specific methods in `localizations/`\n" + 2273 "and `additional-methods.js`." 2274 ); 2275 } 2276 } 2277 2278 return this.optional( element ) || !/Invalid|NaN/.test( new Date( value ).toString() ); 2279 }; 2280 }() ), 2281 2282 // https://jqueryvalidation.org/dateISO-method/ 2283 dateISO: function( value, element ) { 2284 return this.optional( element ) || /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test( value ); 2285 }, 2286 2287 // https://jqueryvalidation.org/number-method/ 2288 number: function( value, element ) { 2289 return this.optional( element ) || /^(?:-?\d+|-?\d{1,3}(?:,\d{3})+)?(?:\.\d+)?$/.test( value ); 2290 }, 2291 2292 // https://jqueryvalidation.org/digits-method/ 2293 digits: function( value, element ) { 2294 return this.optional( element ) || /^\d+$/.test( value ); 2295 }, 2296 2297 // https://jqueryvalidation.org/minlength-method/ 2298 minlength: function( value, element, param ) { 2299 var length = Array.isArray( value ) ? value.length : this.getLength( value, element ); 2300 return this.optional( element ) || length >= param; 2301 }, 2302 2303 // https://jqueryvalidation.org/maxlength-method/ 2304 maxlength: function( value, element, param ) { 2305 var length = Array.isArray( value ) ? value.length : this.getLength( value, element ); 2306 return this.optional( element ) || length <= param; 2307 }, 2308 2309 // https://jqueryvalidation.org/rangelength-method/ 2310 rangelength: function( value, element, param ) { 2311 var length = Array.isArray( value ) ? value.length : this.getLength( value, element ); 2312 return this.optional( element ) || ( length >= param[ 0 ] && length <= param[ 1 ] ); 2313 }, 2314 2315 // https://jqueryvalidation.org/min-method/ 2316 min: function( value, element, param ) { 2317 return this.optional( element ) || value >= param; 2318 }, 2319 2320 // https://jqueryvalidation.org/max-method/ 2321 max: function( value, element, param ) { 2322 return this.optional( element ) || value <= param; 2323 }, 2324 2325 // https://jqueryvalidation.org/range-method/ 2326 range: function( value, element, param ) { 2327 return this.optional( element ) || ( value >= param[ 0 ] && value <= param[ 1 ] ); 2328 }, 2329 2330 // https://jqueryvalidation.org/step-method/ 2331 step: function( value, element, param ) { 2332 var type = $( element ).attr( "type" ), 2333 errorMessage = "Step attribute on input type " + type + " is not supported.", 2334 supportedTypes = [ "text", "number", "range" ], 2335 re = new RegExp( "\\b" + type + "\\b" ), 2336 notSupported = type && !re.test( supportedTypes.join() ), 2337 decimalPlaces = function( num ) { 2338 var match = ( "" + num ).match( /(?:\.(\d+))?$/ ); 2339 if ( !match ) { 2340 return 0; 2341 } 2342 2343 // Number of digits right of decimal point. 2344 return match[ 1 ] ? match[ 1 ].length : 0; 2345 }, 2346 toInt = function( num ) { 2347 return Math.round( num * Math.pow( 10, decimals ) ); 2348 }, 2349 valid = true, 2350 decimals; 2351 2352 // Works only for text, number and range input types 2353 // TODO find a way to support input types date, datetime, datetime-local, month, time and week 2354 if ( notSupported ) { 2355 throw new Error( errorMessage ); 2356 } 2357 2358 decimals = decimalPlaces( param ); 2359 2360 // Value can't have too many decimals 2361 if ( decimalPlaces( value ) > decimals || toInt( value ) % toInt( param ) !== 0 ) { 2362 valid = false;
2363 } 2364 2365 return this.optional( element ) || valid; 2366 }, 2367 2368 // https://jqueryvalidation.org/equalTo-method/ 2369 equalTo: function( value, element, param ) { 2370 2371 // Bind to the blur event of the target in order to revalidate whenever the target field is updated 2372 var target = $( param ); 2373 if ( this.settings.onfocusout && target.not( ".validate-equalTo-blur" ).length ) { 2374 target.addClass( "validate-equalTo-blur" ).on( "blur.validate-equalTo", function() { 2375 $( element ).valid(); 2376 } ); 2377 } 2378 return value === target.val(); 2379 }, 2380 2381 // https://jqueryvalidation.org/remote-method/ 2382 remote: function( value, element, param, method ) { 2383 if ( this.optional( element ) ) { 2384 return "dependency-mismatch"; 2385 } 2386 2387 method = typeof method === "string" && method || "remote"; 2388 2389 var previous = this.previousValue( element, method ), 2390 validator, data, optionDataString; 2391 2392 if ( !this.settings.messages[ element.name ] ) { 2393 this.settings.messages[ element.name ] = {}; 2394 } 2395 previous.originalMessage = previous.originalMessage || this.settings.messages[ element.name ][ method ]; 2396 this.settings.messages[ element.name ][ method ] = previous.message; 2397 2398 param = typeof param === "string" && { url: param } || param; 2399 optionDataString = $.param( $.extend( { data: value }, param.data ) ); 2400 if ( previous.old === optionDataString ) { 2401 return previous.valid; 2402 } 2403 2404 previous.old = optionDataString; 2405 validator = this; 2406 this.startRequest( element ); 2407 data = {}; 2408 data[ element.name ] = value; 2409 $.ajax( $.extend( true, { 2410 mode: "abort", 2411 port: "validate" + element.name, 2412 dataType: "json", 2413 data: data, 2414 context: validator.currentForm, 2415 success: function( response ) { 2416 var valid = response === true || response === "true", 2417 errors, message, submitted; 2418 2419 validator.settings.messages[ element.name ][ method ] = previous.originalMessage; 2420 if ( valid ) { 2421 submitted = validator.formSubmitted; 2422 validator.resetInternals(); 2423 validator.toHide = validator.errorsFor( element ); 2424 validator.formSubmitted = submitted; 2425 validator.successList.push( element ); 2426 validator.invalid[ element.name ] = false; 2427 validator.showErrors(); 2428 } else { 2429 errors = {}; 2430 message = response || validator.defaultMessage( element, { method: method, parameters: value } ); 2431 errors[ element.name ] = previous.message = message; 2432 validator.invalid[ element.name ] = true; 2433 validator.showErrors( errors ); 2434 } 2435 previous.valid = valid; 2436 validator.stopRequest( element, valid ); 2437 } 2438 }, param ) ); 2439 return "pending"; 2440 } 2441 } 2442 2443} ); 2444 2445// Ajax mode: abort 2446// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]}); 2447// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() 2448 2449var pendingRequests = {}, 2450 ajax; 2451 2452// Use a prefilter if available (1.5+) 2453if ( $.ajaxPrefilter ) { 2454 $.ajaxPrefilter( function( settings, _, xhr ) { 2455 var port = settings.port; 2456 if ( settings.mode === "abort" ) { 2457 if ( pendingRequests[ port ] ) { 2458 pendingRequests[ port ].abort(); 2459 } 2460 pendingRequests[ port ] = xhr; 2461 } 2462 } ); 2463} else { 2464 2465 // Proxy ajax 2466 ajax = $.ajax; 2467 $.ajax = function( settings ) { 2468 var mode = ( "mode" in settings ? settings : $.ajaxSettings ).mode, 2469 port = ( "port" in settings ? settings : $.ajaxSettings ).port; 2470 if ( mode === "abort" ) { 2471 if ( pendingRequests[ port ] ) { 2472 pendingRequests[ port ].abort(); 2473 } 2474 pendingRequests[ port ] = ajax.apply( this, arguments ); 2475 return pendingRequests[ port ]; 2476 } 2477 return ajax.apply( this, arguments ); 2478 }; 2479} 2480return $; 2481})); 2482}).call(global, module, undefined, undefined); 2483 2484}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) 2485},{"jquery":27}],27:[function(require,module,exports){ 2486/*! 2487 * jQuery JavaScript Library v3.5.1 2488 * https://jquery.com/ 2489 * 2490 * Includes Sizzle.js 2491 * https://sizzlejs.com/ 2492 * 2493 * Copyright JS Foundation and other contributors 2494 * Released under the MIT license 2495 * https://jquery.org/license 2496 * 2497 * Date: 2020-05-04T22:49Z 2498 */ 2499( function( global, factory ) { 2500 2501 "use strict"; 2502 2503 if ( typeof module === "object" && typeof module.exports === "object" ) { 2504 2505 // For CommonJS and CommonJS-like environments where a proper `window` 2506 // is present, execute the factory and get jQuery. 2507 // For environments that do not have a `window` with a `document` 2508 // (such as Node.js), expose a factory as module.exports. 2509 // This accentuates the need for the creation of a real `window`. 2510 // e.g. var jQuery = require("jquery")(window); 2511 // See ticket #14549 for more info. 2512 module.exports = global.document ? 2513 factory( global, true ) : 2514 function( w ) { 2515 if ( !w.document ) { 2516 throw new Error( "jQuery requires a window with a document" ); 2517 } 2518 return factory( w ); 2519 }; 2520 } else { 2521 factory( global ); 2522 } 2523 2524// Pass this if window is not defined yet 2525} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { 2526 2527// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 2528// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode 2529// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), str
vendor: 5,155 bytes, lines 2529-2743
2529ict mode should be common 2530// enough that all such attempts are guarded in a try block. 2531"use strict"; 2532 2533var arr = []; 2534 2535var getProto = Object.getPrototypeOf; 2536 2537var slice = arr.slice; 2538 2539var flat = arr.flat ? function( array ) { 2540 return arr.flat.call( array ); 2541} : function( array ) { 2542 return arr.concat.apply( [], array ); 2543}; 2544 2545 2546var push = arr.push; 2547 2548var indexOf = arr.indexOf; 2549 2550var class2type = {}; 2551 2552var toString = class2type.toString; 2553 2554var hasOwn = class2type.hasOwnProperty; 2555 2556var fnToString = hasOwn.toString; 2557 2558var ObjectFunctionString = fnToString.call( Object ); 2559 2560var support = {}; 2561 2562var isFunction = function isFunction( obj ) { 2563 2564 // Support: Chrome <=57, Firefox <=52 2565 // In some browsers, typeof returns "function" for HTML <object> elements 2566 // (i.e., `typeof document.createElement( "object" ) === "function"`). 2567 // We don't want to classify *any* DOM node as a function. 2568 return typeof obj === "function" && typeof obj.nodeType !== "number"; 2569 }; 2570 2571 2572var isWindow = function isWindow( obj ) { 2573 return obj != null && obj === obj.window; 2574 }; 2575 2576 2577var document = window.document; 2578 2579 2580 2581 var preservedScriptAttributes = { 2582 type: true, 2583 src: true, 2584 nonce: true, 2585 noModule: true 2586 }; 2587 2588 function DOMEval( code, node, doc ) { 2589 doc = doc || document; 2590 2591 var i, val, 2592 script = doc.createElement( "script" ); 2593 2594 script.text = code; 2595 if ( node ) { 2596 for ( i in preservedScriptAttributes ) { 2597 2598 // Support: Firefox 64+, Edge 18+ 2599 // Some browsers don't support the "nonce" property on scripts. 2600 // On the other hand, just using `getAttribute` is not enough as 2601 // the `nonce` attribute is reset to an empty string whenever it 2602 // becomes browsing-context connected. 2603 // See https://github.com/whatwg/html/issues/2369 2604 // See https://html.spec.whatwg.org/#nonce-attributes 2605 // The `node.getAttribute` check was added for the sake of 2606 // `jQuery.globalEval` so that it can fake a nonce-containing node 2607 // via an object. 2608 val = node[ i ] || node.getAttribute && node.getAttribute( i ); 2609 if ( val ) { 2610 script.setAttribute( i, val ); 2611 } 2612 } 2613 } 2614 doc.head.appendChild( script ).parentNode.removeChild( script ); 2615 } 2616 2617 2618function toType( obj ) { 2619 if ( obj == null ) { 2620 return obj + ""; 2621 } 2622 2623 // Support: Android <=2.3 only (functionish RegExp) 2624 return typeof obj === "object" || typeof obj === "function" ? 2625 class2type[ toString.call( obj ) ] || "object" : 2626 typeof obj; 2627} 2628/* global Symbol */ 2629// Defining this global in .eslintrc.json would create a danger of using the global 2630// unguarded in another place, it seems safer to define global only for this module 2631 2632 2633 2634var 2635 version = "3.5.1", 2636 2637 // Define a local copy of jQuery 2638 jQuery = function( selector, context ) { 2639 2640 // The jQuery object is actually just the init constructor 'enhanced' 2641 // Need init if jQuery is called (just allow error to be thrown if not included) 2642 return new jQuery.fn.init( selector, context ); 2643 }; 2644 2645jQuery.fn = jQuery.prototype = { 2646 2647 // The current version of jQuery being used 2648 jquery: version, 2649 2650 constructor: jQuery, 2651 2652 // The default length of a jQuery object is 0 2653 length: 0, 2654 2655 toArray: function() { 2656 return slice.call( this ); 2657 }, 2658 2659 // Get the Nth element in the matched element set OR 2660 // Get the whole matched element set as a clean array 2661 get: function( num ) { 2662 2663 // Return all the elements in a clean array 2664 if ( num == null ) { 2665 return slice.call( this ); 2666 } 2667 2668 // Return just the one element from the set 2669 return num < 0 ? this[ num + this.length ] : this[ num ]; 2670 }, 2671 2672 // Take an array of elements and push it onto the stack 2673 // (returning the new matched element set) 2674 pushStack: function( elems ) { 2675 2676 // Build a new jQuery matched element set 2677 var ret = jQuery.merge( this.constructor(), elems ); 2678 2679 // Add the old object onto the stack (as a reference) 2680 ret.prevObject = this; 2681 2682 // Return the newly-formed element set 2683 return ret; 2684 }, 2685 2686 // Execute a callback for every element in the matched set. 2687 each: function( callback ) { 2688 return jQuery.each( this, callback ); 2689 }, 2690 2691 map: function( callback ) { 2692 return this.pushStack( jQuery.map( this, function( elem, i ) { 2693 return callback.call( elem, i, elem ); 2694 } ) ); 2695 }, 2696 2697 slice: function() { 2698 return this.pushStack( slice.apply( this, arguments ) ); 2699 }, 2700 2701 first: function() { 2702 return this.eq( 0 ); 2703 }, 2704 2705 last: function() { 2706 return this.eq( -1 ); 2707 }, 2708 2709 even: function() { 2710 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 2711 return ( i + 1 ) % 2; 2712 } ) ); 2713 }, 2714 2715 odd: function() { 2716 return this.pushStack( jQuery.grep( this, function( _elem, i ) { 2717 return i % 2; 2718 } ) ); 2719 }, 2720 2721 eq: function( i ) { 2722 var len = this.length, 2723 j = +i + ( i < 0 ? len : 0 ); 2724 return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); 2725 }, 2726 2727 end: function() { 2728 return this.prevObject || this.constructor(); 2729 }, 2730 2731 // For internal use only. 2732 // Behaves like an Array's method, not like a jQuery method. 2733 push: push, 2734 sort: arr.sort, 2735 splice: arr.splice 2736}; 2737 2738jQuery.extend = jQuery.fn.extend = function() { 2739 var options, name, src, copy, copyIsArray, clone, 2740 target = arguments[ 0 ] || {}, 2741 i = 1, 2742 length = arguments.length, 2743 deep = false;
vendor: 4,654 bytes, lines 2744-2950
2744 2745 // Handle a deep copy situation 2746 if ( typeof target === "boolean" ) { 2747 deep = target; 2748 2749 // Skip the boolean and the target 2750 target = arguments[ i ] || {}; 2751 i++; 2752 } 2753 2754 // Handle case when target is a string or something (possible in deep copy) 2755 if ( typeof target !== "object" && !isFunction( target ) ) { 2756 target = {}; 2757 } 2758 2759 // Extend jQuery itself if only one argument is passed 2760 if ( i === length ) { 2761 target = this; 2762 i--; 2763 } 2764 2765 for ( ; i < length; i++ ) { 2766 2767 // Only deal with non-null/undefined values 2768 if ( ( options = arguments[ i ] ) != null ) { 2769 2770 // Extend the base object 2771 for ( name in options ) { 2772 copy = options[ name ]; 2773 2774 // Prevent Object.prototype pollution 2775 // Prevent never-ending loop 2776 if ( name === "__proto__" || target === copy ) { 2777 continue; 2778 } 2779 2780 // Recurse if we're merging plain objects or arrays 2781 if ( deep && copy && ( jQuery.isPlainObject( copy ) || 2782 ( copyIsArray = Array.isArray( copy ) ) ) ) { 2783 src = target[ name ]; 2784 2785 // Ensure proper type for the source value 2786 if ( copyIsArray && !Array.isArray( src ) ) { 2787 clone = []; 2788 } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { 2789 clone = {}; 2790 } else { 2791 clone = src; 2792 } 2793 copyIsArray = false; 2794 2795 // Never move original objects, clone them 2796 target[ name ] = jQuery.extend( deep, clone, copy ); 2797 2798 // Don't bring in undefined values 2799 } else if ( copy !== undefined ) { 2800 target[ name ] = copy; 2801 } 2802 } 2803 } 2804 } 2805 2806 // Return the modified object 2807 return target; 2808}; 2809 2810jQuery.extend( { 2811 2812 // Unique for each copy of jQuery on the page 2813 expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), 2814 2815 // Assume jQuery is ready without the ready module 2816 isReady: true, 2817 2818 error: function( msg ) { 2819 throw new Error( msg ); 2820 }, 2821 2822 noop: function() {}, 2823 2824 isPlainObject: function( obj ) { 2825 var proto, Ctor; 2826 2827 // Detect obvious negatives 2828 // Use toString instead of jQuery.type to catch host objects 2829 if ( !obj || toString.call( obj ) !== "[object Object]" ) { 2830 return false; 2831 } 2832 2833 proto = getProto( obj ); 2834 2835 // Objects with no prototype (e.g., `Object.create( null )`) are plain 2836 if ( !proto ) { 2837 return true; 2838 } 2839 2840 // Objects with prototype are plain iff they were constructed by a global Object function 2841 Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; 2842 return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; 2843 }, 2844 2845 isEmptyObject: function( obj ) { 2846 var name; 2847 2848 for ( name in obj ) { 2849 return false; 2850 } 2851 return true; 2852 }, 2853 2854 // Evaluates a script in a provided context; falls back to the global one 2855 // if not specified. 2856 globalEval: function( code, options, doc ) { 2857 DOMEval( code, { nonce: options && options.nonce }, doc ); 2858 }, 2859 2860 each: function( obj, callback ) { 2861 var length, i = 0; 2862 2863 if ( isArrayLike( obj ) ) { 2864 length = obj.length; 2865 for ( ; i < length; i++ ) { 2866 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 2867 break; 2868 } 2869 } 2870 } else { 2871 for ( i in obj ) { 2872 if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { 2873 break; 2874 } 2875 } 2876 } 2877 2878 return obj; 2879 }, 2880 2881 // results is for internal usage only 2882 makeArray: function( arr, results ) { 2883 var ret = results || []; 2884 2885 if ( arr != null ) { 2886 if ( isArrayLike( Object( arr ) ) ) { 2887 jQuery.merge( ret, 2888 typeof arr === "string" ? 2889 [ arr ] : arr 2890 ); 2891 } else { 2892 push.call( ret, arr ); 2893 } 2894 } 2895 2896 return ret; 2897 }, 2898 2899 inArray: function( elem, arr, i ) { 2900 return arr == null ? -1 : indexOf.call( arr, elem, i ); 2901 }, 2902 2903 // Support: Android <=4.0 only, PhantomJS 1 only 2904 // push.apply(_, arraylike) throws on ancient WebKit 2905 merge: function( first, second ) { 2906 var len = +second.length, 2907 j = 0, 2908 i = first.length; 2909 2910 for ( ; j < len; j++ ) { 2911 first[ i++ ] = second[ j ]; 2912 } 2913 2914 first.length = i; 2915 2916 return first; 2917 }, 2918 2919 grep: function( elems, callback, invert ) { 2920 var callbackInverse, 2921 matches = [], 2922 i = 0, 2923 length = elems.length, 2924 callbackExpect = !invert; 2925 2926 // Go through the array, only saving the items 2927 // that pass the validator function 2928 for ( ; i < length; i++ ) { 2929 callbackInverse = !callback( elems[ i ], i ); 2930 if ( callbackInverse !== callbackExpect ) { 2931 matches.push( elems[ i ] ); 2932 } 2933 } 2934 2935 return matches; 2936 }, 2937 2938 // arg is for internal usage only 2939 map: function( elems, callback, arg ) { 2940 var length, value, 2941 i = 0, 2942 ret = []; 2943 2944 // Go through the array, translating each of the items to their new values 2945 if ( isArrayLike( elems ) ) { 2946 length = elems.length; 2947 for ( ; i < length; i++ ) { 2948 value = callback( elems[ i ], i, arg ); 2949 2950 if ( value != null ) {
vendor: 1,491 bytes, lines 2951-3013
2951 ret.push( value ); 2952 } 2953 } 2954 2955 // Go through every key on the object, 2956 } else { 2957 for ( i in elems ) { 2958 value = callback( elems[ i ], i, arg ); 2959 2960 if ( value != null ) { 2961 ret.push( value ); 2962 } 2963 } 2964 } 2965 2966 // Flatten any nested arrays 2967 return flat( ret ); 2968 }, 2969 2970 // A global GUID counter for objects 2971 guid: 1, 2972 2973 // jQuery.support is not used in Core but other projects attach their 2974 // properties to it so it needs to exist. 2975 support: support 2976} ); 2977 2978if ( typeof Symbol === "function" ) { 2979 jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; 2980} 2981 2982// Populate the class2type map 2983jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), 2984function( _i, name ) { 2985 class2type[ "[object " + name + "]" ] = name.toLowerCase(); 2986} ); 2987 2988function isArrayLike( obj ) { 2989 2990 // Support: real iOS 8.2 only (not reproducible in simulator) 2991 // `in` check used to prevent JIT error (gh-2145) 2992 // hasOwn isn't used here due to false negatives 2993 // regarding Nodelist length in IE 2994 var length = !!obj && "length" in obj && obj.length, 2995 type = toType( obj ); 2996 2997 if ( isFunction( obj ) || isWindow( obj ) ) { 2998 return false; 2999 } 3000 3001 return type === "array" || length === 0 || 3002 typeof length === "number" && length > 0 && ( length - 1 ) in obj; 3003} 3004var Sizzle = 3005/*! 3006 * Sizzle CSS Selector Engine v2.3.5 3007 * https://sizzlejs.com/ 3008 * 3009 * Copyright JS Foundation and other contributors 3010 * Released under the MIT license 3011 * https://js.foundation/ 3012 * 3013 * Date: 2020-03-14
vendor: 16,386 bytes, lines 3013-3596
3013 3014 */ 3015( function( window ) { 3016var i, 3017 support, 3018 Expr, 3019 getText, 3020 isXML, 3021 tokenize, 3022 compile, 3023 select, 3024 outermostContext, 3025 sortInput, 3026 hasDuplicate, 3027 3028 // Local document vars 3029 setDocument, 3030 document, 3031 docElem, 3032 documentIsHTML, 3033 rbuggyQSA, 3034 rbuggyMatches, 3035 matches, 3036 contains, 3037 3038 // Instance-specific data 3039 expando = "sizzle" + 1 * new Date(), 3040 preferredDoc = window.document, 3041 dirruns = 0, 3042 done = 0, 3043 classCache = createCache(), 3044 tokenCache = createCache(), 3045 compilerCache = createCache(), 3046 nonnativeSelectorCache = createCache(), 3047 sortOrder = function( a, b ) { 3048 if ( a === b ) { 3049 hasDuplicate = true; 3050 } 3051 return 0; 3052 }, 3053 3054 // Instance methods 3055 hasOwn = ( {} ).hasOwnProperty, 3056 arr = [], 3057 pop = arr.pop, 3058 pushNative = arr.push, 3059 push = arr.push, 3060 slice = arr.slice, 3061 3062 // Use a stripped-down indexOf as it's faster than native 3063 // https://jsperf.com/thor-indexof-vs-for/5 3064 indexOf = function( list, elem ) { 3065 var i = 0, 3066 len = list.length; 3067 for ( ; i < len; i++ ) { 3068 if ( list[ i ] === elem ) { 3069 return i; 3070 } 3071 } 3072 return -1; 3073 }, 3074 3075 booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + 3076 "ismap|loop|multiple|open|readonly|required|scoped", 3077 3078 // Regular expressions 3079 3080 // http://www.w3.org/TR/css3-selectors/#whitespace 3081 whitespace = "[\\x20\\t\\r\\n\\f]", 3082 3083 // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram 3084 identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + 3085 "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", 3086 3087 // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors 3088 attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + 3089 3090 // Operator (capture 2) 3091 "*([*^$|!~]?=)" + whitespace + 3092 3093 // "Attribute values must be CSS identifiers [capture 5] 3094 // or strings [capture 3 or capture 4]" 3095 "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + 3096 whitespace + "*\\]", 3097 3098 pseudos = ":(" + identifier + ")(?:\\((" + 3099 3100 // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: 3101 // 1. quoted (capture 3; capture 4 or capture 5) 3102 "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + 3103 3104 // 2. simple (capture 6) 3105 "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + 3106 3107 // 3. anything else (capture 2) 3108 ".*" + 3109 ")\\)|)", 3110 3111 // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter 3112 rwhitespace = new RegExp( whitespace + "+", "g" ), 3113 rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + 3114 whitespace + "+$", "g" ), 3115 3116 rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), 3117 rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + 3118 "*" ), 3119 rdescend = new RegExp( whitespace + "|>" ), 3120 3121 rpseudo = new RegExp( pseudos ), 3122 ridentifier = new RegExp( "^" + identifier + "$" ), 3123 3124 matchExpr = { 3125 "ID": new RegExp( "^#(" + identifier + ")" ), 3126 "CLASS": new RegExp( "^\\.(" + identifier + ")" ), 3127 "TAG": new RegExp( "^(" + identifier + "|[*])" ), 3128 "ATTR": new RegExp( "^" + attributes ), 3129 "PSEUDO": new RegExp( "^" + pseudos ), 3130 "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + 3131 whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + 3132 whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), 3133 "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), 3134 3135 // For use in libraries implementing .is() 3136 // We use this for POS matching in `select` 3137 "needsContext": new RegExp( "^" + whitespace + 3138 "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + 3139 "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) 3140 }, 3141 3142 rhtml = /HTML$/i, 3143 rinputs = /^(?:input|select|textarea|button)$/i, 3144 rheader = /^h\d$/i, 3145 3146 rnative = /^[^{]+\{\s*\[native \w/, 3147 3148 // Easily-parseable/retrievable ID or TAG or CLASS selectors 3149 rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, 3150 3151 rsibling = /[+~]/, 3152 3153 // CSS escapes 3154 // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters 3155 runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), 3156 funescape = function( escape, nonHex ) { 3157 var high = "0x" + escape.slice( 1 ) - 0x10000; 3158 3159 return nonHex ? 3160 3161 // Strip the backslash prefix from a non-hex escape sequence 3162 nonHex : 3163 3164 // Replace a hexadecimal escape sequence with the encoded Unicode code point 3165 // Support: IE <=11+ 3166 // For values outside the Basic Multilingual Plane (BMP), manually construct a 3167 // surrogate pair 3168 high < 0 ? 3169 String.fromCharCode( high + 0x10000 ) : 3170 String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); 3171 }, 3172 3173 // CSS string/identifier serialization 3174 // https://drafts.csswg.org/cssom/#common-serializing-idioms 3175 rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, 3176 fcssescape = function( ch, asCodePoint ) { 3177 if ( asCodePoint ) { 3178 3179 // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER 3180 if ( ch === "\0" ) { 3181 return "\uFFFD"; 3182 } 3183 3184 // Control characters and (dependent upon position) numbers get escaped as code points 3185 return ch.slice( 0, -1 ) + "\\" + 3186 ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; 3187 } 3188 3189 // Other potentially-special ASCII characters get backslash-escaped 3190 return "\\" + ch; 3191 }, 3192 3193 // Used for iframes 3194 // See setDocument() 3195 // Removing the function wrapper causes a "Permission Denied" 3196 // error in IE 3197 unloadHandler = function() { 3198 setDocument(); 3199 }, 3200 3201 inDisabledFieldset = addCombinator( 3202 function( elem ) { 3203 return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; 3204 }, 3205 { dir: "parentNode", next: "legend" } 3206 ); 3207 3208// Optimize for push.apply( _, NodeList ) 3209try { 3210 push.apply( 3211 ( arr = slice.call( preferredDoc.childNodes ) ), 3212 preferredDoc.childNodes 3213 ); 3214 3215 // Support: Android<4.0 3216 // Detect silently failing push.apply 3217 // eslint-disable-next-line no-unused-expressions 3218 arr[ preferredDoc.childNodes.length ].nodeType; 3219} catch ( e ) { 3220 push = { apply: arr.length ? 3221 3222 // Leverage slice if possible 3223 function( target, els ) { 3224 pushNative.apply( target, slice.call( els ) ); 3225 } : 3226 3227 // Support: IE<9 3228 // Otherwise append directly 3229 function( target, els ) { 3230 var j = target.length, 3231 i = 0; 3232 3233 // Can't trust NodeList.length 3234 while ( ( target[ j++ ] = els[ i++ ] ) ) {} 3235 target.length = j - 1; 3236 } 3237 }; 3238} 3239 3240function Sizzle( selector, context, results, seed ) { 3241 var m, i, elem, nid, match, groups, newSelector, 3242 newContext = context && context.ownerDocument, 3243 3244 // nodeType defaults to 9, since context defaults to document 3245 nodeType = context ? context.nodeType : 9; 3246 3247 results = results || []; 3248 3249 // Return early from calls with invalid selector or context 3250 if ( typeof selector !== "string" || !selector || 3251 nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { 3252 3253 return results; 3254 } 3255 3256 // Try to shortcut find operations (as opposed to filters) in HTML documents 3257 if ( !seed ) { 3258 setDocument( context ); 3259 context = context || document; 3260 3261 if ( documentIsHTML ) { 3262 3263 // If the selector is sufficiently simple, try using a "get*By*" DOM method 3264 // (excepting DocumentFragment context, where the methods don't exist) 3265 if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { 3266 3267 // ID selector 3268 if ( ( m = match[ 1 ] ) ) { 3269 3270 // Document context 3271 if ( nodeType === 9 ) { 3272 if ( ( elem = context.getElementById( m ) ) ) { 3273 3274 // Support: IE, Opera, Webkit 3275 // TODO: identify versions 3276 // getElementById can match elements by name instead of ID 3277 if ( elem.id === m ) { 3278 results.push( elem ); 3279 return results; 3280 } 3281 } else { 3282 return results; 3283 } 3284 3285 // Element context 3286 } else { 3287 3288 // Support: IE, Opera, Webkit 3289 // TODO: identify versions 3290 // getElementById can match elements by name instead of ID 3291 if ( newContext && ( elem = newContext.getElementById( m ) ) && 3292 contains( context, elem ) && 3293 elem.id === m ) { 3294 3295 results.push( elem ); 3296 return results; 3297 } 3298 } 3299 3300 // Type selector 3301 } else if ( match[ 2 ] ) { 3302 push.apply( results, context.getElementsByTagName( selector ) ); 3303 return results; 3304 3305 // Class selector 3306 } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && 3307 context.getElementsByClassName ) { 3308 3309 push.apply( results, context.getElementsByClassName( m ) ); 3310 return results; 3311 } 3312 } 3313 3314 // Take advantage of querySelectorAll 3315 if ( support.qsa && 3316 !nonnativeSelectorCache[ selector + " " ] && 3317 ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && 3318 3319 // Support: IE 8 only 3320 // Exclude object elements 3321 ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { 3322 3323 newSelector = selector; 3324 newContext = context; 3325 3326 // qSA considers elements outside a scoping root when evaluating child or 3327 // descendant combinators, which is not what we want. 3328 // In such cases, we work around the behavior by prefixing every selector in the 3329 // list with an ID selector referencing the scope context. 3330 // The technique has to be used as well when a leading combinator is used 3331 // as such selectors are not recognized by querySelectorAll. 3332 // Thanks to Andrew Dupont for this technique. 3333 if ( nodeType === 1 && 3334 ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { 3335 3336 // Expand context for sibling selectors 3337 newContext = rsibling.test( selector ) && testContext( context.parentNode ) || 3338 context; 3339 3340 // We can use :scope instead of the ID hack if the browser 3341 // supports it & if we're not changing the context. 3342 if ( newContext !== context || !support.scope ) { 3343 3344 // Capture the context ID, setting it first if necessary 3345 if ( ( nid = context.getAttribute( "id" ) ) ) { 3346 nid = nid.replace( rcssescape, fcssescape ); 3347 } else { 3348 context.setAttribute( "id", ( nid = expando ) ); 3349 } 3350 } 3351 3352 // Prefix every selector in the list 3353 groups = tokenize( selector ); 3354 i = groups.length; 3355 while ( i-- ) { 3356 groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + 3357 toSelector( groups[ i ] ); 3358 } 3359 newSelector = groups.join( "," ); 3360 } 3361 3362 try { 3363 push.apply( results, 3364 newContext.querySelectorAll( newSelector ) 3365 ); 3366 return results; 3367 } catch ( qsaError ) { 3368 nonnativeSelectorCache( selector, true ); 3369 } finally { 3370 if ( nid === expando ) { 3371 context.removeAttribute( "id" ); 3372 } 3373 } 3374 } 3375 } 3376 } 3377 3378 // All others 3379 return select( selector.replace( rtrim, "$1" ), context, results, seed ); 3380} 3381 3382/** 3383 * Create key-value caches of limited size 3384 * @returns {function(string, object)} Returns the Object data after storing it on itself with 3385 * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) 3386 * deleting the oldest entry 3387 */ 3388function createCache() { 3389 var keys = []; 3390 3391 function cache( key, value ) { 3392 3393 // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) 3394 if ( keys.push( key + " " ) > Expr.cacheLength ) { 3395 3396 // Only keep the most recent entries 3397 delete cache[ keys.shift() ]; 3398 } 3399 return ( cache[ key + " " ] = value ); 3400 } 3401 return cache; 3402} 3403 3404/** 3405 * Mark a function for special use by Sizzle 3406 * @param {Function} fn The function to mark 3407 */ 3408function markFunction( fn ) { 3409 fn[ expando ] = true; 3410 return fn; 3411} 3412 3413/** 3414 * Support testing using an element 3415 * @param {Function} fn Passed the created element and returns a boolean result 3416 */ 3417function assert( fn ) { 3418 var el = document.createElement( "fieldset" ); 3419 3420 try { 3421 return !!fn( el ); 3422 } catch ( e ) { 3423 return false; 3424 } finally { 3425 3426 // Remove from its parent by default 3427 if ( el.parentNode ) { 3428 el.parentNode.removeChild( el ); 3429 } 3430 3431 // release memory in IE 3432 el = null; 3433 } 3434} 3435 3436/** 3437 * Adds the same handler for all of the specified attrs 3438 * @param {String} attrs Pipe-separated list of attributes 3439 * @param {Function} handler The method that will be applied 3440 */ 3441function addHandle( attrs, handler ) { 3442 var arr = attrs.split( "|" ), 3443 i = arr.length; 3444 3445 while ( i-- ) { 3446 Expr.attrHandle[ arr[ i ] ] = handler; 3447 } 3448} 3449 3450/** 3451 * Checks document order of two siblings 3452 * @param {Element} a 3453 * @param {Element} b 3454 * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b 3455 */ 3456function siblingCheck( a, b ) { 3457 var cur = b && a, 3458 diff = cur && a.nodeType === 1 && b.nodeType === 1 && 3459 a.sourceIndex - b.sourceIndex; 3460 3461 // Use IE sourceIndex if available on both nodes 3462 if ( diff ) { 3463 return diff; 3464 } 3465 3466 // Check if b follows a 3467 if ( cur ) { 3468 while ( ( cur = cur.nextSibling ) ) { 3469 if ( cur === b ) { 3470 return -1; 3471 } 3472 } 3473 } 3474 3475 return a ? 1 : -1; 3476} 3477 3478/** 3479 * Returns a function to use in pseudos for input types 3480 * @param {String} type 3481 */ 3482function createInputPseudo( type ) { 3483 return function( elem ) { 3484 var name = elem.nodeName.toLowerCase(); 3485 return name === "input" && elem.type === type; 3486 }; 3487} 3488 3489/** 3490 * Returns a function to use in pseudos for buttons 3491 * @param {String} type 3492 */ 3493function createButtonPseudo( type ) { 3494 return function( elem ) { 3495 var name = elem.nodeName.toLowerCase(); 3496 return ( name === "input" || name === "button" ) && elem.type === type; 3497 }; 3498} 3499 3500/** 3501 * Returns a function to use in pseudos for :enabled/:disabled 3502 * @param {Boolean} disabled true for :disabled; false for :enabled 3503 */ 3504function createDisabledPseudo( disabled ) { 3505 3506 // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable 3507 return function( elem ) { 3508 3509 // Only certain elements can match :enabled or :disabled 3510 // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled 3511 // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled 3512 if ( "form" in elem ) { 3513 3514 // Check for inherited disabledness on relevant non-disabled elements: 3515 // * listed form-associated elements in a disabled fieldset 3516 // https://html.spec.whatwg.org/multipage/forms.html#category-listed 3517 // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled 3518 // * option elements in a disabled optgroup 3519 // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled 3520 // All such elements have a "form" property. 3521 if ( elem.parentNode && elem.disabled === false ) { 3522 3523 // Option elements defer to a parent optgroup if present 3524 if ( "label" in elem ) { 3525 if ( "label" in elem.parentNode ) { 3526 return elem.parentNode.disabled === disabled; 3527 } else { 3528 return elem.disabled === disabled; 3529 } 3530 } 3531 3532 // Support: IE 6 - 11 3533 // Use the isDisabled shortcut property to check for disabled fieldset ancestors 3534 return elem.isDisabled === disabled || 3535 3536 // Where there is no isDisabled, check manually 3537 /* jshint -W018 */ 3538 elem.isDisabled !== !disabled && 3539 inDisabledFieldset( elem ) === disabled; 3540 } 3541 3542 return elem.disabled === disabled; 3543 3544 // Try to winnow out elements that can't be disabled before trusting the disabled property. 3545 // Some victims get caught in our net (label, legend, menu, track), but it shouldn't 3546 // even exist on them, let alone have a boolean value. 3547 } else if ( "label" in elem ) { 3548 return elem.disabled === disabled; 3549 } 3550 3551 // Remaining elements are neither :enabled nor :disabled 3552 return false; 3553 }; 3554} 3555 3556/** 3557 * Returns a function to use in pseudos for positionals 3558 * @param {Function} fn 3559 */ 3560function createPositionalPseudo( fn ) { 3561 return markFunction( function( argument ) { 3562 argument = +argument; 3563 return markFunction( function( seed, matches ) { 3564 var j, 3565 matchIndexes = fn( [], seed.length, argument ), 3566 i = matchIndexes.length; 3567 3568 // Match elements found at the specified indexes 3569 while ( i-- ) { 3570 if ( seed[ ( j = matchIndexes[ i ] ) ] ) { 3571 seed[ j ] = !( matches[ j ] = seed[ j ] ); 3572 } 3573 } 3574 } ); 3575 } ); 3576} 3577 3578/** 3579 * Checks a node for validity as a Sizzle context 3580 * @param {Element|Object=} context 3581 * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value 3582 */ 3583function testContext( context ) { 3584 return context && typeof context.getElementsByTagName !== "undefined" && context; 3585} 3586 3587// Expose support vars for convenience 3588support = Sizzle.support = {}; 3589 3590/** 3591 * Detects XML nodes 3592 * @param {Element|Object} elem An element or a document 3593 * @returns {Boolean} True iff elem is a non-HTML XML node 3594 */ 3595isXML = Sizzle.isXML = function( elem ) { 3596 var namespace = elem
3596.namespaceURI, 3597 docElem =
vendor: 54,357 bytes, lines 3597-5511
3597 ( elem.ownerDocument || elem ).documentElement; 3598 3599 // Support: IE <=8 3600 // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes 3601 // https://bugs.jquery.com/ticket/4833 3602 return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); 3603}; 3604 3605/** 3606 * Sets document-related variables once based on the current document 3607 * @param {Element|Object} [doc] An element or document object to use to set the document 3608 * @returns {Object} Returns the current document 3609 */ 3610setDocument = Sizzle.setDocument = function( node ) { 3611 var hasCompare, subWindow, 3612 doc = node ? node.ownerDocument || node : preferredDoc; 3613 3614 // Return early if doc is invalid or already selected 3615 // Support: IE 11+, Edge 17 - 18+ 3616 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3617 // two documents; shallow comparisons work. 3618 // eslint-disable-next-line eqeqeq 3619 if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { 3620 return document; 3621 } 3622 3623 // Update global variables 3624 document = doc; 3625 docElem = document.documentElement; 3626 documentIsHTML = !isXML( document ); 3627 3628 // Support: IE 9 - 11+, Edge 12 - 18+ 3629 // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) 3630 // Support: IE 11+, Edge 17 - 18+ 3631 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3632 // two documents; shallow comparisons work. 3633 // eslint-disable-next-line eqeqeq 3634 if ( preferredDoc != document && 3635 ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { 3636 3637 // Support: IE 11, Edge 3638 if ( subWindow.addEventListener ) { 3639 subWindow.addEventListener( "unload", unloadHandler, false ); 3640 3641 // Support: IE 9 - 10 only 3642 } else if ( subWindow.attachEvent ) { 3643 subWindow.attachEvent( "onunload", unloadHandler ); 3644 } 3645 } 3646 3647 // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, 3648 // Safari 4 - 5 only, Opera <=11.6 - 12.x only 3649 // IE/Edge & older browsers don't support the :scope pseudo-class. 3650 // Support: Safari 6.0 only 3651 // Safari 6.0 supports :scope but it's an alias of :root there. 3652 support.scope = assert( function( el ) { 3653 docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); 3654 return typeof el.querySelectorAll !== "undefined" && 3655 !el.querySelectorAll( ":scope fieldset div" ).length; 3656 } ); 3657 3658 /* Attributes 3659 ---------------------------------------------------------------------- */ 3660 3661 // Support: IE<8 3662 // Verify that getAttribute really returns attributes and not properties 3663 // (excepting IE8 booleans) 3664 support.attributes = assert( function( el ) { 3665 el.className = "i"; 3666 return !el.getAttribute( "className" ); 3667 } ); 3668 3669 /* getElement(s)By* 3670 ---------------------------------------------------------------------- */ 3671 3672 // Check if getElementsByTagName("*") returns only elements 3673 support.getElementsByTagName = assert( function( el ) { 3674 el.appendChild( document.createComment( "" ) ); 3675 return !el.getElementsByTagName( "*" ).length; 3676 } ); 3677 3678 // Support: IE<9 3679 support.getElementsByClassName = rnative.test( document.getElementsByClassName ); 3680 3681 // Support: IE<10 3682 // Check if getElementById returns elements by name 3683 // The broken getElementById methods don't pick up programmatically-set names, 3684 // so use a roundabout getElementsByName test 3685 support.getById = assert( function( el ) { 3686 docElem.appendChild( el ).id = expando; 3687 return !document.getElementsByName || !document.getElementsByName( expando ).length; 3688 } ); 3689 3690 // ID filter and find 3691 if ( support.getById ) { 3692 Expr.filter[ "ID" ] = function( id ) { 3693 var attrId = id.replace( runescape, funescape ); 3694 return function( elem ) { 3695 return elem.getAttribute( "id" ) === attrId; 3696 }; 3697 }; 3698 Expr.find[ "ID" ] = function( id, context ) { 3699 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 3700 var elem = context.getElementById( id ); 3701 return elem ? [ elem ] : []; 3702 } 3703 }; 3704 } else { 3705 Expr.filter[ "ID" ] = function( id ) { 3706 var attrId = id.replace( runescape, funescape ); 3707 return function( elem ) { 3708 var node = typeof elem.getAttributeNode !== "undefined" && 3709 elem.getAttributeNode( "id" ); 3710 return node && node.value === attrId; 3711 }; 3712 }; 3713 3714 // Support: IE 6 - 7 only 3715 // getElementById is not reliable as a find shortcut 3716 Expr.find[ "ID" ] = function( id, context ) { 3717 if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { 3718 var node, i, elems, 3719 elem = context.getElementById( id ); 3720 3721 if ( elem ) { 3722 3723 // Verify the id attribute 3724 node = elem.getAttributeNode( "id" ); 3725 if ( node && node.value === id ) { 3726 return [ elem ]; 3727 } 3728 3729 // Fall back on getElementsByName 3730 elems = context.getElementsByName( id ); 3731 i = 0; 3732 while ( ( elem = elems[ i++ ] ) ) { 3733 node = elem.getAttributeNode( "id" ); 3734 if ( node && node.value === id ) { 3735 return [ elem ]; 3736 } 3737 } 3738 } 3739 3740 return []; 3741 } 3742 }; 3743 } 3744 3745 // Tag 3746 Expr.find[ "TAG" ] = support.getElementsByTagName ? 3747 function( tag, context ) { 3748 if ( typeof context.getElementsByTagName !== "undefined" ) { 3749 return context.getElementsByTagName( tag ); 3750 3751 // DocumentFragment nodes don't have gEBTN 3752 } else if ( support.qsa ) { 3753 return context.querySelectorAll( tag ); 3754 } 3755 } : 3756 3757 function( tag, context ) { 3758 var elem, 3759 tmp = [], 3760 i = 0, 3761 3762 // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too 3763 results = context.getElementsByTagName( tag ); 3764 3765 // Filter out possible comments 3766 if ( tag === "*" ) { 3767 while ( ( elem = results[ i++ ] ) ) { 3768 if ( elem.nodeType === 1 ) { 3769 tmp.push( elem ); 3770 } 3771 } 3772 3773 return tmp; 3774 } 3775 return results; 3776 }; 3777 3778 // Class 3779 Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { 3780 if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { 3781 return context.getElementsByClassName( className ); 3782 } 3783 }; 3784 3785 /* QSA/matchesSelector 3786 ---------------------------------------------------------------------- */ 3787 3788 // QSA and matchesSelector support 3789 3790 // matchesSelector(:active) reports false when true (IE9/Opera 11.5) 3791 rbuggyMatches = []; 3792 3793 // qSa(:focus) reports false when true (Chrome 21) 3794 // We allow this because of a bug in IE8/9 that throws an error 3795 // whenever `document.activeElement` is accessed on an iframe 3796 // So, we allow :focus to pass through QSA all the time to avoid the IE error 3797 // See https://bugs.jquery.com/ticket/13378 3798 rbuggyQSA = []; 3799 3800 if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { 3801 3802 // Build QSA regex 3803 // Regex strategy adopted from Diego Perini 3804 assert( function( el ) { 3805 3806 var input; 3807 3808 // Select is set to empty string on purpose 3809 // This is to test IE's treatment of not explicitly 3810 // setting a boolean content attribute, 3811 // since its presence should be enough 3812 // https://bugs.jquery.com/ticket/12359 3813 docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" + 3814 "<select id='" + expando + "-\r\\' msallowcapture=''>" + 3815 "<option selected=''></option></select>"; 3816 3817 // Support: IE8, Opera 11-12.16 3818 // Nothing should be selected when empty strings follow ^= or $= or *= 3819 // The test attribute must be unknown in Opera but "safe" for WinRT 3820 // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section 3821 if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { 3822 rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); 3823 } 3824 3825 // Support: IE8 3826 // Boolean attributes and "value" are not treated correctly 3827 if ( !el.querySelectorAll( "[selected]" ).length ) { 3828 rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); 3829 } 3830 3831 // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ 3832 if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { 3833 rbuggyQSA.push( "~=" ); 3834 } 3835 3836 // Support: IE 11+, Edge 15 - 18+ 3837 // IE 11/Edge don't find elements on a `[name='']` query in some cases. 3838 // Adding a temporary attribute to the document before the selection works 3839 // around the issue. 3840 // Interestingly, IE 10 & older don't seem to have the issue. 3841 input = document.createElement( "input" ); 3842 input.setAttribute( "name", "" ); 3843 el.appendChild( input ); 3844 if ( !el.querySelectorAll( "[name='']" ).length ) { 3845 rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + 3846 whitespace + "*(?:''|\"\")" ); 3847 } 3848 3849 // Webkit/Opera - :checked should return selected option elements 3850 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 3851 // IE8 throws error here and will not see later tests 3852 if ( !el.querySelectorAll( ":checked" ).length ) { 3853 rbuggyQSA.push( ":checked" ); 3854 } 3855 3856 // Support: Safari 8+, iOS 8+ 3857 // https://bugs.webkit.org/show_bug.cgi?id=136851 3858 // In-page `selector#id sibling-combinator selector` fails 3859 if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { 3860 rbuggyQSA.push( ".#.+[+~]" ); 3861 } 3862 3863 // Support: Firefox <=3.6 - 5 only 3864 // Old Firefox doesn't throw on a badly-escaped identifier. 3865 el.querySelectorAll( "\\\f" ); 3866 rbuggyQSA.push( "[\\r\\n\\f]" ); 3867 } ); 3868 3869 assert( function( el ) { 3870 el.innerHTML = "<a href='' disabled='disabled'></a>" + 3871 "<select disabled='disabled'><option/></select>"; 3872 3873 // Support: Windows 8 Native Apps 3874 // The type and name attributes are restricted during .innerHTML assignment 3875 var input = document.createElement( "input" ); 3876 input.setAttribute( "type", "hidden" ); 3877 el.appendChild( input ).setAttribute( "name", "D" ); 3878 3879 // Support: IE8 3880 // Enforce case-sensitivity of name attribute 3881 if ( el.querySelectorAll( "[name=d]" ).length ) { 3882 rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); 3883 } 3884 3885 // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) 3886 // IE8 throws error here and will not see later tests 3887 if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { 3888 rbuggyQSA.push( ":enabled", ":disabled" ); 3889 } 3890 3891 // Support: IE9-11+ 3892 // IE's :disabled selector does not pick up the children of disabled fieldsets 3893 docElem.appendChild( el ).disabled = true; 3894 if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { 3895 rbuggyQSA.push( ":enabled", ":disabled" ); 3896 } 3897 3898 // Support: Opera 10 - 11 only 3899 // Opera 10-11 does not throw on post-comma invalid pseudos 3900 el.querySelectorAll( "*,:x" ); 3901 rbuggyQSA.push( ",.*:" ); 3902 } ); 3903 } 3904 3905 if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || 3906 docElem.webkitMatchesSelector || 3907 docElem.mozMatchesSelector || 3908 docElem.oMatchesSelector || 3909 docElem.msMatchesSelector ) ) ) ) { 3910 3911 assert( function( el ) { 3912 3913 // Check to see if it's possible to do matchesSelector 3914 // on a disconnected node (IE 9) 3915 support.disconnectedMatch = matches.call( el, "*" ); 3916 3917 // This should fail with an exception 3918 // Gecko does not error, returns false instead 3919 matches.call( el, "[s!='']:x" ); 3920 rbuggyMatches.push( "!=", pseudos ); 3921 } ); 3922 } 3923 3924 rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); 3925 rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); 3926 3927 /* Contains 3928 ---------------------------------------------------------------------- */ 3929 hasCompare = rnative.test( docElem.compareDocumentPosition ); 3930 3931 // Element contains another 3932 // Purposefully self-exclusive 3933 // As in, an element does not contain itself 3934 contains = hasCompare || rnative.test( docElem.contains ) ? 3935 function( a, b ) { 3936 var adown = a.nodeType === 9 ? a.documentElement : a, 3937 bup = b && b.parentNode; 3938 return a === bup || !!( bup && bup.nodeType === 1 && ( 3939 adown.contains ? 3940 adown.contains( bup ) : 3941 a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 3942 ) ); 3943 } : 3944 function( a, b ) { 3945 if ( b ) { 3946 while ( ( b = b.parentNode ) ) { 3947 if ( b === a ) { 3948 return true; 3949 } 3950 } 3951 } 3952 return false; 3953 }; 3954 3955 /* Sorting 3956 ---------------------------------------------------------------------- */ 3957 3958 // Document order sorting 3959 sortOrder = hasCompare ? 3960 function( a, b ) { 3961 3962 // Flag for duplicate removal 3963 if ( a === b ) { 3964 hasDuplicate = true; 3965 return 0; 3966 } 3967 3968 // Sort on method existence if only one input has compareDocumentPosition 3969 var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; 3970 if ( compare ) { 3971 return compare; 3972 } 3973 3974 // Calculate position if both inputs belong to the same document 3975 // Support: IE 11+, Edge 17 - 18+ 3976 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3977 // two documents; shallow comparisons work. 3978 // eslint-disable-next-line eqeqeq 3979 compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? 3980 a.compareDocumentPosition( b ) : 3981 3982 // Otherwise we know they are disconnected 3983 1; 3984 3985 // Disconnected nodes 3986 if ( compare & 1 || 3987 ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { 3988 3989 // Choose the first element that is related to our preferred document 3990 // Support: IE 11+, Edge 17 - 18+ 3991 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 3992 // two documents; shallow comparisons work. 3993 // eslint-disable-next-line eqeqeq 3994 if ( a == document || a.ownerDocument == preferredDoc && 3995 contains( preferredDoc, a ) ) { 3996 return -1; 3997 } 3998 3999 // Support: IE 11+, Edge 17 - 18+ 4000 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 4001 // two documents; shallow comparisons work. 4002 // eslint-disable-next-line eqeqeq 4003 if ( b == document || b.ownerDocument == preferredDoc && 4004 contains( preferredDoc, b ) ) { 4005 return 1; 4006 } 4007 4008 // Maintain original order 4009 return sortInput ? 4010 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 4011 0; 4012 } 4013 4014 return compare & 4 ? -1 : 1; 4015 } : 4016 function( a, b ) { 4017 4018 // Exit early if the nodes are identical 4019 if ( a === b ) { 4020 hasDuplicate = true; 4021 return 0; 4022 } 4023 4024 var cur, 4025 i = 0, 4026 aup = a.parentNode, 4027 bup = b.parentNode, 4028 ap = [ a ], 4029 bp = [ b ]; 4030 4031 // Parentless nodes are either documents or disconnected 4032 if ( !aup || !bup ) { 4033 4034 // Support: IE 11+, Edge 17 - 18+ 4035 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 4036 // two documents; shallow comparisons work. 4037 /* eslint-disable eqeqeq */ 4038 return a == document ? -1 : 4039 b == document ? 1 : 4040 /* eslint-enable eqeqeq */ 4041 aup ? -1 : 4042 bup ? 1 : 4043 sortInput ? 4044 ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 4045 0; 4046 4047 // If the nodes are siblings, we can do a quick check 4048 } else if ( aup === bup ) { 4049 return siblingCheck( a, b ); 4050 } 4051 4052 // Otherwise we need full lists of their ancestors for comparison 4053 cur = a; 4054 while ( ( cur = cur.parentNode ) ) { 4055 ap.unshift( cur ); 4056 } 4057 cur = b; 4058 while ( ( cur = cur.parentNode ) ) { 4059 bp.unshift( cur ); 4060 } 4061 4062 // Walk down the tree looking for a discrepancy 4063 while ( ap[ i ] === bp[ i ] ) { 4064 i++; 4065 } 4066 4067 return i ? 4068 4069 // Do a sibling check if the nodes have a common ancestor 4070 siblingCheck( ap[ i ], bp[ i ] ) : 4071 4072 // Otherwise nodes in our document sort first 4073 // Support: IE 11+, Edge 17 - 18+ 4074 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 4075 // two documents; shallow comparisons work. 4076 /* eslint-disable eqeqeq */ 4077 ap[ i ] == preferredDoc ? -1 : 4078 bp[ i ] == preferredDoc ? 1 : 4079 /* eslint-enable eqeqeq */ 4080 0; 4081 }; 4082 4083 return document; 4084}; 4085 4086Sizzle.matches = function( expr, elements ) { 4087 return Sizzle( expr, null, null, elements ); 4088}; 4089 4090Sizzle.matchesSelector = function( elem, expr ) { 4091 setDocument( elem ); 4092 4093 if ( support.matchesSelector && documentIsHTML && 4094 !nonnativeSelectorCache[ expr + " " ] && 4095 ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && 4096 ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { 4097 4098 try { 4099 var ret = matches.call( elem, expr ); 4100 4101 // IE 9's matchesSelector returns false on disconnected nodes 4102 if ( ret || support.disconnectedMatch || 4103 4104 // As well, disconnected nodes are said to be in a document 4105 // fragment in IE 9 4106 elem.document && elem.document.nodeType !== 11 ) { 4107 return ret; 4108 } 4109 } catch ( e ) { 4110 nonnativeSelectorCache( expr, true ); 4111 } 4112 } 4113 4114 return Sizzle( expr, document, null, [ elem ] ).length > 0; 4115}; 4116 4117Sizzle.contains = function( context, elem ) { 4118 4119 // Set document vars if needed 4120 // Support: IE 11+, Edge 17 - 18+ 4121 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 4122 // two documents; shallow comparisons work. 4123 // eslint-disable-next-line eqeqeq 4124 if ( ( context.ownerDocument || context ) != document ) { 4125 setDocument( context ); 4126 } 4127 return contains( context, elem ); 4128}; 4129 4130Sizzle.attr = function( elem, name ) { 4131 4132 // Set document vars if needed 4133 // Support: IE 11+, Edge 17 - 18+ 4134 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 4135 // two documents; shallow comparisons work. 4136 // eslint-disable-next-line eqeqeq 4137 if ( ( elem.ownerDocument || elem ) != document ) { 4138 setDocument( elem ); 4139 } 4140 4141 var fn = Expr.attrHandle[ name.toLowerCase() ], 4142 4143 // Don't get fooled by Object.prototype properties (jQuery #13807) 4144 val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? 4145 fn( elem, name, !documentIsHTML ) : 4146 undefined; 4147 4148 return val !== undefined ? 4149 val : 4150 support.attributes || !documentIsHTML ? 4151 elem.getAttribute( name ) : 4152 ( val = elem.getAttributeNode( name ) ) && val.specified ? 4153 val.value : 4154 null; 4155}; 4156 4157Sizzle.escape = function( sel ) { 4158 return ( sel + "" ).replace( rcssescape, fcssescape ); 4159}; 4160 4161Sizzle.error = function( msg ) { 4162 throw new Error( "Syntax error, unrecognized expression: " + msg ); 4163}; 4164 4165/** 4166 * Document sorting and removing duplicates 4167 * @param {ArrayLike} results 4168 */ 4169Sizzle.uniqueSort = function( results ) { 4170 var elem, 4171 duplicates = [], 4172 j = 0, 4173 i = 0; 4174 4175 // Unless we *know* we can detect duplicates, assume their presence 4176 hasDuplicate = !support.detectDuplicates; 4177 sortInput = !support.sortStable && results.slice( 0 ); 4178 results.sort( sortOrder ); 4179 4180 if ( hasDuplicate ) { 4181 while ( ( elem = results[ i++ ] ) ) { 4182 if ( elem === results[ i ] ) { 4183 j = duplicates.push( i ); 4184 } 4185 } 4186 while ( j-- ) { 4187 results.splice( duplicates[ j ], 1 ); 4188 } 4189 } 4190 4191 // Clear input after sorting to release objects 4192 // See https://github.com/jquery/sizzle/pull/225 4193 sortInput = null; 4194 4195 return results; 4196}; 4197 4198/** 4199 * Utility function for retrieving the text value of an array of DOM nodes 4200 * @param {Array|Element} elem 4201 */ 4202getText = Sizzle.getText = function( elem ) { 4203 var node, 4204 ret = "", 4205 i = 0, 4206 nodeType = elem.nodeType; 4207 4208 if ( !nodeType ) { 4209 4210 // If no nodeType, this is expected to be an array 4211 while ( ( node = elem[ i++ ] ) ) { 4212 4213 // Do not traverse comment nodes 4214 ret += getText( node ); 4215 } 4216 } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { 4217 4218 // Use textContent for elements 4219 // innerText usage removed for consistency of new lines (jQuery #11153) 4220 if ( typeof elem.textContent === "string" ) { 4221 return elem.textContent; 4222 } else { 4223 4224 // Traverse its children 4225 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 4226 ret += getText( elem ); 4227 } 4228 } 4229 } else if ( nodeType === 3 || nodeType === 4 ) { 4230 return elem.nodeValue; 4231 } 4232 4233 // Do not include comment or processing instruction nodes 4234 4235 return ret; 4236}; 4237 4238Expr = Sizzle.selectors = { 4239 4240 // Can be adjusted by the user 4241 cacheLength: 50, 4242 4243 createPseudo: markFunction, 4244 4245 match: matchExpr, 4246 4247 attrHandle: {}, 4248 4249 find: {}, 4250 4251 relative: { 4252 ">": { dir: "parentNode", first: true }, 4253 " ": { dir: "parentNode" }, 4254 "+": { dir: "previousSibling", first: true }, 4255 "~": { dir: "previousSibling" } 4256 }, 4257 4258 preFilter: { 4259 "ATTR": function( match ) { 4260 match[ 1 ] = match[ 1 ].replace( runescape, funescape ); 4261 4262 // Move the given value to match[3] whether quoted or unquoted 4263 match[ 3 ] = ( match[ 3 ] || match[ 4 ] || 4264 match[ 5 ] || "" ).replace( runescape, funescape ); 4265 4266 if ( match[ 2 ] === "~=" ) { 4267 match[ 3 ] = " " + match[ 3 ] + " "; 4268 } 4269 4270 return match.slice( 0, 4 ); 4271 }, 4272 4273 "CHILD": function( match ) { 4274 4275 /* matches from matchExpr["CHILD"] 4276 1 type (only|nth|...) 4277 2 what (child|of-type) 4278 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 4279 4 xn-component of xn+y argument ([+-]?\d*n|) 4280 5 sign of xn-component 4281 6 x of xn-component 4282 7 sign of y-component 4283 8 y of y-component 4284 */ 4285 match[ 1 ] = match[ 1 ].toLowerCase(); 4286 4287 if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { 4288 4289 // nth-* requires argument 4290 if ( !match[ 3 ] ) { 4291 Sizzle.error( match[ 0 ] ); 4292 } 4293 4294 // numeric x and y parameters for Expr.filter.CHILD 4295 // remember that false/true cast respectively to 0/1 4296 match[ 4 ] = +( match[ 4 ] ? 4297 match[ 5 ] + ( match[ 6 ] || 1 ) : 4298 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); 4299 match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); 4300 4301 // other types prohibit arguments 4302 } else if ( match[ 3 ] ) { 4303 Sizzle.error( match[ 0 ] ); 4304 } 4305 4306 return match; 4307 }, 4308 4309 "PSEUDO": function( match ) { 4310 var excess, 4311 unquoted = !match[ 6 ] && match[ 2 ]; 4312 4313 if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { 4314 return null; 4315 } 4316 4317 // Accept quoted arguments as-is 4318 if ( match[ 3 ] ) { 4319 match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; 4320 4321 // Strip excess characters from unquoted arguments 4322 } else if ( unquoted && rpseudo.test( unquoted ) && 4323 4324 // Get excess from tokenize (recursively) 4325 ( excess = tokenize( unquoted, true ) ) && 4326 4327 // advance to the next closing parenthesis 4328 ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { 4329 4330 // excess is a negative index 4331 match[ 0 ] = match[ 0 ].slice( 0, excess ); 4332 match[ 2 ] = unquoted.slice( 0, excess ); 4333 } 4334 4335 // Return only captures needed by the pseudo filter method (type and argument) 4336 return match.slice( 0, 3 ); 4337 } 4338 }, 4339 4340 filter: { 4341 4342 "TAG": function( nodeNameSelector ) { 4343 var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); 4344 return nodeNameSelector === "*" ? 4345 function() { 4346 return true; 4347 } : 4348 function( elem ) { 4349 return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; 4350 }; 4351 }, 4352 4353 "CLASS": function( className ) { 4354 var pattern = classCache[ className + " " ]; 4355 4356 return pattern || 4357 ( pattern = new RegExp( "(^|" + whitespace + 4358 ")" + className + "(" + whitespace + "|$)" ) ) && classCache( 4359 className, function( elem ) { 4360 return pattern.test( 4361 typeof elem.className === "string" && elem.className || 4362 typeof elem.getAttribute !== "undefined" && 4363 elem.getAttribute( "class" ) || 4364 "" 4365 ); 4366 } ); 4367 }, 4368 4369 "ATTR": function( name, operator, check ) { 4370 return function( elem ) { 4371 var result = Sizzle.attr( elem, name ); 4372 4373 if ( result == null ) { 4374 return operator === "!="; 4375 } 4376 if ( !operator ) { 4377 return true; 4378 } 4379 4380 result += ""; 4381 4382 /* eslint-disable max-len */ 4383 4384 return operator === "=" ? result === check : 4385 operator === "!=" ? result !== check : 4386 operator === "^=" ? check && result.indexOf( check ) === 0 : 4387 operator === "*=" ? check && result.indexOf( check ) > -1 : 4388 operator === "$=" ? check && result.slice( -check.length ) === check : 4389 operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : 4390 operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : 4391 false; 4392 /* eslint-enable max-len */ 4393 4394 }; 4395 }, 4396 4397 "CHILD": function( type, what, _argument, first, last ) { 4398 var simple = type.slice( 0, 3 ) !== "nth", 4399 forward = type.slice( -4 ) !== "last", 4400 ofType = what === "of-type"; 4401 4402 return first === 1 && last === 0 ? 4403 4404 // Shortcut for :nth-*(n) 4405 function( elem ) { 4406 return !!elem.parentNode; 4407 } : 4408 4409 function( elem, _context, xml ) { 4410 var cache, uniqueCache, outerCache, node, nodeIndex, start, 4411 dir = simple !== forward ? "nextSibling" : "previousSibling", 4412 parent = elem.parentNode, 4413 name = ofType && elem.nodeName.toLowerCase(), 4414 useCache = !xml && !ofType, 4415 diff = false; 4416 4417 if ( parent ) { 4418 4419 // :(first|last|only)-(child|of-type) 4420 if ( simple ) { 4421 while ( dir ) { 4422 node = elem; 4423 while ( ( node = node[ dir ] ) ) { 4424 if ( ofType ? 4425 node.nodeName.toLowerCase() === name : 4426 node.nodeType === 1 ) { 4427 4428 return false; 4429 } 4430 } 4431 4432 // Reverse direction for :only-* (if we haven't yet done so) 4433 start = dir = type === "only" && !start && "nextSibling"; 4434 } 4435 return true; 4436 } 4437 4438 start = [ forward ? parent.firstChild : parent.lastChild ]; 4439 4440 // non-xml :nth-child(...) stores cache data on `parent` 4441 if ( forward && useCache ) { 4442 4443 // Seek `elem` from a previously-cached index 4444 4445 // ...in a gzip-friendly way 4446 node = parent; 4447 outerCache = node[ expando ] || ( node[ expando ] = {} ); 4448 4449 // Support: IE <9 only 4450 // Defend against cloned attroperties (jQuery gh-1709) 4451 uniqueCache = outerCache[ node.uniqueID ] || 4452 ( outerCache[ node.uniqueID ] = {} ); 4453 4454 cache = uniqueCache[ type ] || []; 4455 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 4456 diff = nodeIndex && cache[ 2 ]; 4457 node = nodeIndex && parent.childNodes[ nodeIndex ]; 4458 4459 while ( ( node = ++nodeIndex && node && node[ dir ] || 4460 4461 // Fallback to seeking `elem` from the start 4462 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 4463 4464 // When found, cache indexes on `parent` and break 4465 if ( node.nodeType === 1 && ++diff && node === elem ) { 4466 uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; 4467 break; 4468 } 4469 } 4470 4471 } else { 4472 4473 // Use previously-cached element index if available 4474 if ( useCache ) { 4475 4476 // ...in a gzip-friendly way 4477 node = elem; 4478 outerCache = node[ expando ] || ( node[ expando ] = {} ); 4479 4480 // Support: IE <9 only 4481 // Defend against cloned attroperties (jQuery gh-1709) 4482 uniqueCache = outerCache[ node.uniqueID ] || 4483 ( outerCache[ node.uniqueID ] = {} ); 4484 4485 cache = uniqueCache[ type ] || []; 4486 nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; 4487 diff = nodeIndex; 4488 } 4489 4490 // xml :nth-child(...) 4491 // or :nth-last-child(...) or :nth(-last)?-of-type(...) 4492 if ( diff === false ) { 4493 4494 // Use the same loop as above to seek `elem` from the start 4495 while ( ( node = ++nodeIndex && node && node[ dir ] || 4496 ( diff = nodeIndex = 0 ) || start.pop() ) ) { 4497 4498 if ( ( ofType ? 4499 node.nodeName.toLowerCase() === name : 4500 node.nodeType === 1 ) && 4501 ++diff ) { 4502 4503 // Cache the index of each encountered element 4504 if ( useCache ) { 4505 outerCache = node[ expando ] || 4506 ( node[ expando ] = {} ); 4507 4508 // Support: IE <9 only 4509 // Defend against cloned attroperties (jQuery gh-1709) 4510 uniqueCache = outerCache[ node.uniqueID ] || 4511 ( outerCache[ node.uniqueID ] = {} ); 4512 4513 uniqueCache[ type ] = [ dirruns, diff ]; 4514 } 4515 4516 if ( node === elem ) { 4517 break; 4518 } 4519 } 4520 } 4521 } 4522 } 4523 4524 // Incorporate the offset, then check against cycle size 4525 diff -= last; 4526 return diff === first || ( diff % first === 0 && diff / first >= 0 ); 4527 } 4528 }; 4529 }, 4530 4531 "PSEUDO": function( pseudo, argument ) { 4532 4533 // pseudo-class names are case-insensitive 4534 // http://www.w3.org/TR/selectors/#pseudo-classes 4535 // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters 4536 // Remember that setFilters inherits from pseudos 4537 var args, 4538 fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || 4539 Sizzle.error( "unsupported pseudo: " + pseudo ); 4540 4541 // The user may use createPseudo to indicate that 4542 // arguments are needed to create the filter function 4543 // just as Sizzle does 4544 if ( fn[ expando ] ) { 4545 return fn( argument ); 4546 } 4547 4548 // But maintain support for old signatures 4549 if ( fn.length > 1 ) { 4550 args = [ pseudo, pseudo, "", argument ]; 4551 return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? 4552 markFunction( function( seed, matches ) { 4553 var idx, 4554 matched = fn( seed, argument ), 4555 i = matched.length; 4556 while ( i-- ) { 4557 idx = indexOf( seed, matched[ i ] ); 4558 seed[ idx ] = !( matches[ idx ] = matched[ i ] ); 4559 } 4560 } ) : 4561 function( elem ) { 4562 return fn( elem, 0, args ); 4563 }; 4564 } 4565 4566 return fn; 4567 } 4568 }, 4569 4570 pseudos: { 4571 4572 // Potentially complex pseudos 4573 "not": markFunction( function( selector ) { 4574 4575 // Trim the selector passed to compile 4576 // to avoid treating leading and trailing 4577 // spaces as combinators 4578 var input = [], 4579 results = [], 4580 matcher = compile( selector.replace( rtrim, "$1" ) ); 4581 4582 return matcher[ expando ] ? 4583 markFunction( function( seed, matches, _context, xml ) { 4584 var elem, 4585 unmatched = matcher( seed, null, xml, [] ), 4586 i = seed.length; 4587 4588 // Match elements unmatched by `matcher` 4589 while ( i-- ) { 4590 if ( ( elem = unmatched[ i ] ) ) { 4591 seed[ i ] = !( matches[ i ] = elem ); 4592 } 4593 } 4594 } ) : 4595 function( elem, _context, xml ) { 4596 input[ 0 ] = elem; 4597 matcher( input, null, xml, results ); 4598 4599 // Don't keep the element (issue #299) 4600 input[ 0 ] = null; 4601 return !results.pop(); 4602 }; 4603 } ), 4604 4605 "has": markFunction( function( selector ) { 4606 return function( elem ) { 4607 return Sizzle( selector, elem ).length > 0; 4608 }; 4609 } ), 4610 4611 "contains": markFunction( function( text ) { 4612 text = text.replace( runescape, funescape ); 4613 return function( elem ) { 4614 return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; 4615 }; 4616 } ), 4617 4618 // "Whether an element is represented by a :lang() selector 4619 // is based solely on the element's language value 4620 // being equal to the identifier C, 4621 // or beginning with the identifier C immediately followed by "-". 4622 // The matching of C against the element's language value is performed case-insensitively. 4623 // The identifier C does not have to be a valid language name." 4624 // http://www.w3.org/TR/selectors/#lang-pseudo 4625 "lang": markFunction( function( lang ) { 4626 4627 // lang value must be a valid identifier 4628 if ( !ridentifier.test( lang || "" ) ) { 4629 Sizzle.error( "unsupported lang: " + lang ); 4630 } 4631 lang = lang.replace( runescape, funescape ).toLowerCase(); 4632 return function( elem ) { 4633 var elemLang; 4634 do { 4635 if ( ( elemLang = documentIsHTML ? 4636 elem.lang : 4637 elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { 4638 4639 elemLang = elemLang.toLowerCase(); 4640 return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; 4641 } 4642 } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); 4643 return false; 4644 }; 4645 } ), 4646 4647 // Miscellaneous 4648 "target": function( elem ) { 4649 var hash = window.location && window.location.hash; 4650 return hash && hash.slice( 1 ) === elem.id; 4651 }, 4652 4653 "root": function( elem ) { 4654 return elem === docElem; 4655 }, 4656 4657 "focus": function( elem ) { 4658 return elem === document.activeElement && 4659 ( !document.hasFocus || document.hasFocus() ) && 4660 !!( elem.type || elem.href || ~elem.tabIndex ); 4661 }, 4662 4663 // Boolean properties 4664 "enabled": createDisabledPseudo( false ), 4665 "disabled": createDisabledPseudo( true ), 4666 4667 "checked": function( elem ) { 4668 4669 // In CSS3, :checked should return both checked and selected elements 4670 // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked 4671 var nodeName = elem.nodeName.toLowerCase(); 4672 return ( nodeName === "input" && !!elem.checked ) || 4673 ( nodeName === "option" && !!elem.selected ); 4674 }, 4675 4676 "selected": function( elem ) { 4677 4678 // Accessing this property makes selected-by-default 4679 // options in Safari work properly 4680 if ( elem.parentNode ) { 4681 // eslint-disable-next-line no-unused-expressions 4682 elem.parentNode.selectedIndex; 4683 } 4684 4685 return elem.selected === true; 4686 }, 4687 4688 // Contents 4689 "empty": function( elem ) { 4690 4691 // http://www.w3.org/TR/selectors/#empty-pseudo 4692 // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), 4693 // but not by others (comment: 8; processing instruction: 7; etc.) 4694 // nodeType < 6 works because attributes (2) do not appear as children 4695 for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { 4696 if ( elem.nodeType < 6 ) { 4697 return false; 4698 } 4699 } 4700 return true; 4701 }, 4702 4703 "parent": function( elem ) { 4704 return !Expr.pseudos[ "empty" ]( elem ); 4705 }, 4706 4707 // Element/input types 4708 "header": function( elem ) { 4709 return rheader.test( elem.nodeName ); 4710 }, 4711 4712 "input": function( elem ) { 4713 return rinputs.test( elem.nodeName ); 4714 }, 4715 4716 "button": function( elem ) { 4717 var name = elem.nodeName.toLowerCase(); 4718 return name === "input" && elem.type === "button" || name === "button"; 4719 }, 4720 4721 "text": function( elem ) { 4722 var attr; 4723 return elem.nodeName.toLowerCase() === "input" && 4724 elem.type === "text" && 4725 4726 // Support: IE<8 4727 // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" 4728 ( ( attr = elem.getAttribute( "type" ) ) == null || 4729 attr.toLowerCase() === "text" ); 4730 }, 4731 4732 // Position-in-collection 4733 "first": createPositionalPseudo( function() { 4734 return [ 0 ]; 4735 } ), 4736 4737 "last": createPositionalPseudo( function( _matchIndexes, length ) { 4738 return [ length - 1 ]; 4739 } ), 4740 4741 "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { 4742 return [ argument < 0 ? argument + length : argument ]; 4743 } ), 4744 4745 "even": createPositionalPseudo( function( matchIndexes, length ) { 4746 var i = 0; 4747 for ( ; i < length; i += 2 ) { 4748 matchIndexes.push( i ); 4749 } 4750 return matchIndexes; 4751 } ), 4752 4753 "odd": createPositionalPseudo( function( matchIndexes, length ) { 4754 var i = 1; 4755 for ( ; i < length; i += 2 ) { 4756 matchIndexes.push( i ); 4757 } 4758 return matchIndexes; 4759 } ), 4760 4761 "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { 4762 var i = argument < 0 ? 4763 argument + length : 4764 argument > length ? 4765 length : 4766 argument; 4767 for ( ; --i >= 0; ) { 4768 matchIndexes.push( i ); 4769 } 4770 return matchIndexes; 4771 } ), 4772 4773 "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { 4774 var i = argument < 0 ? argument + length : argument; 4775 for ( ; ++i < length; ) { 4776 matchIndexes.push( i ); 4777 } 4778 return matchIndexes; 4779 } ) 4780 } 4781}; 4782 4783Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; 4784 4785// Add button/input type pseudos 4786for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { 4787 Expr.pseudos[ i ] = createInputPseudo( i ); 4788} 4789for ( i in { submit: true, reset: true } ) { 4790 Expr.pseudos[ i ] = createButtonPseudo( i ); 4791} 4792 4793// Easy API for creating new setFilters 4794function setFilters() {} 4795setFilters.prototype = Expr.filters = Expr.pseudos; 4796Expr.setFilters = new setFilters(); 4797 4798tokenize = Sizzle.tokenize = function( selector, parseOnly ) { 4799 var matched, match, tokens, type, 4800 soFar, groups, preFilters, 4801 cached = tokenCache[ selector + " " ]; 4802 4803 if ( cached ) { 4804 return parseOnly ? 0 : cached.slice( 0 ); 4805 } 4806 4807 soFar = selector; 4808 groups = []; 4809 preFilters = Expr.preFilter; 4810 4811 while ( soFar ) { 4812 4813 // Comma and first run 4814 if ( !matched || ( match = rcomma.exec( soFar ) ) ) { 4815 if ( match ) { 4816 4817 // Don't consume trailing commas as valid 4818 soFar = soFar.slice( match[ 0 ].length ) || soFar; 4819 } 4820 groups.push( ( tokens = [] ) ); 4821 } 4822 4823 matched = false; 4824 4825 // Combinators 4826 if ( ( match = rcombinators.exec( soFar ) ) ) { 4827 matched = match.shift(); 4828 tokens.push( { 4829 value: matched, 4830 4831 // Cast descendant combinators to space 4832 type: match[ 0 ].replace( rtrim, " " ) 4833 } ); 4834 soFar = soFar.slice( matched.length ); 4835 } 4836 4837 // Filters 4838 for ( type in Expr.filter ) { 4839 if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || 4840 ( match = preFilters[ type ]( match ) ) ) ) { 4841 matched = match.shift(); 4842 tokens.push( { 4843 value: matched, 4844 type: type, 4845 matches: match 4846 } ); 4847 soFar = soFar.slice( matched.length ); 4848 } 4849 } 4850 4851 if ( !matched ) { 4852 break; 4853 } 4854 } 4855 4856 // Return the length of the invalid excess 4857 // if we're just parsing 4858 // Otherwise, throw an error or return tokens 4859 return parseOnly ? 4860 soFar.length : 4861 soFar ? 4862 Sizzle.error( selector ) : 4863 4864 // Cache the tokens 4865 tokenCache( selector, groups ).slice( 0 ); 4866}; 4867 4868function toSelector( tokens ) { 4869 var i = 0, 4870 len = tokens.length, 4871 selector = ""; 4872 for ( ; i < len; i++ ) { 4873 selector += tokens[ i ].value; 4874 } 4875 return selector; 4876} 4877 4878function addCombinator( matcher, combinator, base ) { 4879 var dir = combinator.dir, 4880 skip = combinator.next, 4881 key = skip || dir, 4882 checkNonElements = base && key === "parentNode", 4883 doneName = done++; 4884 4885 return combinator.first ? 4886 4887 // Check against closest ancestor/preceding element 4888 function( elem, context, xml ) { 4889 while ( ( elem = elem[ dir ] ) ) { 4890 if ( elem.nodeType === 1 || checkNonElements ) { 4891 return matcher( elem, context, xml ); 4892 } 4893 } 4894 return false; 4895 } : 4896 4897 // Check against all ancestor/preceding elements 4898 function( elem, context, xml ) { 4899 var oldCache, uniqueCache, outerCache, 4900 newCache = [ dirruns, doneName ]; 4901 4902 // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching 4903 if ( xml ) { 4904 while ( ( elem = elem[ dir ] ) ) { 4905 if ( elem.nodeType === 1 || checkNonElements ) { 4906 if ( matcher( elem, context, xml ) ) { 4907 return true; 4908 } 4909 } 4910 } 4911 } else { 4912 while ( ( elem = elem[ dir ] ) ) { 4913 if ( elem.nodeType === 1 || checkNonElements ) { 4914 outerCache = elem[ expando ] || ( elem[ expando ] = {} ); 4915 4916 // Support: IE <9 only 4917 // Defend against cloned attroperties (jQuery gh-1709) 4918 uniqueCache = outerCache[ elem.uniqueID ] || 4919 ( outerCache[ elem.uniqueID ] = {} ); 4920 4921 if ( skip && skip === elem.nodeName.toLowerCase() ) { 4922 elem = elem[ dir ] || elem; 4923 } else if ( ( oldCache = uniqueCache[ key ] ) && 4924 oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { 4925 4926 // Assign to newCache so results back-propagate to previous elements 4927 return ( newCache[ 2 ] = oldCache[ 2 ] ); 4928 } else { 4929 4930 // Reuse newcache so results back-propagate to previous elements 4931 uniqueCache[ key ] = newCache; 4932 4933 // A match means we're done; a fail means we have to keep checking 4934 if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { 4935 return true; 4936 } 4937 } 4938 } 4939 } 4940 } 4941 return false; 4942 }; 4943} 4944 4945function elementMatcher( matchers ) { 4946 return matchers.length > 1 ? 4947 function( elem, context, xml ) { 4948 var i = matchers.length; 4949 while ( i-- ) { 4950 if ( !matchers[ i ]( elem, context, xml ) ) { 4951 return false; 4952 } 4953 } 4954 return true; 4955 } : 4956 matchers[ 0 ]; 4957} 4958 4959function multipleContexts( selector, contexts, results ) { 4960 var i = 0, 4961 len = contexts.length; 4962 for ( ; i < len; i++ ) { 4963 Sizzle( selector, contexts[ i ], results ); 4964 } 4965 return results; 4966} 4967 4968function condense( unmatched, map, filter, context, xml ) { 4969 var elem, 4970 newUnmatched = [], 4971 i = 0, 4972 len = unmatched.length, 4973 mapped = map != null; 4974 4975 for ( ; i < len; i++ ) { 4976 if ( ( elem = unmatched[ i ] ) ) { 4977 if ( !filter || filter( elem, context, xml ) ) { 4978 newUnmatched.push( elem ); 4979 if ( mapped ) { 4980 map.push( i ); 4981 } 4982 } 4983 } 4984 } 4985 4986 return newUnmatched; 4987} 4988 4989function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { 4990 if ( postFilter && !postFilter[ expando ] ) { 4991 postFilter = setMatcher( postFilter ); 4992 } 4993 if ( postFinder && !postFinder[ expando ] ) { 4994 postFinder = setMatcher( postFinder, postSelector ); 4995 } 4996 return markFunction( function( seed, results, context, xml ) { 4997 var temp, i, elem, 4998 preMap = [], 4999 postMap = [], 5000 preexisting = results.length, 5001 5002 // Get initial elements from seed or context 5003 elems = seed || multipleContexts( 5004 selector || "*", 5005 context.nodeType ? [ context ] : context, 5006 [] 5007 ), 5008 5009 // Prefilter to get matcher input, preserving a map for seed-results synchronization 5010 matcherIn = preFilter && ( seed || !selector ) ? 5011 condense( elems, preMap, preFilter, context, xml ) : 5012 elems, 5013 5014 matcherOut = matcher ? 5015 5016 // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, 5017 postFinder || ( seed ? preFilter : preexisting || postFilter ) ? 5018 5019 // ...intermediate processing is necessary 5020 [] : 5021 5022 // ...otherwise use results directly 5023 results : 5024 matcherIn; 5025 5026 // Find primary matches 5027 if ( matcher ) { 5028 matcher( matcherIn, matcherOut, context, xml ); 5029 } 5030 5031 // Apply postFilter 5032 if ( postFilter ) { 5033 temp = condense( matcherOut, postMap ); 5034 postFilter( temp, [], context, xml ); 5035 5036 // Un-match failing elements by moving them back to matcherIn 5037 i = temp.length; 5038 while ( i-- ) { 5039 if ( ( elem = temp[ i ] ) ) { 5040 matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); 5041 } 5042 } 5043 } 5044 5045 if ( seed ) { 5046 if ( postFinder || preFilter ) { 5047 if ( postFinder ) { 5048 5049 // Get the final matcherOut by condensing this intermediate into postFinder contexts 5050 temp = []; 5051 i = matcherOut.length; 5052 while ( i-- ) { 5053 if ( ( elem = matcherOut[ i ] ) ) { 5054 5055 // Restore matcherIn since elem is not yet a final match 5056 temp.push( ( matcherIn[ i ] = elem ) ); 5057 } 5058 } 5059 postFinder( null, ( matcherOut = [] ), temp, xml ); 5060 } 5061 5062 // Move matched elements from seed to results to keep them synchronized 5063 i = matcherOut.length; 5064 while ( i-- ) { 5065 if ( ( elem = matcherOut[ i ] ) && 5066 ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { 5067 5068 seed[ temp ] = !( results[ temp ] = elem ); 5069 } 5070 } 5071 } 5072 5073 // Add elements to results, through postFinder if defined 5074 } else { 5075 matcherOut = condense( 5076 matcherOut === results ? 5077 matcherOut.splice( preexisting, matcherOut.length ) : 5078 matcherOut 5079 ); 5080 if ( postFinder ) { 5081 postFinder( null, results, matcherOut, xml ); 5082 } else { 5083 push.apply( results, matcherOut ); 5084 } 5085 } 5086 } ); 5087} 5088 5089function matcherFromTokens( tokens ) { 5090 var checkContext, matcher, j, 5091 len = tokens.length, 5092 leadingRelative = Expr.relative[ tokens[ 0 ].type ], 5093 implicitRelative = leadingRelative || Expr.relative[ " " ], 5094 i = leadingRelative ? 1 : 0, 5095 5096 // The foundational matcher ensures that elements are reachable from top-level context(s) 5097 matchContext = addCombinator( function( elem ) { 5098 return elem === checkContext; 5099 }, implicitRelative, true ), 5100 matchAnyContext = addCombinator( function( elem ) { 5101 return indexOf( checkContext, elem ) > -1; 5102 }, implicitRelative, true ), 5103 matchers = [ function( elem, context, xml ) { 5104 var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( 5105 ( checkContext = context ).nodeType ? 5106 matchContext( elem, context, xml ) : 5107 matchAnyContext( elem, context, xml ) ); 5108 5109 // Avoid hanging onto element (issue #299) 5110 checkContext = null; 5111 return ret; 5112 } ]; 5113 5114 for ( ; i < len; i++ ) { 5115 if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { 5116 matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; 5117 } else { 5118 matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); 5119 5120 // Return special upon seeing a positional matcher 5121 if ( matcher[ expando ] ) { 5122 5123 // Find the next relative operator (if any) for proper handling 5124 j = ++i; 5125 for ( ; j < len; j++ ) { 5126 if ( Expr.relative[ tokens[ j ].type ] ) { 5127 break; 5128 } 5129 } 5130 return setMatcher( 5131 i > 1 && elementMatcher( matchers ), 5132 i > 1 && toSelector( 5133 5134 // If the preceding token was a descendant combinator, insert an implicit any-element `*` 5135 tokens 5136 .slice( 0, i - 1 ) 5137 .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) 5138 ).replace( rtrim, "$1" ), 5139 matcher, 5140 i < j && matcherFromTokens( tokens.slice( i, j ) ), 5141 j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), 5142 j < len && toSelector( tokens ) 5143 ); 5144 } 5145 matchers.push( matcher ); 5146 } 5147 } 5148 5149 return elementMatcher( matchers ); 5150} 5151 5152function matcherFromGroupMatchers( elementMatchers, setMatchers ) { 5153 var bySet = setMatchers.length > 0, 5154 byElement = elementMatchers.length > 0, 5155 superMatcher = function( seed, context, xml, results, outermost ) { 5156 var elem, j, matcher, 5157 matchedCount = 0, 5158 i = "0", 5159 unmatched = seed && [], 5160 setMatched = [], 5161 contextBackup = outermostContext, 5162 5163 // We must always have either seed elements or outermost context 5164 elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), 5165 5166 // Use integer dirruns iff this is the outermost matcher 5167 dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), 5168 len = elems.length; 5169 5170 if ( outermost ) { 5171 5172 // Support: IE 11+, Edge 17 - 18+ 5173 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 5174 // two documents; shallow comparisons work. 5175 // eslint-disable-next-line eqeqeq 5176 outermostContext = context == document || context || outermost; 5177 } 5178 5179 // Add elements passing elementMatchers directly to results 5180 // Support: IE<9, Safari 5181 // Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id 5182 for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { 5183 if ( byElement && elem ) { 5184 j = 0; 5185 5186 // Support: IE 11+, Edge 17 - 18+ 5187 // IE/Edge sometimes throw a "Permission denied" error when strict-comparing 5188 // two documents; shallow comparisons work. 5189 // eslint-disable-next-line eqeqeq 5190 if ( !context && elem.ownerDocument != document ) { 5191 setDocument( elem ); 5192 xml = !documentIsHTML; 5193 } 5194 while ( ( matcher = elementMatchers[ j++ ] ) ) { 5195 if ( matcher( elem, context || document, xml ) ) { 5196 results.push( elem ); 5197 break; 5198 } 5199 } 5200 if ( outermost ) { 5201 dirruns = dirrunsUnique; 5202 } 5203 } 5204 5205 // Track unmatched elements for set filters 5206 if ( bySet ) { 5207 5208 // They will have gone through all possible matchers 5209 if ( ( elem = !matcher && elem ) ) { 5210 matchedCount--; 5211 } 5212 5213 // Lengthen the array for every element, matched or not 5214 if ( seed ) { 5215 unmatched.push( elem ); 5216 } 5217 } 5218 } 5219 5220 // `i` is now the count of elements visited above, and adding it to `matchedCount` 5221 // makes the latter nonnegative. 5222 matchedCount += i; 5223 5224 // Apply set filters to unmatched elements 5225 // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` 5226 // equals `i`), unless we didn't visit _any_ elements in the above loop because we have 5227 // no element matchers and no seed. 5228 // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that 5229 // case, which will result in a "00" `matchedCount` that differs from `i` but is also 5230 // numerically zero. 5231 if ( bySet && i !== matchedCount ) { 5232 j = 0; 5233 while ( ( matcher = setMatchers[ j++ ] ) ) { 5234 matcher( unmatched, setMatched, context, xml ); 5235 } 5236 5237 if ( seed ) { 5238 5239 // Reintegrate element matches to eliminate the need for sorting 5240 if ( matchedCount > 0 ) { 5241 while ( i-- ) { 5242 if ( !( unmatched[ i ] || setMatched[ i ] ) ) { 5243 setMatched[ i ] = pop.call( results ); 5244 } 5245 } 5246 } 5247 5248 // Discard index placeholder values to get only actual matches 5249 setMatched = condense( setMatched ); 5250 } 5251 5252 // Add matches to results 5253 push.apply( results, setMatched ); 5254 5255 // Seedless set matches succeeding multiple successful matchers stipulate sorting 5256 if ( outermost && !seed && setMatched.length > 0 && 5257 ( matchedCount + setMatchers.length ) > 1 ) { 5258 5259 Sizzle.uniqueSort( results ); 5260 } 5261 } 5262 5263 // Override manipulation of globals by nested matchers 5264 if ( outermost ) { 5265 dirruns = dirrunsUnique; 5266 outermostContext = contextBackup; 5267 } 5268 5269 return unmatched; 5270 }; 5271 5272 return bySet ? 5273 markFunction( superMatcher ) : 5274 superMatcher; 5275} 5276 5277compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { 5278 var i, 5279 setMatchers = [], 5280 elementMatchers = [], 5281 cached = compilerCache[ selector + " " ]; 5282 5283 if ( !cached ) { 5284 5285 // Generate a function of recursive functions that can be used to check each element 5286 if ( !match ) { 5287 match = tokenize( selector ); 5288 } 5289 i = match.length; 5290 while ( i-- ) { 5291 cached = matcherFromTokens( match[ i ] ); 5292 if ( cached[ expando ] ) { 5293 setMatchers.push( cached ); 5294 } else { 5295 elementMatchers.push( cached ); 5296 } 5297 } 5298 5299 // Cache the compiled function 5300 cached = compilerCache( 5301 selector, 5302 matcherFromGroupMatchers( elementMatchers, setMatchers ) 5303 ); 5304 5305 // Save selector and tokenization 5306 cached.selector = selector; 5307 } 5308 return cached; 5309}; 5310 5311/** 5312 * A low-level selection function that works with Sizzle's compiled 5313 * selector functions 5314 * @param {String|Function} selector A selector or a pre-compiled 5315 * selector function built with Sizzle.compile 5316 * @param {Element} context 5317 * @param {Array} [results] 5318 * @param {Array} [seed] A set of elements to match against 5319 */ 5320select = Sizzle.select = function( selector, context, results, seed ) { 5321 var i, tokens, token, type, find, 5322 compiled = typeof selector === "function" && selector, 5323 match = !seed && tokenize( ( selector = compiled.selector || selector ) ); 5324 5325 results = results || []; 5326 5327 // Try to minimize operations if there is only one selector in the list and no seed 5328 // (the latter of which guarantees us context) 5329 if ( match.length === 1 ) { 5330 5331 // Reduce context if the leading compound selector is an ID 5332 tokens = match[ 0 ] = match[ 0 ].slice( 0 ); 5333 if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && 5334 context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { 5335 5336 context = ( Expr.find[ "ID" ]( token.matches[ 0 ] 5337 .replace( runescape, funescape ), context ) || [] )[ 0 ]; 5338 if ( !context ) { 5339 return results; 5340 5341 // Precompiled matchers will still verify ancestry, so step up a level 5342 } else if ( compiled ) { 5343 context = context.parentNode; 5344 } 5345 5346 selector = selector.slice( tokens.shift().value.length ); 5347 } 5348 5349 // Fetch a seed set for right-to-left matching 5350 i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; 5351 while ( i-- ) { 5352 token = tokens[ i ]; 5353 5354 // Abort if we hit a combinator 5355 if ( Expr.relative[ ( type = token.type ) ] ) { 5356 break; 5357 } 5358 if ( ( find = Expr.find[ type ] ) ) { 5359 5360 // Search, expanding context for leading sibling combinators 5361 if ( ( seed = find( 5362 token.matches[ 0 ].replace( runescape, funescape ), 5363 rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || 5364 context 5365 ) ) ) { 5366 5367 // If seed is empty or no tokens remain, we can return early 5368 tokens.splice( i, 1 ); 5369 selector = seed.length && toSelector( tokens ); 5370 if ( !selector ) { 5371 push.apply( results, seed ); 5372 return results; 5373 } 5374 5375 break; 5376 } 5377 } 5378 } 5379 } 5380 5381 // Compile and execute a filtering function if one is not provided 5382 // Provide `match` to avoid retokenization if we modified the selector above 5383 ( compiled || compile( selector, match ) )( 5384 seed, 5385 context, 5386 !documentIsHTML, 5387 results, 5388 !context || rsibling.test( selector ) && testContext( context.parentNode ) || context 5389 ); 5390 return results; 5391}; 5392 5393// One-time assignments 5394 5395// Sort stability 5396support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; 5397 5398// Support: Chrome 14-35+ 5399// Always assume duplicates if they aren't passed to the comparison function 5400support.detectDuplicates = !!hasDuplicate; 5401 5402// Initialize against the default document 5403setDocument(); 5404 5405// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) 5406// Detached nodes confoundingly follow *each other* 5407support.sortDetached = assert( function( el ) { 5408 5409 // Should return 1, but returns 4 (following) 5410 return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; 5411} ); 5412 5413// Support: IE<8 5414// Prevent attribute/property "interpolation" 5415// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx 5416if ( !assert( function( el ) { 5417 el.innerHTML = "<a href='#'></a>"; 5418 return el.firstChild.getAttribute( "href" ) === "#"; 5419} ) ) { 5420 addHandle( "type|href|height|width", function( elem, name, isXML ) { 5421 if ( !isXML ) { 5422 return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); 5423 } 5424 } ); 5425} 5426 5427// Support: IE<9 5428// Use defaultValue in place of getAttribute("value") 5429if ( !support.attributes || !assert( function( el ) { 5430 el.innerHTML = "<input/>"; 5431 el.firstChild.setAttribute( "value", "" ); 5432 return el.firstChild.getAttribute( "value" ) === ""; 5433} ) ) { 5434 addHandle( "value", function( elem, _name, isXML ) { 5435 if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { 5436 return elem.defaultValue; 5437 } 5438 } ); 5439} 5440 5441// Support: IE<9 5442// Use getAttributeNode to fetch booleans when getAttribute lies 5443if ( !assert( function( el ) { 5444 return el.getAttribute( "disabled" ) == null; 5445} ) ) { 5446 addHandle( booleans, function( elem, name, isXML ) { 5447 var val; 5448 if ( !isXML ) { 5449 return elem[ name ] === true ? name.toLowerCase() : 5450 ( val = elem.getAttributeNode( name ) ) && val.specified ? 5451 val.value : 5452 null; 5453 } 5454 } ); 5455} 5456 5457return Sizzle; 5458 5459} )( window ); 5460 5461 5462 5463jQuery.find = Sizzle; 5464jQuery.expr = Sizzle.selectors; 5465 5466// Deprecated 5467jQuery.expr[ ":" ] = jQuery.expr.pseudos; 5468jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; 5469jQuery.text = Sizzle.getText; 5470jQuery.isXMLDoc = Sizzle.isXML; 5471jQuery.contains = Sizzle.contains; 5472jQuery.escapeSelector = Sizzle.escape; 5473 5474 5475 5476 5477var dir = function( elem, dir, until ) { 5478 var matched = [], 5479 truncate = until !== undefined; 5480 5481 while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { 5482 if ( elem.nodeType === 1 ) { 5483 if ( truncate && jQuery( elem ).is( until ) ) { 5484 break; 5485 } 5486 matched.push( elem ); 5487 } 5488 } 5489 return matched; 5490}; 5491 5492 5493var siblings = function( n, elem ) { 5494 var matched = []; 5495 5496 for ( ; n; n = n.nextSibling ) { 5497 if ( n.nodeType === 1 && n !== elem ) { 5498 matched.push( n ); 5499 } 5500 } 5501 5502 return matched; 5503}; 5504 5505 5506var rneedsContext = jQuery.expr.match.needsContext; 5507 5508 5509 5510function nodeName( elem, name ) { 5511
5512 return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); 5513 5514};
vendor: 21,546 bytes, lines 5514-6339
5514 5515var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); 5516 5517 5518 5519// Implement the identical functionality for filter and not 5520function winnow( elements, qualifier, not ) { 5521 if ( isFunction( qualifier ) ) { 5522 return jQuery.grep( elements, function( elem, i ) { 5523 return !!qualifier.call( elem, i, elem ) !== not; 5524 } ); 5525 } 5526 5527 // Single element 5528 if ( qualifier.nodeType ) { 5529 return jQuery.grep( elements, function( elem ) { 5530 return ( elem === qualifier ) !== not; 5531 } ); 5532 } 5533 5534 // Arraylike of elements (jQuery, arguments, Array) 5535 if ( typeof qualifier !== "string" ) { 5536 return jQuery.grep( elements, function( elem ) { 5537 return ( indexOf.call( qualifier, elem ) > -1 ) !== not; 5538 } ); 5539 } 5540 5541 // Filtered directly for both simple and complex selectors 5542 return jQuery.filter( qualifier, elements, not ); 5543} 5544 5545jQuery.filter = function( expr, elems, not ) { 5546 var elem = elems[ 0 ]; 5547 5548 if ( not ) { 5549 expr = ":not(" + expr + ")"; 5550 } 5551 5552 if ( elems.length === 1 && elem.nodeType === 1 ) { 5553 return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; 5554 } 5555 5556 return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { 5557 return elem.nodeType === 1; 5558 } ) ); 5559}; 5560 5561jQuery.fn.extend( { 5562 find: function( selector ) { 5563 var i, ret, 5564 len = this.length, 5565 self = this; 5566 5567 if ( typeof selector !== "string" ) { 5568 return this.pushStack( jQuery( selector ).filter( function() { 5569 for ( i = 0; i < len; i++ ) { 5570 if ( jQuery.contains( self[ i ], this ) ) { 5571 return true; 5572 } 5573 } 5574 } ) ); 5575 } 5576 5577 ret = this.pushStack( [] ); 5578 5579 for ( i = 0; i < len; i++ ) { 5580 jQuery.find( selector, self[ i ], ret ); 5581 } 5582 5583 return len > 1 ? jQuery.uniqueSort( ret ) : ret; 5584 }, 5585 filter: function( selector ) { 5586 return this.pushStack( winnow( this, selector || [], false ) ); 5587 }, 5588 not: function( selector ) { 5589 return this.pushStack( winnow( this, selector || [], true ) ); 5590 }, 5591 is: function( selector ) { 5592 return !!winnow( 5593 this, 5594 5595 // If this is a positional/relative selector, check membership in the returned set 5596 // so $("p:first").is("p:last") won't return true for a doc with two "p". 5597 typeof selector === "string" && rneedsContext.test( selector ) ? 5598 jQuery( selector ) : 5599 selector || [], 5600 false 5601 ).length; 5602 } 5603} ); 5604 5605 5606// Initialize a jQuery object 5607 5608 5609// A central reference to the root jQuery(document) 5610var rootjQuery, 5611 5612 // A simple way to check for HTML strings 5613 // Prioritize #id over <tag> to avoid XSS via location.hash (#9521) 5614 // Strict HTML recognition (#11290: must start with <) 5615 // Shortcut simple #id case for speed 5616 rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, 5617 5618 init = jQuery.fn.init = function( selector, context, root ) { 5619 var match, elem; 5620 5621 // HANDLE: $(""), $(null), $(undefined), $(false) 5622 if ( !selector ) { 5623 return this; 5624 } 5625 5626 // Method init() accepts an alternate rootjQuery 5627 // so migrate can support jQuery.sub (gh-2101) 5628 root = root || rootjQuery; 5629 5630 // Handle HTML strings 5631 if ( typeof selector === "string" ) { 5632 if ( selector[ 0 ] === "<" && 5633 selector[ selector.length - 1 ] === ">" && 5634 selector.length >= 3 ) { 5635 5636 // Assume that strings that start and end with <> are HTML and skip the regex check 5637 match = [ null, selector, null ]; 5638 5639 } else { 5640 match = rquickExpr.exec( selector ); 5641 } 5642 5643 // Match html or make sure no context is specified for #id 5644 if ( match && ( match[ 1 ] || !context ) ) { 5645 5646 // HANDLE: $(html) -> $(array) 5647 if ( match[ 1 ] ) { 5648 context = context instanceof jQuery ? context[ 0 ] : context; 5649 5650 // Option to run scripts is true for back-compat 5651 // Intentionally let the error be thrown if parseHTML is not present 5652 jQuery.merge( this, jQuery.parseHTML( 5653 match[ 1 ], 5654 context && context.nodeType ? context.ownerDocument || context : document, 5655 true 5656 ) ); 5657 5658 // HANDLE: $(html, props) 5659 if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { 5660 for ( match in context ) { 5661 5662 // Properties of context are called as methods if possible 5663 if ( isFunction( this[ match ] ) ) { 5664 this[ match ]( context[ match ] ); 5665 5666 // ...and otherwise set as attributes 5667 } else { 5668 this.attr( match, context[ match ] ); 5669 } 5670 } 5671 } 5672 5673 return this; 5674 5675 // HANDLE: $(#id) 5676 } else { 5677 elem = document.getElementById( match[ 2 ] ); 5678 5679 if ( elem ) { 5680 5681 // Inject the element directly into the jQuery object 5682 this[ 0 ] = elem; 5683 this.length = 1; 5684 } 5685 return this; 5686 } 5687 5688 // HANDLE: $(expr, $(...)) 5689 } else if ( !context || context.jquery ) { 5690 return ( context || root ).find( selector ); 5691 5692 // HANDLE: $(expr, context) 5693 // (which is just equivalent to: $(context).find(expr) 5694 } else { 5695 return this.constructor( context ).find( selector ); 5696 } 5697 5698 // HANDLE: $(DOMElement) 5699 } else if ( selector.nodeType ) { 5700 this[ 0 ] = selector; 5701 this.length = 1; 5702 return this; 5703 5704 // HANDLE: $(function) 5705 // Shortcut for document ready 5706 } else if ( isFunction( selector ) ) { 5707 return root.ready !== undefined ? 5708 root.ready( selector ) : 5709 5710 // Execute immediately if ready is not present 5711 selector( jQuery ); 5712 } 5713 5714 return jQuery.makeArray( selector, this ); 5715 }; 5716 5717// Give the init function the jQuery prototype for later instantiation 5718init.prototype = jQuery.fn; 5719 5720// Initialize central reference 5721rootjQuery = jQuery( document ); 5722 5723 5724var rparentsprev = /^(?:parents|prev(?:Until|All))/, 5725 5726 // Methods guaranteed to produce a unique set when starting from a unique set 5727 guaranteedUnique = { 5728 children: true, 5729 contents: true, 5730 next: true, 5731 prev: true 5732 }; 5733 5734jQuery.fn.extend( { 5735 has: function( target ) { 5736 var targets = jQuery( target, this ), 5737 l = targets.length; 5738 5739 return this.filter( function() { 5740 var i = 0; 5741 for ( ; i < l; i++ ) { 5742 if ( jQuery.contains( this, targets[ i ] ) ) { 5743 return true; 5744 } 5745 } 5746 } ); 5747 }, 5748 5749 closest: function( selectors, context ) { 5750 var cur, 5751 i = 0, 5752 l = this.length, 5753 matched = [], 5754 targets = typeof selectors !== "string" && jQuery( selectors ); 5755 5756 // Positional selectors never match, since there's no _selection_ context 5757 if ( !rneedsContext.test( selectors ) ) { 5758 for ( ; i < l; i++ ) { 5759 for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { 5760 5761 // Always skip document fragments 5762 if ( cur.nodeType < 11 && ( targets ? 5763 targets.index( cur ) > -1 : 5764 5765 // Don't pass non-elements to Sizzle 5766 cur.nodeType === 1 && 5767 jQuery.find.matchesSelector( cur, selectors ) ) ) { 5768 5769 matched.push( cur ); 5770 break; 5771 } 5772 } 5773 } 5774 } 5775 5776 return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); 5777 }, 5778 5779 // Determine the position of an element within the set 5780 index: function( elem ) { 5781 5782 // No argument, return index in parent 5783 if ( !elem ) { 5784 return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; 5785 } 5786 5787 // Index in selector 5788 if ( typeof elem === "string" ) { 5789 return indexOf.call( jQuery( elem ), this[ 0 ] ); 5790 } 5791 5792 // Locate the position of the desired element 5793 return indexOf.call( this, 5794 5795 // If it receives a jQuery object, the first element is used 5796 elem.jquery ? elem[ 0 ] : elem 5797 ); 5798 }, 5799 5800 add: function( selector, context ) { 5801 return this.pushStack( 5802 jQuery.uniqueSort( 5803 jQuery.merge( this.get(), jQuery( selector, context ) ) 5804 ) 5805 ); 5806 }, 5807 5808 addBack: function( selector ) { 5809 return this.add( selector == null ? 5810 this.prevObject : this.prevObject.filter( selector ) 5811 ); 5812 } 5813} ); 5814 5815function sibling( cur, dir ) { 5816 while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} 5817 return cur; 5818} 5819 5820jQuery.each( { 5821 parent: function( elem ) { 5822 var parent = elem.parentNode; 5823 return parent && parent.nodeType !== 11 ? parent : null; 5824 }, 5825 parents: function( elem ) { 5826 return dir( elem, "parentNode" ); 5827 }, 5828 parentsUntil: function( elem, _i, until ) { 5829 return dir( elem, "parentNode", until ); 5830 }, 5831 next: function( elem ) { 5832 return sibling( elem, "nextSibling" ); 5833 }, 5834 prev: function( elem ) { 5835 return sibling( elem, "previousSibling" ); 5836 }, 5837 nextAll: function( elem ) { 5838 return dir( elem, "nextSibling" ); 5839 }, 5840 prevAll: function( elem ) { 5841 return dir( elem, "previousSibling" ); 5842 }, 5843 nextUntil: function( elem, _i, until ) { 5844 return dir( elem, "nextSibling", until ); 5845 }, 5846 prevUntil: function( elem, _i, until ) { 5847 return dir( elem, "previousSibling", until ); 5848 }, 5849 siblings: function( elem ) { 5850 return siblings( ( elem.parentNode || {} ).firstChild, elem ); 5851 }, 5852 children: function( elem ) { 5853 return siblings( elem.firstChild ); 5854 }, 5855 contents: function( elem ) { 5856 if ( elem.contentDocument != null && 5857 5858 // Support: IE 11+ 5859 // <object> elements with no `data` attribute has an object 5860 // `contentDocument` with a `null` prototype. 5861 getProto( elem.contentDocument ) ) { 5862 5863 return elem.contentDocument; 5864 } 5865 5866 // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only 5867 // Treat the template element as a regular one in browsers that 5868 // don't support it. 5869 if ( nodeName( elem, "template" ) ) { 5870 elem = elem.content || elem; 5871 } 5872 5873 return jQuery.merge( [], elem.childNodes ); 5874 } 5875}, function( name, fn ) { 5876 jQuery.fn[ name ] = function( until, selector ) { 5877 var matched = jQuery.map( this, fn, until ); 5878 5879 if ( name.slice( -5 ) !== "Until" ) { 5880 selector = until; 5881 } 5882 5883 if ( selector && typeof selector === "string" ) { 5884 matched = jQuery.filter( selector, matched ); 5885 } 5886 5887 if ( this.length > 1 ) { 5888 5889 // Remove duplicates 5890 if ( !guaranteedUnique[ name ] ) { 5891 jQuery.uniqueSort( matched ); 5892 } 5893 5894 // Reverse order for parents* and prev-derivatives 5895 if ( rparentsprev.test( name ) ) { 5896 matched.reverse(); 5897 } 5898 } 5899 5900 return this.pushStack( matched ); 5901 }; 5902} ); 5903var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); 5904 5905 5906 5907// Convert String-formatted options into Object-formatted ones 5908function createOptions( options ) { 5909 var object = {}; 5910 jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { 5911 object[ flag ] = true; 5912 } ); 5913 return object; 5914} 5915 5916/* 5917 * Create a callback list using the following parameters: 5918 * 5919 * options: an optional list of space-separated options that will change how 5920 * the callback list behaves or a more traditional option object 5921 * 5922 * By default a callback list will act like an event callback list and can be 5923 * "fired" multiple times. 5924 * 5925 * Possible options: 5926 * 5927 * once: will ensure the callback list can only be fired once (like a Deferred) 5928 * 5929 * memory: will keep track of previous values and will call any callback added 5930 * after the list has been fired right away with the latest "memorized" 5931 * values (like a Deferred) 5932 * 5933 * unique: will ensure a callback can only be added once (no duplicate in the list) 5934 * 5935 * stopOnFalse: interrupt callings when a callback returns false 5936 * 5937 */ 5938jQuery.Callbacks = function( options ) { 5939 5940 // Convert options from String-formatted to Object-formatted if needed 5941 // (we check in cache first) 5942 options = typeof options === "string" ? 5943 createOptions( options ) : 5944 jQuery.extend( {}, options ); 5945 5946 var // Flag to know if list is currently firing 5947 firing, 5948 5949 // Last fire value for non-forgettable lists 5950 memory, 5951 5952 // Flag to know if list was already fired 5953 fired, 5954 5955 // Flag to prevent firing 5956 locked, 5957 5958 // Actual callback list 5959 list = [], 5960 5961 // Queue of execution data for repeatable lists 5962 queue = [], 5963 5964 // Index of currently firing callback (modified by add/remove as needed) 5965 firingIndex = -1, 5966 5967 // Fire callbacks 5968 fire = function() { 5969 5970 // Enforce single-firing 5971 locked = locked || options.once; 5972 5973 // Execute callbacks for all pending executions, 5974 // respecting firingIndex overrides and runtime changes 5975 fired = firing = true; 5976 for ( ; queue.length; firingIndex = -1 ) { 5977 memory = queue.shift(); 5978 while ( ++firingIndex < list.length ) { 5979 5980 // Run callback and check for early termination 5981 if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && 5982 options.stopOnFalse ) { 5983 5984 // Jump to end and forget the data so .add doesn't re-fire 5985 firingIndex = list.length; 5986 memory = false; 5987 } 5988 } 5989 } 5990 5991 // Forget the data if we're done with it 5992 if ( !options.memory ) { 5993 memory = false; 5994 } 5995 5996 firing = false; 5997 5998 // Clean up if we're done firing for good 5999 if ( locked ) { 6000 6001 // Keep an empty list if we have data for future add calls 6002 if ( memory ) { 6003 list = []; 6004 6005 // Otherwise, this object is spent 6006 } else { 6007 list = ""; 6008 } 6009 } 6010 }, 6011 6012 // Actual Callbacks object 6013 self = { 6014 6015 // Add a callback or a collection of callbacks to the list 6016 add: function() { 6017 if ( list ) { 6018 6019 // If we have memory from a past run, we should fire after adding 6020 if ( memory && !firing ) { 6021 firingIndex = list.length - 1; 6022 queue.push( memory ); 6023 } 6024 6025 ( function add( args ) { 6026 jQuery.each( args, function( _, arg ) { 6027 if ( isFunction( arg ) ) { 6028 if ( !options.unique || !self.has( arg ) ) { 6029 list.push( arg ); 6030 } 6031 } else if ( arg && arg.length && toType( arg ) !== "string" ) { 6032 6033 // Inspect recursively 6034 add( arg ); 6035 } 6036 } ); 6037 } )( arguments ); 6038 6039 if ( memory && !firing ) { 6040 fire(); 6041 } 6042 } 6043 return this; 6044 }, 6045 6046 // Remove a callback from the list 6047 remove: function() { 6048 jQuery.each( arguments, function( _, arg ) { 6049 var index; 6050 while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { 6051 list.splice( index, 1 ); 6052 6053 // Handle firing indexes 6054 if ( index <= firingIndex ) { 6055 firingIndex--; 6056 } 6057 } 6058 } ); 6059 return this; 6060 }, 6061 6062 // Check if a given callback is in the list. 6063 // If no argument is given, return whether or not list has callbacks attached. 6064 has: function( fn ) { 6065 return fn ? 6066 jQuery.inArray( fn, list ) > -1 : 6067 list.length > 0; 6068 }, 6069 6070 // Remove all callbacks from the list 6071 empty: function() { 6072 if ( list ) { 6073 list = []; 6074 } 6075 return this; 6076 }, 6077 6078 // Disable .fire and .add 6079 // Abort any current/pending executions 6080 // Clear all callbacks and values 6081 disable: function() { 6082 locked = queue = []; 6083 list = memory = ""; 6084 return this; 6085 }, 6086 disabled: function() { 6087 return !list; 6088 }, 6089 6090 // Disable .fire 6091 // Also disable .add unless we have memory (since it would have no effect) 6092 // Abort any pending executions 6093 lock: function() { 6094 locked = queue = []; 6095 if ( !memory && !firing ) { 6096 list = memory = ""; 6097 } 6098 return this; 6099 }, 6100 locked: function() { 6101 return !!locked; 6102 }, 6103 6104 // Call all callbacks with the given context and arguments 6105 fireWith: function( context, args ) { 6106 if ( !locked ) { 6107 args = args || []; 6108 args = [ context, args.slice ? args.slice() : args ]; 6109 queue.push( args ); 6110 if ( !firing ) { 6111 fire(); 6112 } 6113 } 6114 return this; 6115 }, 6116 6117 // Call all the callbacks with the given arguments 6118 fire: function() { 6119 self.fireWith( this, arguments ); 6120 return this; 6121 }, 6122 6123 // To know if the callbacks have already been called at least once 6124 fired: function() { 6125 return !!fired; 6126 } 6127 }; 6128 6129 return self; 6130}; 6131 6132 6133function Identity( v ) { 6134 return v; 6135} 6136function Thrower( ex ) { 6137 throw ex; 6138} 6139 6140function adoptValue( value, resolve, reject, noValue ) { 6141 var method; 6142 6143 try { 6144 6145 // Check for promise aspect first to privilege synchronous behavior 6146 if ( value && isFunction( ( method = value.promise ) ) ) { 6147 method.call( value ).done( resolve ).fail( reject ); 6148 6149 // Other thenables 6150 } else if ( value && isFunction( ( method = value.then ) ) ) { 6151 method.call( value, resolve, reject ); 6152 6153 // Other non-thenables 6154 } else { 6155 6156 // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: 6157 // * false: [ value ].slice( 0 ) => resolve( value ) 6158 // * true: [ value ].slice( 1 ) => resolve() 6159 resolve.apply( undefined, [ value ].slice( noValue ) ); 6160 } 6161 6162 // For Promises/A+, convert exceptions into rejections 6163 // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in 6164 // Deferred#then to conditionally suppress rejection. 6165 } catch ( value ) { 6166 6167 // Support: Android 4.0 only 6168 // Strict mode functions invoked without .call/.apply get global-object context 6169 reject.apply( undefined, [ value ] ); 6170 } 6171} 6172 6173jQuery.extend( { 6174 6175 Deferred: function( func ) { 6176 var tuples = [ 6177 6178 // action, add listener, callbacks, 6179 // ... .then handlers, argument index, [final state] 6180 [ "notify", "progress", jQuery.Callbacks( "memory" ), 6181 jQuery.Callbacks( "memory" ), 2 ], 6182 [ "resolve", "done", jQuery.Callbacks( "once memory" ), 6183 jQuery.Callbacks( "once memory" ), 0, "resolved" ], 6184 [ "reject", "fail", jQuery.Callbacks( "once memory" ), 6185 jQuery.Callbacks( "once memory" ), 1, "rejected" ] 6186 ], 6187 state = "pending", 6188 promise = { 6189 state: function() { 6190 return state; 6191 }, 6192 always: function() { 6193 deferred.done( arguments ).fail( arguments ); 6194 return this; 6195 }, 6196 "catch": function( fn ) { 6197 return promise.then( null, fn ); 6198 }, 6199 6200 // Keep pipe for back-compat 6201 pipe: function( /* fnDone, fnFail, fnProgress */ ) { 6202 var fns = arguments; 6203 6204 return jQuery.Deferred( function( newDefer ) { 6205 jQuery.each( tuples, function( _i, tuple ) { 6206 6207 // Map tuples (progress, done, fail) to arguments (done, fail, progress) 6208 var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; 6209 6210 // deferred.progress(function() { bind to newDefer or newDefer.notify }) 6211 // deferred.done(function() { bind to newDefer or newDefer.resolve }) 6212 // deferred.fail(function() { bind to newDefer or newDefer.reject }) 6213 deferred[ tuple[ 1 ] ]( function() { 6214 var returned = fn && fn.apply( this, arguments ); 6215 if ( returned && isFunction( returned.promise ) ) { 6216 returned.promise() 6217 .progress( newDefer.notify ) 6218 .done( newDefer.resolve ) 6219 .fail( newDefer.reject ); 6220 } else { 6221 newDefer[ tuple[ 0 ] + "With" ]( 6222 this, 6223 fn ? [ returned ] : arguments 6224 ); 6225 } 6226 } ); 6227 } ); 6228 fns = null; 6229 } ).promise(); 6230 }, 6231 then: function( onFulfilled, onRejected, onProgress ) { 6232 var maxDepth = 0; 6233 function resolve( depth, deferred, handler, special ) { 6234 return function() { 6235 var that = this, 6236 args = arguments, 6237 mightThrow = function() { 6238 var returned, then; 6239 6240 // Support: Promises/A+ section 2.3.3.3.3 6241 // https://promisesaplus.com/#point-59 6242 // Ignore double-resolution attempts 6243 if ( depth < maxDepth ) { 6244 return; 6245 } 6246 6247 returned = handler.apply( that, args ); 6248 6249 // Support: Promises/A+ section 2.3.1 6250 // https://promisesaplus.com/#point-48 6251 if ( returned === deferred.promise() ) { 6252 throw new TypeError( "Thenable self-resolution" ); 6253 } 6254 6255 // Support: Promises/A+ sections 2.3.3.1, 3.5 6256 // https://promisesaplus.com/#point-54 6257 // https://promisesaplus.com/#point-75 6258 // Retrieve `then` only once 6259 then = returned && 6260 6261 // Support: Promises/A+ section 2.3.4 6262 // https://promisesaplus.com/#point-64 6263 // Only check objects and functions for thenability 6264 ( typeof returned === "object" || 6265 typeof returned === "function" ) && 6266 returned.then; 6267 6268 // Handle a returned thenable 6269 if ( isFunction( then ) ) { 6270 6271 // Special processors (notify) just wait for resolution 6272 if ( special ) { 6273 then.call( 6274 returned, 6275 resolve( maxDepth, deferred, Identity, special ), 6276 resolve( maxDepth, deferred, Thrower, special ) 6277 ); 6278 6279 // Normal processors (resolve) also hook into progress 6280 } else { 6281 6282 // ...and disregard older resolution values 6283 maxDepth++; 6284 6285 then.call( 6286 returned, 6287 resolve( maxDepth, deferred, Identity, special ), 6288 resolve( maxDepth, deferred, Thrower, special ), 6289 resolve( maxDepth, deferred, Identity, 6290 deferred.notifyWith ) 6291 ); 6292 } 6293 6294 // Handle all other returned values 6295 } else { 6296 6297 // Only substitute handlers pass on context 6298 // and multiple values (non-spec behavior) 6299 if ( handler !== Identity ) { 6300 that = undefined; 6301 args = [ returned ]; 6302 } 6303 6304 // Process the value(s) 6305 // Default process is resolve 6306 ( special || deferred.resolveWith )( that, args ); 6307 } 6308 }, 6309 6310 // Only normal processors (resolve) catch and reject exceptions 6311 process = special ? 6312 mightThrow : 6313 function() { 6314 try { 6315 mightThrow(); 6316 } catch ( e ) { 6317 6318 if ( jQuery.Deferred.exceptionHook ) { 6319 jQuery.Deferred.exceptionHook( e, 6320 process.stackTrace ); 6321 } 6322 6323 // Support: Promises/A+ section 2.3.3.3.4.1 6324 // https://promisesaplus.com/#point-61 6325 // Ignore post-resolution exceptions 6326 if ( depth + 1 >= maxDepth ) { 6327 6328 // Only substitute handlers pass on context 6329 // and multiple values (non-spec behavior) 6330 if ( handler !== Thrower ) { 6331 that = undefined; 6332 args = [ e ]; 6333 } 6334 6335 deferred.rejectWith( that, args ); 6336 } 6337 } 6338 }; 6339
vendor: 7,865 bytes, lines 6340-6658
6340 // Support: Promises/A+ section 2.3.3.3.1 6341 // https://promisesaplus.com/#point-57 6342 // Re-resolve promises immediately to dodge false rejection from 6343 // subsequent errors 6344 if ( depth ) { 6345 process(); 6346 } else { 6347 6348 // Call an optional hook to record the stack, in case of exception 6349 // since it's otherwise lost when execution goes async 6350 if ( jQuery.Deferred.getStackHook ) { 6351 process.stackTrace = jQuery.Deferred.getStackHook(); 6352 } 6353 window.setTimeout( process ); 6354 } 6355 }; 6356 } 6357 6358 return jQuery.Deferred( function( newDefer ) { 6359 6360 // progress_handlers.add( ... ) 6361 tuples[ 0 ][ 3 ].add( 6362 resolve( 6363 0, 6364 newDefer, 6365 isFunction( onProgress ) ? 6366 onProgress : 6367 Identity, 6368 newDefer.notifyWith 6369 ) 6370 ); 6371 6372 // fulfilled_handlers.add( ... ) 6373 tuples[ 1 ][ 3 ].add( 6374 resolve( 6375 0, 6376 newDefer, 6377 isFunction( onFulfilled ) ? 6378 onFulfilled : 6379 Identity 6380 ) 6381 ); 6382 6383 // rejected_handlers.add( ... ) 6384 tuples[ 2 ][ 3 ].add( 6385 resolve( 6386 0, 6387 newDefer, 6388 isFunction( onRejected ) ? 6389 onRejected : 6390 Thrower 6391 ) 6392 ); 6393 } ).promise(); 6394 }, 6395 6396 // Get a promise for this deferred 6397 // If obj is provided, the promise aspect is added to the object 6398 promise: function( obj ) { 6399 return obj != null ? jQuery.extend( obj, promise ) : promise; 6400 } 6401 }, 6402 deferred = {}; 6403 6404 // Add list-specific methods 6405 jQuery.each( tuples, function( i, tuple ) { 6406 var list = tuple[ 2 ], 6407 stateString = tuple[ 5 ]; 6408 6409 // promise.progress = list.add 6410 // promise.done = list.add 6411 // promise.fail = list.add 6412 promise[ tuple[ 1 ] ] = list.add; 6413 6414 // Handle state 6415 if ( stateString ) { 6416 list.add( 6417 function() { 6418 6419 // state = "resolved" (i.e., fulfilled) 6420 // state = "rejected" 6421 state = stateString; 6422 }, 6423 6424 // rejected_callbacks.disable 6425 // fulfilled_callbacks.disable 6426 tuples[ 3 - i ][ 2 ].disable, 6427 6428 // rejected_handlers.disable 6429 // fulfilled_handlers.disable 6430 tuples[ 3 - i ][ 3 ].disable, 6431 6432 // progress_callbacks.lock 6433 tuples[ 0 ][ 2 ].lock, 6434 6435 // progress_handlers.lock 6436 tuples[ 0 ][ 3 ].lock 6437 ); 6438 } 6439 6440 // progress_handlers.fire 6441 // fulfilled_handlers.fire 6442 // rejected_handlers.fire 6443 list.add( tuple[ 3 ].fire ); 6444 6445 // deferred.notify = function() { deferred.notifyWith(...) } 6446 // deferred.resolve = function() { deferred.resolveWith(...) } 6447 // deferred.reject = function() { deferred.rejectWith(...) } 6448 deferred[ tuple[ 0 ] ] = function() { 6449 deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); 6450 return this; 6451 }; 6452 6453 // deferred.notifyWith = list.fireWith 6454 // deferred.resolveWith = list.fireWith 6455 // deferred.rejectWith = list.fireWith 6456 deferred[ tuple[ 0 ] + "With" ] = list.fireWith; 6457 } ); 6458 6459 // Make the deferred a promise 6460 promise.promise( deferred ); 6461 6462 // Call given func if any 6463 if ( func ) { 6464 func.call( deferred, deferred ); 6465 } 6466 6467 // All done! 6468 return deferred; 6469 }, 6470 6471 // Deferred helper 6472 when: function( singleValue ) { 6473 var 6474 6475 // count of uncompleted subordinates 6476 remaining = arguments.length, 6477 6478 // count of unprocessed arguments 6479 i = remaining, 6480 6481 // subordinate fulfillment data 6482 resolveContexts = Array( i ), 6483 resolveValues = slice.call( arguments ), 6484 6485 // the master Deferred 6486 master = jQuery.Deferred(), 6487 6488 // subordinate callback factory 6489 updateFunc = function( i ) { 6490 return function( value ) { 6491 resolveContexts[ i ] = this; 6492 resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; 6493 if ( !( --remaining ) ) { 6494 master.resolveWith( resolveContexts, resolveValues ); 6495 } 6496 }; 6497 }; 6498 6499 // Single- and empty arguments are adopted like Promise.resolve 6500 if ( remaining <= 1 ) { 6501 adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, 6502 !remaining ); 6503 6504 // Use .then() to unwrap secondary thenables (cf. gh-3000) 6505 if ( master.state() === "pending" || 6506 isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { 6507 6508 return master.then(); 6509 } 6510 } 6511 6512 // Multiple arguments are aggregated like Promise.all array elements 6513 while ( i-- ) { 6514 adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); 6515 } 6516 6517 return master.promise(); 6518 } 6519} ); 6520 6521 6522// These usually indicate a programmer mistake during development, 6523// warn about them ASAP rather than swallowing them by default. 6524var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; 6525 6526jQuery.Deferred.exceptionHook = function( error, stack ) { 6527 6528 // Support: IE 8 - 9 only 6529 // Console exists when dev tools are open, which can happen at any time 6530 if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { 6531 window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); 6532 } 6533}; 6534 6535 6536 6537 6538jQuery.readyException = function( error ) { 6539 window.setTimeout( function() { 6540 throw error; 6541 } ); 6542}; 6543 6544 6545 6546 6547// The deferred used on DOM ready 6548var readyList = jQuery.Deferred(); 6549 6550jQuery.fn.ready = function( fn ) { 6551 6552 readyList 6553 .then( fn ) 6554 6555 // Wrap jQuery.readyException in a function so that the lookup 6556 // happens at the time of error handling instead of callback 6557 // registration. 6558 .catch( function( error ) { 6559 jQuery.readyException( error ); 6560 } ); 6561 6562 return this; 6563}; 6564 6565jQuery.extend( { 6566 6567 // Is the DOM ready to be used? Set to true once it occurs. 6568 isReady: false, 6569 6570 // A counter to track how many items to wait for before 6571 // the ready event fires. See #6781 6572 readyWait: 1, 6573 6574 // Handle when the DOM is ready 6575 ready: function( wait ) { 6576 6577 // Abort if there are pending holds or we're already ready 6578 if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { 6579 return; 6580 } 6581 6582 // Remember that the DOM is ready 6583 jQuery.isReady = true; 6584 6585 // If a normal DOM Ready event fired, decrement, and wait if need be 6586 if ( wait !== true && --jQuery.readyWait > 0 ) { 6587 return; 6588 } 6589 6590 // If there are functions bound, to execute 6591 readyList.resolveWith( document, [ jQuery ] ); 6592 } 6593} ); 6594 6595jQuery.ready.then = readyList.then; 6596 6597// The ready event handler and self cleanup method 6598function completed() { 6599 document.removeEventListener( "DOMContentLoaded", completed ); 6600 window.removeEventListener( "load", completed ); 6601 jQuery.ready(); 6602} 6603 6604// Catch cases where $(document).ready() is called 6605// after the browser event has already occurred. 6606// Support: IE <=9 - 10 only 6607// Older IE sometimes signals "interactive" too soon 6608if ( document.readyState === "complete" || 6609 ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { 6610 6611 // Handle it asynchronously to allow scripts the opportunity to delay ready 6612 window.setTimeout( jQuery.ready ); 6613 6614} else { 6615 6616 // Use the handy event callback 6617 document.addEventListener( "DOMContentLoaded", completed ); 6618 6619 // A fallback to window.onload, that will always work 6620 window.addEventListener( "load", completed ); 6621} 6622 6623 6624 6625 6626// Multifunctional method to get and set values of a collection 6627// The value/s can optionally be executed if it's a function 6628var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { 6629 var i = 0, 6630 len = elems.length, 6631 bulk = key == null; 6632 6633 // Sets many values 6634 if ( toType( key ) === "object" ) { 6635 chainable = true; 6636 for ( i in key ) { 6637 access( elems, fn, i, key[ i ], true, emptyGet, raw ); 6638 } 6639 6640 // Sets one value 6641 } else if ( value !== undefined ) { 6642 chainable = true; 6643 6644 if ( !isFunction( value ) ) { 6645 raw = true; 6646 } 6647 6648 if ( bulk ) { 6649 6650 // Bulk operations run against the entire set 6651 if ( raw ) { 6652 fn.call( elems, value ); 6653 fn = null; 6654 6655 // ...except when executing function values 6656 } else { 6657 bulk = fn; 6658 fn = function( elem,
6658_key, value ) { 6659 return bulk.call( jQuery( elem ), value ); 6660 }; 6661 } 6662 } 6663 6664 if ( fn ) { 6665 for ( ; i < len; i++ ) { 6666 fn( 6667 elems[ i ], key, raw ? 6668 value :
vendor: 22,305 bytes, lines 6669-7577
6669 value.call( elems[ i ], i, fn( elems[ i ], key ) ) 6670 ); 6671 } 6672 } 6673 } 6674 6675 if ( chainable ) { 6676 return elems; 6677 } 6678 6679 // Gets 6680 if ( bulk ) { 6681 return fn.call( elems ); 6682 } 6683 6684 return len ? fn( elems[ 0 ], key ) : emptyGet; 6685}; 6686 6687 6688// Matches dashed string for camelizing 6689var rmsPrefix = /^-ms-/, 6690 rdashAlpha = /-([a-z])/g; 6691 6692// Used by camelCase as callback to replace() 6693function fcamelCase( _all, letter ) { 6694 return letter.toUpperCase(); 6695} 6696 6697// Convert dashed to camelCase; used by the css and data modules 6698// Support: IE <=9 - 11, Edge 12 - 15 6699// Microsoft forgot to hump their vendor prefix (#9572) 6700function camelCase( string ) { 6701 return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); 6702} 6703var acceptData = function( owner ) { 6704 6705 // Accepts only: 6706 // - Node 6707 // - Node.ELEMENT_NODE 6708 // - Node.DOCUMENT_NODE 6709 // - Object 6710 // - Any 6711 return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); 6712}; 6713 6714 6715 6716 6717function Data() { 6718 this.expando = jQuery.expando + Data.uid++; 6719} 6720 6721Data.uid = 1; 6722 6723Data.prototype = { 6724 6725 cache: function( owner ) { 6726 6727 // Check if the owner object already has a cache 6728 var value = owner[ this.expando ]; 6729 6730 // If not, create one 6731 if ( !value ) { 6732 value = {}; 6733 6734 // We can accept data for non-element nodes in modern browsers, 6735 // but we should not, see #8335. 6736 // Always return an empty object. 6737 if ( acceptData( owner ) ) { 6738 6739 // If it is a node unlikely to be stringify-ed or looped over 6740 // use plain assignment 6741 if ( owner.nodeType ) { 6742 owner[ this.expando ] = value; 6743 6744 // Otherwise secure it in a non-enumerable property 6745 // configurable must be true to allow the property to be 6746 // deleted when data is removed 6747 } else { 6748 Object.defineProperty( owner, this.expando, { 6749 value: value, 6750 configurable: true 6751 } ); 6752 } 6753 } 6754 } 6755 6756 return value; 6757 }, 6758 set: function( owner, data, value ) { 6759 var prop, 6760 cache = this.cache( owner ); 6761 6762 // Handle: [ owner, key, value ] args 6763 // Always use camelCase key (gh-2257) 6764 if ( typeof data === "string" ) { 6765 cache[ camelCase( data ) ] = value; 6766 6767 // Handle: [ owner, { properties } ] args 6768 } else { 6769 6770 // Copy the properties one-by-one to the cache object 6771 for ( prop in data ) { 6772 cache[ camelCase( prop ) ] = data[ prop ]; 6773 } 6774 } 6775 return cache; 6776 }, 6777 get: function( owner, key ) { 6778 return key === undefined ? 6779 this.cache( owner ) : 6780 6781 // Always use camelCase key (gh-2257) 6782 owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; 6783 }, 6784 access: function( owner, key, value ) { 6785 6786 // In cases where either: 6787 // 6788 // 1. No key was specified 6789 // 2. A string key was specified, but no value provided 6790 // 6791 // Take the "read" path and allow the get method to determine 6792 // which value to return, respectively either: 6793 // 6794 // 1. The entire cache object 6795 // 2. The data stored at the key 6796 // 6797 if ( key === undefined || 6798 ( ( key && typeof key === "string" ) && value === undefined ) ) { 6799 6800 return this.get( owner, key ); 6801 } 6802 6803 // When the key is not a string, or both a key and value 6804 // are specified, set or extend (existing objects) with either: 6805 // 6806 // 1. An object of properties 6807 // 2. A key and value 6808 // 6809 this.set( owner, key, value ); 6810 6811 // Since the "set" path can have two possible entry points 6812 // return the expected data based on which path was taken[*] 6813 return value !== undefined ? value : key; 6814 }, 6815 remove: function( owner, key ) { 6816 var i, 6817 cache = owner[ this.expando ]; 6818 6819 if ( cache === undefined ) { 6820 return; 6821 } 6822 6823 if ( key !== undefined ) { 6824 6825 // Support array or space separated string of keys 6826 if ( Array.isArray( key ) ) { 6827 6828 // If key is an array of keys... 6829 // We always set camelCase keys, so remove that. 6830 key = key.map( camelCase ); 6831 } else { 6832 key = camelCase( key ); 6833 6834 // If a key with the spaces exists, use it. 6835 // Otherwise, create an array by matching non-whitespace 6836 key = key in cache ? 6837 [ key ] : 6838 ( key.match( rnothtmlwhite ) || [] ); 6839 } 6840 6841 i = key.length; 6842 6843 while ( i-- ) { 6844 delete cache[ key[ i ] ]; 6845 } 6846 } 6847 6848 // Remove the expando if there's no more data 6849 if ( key === undefined || jQuery.isEmptyObject( cache ) ) { 6850 6851 // Support: Chrome <=35 - 45 6852 // Webkit & Blink performance suffers when deleting properties 6853 // from DOM nodes, so set to undefined instead 6854 // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) 6855 if ( owner.nodeType ) { 6856 owner[ this.expando ] = undefined; 6857 } else { 6858 delete owner[ this.expando ]; 6859 } 6860 } 6861 }, 6862 hasData: function( owner ) { 6863 var cache = owner[ this.expando ]; 6864 return cache !== undefined && !jQuery.isEmptyObject( cache ); 6865 } 6866}; 6867var dataPriv = new Data(); 6868 6869var dataUser = new Data(); 6870 6871 6872 6873// Implementation Summary 6874// 6875// 1. Enforce API surface and semantic compatibility with 1.9.x branch 6876// 2. Improve the module's maintainability by reducing the storage 6877// paths to a single mechanism. 6878// 3. Use the same single mechanism to support "private" and "user" data. 6879// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) 6880// 5. Avoid exposing implementation details on user objects (eg. expando properties) 6881// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 6882 6883var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, 6884 rmultiDash = /[A-Z]/g; 6885 6886function getData( data ) { 6887 if ( data === "true" ) { 6888 return true; 6889 } 6890 6891 if ( data === "false" ) { 6892 return false; 6893 } 6894 6895 if ( data === "null" ) { 6896 return null; 6897 } 6898 6899 // Only convert to a number if it doesn't change the string 6900 if ( data === +data + "" ) { 6901 return +data; 6902 } 6903 6904 if ( rbrace.test( data ) ) { 6905 return JSON.parse( data ); 6906 } 6907 6908 return data; 6909} 6910 6911function dataAttr( elem, key, data ) { 6912 var name; 6913 6914 // If nothing was found internally, try to fetch any 6915 // data from the HTML5 data-* attribute 6916 if ( data === undefined && elem.nodeType === 1 ) { 6917 name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); 6918 data = elem.getAttribute( name ); 6919 6920 if ( typeof data === "string" ) { 6921 try { 6922 data = getData( data ); 6923 } catch ( e ) {} 6924 6925 // Make sure we set the data so it isn't changed later 6926 dataUser.set( elem, key, data ); 6927 } else { 6928 data = undefined; 6929 } 6930 } 6931 return data; 6932} 6933 6934jQuery.extend( { 6935 hasData: function( elem ) { 6936 return dataUser.hasData( elem ) || dataPriv.hasData( elem ); 6937 }, 6938 6939 data: function( elem, name, data ) { 6940 return dataUser.access( elem, name, data ); 6941 }, 6942 6943 removeData: function( elem, name ) { 6944 dataUser.remove( elem, name ); 6945 }, 6946 6947 // TODO: Now that all calls to _data and _removeData have been replaced 6948 // with direct calls to dataPriv methods, these can be deprecated. 6949 _data: function( elem, name, data ) { 6950 return dataPriv.access( elem, name, data ); 6951 }, 6952 6953 _removeData: function( elem, name ) { 6954 dataPriv.remove( elem, name ); 6955 } 6956} ); 6957 6958jQuery.fn.extend( { 6959 data: function( key, value ) { 6960 var i, name, data, 6961 elem = this[ 0 ], 6962 attrs = elem && elem.attributes; 6963 6964 // Gets all values 6965 if ( key === undefined ) { 6966 if ( this.length ) { 6967 data = dataUser.get( elem ); 6968 6969 if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { 6970 i = attrs.length; 6971 while ( i-- ) { 6972 6973 // Support: IE 11 only 6974 // The attrs elements can be null (#14894) 6975 if ( attrs[ i ] ) { 6976 name = attrs[ i ].name; 6977 if ( name.indexOf( "data-" ) === 0 ) { 6978 name = camelCase( name.slice( 5 ) ); 6979 dataAttr( elem, name, data[ name ] ); 6980 } 6981 } 6982 } 6983 dataPriv.set( elem, "hasDataAttrs", true ); 6984 } 6985 } 6986 6987 return data; 6988 } 6989 6990 // Sets multiple values 6991 if ( typeof key === "object" ) { 6992 return this.each( function() { 6993 dataUser.set( this, key ); 6994 } ); 6995 } 6996 6997 return access( this, function( value ) { 6998 var data; 6999 7000 // The calling jQuery object (element matches) is not empty 7001 // (and therefore has an element appears at this[ 0 ]) and the 7002 // `value` parameter was not undefined. An empty jQuery object 7003 // will result in `undefined` for elem = this[ 0 ] which will 7004 // throw an exception if an attempt to read a data cache is made. 7005 if ( elem && value === undefined ) { 7006 7007 // Attempt to get data from the cache 7008 // The key will always be camelCased in Data 7009 data = dataUser.get( elem, key ); 7010 if ( data !== undefined ) { 7011 return data; 7012 } 7013 7014 // Attempt to "discover" the data in 7015 // HTML5 custom data-* attrs 7016 data = dataAttr( elem, key ); 7017 if ( data !== undefined ) { 7018 return data; 7019 } 7020 7021 // We tried really hard, but the data doesn't exist. 7022 return; 7023 } 7024 7025 // Set the data... 7026 this.each( function() { 7027 7028 // We always store the camelCased key 7029 dataUser.set( this, key, value ); 7030 } ); 7031 }, null, value, arguments.length > 1, null, true ); 7032 }, 7033 7034 removeData: function( key ) { 7035 return this.each( function() { 7036 dataUser.remove( this, key ); 7037 } ); 7038 } 7039} ); 7040 7041 7042jQuery.extend( { 7043 queue: function( elem, type, data ) { 7044 var queue; 7045 7046 if ( elem ) { 7047 type = ( type || "fx" ) + "queue"; 7048 queue = dataPriv.get( elem, type ); 7049 7050 // Speed up dequeue by getting out quickly if this is just a lookup 7051 if ( data ) { 7052 if ( !queue || Array.isArray( data ) ) { 7053 queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); 7054 } else { 7055 queue.push( data ); 7056 } 7057 } 7058 return queue || []; 7059 } 7060 }, 7061 7062 dequeue: function( elem, type ) { 7063 type = type || "fx"; 7064 7065 var queue = jQuery.queue( elem, type ), 7066 startLength = queue.length, 7067 fn = queue.shift(), 7068 hooks = jQuery._queueHooks( elem, type ), 7069 next = function() { 7070 jQuery.dequeue( elem, type ); 7071 }; 7072 7073 // If the fx queue is dequeued, always remove the progress sentinel 7074 if ( fn === "inprogress" ) { 7075 fn = queue.shift(); 7076 startLength--; 7077 } 7078 7079 if ( fn ) { 7080 7081 // Add a progress sentinel to prevent the fx queue from being 7082 // automatically dequeued 7083 if ( type === "fx" ) { 7084 queue.unshift( "inprogress" ); 7085 } 7086 7087 // Clear up the last queue stop function 7088 delete hooks.stop; 7089 fn.call( elem, next, hooks ); 7090 } 7091 7092 if ( !startLength && hooks ) { 7093 hooks.empty.fire(); 7094 } 7095 }, 7096 7097 // Not public - generate a queueHooks object, or return the current one 7098 _queueHooks: function( elem, type ) { 7099 var key = type + "queueHooks"; 7100 return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { 7101 empty: jQuery.Callbacks( "once memory" ).add( function() { 7102 dataPriv.remove( elem, [ type + "queue", key ] ); 7103 } ) 7104 } ); 7105 } 7106} ); 7107 7108jQuery.fn.extend( { 7109 queue: function( type, data ) { 7110 var setter = 2; 7111 7112 if ( typeof type !== "string" ) { 7113 data = type; 7114 type = "fx"; 7115 setter--; 7116 } 7117 7118 if ( arguments.length < setter ) { 7119 return jQuery.queue( this[ 0 ], type ); 7120 } 7121 7122 return data === undefined ? 7123 this : 7124 this.each( function() { 7125 var queue = jQuery.queue( this, type, data ); 7126 7127 // Ensure a hooks for this queue 7128 jQuery._queueHooks( this, type ); 7129 7130 if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { 7131 jQuery.dequeue( this, type ); 7132 } 7133 } ); 7134 }, 7135 dequeue: function( type ) { 7136 return this.each( function() { 7137 jQuery.dequeue( this, type ); 7138 } ); 7139 }, 7140 clearQueue: function( type ) { 7141 return this.queue( type || "fx", [] ); 7142 }, 7143 7144 // Get a promise resolved when queues of a certain type 7145 // are emptied (fx is the type by default) 7146 promise: function( type, obj ) { 7147 var tmp, 7148 count = 1, 7149 defer = jQuery.Deferred(), 7150 elements = this, 7151 i = this.length, 7152 resolve = function() { 7153 if ( !( --count ) ) { 7154 defer.resolveWith( elements, [ elements ] ); 7155 } 7156 }; 7157 7158 if ( typeof type !== "string" ) { 7159 obj = type; 7160 type = undefined; 7161 } 7162 type = type || "fx"; 7163 7164 while ( i-- ) { 7165 tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); 7166 if ( tmp && tmp.empty ) { 7167 count++; 7168 tmp.empty.add( resolve ); 7169 } 7170 } 7171 resolve(); 7172 return defer.promise( obj ); 7173 } 7174} ); 7175var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; 7176 7177var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); 7178 7179 7180var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; 7181 7182var documentElement = document.documentElement; 7183 7184 7185 7186 var isAttached = function( elem ) { 7187 return jQuery.contains( elem.ownerDocument, elem ); 7188 }, 7189 composed = { composed: true }; 7190 7191 // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only 7192 // Check attachment across shadow DOM boundaries when possible (gh-3504) 7193 // Support: iOS 10.0-10.2 only 7194 // Early iOS 10 versions support `attachShadow` but not `getRootNode`, 7195 // leading to errors. We need to check for `getRootNode`. 7196 if ( documentElement.getRootNode ) { 7197 isAttached = function( elem ) { 7198 return jQuery.contains( elem.ownerDocument, elem ) || 7199 elem.getRootNode( composed ) === elem.ownerDocument; 7200 }; 7201 } 7202var isHiddenWithinTree = function( elem, el ) { 7203 7204 // isHiddenWithinTree might be called from jQuery#filter function; 7205 // in that case, element will be second argument 7206 elem = el || elem; 7207 7208 // Inline style trumps all 7209 return elem.style.display === "none" || 7210 elem.style.display === "" && 7211 7212 // Otherwise, check computed style 7213 // Support: Firefox <=43 - 45 7214 // Disconnected elements can have computed display: none, so first confirm that elem is 7215 // in the document. 7216 isAttached( elem ) && 7217 7218 jQuery.css( elem, "display" ) === "none"; 7219 }; 7220 7221 7222 7223function adjustCSS( elem, prop, valueParts, tween ) { 7224 var adjusted, scale, 7225 maxIterations = 20, 7226 currentValue = tween ? 7227 function() { 7228 return tween.cur(); 7229 } : 7230 function() { 7231 return jQuery.css( elem, prop, "" ); 7232 }, 7233 initial = currentValue(), 7234 unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), 7235 7236 // Starting value computation is required for potential unit mismatches 7237 initialInUnit = elem.nodeType && 7238 ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && 7239 rcssNum.exec( jQuery.css( elem, prop ) ); 7240 7241 if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { 7242 7243 // Support: Firefox <=54 7244 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) 7245 initial = initial / 2; 7246 7247 // Trust units reported by jQuery.css 7248 unit = unit || initialInUnit[ 3 ]; 7249 7250 // Iteratively approximate from a nonzero starting point 7251 initialInUnit = +initial || 1; 7252 7253 while ( maxIterations-- ) { 7254 7255 // Evaluate and update our best guess (doubling guesses that zero out). 7256 // Finish if the scale equals or crosses 1 (making the old*new product non-positive). 7257 jQuery.style( elem, prop, initialInUnit + unit ); 7258 if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { 7259 maxIterations = 0; 7260 } 7261 initialInUnit = initialInUnit / scale; 7262 7263 } 7264 7265 initialInUnit = initialInUnit * 2; 7266 jQuery.style( elem, prop, initialInUnit + unit ); 7267 7268 // Make sure we update the tween properties later on 7269 valueParts = valueParts || []; 7270 } 7271 7272 if ( valueParts ) { 7273 initialInUnit = +initialInUnit || +initial || 0; 7274 7275 // Apply relative offset (+=/-=) if specified 7276 adjusted = valueParts[ 1 ] ? 7277 initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : 7278 +valueParts[ 2 ]; 7279 if ( tween ) { 7280 tween.unit = unit; 7281 tween.start = initialInUnit; 7282 tween.end = adjusted; 7283 } 7284 } 7285 return adjusted; 7286} 7287 7288 7289var defaultDisplayMap = {}; 7290 7291function getDefaultDisplay( elem ) { 7292 var temp, 7293 doc = elem.ownerDocument, 7294 nodeName = elem.nodeName, 7295 display = defaultDisplayMap[ nodeName ]; 7296 7297 if ( display ) { 7298 return display; 7299 } 7300 7301 temp = doc.body.appendChild( doc.createElement( nodeName ) ); 7302 display = jQuery.css( temp, "display" ); 7303 7304 temp.parentNode.removeChild( temp ); 7305 7306 if ( display === "none" ) { 7307 display = "block"; 7308 } 7309 defaultDisplayMap[ nodeName ] = display; 7310 7311 return display; 7312} 7313 7314function showHide( elements, show ) { 7315 var display, elem, 7316 values = [], 7317 index = 0, 7318 length = elements.length; 7319 7320 // Determine new display value for elements that need to change 7321 for ( ; index < length; index++ ) { 7322 elem = elements[ index ]; 7323 if ( !elem.style ) { 7324 continue; 7325 } 7326 7327 display = elem.style.display; 7328 if ( show ) { 7329 7330 // Since we force visibility upon cascade-hidden elements, an immediate (and slow) 7331 // check is required in this first loop unless we have a nonempty display value (either 7332 // inline or about-to-be-restored) 7333 if ( display === "none" ) { 7334 values[ index ] = dataPriv.get( elem, "display" ) || null; 7335 if ( !values[ index ] ) { 7336 elem.style.display = ""; 7337 } 7338 } 7339 if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { 7340 values[ index ] = getDefaultDisplay( elem ); 7341 } 7342 } else { 7343 if ( display !== "none" ) { 7344 values[ index ] = "none"; 7345 7346 // Remember what we're overwriting 7347 dataPriv.set( elem, "display", display ); 7348 } 7349 } 7350 } 7351 7352 // Set the display of the elements in a second loop to avoid constant reflow 7353 for ( index = 0; index < length; index++ ) { 7354 if ( values[ index ] != null ) { 7355 elements[ index ].style.display = values[ index ]; 7356 } 7357 } 7358 7359 return elements; 7360} 7361 7362jQuery.fn.extend( { 7363 show: function() { 7364 return showHide( this, true ); 7365 }, 7366 hide: function() { 7367 return showHide( this ); 7368 }, 7369 toggle: function( state ) { 7370 if ( typeof state === "boolean" ) { 7371 return state ? this.show() : this.hide(); 7372 } 7373 7374 return this.each( function() { 7375 if ( isHiddenWithinTree( this ) ) { 7376 jQuery( this ).show(); 7377 } else { 7378 jQuery( this ).hide(); 7379 } 7380 } ); 7381 } 7382} ); 7383var rcheckableType = ( /^(?:checkbox|radio)$/i ); 7384 7385var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); 7386 7387var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); 7388 7389 7390 7391( function() { 7392 var fragment = document.createDocumentFragment(), 7393 div = fragment.appendChild( document.createElement( "div" ) ), 7394 input = document.createElement( "input" ); 7395 7396 // Support: Android 4.0 - 4.3 only 7397 // Check state lost if the name is set (#11217) 7398 // Support: Windows Web Apps (WWA) 7399 // `name` and `type` must use .setAttribute for WWA (#14901) 7400 input.setAttribute( "type", "radio" ); 7401 input.setAttribute( "checked", "checked" ); 7402 input.setAttribute( "name", "t" ); 7403 7404 div.appendChild( input ); 7405 7406 // Support: Android <=4.1 only 7407 // Older WebKit doesn't clone checked state correctly in fragments 7408 support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; 7409 7410 // Support: IE <=11 only 7411 // Make sure textarea (and checkbox) defaultValue is properly cloned 7412 div.innerHTML = "<textarea>x</textarea>"; 7413 support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; 7414 7415 // Support: IE <=9 only 7416 // IE <=9 replaces <option> tags with their contents when inserted outside of 7417 // the select element. 7418 div.innerHTML = "<option></option>"; 7419 support.option = !!div.lastChild; 7420} )(); 7421 7422 7423// We have to close these tags to support XHTML (#13200) 7424var wrapMap = { 7425 7426 // XHTML parsers do not magically insert elements in the 7427 // same way that tag soup parsers do. So we cannot shorten 7428 // this by omitting <tbody> or other required elements. 7429 thead: [ 1, "<table>", "</table>" ], 7430 col: [ 2, "<table><colgroup>", "</colgroup></table>" ], 7431 tr: [ 2, "<table><tbody>", "</tbody></table>" ], 7432 td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], 7433 7434 _default: [ 0, "", "" ] 7435}; 7436 7437wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; 7438wrapMap.th = wrapMap.td; 7439 7440// Support: IE <=9 only 7441if ( !support.option ) { 7442 wrapMap.optgroup = wrapMap.option = [ 1, "<select multiple='multiple'>", "</select>" ]; 7443} 7444 7445 7446function getAll( context, tag ) { 7447 7448 // Support: IE <=9 - 11 only 7449 // Use typeof to avoid zero-argument method invocation on host objects (#15151) 7450 var ret; 7451 7452 if ( typeof context.getElementsByTagName !== "undefined" ) { 7453 ret = context.getElementsByTagName( tag || "*" ); 7454 7455 } else if ( typeof context.querySelectorAll !== "undefined" ) { 7456 ret = context.querySelectorAll( tag || "*" ); 7457 7458 } else { 7459 ret = []; 7460 } 7461 7462 if ( tag === undefined || tag && nodeName( context, tag ) ) { 7463 return jQuery.merge( [ context ], ret ); 7464 } 7465 7466 return ret; 7467} 7468 7469 7470// Mark scripts as having already been evaluated 7471function setGlobalEval( elems, refElements ) { 7472 var i = 0, 7473 l = elems.length; 7474 7475 for ( ; i < l; i++ ) { 7476 dataPriv.set( 7477 elems[ i ], 7478 "globalEval", 7479 !refElements || dataPriv.get( refElements[ i ], "globalEval" ) 7480 ); 7481 } 7482} 7483 7484 7485var rhtml = /<|&#?\w+;/; 7486 7487function buildFragment( elems, context, scripts, selection, ignored ) { 7488 var elem, tmp, tag, wrap, attached, j, 7489 fragment = context.createDocumentFragment(), 7490 nodes = [], 7491 i = 0, 7492 l = elems.length; 7493 7494 for ( ; i < l; i++ ) { 7495 elem = elems[ i ]; 7496 7497 if ( elem || elem === 0 ) { 7498 7499 // Add nodes directly 7500 if ( toType( elem ) === "object" ) { 7501 7502 // Support: Android <=4.0 only, PhantomJS 1 only 7503 // push.apply(_, arraylike) throws on ancient WebKit 7504 jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); 7505 7506 // Convert non-html into a text node 7507 } else if ( !rhtml.test( elem ) ) { 7508 nodes.push( context.createTextNode( elem ) ); 7509 7510 // Convert html into DOM nodes 7511 } else { 7512 tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); 7513 7514 // Deserialize a standard representation 7515 tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); 7516 wrap = wrapMap[ tag ] || wrapMap._default; 7517 tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; 7518 7519 // Descend through wrappers to the right content 7520 j = wrap[ 0 ]; 7521 while ( j-- ) { 7522 tmp = tmp.lastChild; 7523 } 7524 7525 // Support: Android <=4.0 only, PhantomJS 1 only 7526 // push.apply(_, arraylike) throws on ancient WebKit 7527 jQuery.merge( nodes, tmp.childNodes ); 7528 7529 // Remember the top-level container 7530 tmp = fragment.firstChild; 7531 7532 // Ensure the created nodes are orphaned (#12392) 7533 tmp.textContent = ""; 7534 } 7535 } 7536 } 7537 7538 // Remove wrapper from fragment 7539 fragment.textContent = ""; 7540 7541 i = 0; 7542 while ( ( elem = nodes[ i++ ] ) ) { 7543 7544 // Skip elements already in the context collection (trac-4087) 7545 if ( selection && jQuery.inArray( elem, selection ) > -1 ) { 7546 if ( ignored ) { 7547 ignored.push( elem ); 7548 } 7549 continue; 7550 } 7551 7552 attached = isAttached( elem ); 7553 7554 // Append to fragment 7555 tmp = getAll( fragment.appendChild( elem ), "script" ); 7556 7557 // Preserve script evaluation history 7558 if ( attached ) { 7559 setGlobalEval( tmp ); 7560 } 7561 7562 // Capture executables 7563 if ( scripts ) { 7564 j = 0; 7565 while ( ( elem = tmp[ j++ ] ) ) { 7566 if ( rscriptType.test( elem.type || "" ) ) { 7567 scripts.push( elem ); 7568 } 7569 } 7570 } 7571 } 7572 7573 return fragment; 7574} 7575 7576 7577var
7577
vendor: 6,183 bytes, lines 7578-7803
7578 rkeyEvent = /^key/, 7579 rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, 7580 rtypenamespace = /^([^.]*)(?:\.(.+)|)/; 7581 7582function returnTrue() { 7583 return true; 7584} 7585 7586function returnFalse() { 7587 return false; 7588} 7589 7590// Support: IE <=9 - 11+ 7591// focus() and blur() are asynchronous, except when they are no-op. 7592// So expect focus to be synchronous when the element is already active, 7593// and blur to be synchronous when the element is not already active. 7594// (focus and blur are always synchronous in other supported browsers, 7595// this just defines when we can count on it). 7596function expectSync( elem, type ) { 7597 return ( elem === safeActiveElement() ) === ( type === "focus" ); 7598} 7599 7600// Support: IE <=9 only 7601// Accessing document.activeElement can throw unexpectedly 7602// https://bugs.jquery.com/ticket/13393 7603function safeActiveElement() { 7604 try { 7605 return document.activeElement; 7606 } catch ( err ) { } 7607} 7608 7609function on( elem, types, selector, data, fn, one ) { 7610 var origFn, type; 7611 7612 // Types can be a map of types/handlers 7613 if ( typeof types === "object" ) { 7614 7615 // ( types-Object, selector, data ) 7616 if ( typeof selector !== "string" ) { 7617 7618 // ( types-Object, data ) 7619 data = data || selector; 7620 selector = undefined; 7621 } 7622 for ( type in types ) { 7623 on( elem, type, selector, data, types[ type ], one ); 7624 } 7625 return elem; 7626 } 7627 7628 if ( data == null && fn == null ) { 7629 7630 // ( types, fn ) 7631 fn = selector; 7632 data = selector = undefined; 7633 } else if ( fn == null ) { 7634 if ( typeof selector === "string" ) { 7635 7636 // ( types, selector, fn ) 7637 fn = data; 7638 data = undefined; 7639 } else { 7640 7641 // ( types, data, fn ) 7642 fn = data; 7643 data = selector; 7644 selector = undefined; 7645 } 7646 } 7647 if ( fn === false ) { 7648 fn = returnFalse; 7649 } else if ( !fn ) { 7650 return elem; 7651 } 7652 7653 if ( one === 1 ) { 7654 origFn = fn; 7655 fn = function( event ) { 7656 7657 // Can use an empty set, since event contains the info 7658 jQuery().off( event ); 7659 return origFn.apply( this, arguments ); 7660 }; 7661 7662 // Use same guid so caller can remove using origFn 7663 fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); 7664 } 7665 return elem.each( function() { 7666 jQuery.event.add( this, types, fn, data, selector ); 7667 } ); 7668} 7669 7670/* 7671 * Helper functions for managing events -- not part of the public interface. 7672 * Props to Dean Edwards' addEvent library for many of the ideas. 7673 */ 7674jQuery.event = { 7675 7676 global: {}, 7677 7678 add: function( elem, types, handler, data, selector ) { 7679 7680 var handleObjIn, eventHandle, tmp, 7681 events, t, handleObj, 7682 special, handlers, type, namespaces, origType, 7683 elemData = dataPriv.get( elem ); 7684 7685 // Only attach events to objects that accept data 7686 if ( !acceptData( elem ) ) { 7687 return; 7688 } 7689 7690 // Caller can pass in an object of custom data in lieu of the handler 7691 if ( handler.handler ) { 7692 handleObjIn = handler; 7693 handler = handleObjIn.handler; 7694 selector = handleObjIn.selector; 7695 } 7696 7697 // Ensure that invalid selectors throw exceptions at attach time 7698 // Evaluate against documentElement in case elem is a non-element node (e.g., document) 7699 if ( selector ) { 7700 jQuery.find.matchesSelector( documentElement, selector ); 7701 } 7702 7703 // Make sure that the handler has a unique ID, used to find/remove it later 7704 if ( !handler.guid ) { 7705 handler.guid = jQuery.guid++; 7706 } 7707 7708 // Init the element's event structure and main handler, if this is the first 7709 if ( !( events = elemData.events ) ) { 7710 events = elemData.events = Object.create( null ); 7711 } 7712 if ( !( eventHandle = elemData.handle ) ) { 7713 eventHandle = elemData.handle = function( e ) { 7714 7715 // Discard the second event of a jQuery.event.trigger() and 7716 // when an event is called after a page has unloaded 7717 return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? 7718 jQuery.event.dispatch.apply( elem, arguments ) : undefined; 7719 }; 7720 } 7721 7722 // Handle multiple events separated by a space 7723 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 7724 t = types.length; 7725 while ( t-- ) { 7726 tmp = rtypenamespace.exec( types[ t ] ) || []; 7727 type = origType = tmp[ 1 ]; 7728 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 7729 7730 // There *must* be a type, no attaching namespace-only handlers 7731 if ( !type ) { 7732 continue; 7733 } 7734 7735 // If event changes its type, use the special event handlers for the changed type 7736 special = jQuery.event.special[ type ] || {}; 7737 7738 // If selector defined, determine special event api type, otherwise given type 7739 type = ( selector ? special.delegateType : special.bindType ) || type; 7740 7741 // Update special based on newly reset type 7742 special = jQuery.event.special[ type ] || {}; 7743 7744 // handleObj is passed to all event handlers 7745 handleObj = jQuery.extend( { 7746 type: type, 7747 origType: origType, 7748 data: data, 7749 handler: handler, 7750 guid: handler.guid, 7751 selector: selector, 7752 needsContext: selector && jQuery.expr.match.needsContext.test( selector ), 7753 namespace: namespaces.join( "." ) 7754 }, handleObjIn ); 7755 7756 // Init the event handler queue if we're the first 7757 if ( !( handlers = events[ type ] ) ) { 7758 handlers = events[ type ] = []; 7759 handlers.delegateCount = 0; 7760 7761 // Only use addEventListener if the special events handler returns false 7762 if ( !special.setup || 7763 special.setup.call( elem, data, namespaces, eventHandle ) === false ) { 7764 7765 if ( elem.addEventListener ) { 7766 elem.addEventListener( type, eventHandle ); 7767 } 7768 } 7769 } 7770 7771 if ( special.add ) { 7772 special.add.call( elem, handleObj ); 7773 7774 if ( !handleObj.handler.guid ) { 7775 handleObj.handler.guid = handler.guid; 7776 } 7777 } 7778 7779 // Add to the element's handler list, delegates in front 7780 if ( selector ) { 7781 handlers.splice( handlers.delegateCount++, 0, handleObj ); 7782 } else { 7783 handlers.push( handleObj ); 7784 } 7785 7786 // Keep track of which events have ever been used, for event optimization 7787 jQuery.event.global[ type ] = true; 7788 } 7789 7790 }, 7791 7792 // Detach an event or set of events from an element 7793 remove: function( elem, types, handler, selector, mappedTypes ) { 7794 7795 var j, origCount, tmp, 7796 events, t, handleObj, 7797 special, handlers, type, namespaces, origType, 7798 elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); 7799 7800 if ( !elemData || !( events = elemData.events ) ) { 7801 return; 7802 } 7803
vendor: 4,199 bytes, lines 7804-7942
7804 // Once for each type.namespace in types; type may be omitted 7805 types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; 7806 t = types.length; 7807 while ( t-- ) { 7808 tmp = rtypenamespace.exec( types[ t ] ) || []; 7809 type = origType = tmp[ 1 ]; 7810 namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); 7811 7812 // Unbind all events (on this namespace, if provided) for the element 7813 if ( !type ) { 7814 for ( type in events ) { 7815 jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); 7816 } 7817 continue; 7818 } 7819 7820 special = jQuery.event.special[ type ] || {}; 7821 type = ( selector ? special.delegateType : special.bindType ) || type; 7822 handlers = events[ type ] || []; 7823 tmp = tmp[ 2 ] && 7824 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); 7825 7826 // Remove matching events 7827 origCount = j = handlers.length; 7828 while ( j-- ) { 7829 handleObj = handlers[ j ]; 7830 7831 if ( ( mappedTypes || origType === handleObj.origType ) && 7832 ( !handler || handler.guid === handleObj.guid ) && 7833 ( !tmp || tmp.test( handleObj.namespace ) ) && 7834 ( !selector || selector === handleObj.selector || 7835 selector === "**" && handleObj.selector ) ) { 7836 handlers.splice( j, 1 ); 7837 7838 if ( handleObj.selector ) { 7839 handlers.delegateCount--; 7840 } 7841 if ( special.remove ) { 7842 special.remove.call( elem, handleObj ); 7843 } 7844 } 7845 } 7846 7847 // Remove generic event handler if we removed something and no more handlers exist 7848 // (avoids potential for endless recursion during removal of special event handlers) 7849 if ( origCount && !handlers.length ) { 7850 if ( !special.teardown || 7851 special.teardown.call( elem, namespaces, elemData.handle ) === false ) { 7852 7853 jQuery.removeEvent( elem, type, elemData.handle ); 7854 } 7855 7856 delete events[ type ]; 7857 } 7858 } 7859 7860 // Remove data and the expando if it's no longer used 7861 if ( jQuery.isEmptyObject( events ) ) { 7862 dataPriv.remove( elem, "handle events" ); 7863 } 7864 }, 7865 7866 dispatch: function( nativeEvent ) { 7867 7868 var i, j, ret, matched, handleObj, handlerQueue, 7869 args = new Array( arguments.length ), 7870 7871 // Make a writable jQuery.Event from the native event object 7872 event = jQuery.event.fix( nativeEvent ), 7873 7874 handlers = ( 7875 dataPriv.get( this, "events" ) || Object.create( null ) 7876 )[ event.type ] || [], 7877 special = jQuery.event.special[ event.type ] || {}; 7878 7879 // Use the fix-ed jQuery.Event rather than the (read-only) native event 7880 args[ 0 ] = event; 7881 7882 for ( i = 1; i < arguments.length; i++ ) { 7883 args[ i ] = arguments[ i ]; 7884 } 7885 7886 event.delegateTarget = this; 7887 7888 // Call the preDispatch hook for the mapped type, and let it bail if desired 7889 if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { 7890 return; 7891 } 7892 7893 // Determine handlers 7894 handlerQueue = jQuery.event.handlers.call( this, event, handlers ); 7895 7896 // Run delegates first; they may want to stop propagation beneath us 7897 i = 0; 7898 while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { 7899 event.currentTarget = matched.elem; 7900 7901 j = 0; 7902 while ( ( handleObj = matched.handlers[ j++ ] ) && 7903 !event.isImmediatePropagationStopped() ) { 7904 7905 // If the event is namespaced, then each handler is only invoked if it is 7906 // specially universal or its namespaces are a superset of the event's. 7907 if ( !event.rnamespace || handleObj.namespace === false || 7908 event.rnamespace.test( handleObj.namespace ) ) { 7909 7910 event.handleObj = handleObj; 7911 event.data = handleObj.data; 7912 7913 ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || 7914 handleObj.handler ).apply( matched.elem, args ); 7915 7916 if ( ret !== undefined ) { 7917 if ( ( event.result = ret ) === false ) { 7918 event.preventDefault(); 7919 event.stopPropagation(); 7920 } 7921 } 7922 } 7923 } 7924 } 7925 7926 // Call the postDispatch hook for the mapped type 7927 if ( special.postDispatch ) { 7928 special.postDispatch.call( this, event ); 7929 } 7930 7931 return event.result; 7932 }, 7933 7934 handlers: function( event, handlers ) { 7935 var i, handleObj, sel, matchedHandlers, matchedSelectors, 7936 handlerQueue = [], 7937 delegateCount = handlers.delegateCount, 7938 cur = event.target; 7939 7940 // Find delegate handlers 7941 if ( delegateCount && 7942
vendor: 5,718 bytes, lines 7943-8128
7943 // Support: IE <=9 7944 // Black-hole SVG <use> instance trees (trac-13180) 7945 cur.nodeType && 7946 7947 // Support: Firefox <=42 7948 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) 7949 // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click 7950 // Support: IE 11 only 7951 // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) 7952 !( event.type === "click" && event.button >= 1 ) ) { 7953 7954 for ( ; cur !== this; cur = cur.parentNode || this ) { 7955 7956 // Don't check non-elements (#13208) 7957 // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) 7958 if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { 7959 matchedHandlers = []; 7960 matchedSelectors = {}; 7961 for ( i = 0; i < delegateCount; i++ ) { 7962 handleObj = handlers[ i ]; 7963 7964 // Don't conflict with Object.prototype properties (#13203) 7965 sel = handleObj.selector + " "; 7966 7967 if ( matchedSelectors[ sel ] === undefined ) { 7968 matchedSelectors[ sel ] = handleObj.needsContext ? 7969 jQuery( sel, this ).index( cur ) > -1 : 7970 jQuery.find( sel, this, null, [ cur ] ).length; 7971 } 7972 if ( matchedSelectors[ sel ] ) { 7973 matchedHandlers.push( handleObj ); 7974 } 7975 } 7976 if ( matchedHandlers.length ) { 7977 handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); 7978 } 7979 } 7980 } 7981 } 7982 7983 // Add the remaining (directly-bound) handlers 7984 cur = this; 7985 if ( delegateCount < handlers.length ) { 7986 handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); 7987 } 7988 7989 return handlerQueue; 7990 }, 7991 7992 addProp: function( name, hook ) { 7993 Object.defineProperty( jQuery.Event.prototype, name, { 7994 enumerable: true, 7995 configurable: true, 7996 7997 get: isFunction( hook ) ? 7998 function() { 7999 if ( this.originalEvent ) { 8000 return hook( this.originalEvent ); 8001 } 8002 } : 8003 function() { 8004 if ( this.originalEvent ) { 8005 return this.originalEvent[ name ]; 8006 } 8007 }, 8008 8009 set: function( value ) { 8010 Object.defineProperty( this, name, { 8011 enumerable: true, 8012 configurable: true, 8013 writable: true, 8014 value: value 8015 } ); 8016 } 8017 } ); 8018 }, 8019 8020 fix: function( originalEvent ) { 8021 return originalEvent[ jQuery.expando ] ? 8022 originalEvent : 8023 new jQuery.Event( originalEvent ); 8024 }, 8025 8026 special: { 8027 load: { 8028 8029 // Prevent triggered image.load events from bubbling to window.load 8030 noBubble: true 8031 }, 8032 click: { 8033 8034 // Utilize native event to ensure correct state for checkable inputs 8035 setup: function( data ) { 8036 8037 // For mutual compressibility with _default, replace `this` access with a local var. 8038 // `|| data` is dead code meant only to preserve the variable through minification. 8039 var el = this || data; 8040 8041 // Claim the first handler 8042 if ( rcheckableType.test( el.type ) && 8043 el.click && nodeName( el, "input" ) ) { 8044 8045 // dataPriv.set( el, "click", ... ) 8046 leverageNative( el, "click", returnTrue ); 8047 } 8048 8049 // Return false to allow normal processing in the caller 8050 return false; 8051 }, 8052 trigger: function( data ) { 8053 8054 // For mutual compressibility with _default, replace `this` access with a local var. 8055 // `|| data` is dead code meant only to preserve the variable through minification. 8056 var el = this || data; 8057 8058 // Force setup before triggering a click 8059 if ( rcheckableType.test( el.type ) && 8060 el.click && nodeName( el, "input" ) ) { 8061 8062 leverageNative( el, "click" ); 8063 } 8064 8065 // Return non-false to allow normal event-path propagation 8066 return true; 8067 }, 8068 8069 // For cross-browser consistency, suppress native .click() on links 8070 // Also prevent it if we're currently inside a leveraged native-event stack 8071 _default: function( event ) { 8072 var target = event.target; 8073 return rcheckableType.test( target.type ) && 8074 target.click && nodeName( target, "input" ) && 8075 dataPriv.get( target, "click" ) || 8076 nodeName( target, "a" ); 8077 } 8078 }, 8079 8080 beforeunload: { 8081 postDispatch: function( event ) { 8082 8083 // Support: Firefox 20+ 8084 // Firefox doesn't alert if the returnValue field is not set. 8085 if ( event.result !== undefined && event.originalEvent ) { 8086 event.originalEvent.returnValue = event.result; 8087 } 8088 } 8089 } 8090 } 8091}; 8092 8093// Ensure the presence of an event listener that handles manually-triggered 8094// synthetic events by interrupting progress until reinvoked in response to 8095// *native* events that it fires directly, ensuring that state changes have 8096// already occurred before other listeners are invoked. 8097function leverageNative( el, type, expectSync ) { 8098 8099 // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add 8100 if ( !expectSync ) { 8101 if ( dataPriv.get( el, type ) === undefined ) { 8102 jQuery.event.add( el, type, returnTrue ); 8103 } 8104 return; 8105 } 8106 8107 // Register the controller as a special universal handler for all event namespaces 8108 dataPriv.set( el, type, false ); 8109 jQuery.event.add( el, type, { 8110 namespace: false, 8111 handler: function( event ) { 8112 var notAsync, result, 8113 saved = dataPriv.get( this, type ); 8114 8115 if ( ( event.isTrigger & 1 ) && this[ type ] ) { 8116 8117 // Interrupt processing of the outer synthetic .trigger()ed event 8118 // Saved data should be false in such cases, but might be a leftover capture object 8119 // from an async native handler (gh-4350) 8120 if ( !saved.length ) { 8121 8122 // Store arguments for use when handling the inner native event 8123 // There will always be at least one argument (an event object), so this array 8124 // will not be confused with a leftover capture object. 8125 saved = slice.call( arguments ); 8126 dataPriv.set( this, type, saved ); 8127 8128 // Trigger the native event and capture its result
8129 // Support: IE <=9 - 11+ 8130 // focus() and blur() are asynchronous 8131 notAsync = expectSync( this, type ); 8132 this[ type ](); 8133 result = dataPriv.get( this, type ); 8134 if ( saved !== result || notAsync ) { 8135 dataPriv.set( this, type, false ); 8136 } else { 8137 result = {}; 8138 } 8139 if ( saved !== result ) { 8140 8141 // Cancel the outer synthetic event 8142 event.stopImmediatePropagation(); 8143 event.preventDefault(); 8144 return result.value; 8145 } 8146 8147 // If this is an inner synthetic event for an event with a bubbling surrogate 8148 // (focus or blur), assume that the surrogate already propagated from triggering the 8149 // native event and prevent that from happening again here. 8150 // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the 8151 // bubbling surrogate propagates *after* the non-bubbling base), but that seems 8152 // less bad than duplication. 8153 } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { 8154 event.stopPropagation(); 8155 } 8156 8157 // If this is a native event triggered above, everything is now in order 8158 // Fire an inner synthetic event with the original arguments 8159 } else if ( saved.length ) { 8160 8161 // ...and capture the result 8162 dataPriv.set( this, type, { 8163 value: jQuery.event.trigger( 8164 8165 // Support: IE <=9 - 11+ 8166 // Extend with the prototype to reset the above stopImmediatePropagation() 8167 jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), 8168 saved.slice( 1 ), 8169 this 8170 ) 8171 } ); 8172 8173 // Abort handling of the native event 8174 event.stopImmediatePropagation(); 8175 } 8176 } 8177 } ); 8178} 8179 8180jQuery.removeEvent = function( elem, type, handle ) { 8181 8182 // This "if" is needed for plain objects 8183 if ( elem.removeEventListener ) { 8184 elem.removeEventListener( type, handle ); 8185 } 8186}; 8187 8188jQuery.Event = function( src, props ) { 8189 8190 // Allow instantiation without the 'new' keyword 8191 if ( !( this instanceof jQuery.Event ) ) { 8192 return new jQuery.Event( src, props ); 8193 } 8194 8195 // Event object 8196 if ( src && src.type ) { 8197 this.originalEvent = src; 8198 this.type = src.type; 8199 8200 // Events bubbling up the document may have been marked as prevented 8201 // by a handler lower down the tree; reflect the correct value. 8202 this.isDefaultPrevented = src.defaultPrevented || 8203 src.defaultPrevented === undefined && 8204 8205 // Support: Android <=2.3 only 8206 src.returnValue === false ? 8207 returnTrue : 8208 returnFalse; 8209 8210 // Create target properties 8211 // Support: Safari <=6 - 7 only 8212 // Target should not be a text node (#504, #13143) 8213 this.target = ( src.target && src.target.nodeType === 3 ) ? 8214 src.target.parentNode : 8215 src.target; 8216 8217 this.currentTarget = src.currentTarget; 8218 this.relatedTarget = src.relatedTarget; 8219 8220 // Event type 8221 } else { 8222 this.type = src; 8223 } 8224 8225 // Put explicitly provided properties onto the event object 8226 if ( props ) { 8227 jQuery.extend( this, props ); 8228 } 8229 8230 // Create a timestamp if incoming event doesn't have one 8231 this.timeStamp = src && src.timeStamp || Date.now(); 8232 8233 // Mark it as fixed 8234 this[ jQuery.expando ] = true; 8235}; 8236 8237// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding 8238// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html 8239jQuery.Event.prototype = { 8240 constructor: jQuery.Event, 8241 isDefaultPrevented: returnFalse, 8242 isPropagationStopped: returnFalse, 8243 isImmediatePropagationStopped: returnFalse, 8244 isSimulated: false, 8245 8246 preventDefault: function() { 8247 var e = this.originalEvent; 8248 8249 this.isDefaultPrevented = returnTrue; 8250 8251 if ( e && !this.isSimulated ) { 8252 e.preventDefault(); 8253 } 8254 }, 8255 stopPropagation: function() { 8256 var e = this.originalEvent; 8257 8258 this.isPropagationStopped = returnTrue; 8259 8260 if ( e && !this.isSimulated ) { 8261 e.stopPropagation(); 8262 } 8263 }, 8264 stopImmediatePropagation: function() { 8265 var e = this.originalEvent; 8266 8267 this.isImmediatePropagationStopped = returnTrue; 8268 8269 if ( e && !this.isSimulated ) { 8270 e.stopImmediatePropagation(); 8271 } 8272 8273 this.stopPropagation(); 8274 } 8275}; 8276 8277// Includes all common event props including KeyEvent and MouseEvent specific props 8278jQuery.each( { 8279 altKey: true, 8280 bubbles: true, 8281 cancelable: true, 8282 changedTouches: true, 8283 ctrlKey: true, 8284 detail: true, 8285 eventPhase: true, 8286 metaKey: true, 8287 pageX: true, 8288 pageY: true, 8289 shiftKey: true, 8290 view: true, 8291 "char": true, 8292 code: true, 8293 charCode: true, 8294 key: true, 8295 keyCode: true, 8296 button: true, 8297 buttons: true, 8298 clientX: true, 8299 clientY: true, 8300 offsetX: true, 8301 offsetY: true, 8302 pointerId: true, 8303 pointerType: true, 8304 screenX: true, 8305 screenY: true, 8306 targetTouches: true, 8307 toElement: true, 8308 touches: true, 8309 8310 which: function( event ) { 8311 var button = event.button; 8312 8313 // Add which for key events 8314 if ( event.which == null && rkeyEvent.test( event.type ) ) { 8315 return event.charCode != null ? event.charCode : event.keyCode; 8316 } 8317 8318 // Add which for click: 1 === left; 2 === middle; 3 === right 8319 if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { 8320 if ( button & 1 ) { 8321 return 1; 8322 } 8323 8324 if ( button & 2 ) { 8325 return 3; 8326 } 8327 8328 if ( button & 4 ) { 8329 return 2; 8330 } 8331 8332 return 0; 8333 } 8334 8335 return event.which; 8336 } 8337}, jQuery.event.addProp ); 8338 8339jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { 8340 jQuery.event.special[ type ] = { 8341 8342 // Utilize native event if possible so blur/focus sequence is correct 8343 setup: function() { 8344 8345 // Claim the first handler 8346 // dataPriv.set( this, "focus", ... ) 8347 // dataPriv.set( this, "blur", ... ) 8348 leverageNative( this, type, expectSync ); 8349 8350 // Return false to allow normal processing in the caller 8351 return false;
8352 }, 8353 trigger: function() { 8354 8355 // Force setup before trigger 8356 leverageNative( this, type ); 8357 8358 // Return non-false to allow normal event-path propagation
vendor: 17,941 bytes, lines 8358-9029
8358 8359 return true; 8360 }, 8361 8362 delegateType: delegateType 8363 }; 8364} ); 8365 8366// Create mouseenter/leave events using mouseover/out and event-time checks 8367// so that event delegation works in jQuery. 8368// Do the same for pointerenter/pointerleave and pointerover/pointerout 8369// 8370// Support: Safari 7 only 8371// Safari sends mouseenter too often; see: 8372// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 8373// for the description of the bug (it existed in older Chrome versions as well). 8374jQuery.each( { 8375 mouseenter: "mouseover", 8376 mouseleave: "mouseout", 8377 pointerenter: "pointerover", 8378 pointerleave: "pointerout" 8379}, function( orig, fix ) { 8380 jQuery.event.special[ orig ] = { 8381 delegateType: fix, 8382 bindType: fix, 8383 8384 handle: function( event ) { 8385 var ret, 8386 target = this, 8387 related = event.relatedTarget, 8388 handleObj = event.handleObj; 8389 8390 // For mouseenter/leave call the handler if related is outside the target. 8391 // NB: No relatedTarget if the mouse left/entered the browser window 8392 if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { 8393 event.type = handleObj.origType; 8394 ret = handleObj.handler.apply( this, arguments ); 8395 event.type = fix; 8396 } 8397 return ret; 8398 } 8399 }; 8400} ); 8401 8402jQuery.fn.extend( { 8403 8404 on: function( types, selector, data, fn ) { 8405 return on( this, types, selector, data, fn ); 8406 }, 8407 one: function( types, selector, data, fn ) { 8408 return on( this, types, selector, data, fn, 1 ); 8409 }, 8410 off: function( types, selector, fn ) { 8411 var handleObj, type; 8412 if ( types && types.preventDefault && types.handleObj ) { 8413 8414 // ( event ) dispatched jQuery.Event 8415 handleObj = types.handleObj; 8416 jQuery( types.delegateTarget ).off( 8417 handleObj.namespace ? 8418 handleObj.origType + "." + handleObj.namespace : 8419 handleObj.origType, 8420 handleObj.selector, 8421 handleObj.handler 8422 ); 8423 return this; 8424 } 8425 if ( typeof types === "object" ) { 8426 8427 // ( types-object [, selector] ) 8428 for ( type in types ) { 8429 this.off( type, selector, types[ type ] ); 8430 } 8431 return this; 8432 } 8433 if ( selector === false || typeof selector === "function" ) { 8434 8435 // ( types [, fn] ) 8436 fn = selector; 8437 selector = undefined; 8438 } 8439 if ( fn === false ) { 8440 fn = returnFalse; 8441 } 8442 return this.each( function() { 8443 jQuery.event.remove( this, types, fn, selector ); 8444 } ); 8445 } 8446} ); 8447 8448 8449var 8450 8451 // Support: IE <=10 - 11, Edge 12 - 13 only 8452 // In IE/Edge using regex groups here causes severe slowdowns. 8453 // See https://connect.microsoft.com/IE/feedback/details/1736512/ 8454 rnoInnerhtml = /<script|<style|<link/i, 8455 8456 // checked="checked" or checked 8457 rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, 8458 rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g; 8459 8460// Prefer a tbody over its parent table for containing new rows 8461function manipulationTarget( elem, content ) { 8462 if ( nodeName( elem, "table" ) && 8463 nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { 8464 8465 return jQuery( elem ).children( "tbody" )[ 0 ] || elem; 8466 } 8467 8468 return elem; 8469} 8470 8471// Replace/restore the type attribute of script elements for safe DOM manipulation 8472function disableScript( elem ) { 8473 elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; 8474 return elem; 8475} 8476function restoreScript( elem ) { 8477 if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { 8478 elem.type = elem.type.slice( 5 ); 8479 } else { 8480 elem.removeAttribute( "type" ); 8481 } 8482 8483 return elem; 8484} 8485 8486function cloneCopyEvent( src, dest ) { 8487 var i, l, type, pdataOld, udataOld, udataCur, events; 8488 8489 if ( dest.nodeType !== 1 ) { 8490 return; 8491 } 8492 8493 // 1. Copy private data: events, handlers, etc. 8494 if ( dataPriv.hasData( src ) ) { 8495 pdataOld = dataPriv.get( src ); 8496 events = pdataOld.events; 8497 8498 if ( events ) { 8499 dataPriv.remove( dest, "handle events" ); 8500 8501 for ( type in events ) { 8502 for ( i = 0, l = events[ type ].length; i < l; i++ ) { 8503 jQuery.event.add( dest, type, events[ type ][ i ] ); 8504 } 8505 } 8506 } 8507 } 8508 8509 // 2. Copy user data 8510 if ( dataUser.hasData( src ) ) { 8511 udataOld = dataUser.access( src ); 8512 udataCur = jQuery.extend( {}, udataOld ); 8513 8514 dataUser.set( dest, udataCur ); 8515 } 8516} 8517 8518// Fix IE bugs, see support tests 8519function fixInput( src, dest ) { 8520 var nodeName = dest.nodeName.toLowerCase(); 8521 8522 // Fails to persist the checked state of a cloned checkbox or radio button. 8523 if ( nodeName === "input" && rcheckableType.test( src.type ) ) { 8524 dest.checked = src.checked; 8525 8526 // Fails to return the selected option to the default selected state when cloning options 8527 } else if ( nodeName === "input" || nodeName === "textarea" ) { 8528 dest.defaultValue = src.defaultValue; 8529 } 8530} 8531 8532function domManip( collection, args, callback, ignored ) { 8533 8534 // Flatten any nested arrays 8535 args = flat( args ); 8536 8537 var fragment, first, scripts, hasScripts, node, doc, 8538 i = 0, 8539 l = collection.length, 8540 iNoClone = l - 1, 8541 value = args[ 0 ], 8542 valueIsFunction = isFunction( value ); 8543 8544 // We can't cloneNode fragments that contain checked, in WebKit 8545 if ( valueIsFunction || 8546 ( l > 1 && typeof value === "string" && 8547 !support.checkClone && rchecked.test( value ) ) ) { 8548 return collection.each( function( index ) { 8549 var self = collection.eq( index ); 8550 if ( valueIsFunction ) { 8551 args[ 0 ] = value.call( this, index, self.html() ); 8552 } 8553 domManip( self, args, callback, ignored ); 8554 } ); 8555 } 8556 8557 if ( l ) { 8558 fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); 8559 first = fragment.firstChild; 8560 8561 if ( fragment.childNodes.length === 1 ) { 8562 fragment = first; 8563 } 8564 8565 // Require either new content or an interest in ignored elements to invoke the callback 8566 if ( first || ignored ) { 8567 scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); 8568 hasScripts = scripts.length; 8569 8570 // Use the original fragment for the last item 8571 // instead of the first because it can end up 8572 // being emptied incorrectly in certain situations (#8070). 8573 for ( ; i < l; i++ ) { 8574 node = fragment; 8575 8576 if ( i !== iNoClone ) { 8577 node = jQuery.clone( node, true, true ); 8578 8579 // Keep references to cloned scripts for later restoration 8580 if ( hasScripts ) { 8581 8582 // Support: Android <=4.0 only, PhantomJS 1 only 8583 // push.apply(_, arraylike) throws on ancient WebKit 8584 jQuery.merge( scripts, getAll( node, "script" ) ); 8585 } 8586 } 8587 8588 callback.call( collection[ i ], node, i ); 8589 } 8590 8591 if ( hasScripts ) { 8592 doc = scripts[ scripts.length - 1 ].ownerDocument; 8593 8594 // Reenable scripts 8595 jQuery.map( scripts, restoreScript ); 8596 8597 // Evaluate executable scripts on first document insertion 8598 for ( i = 0; i < hasScripts; i++ ) { 8599 node = scripts[ i ]; 8600 if ( rscriptType.test( node.type || "" ) && 8601 !dataPriv.access( node, "globalEval" ) && 8602 jQuery.contains( doc, node ) ) { 8603 8604 if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { 8605 8606 // Optional AJAX dependency, but won't run scripts if not present 8607 if ( jQuery._evalUrl && !node.noModule ) { 8608 jQuery._evalUrl( node.src, { 8609 nonce: node.nonce || node.getAttribute( "nonce" ) 8610 }, doc ); 8611 } 8612 } else { 8613 DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); 8614 } 8615 } 8616 } 8617 } 8618 } 8619 } 8620 8621 return collection; 8622} 8623 8624function remove( elem, selector, keepData ) { 8625 var node, 8626 nodes = selector ? jQuery.filter( selector, elem ) : elem, 8627 i = 0; 8628 8629 for ( ; ( node = nodes[ i ] ) != null; i++ ) { 8630 if ( !keepData && node.nodeType === 1 ) { 8631 jQuery.cleanData( getAll( node ) ); 8632 } 8633 8634 if ( node.parentNode ) { 8635 if ( keepData && isAttached( node ) ) { 8636 setGlobalEval( getAll( node, "script" ) ); 8637 } 8638 node.parentNode.removeChild( node ); 8639 } 8640 } 8641 8642 return elem; 8643} 8644 8645jQuery.extend( { 8646 htmlPrefilter: function( html ) { 8647 return html; 8648 }, 8649 8650 clone: function( elem, dataAndEvents, deepDataAndEvents ) { 8651 var i, l, srcElements, destElements, 8652 clone = elem.cloneNode( true ), 8653 inPage = isAttached( elem ); 8654 8655 // Fix IE cloning issues 8656 if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && 8657 !jQuery.isXMLDoc( elem ) ) { 8658 8659 // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 8660 destElements = getAll( clone ); 8661 srcElements = getAll( elem ); 8662 8663 for ( i = 0, l = srcElements.length; i < l; i++ ) { 8664 fixInput( srcElements[ i ], destElements[ i ] ); 8665 } 8666 } 8667 8668 // Copy the events from the original to the clone 8669 if ( dataAndEvents ) { 8670 if ( deepDataAndEvents ) { 8671 srcElements = srcElements || getAll( elem ); 8672 destElements = destElements || getAll( clone ); 8673 8674 for ( i = 0, l = srcElements.length; i < l; i++ ) { 8675 cloneCopyEvent( srcElements[ i ], destElements[ i ] ); 8676 } 8677 } else { 8678 cloneCopyEvent( elem, clone ); 8679 } 8680 } 8681 8682 // Preserve script evaluation history 8683 destElements = getAll( clone, "script" ); 8684 if ( destElements.length > 0 ) { 8685 setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); 8686 } 8687 8688 // Return the cloned set 8689 return clone; 8690 }, 8691 8692 cleanData: function( elems ) { 8693 var data, elem, type, 8694 special = jQuery.event.special, 8695 i = 0; 8696 8697 for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { 8698 if ( acceptData( elem ) ) { 8699 if ( ( data = elem[ dataPriv.expando ] ) ) { 8700 if ( data.events ) { 8701 for ( type in data.events ) { 8702 if ( special[ type ] ) { 8703 jQuery.event.remove( elem, type ); 8704 8705 // This is a shortcut to avoid jQuery.event.remove's overhead 8706 } else { 8707 jQuery.removeEvent( elem, type, data.handle ); 8708 } 8709 } 8710 } 8711 8712 // Support: Chrome <=35 - 45+ 8713 // Assign undefined instead of using delete, see Data#remove 8714 elem[ dataPriv.expando ] = undefined; 8715 } 8716 if ( elem[ dataUser.expando ] ) { 8717 8718 // Support: Chrome <=35 - 45+ 8719 // Assign undefined instead of using delete, see Data#remove 8720 elem[ dataUser.expando ] = undefined; 8721 } 8722 } 8723 } 8724 } 8725} ); 8726 8727jQuery.fn.extend( { 8728 detach: function( selector ) { 8729 return remove( this, selector, true ); 8730 }, 8731 8732 remove: function( selector ) { 8733 return remove( this, selector ); 8734 }, 8735 8736 text: function( value ) { 8737 return access( this, function( value ) { 8738 return value === undefined ? 8739 jQuery.text( this ) : 8740 this.empty().each( function() { 8741 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 8742 this.textContent = value; 8743 } 8744 } ); 8745 }, null, value, arguments.length ); 8746 }, 8747 8748 append: function() { 8749 return domManip( this, arguments, function( elem ) { 8750 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 8751 var target = manipulationTarget( this, elem ); 8752 target.appendChild( elem ); 8753 } 8754 } ); 8755 }, 8756 8757 prepend: function() { 8758 return domManip( this, arguments, function( elem ) { 8759 if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { 8760 var target = manipulationTarget( this, elem ); 8761 target.insertBefore( elem, target.firstChild ); 8762 } 8763 } ); 8764 }, 8765 8766 before: function() { 8767 return domManip( this, arguments, function( elem ) { 8768 if ( this.parentNode ) { 8769 this.parentNode.insertBefore( elem, this ); 8770 } 8771 } ); 8772 }, 8773 8774 after: function() { 8775 return domManip( this, arguments, function( elem ) { 8776 if ( this.parentNode ) { 8777 this.parentNode.insertBefore( elem, this.nextSibling ); 8778 } 8779 } ); 8780 }, 8781 8782 empty: function() { 8783 var elem, 8784 i = 0; 8785 8786 for ( ; ( elem = this[ i ] ) != null; i++ ) { 8787 if ( elem.nodeType === 1 ) { 8788 8789 // Prevent memory leaks 8790 jQuery.cleanData( getAll( elem, false ) ); 8791 8792 // Remove any remaining nodes 8793 elem.textContent = ""; 8794 } 8795 } 8796 8797 return this; 8798 }, 8799 8800 clone: function( dataAndEvents, deepDataAndEvents ) { 8801 dataAndEvents = dataAndEvents == null ? false : dataAndEvents; 8802 deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; 8803 8804 return this.map( function() { 8805 return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); 8806 } ); 8807 }, 8808 8809 html: function( value ) { 8810 return access( this, function( value ) { 8811 var elem = this[ 0 ] || {}, 8812 i = 0, 8813 l = this.length; 8814 8815 if ( value === undefined && elem.nodeType === 1 ) { 8816 return elem.innerHTML; 8817 } 8818 8819 // See if we can take a shortcut and just use innerHTML 8820 if ( typeof value === "string" && !rnoInnerhtml.test( value ) && 8821 !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 8822 8823 value = jQuery.htmlPrefilter( value ); 8824 8825 try { 8826 for ( ; i < l; i++ ) { 8827 elem = this[ i ] || {}; 8828 8829 // Remove element nodes and prevent memory leaks 8830 if ( elem.nodeType === 1 ) { 8831 jQuery.cleanData( getAll( elem, false ) ); 8832 elem.innerHTML = value; 8833 } 8834 } 8835 8836 elem = 0; 8837 8838 // If using innerHTML throws an exception, use the fallback method 8839 } catch ( e ) {} 8840 } 8841 8842 if ( elem ) { 8843 this.empty().append( value ); 8844 } 8845 }, null, value, arguments.length ); 8846 }, 8847 8848 replaceWith: function() { 8849 var ignored = []; 8850 8851 // Make the changes, replacing each non-ignored context element with the new content 8852 return domManip( this, arguments, function( elem ) { 8853 var parent = this.parentNode; 8854 8855 if ( jQuery.inArray( this, ignored ) < 0 ) { 8856 jQuery.cleanData( getAll( this ) ); 8857 if ( parent ) { 8858 parent.replaceChild( elem, this ); 8859 } 8860 } 8861 8862 // Force callback invocation 8863 }, ignored ); 8864 } 8865} ); 8866 8867jQuery.each( { 8868 appendTo: "append", 8869 prependTo: "prepend", 8870 insertBefore: "before", 8871 insertAfter: "after", 8872 replaceAll: "replaceWith" 8873}, function( name, original ) { 8874 jQuery.fn[ name ] = function( selector ) { 8875 var elems, 8876 ret = [], 8877 insert = jQuery( selector ), 8878 last = insert.length - 1, 8879 i = 0; 8880 8881 for ( ; i <= last; i++ ) { 8882 elems = i === last ? this : this.clone( true ); 8883 jQuery( insert[ i ] )[ original ]( elems ); 8884 8885 // Support: Android <=4.0 only, PhantomJS 1 only 8886 // .get() because push.apply(_, arraylike) throws on ancient WebKit 8887 push.apply( ret, elems.get() ); 8888 } 8889 8890 return this.pushStack( ret ); 8891 }; 8892} ); 8893var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); 8894 8895var getStyles = function( elem ) { 8896 8897 // Support: IE <=11 only, Firefox <=30 (#15098, #14150) 8898 // IE throws on elements created in popups 8899 // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" 8900 var view = elem.ownerDocument.defaultView; 8901 8902 if ( !view || !view.opener ) { 8903 view = window; 8904 } 8905 8906 return view.getComputedStyle( elem ); 8907 }; 8908 8909var swap = function( elem, options, callback ) { 8910 var ret, name, 8911 old = {}; 8912 8913 // Remember the old values, and insert the new ones 8914 for ( name in options ) { 8915 old[ name ] = elem.style[ name ]; 8916 elem.style[ name ] = options[ name ]; 8917 } 8918 8919 ret = callback.call( elem ); 8920 8921 // Revert the old values 8922 for ( name in options ) { 8923 elem.style[ name ] = old[ name ]; 8924 } 8925 8926 return ret; 8927}; 8928 8929 8930var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); 8931 8932 8933 8934( function() { 8935 8936 // Executing both pixelPosition & boxSizingReliable tests require only one layout 8937 // so they're executed at the same time to save the second computation. 8938 function computeStyleTests() { 8939 8940 // This is a singleton, we need to execute it only once 8941 if ( !div ) { 8942 return; 8943 } 8944 8945 container.style.cssText = "position:absolute;left:-11111px;width:60px;" + 8946 "margin-top:1px;padding:0;border:0"; 8947 div.style.cssText = 8948 "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + 8949 "margin:auto;border:1px;padding:1px;" + 8950 "width:60%;top:1%"; 8951 documentElement.appendChild( container ).appendChild( div ); 8952 8953 var divStyle = window.getComputedStyle( div ); 8954 pixelPositionVal = divStyle.top !== "1%"; 8955 8956 // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 8957 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; 8958 8959 // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 8960 // Some styles come back with percentage values, even though they shouldn't 8961 div.style.right = "60%"; 8962 pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; 8963 8964 // Support: IE 9 - 11 only 8965 // Detect misreporting of content dimensions for box-sizing:border-box elements 8966 boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; 8967 8968 // Support: IE 9 only 8969 // Detect overflow:scroll screwiness (gh-3699) 8970 // Support: Chrome <=64 8971 // Don't get tricked when zoom affects offsetWidth (gh-4029) 8972 div.style.position = "absolute"; 8973 scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; 8974 8975 documentElement.removeChild( container ); 8976 8977 // Nullify the div so it wouldn't be stored in the memory and 8978 // it will also be a sign that checks already performed 8979 div = null; 8980 } 8981 8982 function roundPixelMeasures( measure ) { 8983 return Math.round( parseFloat( measure ) ); 8984 } 8985 8986 var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, 8987 reliableTrDimensionsVal, reliableMarginLeftVal, 8988 container = document.createElement( "div" ), 8989 div = document.createElement( "div" ); 8990 8991 // Finish early in limited (non-browser) environments 8992 if ( !div.style ) { 8993 return; 8994 } 8995 8996 // Support: IE <=9 - 11 only 8997 // Style of cloned element affects source element cloned (#8908) 8998 div.style.backgroundClip = "content-box"; 8999 div.cloneNode( true ).style.backgroundClip = ""; 9000 support.clearCloneStyle = div.style.backgroundClip === "content-box"; 9001 9002 jQuery.extend( support, { 9003 boxSizingReliable: function() { 9004 computeStyleTests(); 9005 return boxSizingReliableVal; 9006 }, 9007 pixelBoxStyles: function() { 9008 computeStyleTests(); 9009 return pixelBoxStylesVal; 9010 }, 9011 pixelPosition: function() { 9012 computeStyleTests(); 9013 return pixelPositionVal; 9014 }, 9015 reliableMarginLeft: function() { 9016 computeStyleTests(); 9017 return reliableMarginLeftVal; 9018 }, 9019 scrollboxSize: function() { 9020 computeStyleTests(); 9021 return scrollboxSizeVal; 9022 }, 9023 9024 // Support: IE 9 - 11+, Edge 15 - 18+ 9025 // IE/Edge misreport `getComputedStyle` of table rows with width/height 9026 // set in CSS while `offset*` properties report correct values. 9027 // Behavior in IE 9 is more subtle than in newer versions & it passes 9028 // some versions of this test; make sure not to make it pass there! 9029
9029reliableTrDimensions: function() { 9030 var table, tr, trChild, trStyle; 9031 if ( reliableTrDimensionsVal == null ) { 9032 table = document.createElement( "table" ); 9033 tr = document.createElement( "tr" ); 9034 trChild = document.createElement( "div" ); 9035 9036 table.style.cssText = "position:absolute;left:-11111px"; 9037 tr.style.height = "1px"; 9038 trChild.style.height = "9px"; 9039 9040 documentElement 9041 .appendChild( table ) 9042 .appendChild( tr ) 9043 .appendChild( trChild ); 9044 9045 trStyle = window.getComputedStyle( tr ); 9046 reliableTrDimensionsVal = parseInt( trStyle.height ) > 3
vendor: 13,297 bytes, lines 9046-9510
9046; 9047 9048 documentElement.removeChild( table ); 9049 } 9050 return reliableTrDimensionsVal; 9051 } 9052 } ); 9053} )(); 9054 9055 9056function curCSS( elem, name, computed ) { 9057 var width, minWidth, maxWidth, ret, 9058 9059 // Support: Firefox 51+ 9060 // Retrieving style before computed somehow 9061 // fixes an issue with getting wrong values 9062 // on detached elements 9063 style = elem.style; 9064 9065 computed = computed || getStyles( elem ); 9066 9067 // getPropertyValue is needed for: 9068 // .css('filter') (IE 9 only, #12537) 9069 // .css('--customProperty) (#3144) 9070 if ( computed ) { 9071 ret = computed.getPropertyValue( name ) || computed[ name ]; 9072 9073 if ( ret === "" && !isAttached( elem ) ) { 9074 ret = jQuery.style( elem, name ); 9075 } 9076 9077 // A tribute to the "awesome hack by Dean Edwards" 9078 // Android Browser returns percentage for some values, 9079 // but width seems to be reliably pixels. 9080 // This is against the CSSOM draft spec: 9081 // https://drafts.csswg.org/cssom/#resolved-values 9082 if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { 9083 9084 // Remember the original values 9085 width = style.width; 9086 minWidth = style.minWidth; 9087 maxWidth = style.maxWidth; 9088 9089 // Put in the new values to get a computed value out 9090 style.minWidth = style.maxWidth = style.width = ret; 9091 ret = computed.width; 9092 9093 // Revert the changed values 9094 style.width = width; 9095 style.minWidth = minWidth; 9096 style.maxWidth = maxWidth; 9097 } 9098 } 9099 9100 return ret !== undefined ? 9101 9102 // Support: IE <=9 - 11 only 9103 // IE returns zIndex value as an integer. 9104 ret + "" : 9105 ret; 9106} 9107 9108 9109function addGetHookIf( conditionFn, hookFn ) { 9110 9111 // Define the hook, we'll check on the first run if it's really needed. 9112 return { 9113 get: function() { 9114 if ( conditionFn() ) { 9115 9116 // Hook not needed (or it's not possible to use it due 9117 // to missing dependency), remove it. 9118 delete this.get; 9119 return; 9120 } 9121 9122 // Hook needed; redefine it so that the support test is not executed again. 9123 return ( this.get = hookFn ).apply( this, arguments ); 9124 } 9125 }; 9126} 9127 9128 9129var cssPrefixes = [ "Webkit", "Moz", "ms" ], 9130 emptyStyle = document.createElement( "div" ).style, 9131 vendorProps = {}; 9132 9133// Return a vendor-prefixed property or undefined 9134function vendorPropName( name ) { 9135 9136 // Check for vendor prefixed names 9137 var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), 9138 i = cssPrefixes.length; 9139 9140 while ( i-- ) { 9141 name = cssPrefixes[ i ] + capName; 9142 if ( name in emptyStyle ) { 9143 return name; 9144 } 9145 } 9146} 9147 9148// Return a potentially-mapped jQuery.cssProps or vendor prefixed property 9149function finalPropName( name ) { 9150 var final = jQuery.cssProps[ name ] || vendorProps[ name ]; 9151 9152 if ( final ) { 9153 return final; 9154 } 9155 if ( name in emptyStyle ) { 9156 return name; 9157 } 9158 return vendorProps[ name ] = vendorPropName( name ) || name; 9159} 9160 9161 9162var 9163 9164 // Swappable if display is none or starts with table 9165 // except "table", "table-cell", or "table-caption" 9166 // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display 9167 rdisplayswap = /^(none|table(?!-c[ea]).+)/, 9168 rcustomProp = /^--/, 9169 cssShow = { position: "absolute", visibility: "hidden", display: "block" }, 9170 cssNormalTransform = { 9171 letterSpacing: "0", 9172 fontWeight: "400" 9173 }; 9174 9175function setPositiveNumber( _elem, value, subtract ) { 9176 9177 // Any relative (+/-) values have already been 9178 // normalized at this point 9179 var matches = rcssNum.exec( value ); 9180 return matches ? 9181 9182 // Guard against undefined "subtract", e.g., when used as in cssHooks 9183 Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : 9184 value; 9185} 9186 9187function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { 9188 var i = dimension === "width" ? 1 : 0, 9189 extra = 0, 9190 delta = 0; 9191 9192 // Adjustment may not be necessary 9193 if ( box === ( isBorderBox ? "border" : "content" ) ) { 9194 return 0; 9195 } 9196 9197 for ( ; i < 4; i += 2 ) { 9198 9199 // Both box models exclude margin 9200 if ( box === "margin" ) { 9201 delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); 9202 } 9203 9204 // If we get here with a content-box, we're seeking "padding" or "border" or "margin" 9205 if ( !isBorderBox ) { 9206 9207 // Add padding 9208 delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 9209 9210 // For "border" or "margin", add border 9211 if ( box !== "padding" ) { 9212 delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 9213 9214 // But still keep track of it otherwise 9215 } else { 9216 extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 9217 } 9218 9219 // If we get here with a border-box (content + padding + border), we're seeking "content" or 9220 // "padding" or "margin" 9221 } else { 9222 9223 // For "content", subtract padding 9224 if ( box === "content" ) { 9225 delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); 9226 } 9227 9228 // For "content" or "padding", subtract border 9229 if ( box !== "margin" ) { 9230 delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); 9231 } 9232 } 9233 } 9234 9235 // Account for positive content-box scroll gutter when requested by providing computedVal 9236 if ( !isBorderBox && computedVal >= 0 ) { 9237 9238 // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border 9239 // Assuming integer scroll gutter, subtract the rest and round down 9240 delta += Math.max( 0, Math.ceil( 9241 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 9242 computedVal - 9243 delta - 9244 extra - 9245 0.5 9246 9247 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter 9248 // Use an explicit zero to avoid NaN (gh-3964) 9249 ) ) || 0; 9250 } 9251 9252 return delta; 9253} 9254 9255function getWidthOrHeight( elem, dimension, extra ) { 9256 9257 // Start with computed style 9258 var styles = getStyles( elem ), 9259 9260 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). 9261 // Fake content-box until we know it's needed to know the true value. 9262 boxSizingNeeded = !support.boxSizingReliable() || extra, 9263 isBorderBox = boxSizingNeeded && 9264 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 9265 valueIsBorderBox = isBorderBox, 9266 9267 val = curCSS( elem, dimension, styles ), 9268 offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); 9269 9270 // Support: Firefox <=54 9271 // Return a confounding non-pixel value or feign ignorance, as appropriate. 9272 if ( rnumnonpx.test( val ) ) { 9273 if ( !extra ) { 9274 return val; 9275 } 9276 val = "auto"; 9277 } 9278 9279 9280 // Support: IE 9 - 11 only 9281 // Use offsetWidth/offsetHeight for when box sizing is unreliable. 9282 // In those cases, the computed value can be trusted to be border-box. 9283 if ( ( !support.boxSizingReliable() && isBorderBox || 9284 9285 // Support: IE 10 - 11+, Edge 15 - 18+ 9286 // IE/Edge misreport `getComputedStyle` of table rows with width/height 9287 // set in CSS while `offset*` properties report correct values. 9288 // Interestingly, in some cases IE 9 doesn't suffer from this issue. 9289 !support.reliableTrDimensions() && nodeName( elem, "tr" ) || 9290 9291 // Fall back to offsetWidth/offsetHeight when value is "auto" 9292 // This happens for inline elements with no explicit setting (gh-3571) 9293 val === "auto" || 9294 9295 // Support: Android <=4.1 - 4.3 only 9296 // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) 9297 !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && 9298 9299 // Make sure the element is visible & connected 9300 elem.getClientRects().length ) { 9301 9302 isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; 9303 9304 // Where available, offsetWidth/offsetHeight approximate border box dimensions. 9305 // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the 9306 // retrieved value as a content box dimension. 9307 valueIsBorderBox = offsetProp in elem; 9308 if ( valueIsBorderBox ) { 9309 val = elem[ offsetProp ]; 9310 } 9311 } 9312 9313 // Normalize "" and auto 9314 val = parseFloat( val ) || 0; 9315 9316 // Adjust for the element's box model 9317 return ( val + 9318 boxModelAdjustment( 9319 elem, 9320 dimension, 9321 extra || ( isBorderBox ? "border" : "content" ), 9322 valueIsBorderBox, 9323 styles, 9324 9325 // Provide the current computed size to request scroll gutter calculation (gh-3589) 9326 val 9327 ) 9328 ) + "px"; 9329} 9330 9331jQuery.extend( { 9332 9333 // Add in style property hooks for overriding the default 9334 // behavior of getting and setting a style property 9335 cssHooks: { 9336 opacity: { 9337 get: function( elem, computed ) { 9338 if ( computed ) { 9339 9340 // We should always get a number back from opacity 9341 var ret = curCSS( elem, "opacity" ); 9342 return ret === "" ? "1" : ret; 9343 } 9344 } 9345 } 9346 }, 9347 9348 // Don't automatically add "px" to these possibly-unitless properties 9349 cssNumber: { 9350 "animationIterationCount": true, 9351 "columnCount": true, 9352 "fillOpacity": true, 9353 "flexGrow": true, 9354 "flexShrink": true, 9355 "fontWeight": true, 9356 "gridArea": true, 9357 "gridColumn": true, 9358 "gridColumnEnd": true, 9359 "gridColumnStart": true, 9360 "gridRow": true, 9361 "gridRowEnd": true, 9362 "gridRowStart": true, 9363 "lineHeight": true, 9364 "opacity": true, 9365 "order": true, 9366 "orphans": true, 9367 "widows": true, 9368 "zIndex": true, 9369 "zoom": true 9370 }, 9371 9372 // Add in properties whose names you wish to fix before 9373 // setting or getting the value 9374 cssProps: {}, 9375 9376 // Get and set the style property on a DOM Node 9377 style: function( elem, name, value, extra ) { 9378 9379 // Don't set styles on text and comment nodes 9380 if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 9381 return; 9382 } 9383 9384 // Make sure that we're working with the right name 9385 var ret, type, hooks, 9386 origName = camelCase( name ), 9387 isCustomProp = rcustomProp.test( name ), 9388 style = elem.style; 9389 9390 // Make sure that we're working with the right name. We don't 9391 // want to query the value if it is a CSS custom property 9392 // since they are user-defined. 9393 if ( !isCustomProp ) { 9394 name = finalPropName( origName ); 9395 } 9396 9397 // Gets hook for the prefixed version, then unprefixed version 9398 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 9399 9400 // Check if we're setting a value 9401 if ( value !== undefined ) { 9402 type = typeof value; 9403 9404 // Convert "+=" or "-=" to relative numbers (#7345) 9405 if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { 9406 value = adjustCSS( elem, name, ret ); 9407 9408 // Fixes bug #9237 9409 type = "number"; 9410 } 9411 9412 // Make sure that null and NaN values aren't set (#7116) 9413 if ( value == null || value !== value ) { 9414 return; 9415 } 9416 9417 // If a number was passed in, add the unit (except for certain CSS properties) 9418 // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append 9419 // "px" to a few hardcoded values. 9420 if ( type === "number" && !isCustomProp ) { 9421 value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); 9422 } 9423 9424 // background-* props affect original clone's values 9425 if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { 9426 style[ name ] = "inherit"; 9427 } 9428 9429 // If a hook was provided, use that value, otherwise just set the specified value 9430 if ( !hooks || !( "set" in hooks ) || 9431 ( value = hooks.set( elem, value, extra ) ) !== undefined ) { 9432 9433 if ( isCustomProp ) { 9434 style.setProperty( name, value ); 9435 } else { 9436 style[ name ] = value; 9437 } 9438 } 9439 9440 } else { 9441 9442 // If a hook was provided get the non-computed value from there 9443 if ( hooks && "get" in hooks && 9444 ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { 9445 9446 return ret; 9447 } 9448 9449 // Otherwise just get the value from the style object 9450 return style[ name ]; 9451 } 9452 }, 9453 9454 css: function( elem, name, extra, styles ) { 9455 var val, num, hooks, 9456 origName = camelCase( name ), 9457 isCustomProp = rcustomProp.test( name ); 9458 9459 // Make sure that we're working with the right name. We don't 9460 // want to modify the value if it is a CSS custom property 9461 // since they are user-defined. 9462 if ( !isCustomProp ) { 9463 name = finalPropName( origName ); 9464 } 9465 9466 // Try prefixed name followed by the unprefixed name 9467 hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; 9468 9469 // If a hook was provided get the computed value from there 9470 if ( hooks && "get" in hooks ) { 9471 val = hooks.get( elem, true, extra ); 9472 } 9473 9474 // Otherwise, if a way to get the computed value exists, use that 9475 if ( val === undefined ) { 9476 val = curCSS( elem, name, styles ); 9477 } 9478 9479 // Convert "normal" to computed value 9480 if ( val === "normal" && name in cssNormalTransform ) { 9481 val = cssNormalTransform[ name ]; 9482 } 9483 9484 // Make numeric if forced or a qualifier was provided and val looks numeric 9485 if ( extra === "" || extra ) { 9486 num = parseFloat( val ); 9487 return extra === true || isFinite( num ) ? num || 0 : val; 9488 } 9489 9490 return val; 9491 } 9492} ); 9493 9494jQuery.each( [ "height", "width" ], function( _i, dimension ) { 9495 jQuery.cssHooks[ dimension ] = { 9496 get: function( elem, computed, extra ) { 9497 if ( computed ) { 9498 9499 // Certain elements can have dimension info if we invisibly show them 9500 // but it must have a current display style that would benefit 9501 return rdisplayswap.test( jQuery.css( elem, "display" ) ) && 9502 9503 // Support: Safari 8+ 9504 // Table columns in Safari have non-zero offsetWidth & zero 9505 // getBoundingClientRect().width unless display is changed. 9506 // Support: IE <=11 only 9507 // Running getBoundingClientRect on a disconnected node 9508 // in IE throws an error. 9509 ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? 9510
vendor: 5,577 bytes, lines 9510-9712
9510 swap( elem, cssShow, function() { 9511 return getWidthOrHeight( elem, dimension, extra ); 9512 } ) : 9513 getWidthOrHeight( elem, dimension, extra ); 9514 } 9515 }, 9516 9517 set: function( elem, value, extra ) { 9518 var matches, 9519 styles = getStyles( elem ), 9520 9521 // Only read styles.position if the test has a chance to fail 9522 // to avoid forcing a reflow. 9523 scrollboxSizeBuggy = !support.scrollboxSize() && 9524 styles.position === "absolute", 9525 9526 // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) 9527 boxSizingNeeded = scrollboxSizeBuggy || extra, 9528 isBorderBox = boxSizingNeeded && 9529 jQuery.css( elem, "boxSizing", false, styles ) === "border-box", 9530 subtract = extra ? 9531 boxModelAdjustment( 9532 elem, 9533 dimension, 9534 extra, 9535 isBorderBox, 9536 styles 9537 ) : 9538 0; 9539 9540 // Account for unreliable border-box dimensions by comparing offset* to computed and 9541 // faking a content-box to get border and padding (gh-3699) 9542 if ( isBorderBox && scrollboxSizeBuggy ) { 9543 subtract -= Math.ceil( 9544 elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - 9545 parseFloat( styles[ dimension ] ) - 9546 boxModelAdjustment( elem, dimension, "border", false, styles ) - 9547 0.5 9548 ); 9549 } 9550 9551 // Convert to pixels if value adjustment is needed 9552 if ( subtract && ( matches = rcssNum.exec( value ) ) && 9553 ( matches[ 3 ] || "px" ) !== "px" ) { 9554 9555 elem.style[ dimension ] = value; 9556 value = jQuery.css( elem, dimension ); 9557 } 9558 9559 return setPositiveNumber( elem, value, subtract ); 9560 } 9561 }; 9562} ); 9563 9564jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, 9565 function( elem, computed ) { 9566 if ( computed ) { 9567 return ( parseFloat( curCSS( elem, "marginLeft" ) ) || 9568 elem.getBoundingClientRect().left - 9569 swap( elem, { marginLeft: 0 }, function() { 9570 return elem.getBoundingClientRect().left; 9571 } ) 9572 ) + "px"; 9573 } 9574 } 9575); 9576 9577// These hooks are used by animate to expand properties 9578jQuery.each( { 9579 margin: "", 9580 padding: "", 9581 border: "Width" 9582}, function( prefix, suffix ) { 9583 jQuery.cssHooks[ prefix + suffix ] = { 9584 expand: function( value ) { 9585 var i = 0, 9586 expanded = {}, 9587 9588 // Assumes a single number if not a string 9589 parts = typeof value === "string" ? value.split( " " ) : [ value ]; 9590 9591 for ( ; i < 4; i++ ) { 9592 expanded[ prefix + cssExpand[ i ] + suffix ] = 9593 parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; 9594 } 9595 9596 return expanded; 9597 } 9598 }; 9599 9600 if ( prefix !== "margin" ) { 9601 jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; 9602 } 9603} ); 9604 9605jQuery.fn.extend( { 9606 css: function( name, value ) { 9607 return access( this, function( elem, name, value ) { 9608 var styles, len, 9609 map = {}, 9610 i = 0; 9611 9612 if ( Array.isArray( name ) ) { 9613 styles = getStyles( elem ); 9614 len = name.length; 9615 9616 for ( ; i < len; i++ ) { 9617 map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); 9618 } 9619 9620 return map; 9621 } 9622 9623 return value !== undefined ? 9624 jQuery.style( elem, name, value ) : 9625 jQuery.css( elem, name ); 9626 }, name, value, arguments.length > 1 ); 9627 } 9628} ); 9629 9630 9631function Tween( elem, options, prop, end, easing ) { 9632 return new Tween.prototype.init( elem, options, prop, end, easing ); 9633} 9634jQuery.Tween = Tween; 9635 9636Tween.prototype = { 9637 constructor: Tween, 9638 init: function( elem, options, prop, end, easing, unit ) { 9639 this.elem = elem; 9640 this.prop = prop; 9641 this.easing = easing || jQuery.easing._default; 9642 this.options = options; 9643 this.start = this.now = this.cur(); 9644 this.end = end; 9645 this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); 9646 }, 9647 cur: function() { 9648 var hooks = Tween.propHooks[ this.prop ]; 9649 9650 return hooks && hooks.get ? 9651 hooks.get( this ) : 9652 Tween.propHooks._default.get( this ); 9653 }, 9654 run: function( percent ) { 9655 var eased, 9656 hooks = Tween.propHooks[ this.prop ]; 9657 9658 if ( this.options.duration ) { 9659 this.pos = eased = jQuery.easing[ this.easing ]( 9660 percent, this.options.duration * percent, 0, 1, this.options.duration 9661 ); 9662 } else { 9663 this.pos = eased = percent; 9664 } 9665 this.now = ( this.end - this.start ) * eased + this.start; 9666 9667 if ( this.options.step ) { 9668 this.options.step.call( this.elem, this.now, this ); 9669 } 9670 9671 if ( hooks && hooks.set ) { 9672 hooks.set( this ); 9673 } else { 9674 Tween.propHooks._default.set( this ); 9675 } 9676 return this; 9677 } 9678}; 9679 9680Tween.prototype.init.prototype = Tween.prototype; 9681 9682Tween.propHooks = { 9683 _default: { 9684 get: function( tween ) { 9685 var result; 9686 9687 // Use a property on the element directly when it is not a DOM element, 9688 // or when there is no matching style property that exists. 9689 if ( tween.elem.nodeType !== 1 || 9690 tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { 9691 return tween.elem[ tween.prop ]; 9692 } 9693 9694 // Passing an empty string as a 3rd parameter to .css will automatically 9695 // attempt a parseFloat and fallback to a string if the parse fails. 9696 // Simple values such as "10px" are parsed to Float; 9697 // complex values such as "rotate(1rad)" are returned as-is. 9698 result = jQuery.css( tween.elem, tween.prop, "" ); 9699 9700 // Empty strings, null, undefined and "auto" are converted to 0. 9701 return !result || result === "auto" ? 0 : result; 9702 }, 9703 set: function( tween ) { 9704 9705 // Use step hook for back compat. 9706 // Use cssHook if its there. 9707 // Use .style if available and use plain properties where available. 9708 if ( jQuery.fx.step[ tween.prop ] ) { 9709 jQuery.fx.step[ tween.prop ]( tween ); 9710 } else if ( tween.elem.nodeType === 1 && ( 9711 jQuery.cssHooks[ tween.prop ] || 9712 tween.elem.style[ finalPropName( tween.prop ) ] != null
vendor: 14,002 bytes, lines 9712-10267
9712 ) ) { 9713 jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); 9714 } else { 9715 tween.elem[ tween.prop ] = tween.now; 9716 } 9717 } 9718 } 9719}; 9720 9721// Support: IE <=9 only 9722// Panic based approach to setting things on disconnected nodes 9723Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { 9724 set: function( tween ) { 9725 if ( tween.elem.nodeType && tween.elem.parentNode ) { 9726 tween.elem[ tween.prop ] = tween.now; 9727 } 9728 } 9729}; 9730 9731jQuery.easing = { 9732 linear: function( p ) { 9733 return p; 9734 }, 9735 swing: function( p ) { 9736 return 0.5 - Math.cos( p * Math.PI ) / 2; 9737 }, 9738 _default: "swing" 9739}; 9740 9741jQuery.fx = Tween.prototype.init; 9742 9743// Back compat <1.8 extension point 9744jQuery.fx.step = {}; 9745 9746 9747 9748 9749var 9750 fxNow, inProgress, 9751 rfxtypes = /^(?:toggle|show|hide)$/, 9752 rrun = /queueHooks$/; 9753 9754function schedule() { 9755 if ( inProgress ) { 9756 if ( document.hidden === false && window.requestAnimationFrame ) { 9757 window.requestAnimationFrame( schedule ); 9758 } else { 9759 window.setTimeout( schedule, jQuery.fx.interval ); 9760 } 9761 9762 jQuery.fx.tick(); 9763 } 9764} 9765 9766// Animations created synchronously will run synchronously 9767function createFxNow() { 9768 window.setTimeout( function() { 9769 fxNow = undefined; 9770 } ); 9771 return ( fxNow = Date.now() ); 9772} 9773 9774// Generate parameters to create a standard animation 9775function genFx( type, includeWidth ) { 9776 var which, 9777 i = 0, 9778 attrs = { height: type }; 9779 9780 // If we include width, step value is 1 to do all cssExpand values, 9781 // otherwise step value is 2 to skip over Left and Right 9782 includeWidth = includeWidth ? 1 : 0; 9783 for ( ; i < 4; i += 2 - includeWidth ) { 9784 which = cssExpand[ i ]; 9785 attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; 9786 } 9787 9788 if ( includeWidth ) { 9789 attrs.opacity = attrs.width = type; 9790 } 9791 9792 return attrs; 9793} 9794 9795function createTween( value, prop, animation ) { 9796 var tween, 9797 collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), 9798 index = 0, 9799 length = collection.length; 9800 for ( ; index < length; index++ ) { 9801 if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { 9802 9803 // We're done with this property 9804 return tween; 9805 } 9806 } 9807} 9808 9809function defaultPrefilter( elem, props, opts ) { 9810 var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, 9811 isBox = "width" in props || "height" in props, 9812 anim = this, 9813 orig = {}, 9814 style = elem.style, 9815 hidden = elem.nodeType && isHiddenWithinTree( elem ), 9816 dataShow = dataPriv.get( elem, "fxshow" ); 9817 9818 // Queue-skipping animations hijack the fx hooks 9819 if ( !opts.queue ) { 9820 hooks = jQuery._queueHooks( elem, "fx" ); 9821 if ( hooks.unqueued == null ) { 9822 hooks.unqueued = 0; 9823 oldfire = hooks.empty.fire; 9824 hooks.empty.fire = function() { 9825 if ( !hooks.unqueued ) { 9826 oldfire(); 9827 } 9828 }; 9829 } 9830 hooks.unqueued++; 9831 9832 anim.always( function() { 9833 9834 // Ensure the complete handler is called before this completes 9835 anim.always( function() { 9836 hooks.unqueued--; 9837 if ( !jQuery.queue( elem, "fx" ).length ) { 9838 hooks.empty.fire(); 9839 } 9840 } ); 9841 } ); 9842 } 9843 9844 // Detect show/hide animations 9845 for ( prop in props ) { 9846 value = props[ prop ]; 9847 if ( rfxtypes.test( value ) ) { 9848 delete props[ prop ]; 9849 toggle = toggle || value === "toggle"; 9850 if ( value === ( hidden ? "hide" : "show" ) ) { 9851 9852 // Pretend to be hidden if this is a "show" and 9853 // there is still data from a stopped show/hide 9854 if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { 9855 hidden = true; 9856 9857 // Ignore all other no-op show/hide data 9858 } else { 9859 continue; 9860 } 9861 } 9862 orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); 9863 } 9864 } 9865 9866 // Bail out if this is a no-op like .hide().hide() 9867 propTween = !jQuery.isEmptyObject( props ); 9868 if ( !propTween && jQuery.isEmptyObject( orig ) ) { 9869 return; 9870 } 9871 9872 // Restrict "overflow" and "display" styles during box animations 9873 if ( isBox && elem.nodeType === 1 ) { 9874 9875 // Support: IE <=9 - 11, Edge 12 - 15 9876 // Record all 3 overflow attributes because IE does not infer the shorthand 9877 // from identically-valued overflowX and overflowY and Edge just mirrors 9878 // the overflowX value there. 9879 opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; 9880 9881 // Identify a display type, preferring old show/hide data over the CSS cascade 9882 restoreDisplay = dataShow && dataShow.display; 9883 if ( restoreDisplay == null ) { 9884 restoreDisplay = dataPriv.get( elem, "display" ); 9885 } 9886 display = jQuery.css( elem, "display" ); 9887 if ( display === "none" ) { 9888 if ( restoreDisplay ) { 9889 display = restoreDisplay; 9890 } else { 9891 9892 // Get nonempty value(s) by temporarily forcing visibility 9893 showHide( [ elem ], true ); 9894 restoreDisplay = elem.style.display || restoreDisplay; 9895 display = jQuery.css( elem, "display" ); 9896 showHide( [ elem ] ); 9897 } 9898 } 9899 9900 // Animate inline elements as inline-block 9901 if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { 9902 if ( jQuery.css( elem, "float" ) === "none" ) { 9903 9904 // Restore the original display value at the end of pure show/hide animations 9905 if ( !propTween ) { 9906 anim.done( function() { 9907 style.display = restoreDisplay; 9908 } ); 9909 if ( restoreDisplay == null ) { 9910 display = style.display; 9911 restoreDisplay = display === "none" ? "" : display; 9912 } 9913 } 9914 style.display = "inline-block"; 9915 } 9916 } 9917 } 9918 9919 if ( opts.overflow ) { 9920 style.overflow = "hidden"; 9921 anim.always( function() { 9922 style.overflow = opts.overflow[ 0 ]; 9923 style.overflowX = opts.overflow[ 1 ]; 9924 style.overflowY = opts.overflow[ 2 ]; 9925 } ); 9926 } 9927 9928 // Implement show/hide animations 9929 propTween = false; 9930 for ( prop in orig ) { 9931 9932 // General show/hide setup for this element animation 9933 if ( !propTween ) { 9934 if ( dataShow ) { 9935 if ( "hidden" in dataShow ) { 9936 hidden = dataShow.hidden; 9937 } 9938 } else { 9939 dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); 9940 } 9941 9942 // Store hidden/visible for toggle so `.stop().toggle()` "reverses" 9943 if ( toggle ) { 9944 dataShow.hidden = !hidden; 9945 } 9946 9947 // Show elements before animating them 9948 if ( hidden ) { 9949 showHide( [ elem ], true ); 9950 } 9951 9952 /* eslint-disable no-loop-func */ 9953 9954 anim.done( function() { 9955 9956 /* eslint-enable no-loop-func */ 9957 9958 // The final step of a "hide" animation is actually hiding the element 9959 if ( !hidden ) { 9960 showHide( [ elem ] ); 9961 } 9962 dataPriv.remove( elem, "fxshow" ); 9963 for ( prop in orig ) { 9964 jQuery.style( elem, prop, orig[ prop ] ); 9965 } 9966 } ); 9967 } 9968 9969 // Per-property setup 9970 propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); 9971 if ( !( prop in dataShow ) ) { 9972 dataShow[ prop ] = propTween.start; 9973 if ( hidden ) { 9974 propTween.end = propTween.start; 9975 propTween.start = 0; 9976 } 9977 } 9978 } 9979} 9980 9981function propFilter( props, specialEasing ) { 9982 var index, name, easing, value, hooks; 9983 9984 // camelCase, specialEasing and expand cssHook pass 9985 for ( index in props ) { 9986 name = camelCase( index ); 9987 easing = specialEasing[ name ]; 9988 value = props[ index ]; 9989 if ( Array.isArray( value ) ) { 9990 easing = value[ 1 ]; 9991 value = props[ index ] = value[ 0 ]; 9992 } 9993 9994 if ( index !== name ) { 9995 props[ name ] = value; 9996 delete props[ index ]; 9997 } 9998 9999 hooks = jQuery.cssHooks[ name ]; 10000 if ( hooks && "expand" in hooks ) { 10001 value = hooks.expand( value ); 10002 delete props[ name ]; 10003 10004 // Not quite $.extend, this won't overwrite existing keys. 10005 // Reusing 'index' because we have the correct "name" 10006 for ( index in value ) { 10007 if ( !( index in props ) ) { 10008 props[ index ] = value[ index ]; 10009 specialEasing[ index ] = easing; 10010 } 10011 } 10012 } else { 10013 specialEasing[ name ] = easing; 10014 } 10015 } 10016} 10017 10018function Animation( elem, properties, options ) { 10019 var result, 10020 stopped, 10021 index = 0, 10022 length = Animation.prefilters.length, 10023 deferred = jQuery.Deferred().always( function() { 10024 10025 // Don't match elem in the :animated selector 10026 delete tick.elem; 10027 } ), 10028 tick = function() { 10029 if ( stopped ) { 10030 return false; 10031 } 10032 var currentTime = fxNow || createFxNow(), 10033 remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), 10034 10035 // Support: Android 2.3 only 10036 // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) 10037 temp = remaining / animation.duration || 0, 10038 percent = 1 - temp, 10039 index = 0, 10040 length = animation.tweens.length; 10041 10042 for ( ; index < length; index++ ) { 10043 animation.tweens[ index ].run( percent ); 10044 } 10045 10046 deferred.notifyWith( elem, [ animation, percent, remaining ] ); 10047 10048 // If there's more to do, yield 10049 if ( percent < 1 && length ) { 10050 return remaining; 10051 } 10052 10053 // If this was an empty animation, synthesize a final progress notification 10054 if ( !length ) { 10055 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 10056 } 10057 10058 // Resolve the animation and report its conclusion 10059 deferred.resolveWith( elem, [ animation ] ); 10060 return false; 10061 }, 10062 animation = deferred.promise( { 10063 elem: elem, 10064 props: jQuery.extend( {}, properties ), 10065 opts: jQuery.extend( true, { 10066 specialEasing: {}, 10067 easing: jQuery.easing._default 10068 }, options ), 10069 originalProperties: properties, 10070 originalOptions: options, 10071 startTime: fxNow || createFxNow(), 10072 duration: options.duration, 10073 tweens: [], 10074 createTween: function( prop, end ) { 10075 var tween = jQuery.Tween( elem, animation.opts, prop, end, 10076 animation.opts.specialEasing[ prop ] || animation.opts.easing ); 10077 animation.tweens.push( tween ); 10078 return tween; 10079 }, 10080 stop: function( gotoEnd ) { 10081 var index = 0, 10082 10083 // If we are going to the end, we want to run all the tweens 10084 // otherwise we skip this part 10085 length = gotoEnd ? animation.tweens.length : 0; 10086 if ( stopped ) { 10087 return this; 10088 } 10089 stopped = true; 10090 for ( ; index < length; index++ ) { 10091 animation.tweens[ index ].run( 1 ); 10092 } 10093 10094 // Resolve when we played the last frame; otherwise, reject 10095 if ( gotoEnd ) { 10096 deferred.notifyWith( elem, [ animation, 1, 0 ] ); 10097 deferred.resolveWith( elem, [ animation, gotoEnd ] ); 10098 } else { 10099 deferred.rejectWith( elem, [ animation, gotoEnd ] ); 10100 } 10101 return this; 10102 } 10103 } ), 10104 props = animation.props; 10105 10106 propFilter( props, animation.opts.specialEasing ); 10107 10108 for ( ; index < length; index++ ) { 10109 result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); 10110 if ( result ) { 10111 if ( isFunction( result.stop ) ) { 10112 jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = 10113 result.stop.bind( result ); 10114 } 10115 return result; 10116 } 10117 } 10118 10119 jQuery.map( props, createTween, animation ); 10120 10121 if ( isFunction( animation.opts.start ) ) { 10122 animation.opts.start.call( elem, animation ); 10123 } 10124 10125 // Attach callbacks from options 10126 animation 10127 .progress( animation.opts.progress ) 10128 .done( animation.opts.done, animation.opts.complete ) 10129 .fail( animation.opts.fail ) 10130 .always( animation.opts.always ); 10131 10132 jQuery.fx.timer( 10133 jQuery.extend( tick, { 10134 elem: elem, 10135 anim: animation, 10136 queue: animation.opts.queue 10137 } ) 10138 ); 10139 10140 return animation; 10141} 10142 10143jQuery.Animation = jQuery.extend( Animation, { 10144 10145 tweeners: { 10146 "*": [ function( prop, value ) { 10147 var tween = this.createTween( prop, value ); 10148 adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); 10149 return tween; 10150 } ] 10151 }, 10152 10153 tweener: function( props, callback ) { 10154 if ( isFunction( props ) ) { 10155 callback = props; 10156 props = [ "*" ]; 10157 } else { 10158 props = props.match( rnothtmlwhite ); 10159 } 10160 10161 var prop, 10162 index = 0, 10163 length = props.length; 10164 10165 for ( ; index < length; index++ ) { 10166 prop = props[ index ]; 10167 Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; 10168 Animation.tweeners[ prop ].unshift( callback ); 10169 } 10170 }, 10171 10172 prefilters: [ defaultPrefilter ], 10173 10174 prefilter: function( callback, prepend ) { 10175 if ( prepend ) { 10176 Animation.prefilters.unshift( callback ); 10177 } else { 10178 Animation.prefilters.push( callback ); 10179 } 10180 } 10181} ); 10182 10183jQuery.speed = function( speed, easing, fn ) { 10184 var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { 10185 complete: fn || !fn && easing || 10186 isFunction( speed ) && speed, 10187 duration: speed, 10188 easing: fn && easing || easing && !isFunction( easing ) && easing 10189 }; 10190 10191 // Go to the end state if fx are off 10192 if ( jQuery.fx.off ) { 10193 opt.duration = 0; 10194 10195 } else { 10196 if ( typeof opt.duration !== "number" ) { 10197 if ( opt.duration in jQuery.fx.speeds ) { 10198 opt.duration = jQuery.fx.speeds[ opt.duration ]; 10199 10200 } else { 10201 opt.duration = jQuery.fx.speeds._default; 10202 } 10203 } 10204 } 10205 10206 // Normalize opt.queue - true/undefined/null -> "fx" 10207 if ( opt.queue == null || opt.queue === true ) { 10208 opt.queue = "fx"; 10209 } 10210 10211 // Queueing 10212 opt.old = opt.complete; 10213 10214 opt.complete = function() { 10215 if ( isFunction( opt.old ) ) { 10216 opt.old.call( this ); 10217 } 10218 10219 if ( opt.queue ) { 10220 jQuery.dequeue( this, opt.queue ); 10221 } 10222 }; 10223 10224 return opt; 10225}; 10226 10227jQuery.fn.extend( { 10228 fadeTo: function( speed, to, easing, callback ) { 10229 10230 // Show any hidden elements after setting opacity to 0 10231 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() 10232 10233 // Animate to the value specified 10234 .end().animate( { opacity: to }, speed, easing, callback ); 10235 }, 10236 animate: function( prop, speed, easing, callback ) { 10237 var empty = jQuery.isEmptyObject( prop ), 10238 optall = jQuery.speed( speed, easing, callback ), 10239 doAnimation = function() { 10240 10241 // Operate on a copy of prop so per-property easing won't be lost 10242 var anim = Animation( this, jQuery.extend( {}, prop ), optall ); 10243 10244 // Empty animations, or finishing resolves immediately 10245 if ( empty || dataPriv.get( this, "finish" ) ) { 10246 anim.stop( true ); 10247 } 10248 }; 10249 doAnimation.finish = doAnimation; 10250 10251 return empty || optall.queue === false ? 10252 this.each( doAnimation ) : 10253 this.queue( optall.queue, doAnimation ); 10254 }, 10255 stop: function( type, clearQueue, gotoEnd ) { 10256 var stopQueue = function( hooks ) { 10257 var stop = hooks.stop; 10258 delete hooks.stop; 10259 stop( gotoEnd ); 10260 }; 10261 10262 if ( typeof type !== "string" ) { 10263 gotoEnd = clearQueue; 10264 clearQueue = type; 10265 type = undefined; 10266 } 10267 if ( clearQueue
vendor: 3,719 bytes, lines 10267-10425
10267) { 10268 this.queue( type || "fx", [] ); 10269 } 10270 10271 return this.each( function() { 10272 var dequeue = true, 10273 index = type != null && type + "queueHooks", 10274 timers = jQuery.timers, 10275 data = dataPriv.get( this ); 10276 10277 if ( index ) { 10278 if ( data[ index ] && data[ index ].stop ) { 10279 stopQueue( data[ index ] ); 10280 } 10281 } else { 10282 for ( index in data ) { 10283 if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { 10284 stopQueue( data[ index ] ); 10285 } 10286 } 10287 } 10288 10289 for ( index = timers.length; index--; ) { 10290 if ( timers[ index ].elem === this && 10291 ( type == null || timers[ index ].queue === type ) ) { 10292 10293 timers[ index ].anim.stop( gotoEnd ); 10294 dequeue = false; 10295 timers.splice( index, 1 ); 10296 } 10297 } 10298 10299 // Start the next in the queue if the last step wasn't forced. 10300 // Timers currently will call their complete callbacks, which 10301 // will dequeue but only if they were gotoEnd. 10302 if ( dequeue || !gotoEnd ) { 10303 jQuery.dequeue( this, type ); 10304 } 10305 } ); 10306 }, 10307 finish: function( type ) { 10308 if ( type !== false ) { 10309 type = type || "fx"; 10310 } 10311 return this.each( function() { 10312 var index, 10313 data = dataPriv.get( this ), 10314 queue = data[ type + "queue" ], 10315 hooks = data[ type + "queueHooks" ], 10316 timers = jQuery.timers, 10317 length = queue ? queue.length : 0; 10318 10319 // Enable finishing flag on private data 10320 data.finish = true; 10321 10322 // Empty the queue first 10323 jQuery.queue( this, type, [] ); 10324 10325 if ( hooks && hooks.stop ) { 10326 hooks.stop.call( this, true ); 10327 } 10328 10329 // Look for any active animations, and finish them 10330 for ( index = timers.length; index--; ) { 10331 if ( timers[ index ].elem === this && timers[ index ].queue === type ) { 10332 timers[ index ].anim.stop( true ); 10333 timers.splice( index, 1 ); 10334 } 10335 } 10336 10337 // Look for any animations in the old queue and finish them 10338 for ( index = 0; index < length; index++ ) { 10339 if ( queue[ index ] && queue[ index ].finish ) { 10340 queue[ index ].finish.call( this ); 10341 } 10342 } 10343 10344 // Turn off finishing flag 10345 delete data.finish; 10346 } ); 10347 } 10348} ); 10349 10350jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { 10351 var cssFn = jQuery.fn[ name ]; 10352 jQuery.fn[ name ] = function( speed, easing, callback ) { 10353 return speed == null || typeof speed === "boolean" ? 10354 cssFn.apply( this, arguments ) : 10355 this.animate( genFx( name, true ), speed, easing, callback ); 10356 }; 10357} ); 10358 10359// Generate shortcuts for custom animations 10360jQuery.each( { 10361 slideDown: genFx( "show" ), 10362 slideUp: genFx( "hide" ), 10363 slideToggle: genFx( "toggle" ), 10364 fadeIn: { opacity: "show" }, 10365 fadeOut: { opacity: "hide" }, 10366 fadeToggle: { opacity: "toggle" } 10367}, function( name, props ) { 10368 jQuery.fn[ name ] = function( speed, easing, callback ) { 10369 return this.animate( props, speed, easing, callback ); 10370 }; 10371} ); 10372 10373jQuery.timers = []; 10374jQuery.fx.tick = function() { 10375 var timer, 10376 i = 0, 10377 timers = jQuery.timers; 10378 10379 fxNow = Date.now(); 10380 10381 for ( ; i < timers.length; i++ ) { 10382 timer = timers[ i ]; 10383 10384 // Run the timer and safely remove it when done (allowing for external removal) 10385 if ( !timer() && timers[ i ] === timer ) { 10386 timers.splice( i--, 1 ); 10387 } 10388 } 10389 10390 if ( !timers.length ) { 10391 jQuery.fx.stop(); 10392 } 10393 fxNow = undefined; 10394}; 10395 10396jQuery.fx.timer = function( timer ) { 10397 jQuery.timers.push( timer ); 10398 jQuery.fx.start(); 10399}; 10400 10401jQuery.fx.interval = 13; 10402jQuery.fx.start = function() { 10403 if ( inProgress ) { 10404 return; 10405 } 10406 10407 inProgress = true; 10408 schedule(); 10409}; 10410 10411jQuery.fx.stop = function() { 10412 inProgress = null; 10413}; 10414 10415jQuery.fx.speeds = { 10416 slow: 600, 10417 fast: 200, 10418 10419 // Default speed 10420 _default: 400 10421}; 10422 10423 10424// Based off of the plugin by Clint Helfers, with permission. 10425// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
vendor: 5,177 bytes, lines 10426-10646
10426jQuery.fn.delay = function( time, type ) { 10427 time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; 10428 type = type || "fx"; 10429 10430 return this.queue( type, function( next, hooks ) { 10431 var timeout = window.setTimeout( next, time ); 10432 hooks.stop = function() { 10433 window.clearTimeout( timeout ); 10434 }; 10435 } ); 10436}; 10437 10438 10439( function() { 10440 var input = document.createElement( "input" ), 10441 select = document.createElement( "select" ), 10442 opt = select.appendChild( document.createElement( "option" ) ); 10443 10444 input.type = "checkbox"; 10445 10446 // Support: Android <=4.3 only 10447 // Default value for a checkbox should be "on" 10448 support.checkOn = input.value !== ""; 10449 10450 // Support: IE <=11 only 10451 // Must access selectedIndex to make default options select 10452 support.optSelected = opt.selected; 10453 10454 // Support: IE <=11 only 10455 // An input loses its value after becoming a radio 10456 input = document.createElement( "input" ); 10457 input.value = "t"; 10458 input.type = "radio"; 10459 support.radioValue = input.value === "t"; 10460} )(); 10461 10462 10463var boolHook, 10464 attrHandle = jQuery.expr.attrHandle; 10465 10466jQuery.fn.extend( { 10467 attr: function( name, value ) { 10468 return access( this, jQuery.attr, name, value, arguments.length > 1 ); 10469 }, 10470 10471 removeAttr: function( name ) { 10472 return this.each( function() { 10473 jQuery.removeAttr( this, name ); 10474 } ); 10475 } 10476} ); 10477 10478jQuery.extend( { 10479 attr: function( elem, name, value ) { 10480 var ret, hooks, 10481 nType = elem.nodeType; 10482 10483 // Don't get/set attributes on text, comment and attribute nodes 10484 if ( nType === 3 || nType === 8 || nType === 2 ) { 10485 return; 10486 } 10487 10488 // Fallback to prop when attributes are not supported 10489 if ( typeof elem.getAttribute === "undefined" ) { 10490 return jQuery.prop( elem, name, value ); 10491 } 10492 10493 // Attribute hooks are determined by the lowercase version 10494 // Grab necessary hook if one is defined 10495 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 10496 hooks = jQuery.attrHooks[ name.toLowerCase() ] || 10497 ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); 10498 } 10499 10500 if ( value !== undefined ) { 10501 if ( value === null ) { 10502 jQuery.removeAttr( elem, name ); 10503 return; 10504 } 10505 10506 if ( hooks && "set" in hooks && 10507 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 10508 return ret; 10509 } 10510 10511 elem.setAttribute( name, value + "" ); 10512 return value; 10513 } 10514 10515 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 10516 return ret; 10517 } 10518 10519 ret = jQuery.find.attr( elem, name ); 10520 10521 // Non-existent attributes return null, we normalize to undefined 10522 return ret == null ? undefined : ret; 10523 }, 10524 10525 attrHooks: { 10526 type: { 10527 set: function( elem, value ) { 10528 if ( !support.radioValue && value === "radio" && 10529 nodeName( elem, "input" ) ) { 10530 var val = elem.value; 10531 elem.setAttribute( "type", value ); 10532 if ( val ) { 10533 elem.value = val; 10534 } 10535 return value; 10536 } 10537 } 10538 } 10539 }, 10540 10541 removeAttr: function( elem, value ) { 10542 var name, 10543 i = 0, 10544 10545 // Attribute names can contain non-HTML whitespace characters 10546 // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 10547 attrNames = value && value.match( rnothtmlwhite ); 10548 10549 if ( attrNames && elem.nodeType === 1 ) { 10550 while ( ( name = attrNames[ i++ ] ) ) { 10551 elem.removeAttribute( name ); 10552 } 10553 } 10554 } 10555} ); 10556 10557// Hooks for boolean attributes 10558boolHook = { 10559 set: function( elem, value, name ) { 10560 if ( value === false ) { 10561 10562 // Remove boolean attributes when set to false 10563 jQuery.removeAttr( elem, name ); 10564 } else { 10565 elem.setAttribute( name, name ); 10566 } 10567 return name; 10568 } 10569}; 10570 10571jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { 10572 var getter = attrHandle[ name ] || jQuery.find.attr; 10573 10574 attrHandle[ name ] = function( elem, name, isXML ) { 10575 var ret, handle, 10576 lowercaseName = name.toLowerCase(); 10577 10578 if ( !isXML ) { 10579 10580 // Avoid an infinite loop by temporarily removing this function from the getter 10581 handle = attrHandle[ lowercaseName ]; 10582 attrHandle[ lowercaseName ] = ret; 10583 ret = getter( elem, name, isXML ) != null ? 10584 lowercaseName : 10585 null; 10586 attrHandle[ lowercaseName ] = handle; 10587 } 10588 return ret; 10589 }; 10590} ); 10591 10592 10593 10594 10595var rfocusable = /^(?:input|select|textarea|button)$/i, 10596 rclickable = /^(?:a|area)$/i; 10597 10598jQuery.fn.extend( { 10599 prop: function( name, value ) { 10600 return access( this, jQuery.prop, name, value, arguments.length > 1 ); 10601 }, 10602 10603 removeProp: function( name ) { 10604 return this.each( function() { 10605 delete this[ jQuery.propFix[ name ] || name ]; 10606 } ); 10607 } 10608} ); 10609 10610jQuery.extend( { 10611 prop: function( elem, name, value ) { 10612 var ret, hooks, 10613 nType = elem.nodeType; 10614 10615 // Don't get/set properties on text, comment and attribute nodes 10616 if ( nType === 3 || nType === 8 || nType === 2 ) { 10617 return; 10618 } 10619 10620 if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { 10621 10622 // Fix name and attach hooks 10623 name = jQuery.propFix[ name ] || name; 10624 hooks = jQuery.propHooks[ name ]; 10625 } 10626 10627 if ( value !== undefined ) { 10628 if ( hooks && "set" in hooks && 10629 ( ret = hooks.set( elem, value, name ) ) !== undefined ) { 10630 return ret; 10631 } 10632 10633 return ( elem[ name ] = value ); 10634 } 10635 10636 if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { 10637 return ret; 10638 } 10639 10640 return elem[ name ]; 10641 }, 10642 10643 propHooks: { 10644 tabIndex: { 10645 get: function( elem ) { 10646
vendor: 6,193 bytes, lines 10647-10909
10647 // Support: IE <=9 - 11 only 10648 // elem.tabIndex doesn't always return the 10649 // correct value when it hasn't been explicitly set 10650 // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ 10651 // Use proper attribute retrieval(#12072) 10652 var tabindex = jQuery.find.attr( elem, "tabindex" ); 10653 10654 if ( tabindex ) { 10655 return parseInt( tabindex, 10 ); 10656 } 10657 10658 if ( 10659 rfocusable.test( elem.nodeName ) || 10660 rclickable.test( elem.nodeName ) && 10661 elem.href 10662 ) { 10663 return 0; 10664 } 10665 10666 return -1; 10667 } 10668 } 10669 }, 10670 10671 propFix: { 10672 "for": "htmlFor", 10673 "class": "className" 10674 } 10675} ); 10676 10677// Support: IE <=11 only 10678// Accessing the selectedIndex property 10679// forces the browser to respect setting selected 10680// on the option 10681// The getter ensures a default option is selected 10682// when in an optgroup 10683// eslint rule "no-unused-expressions" is disabled for this code 10684// since it considers such accessions noop 10685if ( !support.optSelected ) { 10686 jQuery.propHooks.selected = { 10687 get: function( elem ) { 10688 10689 /* eslint no-unused-expressions: "off" */ 10690 10691 var parent = elem.parentNode; 10692 if ( parent && parent.parentNode ) { 10693 parent.parentNode.selectedIndex; 10694 } 10695 return null; 10696 }, 10697 set: function( elem ) { 10698 10699 /* eslint no-unused-expressions: "off" */ 10700 10701 var parent = elem.parentNode; 10702 if ( parent ) { 10703 parent.selectedIndex; 10704 10705 if ( parent.parentNode ) { 10706 parent.parentNode.selectedIndex; 10707 } 10708 } 10709 } 10710 }; 10711} 10712 10713jQuery.each( [ 10714 "tabIndex", 10715 "readOnly", 10716 "maxLength", 10717 "cellSpacing", 10718 "cellPadding", 10719 "rowSpan", 10720 "colSpan", 10721 "useMap", 10722 "frameBorder", 10723 "contentEditable" 10724], function() { 10725 jQuery.propFix[ this.toLowerCase() ] = this; 10726} ); 10727 10728 10729 10730 10731 // Strip and collapse whitespace according to HTML spec 10732 // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace 10733 function stripAndCollapse( value ) { 10734 var tokens = value.match( rnothtmlwhite ) || []; 10735 return tokens.join( " " ); 10736 } 10737 10738 10739function getClass( elem ) { 10740 return elem.getAttribute && elem.getAttribute( "class" ) || ""; 10741} 10742 10743function classesToArray( value ) { 10744 if ( Array.isArray( value ) ) { 10745 return value; 10746 } 10747 if ( typeof value === "string" ) { 10748 return value.match( rnothtmlwhite ) || []; 10749 } 10750 return []; 10751} 10752 10753jQuery.fn.extend( { 10754 addClass: function( value ) { 10755 var classes, elem, cur, curValue, clazz, j, finalValue, 10756 i = 0; 10757 10758 if ( isFunction( value ) ) { 10759 return this.each( function( j ) { 10760 jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); 10761 } ); 10762 } 10763 10764 classes = classesToArray( value ); 10765 10766 if ( classes.length ) { 10767 while ( ( elem = this[ i++ ] ) ) { 10768 curValue = getClass( elem ); 10769 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 10770 10771 if ( cur ) { 10772 j = 0; 10773 while ( ( clazz = classes[ j++ ] ) ) { 10774 if ( cur.indexOf( " " + clazz + " " ) < 0 ) { 10775 cur += clazz + " "; 10776 } 10777 } 10778 10779 // Only assign if different to avoid unneeded rendering. 10780 finalValue = stripAndCollapse( cur ); 10781 if ( curValue !== finalValue ) { 10782 elem.setAttribute( "class", finalValue ); 10783 } 10784 } 10785 } 10786 } 10787 10788 return this; 10789 }, 10790 10791 removeClass: function( value ) { 10792 var classes, elem, cur, curValue, clazz, j, finalValue, 10793 i = 0; 10794 10795 if ( isFunction( value ) ) { 10796 return this.each( function( j ) { 10797 jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); 10798 } ); 10799 } 10800 10801 if ( !arguments.length ) { 10802 return this.attr( "class", "" ); 10803 } 10804 10805 classes = classesToArray( value ); 10806 10807 if ( classes.length ) { 10808 while ( ( elem = this[ i++ ] ) ) { 10809 curValue = getClass( elem ); 10810 10811 // This expression is here for better compressibility (see addClass) 10812 cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); 10813 10814 if ( cur ) { 10815 j = 0; 10816 while ( ( clazz = classes[ j++ ] ) ) { 10817 10818 // Remove *all* instances 10819 while ( cur.indexOf( " " + clazz + " " ) > -1 ) { 10820 cur = cur.replace( " " + clazz + " ", " " ); 10821 } 10822 } 10823 10824 // Only assign if different to avoid unneeded rendering. 10825 finalValue = stripAndCollapse( cur ); 10826 if ( curValue !== finalValue ) { 10827 elem.setAttribute( "class", finalValue ); 10828 } 10829 } 10830 } 10831 } 10832 10833 return this; 10834 }, 10835 10836 toggleClass: function( value, stateVal ) { 10837 var type = typeof value, 10838 isValidValue = type === "string" || Array.isArray( value ); 10839 10840 if ( typeof stateVal === "boolean" && isValidValue ) { 10841 return stateVal ? this.addClass( value ) : this.removeClass( value ); 10842 } 10843 10844 if ( isFunction( value ) ) { 10845 return this.each( function( i ) { 10846 jQuery( this ).toggleClass( 10847 value.call( this, i, getClass( this ), stateVal ), 10848 stateVal 10849 ); 10850 } ); 10851 } 10852 10853 return this.each( function() { 10854 var className, i, self, classNames; 10855 10856 if ( isValidValue ) { 10857 10858 // Toggle individual class names 10859 i = 0; 10860 self = jQuery( this ); 10861 classNames = classesToArray( value ); 10862 10863 while ( ( className = classNames[ i++ ] ) ) { 10864 10865 // Check each className given, space separated list 10866 if ( self.hasClass( className ) ) { 10867 self.removeClass( className ); 10868 } else { 10869 self.addClass( className ); 10870 } 10871 } 10872 10873 // Toggle whole class name 10874 } else if ( value === undefined || type === "boolean" ) { 10875 className = getClass( this ); 10876 if ( className ) { 10877 10878 // Store className if set 10879 dataPriv.set( this, "__className__", className ); 10880 } 10881 10882 // If the element has a class name or if we're passed `false`, 10883 // then remove the whole classname (if there was one, the above saved it). 10884 // Otherwise bring back whatever was previously saved (if anything), 10885 // falling back to the empty string if nothing was stored. 10886 if ( this.setAttribute ) { 10887 this.setAttribute( "class", 10888 className || value === false ? 10889 "" : 10890 dataPriv.get( this, "__className__" ) || "" 10891 ); 10892 } 10893 } 10894 } ); 10895 }, 10896 10897 hasClass: function( selector ) { 10898 var className, elem, 10899 i = 0; 10900 10901 className = " " + selector + " "; 10902 while ( ( elem = this[ i++ ] ) ) { 10903 if ( elem.nodeType === 1 && 10904 ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { 10905 return true; 10906 } 10907 } 10908 10909 return false;
vendor: 7,091 bytes, lines 10910-11195
10910 } 10911} ); 10912 10913 10914 10915 10916var rreturn = /\r/g; 10917 10918jQuery.fn.extend( { 10919 val: function( value ) { 10920 var hooks, ret, valueIsFunction, 10921 elem = this[ 0 ]; 10922 10923 if ( !arguments.length ) { 10924 if ( elem ) { 10925 hooks = jQuery.valHooks[ elem.type ] || 10926 jQuery.valHooks[ elem.nodeName.toLowerCase() ]; 10927 10928 if ( hooks && 10929 "get" in hooks && 10930 ( ret = hooks.get( elem, "value" ) ) !== undefined 10931 ) { 10932 return ret; 10933 } 10934 10935 ret = elem.value; 10936 10937 // Handle most common string cases 10938 if ( typeof ret === "string" ) { 10939 return ret.replace( rreturn, "" ); 10940 } 10941 10942 // Handle cases where value is null/undef or number 10943 return ret == null ? "" : ret; 10944 } 10945 10946 return; 10947 } 10948 10949 valueIsFunction = isFunction( value ); 10950 10951 return this.each( function( i ) { 10952 var val; 10953 10954 if ( this.nodeType !== 1 ) { 10955 return; 10956 } 10957 10958 if ( valueIsFunction ) { 10959 val = value.call( this, i, jQuery( this ).val() ); 10960 } else { 10961 val = value; 10962 } 10963 10964 // Treat null/undefined as ""; convert numbers to string 10965 if ( val == null ) { 10966 val = ""; 10967 10968 } else if ( typeof val === "number" ) { 10969 val += ""; 10970 10971 } else if ( Array.isArray( val ) ) { 10972 val = jQuery.map( val, function( value ) { 10973 return value == null ? "" : value + ""; 10974 } ); 10975 } 10976 10977 hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; 10978 10979 // If set returns undefined, fall back to normal setting 10980 if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { 10981 this.value = val; 10982 } 10983 } ); 10984 } 10985} ); 10986 10987jQuery.extend( { 10988 valHooks: { 10989 option: { 10990 get: function( elem ) { 10991 10992 var val = jQuery.find.attr( elem, "value" ); 10993 return val != null ? 10994 val : 10995 10996 // Support: IE <=10 - 11 only 10997 // option.text throws exceptions (#14686, #14858) 10998 // Strip and collapse whitespace 10999 // https://html.spec.whatwg.org/#strip-and-collapse-whitespace 11000 stripAndCollapse( jQuery.text( elem ) ); 11001 } 11002 }, 11003 select: { 11004 get: function( elem ) { 11005 var value, option, i, 11006 options = elem.options, 11007 index = elem.selectedIndex, 11008 one = elem.type === "select-one", 11009 values = one ? null : [], 11010 max = one ? index + 1 : options.length; 11011 11012 if ( index < 0 ) { 11013 i = max; 11014 11015 } else { 11016 i = one ? index : 0; 11017 } 11018 11019 // Loop through all the selected options 11020 for ( ; i < max; i++ ) { 11021 option = options[ i ]; 11022 11023 // Support: IE <=9 only 11024 // IE8-9 doesn't update selected after form reset (#2551) 11025 if ( ( option.selected || i === index ) && 11026 11027 // Don't return options that are disabled or in a disabled optgroup 11028 !option.disabled && 11029 ( !option.parentNode.disabled || 11030 !nodeName( option.parentNode, "optgroup" ) ) ) { 11031 11032 // Get the specific value for the option 11033 value = jQuery( option ).val(); 11034 11035 // We don't need an array for one selects 11036 if ( one ) { 11037 return value; 11038 } 11039 11040 // Multi-Selects return an array 11041 values.push( value ); 11042 } 11043 } 11044 11045 return values; 11046 }, 11047 11048 set: function( elem, value ) { 11049 var optionSet, option, 11050 options = elem.options, 11051 values = jQuery.makeArray( value ), 11052 i = options.length; 11053 11054 while ( i-- ) { 11055 option = options[ i ]; 11056 11057 /* eslint-disable no-cond-assign */ 11058 11059 if ( option.selected = 11060 jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 11061 ) { 11062 optionSet = true; 11063 } 11064 11065 /* eslint-enable no-cond-assign */ 11066 } 11067 11068 // Force browsers to behave consistently when non-matching value is set 11069 if ( !optionSet ) { 11070 elem.selectedIndex = -1; 11071 } 11072 return values; 11073 } 11074 } 11075 } 11076} ); 11077 11078// Radios and checkboxes getter/setter 11079jQuery.each( [ "radio", "checkbox" ], function() { 11080 jQuery.valHooks[ this ] = { 11081 set: function( elem, value ) { 11082 if ( Array.isArray( value ) ) { 11083 return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); 11084 } 11085 } 11086 }; 11087 if ( !support.checkOn ) { 11088 jQuery.valHooks[ this ].get = function( elem ) { 11089 return elem.getAttribute( "value" ) === null ? "on" : elem.value; 11090 }; 11091 } 11092} ); 11093 11094 11095 11096 11097// Return jQuery for attributes-only inclusion 11098 11099 11100support.focusin = "onfocusin" in window; 11101 11102 11103var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, 11104 stopPropagationCallback = function( e ) { 11105 e.stopPropagation(); 11106 }; 11107 11108jQuery.extend( jQuery.event, { 11109 11110 trigger: function( event, data, elem, onlyHandlers ) { 11111 11112 var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, 11113 eventPath = [ elem || document ], 11114 type = hasOwn.call( event, "type" ) ? event.type : event, 11115 namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; 11116 11117 cur = lastElement = tmp = elem = elem || document; 11118 11119 // Don't do events on text and comment nodes 11120 if ( elem.nodeType === 3 || elem.nodeType === 8 ) { 11121 return; 11122 } 11123 11124 // focus/blur morphs to focusin/out; ensure we're not firing them right now 11125 if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { 11126 return; 11127 } 11128 11129 if ( type.indexOf( "." ) > -1 ) { 11130 11131 // Namespaced trigger; create a regexp to match event type in handle() 11132 namespaces = type.split( "." ); 11133 type = namespaces.shift(); 11134 namespaces.sort(); 11135 } 11136 ontype = type.indexOf( ":" ) < 0 && "on" + type; 11137 11138 // Caller can pass in a jQuery.Event object, Object, or just an event type string 11139 event = event[ jQuery.expando ] ? 11140 event : 11141 new jQuery.Event( type, typeof event === "object" && event ); 11142 11143 // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) 11144 event.isTrigger = onlyHandlers ? 2 : 3; 11145 event.namespace = namespaces.join( "." ); 11146 event.rnamespace = event.namespace ? 11147 new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : 11148 null; 11149 11150 // Clean up the event in case it is being reused 11151 event.result = undefined; 11152 if ( !event.target ) { 11153 event.target = elem; 11154 } 11155 11156 // Clone any incoming data and prepend the event, creating the handler arg list 11157 data = data == null ? 11158 [ event ] : 11159 jQuery.makeArray( data, [ event ] ); 11160 11161 // Allow special events to draw outside the lines 11162 special = jQuery.event.special[ type ] || {}; 11163 if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { 11164 return; 11165 } 11166 11167 // Determine event propagation path in advance, per W3C events spec (#9951) 11168 // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) 11169 if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { 11170 11171 bubbleType = special.delegateType || type; 11172 if ( !rfocusMorph.test( bubbleType + type ) ) { 11173 cur = cur.parentNode; 11174 } 11175 for ( ; cur; cur = cur.parentNode ) { 11176 eventPath.push( cur ); 11177 tmp = cur; 11178 } 11179 11180 // Only add window if we got to document (e.g., not plain obj or detached DOM) 11181 if ( tmp === ( elem.ownerDocument || document ) ) { 11182 eventPath.push( tmp.defaultView || tmp.parentWindow || window ); 11183 } 11184 } 11185 11186 // Fire handlers on the event path 11187 i = 0; 11188 while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { 11189 lastElement = cur; 11190 event.type = i > 1 ? 11191 bubbleType : 11192 special.bindType || type; 11193 11194 // jQuery handler 11195 handle = (
vendor: 2,548 bytes, lines 11195-11296
11195 11196 dataPriv.get( cur, "events" ) || Object.create( null ) 11197 )[ event.type ] && 11198 dataPriv.get( cur, "handle" ); 11199 if ( handle ) { 11200 handle.apply( cur, data ); 11201 } 11202 11203 // Native handler 11204 handle = ontype && cur[ ontype ]; 11205 if ( handle && handle.apply && acceptData( cur ) ) { 11206 event.result = handle.apply( cur, data ); 11207 if ( event.result === false ) { 11208 event.preventDefault(); 11209 } 11210 } 11211 } 11212 event.type = type; 11213 11214 // If nobody prevented the default action, do it now 11215 if ( !onlyHandlers && !event.isDefaultPrevented() ) { 11216 11217 if ( ( !special._default || 11218 special._default.apply( eventPath.pop(), data ) === false ) && 11219 acceptData( elem ) ) { 11220 11221 // Call a native DOM method on the target with the same name as the event. 11222 // Don't do default actions on window, that's where global variables be (#6170) 11223 if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { 11224 11225 // Don't re-trigger an onFOO event when we call its FOO() method 11226 tmp = elem[ ontype ]; 11227 11228 if ( tmp ) { 11229 elem[ ontype ] = null; 11230 } 11231 11232 // Prevent re-triggering of the same event, since we already bubbled it above 11233 jQuery.event.triggered = type; 11234 11235 if ( event.isPropagationStopped() ) { 11236 lastElement.addEventListener( type, stopPropagationCallback ); 11237 } 11238 11239 elem[ type ](); 11240 11241 if ( event.isPropagationStopped() ) { 11242 lastElement.removeEventListener( type, stopPropagationCallback ); 11243 } 11244 11245 jQuery.event.triggered = undefined; 11246 11247 if ( tmp ) { 11248 elem[ ontype ] = tmp; 11249 } 11250 } 11251 } 11252 } 11253 11254 return event.result; 11255 }, 11256 11257 // Piggyback on a donor event to simulate a different one 11258 // Used only for `focus(in | out)` events 11259 simulate: function( type, elem, event ) { 11260 var e = jQuery.extend( 11261 new jQuery.Event(), 11262 event, 11263 { 11264 type: type, 11265 isSimulated: true 11266 } 11267 ); 11268 11269 jQuery.event.trigger( e, null, elem ); 11270 } 11271 11272} ); 11273 11274jQuery.fn.extend( { 11275 11276 trigger: function( type, data ) { 11277 return this.each( function() { 11278 jQuery.event.trigger( type, data, this ); 11279 } ); 11280 }, 11281 triggerHandler: function( type, data ) { 11282 var elem = this[ 0 ]; 11283 if ( elem ) { 11284 return jQuery.event.trigger( type, data, elem, true ); 11285 } 11286 } 11287} ); 11288 11289 11290// Support: Firefox <=44 11291// Firefox doesn't have focus(in | out) events 11292// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 11293// 11294// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 11295// focus(in | out) events fire after focus & blur events, 11296// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
vendor: 4,078 bytes, lines 11297-11462
11297// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 11298if ( !support.focusin ) { 11299 jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { 11300 11301 // Attach a single capturing handler on the document while someone wants focusin/focusout 11302 var handler = function( event ) { 11303 jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); 11304 }; 11305 11306 jQuery.event.special[ fix ] = { 11307 setup: function() { 11308 11309 // Handle: regular nodes (via `this.ownerDocument`), window 11310 // (via `this.document`) & document (via `this`). 11311 var doc = this.ownerDocument || this.document || this, 11312 attaches = dataPriv.access( doc, fix ); 11313 11314 if ( !attaches ) { 11315 doc.addEventListener( orig, handler, true ); 11316 } 11317 dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); 11318 }, 11319 teardown: function() { 11320 var doc = this.ownerDocument || this.document || this, 11321 attaches = dataPriv.access( doc, fix ) - 1; 11322 11323 if ( !attaches ) { 11324 doc.removeEventListener( orig, handler, true ); 11325 dataPriv.remove( doc, fix ); 11326 11327 } else { 11328 dataPriv.access( doc, fix, attaches ); 11329 } 11330 } 11331 }; 11332 } ); 11333} 11334var location = window.location; 11335 11336var nonce = { guid: Date.now() }; 11337 11338var rquery = ( /\?/ ); 11339 11340 11341 11342// Cross-browser xml parsing 11343jQuery.parseXML = function( data ) { 11344 var xml; 11345 if ( !data || typeof data !== "string" ) { 11346 return null; 11347 } 11348 11349 // Support: IE 9 - 11 only 11350 // IE throws on parseFromString with invalid input. 11351 try { 11352 xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); 11353 } catch ( e ) { 11354 xml = undefined; 11355 } 11356 11357 if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { 11358 jQuery.error( "Invalid XML: " + data ); 11359 } 11360 return xml; 11361}; 11362 11363 11364var 11365 rbracket = /\[\]$/, 11366 rCRLF = /\r?\n/g, 11367 rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, 11368 rsubmittable = /^(?:input|select|textarea|keygen)/i; 11369 11370function buildParams( prefix, obj, traditional, add ) { 11371 var name; 11372 11373 if ( Array.isArray( obj ) ) { 11374 11375 // Serialize array item. 11376 jQuery.each( obj, function( i, v ) { 11377 if ( traditional || rbracket.test( prefix ) ) { 11378 11379 // Treat each array item as a scalar. 11380 add( prefix, v ); 11381 11382 } else { 11383 11384 // Item is non-scalar (array or object), encode its numeric index. 11385 buildParams( 11386 prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", 11387 v, 11388 traditional, 11389 add 11390 ); 11391 } 11392 } ); 11393 11394 } else if ( !traditional && toType( obj ) === "object" ) { 11395 11396 // Serialize object item. 11397 for ( name in obj ) { 11398 buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); 11399 } 11400 11401 } else { 11402 11403 // Serialize scalar item. 11404 add( prefix, obj ); 11405 } 11406} 11407 11408// Serialize an array of form elements or a set of 11409// key/values into a query string 11410jQuery.param = function( a, traditional ) { 11411 var prefix, 11412 s = [], 11413 add = function( key, valueOrFunction ) { 11414 11415 // If value is a function, invoke it and use its return value 11416 var value = isFunction( valueOrFunction ) ? 11417 valueOrFunction() : 11418 valueOrFunction; 11419 11420 s[ s.length ] = encodeURIComponent( key ) + "=" + 11421 encodeURIComponent( value == null ? "" : value ); 11422 }; 11423 11424 if ( a == null ) { 11425 return ""; 11426 } 11427 11428 // If an array was passed in, assume that it is an array of form elements. 11429 if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { 11430 11431 // Serialize the form elements 11432 jQuery.each( a, function() { 11433 add( this.name, this.value ); 11434 } ); 11435 11436 } else { 11437 11438 // If traditional, encode the "old" way (the way 1.3.2 or older 11439 // did it), otherwise encode params recursively. 11440 for ( prefix in a ) { 11441 buildParams( prefix, a[ prefix ], traditional, add ); 11442 } 11443 } 11444 11445 // Return the resulting serialization 11446 return s.join( "&" ); 11447}; 11448 11449jQuery.fn.extend( { 11450 serialize: function() { 11451 return jQuery.param( this.serializeArray() ); 11452 }, 11453 serializeArray: function() { 11454 return this.map( function() { 11455 11456 // Can add propHook for "elements" to filter or add form elements 11457 var elements = jQuery.prop( this, "elements" ); 11458 return elements ? jQuery.makeArray( elements ) : this; 11459 } ) 11460 .filter( function() { 11461 var type = this.type; 11462
vendor: 4,933 bytes, lines 11463-11635
11463 // Use .is( ":disabled" ) so that fieldset[disabled] works 11464 return this.name && !jQuery( this ).is( ":disabled" ) && 11465 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && 11466 ( this.checked || !rcheckableType.test( type ) ); 11467 } ) 11468 .map( function( _i, elem ) { 11469 var val = jQuery( this ).val(); 11470 11471 if ( val == null ) { 11472 return null; 11473 } 11474 11475 if ( Array.isArray( val ) ) { 11476 return jQuery.map( val, function( val ) { 11477 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 11478 } ); 11479 } 11480 11481 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; 11482 } ).get(); 11483 } 11484} ); 11485 11486 11487var 11488 r20 = /%20/g, 11489 rhash = /#.*$/, 11490 rantiCache = /([?&])_=[^&]*/, 11491 rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, 11492 11493 // #7653, #8125, #8152: local protocol detection 11494 rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, 11495 rnoContent = /^(?:GET|HEAD)$/, 11496 rprotocol = /^\/\//, 11497 11498 /* Prefilters 11499 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) 11500 * 2) These are called: 11501 * - BEFORE asking for a transport 11502 * - AFTER param serialization (s.data is a string if s.processData is true) 11503 * 3) key is the dataType 11504 * 4) the catchall symbol "*" can be used 11505 * 5) execution will start with transport dataType and THEN continue down to "*" if needed 11506 */ 11507 prefilters = {}, 11508 11509 /* Transports bindings 11510 * 1) key is the dataType 11511 * 2) the catchall symbol "*" can be used 11512 * 3) selection will start with transport dataType and THEN go to "*" if needed 11513 */ 11514 transports = {}, 11515 11516 // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression 11517 allTypes = "*/".concat( "*" ), 11518 11519 // Anchor tag for parsing the document origin 11520 originAnchor = document.createElement( "a" ); 11521 originAnchor.href = location.href; 11522 11523// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport 11524function addToPrefiltersOrTransports( structure ) { 11525 11526 // dataTypeExpression is optional and defaults to "*" 11527 return function( dataTypeExpression, func ) { 11528 11529 if ( typeof dataTypeExpression !== "string" ) { 11530 func = dataTypeExpression; 11531 dataTypeExpression = "*"; 11532 } 11533 11534 var dataType, 11535 i = 0, 11536 dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; 11537 11538 if ( isFunction( func ) ) { 11539 11540 // For each dataType in the dataTypeExpression 11541 while ( ( dataType = dataTypes[ i++ ] ) ) { 11542 11543 // Prepend if requested 11544 if ( dataType[ 0 ] === "+" ) { 11545 dataType = dataType.slice( 1 ) || "*"; 11546 ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); 11547 11548 // Otherwise append 11549 } else { 11550 ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); 11551 } 11552 } 11553 } 11554 }; 11555} 11556 11557// Base inspection function for prefilters and transports 11558function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { 11559 11560 var inspected = {}, 11561 seekingTransport = ( structure === transports ); 11562 11563 function inspect( dataType ) { 11564 var selected; 11565 inspected[ dataType ] = true; 11566 jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { 11567 var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); 11568 if ( typeof dataTypeOrTransport === "string" && 11569 !seekingTransport && !inspected[ dataTypeOrTransport ] ) { 11570 11571 options.dataTypes.unshift( dataTypeOrTransport ); 11572 inspect( dataTypeOrTransport ); 11573 return false; 11574 } else if ( seekingTransport ) { 11575 return !( selected = dataTypeOrTransport ); 11576 } 11577 } ); 11578 return selected; 11579 } 11580 11581 return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); 11582} 11583 11584// A special extend for ajax options 11585// that takes "flat" options (not to be deep extended) 11586// Fixes #9887 11587function ajaxExtend( target, src ) { 11588 var key, deep, 11589 flatOptions = jQuery.ajaxSettings.flatOptions || {}; 11590 11591 for ( key in src ) { 11592 if ( src[ key ] !== undefined ) { 11593 ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; 11594 } 11595 } 11596 if ( deep ) { 11597 jQuery.extend( true, target, deep ); 11598 } 11599 11600 return target; 11601} 11602 11603/* Handles responses to an ajax request: 11604 * - finds the right dataType (mediates between content-type and expected dataType) 11605 * - returns the corresponding response 11606 */ 11607function ajaxHandleResponses( s, jqXHR, responses ) { 11608 11609 var ct, type, finalDataType, firstDataType, 11610 contents = s.contents, 11611 dataTypes = s.dataTypes; 11612 11613 // Remove auto dataType and get content-type in the process 11614 while ( dataTypes[ 0 ] === "*" ) { 11615 dataTypes.shift(); 11616 if ( ct === undefined ) { 11617 ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); 11618 } 11619 } 11620 11621 // Check if we're dealing with a known content-type 11622 if ( ct ) { 11623 for ( type in contents ) { 11624 if ( contents[ type ] && contents[ type ].test( ct ) ) { 11625 dataTypes.unshift( type ); 11626 break; 11627 } 11628 } 11629 } 11630 11631 // Check to see if we have a response for the expected dataType 11632 if ( dataTypes[ 0 ] in responses ) { 11633 finalDataType = dataTypes[ 0 ]; 11634 } else { 11635
vendor: 6,163 bytes, lines 11636-11903
11636 // Try convertible dataTypes 11637 for ( type in responses ) { 11638 if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { 11639 finalDataType = type; 11640 break; 11641 } 11642 if ( !firstDataType ) { 11643 firstDataType = type; 11644 } 11645 } 11646 11647 // Or just use first one 11648 finalDataType = finalDataType || firstDataType; 11649 } 11650 11651 // If we found a dataType 11652 // We add the dataType to the list if needed 11653 // and return the corresponding response 11654 if ( finalDataType ) { 11655 if ( finalDataType !== dataTypes[ 0 ] ) { 11656 dataTypes.unshift( finalDataType ); 11657 } 11658 return responses[ finalDataType ]; 11659 } 11660} 11661 11662/* Chain conversions given the request and the original response 11663 * Also sets the responseXXX fields on the jqXHR instance 11664 */ 11665function ajaxConvert( s, response, jqXHR, isSuccess ) { 11666 var conv2, current, conv, tmp, prev, 11667 converters = {}, 11668 11669 // Work with a copy of dataTypes in case we need to modify it for conversion 11670 dataTypes = s.dataTypes.slice(); 11671 11672 // Create converters map with lowercased keys 11673 if ( dataTypes[ 1 ] ) { 11674 for ( conv in s.converters ) { 11675 converters[ conv.toLowerCase() ] = s.converters[ conv ]; 11676 } 11677 } 11678 11679 current = dataTypes.shift(); 11680 11681 // Convert to each sequential dataType 11682 while ( current ) { 11683 11684 if ( s.responseFields[ current ] ) { 11685 jqXHR[ s.responseFields[ current ] ] = response; 11686 } 11687 11688 // Apply the dataFilter if provided 11689 if ( !prev && isSuccess && s.dataFilter ) { 11690 response = s.dataFilter( response, s.dataType ); 11691 } 11692 11693 prev = current; 11694 current = dataTypes.shift(); 11695 11696 if ( current ) { 11697 11698 // There's only work to do if current dataType is non-auto 11699 if ( current === "*" ) { 11700 11701 current = prev; 11702 11703 // Convert response if prev dataType is non-auto and differs from current 11704 } else if ( prev !== "*" && prev !== current ) { 11705 11706 // Seek a direct converter 11707 conv = converters[ prev + " " + current ] || converters[ "* " + current ]; 11708 11709 // If none found, seek a pair 11710 if ( !conv ) { 11711 for ( conv2 in converters ) { 11712 11713 // If conv2 outputs current 11714 tmp = conv2.split( " " ); 11715 if ( tmp[ 1 ] === current ) { 11716 11717 // If prev can be converted to accepted input 11718 conv = converters[ prev + " " + tmp[ 0 ] ] || 11719 converters[ "* " + tmp[ 0 ] ]; 11720 if ( conv ) { 11721 11722 // Condense equivalence converters 11723 if ( conv === true ) { 11724 conv = converters[ conv2 ]; 11725 11726 // Otherwise, insert the intermediate dataType 11727 } else if ( converters[ conv2 ] !== true ) { 11728 current = tmp[ 0 ]; 11729 dataTypes.unshift( tmp[ 1 ] ); 11730 } 11731 break; 11732 } 11733 } 11734 } 11735 } 11736 11737 // Apply converter (if not an equivalence) 11738 if ( conv !== true ) { 11739 11740 // Unless errors are allowed to bubble, catch and return them 11741 if ( conv && s.throws ) { 11742 response = conv( response ); 11743 } else { 11744 try { 11745 response = conv( response ); 11746 } catch ( e ) { 11747 return { 11748 state: "parsererror", 11749 error: conv ? e : "No conversion from " + prev + " to " + current 11750 }; 11751 } 11752 } 11753 } 11754 } 11755 } 11756 } 11757 11758 return { state: "success", data: response }; 11759} 11760 11761jQuery.extend( { 11762 11763 // Counter for holding the number of active queries 11764 active: 0, 11765 11766 // Last-Modified header cache for next request 11767 lastModified: {}, 11768 etag: {}, 11769 11770 ajaxSettings: { 11771 url: location.href, 11772 type: "GET", 11773 isLocal: rlocalProtocol.test( location.protocol ), 11774 global: true, 11775 processData: true, 11776 async: true, 11777 contentType: "application/x-www-form-urlencoded; charset=UTF-8", 11778 11779 /* 11780 timeout: 0, 11781 data: null, 11782 dataType: null, 11783 username: null, 11784 password: null, 11785 cache: null, 11786 throws: false, 11787 traditional: false, 11788 headers: {}, 11789 */ 11790 11791 accepts: { 11792 "*": allTypes, 11793 text: "text/plain", 11794 html: "text/html", 11795 xml: "application/xml, text/xml", 11796 json: "application/json, text/javascript" 11797 }, 11798 11799 contents: { 11800 xml: /\bxml\b/, 11801 html: /\bhtml/, 11802 json: /\bjson\b/ 11803 }, 11804 11805 responseFields: { 11806 xml: "responseXML", 11807 text: "responseText", 11808 json: "responseJSON" 11809 }, 11810 11811 // Data converters 11812 // Keys separate source (or catchall "*") and destination types with a single space 11813 converters: { 11814 11815 // Convert anything to text 11816 "* text": String, 11817 11818 // Text to html (true = no transformation) 11819 "text html": true, 11820 11821 // Evaluate text as a json expression 11822 "text json": JSON.parse, 11823 11824 // Parse text as xml 11825 "text xml": jQuery.parseXML 11826 }, 11827 11828 // For options that shouldn't be deep extended: 11829 // you can add your own custom options here if 11830 // and when you create one that shouldn't be 11831 // deep extended (see ajaxExtend) 11832 flatOptions: { 11833 url: true, 11834 context: true 11835 } 11836 }, 11837 11838 // Creates a full fledged settings object into target 11839 // with both ajaxSettings and settings fields. 11840 // If target is omitted, writes into ajaxSettings. 11841 ajaxSetup: function( target, settings ) { 11842 return settings ? 11843 11844 // Building a settings object 11845 ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : 11846 11847 // Extending ajaxSettings 11848 ajaxExtend( jQuery.ajaxSettings, target ); 11849 }, 11850 11851 ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), 11852 ajaxTransport: addToPrefiltersOrTransports( transports ), 11853 11854 // Main method 11855 ajax: function( url, options ) { 11856 11857 // If url is an object, simulate pre-1.5 signature 11858 if ( typeof url === "object" ) { 11859 options = url; 11860 url = undefined; 11861 } 11862 11863 // Force options to be an object 11864 options = options || {}; 11865 11866 var transport, 11867 11868 // URL without anti-cache param 11869 cacheURL, 11870 11871 // Response headers 11872 responseHeadersString, 11873 responseHeaders, 11874 11875 // timeout handle 11876 timeoutTimer, 11877 11878 // Url cleanup var 11879 urlAnchor, 11880 11881 // Request state (becomes false upon send and true upon completion) 11882 completed, 11883 11884 // To know if global events are to be dispatched 11885 fireGlobals, 11886 11887 // Loop variable 11888 i, 11889 11890 // uncached part of the url 11891 uncached, 11892 11893 // Create the final options object 11894 s = jQuery.ajaxSetup( {}, options ), 11895 11896 // Callbacks context 11897 callbackContext = s.context || s, 11898 11899 // Context for global events is callbackContext if it is a DOM node or jQuery collection 11900 globalEventContext = s.context && 11901 ( callbackContext.nodeType || callbackContext.jquery ) ? 11902 jQuery( callbackContext ) : 11903
vendor: 8,850 bytes, lines 11903-12215
11903 jQuery.event, 11904 11905 // Deferreds 11906 deferred = jQuery.Deferred(), 11907 completeDeferred = jQuery.Callbacks( "once memory" ), 11908 11909 // Status-dependent callbacks 11910 statusCode = s.statusCode || {}, 11911 11912 // Headers (they are sent all at once) 11913 requestHeaders = {}, 11914 requestHeadersNames = {}, 11915 11916 // Default abort message 11917 strAbort = "canceled", 11918 11919 // Fake xhr 11920 jqXHR = { 11921 readyState: 0, 11922 11923 // Builds headers hashtable if needed 11924 getResponseHeader: function( key ) { 11925 var match; 11926 if ( completed ) { 11927 if ( !responseHeaders ) { 11928 responseHeaders = {}; 11929 while ( ( match = rheaders.exec( responseHeadersString ) ) ) { 11930 responseHeaders[ match[ 1 ].toLowerCase() + " " ] = 11931 ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) 11932 .concat( match[ 2 ] ); 11933 } 11934 } 11935 match = responseHeaders[ key.toLowerCase() + " " ]; 11936 } 11937 return match == null ? null : match.join( ", " ); 11938 }, 11939 11940 // Raw string 11941 getAllResponseHeaders: function() { 11942 return completed ? responseHeadersString : null; 11943 }, 11944 11945 // Caches the header 11946 setRequestHeader: function( name, value ) { 11947 if ( completed == null ) { 11948 name = requestHeadersNames[ name.toLowerCase() ] = 11949 requestHeadersNames[ name.toLowerCase() ] || name; 11950 requestHeaders[ name ] = value; 11951 } 11952 return this; 11953 }, 11954 11955 // Overrides response content-type header 11956 overrideMimeType: function( type ) { 11957 if ( completed == null ) { 11958 s.mimeType = type; 11959 } 11960 return this; 11961 }, 11962 11963 // Status-dependent callbacks 11964 statusCode: function( map ) { 11965 var code; 11966 if ( map ) { 11967 if ( completed ) { 11968 11969 // Execute the appropriate callbacks 11970 jqXHR.always( map[ jqXHR.status ] ); 11971 } else { 11972 11973 // Lazy-add the new callbacks in a way that preserves old ones 11974 for ( code in map ) { 11975 statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; 11976 } 11977 } 11978 } 11979 return this; 11980 }, 11981 11982 // Cancel the request 11983 abort: function( statusText ) { 11984 var finalText = statusText || strAbort; 11985 if ( transport ) { 11986 transport.abort( finalText ); 11987 } 11988 done( 0, finalText ); 11989 return this; 11990 } 11991 }; 11992 11993 // Attach deferreds 11994 deferred.promise( jqXHR ); 11995 11996 // Add protocol if not provided (prefilters might expect it) 11997 // Handle falsy url in the settings object (#10093: consistency with old signature) 11998 // We also use the url parameter if available 11999 s.url = ( ( url || s.url || location.href ) + "" ) 12000 .replace( rprotocol, location.protocol + "//" ); 12001 12002 // Alias method option to type as per ticket #12004 12003 s.type = options.method || options.type || s.method || s.type; 12004 12005 // Extract dataTypes list 12006 s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; 12007 12008 // A cross-domain request is in order when the origin doesn't match the current origin. 12009 if ( s.crossDomain == null ) { 12010 urlAnchor = document.createElement( "a" ); 12011 12012 // Support: IE <=8 - 11, Edge 12 - 15 12013 // IE throws exception on accessing the href property if url is malformed, 12014 // e.g. http://example.com:80x/ 12015 try { 12016 urlAnchor.href = s.url; 12017 12018 // Support: IE <=8 - 11 only 12019 // Anchor's host property isn't correctly set when s.url is relative 12020 urlAnchor.href = urlAnchor.href; 12021 s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== 12022 urlAnchor.protocol + "//" + urlAnchor.host; 12023 } catch ( e ) { 12024 12025 // If there is an error parsing the URL, assume it is crossDomain, 12026 // it can be rejected by the transport if it is invalid 12027 s.crossDomain = true; 12028 } 12029 } 12030 12031 // Convert data if not already a string 12032 if ( s.data && s.processData && typeof s.data !== "string" ) { 12033 s.data = jQuery.param( s.data, s.traditional ); 12034 } 12035 12036 // Apply prefilters 12037 inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); 12038 12039 // If request was aborted inside a prefilter, stop there 12040 if ( completed ) { 12041 return jqXHR; 12042 } 12043 12044 // We can fire global events as of now if asked to 12045 // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) 12046 fireGlobals = jQuery.event && s.global; 12047 12048 // Watch for a new set of requests 12049 if ( fireGlobals && jQuery.active++ === 0 ) { 12050 jQuery.event.trigger( "ajaxStart" ); 12051 } 12052 12053 // Uppercase the type 12054 s.type = s.type.toUpperCase(); 12055 12056 // Determine if request has content 12057 s.hasContent = !rnoContent.test( s.type ); 12058 12059 // Save the URL in case we're toying with the If-Modified-Since 12060 // and/or If-None-Match header later on 12061 // Remove hash to simplify url manipulation 12062 cacheURL = s.url.replace( rhash, "" ); 12063 12064 // More options handling for requests with no content 12065 if ( !s.hasContent ) { 12066 12067 // Remember the hash so we can put it back 12068 uncached = s.url.slice( cacheURL.length ); 12069 12070 // If data is available and should be processed, append data to url 12071 if ( s.data && ( s.processData || typeof s.data === "string" ) ) { 12072 cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; 12073 12074 // #9682: remove data so that it's not used in an eventual retry 12075 delete s.data; 12076 } 12077 12078 // Add or update anti-cache param if needed 12079 if ( s.cache === false ) { 12080 cacheURL = cacheURL.replace( rantiCache, "$1" ); 12081 uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + 12082 uncached; 12083 } 12084 12085 // Put hash and anti-cache on the URL that will be requested (gh-1732) 12086 s.url = cacheURL + uncached; 12087 12088 // Change '%20' to '+' if this is encoded form body content (gh-2658) 12089 } else if ( s.data && s.processData && 12090 ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { 12091 s.data = s.data.replace( r20, "+" ); 12092 } 12093 12094 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 12095 if ( s.ifModified ) { 12096 if ( jQuery.lastModified[ cacheURL ] ) { 12097 jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); 12098 } 12099 if ( jQuery.etag[ cacheURL ] ) { 12100 jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); 12101 } 12102 } 12103 12104 // Set the correct header, if data is being sent 12105 if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { 12106 jqXHR.setRequestHeader( "Content-Type", s.contentType ); 12107 } 12108 12109 // Set the Accepts header for the server, depending on the dataType 12110 jqXHR.setRequestHeader( 12111 "Accept", 12112 s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? 12113 s.accepts[ s.dataTypes[ 0 ] ] + 12114 ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : 12115 s.accepts[ "*" ] 12116 ); 12117 12118 // Check for headers option 12119 for ( i in s.headers ) { 12120 jqXHR.setRequestHeader( i, s.headers[ i ] ); 12121 } 12122 12123 // Allow custom headers/mimetypes and early abort 12124 if ( s.beforeSend && 12125 ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { 12126 12127 // Abort if not done already and return 12128 return jqXHR.abort(); 12129 } 12130 12131 // Aborting is no longer a cancellation 12132 strAbort = "abort"; 12133 12134 // Install callbacks on deferreds 12135 completeDeferred.add( s.complete ); 12136 jqXHR.done( s.success ); 12137 jqXHR.fail( s.error ); 12138 12139 // Get transport 12140 transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); 12141 12142 // If no transport, we auto-abort 12143 if ( !transport ) { 12144 done( -1, "No Transport" ); 12145 } else { 12146 jqXHR.readyState = 1; 12147 12148 // Send global event 12149 if ( fireGlobals ) { 12150 globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); 12151 } 12152 12153 // If request was aborted inside ajaxSend, stop there 12154 if ( completed ) { 12155 return jqXHR; 12156 } 12157 12158 // Timeout 12159 if ( s.async && s.timeout > 0 ) { 12160 timeoutTimer = window.setTimeout( function() { 12161 jqXHR.abort( "timeout" ); 12162 }, s.timeout ); 12163 } 12164 12165 try { 12166 completed = false; 12167 transport.send( requestHeaders, done ); 12168 } catch ( e ) { 12169 12170 // Rethrow post-completion exceptions 12171 if ( completed ) { 12172 throw e; 12173 } 12174 12175 // Propagate others as results 12176 done( -1, e ); 12177 } 12178 } 12179 12180 // Callback for when everything is done 12181 function done( status, nativeStatusText, responses, headers ) { 12182 var isSuccess, success, error, response, modified, 12183 statusText = nativeStatusText; 12184 12185 // Ignore repeat invocations 12186 if ( completed ) { 12187 return; 12188 } 12189 12190 completed = true; 12191 12192 // Clear timeout if it exists 12193 if ( timeoutTimer ) { 12194 window.clearTimeout( timeoutTimer ); 12195 } 12196 12197 // Dereference transport for early garbage collection 12198 // (no matter how long the jqXHR object will be used) 12199 transport = undefined; 12200 12201 // Cache response headers 12202 responseHeadersString = headers || ""; 12203 12204 // Set readyState 12205 jqXHR.readyState = status > 0 ? 4 : 0; 12206 12207 // Determine if successful 12208 isSuccess = status >= 200 && status < 300 || status === 304; 12209 12210 // Get response data 12211 if ( responses ) { 12212 response = ajaxHandleResponses( s, jqXHR, responses ); 12213 } 12214 12215 // Use a noop converter for missing script
12215 12216 if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1
vendor: 18,647 bytes, lines 12216-12954
12216 ) { 12217 s.converters[ "text script" ] = function() {}; 12218 } 12219 12220 // Convert no matter what (that way responseXXX fields are always set) 12221 response = ajaxConvert( s, response, jqXHR, isSuccess ); 12222 12223 // If successful, handle type chaining 12224 if ( isSuccess ) { 12225 12226 // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. 12227 if ( s.ifModified ) { 12228 modified = jqXHR.getResponseHeader( "Last-Modified" ); 12229 if ( modified ) { 12230 jQuery.lastModified[ cacheURL ] = modified; 12231 } 12232 modified = jqXHR.getResponseHeader( "etag" ); 12233 if ( modified ) { 12234 jQuery.etag[ cacheURL ] = modified; 12235 } 12236 } 12237 12238 // if no content 12239 if ( status === 204 || s.type === "HEAD" ) { 12240 statusText = "nocontent"; 12241 12242 // if not modified 12243 } else if ( status === 304 ) { 12244 statusText = "notmodified"; 12245 12246 // If we have data, let's convert it 12247 } else { 12248 statusText = response.state; 12249 success = response.data; 12250 error = response.error; 12251 isSuccess = !error; 12252 } 12253 } else { 12254 12255 // Extract error from statusText and normalize for non-aborts 12256 error = statusText; 12257 if ( status || !statusText ) { 12258 statusText = "error"; 12259 if ( status < 0 ) { 12260 status = 0; 12261 } 12262 } 12263 } 12264 12265 // Set data for the fake xhr object 12266 jqXHR.status = status; 12267 jqXHR.statusText = ( nativeStatusText || statusText ) + ""; 12268 12269 // Success/Error 12270 if ( isSuccess ) { 12271 deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); 12272 } else { 12273 deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); 12274 } 12275 12276 // Status-dependent callbacks 12277 jqXHR.statusCode( statusCode ); 12278 statusCode = undefined; 12279 12280 if ( fireGlobals ) { 12281 globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", 12282 [ jqXHR, s, isSuccess ? success : error ] ); 12283 } 12284 12285 // Complete 12286 completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); 12287 12288 if ( fireGlobals ) { 12289 globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); 12290 12291 // Handle the global AJAX counter 12292 if ( !( --jQuery.active ) ) { 12293 jQuery.event.trigger( "ajaxStop" ); 12294 } 12295 } 12296 } 12297 12298 return jqXHR; 12299 }, 12300 12301 getJSON: function( url, data, callback ) { 12302 return jQuery.get( url, data, callback, "json" ); 12303 }, 12304 12305 getScript: function( url, callback ) { 12306 return jQuery.get( url, undefined, callback, "script" ); 12307 } 12308} ); 12309 12310jQuery.each( [ "get", "post" ], function( _i, method ) { 12311 jQuery[ method ] = function( url, data, callback, type ) { 12312 12313 // Shift arguments if data argument was omitted 12314 if ( isFunction( data ) ) { 12315 type = type || callback; 12316 callback = data; 12317 data = undefined; 12318 } 12319 12320 // The url can be an options object (which then must have .url) 12321 return jQuery.ajax( jQuery.extend( { 12322 url: url, 12323 type: method, 12324 dataType: type, 12325 data: data, 12326 success: callback 12327 }, jQuery.isPlainObject( url ) && url ) ); 12328 }; 12329} ); 12330 12331jQuery.ajaxPrefilter( function( s ) { 12332 var i; 12333 for ( i in s.headers ) { 12334 if ( i.toLowerCase() === "content-type" ) { 12335 s.contentType = s.headers[ i ] || ""; 12336 } 12337 } 12338} ); 12339 12340 12341jQuery._evalUrl = function( url, options, doc ) { 12342 return jQuery.ajax( { 12343 url: url, 12344 12345 // Make this explicit, since user can override this through ajaxSetup (#11264) 12346 type: "GET", 12347 dataType: "script", 12348 cache: true, 12349 async: false, 12350 global: false, 12351 12352 // Only evaluate the response if it is successful (gh-4126) 12353 // dataFilter is not invoked for failure responses, so using it instead 12354 // of the default converter is kludgy but it works. 12355 converters: { 12356 "text script": function() {} 12357 }, 12358 dataFilter: function( response ) { 12359 jQuery.globalEval( response, options, doc ); 12360 } 12361 } ); 12362}; 12363 12364 12365jQuery.fn.extend( { 12366 wrapAll: function( html ) { 12367 var wrap; 12368 12369 if ( this[ 0 ] ) { 12370 if ( isFunction( html ) ) { 12371 html = html.call( this[ 0 ] ); 12372 } 12373 12374 // The elements to wrap the target around 12375 wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); 12376 12377 if ( this[ 0 ].parentNode ) { 12378 wrap.insertBefore( this[ 0 ] ); 12379 } 12380 12381 wrap.map( function() { 12382 var elem = this; 12383 12384 while ( elem.firstElementChild ) { 12385 elem = elem.firstElementChild; 12386 } 12387 12388 return elem; 12389 } ).append( this ); 12390 } 12391 12392 return this; 12393 }, 12394 12395 wrapInner: function( html ) { 12396 if ( isFunction( html ) ) { 12397 return this.each( function( i ) { 12398 jQuery( this ).wrapInner( html.call( this, i ) ); 12399 } ); 12400 } 12401 12402 return this.each( function() { 12403 var self = jQuery( this ), 12404 contents = self.contents(); 12405 12406 if ( contents.length ) { 12407 contents.wrapAll( html ); 12408 12409 } else { 12410 self.append( html ); 12411 } 12412 } ); 12413 }, 12414 12415 wrap: function( html ) { 12416 var htmlIsFunction = isFunction( html ); 12417 12418 return this.each( function( i ) { 12419 jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); 12420 } ); 12421 }, 12422 12423 unwrap: function( selector ) { 12424 this.parent( selector ).not( "body" ).each( function() { 12425 jQuery( this ).replaceWith( this.childNodes ); 12426 } ); 12427 return this; 12428 } 12429} ); 12430 12431 12432jQuery.expr.pseudos.hidden = function( elem ) { 12433 return !jQuery.expr.pseudos.visible( elem ); 12434}; 12435jQuery.expr.pseudos.visible = function( elem ) { 12436 return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); 12437}; 12438 12439 12440 12441 12442jQuery.ajaxSettings.xhr = function() { 12443 try { 12444 return new window.XMLHttpRequest(); 12445 } catch ( e ) {} 12446}; 12447 12448var xhrSuccessStatus = { 12449 12450 // File protocol always yields status code 0, assume 200 12451 0: 200, 12452 12453 // Support: IE <=9 only 12454 // #1450: sometimes IE returns 1223 when it should be 204 12455 1223: 204 12456 }, 12457 xhrSupported = jQuery.ajaxSettings.xhr(); 12458 12459support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); 12460support.ajax = xhrSupported = !!xhrSupported; 12461 12462jQuery.ajaxTransport( function( options ) { 12463 var callback, errorCallback; 12464 12465 // Cross domain only allowed if supported through XMLHttpRequest 12466 if ( support.cors || xhrSupported && !options.crossDomain ) { 12467 return { 12468 send: function( headers, complete ) { 12469 var i, 12470 xhr = options.xhr(); 12471 12472 xhr.open( 12473 options.type, 12474 options.url, 12475 options.async, 12476 options.username, 12477 options.password 12478 ); 12479 12480 // Apply custom fields if provided 12481 if ( options.xhrFields ) { 12482 for ( i in options.xhrFields ) { 12483 xhr[ i ] = options.xhrFields[ i ]; 12484 } 12485 } 12486 12487 // Override mime type if needed 12488 if ( options.mimeType && xhr.overrideMimeType ) { 12489 xhr.overrideMimeType( options.mimeType ); 12490 } 12491 12492 // X-Requested-With header 12493 // For cross-domain requests, seeing as conditions for a preflight are 12494 // akin to a jigsaw puzzle, we simply never set it to be sure. 12495 // (it can always be set on a per-request basis or even using ajaxSetup) 12496 // For same-domain requests, won't change header if already provided. 12497 if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { 12498 headers[ "X-Requested-With" ] = "XMLHttpRequest"; 12499 } 12500 12501 // Set headers 12502 for ( i in headers ) { 12503 xhr.setRequestHeader( i, headers[ i ] ); 12504 } 12505 12506 // Callback 12507 callback = function( type ) { 12508 return function() { 12509 if ( callback ) { 12510 callback = errorCallback = xhr.onload = 12511 xhr.onerror = xhr.onabort = xhr.ontimeout = 12512 xhr.onreadystatechange = null; 12513 12514 if ( type === "abort" ) { 12515 xhr.abort(); 12516 } else if ( type === "error" ) { 12517 12518 // Support: IE <=9 only 12519 // On a manual native abort, IE9 throws 12520 // errors on any property access that is not readyState 12521 if ( typeof xhr.status !== "number" ) { 12522 complete( 0, "error" ); 12523 } else { 12524 complete( 12525 12526 // File: protocol always yields status 0; see #8605, #14207 12527 xhr.status, 12528 xhr.statusText 12529 ); 12530 } 12531 } else { 12532 complete( 12533 xhrSuccessStatus[ xhr.status ] || xhr.status, 12534 xhr.statusText, 12535 12536 // Support: IE <=9 only 12537 // IE9 has no XHR2 but throws on binary (trac-11426) 12538 // For XHR2 non-text, let the caller handle it (gh-2498) 12539 ( xhr.responseType || "text" ) !== "text" || 12540 typeof xhr.responseText !== "string" ? 12541 { binary: xhr.response } : 12542 { text: xhr.responseText }, 12543 xhr.getAllResponseHeaders() 12544 ); 12545 } 12546 } 12547 }; 12548 }; 12549 12550 // Listen to events 12551 xhr.onload = callback(); 12552 errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); 12553 12554 // Support: IE 9 only 12555 // Use onreadystatechange to replace onabort 12556 // to handle uncaught aborts 12557 if ( xhr.onabort !== undefined ) { 12558 xhr.onabort = errorCallback; 12559 } else { 12560 xhr.onreadystatechange = function() { 12561 12562 // Check readyState before timeout as it changes 12563 if ( xhr.readyState === 4 ) { 12564 12565 // Allow onerror to be called first, 12566 // but that will not handle a native abort 12567 // Also, save errorCallback to a variable 12568 // as xhr.onerror cannot be accessed 12569 window.setTimeout( function() { 12570 if ( callback ) { 12571 errorCallback(); 12572 } 12573 } ); 12574 } 12575 }; 12576 } 12577 12578 // Create the abort callback 12579 callback = callback( "abort" ); 12580 12581 try { 12582 12583 // Do send the request (this may raise an exception) 12584 xhr.send( options.hasContent && options.data || null ); 12585 } catch ( e ) { 12586 12587 // #14683: Only rethrow if this hasn't been notified as an error yet 12588 if ( callback ) { 12589 throw e; 12590 } 12591 } 12592 }, 12593 12594 abort: function() { 12595 if ( callback ) { 12596 callback(); 12597 } 12598 } 12599 }; 12600 } 12601} ); 12602 12603 12604 12605 12606// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) 12607jQuery.ajaxPrefilter( function( s ) { 12608 if ( s.crossDomain ) { 12609 s.contents.script = false; 12610 } 12611} ); 12612 12613// Install script dataType 12614jQuery.ajaxSetup( { 12615 accepts: { 12616 script: "text/javascript, application/javascript, " + 12617 "application/ecmascript, application/x-ecmascript" 12618 }, 12619 contents: { 12620 script: /\b(?:java|ecma)script\b/ 12621 }, 12622 converters: { 12623 "text script": function( text ) { 12624 jQuery.globalEval( text ); 12625 return text; 12626 } 12627 } 12628} ); 12629 12630// Handle cache's special case and crossDomain 12631jQuery.ajaxPrefilter( "script", function( s ) { 12632 if ( s.cache === undefined ) { 12633 s.cache = false; 12634 } 12635 if ( s.crossDomain ) { 12636 s.type = "GET"; 12637 } 12638} ); 12639 12640// Bind script tag hack transport 12641jQuery.ajaxTransport( "script", function( s ) { 12642 12643 // This transport only deals with cross domain or forced-by-attrs requests 12644 if ( s.crossDomain || s.scriptAttrs ) { 12645 var script, callback; 12646 return { 12647 send: function( _, complete ) { 12648 script = jQuery( "<script>" ) 12649 .attr( s.scriptAttrs || {} ) 12650 .prop( { charset: s.scriptCharset, src: s.url } ) 12651 .on( "load error", callback = function( evt ) { 12652 script.remove(); 12653 callback = null; 12654 if ( evt ) { 12655 complete( evt.type === "error" ? 404 : 200, evt.type ); 12656 } 12657 } ); 12658 12659 // Use native DOM manipulation to avoid our domManip AJAX trickery 12660 document.head.appendChild( script[ 0 ] ); 12661 }, 12662 abort: function() { 12663 if ( callback ) { 12664 callback(); 12665 } 12666 } 12667 }; 12668 } 12669} ); 12670 12671 12672 12673 12674var oldCallbacks = [], 12675 rjsonp = /(=)\?(?=&|$)|\?\?/; 12676 12677// Default jsonp settings 12678jQuery.ajaxSetup( { 12679 jsonp: "callback", 12680 jsonpCallback: function() { 12681 var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce.guid++ ) ); 12682 this[ callback ] = true; 12683 return callback; 12684 } 12685} ); 12686 12687// Detect, normalize options and install callbacks for jsonp requests 12688jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { 12689 12690 var callbackName, overwritten, responseContainer, 12691 jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? 12692 "url" : 12693 typeof s.data === "string" && 12694 ( s.contentType || "" ) 12695 .indexOf( "application/x-www-form-urlencoded" ) === 0 && 12696 rjsonp.test( s.data ) && "data" 12697 ); 12698 12699 // Handle iff the expected data type is "jsonp" or we have a parameter to set 12700 if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { 12701 12702 // Get callback name, remembering preexisting value associated with it 12703 callbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ? 12704 s.jsonpCallback() : 12705 s.jsonpCallback; 12706 12707 // Insert callback into url or form data 12708 if ( jsonProp ) { 12709 s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); 12710 } else if ( s.jsonp !== false ) { 12711 s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; 12712 } 12713 12714 // Use data converter to retrieve json after script execution 12715 s.converters[ "script json" ] = function() { 12716 if ( !responseContainer ) { 12717 jQuery.error( callbackName + " was not called" ); 12718 } 12719 return responseContainer[ 0 ]; 12720 }; 12721 12722 // Force json dataType 12723 s.dataTypes[ 0 ] = "json"; 12724 12725 // Install callback 12726 overwritten = window[ callbackName ]; 12727 window[ callbackName ] = function() { 12728 responseContainer = arguments; 12729 }; 12730 12731 // Clean-up function (fires after converters) 12732 jqXHR.always( function() { 12733 12734 // If previous value didn't exist - remove it 12735 if ( overwritten === undefined ) { 12736 jQuery( window ).removeProp( callbackName ); 12737 12738 // Otherwise restore preexisting value 12739 } else { 12740 window[ callbackName ] = overwritten; 12741 } 12742 12743 // Save back as free 12744 if ( s[ callbackName ] ) { 12745 12746 // Make sure that re-using the options doesn't screw things around 12747 s.jsonpCallback = originalSettings.jsonpCallback; 12748 12749 // Save the callback name for future use 12750 oldCallbacks.push( callbackName ); 12751 } 12752 12753 // Call if it was a function and we have a response 12754 if ( responseContainer && isFunction( overwritten ) ) { 12755 overwritten( responseContainer[ 0 ] ); 12756 } 12757 12758 responseContainer = overwritten = undefined; 12759 } ); 12760 12761 // Delegate to script 12762 return "script"; 12763 } 12764} ); 12765 12766 12767 12768 12769// Support: Safari 8 only 12770// In Safari 8 documents created via document.implementation.createHTMLDocument 12771// collapse sibling forms: the second one becomes a child of the first one. 12772// Because of that, this security measure has to be disabled in Safari 8. 12773// https://bugs.webkit.org/show_bug.cgi?id=137337 12774support.createHTMLDocument = ( function() { 12775 var body = document.implementation.createHTMLDocument( "" ).body; 12776 body.innerHTML = "<form></form><form></form>"; 12777 return body.childNodes.length === 2; 12778} )(); 12779 12780 12781// Argument "data" should be string of html 12782// context (optional): If specified, the fragment will be created in this context, 12783// defaults to document 12784// keepScripts (optional): If true, will include scripts passed in the html string 12785jQuery.parseHTML = function( data, context, keepScripts ) { 12786 if ( typeof data !== "string" ) { 12787 return []; 12788 } 12789 if ( typeof context === "boolean" ) { 12790 keepScripts = context; 12791 context = false; 12792 } 12793 12794 var base, parsed, scripts; 12795 12796 if ( !context ) { 12797 12798 // Stop scripts or inline event handlers from being executed immediately 12799 // by using document.implementation 12800 if ( support.createHTMLDocument ) { 12801 context = document.implementation.createHTMLDocument( "" ); 12802 12803 // Set the base href for the created document 12804 // so any parsed elements with URLs 12805 // are based on the document's URL (gh-2965) 12806 base = context.createElement( "base" ); 12807 base.href = document.location.href; 12808 context.head.appendChild( base ); 12809 } else { 12810 context = document; 12811 } 12812 } 12813 12814 parsed = rsingleTag.exec( data ); 12815 scripts = !keepScripts && []; 12816 12817 // Single tag 12818 if ( parsed ) { 12819 return [ context.createElement( parsed[ 1 ] ) ]; 12820 } 12821 12822 parsed = buildFragment( [ data ], context, scripts ); 12823 12824 if ( scripts && scripts.length ) { 12825 jQuery( scripts ).remove(); 12826 } 12827 12828 return jQuery.merge( [], parsed.childNodes ); 12829}; 12830 12831 12832/** 12833 * Load a url into a page 12834 */ 12835jQuery.fn.load = function( url, params, callback ) { 12836 var selector, type, response, 12837 self = this, 12838 off = url.indexOf( " " ); 12839 12840 if ( off > -1 ) { 12841 selector = stripAndCollapse( url.slice( off ) ); 12842 url = url.slice( 0, off ); 12843 } 12844 12845 // If it's a function 12846 if ( isFunction( params ) ) { 12847 12848 // We assume that it's the callback 12849 callback = params; 12850 params = undefined; 12851 12852 // Otherwise, build a param string 12853 } else if ( params && typeof params === "object" ) { 12854 type = "POST"; 12855 } 12856 12857 // If we have elements to modify, make the request 12858 if ( self.length > 0 ) { 12859 jQuery.ajax( { 12860 url: url, 12861 12862 // If "type" variable is undefined, then "GET" method will be used. 12863 // Make value of this field explicit since 12864 // user can override it through ajaxSetup method 12865 type: type || "GET", 12866 dataType: "html", 12867 data: params 12868 } ).done( function( responseText ) { 12869 12870 // Save response for use in complete callback 12871 response = arguments; 12872 12873 self.html( selector ? 12874 12875 // If a selector was specified, locate the right elements in a dummy div 12876 // Exclude scripts to avoid IE 'Permission Denied' errors 12877 jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) : 12878 12879 // Otherwise use the full result 12880 responseText ); 12881 12882 // If the request succeeds, this function gets "data", "status", "jqXHR" 12883 // but they are ignored because response was set above. 12884 // If it fails, this function gets "jqXHR", "status", "error" 12885 } ).always( callback && function( jqXHR, status ) { 12886 self.each( function() { 12887 callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] ); 12888 } ); 12889 } ); 12890 } 12891 12892 return this; 12893}; 12894 12895 12896 12897 12898jQuery.expr.pseudos.animated = function( elem ) { 12899 return jQuery.grep( jQuery.timers, function( fn ) { 12900 return elem === fn.elem; 12901 } ).length; 12902}; 12903 12904 12905 12906 12907jQuery.offset = { 12908 setOffset: function( elem, options, i ) { 12909 var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, 12910 position = jQuery.css( elem, "position" ), 12911 curElem = jQuery( elem ), 12912 props = {}; 12913 12914 // Set position first, in-case top/left are set even on static elem 12915 if ( position === "static" ) { 12916 elem.style.position = "relative"; 12917 } 12918 12919 curOffset = curElem.offset(); 12920 curCSSTop = jQuery.css( elem, "top" ); 12921 curCSSLeft = jQuery.css( elem, "left" ); 12922 calculatePosition = ( position === "absolute" || position === "fixed" ) && 12923 ( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1; 12924 12925 // Need to be able to calculate position if either 12926 // top or left is auto and position is either absolute or fixed 12927 if ( calculatePosition ) { 12928 curPosition = curElem.position(); 12929 curTop = curPosition.top; 12930 curLeft = curPosition.left; 12931 12932 } else { 12933 curTop = parseFloat( curCSSTop ) || 0; 12934 curLeft = parseFloat( curCSSLeft ) || 0; 12935 } 12936 12937 if ( isFunction( options ) ) { 12938 12939 // Use jQuery.extend here to allow modification of coordinates argument (gh-1848) 12940 options = options.call( elem, i, jQuery.extend( {}, curOffset ) ); 12941 } 12942 12943 if ( options.top != null ) { 12944 props.top = ( options.top - curOffset.top ) + curTop; 12945 } 12946 if ( options.left != null ) { 12947 props.left = ( options.left - curOffset.left ) + curLeft; 12948 } 12949 12950 if ( "using" in options ) { 12951 options.using.call( elem, props ); 12952 12953 } else { 12954
vendor: 2,160 bytes, lines 12954-13032
12954if ( typeof props.top === "number" ) { 12955 props.top += "px"; 12956 } 12957 if ( typeof props.left === "number" ) { 12958 props.left += "px"; 12959 } 12960 curElem.css( props ); 12961 } 12962 } 12963}; 12964 12965jQuery.fn.extend( { 12966 12967 // offset() relates an element's border box to the document origin 12968 offset: function( options ) { 12969 12970 // Preserve chaining for setter 12971 if ( arguments.length ) { 12972 return options === undefined ? 12973 this : 12974 this.each( function( i ) { 12975 jQuery.offset.setOffset( this, options, i ); 12976 } ); 12977 } 12978 12979 var rect, win, 12980 elem = this[ 0 ]; 12981 12982 if ( !elem ) { 12983 return; 12984 } 12985 12986 // Return zeros for disconnected and hidden (display: none) elements (gh-2310) 12987 // Support: IE <=11 only 12988 // Running getBoundingClientRect on a 12989 // disconnected node in IE throws an error 12990 if ( !elem.getClientRects().length ) { 12991 return { top: 0, left: 0 }; 12992 } 12993 12994 // Get document-relative position by adding viewport scroll to viewport-relative gBCR 12995 rect = elem.getBoundingClientRect(); 12996 win = elem.ownerDocument.defaultView; 12997 return { 12998 top: rect.top + win.pageYOffset, 12999 left: rect.left + win.pageXOffset 13000 }; 13001 }, 13002 13003 // position() relates an element's margin box to its offset parent's padding box 13004 // This corresponds to the behavior of CSS absolute positioning 13005 position: function() { 13006 if ( !this[ 0 ] ) { 13007 return; 13008 } 13009 13010 var offsetParent, offset, doc, 13011 elem = this[ 0 ], 13012 parentOffset = { top: 0, left: 0 }; 13013 13014 // position:fixed elements are offset from the viewport, which itself always has zero offset 13015 if ( jQuery.css( elem, "position" ) === "fixed" ) { 13016 13017 // Assume position:fixed implies availability of getBoundingClientRect 13018 offset = elem.getBoundingClientRect(); 13019 13020 } else { 13021 offset = this.offset(); 13022 13023 // Account for the *real* offset parent, which can be the document or its root element 13024 // when a statically positioned element is identified 13025 doc = elem.ownerDocument; 13026 offsetParent = elem.offsetParent || doc.documentElement; 13027 while ( offsetParent && 13028 ( offsetParent === doc.body || offsetParent === doc.documentElement ) && 13029 jQuery.css( offsetParent, "position" ) === "static" ) { 13030 13031 offsetParent = offsetParent.parentNode; 13032 }
vendor: 7,719 bytes, lines 13033-13298
13033 if ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) { 13034 13035 // Incorporate borders into its offset, since they are outside its content origin 13036 parentOffset = jQuery( offsetParent ).offset(); 13037 parentOffset.top += jQuery.css( offsetParent, "borderTopWidth", true ); 13038 parentOffset.left += jQuery.css( offsetParent, "borderLeftWidth", true ); 13039 } 13040 } 13041 13042 // Subtract parent offsets and element margins 13043 return { 13044 top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), 13045 left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) 13046 }; 13047 }, 13048 13049 // This method will return documentElement in the following cases: 13050 // 1) For the element inside the iframe without offsetParent, this method will return 13051 // documentElement of the parent window 13052 // 2) For the hidden or detached element 13053 // 3) For body or html element, i.e. in case of the html node - it will return itself 13054 // 13055 // but those exceptions were never presented as a real life use-cases 13056 // and might be considered as more preferable results. 13057 // 13058 // This logic, however, is not guaranteed and can change at any point in the future 13059 offsetParent: function() { 13060 return this.map( function() { 13061 var offsetParent = this.offsetParent; 13062 13063 while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) { 13064 offsetParent = offsetParent.offsetParent; 13065 } 13066 13067 return offsetParent || documentElement; 13068 } ); 13069 } 13070} ); 13071 13072// Create scrollLeft and scrollTop methods 13073jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { 13074 var top = "pageYOffset" === prop; 13075 13076 jQuery.fn[ method ] = function( val ) { 13077 return access( this, function( elem, method, val ) { 13078 13079 // Coalesce documents and windows 13080 var win; 13081 if ( isWindow( elem ) ) { 13082 win = elem; 13083 } else if ( elem.nodeType === 9 ) { 13084 win = elem.defaultView; 13085 } 13086 13087 if ( val === undefined ) { 13088 return win ? win[ prop ] : elem[ method ]; 13089 } 13090 13091 if ( win ) { 13092 win.scrollTo( 13093 !top ? val : win.pageXOffset, 13094 top ? val : win.pageYOffset 13095 ); 13096 13097 } else { 13098 elem[ method ] = val; 13099 } 13100 }, method, val, arguments.length ); 13101 }; 13102} ); 13103 13104// Support: Safari <=7 - 9.1, Chrome <=37 - 49 13105// Add the top/left cssHooks using jQuery.fn.position 13106// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 13107// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347 13108// getComputedStyle returns percent when specified for top/left/bottom/right; 13109// rather than make the css module depend on the offset module, just check for it here 13110jQuery.each( [ "top", "left" ], function( _i, prop ) { 13111 jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, 13112 function( elem, computed ) { 13113 if ( computed ) { 13114 computed = curCSS( elem, prop ); 13115 13116 // If curCSS returns percentage, fallback to offset 13117 return rnumnonpx.test( computed ) ? 13118 jQuery( elem ).position()[ prop ] + "px" : 13119 computed; 13120 } 13121 } 13122 ); 13123} ); 13124 13125 13126// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods 13127jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { 13128 jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, 13129 function( defaultExtra, funcName ) { 13130 13131 // Margin is only for outerHeight, outerWidth 13132 jQuery.fn[ funcName ] = function( margin, value ) { 13133 var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), 13134 extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); 13135 13136 return access( this, function( elem, type, value ) { 13137 var doc; 13138 13139 if ( isWindow( elem ) ) { 13140 13141 // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729) 13142 return funcName.indexOf( "outer" ) === 0 ? 13143 elem[ "inner" + name ] : 13144 elem.document.documentElement[ "client" + name ]; 13145 } 13146 13147 // Get document width or height 13148 if ( elem.nodeType === 9 ) { 13149 doc = elem.documentElement; 13150 13151 // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], 13152 // whichever is greatest 13153 return Math.max( 13154 elem.body[ "scroll" + name ], doc[ "scroll" + name ], 13155 elem.body[ "offset" + name ], doc[ "offset" + name ], 13156 doc[ "client" + name ] 13157 ); 13158 } 13159 13160 return value === undefined ? 13161 13162 // Get width or height on the element, requesting but not forcing parseFloat 13163 jQuery.css( elem, type, extra ) : 13164 13165 // Set width or height on the element 13166 jQuery.style( elem, type, value, extra ); 13167 }, type, chainable ? margin : undefined, chainable ); 13168 }; 13169 } ); 13170} ); 13171 13172 13173jQuery.each( [ 13174 "ajaxStart", 13175 "ajaxStop", 13176 "ajaxComplete", 13177 "ajaxError", 13178 "ajaxSuccess", 13179 "ajaxSend" 13180], function( _i, type ) { 13181 jQuery.fn[ type ] = function( fn ) { 13182 return this.on( type, fn ); 13183 }; 13184} ); 13185 13186 13187 13188 13189jQuery.fn.extend( { 13190 13191 bind: function( types, data, fn ) { 13192 return this.on( types, null, data, fn ); 13193 }, 13194 unbind: function( types, fn ) { 13195 return this.off( types, null, fn ); 13196 }, 13197 13198 delegate: function( selector, types, data, fn ) { 13199 return this.on( types, selector, data, fn ); 13200 }, 13201 undelegate: function( selector, types, fn ) { 13202 13203 // ( namespace ) or ( selector, types [, fn] ) 13204 return arguments.length === 1 ? 13205 this.off( selector, "**" ) : 13206 this.off( types, selector || "**", fn ); 13207 }, 13208 13209 hover: function( fnOver, fnOut ) { 13210 return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); 13211 } 13212} ); 13213 13214jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + 13215 "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + 13216 "change select submit keydown keypress keyup contextmenu" ).split( " " ), 13217 function( _i, name ) { 13218 13219 // Handle event binding 13220 jQuery.fn[ name ] = function( data, fn ) { 13221 return arguments.length > 0 ? 13222 this.on( name, null, data, fn ) : 13223 this.trigger( name ); 13224 }; 13225 } ); 13226 13227 13228 13229 13230// Support: Android <=4.0 only 13231// Make sure we trim BOM and NBSP 13232var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g; 13233 13234// Bind a function to a context, optionally partially applying any 13235// arguments. 13236// jQuery.proxy is deprecated to promote standards (specifically Function#bind) 13237// However, it is not slated for removal any time soon 13238jQuery.proxy = function( fn, context ) { 13239 var tmp, args, proxy; 13240 13241 if ( typeof context === "string" ) { 13242 tmp = fn[ context ]; 13243 context = fn; 13244 fn = tmp; 13245 } 13246 13247 // Quick check to determine if target is callable, in the spec 13248 // this throws a TypeError, but we will just return undefined. 13249 if ( !isFunction( fn ) ) { 13250 return undefined; 13251 } 13252 13253 // Simulated bind 13254 args = slice.call( arguments, 2 ); 13255 proxy = function() { 13256 return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); 13257 }; 13258 13259 // Set the guid of unique handler to the same of original handler, so it can be removed 13260 proxy.guid = fn.guid = fn.guid || jQuery.guid++; 13261 13262 return proxy; 13263}; 13264 13265jQuery.holdReady = function( hold ) { 13266 if ( hold ) { 13267 jQuery.readyWait++; 13268 } else { 13269 jQuery.ready( true ); 13270 } 13271}; 13272jQuery.isArray = Array.isArray; 13273jQuery.parseJSON = JSON.parse; 13274jQuery.nodeName = nodeName; 13275jQuery.isFunction = isFunction; 13276jQuery.isWindow = isWindow; 13277jQuery.camelCase = camelCase; 13278jQuery.type = toType; 13279 13280jQuery.now = Date.now; 13281 13282jQuery.isNumeric = function( obj ) { 13283 13284 // As of jQuery 3.0, isNumeric is limited to 13285 // strings and numbers (primitives or objects) 13286 // that can be coerced to finite numbers (gh-2662) 13287 var type = jQuery.type( obj ); 13288 return ( type === "number" || type === "string" ) && 13289 13290 // parseFloat NaNs numeric-cast false positives ("") 13291 // ...but misinterprets leading-number strings, particularly hex literals ("0x...") 13292 // subtraction forces infinities to NaN 13293 !isNaN( obj - parseFloat( obj ) ); 13294}; 13295 13296jQuery.trim = function( text ) { 13297 return text == null ? 13298 "" :
13299 ( text + "" ).replace( rtrim, "" ); 13300}; 13301 13302 13303 13304// Register as a named AMD module, since jQuery can be concatenated with other 13305// files that may use define, but not via a proper concatenation script that 13306// understands anonymous AMD modules. A named AMD is safest and most robust 13307// way to register. Lowercase jquery is used because AMD module names are 13308// derived from file names, and jQuery is normally delivered in a lowercase 13309// file name. Do this after creating the global so that if an AMD module wants 13310// to call noConflict to hide this version of jQuery, it will work. 13311 13312// Note that for maximum portability, libraries that are not jQuery should 13313// declare themselves as anonymous modules, and avoid setting a global if an 13314// AMD loader is present. jQuery is a special case. For more information, see 13315// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon 13316 13317if ( typeof define === "function" && define.amd ) { 13318 define( "jquery", [], function() { 13319 return jQuery; 13320 } ); 13321} 13322 13323 13324 13325 13326var 13327 13328 // Map over jQuery in case of overwrite 13329 _jQuery = window.jQuery, 13330 13331 // Map over the $ in case of overwrite 13332 _$ = window.$; 13333 13334jQuery.noConflict = function( deep ) { 13335 if ( window.$ === jQuery ) { 13336 window.$ = _$; 13337 } 13338 13339 if ( deep && window.jQuery === jQuery ) { 13340 window.jQuery = _jQuery; 13341 } 13342 13343 return jQuery; 13344}; 13345 13346// Expose jQuery and $ identifiers, even in AMD 13347// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) 13348// and CommonJS for browser emulators (#13566) 13349if ( typeof noGlobal === "undefined" ) { 13350 window.jQuery = window.$ = jQuery; 13351} 13352 13353 13354 13355 13356return jQuery; 13357} ); 13358 13359},{}],28:[function(require,module,exports){ 13360(function (global){(function (){ 13361/** 13362 * @license 13363 * Lodash <https://lodash.com/> 13364 * Copyright OpenJS Foundation and other contributors <https://openjsf.org/> 13365 * Released under MIT license <https://lodash.com/license> 13366 * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> 13367 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors 13368 */ 13369;(function() { 13370 13371 /** Used as a safe reference for `undefined` in pre-ES5 environments. */ 13372 var undefined
vendor: 12,195 bytes, lines 13372-13675
13372; 13373 13374 /** Used as the semantic version number. */ 13375 var VERSION = '4.17.21'; 13376 13377 /** Used as the size to enable large array optimizations. */ 13378 var LARGE_ARRAY_SIZE = 200; 13379 13380 /** Error message constants. */ 13381 var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.', 13382 FUNC_ERROR_TEXT = 'Expected a function', 13383 INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`'; 13384 13385 /** Used to stand-in for `undefined` hash values. */ 13386 var HASH_UNDEFINED = '__lodash_hash_undefined__'; 13387 13388 /** Used as the maximum memoize cache size. */ 13389 var MAX_MEMOIZE_SIZE = 500; 13390 13391 /** Used as the internal argument placeholder. */ 13392 var PLACEHOLDER = '__lodash_placeholder__'; 13393 13394 /** Used to compose bitmasks for cloning. */ 13395 var CLONE_DEEP_FLAG = 1, 13396 CLONE_FLAT_FLAG = 2, 13397 CLONE_SYMBOLS_FLAG = 4; 13398 13399 /** Used to compose bitmasks for value comparisons. */ 13400 var COMPARE_PARTIAL_FLAG = 1, 13401 COMPARE_UNORDERED_FLAG = 2; 13402 13403 /** Used to compose bitmasks for function metadata. */ 13404 var WRAP_BIND_FLAG = 1, 13405 WRAP_BIND_KEY_FLAG = 2, 13406 WRAP_CURRY_BOUND_FLAG = 4, 13407 WRAP_CURRY_FLAG = 8, 13408 WRAP_CURRY_RIGHT_FLAG = 16, 13409 WRAP_PARTIAL_FLAG = 32, 13410 WRAP_PARTIAL_RIGHT_FLAG = 64, 13411 WRAP_ARY_FLAG = 128, 13412 WRAP_REARG_FLAG = 256, 13413 WRAP_FLIP_FLAG = 512; 13414 13415 /** Used as default options for `_.truncate`. */ 13416 var DEFAULT_TRUNC_LENGTH = 30, 13417 DEFAULT_TRUNC_OMISSION = '...'; 13418 13419 /** Used to detect hot functions by number of calls within a span of milliseconds. */ 13420 var HOT_COUNT = 800, 13421 HOT_SPAN = 16; 13422 13423 /** Used to indicate the type of lazy iteratees. */ 13424 var LAZY_FILTER_FLAG = 1, 13425 LAZY_MAP_FLAG = 2, 13426 LAZY_WHILE_FLAG = 3; 13427 13428 /** Used as references for various `Number` constants. */ 13429 var INFINITY = 1 / 0, 13430 MAX_SAFE_INTEGER = 9007199254740991, 13431 MAX_INTEGER = 1.7976931348623157e+308, 13432 NAN = 0 / 0; 13433 13434 /** Used as references for the maximum length and index of an array. */ 13435 var MAX_ARRAY_LENGTH = 4294967295, 13436 MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, 13437 HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; 13438 13439 /** Used to associate wrap methods with their bit flags. */ 13440 var wrapFlags = [ 13441 ['ary', WRAP_ARY_FLAG], 13442 ['bind', WRAP_BIND_FLAG], 13443 ['bindKey', WRAP_BIND_KEY_FLAG], 13444 ['curry', WRAP_CURRY_FLAG], 13445 ['curryRight', WRAP_CURRY_RIGHT_FLAG], 13446 ['flip', WRAP_FLIP_FLAG], 13447 ['partial', WRAP_PARTIAL_FLAG], 13448 ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], 13449 ['rearg', WRAP_REARG_FLAG] 13450 ]; 13451 13452 /** `Object#toString` result references. */ 13453 var argsTag = '[object Arguments]', 13454 arrayTag = '[object Array]', 13455 asyncTag = '[object AsyncFunction]', 13456 boolTag = '[object Boolean]', 13457 dateTag = '[object Date]', 13458 domExcTag = '[object DOMException]', 13459 errorTag = '[object Error]', 13460 funcTag = '[object Function]', 13461 genTag = '[object GeneratorFunction]', 13462 mapTag = '[object Map]', 13463 numberTag = '[object Number]', 13464 nullTag = '[object Null]', 13465 objectTag = '[object Object]', 13466 promiseTag = '[object Promise]', 13467 proxyTag = '[object Proxy]', 13468 regexpTag = '[object RegExp]', 13469 setTag = '[object Set]', 13470 stringTag = '[object String]', 13471 symbolTag = '[object Symbol]', 13472 undefinedTag = '[object Undefined]', 13473 weakMapTag = '[object WeakMap]', 13474 weakSetTag = '[object WeakSet]'; 13475 13476 var arrayBufferTag = '[object ArrayBuffer]', 13477 dataViewTag = '[object DataView]', 13478 float32Tag = '[object Float32Array]', 13479 float64Tag = '[object Float64Array]', 13480 int8Tag = '[object Int8Array]', 13481 int16Tag = '[object Int16Array]', 13482 int32Tag = '[object Int32Array]', 13483 uint8Tag = '[object Uint8Array]', 13484 uint8ClampedTag = '[object Uint8ClampedArray]', 13485 uint16Tag = '[object Uint16Array]', 13486 uint32Tag = '[object Uint32Array]'; 13487 13488 /** Used to match empty string literals in compiled template source. */ 13489 var reEmptyStringLeading = /\b__p \+= '';/g, 13490 reEmptyStringMiddle = /\b(__p \+=) '' \+/g, 13491 reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; 13492 13493 /** Used to match HTML entities and HTML characters. */ 13494 var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, 13495 reUnescapedHtml = /[&<>"']/g, 13496 reHasEscapedHtml = RegExp(reEscapedHtml.source), 13497 reHasUnescapedHtml = RegExp(reUnescapedHtml.source); 13498 13499 /** Used to match template delimiters. */ 13500 var reEscape = /<%-([\s\S]+?)%>/g, 13501 reEvaluate = /<%([\s\S]+?)%>/g, 13502 reInterpolate = /<%=([\s\S]+?)%>/g; 13503 13504 /** Used to match property names within property paths. */ 13505 var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, 13506 reIsPlainProp = /^\w*$/, 13507 rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; 13508 13509 /** 13510 * Used to match `RegExp` 13511 * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). 13512 */ 13513 var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, 13514 reHasRegExpChar = RegExp(reRegExpChar.source); 13515 13516 /** Used to match leading whitespace. */ 13517 var reTrimStart = /^\s+/; 13518 13519 /** Used to match a single whitespace character. */ 13520 var reWhitespace = /\s/; 13521 13522 /** Used to match wrap detail comments. */ 13523 var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, 13524 reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, 13525 reSplitDetails = /,? & /; 13526 13527 /** Used to match words composed of alphanumeric characters. */ 13528 var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; 13529 13530 /** 13531 * Used to validate the `validate` option in `_.template` variable. 13532 * 13533 * Forbids characters which could potentially change the meaning of the function argument definition: 13534 * - "()," (modification of function parameters) 13535 * - "=" (default value) 13536 * - "[]{}" (destructuring of function parameters) 13537 * - "/" (beginning of a comment) 13538 * - whitespace 13539 */ 13540 var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; 13541 13542 /** Used to match backslashes in property paths. */ 13543 var reEscapeChar = /\\(\\)?/g; 13544 13545 /** 13546 * Used to match 13547 * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components). 13548 */ 13549 var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; 13550 13551 /** Used to match `RegExp` flags from their coerced string values. */ 13552 var reFlags = /\w*$/; 13553 13554 /** Used to detect bad signed hexadecimal string values. */ 13555 var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; 13556 13557 /** Used to detect binary string values. */ 13558 var reIsBinary = /^0b[01]+$/i; 13559 13560 /** Used to detect host constructors (Safari). */ 13561 var reIsHostCtor = /^\[object .+?Constructor\]$/; 13562 13563 /** Used to detect octal string values. */ 13564 var reIsOctal = /^0o[0-7]+$/i; 13565 13566 /** Used to detect unsigned integer values. */ 13567 var reIsUint = /^(?:0|[1-9]\d*)$/; 13568 13569 /** Used to match Latin Unicode letters (excluding mathematical operators). */ 13570 var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; 13571 13572 /** Used to ensure capturing order of template delimiters. */ 13573 var reNoMatch = /($^)/; 13574 13575 /** Used to match unescaped characters in compiled string literals. */ 13576 var reUnescapedString = /['\n\r\u2028\u2029\\]/g; 13577 13578 /** Used to compose unicode character classes. */ 13579 var rsAstralRange = '\\ud800-\\udfff', 13580 rsComboMarksRange = '\\u0300-\\u036f', 13581 reComboHalfMarksRange = '\\ufe20-\\ufe2f', 13582 rsComboSymbolsRange = '\\u20d0-\\u20ff', 13583 rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, 13584 rsDingbatRange = '\\u2700-\\u27bf', 13585 rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', 13586 rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', 13587 rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf', 13588 rsPunctuationRange = '\\u2000-\\u206f', 13589 rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000', 13590 rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde', 13591 rsVarRange = '\\ufe0e\\ufe0f', 13592 rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; 13593 13594 /** Used to compose unicode capture groups. */ 13595 var rsApos = "['\u2019]", 13596 rsAstral = '[' + rsAstralRange + ']', 13597 rsBreak = '[' + rsBreakRange + ']', 13598 rsCombo = '[' + rsComboRange + ']', 13599 rsDigits = '\\d+', 13600 rsDingbat = '[' + rsDingbatRange + ']', 13601 rsLower = '[' + rsLowerRange + ']', 13602 rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']', 13603 rsFitz = '\\ud83c[\\udffb-\\udfff]', 13604 rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', 13605 rsNonAstral = '[^' + rsAstralRange + ']', 13606 rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', 13607 rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', 13608 rsUpper = '[' + rsUpperRange + ']', 13609 rsZWJ = '\\u200d'; 13610 13611 /** Used to compose unicode regexes. */ 13612 var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')', 13613 rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')', 13614 rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', 13615 rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', 13616 reOptMod = rsModifier + '?', 13617 rsOptVar = '[' + rsVarRange + ']?', 13618 rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', 13619 rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])', 13620 rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])', 13621 rsSeq = rsOptVar + reOptMod + rsOptJoin, 13622 rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, 13623 rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; 13624 13625 /** Used to match apostrophes. */ 13626 var reApos = RegExp(rsApos, 'g'); 13627 13628 /** 13629 * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and 13630 * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). 13631 */ 13632 var reComboMark = RegExp(rsCombo, 'g'); 13633 13634 /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ 13635 var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); 13636 13637 /** Used to match complex or compound words. */ 13638 var reUnicodeWord = RegExp([ 13639 rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', 13640 rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')', 13641 rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower, 13642 rsUpper + '+' + rsOptContrUpper, 13643 rsOrdUpper, 13644 rsOrdLower, 13645 rsDigits, 13646 rsEmoji 13647 ].join('|'), 'g'); 13648 13649 /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ 13650 var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); 13651 13652 /** Used to detect strings that need a more robust regexp to match words. */ 13653 var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; 13654 13655 /** Used to assign default `context` object properties. */ 13656 var contextProps = [ 13657 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array', 13658 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object', 13659 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array', 13660 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap', 13661 '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout' 13662 ]; 13663 13664 /** Used to make template sourceURLs easier to identify. */ 13665 var templateCounter = -1; 13666 13667 /** Used to identify `toStringTag` values of typed arrays. */ 13668 var typedArrayTags = {}; 13669 typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = 13670 typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = 13671 typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = 13672 typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = 13673 typedArrayTags[uint32Tag] = true; 13674 typedArrayTags[argsTag] = typedArrayTags[arrayTag] = 13675 typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
vendor: 5,923 bytes, lines 13676-13810
13676 typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = 13677 typedArrayTags[errorTag] = typedArrayTags[funcTag] = 13678 typedArrayTags[mapTag] = typedArrayTags[numberTag] = 13679 typedArrayTags[objectTag] = typedArrayTags[regexpTag] = 13680 typedArrayTags[setTag] = typedArrayTags[stringTag] = 13681 typedArrayTags[weakMapTag] = false; 13682 13683 /** Used to identify `toStringTag` values supported by `_.clone`. */ 13684 var cloneableTags = {}; 13685 cloneableTags[argsTag] = cloneableTags[arrayTag] = 13686 cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = 13687 cloneableTags[boolTag] = cloneableTags[dateTag] = 13688 cloneableTags[float32Tag] = cloneableTags[float64Tag] = 13689 cloneableTags[int8Tag] = cloneableTags[int16Tag] = 13690 cloneableTags[int32Tag] = cloneableTags[mapTag] = 13691 cloneableTags[numberTag] = cloneableTags[objectTag] = 13692 cloneableTags[regexpTag] = cloneableTags[setTag] = 13693 cloneableTags[stringTag] = cloneableTags[symbolTag] = 13694 cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = 13695 cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; 13696 cloneableTags[errorTag] = cloneableTags[funcTag] = 13697 cloneableTags[weakMapTag] = false; 13698 13699 /** Used to map Latin Unicode letters to basic Latin letters. */ 13700 var deburredLetters = { 13701 // Latin-1 Supplement block. 13702 '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A', 13703 '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a', 13704 '\xc7': 'C', '\xe7': 'c', 13705 '\xd0': 'D', '\xf0': 'd', 13706 '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E', 13707 '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e', 13708 '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I', 13709 '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i', 13710 '\xd1': 'N', '\xf1': 'n', 13711 '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O', 13712 '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o', 13713 '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U', 13714 '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u', 13715 '\xdd': 'Y', '\xfd': 'y', '\xff': 'y', 13716 '\xc6': 'Ae', '\xe6': 'ae', 13717 '\xde': 'Th', '\xfe': 'th', 13718 '\xdf': 'ss', 13719 // Latin Extended-A block. 13720 '\u0100': 'A', '\u0102': 'A', '\u0104': 'A', 13721 '\u0101': 'a', '\u0103': 'a', '\u0105': 'a', 13722 '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C', 13723 '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c', 13724 '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd', 13725 '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E', 13726 '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e', 13727 '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G', 13728 '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g', 13729 '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h', 13730 '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I', 13731 '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i', 13732 '\u0134': 'J', '\u0135': 'j', 13733 '\u0136': 'K', '\u0137': 'k', '\u0138': 'k', 13734 '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L', 13735 '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l', 13736 '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N', 13737 '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n', 13738 '\u014c': 'O', '\u014e': 'O', '\u0150': 'O', 13739 '\u014d': 'o', '\u014f': 'o', '\u0151': 'o', 13740 '\u0154': 'R', '\u0156': 'R', '\u0158': 'R', 13741 '\u0155': 'r', '\u0157': 'r', '\u0159': 'r', 13742 '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S', 13743 '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's', 13744 '\u0162': 'T', '\u0164': 'T', '\u0166': 'T', 13745 '\u0163': 't', '\u0165': 't', '\u0167': 't', 13746 '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U', 13747 '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u', 13748 '\u0174': 'W', '\u0175': 'w', 13749 '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y', 13750 '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z', 13751 '\u017a': 'z', '\u017c': 'z', '\u017e': 'z', 13752 '\u0132': 'IJ', '\u0133': 'ij', 13753 '\u0152': 'Oe', '\u0153': 'oe', 13754 '\u0149': "'n", '\u017f': 's' 13755 }; 13756 13757 /** Used to map characters to HTML entities. */ 13758 var htmlEscapes = { 13759 '&': '&', 13760 '<': '<', 13761 '>': '>', 13762 '"': '"', 13763 "'": ''' 13764 }; 13765 13766 /** Used to map HTML entities to characters. */ 13767 var htmlUnescapes = { 13768 '&': '&', 13769 '<': '<', 13770 '>': '>', 13771 '"': '"', 13772 ''': "'" 13773 }; 13774 13775 /** Used to escape characters for inclusion in compiled string literals. */ 13776 var stringEscapes = { 13777 '\\': '\\', 13778 "'": "'", 13779 '\n': 'n', 13780 '\r': 'r', 13781 '\u2028': 'u2028', 13782 '\u2029': 'u2029' 13783 }; 13784 13785 /** Built-in method references without a dependency on `root`. */ 13786 var freeParseFloat = parseFloat, 13787 freeParseInt = parseInt; 13788 13789 /** Detect free variable `global` from Node.js. */ 13790 var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; 13791 13792 /** Detect free variable `self`. */ 13793 var freeSelf = typeof self == 'object' && self && self.Object === Object && self; 13794 13795 /** Used as a reference to the global object. */ 13796 var root = freeGlobal || freeSelf || Function('return this')(); 13797 13798 /** Detect free variable `exports`. */ 13799 var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; 13800 13801 /** Detect free variable `module`. */ 13802 var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; 13803 13804 /** Detect the popular CommonJS extension `module.exports`. */ 13805 var moduleExports = freeModule && freeModule.exports === freeExports; 13806 13807 /** Detect free variable `process` from Node.js. */ 13808 var freeProcess = moduleExports && freeGlobal.process; 13809 13810 /** Used to access faster Node.js helpers. */
vendor: 8,860 bytes, lines 13811-14104
13811 var nodeUtil = (function() { 13812 try { 13813 // Use `util.types` for Node.js 10+. 13814 var types = freeModule && freeModule.require && freeModule.require('util').types; 13815 13816 if (types) { 13817 return types; 13818 } 13819 13820 // Legacy `process.binding('util')` for Node.js < 10. 13821 return freeProcess && freeProcess.binding && freeProcess.binding('util'); 13822 } catch (e) {} 13823 }()); 13824 13825 /* Node.js helper references. */ 13826 var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, 13827 nodeIsDate = nodeUtil && nodeUtil.isDate, 13828 nodeIsMap = nodeUtil && nodeUtil.isMap, 13829 nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, 13830 nodeIsSet = nodeUtil && nodeUtil.isSet, 13831 nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; 13832 13833 /*--------------------------------------------------------------------------*/ 13834 13835 /** 13836 * A faster alternative to `Function#apply`, this function invokes `func` 13837 * with the `this` binding of `thisArg` and the arguments of `args`. 13838 * 13839 * @private 13840 * @param {Function} func The function to invoke. 13841 * @param {*} thisArg The `this` binding of `func`. 13842 * @param {Array} args The arguments to invoke `func` with. 13843 * @returns {*} Returns the result of `func`. 13844 */ 13845 function apply(func, thisArg, args) { 13846 switch (args.length) { 13847 case 0: return func.call(thisArg); 13848 case 1: return func.call(thisArg, args[0]); 13849 case 2: return func.call(thisArg, args[0], args[1]); 13850 case 3: return func.call(thisArg, args[0], args[1], args[2]); 13851 } 13852 return func.apply(thisArg, args); 13853 } 13854 13855 /** 13856 * A specialized version of `baseAggregator` for arrays. 13857 * 13858 * @private 13859 * @param {Array} [array] The array to iterate over. 13860 * @param {Function} setter The function to set `accumulator` values. 13861 * @param {Function} iteratee The iteratee to transform keys. 13862 * @param {Object} accumulator The initial aggregated object. 13863 * @returns {Function} Returns `accumulator`. 13864 */ 13865 function arrayAggregator(array, setter, iteratee, accumulator) { 13866 var index = -1, 13867 length = array == null ? 0 : array.length; 13868 13869 while (++index < length) { 13870 var value = array[index]; 13871 setter(accumulator, value, iteratee(value), array); 13872 } 13873 return accumulator; 13874 } 13875 13876 /** 13877 * A specialized version of `_.forEach` for arrays without support for 13878 * iteratee shorthands. 13879 * 13880 * @private 13881 * @param {Array} [array] The array to iterate over. 13882 * @param {Function} iteratee The function invoked per iteration. 13883 * @returns {Array} Returns `array`. 13884 */ 13885 function arrayEach(array, iteratee) { 13886 var index = -1, 13887 length = array == null ? 0 : array.length; 13888 13889 while (++index < length) { 13890 if (iteratee(array[index], index, array) === false) { 13891 break; 13892 } 13893 } 13894 return array; 13895 } 13896 13897 /** 13898 * A specialized version of `_.forEachRight` for arrays without support for 13899 * iteratee shorthands. 13900 * 13901 * @private 13902 * @param {Array} [array] The array to iterate over. 13903 * @param {Function} iteratee The function invoked per iteration. 13904 * @returns {Array} Returns `array`. 13905 */ 13906 function arrayEachRight(array, iteratee) { 13907 var length = array == null ? 0 : array.length; 13908 13909 while (length--) { 13910 if (iteratee(array[length], length, array) === false) { 13911 break; 13912 } 13913 } 13914 return array; 13915 } 13916 13917 /** 13918 * A specialized version of `_.every` for arrays without support for 13919 * iteratee shorthands. 13920 * 13921 * @private 13922 * @param {Array} [array] The array to iterate over. 13923 * @param {Function} predicate The function invoked per iteration. 13924 * @returns {boolean} Returns `true` if all elements pass the predicate check, 13925 * else `false`. 13926 */ 13927 function arrayEvery(array, predicate) { 13928 var index = -1, 13929 length = array == null ? 0 : array.length; 13930 13931 while (++index < length) { 13932 if (!predicate(array[index], index, array)) { 13933 return false; 13934 } 13935 } 13936 return true; 13937 } 13938 13939 /** 13940 * A specialized version of `_.filter` for arrays without support for 13941 * iteratee shorthands. 13942 * 13943 * @private 13944 * @param {Array} [array] The array to iterate over. 13945 * @param {Function} predicate The function invoked per iteration. 13946 * @returns {Array} Returns the new filtered array. 13947 */ 13948 function arrayFilter(array, predicate) { 13949 var index = -1, 13950 length = array == null ? 0 : array.length, 13951 resIndex = 0, 13952 result = []; 13953 13954 while (++index < length) { 13955 var value = array[index]; 13956 if (predicate(value, index, array)) { 13957 result[resIndex++] = value; 13958 } 13959 } 13960 return result; 13961 } 13962 13963 /** 13964 * A specialized version of `_.includes` for arrays without support for 13965 * specifying an index to search from. 13966 * 13967 * @private 13968 * @param {Array} [array] The array to inspect. 13969 * @param {*} target The value to search for. 13970 * @returns {boolean} Returns `true` if `target` is found, else `false`. 13971 */ 13972 function arrayIncludes(array, value) { 13973 var length = array == null ? 0 : array.length; 13974 return !!length && baseIndexOf(array, value, 0) > -1; 13975 } 13976 13977 /** 13978 * This function is like `arrayIncludes` except that it accepts a comparator. 13979 * 13980 * @private 13981 * @param {Array} [array] The array to inspect. 13982 * @param {*} target The value to search for. 13983 * @param {Function} comparator The comparator invoked per element. 13984 * @returns {boolean} Returns `true` if `target` is found, else `false`. 13985 */ 13986 function arrayIncludesWith(array, value, comparator) { 13987 var index = -1, 13988 length = array == null ? 0 : array.length; 13989 13990 while (++index < length) { 13991 if (comparator(value, array[index])) { 13992 return true; 13993 } 13994 } 13995 return false; 13996 } 13997 13998 /** 13999 * A specialized version of `_.map` for arrays without support for iteratee 14000 * shorthands. 14001 * 14002 * @private 14003 * @param {Array} [array] The array to iterate over. 14004 * @param {Function} iteratee The function invoked per iteration. 14005 * @returns {Array} Returns the new mapped array. 14006 */ 14007 function arrayMap(array, iteratee) { 14008 var index = -1, 14009 length = array == null ? 0 : array.length, 14010 result = Array(length); 14011 14012 while (++index < length) { 14013 result[index] = iteratee(array[index], index, array); 14014 } 14015 return result; 14016 } 14017 14018 /** 14019 * Appends the elements of `values` to `array`. 14020 * 14021 * @private 14022 * @param {Array} array The array to modify. 14023 * @param {Array} values The values to append. 14024 * @returns {Array} Returns `array`. 14025 */ 14026 function arrayPush(array, values) { 14027 var index = -1, 14028 length = values.length, 14029 offset = array.length; 14030 14031 while (++index < length) { 14032 array[offset + index] = values[index]; 14033 } 14034 return array; 14035 } 14036 14037 /** 14038 * A specialized version of `_.reduce` for arrays without support for 14039 * iteratee shorthands. 14040 * 14041 * @private 14042 * @param {Array} [array] The array to iterate over. 14043 * @param {Function} iteratee The function invoked per iteration. 14044 * @param {*} [accumulator] The initial value. 14045 * @param {boolean} [initAccum] Specify using the first element of `array` as 14046 * the initial value. 14047 * @returns {*} Returns the accumulated value. 14048 */ 14049 function arrayReduce(array, iteratee, accumulator, initAccum) { 14050 var index = -1, 14051 length = array == null ? 0 : array.length; 14052 14053 if (initAccum && length) { 14054 accumulator = array[++index]; 14055 } 14056 while (++index < length) { 14057 accumulator = iteratee(accumulator, array[index], index, array); 14058 } 14059 return accumulator; 14060 } 14061 14062 /** 14063 * A specialized version of `_.reduceRight` for arrays without support for 14064 * iteratee shorthands. 14065 * 14066 * @private 14067 * @param {Array} [array] The array to iterate over. 14068 * @param {Function} iteratee The function invoked per iteration. 14069 * @param {*} [accumulator] The initial value. 14070 * @param {boolean} [initAccum] Specify using the last element of `array` as 14071 * the initial value. 14072 * @returns {*} Returns the accumulated value. 14073 */ 14074 function arrayReduceRight(array, iteratee, accumulator, initAccum) { 14075 var length = array == null ? 0 : array.length; 14076 if (initAccum && length) { 14077 accumulator = array[--length]; 14078 } 14079 while (length--) { 14080 accumulator = iteratee(accumulator, array[length], length, array); 14081 } 14082 return accumulator; 14083 } 14084 14085 /** 14086 * A specialized version of `_.some` for arrays without support for iteratee 14087 * shorthands. 14088 * 14089 * @private 14090 * @param {Array} [array] The array to iterate over. 14091 * @param {Function} predicate The function invoked per iteration. 14092 * @returns {boolean} Returns `true` if any element passes the predicate check, 14093 * else `false`. 14094 */ 14095 function arraySome(array, predicate) { 14096 var index = -1, 14097 length = array == null ? 0 : array.length; 14098 14099 while (++index < length) { 14100 if (predicate(array[index], index, array)) { 14101 return true; 14102 } 14103 } 14104 return false;
vendor: 12,899 bytes, lines 14105-14542
14105 } 14106 14107 /** 14108 * Gets the size of an ASCII `string`. 14109 * 14110 * @private 14111 * @param {string} string The string inspect. 14112 * @returns {number} Returns the string size. 14113 */ 14114 var asciiSize = baseProperty('length'); 14115 14116 /** 14117 * Converts an ASCII `string` to an array. 14118 * 14119 * @private 14120 * @param {string} string The string to convert. 14121 * @returns {Array} Returns the converted array. 14122 */ 14123 function asciiToArray(string) { 14124 return string.split(''); 14125 } 14126 14127 /** 14128 * Splits an ASCII `string` into an array of its words. 14129 * 14130 * @private 14131 * @param {string} The string to inspect. 14132 * @returns {Array} Returns the words of `string`. 14133 */ 14134 function asciiWords(string) { 14135 return string.match(reAsciiWord) || []; 14136 } 14137 14138 /** 14139 * The base implementation of methods like `_.findKey` and `_.findLastKey`, 14140 * without support for iteratee shorthands, which iterates over `collection` 14141 * using `eachFunc`. 14142 * 14143 * @private 14144 * @param {Array|Object} collection The collection to inspect. 14145 * @param {Function} predicate The function invoked per iteration. 14146 * @param {Function} eachFunc The function to iterate over `collection`. 14147 * @returns {*} Returns the found element or its key, else `undefined`. 14148 */ 14149 function baseFindKey(collection, predicate, eachFunc) { 14150 var result; 14151 eachFunc(collection, function(value, key, collection) { 14152 if (predicate(value, key, collection)) { 14153 result = key; 14154 return false; 14155 } 14156 }); 14157 return result; 14158 } 14159 14160 /** 14161 * The base implementation of `_.findIndex` and `_.findLastIndex` without 14162 * support for iteratee shorthands. 14163 * 14164 * @private 14165 * @param {Array} array The array to inspect. 14166 * @param {Function} predicate The function invoked per iteration. 14167 * @param {number} fromIndex The index to search from. 14168 * @param {boolean} [fromRight] Specify iterating from right to left. 14169 * @returns {number} Returns the index of the matched value, else `-1`. 14170 */ 14171 function baseFindIndex(array, predicate, fromIndex, fromRight) { 14172 var length = array.length, 14173 index = fromIndex + (fromRight ? 1 : -1); 14174 14175 while ((fromRight ? index-- : ++index < length)) { 14176 if (predicate(array[index], index, array)) { 14177 return index; 14178 } 14179 } 14180 return -1; 14181 } 14182 14183 /** 14184 * The base implementation of `_.indexOf` without `fromIndex` bounds checks. 14185 * 14186 * @private 14187 * @param {Array} array The array to inspect. 14188 * @param {*} value The value to search for. 14189 * @param {number} fromIndex The index to search from. 14190 * @returns {number} Returns the index of the matched value, else `-1`. 14191 */ 14192 function baseIndexOf(array, value, fromIndex) { 14193 return value === value 14194 ? strictIndexOf(array, value, fromIndex) 14195 : baseFindIndex(array, baseIsNaN, fromIndex); 14196 } 14197 14198 /** 14199 * This function is like `baseIndexOf` except that it accepts a comparator. 14200 * 14201 * @private 14202 * @param {Array} array The array to inspect. 14203 * @param {*} value The value to search for. 14204 * @param {number} fromIndex The index to search from. 14205 * @param {Function} comparator The comparator invoked per element. 14206 * @returns {number} Returns the index of the matched value, else `-1`. 14207 */ 14208 function baseIndexOfWith(array, value, fromIndex, comparator) { 14209 var index = fromIndex - 1, 14210 length = array.length; 14211 14212 while (++index < length) { 14213 if (comparator(array[index], value)) { 14214 return index; 14215 } 14216 } 14217 return -1; 14218 } 14219 14220 /** 14221 * The base implementation of `_.isNaN` without support for number objects. 14222 * 14223 * @private 14224 * @param {*} value The value to check. 14225 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. 14226 */ 14227 function baseIsNaN(value) { 14228 return value !== value; 14229 } 14230 14231 /** 14232 * The base implementation of `_.mean` and `_.meanBy` without support for 14233 * iteratee shorthands. 14234 * 14235 * @private 14236 * @param {Array} array The array to iterate over. 14237 * @param {Function} iteratee The function invoked per iteration. 14238 * @returns {number} Returns the mean. 14239 */ 14240 function baseMean(array, iteratee) { 14241 var length = array == null ? 0 : array.length; 14242 return length ? (baseSum(array, iteratee) / length) : NAN; 14243 } 14244 14245 /** 14246 * The base implementation of `_.property` without support for deep paths. 14247 * 14248 * @private 14249 * @param {string} key The key of the property to get. 14250 * @returns {Function} Returns the new accessor function. 14251 */ 14252 function baseProperty(key) { 14253 return function(object) { 14254 return object == null ? undefined : object[key]; 14255 }; 14256 } 14257 14258 /** 14259 * The base implementation of `_.propertyOf` without support for deep paths. 14260 * 14261 * @private 14262 * @param {Object} object The object to query. 14263 * @returns {Function} Returns the new accessor function. 14264 */ 14265 function basePropertyOf(object) { 14266 return function(key) { 14267 return object == null ? undefined : object[key]; 14268 }; 14269 } 14270 14271 /** 14272 * The base implementation of `_.reduce` and `_.reduceRight`, without support 14273 * for iteratee shorthands, which iterates over `collection` using `eachFunc`. 14274 * 14275 * @private 14276 * @param {Array|Object} collection The collection to iterate over. 14277 * @param {Function} iteratee The function invoked per iteration. 14278 * @param {*} accumulator The initial value. 14279 * @param {boolean} initAccum Specify using the first or last element of 14280 * `collection` as the initial value. 14281 * @param {Function} eachFunc The function to iterate over `collection`. 14282 * @returns {*} Returns the accumulated value. 14283 */ 14284 function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { 14285 eachFunc(collection, function(value, index, collection) { 14286 accumulator = initAccum 14287 ? (initAccum = false, value) 14288 : iteratee(accumulator, value, index, collection); 14289 }); 14290 return accumulator; 14291 } 14292 14293 /** 14294 * The base implementation of `_.sortBy` which uses `comparer` to define the 14295 * sort order of `array` and replaces criteria objects with their corresponding 14296 * values. 14297 * 14298 * @private 14299 * @param {Array} array The array to sort. 14300 * @param {Function} comparer The function to define sort order. 14301 * @returns {Array} Returns `array`. 14302 */ 14303 function baseSortBy(array, comparer) { 14304 var length = array.length; 14305 14306 array.sort(comparer); 14307 while (length--) { 14308 array[length] = array[length].value; 14309 } 14310 return array; 14311 } 14312 14313 /** 14314 * The base implementation of `_.sum` and `_.sumBy` without support for 14315 * iteratee shorthands. 14316 * 14317 * @private 14318 * @param {Array} array The array to iterate over. 14319 * @param {Function} iteratee The function invoked per iteration. 14320 * @returns {number} Returns the sum. 14321 */ 14322 function baseSum(array, iteratee) { 14323 var result, 14324 index = -1, 14325 length = array.length; 14326 14327 while (++index < length) { 14328 var current = iteratee(array[index]); 14329 if (current !== undefined) { 14330 result = result === undefined ? current : (result + current); 14331 } 14332 } 14333 return result; 14334 } 14335 14336 /** 14337 * The base implementation of `_.times` without support for iteratee shorthands 14338 * or max array length checks. 14339 * 14340 * @private 14341 * @param {number} n The number of times to invoke `iteratee`. 14342 * @param {Function} iteratee The function invoked per iteration. 14343 * @returns {Array} Returns the array of results. 14344 */ 14345 function baseTimes(n, iteratee) { 14346 var index = -1, 14347 result = Array(n); 14348 14349 while (++index < n) { 14350 result[index] = iteratee(index); 14351 } 14352 return result; 14353 } 14354 14355 /** 14356 * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array 14357 * of key-value pairs for `object` corresponding to the property names of `props`. 14358 * 14359 * @private 14360 * @param {Object} object The object to query. 14361 * @param {Array} props The property names to get values for. 14362 * @returns {Object} Returns the key-value pairs. 14363 */ 14364 function baseToPairs(object, props) { 14365 return arrayMap(props, function(key) { 14366 return [key, object[key]]; 14367 }); 14368 } 14369 14370 /** 14371 * The base implementation of `_.trim`. 14372 * 14373 * @private 14374 * @param {string} string The string to trim. 14375 * @returns {string} Returns the trimmed string. 14376 */ 14377 function baseTrim(string) { 14378 return string 14379 ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') 14380 : string; 14381 } 14382 14383 /** 14384 * The base implementation of `_.unary` without support for storing metadata. 14385 * 14386 * @private 14387 * @param {Function} func The function to cap arguments for. 14388 * @returns {Function} Returns the new capped function. 14389 */ 14390 function baseUnary(func) { 14391 return function(value) { 14392 return func(value); 14393 }; 14394 } 14395 14396 /** 14397 * The base implementation of `_.values` and `_.valuesIn` which creates an 14398 * array of `object` property values corresponding to the property names 14399 * of `props`. 14400 * 14401 * @private 14402 * @param {Object} object The object to query. 14403 * @param {Array} props The property names to get values for. 14404 * @returns {Object} Returns the array of property values. 14405 */ 14406 function baseValues(object, props) { 14407 return arrayMap(props, function(key) { 14408 return object[key]; 14409 }); 14410 } 14411 14412 /** 14413 * Checks if a `cache` value for `key` exists. 14414 * 14415 * @private 14416 * @param {Object} cache The cache to query. 14417 * @param {string} key The key of the entry to check. 14418 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 14419 */ 14420 function cacheHas(cache, key) { 14421 return cache.has(key); 14422 } 14423 14424 /** 14425 * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol 14426 * that is not found in the character symbols. 14427 * 14428 * @private 14429 * @param {Array} strSymbols The string symbols to inspect. 14430 * @param {Array} chrSymbols The character symbols to find. 14431 * @returns {number} Returns the index of the first unmatched string symbol. 14432 */ 14433 function charsStartIndex(strSymbols, chrSymbols) { 14434 var index = -1, 14435 length = strSymbols.length; 14436 14437 while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} 14438 return index; 14439 } 14440 14441 /** 14442 * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol 14443 * that is not found in the character symbols. 14444 * 14445 * @private 14446 * @param {Array} strSymbols The string symbols to inspect. 14447 * @param {Array} chrSymbols The character symbols to find. 14448 * @returns {number} Returns the index of the last unmatched string symbol. 14449 */ 14450 function charsEndIndex(strSymbols, chrSymbols) { 14451 var index = strSymbols.length; 14452 14453 while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} 14454 return index; 14455 } 14456 14457 /** 14458 * Gets the number of `placeholder` occurrences in `array`. 14459 * 14460 * @private 14461 * @param {Array} array The array to inspect. 14462 * @param {*} placeholder The placeholder to search for. 14463 * @returns {number} Returns the placeholder count. 14464 */ 14465 function countHolders(array, placeholder) { 14466 var length = array.length, 14467 result = 0; 14468 14469 while (length--) { 14470 if (array[length] === placeholder) { 14471 ++result; 14472 } 14473 } 14474 return result; 14475 } 14476 14477 /** 14478 * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A 14479 * letters to basic Latin letters. 14480 * 14481 * @private 14482 * @param {string} letter The matched letter to deburr. 14483 * @returns {string} Returns the deburred letter. 14484 */ 14485 var deburrLetter = basePropertyOf(deburredLetters); 14486 14487 /** 14488 * Used by `_.escape` to convert characters to HTML entities. 14489 * 14490 * @private 14491 * @param {string} chr The matched character to escape. 14492 * @returns {string} Returns the escaped character. 14493 */ 14494 var escapeHtmlChar = basePropertyOf(htmlEscapes); 14495 14496 /** 14497 * Used by `_.template` to escape characters for inclusion in compiled string literals. 14498 * 14499 * @private 14500 * @param {string} chr The matched character to escape. 14501 * @returns {string} Returns the escaped character. 14502 */ 14503 function escapeStringChar(chr) { 14504 return '\\' + stringEscapes[chr]; 14505 } 14506 14507 /** 14508 * Gets the value at `key` of `object`. 14509 * 14510 * @private 14511 * @param {Object} [object] The object to query. 14512 * @param {string} key The key of the property to get. 14513 * @returns {*} Returns the property value. 14514 */ 14515 function getValue(object, key) { 14516 return object == null ? undefined : object[key]; 14517 } 14518 14519 /** 14520 * Checks if `string` contains Unicode symbols. 14521 * 14522 * @private 14523 * @param {string} string The string to inspect. 14524 * @returns {boolean} Returns `true` if a symbol is found, else `false`. 14525 */ 14526 function hasUnicode(string) { 14527 return reHasUnicode.test(string); 14528 } 14529 14530 /** 14531 * Checks if `string` contains a word composed of Unicode symbols. 14532 * 14533 * @private 14534 * @param {string} string The string to inspect. 14535 * @returns {boolean} Returns `true` if a word is found, else `false`. 14536 */ 14537 function hasUnicodeWord(string) { 14538 return reHasUnicodeWord.test(string); 14539 } 14540 14541 /** 14542 * Converts `iterator` to an array.
vendor: 8,214 bytes, lines 14543-14852
14543 * 14544 * @private 14545 * @param {Object} iterator The iterator to convert. 14546 * @returns {Array} Returns the converted array. 14547 */ 14548 function iteratorToArray(iterator) { 14549 var data, 14550 result = []; 14551 14552 while (!(data = iterator.next()).done) { 14553 result.push(data.value); 14554 } 14555 return result; 14556 } 14557 14558 /** 14559 * Converts `map` to its key-value pairs. 14560 * 14561 * @private 14562 * @param {Object} map The map to convert. 14563 * @returns {Array} Returns the key-value pairs. 14564 */ 14565 function mapToArray(map) { 14566 var index = -1, 14567 result = Array(map.size); 14568 14569 map.forEach(function(value, key) { 14570 result[++index] = [key, value]; 14571 }); 14572 return result; 14573 } 14574 14575 /** 14576 * Creates a unary function that invokes `func` with its argument transformed. 14577 * 14578 * @private 14579 * @param {Function} func The function to wrap. 14580 * @param {Function} transform The argument transform. 14581 * @returns {Function} Returns the new function. 14582 */ 14583 function overArg(func, transform) { 14584 return function(arg) { 14585 return func(transform(arg)); 14586 }; 14587 } 14588 14589 /** 14590 * Replaces all `placeholder` elements in `array` with an internal placeholder 14591 * and returns an array of their indexes. 14592 * 14593 * @private 14594 * @param {Array} array The array to modify. 14595 * @param {*} placeholder The placeholder to replace. 14596 * @returns {Array} Returns the new array of placeholder indexes. 14597 */ 14598 function replaceHolders(array, placeholder) { 14599 var index = -1, 14600 length = array.length, 14601 resIndex = 0, 14602 result = []; 14603 14604 while (++index < length) { 14605 var value = array[index]; 14606 if (value === placeholder || value === PLACEHOLDER) { 14607 array[index] = PLACEHOLDER; 14608 result[resIndex++] = index; 14609 } 14610 } 14611 return result; 14612 } 14613 14614 /** 14615 * Converts `set` to an array of its values. 14616 * 14617 * @private 14618 * @param {Object} set The set to convert. 14619 * @returns {Array} Returns the values. 14620 */ 14621 function setToArray(set) { 14622 var index = -1, 14623 result = Array(set.size); 14624 14625 set.forEach(function(value) { 14626 result[++index] = value; 14627 }); 14628 return result; 14629 } 14630 14631 /** 14632 * Converts `set` to its value-value pairs. 14633 * 14634 * @private 14635 * @param {Object} set The set to convert. 14636 * @returns {Array} Returns the value-value pairs. 14637 */ 14638 function setToPairs(set) { 14639 var index = -1, 14640 result = Array(set.size); 14641 14642 set.forEach(function(value) { 14643 result[++index] = [value, value]; 14644 }); 14645 return result; 14646 } 14647 14648 /** 14649 * A specialized version of `_.indexOf` which performs strict equality 14650 * comparisons of values, i.e. `===`. 14651 * 14652 * @private 14653 * @param {Array} array The array to inspect. 14654 * @param {*} value The value to search for. 14655 * @param {number} fromIndex The index to search from. 14656 * @returns {number} Returns the index of the matched value, else `-1`. 14657 */ 14658 function strictIndexOf(array, value, fromIndex) { 14659 var index = fromIndex - 1, 14660 length = array.length; 14661 14662 while (++index < length) { 14663 if (array[index] === value) { 14664 return index; 14665 } 14666 } 14667 return -1; 14668 } 14669 14670 /** 14671 * A specialized version of `_.lastIndexOf` which performs strict equality 14672 * comparisons of values, i.e. `===`. 14673 * 14674 * @private 14675 * @param {Array} array The array to inspect. 14676 * @param {*} value The value to search for. 14677 * @param {number} fromIndex The index to search from. 14678 * @returns {number} Returns the index of the matched value, else `-1`. 14679 */ 14680 function strictLastIndexOf(array, value, fromIndex) { 14681 var index = fromIndex + 1; 14682 while (index--) { 14683 if (array[index] === value) { 14684 return index; 14685 } 14686 } 14687 return index; 14688 } 14689 14690 /** 14691 * Gets the number of symbols in `string`. 14692 * 14693 * @private 14694 * @param {string} string The string to inspect. 14695 * @returns {number} Returns the string size. 14696 */ 14697 function stringSize(string) { 14698 return hasUnicode(string) 14699 ? unicodeSize(string) 14700 : asciiSize(string); 14701 } 14702 14703 /** 14704 * Converts `string` to an array. 14705 * 14706 * @private 14707 * @param {string} string The string to convert. 14708 * @returns {Array} Returns the converted array. 14709 */ 14710 function stringToArray(string) { 14711 return hasUnicode(string) 14712 ? unicodeToArray(string) 14713 : asciiToArray(string); 14714 } 14715 14716 /** 14717 * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace 14718 * character of `string`. 14719 * 14720 * @private 14721 * @param {string} string The string to inspect. 14722 * @returns {number} Returns the index of the last non-whitespace character. 14723 */ 14724 function trimmedEndIndex(string) { 14725 var index = string.length; 14726 14727 while (index-- && reWhitespace.test(string.charAt(index))) {} 14728 return index; 14729 } 14730 14731 /** 14732 * Used by `_.unescape` to convert HTML entities to characters. 14733 * 14734 * @private 14735 * @param {string} chr The matched character to unescape. 14736 * @returns {string} Returns the unescaped character. 14737 */ 14738 var unescapeHtmlChar = basePropertyOf(htmlUnescapes); 14739 14740 /** 14741 * Gets the size of a Unicode `string`. 14742 * 14743 * @private 14744 * @param {string} string The string inspect. 14745 * @returns {number} Returns the string size. 14746 */ 14747 function unicodeSize(string) { 14748 var result = reUnicode.lastIndex = 0; 14749 while (reUnicode.test(string)) { 14750 ++result; 14751 } 14752 return result; 14753 } 14754 14755 /** 14756 * Converts a Unicode `string` to an array. 14757 * 14758 * @private 14759 * @param {string} string The string to convert. 14760 * @returns {Array} Returns the converted array. 14761 */ 14762 function unicodeToArray(string) { 14763 return string.match(reUnicode) || []; 14764 } 14765 14766 /** 14767 * Splits a Unicode `string` into an array of its words. 14768 * 14769 * @private 14770 * @param {string} The string to inspect. 14771 * @returns {Array} Returns the words of `string`. 14772 */ 14773 function unicodeWords(string) { 14774 return string.match(reUnicodeWord) || []; 14775 } 14776 14777 /*--------------------------------------------------------------------------*/ 14778 14779 /** 14780 * Create a new pristine `lodash` function using the `context` object. 14781 * 14782 * @static 14783 * @memberOf _ 14784 * @since 1.1.0 14785 * @category Util 14786 * @param {Object} [context=root] The context object. 14787 * @returns {Function} Returns a new `lodash` function. 14788 * @example 14789 * 14790 * _.mixin({ 'foo': _.constant('foo') }); 14791 * 14792 * var lodash = _.runInContext(); 14793 * lodash.mixin({ 'bar': lodash.constant('bar') }); 14794 * 14795 * _.isFunction(_.foo); 14796 * // => true 14797 * _.isFunction(_.bar); 14798 * // => false 14799 * 14800 * lodash.isFunction(lodash.foo); 14801 * // => false 14802 * lodash.isFunction(lodash.bar); 14803 * // => true 14804 * 14805 * // Create a suped-up `defer` in Node.js. 14806 * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; 14807 */ 14808 var runInContext = (function runInContext(context) { 14809 context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps)); 14810 14811 /** Built-in constructor references. */ 14812 var Array = context.Array, 14813 Date = context.Date, 14814 Error = context.Error, 14815 Function = context.Function, 14816 Math = context.Math, 14817 Object = context.Object, 14818 RegExp = context.RegExp, 14819 String = context.String, 14820 TypeError = context.TypeError; 14821 14822 /** Used for built-in method references. */ 14823 var arrayProto = Array.prototype, 14824 funcProto = Function.prototype, 14825 objectProto = Object.prototype; 14826 14827 /** Used to detect overreaching core-js shims. */ 14828 var coreJsData = context['__core-js_shared__']; 14829 14830 /** Used to resolve the decompiled source of functions. */ 14831 var funcToString = funcProto.toString; 14832 14833 /** Used to check objects for own properties. */ 14834 var hasOwnProperty = objectProto.hasOwnProperty; 14835 14836 /** Used to generate unique IDs. */ 14837 var idCounter = 0; 14838 14839 /** Used to detect methods masquerading as native. */ 14840 var maskSrcKey = (function() { 14841 var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); 14842 return uid ? ('Symbol(src)_1.' + uid) : ''; 14843 }()); 14844 14845 /** 14846 * Used to resolve the 14847 * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) 14848 * of values. 14849 */ 14850 var nativeObjectToString = objectProto.toString; 14851 14852 /** Used to infer the `Object` constructor. */
vendor: 25,659 bytes, lines 14853-15650
14853 var objectCtorString = funcToString.call(Object); 14854 14855 /** Used to restore the original `_` reference in `_.noConflict`. */ 14856 var oldDash = root._; 14857 14858 /** Used to detect if a method is native. */ 14859 var reIsNative = RegExp('^' + 14860 funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') 14861 .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' 14862 ); 14863 14864 /** Built-in value references. */ 14865 var Buffer = moduleExports ? context.Buffer : undefined, 14866 Symbol = context.Symbol, 14867 Uint8Array = context.Uint8Array, 14868 allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, 14869 getPrototype = overArg(Object.getPrototypeOf, Object), 14870 objectCreate = Object.create, 14871 propertyIsEnumerable = objectProto.propertyIsEnumerable, 14872 splice = arrayProto.splice, 14873 spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, 14874 symIterator = Symbol ? Symbol.iterator : undefined, 14875 symToStringTag = Symbol ? Symbol.toStringTag : undefined; 14876 14877 var defineProperty = (function() { 14878 try { 14879 var func = getNative(Object, 'defineProperty'); 14880 func({}, '', {}); 14881 return func; 14882 } catch (e) {} 14883 }()); 14884 14885 /** Mocked built-ins. */ 14886 var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout, 14887 ctxNow = Date && Date.now !== root.Date.now && Date.now, 14888 ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout; 14889 14890 /* Built-in method references for those with the same name as other `lodash` methods. */ 14891 var nativeCeil = Math.ceil, 14892 nativeFloor = Math.floor, 14893 nativeGetSymbols = Object.getOwnPropertySymbols, 14894 nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, 14895 nativeIsFinite = context.isFinite, 14896 nativeJoin = arrayProto.join, 14897 nativeKeys = overArg(Object.keys, Object), 14898 nativeMax = Math.max, 14899 nativeMin = Math.min, 14900 nativeNow = Date.now, 14901 nativeParseInt = context.parseInt, 14902 nativeRandom = Math.random, 14903 nativeReverse = arrayProto.reverse; 14904 14905 /* Built-in method references that are verified to be native. */ 14906 var DataView = getNative(context, 'DataView'), 14907 Map = getNative(context, 'Map'), 14908 Promise = getNative(context, 'Promise'), 14909 Set = getNative(context, 'Set'), 14910 WeakMap = getNative(context, 'WeakMap'), 14911 nativeCreate = getNative(Object, 'create'); 14912 14913 /** Used to store function metadata. */ 14914 var metaMap = WeakMap && new WeakMap; 14915 14916 /** Used to lookup unminified function names. */ 14917 var realNames = {}; 14918 14919 /** Used to detect maps, sets, and weakmaps. */ 14920 var dataViewCtorString = toSource(DataView), 14921 mapCtorString = toSource(Map), 14922 promiseCtorString = toSource(Promise), 14923 setCtorString = toSource(Set), 14924 weakMapCtorString = toSource(WeakMap); 14925 14926 /** Used to convert symbols to primitives and strings. */ 14927 var symbolProto = Symbol ? Symbol.prototype : undefined, 14928 symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, 14929 symbolToString = symbolProto ? symbolProto.toString : undefined; 14930 14931 /*------------------------------------------------------------------------*/ 14932 14933 /** 14934 * Creates a `lodash` object which wraps `value` to enable implicit method 14935 * chain sequences. Methods that operate on and return arrays, collections, 14936 * and functions can be chained together. Methods that retrieve a single value 14937 * or may return a primitive value will automatically end the chain sequence 14938 * and return the unwrapped value. Otherwise, the value must be unwrapped 14939 * with `_#value`. 14940 * 14941 * Explicit chain sequences, which must be unwrapped with `_#value`, may be 14942 * enabled using `_.chain`. 14943 * 14944 * The execution of chained methods is lazy, that is, it's deferred until 14945 * `_#value` is implicitly or explicitly called. 14946 * 14947 * Lazy evaluation allows several methods to support shortcut fusion. 14948 * Shortcut fusion is an optimization to merge iteratee calls; this avoids 14949 * the creation of intermediate arrays and can greatly reduce the number of 14950 * iteratee executions. Sections of a chain sequence qualify for shortcut 14951 * fusion if the section is applied to an array and iteratees accept only 14952 * one argument. The heuristic for whether a section qualifies for shortcut 14953 * fusion is subject to change. 14954 * 14955 * Chaining is supported in custom builds as long as the `_#value` method is 14956 * directly or indirectly included in the build. 14957 * 14958 * In addition to lodash methods, wrappers have `Array` and `String` methods. 14959 * 14960 * The wrapper `Array` methods are: 14961 * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` 14962 * 14963 * The wrapper `String` methods are: 14964 * `replace` and `split` 14965 * 14966 * The wrapper methods that support shortcut fusion are: 14967 * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, 14968 * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, 14969 * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` 14970 * 14971 * The chainable wrapper methods are: 14972 * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, 14973 * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, 14974 * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, 14975 * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, 14976 * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, 14977 * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, 14978 * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, 14979 * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, 14980 * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, 14981 * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, 14982 * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, 14983 * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, 14984 * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, 14985 * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, 14986 * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, 14987 * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, 14988 * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, 14989 * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, 14990 * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, 14991 * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, 14992 * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, 14993 * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, 14994 * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, 14995 * `zipObject`, `zipObjectDeep`, and `zipWith` 14996 * 14997 * The wrapper methods that are **not** chainable by default are: 14998 * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, 14999 * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, 15000 * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, 15001 * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, 15002 * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, 15003 * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, 15004 * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, 15005 * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, 15006 * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, 15007 * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, 15008 * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, 15009 * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, 15010 * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, 15011 * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, 15012 * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, 15013 * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, 15014 * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, 15015 * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, 15016 * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, 15017 * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, 15018 * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, 15019 * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, 15020 * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, 15021 * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, 15022 * `upperFirst`, `value`, and `words` 15023 * 15024 * @name _ 15025 * @constructor 15026 * @category Seq 15027 * @param {*} value The value to wrap in a `lodash` instance. 15028 * @returns {Object} Returns the new `lodash` wrapper instance. 15029 * @example 15030 * 15031 * function square(n) { 15032 * return n * n; 15033 * } 15034 * 15035 * var wrapped = _([1, 2, 3]); 15036 * 15037 * // Returns an unwrapped value. 15038 * wrapped.reduce(_.add); 15039 * // => 6 15040 * 15041 * // Returns a wrapped value. 15042 * var squares = wrapped.map(square); 15043 * 15044 * _.isArray(squares); 15045 * // => false 15046 * 15047 * _.isArray(squares.value()); 15048 * // => true 15049 */ 15050 function lodash(value) { 15051 if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { 15052 if (value instanceof LodashWrapper) { 15053 return value; 15054 } 15055 if (hasOwnProperty.call(value, '__wrapped__')) { 15056 return wrapperClone(value); 15057 } 15058 } 15059 return new LodashWrapper(value); 15060 } 15061 15062 /** 15063 * The base implementation of `_.create` without support for assigning 15064 * properties to the created object. 15065 * 15066 * @private 15067 * @param {Object} proto The object to inherit from. 15068 * @returns {Object} Returns the new object. 15069 */ 15070 var baseCreate = (function() { 15071 function object() {} 15072 return function(proto) { 15073 if (!isObject(proto)) { 15074 return {}; 15075 } 15076 if (objectCreate) { 15077 return objectCreate(proto); 15078 } 15079 object.prototype = proto; 15080 var result = new object; 15081 object.prototype = undefined; 15082 return result; 15083 }; 15084 }()); 15085 15086 /** 15087 * The function whose prototype chain sequence wrappers inherit from. 15088 * 15089 * @private 15090 */ 15091 function baseLodash() { 15092 // No operation performed. 15093 } 15094 15095 /** 15096 * The base constructor for creating `lodash` wrapper objects. 15097 * 15098 * @private 15099 * @param {*} value The value to wrap. 15100 * @param {boolean} [chainAll] Enable explicit method chain sequences. 15101 */ 15102 function LodashWrapper(value, chainAll) { 15103 this.__wrapped__ = value; 15104 this.__actions__ = []; 15105 this.__chain__ = !!chainAll; 15106 this.__index__ = 0; 15107 this.__values__ = undefined; 15108 } 15109 15110 /** 15111 * By default, the template delimiters used by lodash are like those in 15112 * embedded Ruby (ERB) as well as ES2015 template strings. Change the 15113 * following template settings to use alternative delimiters. 15114 * 15115 * @static 15116 * @memberOf _ 15117 * @type {Object} 15118 */ 15119 lodash.templateSettings = { 15120 15121 /** 15122 * Used to detect `data` property values to be HTML-escaped. 15123 * 15124 * @memberOf _.templateSettings 15125 * @type {RegExp} 15126 */ 15127 'escape': reEscape, 15128 15129 /** 15130 * Used to detect code to be evaluated. 15131 * 15132 * @memberOf _.templateSettings 15133 * @type {RegExp} 15134 */ 15135 'evaluate': reEvaluate, 15136 15137 /** 15138 * Used to detect `data` property values to inject. 15139 * 15140 * @memberOf _.templateSettings 15141 * @type {RegExp} 15142 */ 15143 'interpolate': reInterpolate, 15144 15145 /** 15146 * Used to reference the data object in the template text. 15147 * 15148 * @memberOf _.templateSettings 15149 * @type {string} 15150 */ 15151 'variable': '', 15152 15153 /** 15154 * Used to import variables into the compiled template. 15155 * 15156 * @memberOf _.templateSettings 15157 * @type {Object} 15158 */ 15159 'imports': { 15160 15161 /** 15162 * A reference to the `lodash` function. 15163 * 15164 * @memberOf _.templateSettings.imports 15165 * @type {Function} 15166 */ 15167 '_': lodash 15168 } 15169 }; 15170 15171 // Ensure wrappers are instances of `baseLodash`. 15172 lodash.prototype = baseLodash.prototype; 15173 lodash.prototype.constructor = lodash; 15174 15175 LodashWrapper.prototype = baseCreate(baseLodash.prototype); 15176 LodashWrapper.prototype.constructor = LodashWrapper; 15177 15178 /*------------------------------------------------------------------------*/ 15179 15180 /** 15181 * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. 15182 * 15183 * @private 15184 * @constructor 15185 * @param {*} value The value to wrap. 15186 */ 15187 function LazyWrapper(value) { 15188 this.__wrapped__ = value; 15189 this.__actions__ = []; 15190 this.__dir__ = 1; 15191 this.__filtered__ = false; 15192 this.__iteratees__ = []; 15193 this.__takeCount__ = MAX_ARRAY_LENGTH; 15194 this.__views__ = []; 15195 } 15196 15197 /** 15198 * Creates a clone of the lazy wrapper object. 15199 * 15200 * @private 15201 * @name clone 15202 * @memberOf LazyWrapper 15203 * @returns {Object} Returns the cloned `LazyWrapper` object. 15204 */ 15205 function lazyClone() { 15206 var result = new LazyWrapper(this.__wrapped__); 15207 result.__actions__ = copyArray(this.__actions__); 15208 result.__dir__ = this.__dir__; 15209 result.__filtered__ = this.__filtered__; 15210 result.__iteratees__ = copyArray(this.__iteratees__); 15211 result.__takeCount__ = this.__takeCount__; 15212 result.__views__ = copyArray(this.__views__); 15213 return result; 15214 } 15215 15216 /** 15217 * Reverses the direction of lazy iteration. 15218 * 15219 * @private 15220 * @name reverse 15221 * @memberOf LazyWrapper 15222 * @returns {Object} Returns the new reversed `LazyWrapper` object. 15223 */ 15224 function lazyReverse() { 15225 if (this.__filtered__) { 15226 var result = new LazyWrapper(this); 15227 result.__dir__ = -1; 15228 result.__filtered__ = true; 15229 } else { 15230 result = this.clone(); 15231 result.__dir__ *= -1; 15232 } 15233 return result; 15234 } 15235 15236 /** 15237 * Extracts the unwrapped value from its lazy wrapper. 15238 * 15239 * @private 15240 * @name value 15241 * @memberOf LazyWrapper 15242 * @returns {*} Returns the unwrapped value. 15243 */ 15244 function lazyValue() { 15245 var array = this.__wrapped__.value(), 15246 dir = this.__dir__, 15247 isArr = isArray(array), 15248 isRight = dir < 0, 15249 arrLength = isArr ? array.length : 0, 15250 view = getView(0, arrLength, this.__views__), 15251 start = view.start, 15252 end = view.end, 15253 length = end - start, 15254 index = isRight ? end : (start - 1), 15255 iteratees = this.__iteratees__, 15256 iterLength = iteratees.length, 15257 resIndex = 0, 15258 takeCount = nativeMin(length, this.__takeCount__); 15259 15260 if (!isArr || (!isRight && arrLength == length && takeCount == length)) { 15261 return baseWrapperValue(array, this.__actions__); 15262 } 15263 var result = []; 15264 15265 outer: 15266 while (length-- && resIndex < takeCount) { 15267 index += dir; 15268 15269 var iterIndex = -1, 15270 value = array[index]; 15271 15272 while (++iterIndex < iterLength) { 15273 var data = iteratees[iterIndex], 15274 iteratee = data.iteratee, 15275 type = data.type, 15276 computed = iteratee(value); 15277 15278 if (type == LAZY_MAP_FLAG) { 15279 value = computed; 15280 } else if (!computed) { 15281 if (type == LAZY_FILTER_FLAG) { 15282 continue outer; 15283 } else { 15284 break outer; 15285 } 15286 } 15287 } 15288 result[resIndex++] = value; 15289 } 15290 return result; 15291 } 15292 15293 // Ensure `LazyWrapper` is an instance of `baseLodash`. 15294 LazyWrapper.prototype = baseCreate(baseLodash.prototype); 15295 LazyWrapper.prototype.constructor = LazyWrapper; 15296 15297 /*------------------------------------------------------------------------*/ 15298 15299 /** 15300 * Creates a hash object. 15301 * 15302 * @private 15303 * @constructor 15304 * @param {Array} [entries] The key-value pairs to cache. 15305 */ 15306 function Hash(entries) { 15307 var index = -1, 15308 length = entries == null ? 0 : entries.length; 15309 15310 this.clear(); 15311 while (++index < length) { 15312 var entry = entries[index]; 15313 this.set(entry[0], entry[1]); 15314 } 15315 } 15316 15317 /** 15318 * Removes all key-value entries from the hash. 15319 * 15320 * @private 15321 * @name clear 15322 * @memberOf Hash 15323 */ 15324 function hashClear() { 15325 this.__data__ = nativeCreate ? nativeCreate(null) : {}; 15326 this.size = 0; 15327 } 15328 15329 /** 15330 * Removes `key` and its value from the hash. 15331 * 15332 * @private 15333 * @name delete 15334 * @memberOf Hash 15335 * @param {Object} hash The hash to modify. 15336 * @param {string} key The key of the value to remove. 15337 * @returns {boolean} Returns `true` if the entry was removed, else `false`. 15338 */ 15339 function hashDelete(key) { 15340 var result = this.has(key) && delete this.__data__[key]; 15341 this.size -= result ? 1 : 0; 15342 return result; 15343 } 15344 15345 /** 15346 * Gets the hash value for `key`. 15347 * 15348 * @private 15349 * @name get 15350 * @memberOf Hash 15351 * @param {string} key The key of the value to get. 15352 * @returns {*} Returns the entry value. 15353 */ 15354 function hashGet(key) { 15355 var data = this.__data__; 15356 if (nativeCreate) { 15357 var result = data[key]; 15358 return result === HASH_UNDEFINED ? undefined : result; 15359 } 15360 return hasOwnProperty.call(data, key) ? data[key] : undefined; 15361 } 15362 15363 /** 15364 * Checks if a hash value for `key` exists. 15365 * 15366 * @private 15367 * @name has 15368 * @memberOf Hash 15369 * @param {string} key The key of the entry to check. 15370 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 15371 */ 15372 function hashHas(key) { 15373 var data = this.__data__; 15374 return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); 15375 } 15376 15377 /** 15378 * Sets the hash `key` to `value`. 15379 * 15380 * @private 15381 * @name set 15382 * @memberOf Hash 15383 * @param {string} key The key of the value to set. 15384 * @param {*} value The value to set. 15385 * @returns {Object} Returns the hash instance. 15386 */ 15387 function hashSet(key, value) { 15388 var data = this.__data__; 15389 this.size += this.has(key) ? 0 : 1; 15390 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; 15391 return this; 15392 } 15393 15394 // Add methods to `Hash`. 15395 Hash.prototype.clear = hashClear; 15396 Hash.prototype['delete'] = hashDelete; 15397 Hash.prototype.get = hashGet; 15398 Hash.prototype.has = hashHas; 15399 Hash.prototype.set = hashSet; 15400 15401 /*------------------------------------------------------------------------*/ 15402 15403 /** 15404 * Creates an list cache object. 15405 * 15406 * @private 15407 * @constructor 15408 * @param {Array} [entries] The key-value pairs to cache. 15409 */ 15410 function ListCache(entries) { 15411 var index = -1, 15412 length = entries == null ? 0 : entries.length; 15413 15414 this.clear(); 15415 while (++index < length) { 15416 var entry = entries[index]; 15417 this.set(entry[0], entry[1]); 15418 } 15419 } 15420 15421 /** 15422 * Removes all key-value entries from the list cache. 15423 * 15424 * @private 15425 * @name clear 15426 * @memberOf ListCache 15427 */ 15428 function listCacheClear() { 15429 this.__data__ = []; 15430 this.size = 0; 15431 } 15432 15433 /** 15434 * Removes `key` and its value from the list cache. 15435 * 15436 * @private 15437 * @name delete 15438 * @memberOf ListCache 15439 * @param {string} key The key of the value to remove. 15440 * @returns {boolean} Returns `true` if the entry was removed, else `false`. 15441 */ 15442 function listCacheDelete(key) { 15443 var data = this.__data__, 15444 index = assocIndexOf(data, key); 15445 15446 if (index < 0) { 15447 return false; 15448 } 15449 var lastIndex = data.length - 1; 15450 if (index == lastIndex) { 15451 data.pop(); 15452 } else { 15453 splice.call(data, index, 1); 15454 } 15455 --this.size; 15456 return true; 15457 } 15458 15459 /** 15460 * Gets the list cache value for `key`. 15461 * 15462 * @private 15463 * @name get 15464 * @memberOf ListCache 15465 * @param {string} key The key of the value to get. 15466 * @returns {*} Returns the entry value. 15467 */ 15468 function listCacheGet(key) { 15469 var data = this.__data__, 15470 index = assocIndexOf(data, key); 15471 15472 return index < 0 ? undefined : data[index][1]; 15473 } 15474 15475 /** 15476 * Checks if a list cache value for `key` exists. 15477 * 15478 * @private 15479 * @name has 15480 * @memberOf ListCache 15481 * @param {string} key The key of the entry to check. 15482 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 15483 */ 15484 function listCacheHas(key) { 15485 return assocIndexOf(this.__data__, key) > -1; 15486 } 15487 15488 /** 15489 * Sets the list cache `key` to `value`. 15490 * 15491 * @private 15492 * @name set 15493 * @memberOf ListCache 15494 * @param {string} key The key of the value to set. 15495 * @param {*} value The value to set. 15496 * @returns {Object} Returns the list cache instance. 15497 */ 15498 function listCacheSet(key, value) { 15499 var data = this.__data__, 15500 index = assocIndexOf(data, key); 15501 15502 if (index < 0) { 15503 ++this.size; 15504 data.push([key, value]); 15505 } else { 15506 data[index][1] = value; 15507 } 15508 return this; 15509 } 15510 15511 // Add methods to `ListCache`. 15512 ListCache.prototype.clear = listCacheClear; 15513 ListCache.prototype['delete'] = listCacheDelete; 15514 ListCache.prototype.get = listCacheGet; 15515 ListCache.prototype.has = listCacheHas; 15516 ListCache.prototype.set = listCacheSet; 15517 15518 /*------------------------------------------------------------------------*/ 15519 15520 /** 15521 * Creates a map cache object to store key-value pairs. 15522 * 15523 * @private 15524 * @constructor 15525 * @param {Array} [entries] The key-value pairs to cache. 15526 */ 15527 function MapCache(entries) { 15528 var index = -1, 15529 length = entries == null ? 0 : entries.length; 15530 15531 this.clear(); 15532 while (++index < length) { 15533 var entry = entries[index]; 15534 this.set(entry[0], entry[1]); 15535 } 15536 } 15537 15538 /** 15539 * Removes all key-value entries from the map. 15540 * 15541 * @private 15542 * @name clear 15543 * @memberOf MapCache 15544 */ 15545 function mapCacheClear() { 15546 this.size = 0; 15547 this.__data__ = { 15548 'hash': new Hash, 15549 'map': new (Map || ListCache), 15550 'string': new Hash 15551 }; 15552 } 15553 15554 /** 15555 * Removes `key` and its value from the map. 15556 * 15557 * @private 15558 * @name delete 15559 * @memberOf MapCache 15560 * @param {string} key The key of the value to remove. 15561 * @returns {boolean} Returns `true` if the entry was removed, else `false`. 15562 */ 15563 function mapCacheDelete(key) { 15564 var result = getMapData(this, key)['delete'](key); 15565 this.size -= result ? 1 : 0; 15566 return result; 15567 } 15568 15569 /** 15570 * Gets the map value for `key`. 15571 * 15572 * @private 15573 * @name get 15574 * @memberOf MapCache 15575 * @param {string} key The key of the value to get. 15576 * @returns {*} Returns the entry value. 15577 */ 15578 function mapCacheGet(key) { 15579 return getMapData(this, key).get(key); 15580 } 15581 15582 /** 15583 * Checks if a map value for `key` exists. 15584 * 15585 * @private 15586 * @name has 15587 * @memberOf MapCache 15588 * @param {string} key The key of the entry to check. 15589 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 15590 */ 15591 function mapCacheHas(key) { 15592 return getMapData(this, key).has(key); 15593 } 15594 15595 /** 15596 * Sets the map `key` to `value`. 15597 * 15598 * @private 15599 * @name set 15600 * @memberOf MapCache 15601 * @param {string} key The key of the value to set. 15602 * @param {*} value The value to set. 15603 * @returns {Object} Returns the map cache instance. 15604 */ 15605 function mapCacheSet(key, value) { 15606 var data = getMapData(this, key), 15607 size = data.size; 15608 15609 data.set(key, value); 15610 this.size += data.size == size ? 0 : 1; 15611 return this; 15612 } 15613 15614 // Add methods to `MapCache`. 15615 MapCache.prototype.clear = mapCacheClear; 15616 MapCache.prototype['delete'] = mapCacheDelete; 15617 MapCache.prototype.get = mapCacheGet; 15618 MapCache.prototype.has = mapCacheHas; 15619 MapCache.prototype.set = mapCacheSet; 15620 15621 /*------------------------------------------------------------------------*/ 15622 15623 /** 15624 * 15625 * Creates an array cache object to store unique values. 15626 * 15627 * @private 15628 * @constructor 15629 * @param {Array} [values] The values to cache. 15630 */ 15631 function SetCache(values) { 15632 var index = -1, 15633 length = values == null ? 0 : values.length; 15634 15635 this.__data__ = new MapCache; 15636 while (++index < length) { 15637 this.add(values[index]); 15638 } 15639 } 15640 15641 /** 15642 * Adds `value` to the array cache. 15643 * 15644 * @private 15645 * @name add 15646 * @memberOf SetCache 15647 * @alias push 15648 * @param {*} value The value to cache. 15649 * @returns {Object} Returns the cache instance. 15650 */
vendor: 3,741 bytes, lines 15651-15787
15651 function setCacheAdd(value) { 15652 this.__data__.set(value, HASH_UNDEFINED); 15653 return this; 15654 } 15655 15656 /** 15657 * Checks if `value` is in the array cache. 15658 * 15659 * @private 15660 * @name has 15661 * @memberOf SetCache 15662 * @param {*} value The value to search for. 15663 * @returns {number} Returns `true` if `value` is found, else `false`. 15664 */ 15665 function setCacheHas(value) { 15666 return this.__data__.has(value); 15667 } 15668 15669 // Add methods to `SetCache`. 15670 SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; 15671 SetCache.prototype.has = setCacheHas; 15672 15673 /*------------------------------------------------------------------------*/ 15674 15675 /** 15676 * Creates a stack cache object to store key-value pairs. 15677 * 15678 * @private 15679 * @constructor 15680 * @param {Array} [entries] The key-value pairs to cache. 15681 */ 15682 function Stack(entries) { 15683 var data = this.__data__ = new ListCache(entries); 15684 this.size = data.size; 15685 } 15686 15687 /** 15688 * Removes all key-value entries from the stack. 15689 * 15690 * @private 15691 * @name clear 15692 * @memberOf Stack 15693 */ 15694 function stackClear() { 15695 this.__data__ = new ListCache; 15696 this.size = 0; 15697 } 15698 15699 /** 15700 * Removes `key` and its value from the stack. 15701 * 15702 * @private 15703 * @name delete 15704 * @memberOf Stack 15705 * @param {string} key The key of the value to remove. 15706 * @returns {boolean} Returns `true` if the entry was removed, else `false`. 15707 */ 15708 function stackDelete(key) { 15709 var data = this.__data__, 15710 result = data['delete'](key); 15711 15712 this.size = data.size; 15713 return result; 15714 } 15715 15716 /** 15717 * Gets the stack value for `key`. 15718 * 15719 * @private 15720 * @name get 15721 * @memberOf Stack 15722 * @param {string} key The key of the value to get. 15723 * @returns {*} Returns the entry value. 15724 */ 15725 function stackGet(key) { 15726 return this.__data__.get(key); 15727 } 15728 15729 /** 15730 * Checks if a stack value for `key` exists. 15731 * 15732 * @private 15733 * @name has 15734 * @memberOf Stack 15735 * @param {string} key The key of the entry to check. 15736 * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. 15737 */ 15738 function stackHas(key) { 15739 return this.__data__.has(key); 15740 } 15741 15742 /** 15743 * Sets the stack `key` to `value`. 15744 * 15745 * @private 15746 * @name set 15747 * @memberOf Stack 15748 * @param {string} key The key of the value to set. 15749 * @param {*} value The value to set. 15750 * @returns {Object} Returns the stack cache instance. 15751 */ 15752 function stackSet(key, value) { 15753 var data = this.__data__; 15754 if (data instanceof ListCache) { 15755 var pairs = data.__data__; 15756 if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { 15757 pairs.push([key, value]); 15758 this.size = ++data.size; 15759 return this; 15760 } 15761 data = this.__data__ = new MapCache(pairs); 15762 } 15763 data.set(key, value); 15764 this.size = data.size; 15765 return this; 15766 } 15767 15768 // Add methods to `Stack`. 15769 Stack.prototype.clear = stackClear; 15770 Stack.prototype['delete'] = stackDelete; 15771 Stack.prototype.get = stackGet; 15772 Stack.prototype.has = stackHas; 15773 Stack.prototype.set = stackSet; 15774 15775 /*------------------------------------------------------------------------*/ 15776 15777 /** 15778 * Creates an array of the enumerable property names of the array-like `value`. 15779 * 15780 * @private 15781 * @param {*} value The value to query. 15782 * @param {boolean} inherited Specify returning inherited property names. 15783 * @returns {Array} Returns the array of property names. 15784 */ 15785 function arrayLikeKeys(value, inherited) { 15786 var isArr = isArray(value), 15787 isArg = !isArr && isArguments(value),
vendor: 111,524 bytes, lines 15788-19081
15788 isBuff = !isArr && !isArg && isBuffer(value), 15789 isType = !isArr && !isArg && !isBuff && isTypedArray(value), 15790 skipIndexes = isArr || isArg || isBuff || isType, 15791 result = skipIndexes ? baseTimes(value.length, String) : [], 15792 length = result.length; 15793 15794 for (var key in value) { 15795 if ((inherited || hasOwnProperty.call(value, key)) && 15796 !(skipIndexes && ( 15797 // Safari 9 has enumerable `arguments.length` in strict mode. 15798 key == 'length' || 15799 // Node.js 0.10 has enumerable non-index properties on buffers. 15800 (isBuff && (key == 'offset' || key == 'parent')) || 15801 // PhantomJS 2 has enumerable non-index properties on typed arrays. 15802 (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || 15803 // Skip index properties. 15804 isIndex(key, length) 15805 ))) { 15806 result.push(key); 15807 } 15808 } 15809 return result; 15810 } 15811 15812 /** 15813 * A specialized version of `_.sample` for arrays. 15814 * 15815 * @private 15816 * @param {Array} array The array to sample. 15817 * @returns {*} Returns the random element. 15818 */ 15819 function arraySample(array) { 15820 var length = array.length; 15821 return length ? array[baseRandom(0, length - 1)] : undefined; 15822 } 15823 15824 /** 15825 * A specialized version of `_.sampleSize` for arrays. 15826 * 15827 * @private 15828 * @param {Array} array The array to sample. 15829 * @param {number} n The number of elements to sample. 15830 * @returns {Array} Returns the random elements. 15831 */ 15832 function arraySampleSize(array, n) { 15833 return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); 15834 } 15835 15836 /** 15837 * A specialized version of `_.shuffle` for arrays. 15838 * 15839 * @private 15840 * @param {Array} array The array to shuffle. 15841 * @returns {Array} Returns the new shuffled array. 15842 */ 15843 function arrayShuffle(array) { 15844 return shuffleSelf(copyArray(array)); 15845 } 15846 15847 /** 15848 * This function is like `assignValue` except that it doesn't assign 15849 * `undefined` values. 15850 * 15851 * @private 15852 * @param {Object} object The object to modify. 15853 * @param {string} key The key of the property to assign. 15854 * @param {*} value The value to assign. 15855 */ 15856 function assignMergeValue(object, key, value) { 15857 if ((value !== undefined && !eq(object[key], value)) || 15858 (value === undefined && !(key in object))) { 15859 baseAssignValue(object, key, value); 15860 } 15861 } 15862 15863 /** 15864 * Assigns `value` to `key` of `object` if the existing value is not equivalent 15865 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 15866 * for equality comparisons. 15867 * 15868 * @private 15869 * @param {Object} object The object to modify. 15870 * @param {string} key The key of the property to assign. 15871 * @param {*} value The value to assign. 15872 */ 15873 function assignValue(object, key, value) { 15874 var objValue = object[key]; 15875 if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || 15876 (value === undefined && !(key in object))) { 15877 baseAssignValue(object, key, value); 15878 } 15879 } 15880 15881 /** 15882 * Gets the index at which the `key` is found in `array` of key-value pairs. 15883 * 15884 * @private 15885 * @param {Array} array The array to inspect. 15886 * @param {*} key The key to search for. 15887 * @returns {number} Returns the index of the matched value, else `-1`. 15888 */ 15889 function assocIndexOf(array, key) { 15890 var length = array.length; 15891 while (length--) { 15892 if (eq(array[length][0], key)) { 15893 return length; 15894 } 15895 } 15896 return -1; 15897 } 15898 15899 /** 15900 * Aggregates elements of `collection` on `accumulator` with keys transformed 15901 * by `iteratee` and values set by `setter`. 15902 * 15903 * @private 15904 * @param {Array|Object} collection The collection to iterate over. 15905 * @param {Function} setter The function to set `accumulator` values. 15906 * @param {Function} iteratee The iteratee to transform keys. 15907 * @param {Object} accumulator The initial aggregated object. 15908 * @returns {Function} Returns `accumulator`. 15909 */ 15910 function baseAggregator(collection, setter, iteratee, accumulator) { 15911 baseEach(collection, function(value, key, collection) { 15912 setter(accumulator, value, iteratee(value), collection); 15913 }); 15914 return accumulator; 15915 } 15916 15917 /** 15918 * The base implementation of `_.assign` without support for multiple sources 15919 * or `customizer` functions. 15920 * 15921 * @private 15922 * @param {Object} object The destination object. 15923 * @param {Object} source The source object. 15924 * @returns {Object} Returns `object`. 15925 */ 15926 function baseAssign(object, source) { 15927 return object && copyObject(source, keys(source), object); 15928 } 15929 15930 /** 15931 * The base implementation of `_.assignIn` without support for multiple sources 15932 * or `customizer` functions. 15933 * 15934 * @private 15935 * @param {Object} object The destination object. 15936 * @param {Object} source The source object. 15937 * @returns {Object} Returns `object`. 15938 */ 15939 function baseAssignIn(object, source) { 15940 return object && copyObject(source, keysIn(source), object); 15941 } 15942 15943 /** 15944 * The base implementation of `assignValue` and `assignMergeValue` without 15945 * value checks. 15946 * 15947 * @private 15948 * @param {Object} object The object to modify. 15949 * @param {string} key The key of the property to assign. 15950 * @param {*} value The value to assign. 15951 */ 15952 function baseAssignValue(object, key, value) { 15953 if (key == '__proto__' && defineProperty) { 15954 defineProperty(object, key, { 15955 'configurable': true, 15956 'enumerable': true, 15957 'value': value, 15958 'writable': true 15959 }); 15960 } else { 15961 object[key] = value; 15962 } 15963 } 15964 15965 /** 15966 * The base implementation of `_.at` without support for individual paths. 15967 * 15968 * @private 15969 * @param {Object} object The object to iterate over. 15970 * @param {string[]} paths The property paths to pick. 15971 * @returns {Array} Returns the picked elements. 15972 */ 15973 function baseAt(object, paths) { 15974 var index = -1, 15975 length = paths.length, 15976 result = Array(length), 15977 skip = object == null; 15978 15979 while (++index < length) { 15980 result[index] = skip ? undefined : get(object, paths[index]); 15981 } 15982 return result; 15983 } 15984 15985 /** 15986 * The base implementation of `_.clamp` which doesn't coerce arguments. 15987 * 15988 * @private 15989 * @param {number} number The number to clamp. 15990 * @param {number} [lower] The lower bound. 15991 * @param {number} upper The upper bound. 15992 * @returns {number} Returns the clamped number. 15993 */ 15994 function baseClamp(number, lower, upper) { 15995 if (number === number) { 15996 if (upper !== undefined) { 15997 number = number <= upper ? number : upper; 15998 } 15999 if (lower !== undefined) { 16000 number = number >= lower ? number : lower; 16001 } 16002 } 16003 return number; 16004 } 16005 16006 /** 16007 * The base implementation of `_.clone` and `_.cloneDeep` which tracks 16008 * traversed objects. 16009 * 16010 * @private 16011 * @param {*} value The value to clone. 16012 * @param {boolean} bitmask The bitmask flags. 16013 * 1 - Deep clone 16014 * 2 - Flatten inherited properties 16015 * 4 - Clone symbols 16016 * @param {Function} [customizer] The function to customize cloning. 16017 * @param {string} [key] The key of `value`. 16018 * @param {Object} [object] The parent object of `value`. 16019 * @param {Object} [stack] Tracks traversed objects and their clone counterparts. 16020 * @returns {*} Returns the cloned value. 16021 */ 16022 function baseClone(value, bitmask, customizer, key, object, stack) { 16023 var result, 16024 isDeep = bitmask & CLONE_DEEP_FLAG, 16025 isFlat = bitmask & CLONE_FLAT_FLAG, 16026 isFull = bitmask & CLONE_SYMBOLS_FLAG; 16027 16028 if (customizer) { 16029 result = object ? customizer(value, key, object, stack) : customizer(value); 16030 } 16031 if (result !== undefined) { 16032 return result; 16033 } 16034 if (!isObject(value)) { 16035 return value; 16036 } 16037 var isArr = isArray(value); 16038 if (isArr) { 16039 result = initCloneArray(value); 16040 if (!isDeep) { 16041 return copyArray(value, result); 16042 } 16043 } else { 16044 var tag = getTag(value), 16045 isFunc = tag == funcTag || tag == genTag; 16046 16047 if (isBuffer(value)) { 16048 return cloneBuffer(value, isDeep); 16049 } 16050 if (tag == objectTag || tag == argsTag || (isFunc && !object)) { 16051 result = (isFlat || isFunc) ? {} : initCloneObject(value); 16052 if (!isDeep) { 16053 return isFlat 16054 ? copySymbolsIn(value, baseAssignIn(result, value)) 16055 : copySymbols(value, baseAssign(result, value)); 16056 } 16057 } else { 16058 if (!cloneableTags[tag]) { 16059 return object ? value : {}; 16060 } 16061 result = initCloneByTag(value, tag, isDeep); 16062 } 16063 } 16064 // Check for circular references and return its corresponding clone. 16065 stack || (stack = new Stack); 16066 var stacked = stack.get(value); 16067 if (stacked) { 16068 return stacked; 16069 } 16070 stack.set(value, result); 16071 16072 if (isSet(value)) { 16073 value.forEach(function(subValue) { 16074 result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); 16075 }); 16076 } else if (isMap(value)) { 16077 value.forEach(function(subValue, key) { 16078 result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); 16079 }); 16080 } 16081 16082 var keysFunc = isFull 16083 ? (isFlat ? getAllKeysIn : getAllKeys) 16084 : (isFlat ? keysIn : keys); 16085 16086 var props = isArr ? undefined : keysFunc(value); 16087 arrayEach(props || value, function(subValue, key) { 16088 if (props) { 16089 key = subValue; 16090 subValue = value[key]; 16091 } 16092 // Recursively populate clone (susceptible to call stack limits). 16093 assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); 16094 }); 16095 return result; 16096 } 16097 16098 /** 16099 * The base implementation of `_.conforms` which doesn't clone `source`. 16100 * 16101 * @private 16102 * @param {Object} source The object of property predicates to conform to. 16103 * @returns {Function} Returns the new spec function. 16104 */ 16105 function baseConforms(source) { 16106 var props = keys(source); 16107 return function(object) { 16108 return baseConformsTo(object, source, props); 16109 }; 16110 } 16111 16112 /** 16113 * The base implementation of `_.conformsTo` which accepts `props` to check. 16114 * 16115 * @private 16116 * @param {Object} object The object to inspect. 16117 * @param {Object} source The object of property predicates to conform to. 16118 * @returns {boolean} Returns `true` if `object` conforms, else `false`. 16119 */ 16120 function baseConformsTo(object, source, props) { 16121 var length = props.length; 16122 if (object == null) { 16123 return !length; 16124 } 16125 object = Object(object); 16126 while (length--) { 16127 var key = props[length], 16128 predicate = source[key], 16129 value = object[key]; 16130 16131 if ((value === undefined && !(key in object)) || !predicate(value)) { 16132 return false; 16133 } 16134 } 16135 return true; 16136 } 16137 16138 /** 16139 * The base implementation of `_.delay` and `_.defer` which accepts `args` 16140 * to provide to `func`. 16141 * 16142 * @private 16143 * @param {Function} func The function to delay. 16144 * @param {number} wait The number of milliseconds to delay invocation. 16145 * @param {Array} args The arguments to provide to `func`. 16146 * @returns {number|Object} Returns the timer id or timeout object. 16147 */ 16148 function baseDelay(func, wait, args) { 16149 if (typeof func != 'function') { 16150 throw new TypeError(FUNC_ERROR_TEXT); 16151 } 16152 return setTimeout(function() { func.apply(undefined, args); }, wait); 16153 } 16154 16155 /** 16156 * The base implementation of methods like `_.difference` without support 16157 * for excluding multiple arrays or iteratee shorthands. 16158 * 16159 * @private 16160 * @param {Array} array The array to inspect. 16161 * @param {Array} values The values to exclude. 16162 * @param {Function} [iteratee] The iteratee invoked per element. 16163 * @param {Function} [comparator] The comparator invoked per element. 16164 * @returns {Array} Returns the new array of filtered values. 16165 */ 16166 function baseDifference(array, values, iteratee, comparator) { 16167 var index = -1, 16168 includes = arrayIncludes, 16169 isCommon = true, 16170 length = array.length, 16171 result = [], 16172 valuesLength = values.length; 16173 16174 if (!length) { 16175 return result; 16176 } 16177 if (iteratee) { 16178 values = arrayMap(values, baseUnary(iteratee)); 16179 } 16180 if (comparator) { 16181 includes = arrayIncludesWith; 16182 isCommon = false; 16183 } 16184 else if (values.length >= LARGE_ARRAY_SIZE) { 16185 includes = cacheHas; 16186 isCommon = false; 16187 values = new SetCache(values); 16188 } 16189 outer: 16190 while (++index < length) { 16191 var value = array[index], 16192 computed = iteratee == null ? value : iteratee(value); 16193 16194 value = (comparator || value !== 0) ? value : 0; 16195 if (isCommon && computed === computed) { 16196 var valuesIndex = valuesLength; 16197 while (valuesIndex--) { 16198 if (values[valuesIndex] === computed) { 16199 continue outer; 16200 } 16201 } 16202 result.push(value); 16203 } 16204 else if (!includes(values, computed, comparator)) { 16205 result.push(value); 16206 } 16207 } 16208 return result; 16209 } 16210 16211 /** 16212 * The base implementation of `_.forEach` without support for iteratee shorthands. 16213 * 16214 * @private 16215 * @param {Array|Object} collection The collection to iterate over. 16216 * @param {Function} iteratee The function invoked per iteration. 16217 * @returns {Array|Object} Returns `collection`. 16218 */ 16219 var baseEach = createBaseEach(baseForOwn); 16220 16221 /** 16222 * The base implementation of `_.forEachRight` without support for iteratee shorthands. 16223 * 16224 * @private 16225 * @param {Array|Object} collection The collection to iterate over. 16226 * @param {Function} iteratee The function invoked per iteration. 16227 * @returns {Array|Object} Returns `collection`. 16228 */ 16229 var baseEachRight = createBaseEach(baseForOwnRight, true); 16230 16231 /** 16232 * The base implementation of `_.every` without support for iteratee shorthands. 16233 * 16234 * @private 16235 * @param {Array|Object} collection The collection to iterate over. 16236 * @param {Function} predicate The function invoked per iteration. 16237 * @returns {boolean} Returns `true` if all elements pass the predicate check, 16238 * else `false` 16239 */ 16240 function baseEvery(collection, predicate) { 16241 var result = true; 16242 baseEach(collection, function(value, index, collection) { 16243 result = !!predicate(value, index, collection); 16244 return result; 16245 }); 16246 return result; 16247 } 16248 16249 /** 16250 * The base implementation of methods like `_.max` and `_.min` which accepts a 16251 * `comparator` to determine the extremum value. 16252 * 16253 * @private 16254 * @param {Array} array The array to iterate over. 16255 * @param {Function} iteratee The iteratee invoked per iteration. 16256 * @param {Function} comparator The comparator used to compare values. 16257 * @returns {*} Returns the extremum value. 16258 */ 16259 function baseExtremum(array, iteratee, comparator) { 16260 var index = -1, 16261 length = array.length; 16262 16263 while (++index < length) { 16264 var value = array[index], 16265 current = iteratee(value); 16266 16267 if (current != null && (computed === undefined 16268 ? (current === current && !isSymbol(current)) 16269 : comparator(current, computed) 16270 )) { 16271 var computed = current, 16272 result = value; 16273 } 16274 } 16275 return result; 16276 } 16277 16278 /** 16279 * The base implementation of `_.fill` without an iteratee call guard. 16280 * 16281 * @private 16282 * @param {Array} array The array to fill. 16283 * @param {*} value The value to fill `array` with. 16284 * @param {number} [start=0] The start position. 16285 * @param {number} [end=array.length] The end position. 16286 * @returns {Array} Returns `array`. 16287 */ 16288 function baseFill(array, value, start, end) { 16289 var length = array.length; 16290 16291 start = toInteger(start); 16292 if (start < 0) { 16293 start = -start > length ? 0 : (length + start); 16294 } 16295 end = (end === undefined || end > length) ? length : toInteger(end); 16296 if (end < 0) { 16297 end += length; 16298 } 16299 end = start > end ? 0 : toLength(end); 16300 while (start < end) { 16301 array[start++] = value; 16302 } 16303 return array; 16304 } 16305 16306 /** 16307 * The base implementation of `_.filter` without support for iteratee shorthands. 16308 * 16309 * @private 16310 * @param {Array|Object} collection The collection to iterate over. 16311 * @param {Function} predicate The function invoked per iteration. 16312 * @returns {Array} Returns the new filtered array. 16313 */ 16314 function baseFilter(collection, predicate) { 16315 var result = []; 16316 baseEach(collection, function(value, index, collection) { 16317 if (predicate(value, index, collection)) { 16318 result.push(value); 16319 } 16320 }); 16321 return result; 16322 } 16323 16324 /** 16325 * The base implementation of `_.flatten` with support for restricting flattening. 16326 * 16327 * @private 16328 * @param {Array} array The array to flatten. 16329 * @param {number} depth The maximum recursion depth. 16330 * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. 16331 * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. 16332 * @param {Array} [result=[]] The initial result value. 16333 * @returns {Array} Returns the new flattened array. 16334 */ 16335 function baseFlatten(array, depth, predicate, isStrict, result) { 16336 var index = -1, 16337 length = array.length; 16338 16339 predicate || (predicate = isFlattenable); 16340 result || (result = []); 16341 16342 while (++index < length) { 16343 var value = array[index]; 16344 if (depth > 0 && predicate(value)) { 16345 if (depth > 1) { 16346 // Recursively flatten arrays (susceptible to call stack limits). 16347 baseFlatten(value, depth - 1, predicate, isStrict, result); 16348 } else { 16349 arrayPush(result, value); 16350 } 16351 } else if (!isStrict) { 16352 result[result.length] = value; 16353 } 16354 } 16355 return result; 16356 } 16357 16358 /** 16359 * The base implementation of `baseForOwn` which iterates over `object` 16360 * properties returned by `keysFunc` and invokes `iteratee` for each property. 16361 * Iteratee functions may exit iteration early by explicitly returning `false`. 16362 * 16363 * @private 16364 * @param {Object} object The object to iterate over. 16365 * @param {Function} iteratee The function invoked per iteration. 16366 * @param {Function} keysFunc The function to get the keys of `object`. 16367 * @returns {Object} Returns `object`. 16368 */ 16369 var baseFor = createBaseFor(); 16370 16371 /** 16372 * This function is like `baseFor` except that it iterates over properties 16373 * in the opposite order. 16374 * 16375 * @private 16376 * @param {Object} object The object to iterate over. 16377 * @param {Function} iteratee The function invoked per iteration. 16378 * @param {Function} keysFunc The function to get the keys of `object`. 16379 * @returns {Object} Returns `object`. 16380 */ 16381 var baseForRight = createBaseFor(true); 16382 16383 /** 16384 * The base implementation of `_.forOwn` without support for iteratee shorthands. 16385 * 16386 * @private 16387 * @param {Object} object The object to iterate over. 16388 * @param {Function} iteratee The function invoked per iteration. 16389 * @returns {Object} Returns `object`. 16390 */ 16391 function baseForOwn(object, iteratee) { 16392 return object && baseFor(object, iteratee, keys); 16393 } 16394 16395 /** 16396 * The base implementation of `_.forOwnRight` without support for iteratee shorthands. 16397 * 16398 * @private 16399 * @param {Object} object The object to iterate over. 16400 * @param {Function} iteratee The function invoked per iteration. 16401 * @returns {Object} Returns `object`. 16402 */ 16403 function baseForOwnRight(object, iteratee) { 16404 return object && baseForRight(object, iteratee, keys); 16405 } 16406 16407 /** 16408 * The base implementation of `_.functions` which creates an array of 16409 * `object` function property names filtered from `props`. 16410 * 16411 * @private 16412 * @param {Object} object The object to inspect. 16413 * @param {Array} props The property names to filter. 16414 * @returns {Array} Returns the function names. 16415 */ 16416 function baseFunctions(object, props) { 16417 return arrayFilter(props, function(key) { 16418 return isFunction(object[key]); 16419 }); 16420 } 16421 16422 /** 16423 * The base implementation of `_.get` without support for default values. 16424 * 16425 * @private 16426 * @param {Object} object The object to query. 16427 * @param {Array|string} path The path of the property to get. 16428 * @returns {*} Returns the resolved value. 16429 */ 16430 function baseGet(object, path) { 16431 path = castPath(path, object); 16432 16433 var index = 0, 16434 length = path.length; 16435 16436 while (object != null && index < length) { 16437 object = object[toKey(path[index++])]; 16438 } 16439 return (index && index == length) ? object : undefined; 16440 } 16441 16442 /** 16443 * The base implementation of `getAllKeys` and `getAllKeysIn` which uses 16444 * `keysFunc` and `symbolsFunc` to get the enumerable property names and 16445 * symbols of `object`. 16446 * 16447 * @private 16448 * @param {Object} object The object to query. 16449 * @param {Function} keysFunc The function to get the keys of `object`. 16450 * @param {Function} symbolsFunc The function to get the symbols of `object`. 16451 * @returns {Array} Returns the array of property names and symbols. 16452 */ 16453 function baseGetAllKeys(object, keysFunc, symbolsFunc) { 16454 var result = keysFunc(object); 16455 return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); 16456 } 16457 16458 /** 16459 * The base implementation of `getTag` without fallbacks for buggy environments. 16460 * 16461 * @private 16462 * @param {*} value The value to query. 16463 * @returns {string} Returns the `toStringTag`. 16464 */ 16465 function baseGetTag(value) { 16466 if (value == null) { 16467 return value === undefined ? undefinedTag : nullTag; 16468 } 16469 return (symToStringTag && symToStringTag in Object(value)) 16470 ? getRawTag(value) 16471 : objectToString(value); 16472 } 16473 16474 /** 16475 * The base implementation of `_.gt` which doesn't coerce arguments. 16476 * 16477 * @private 16478 * @param {*} value The value to compare. 16479 * @param {*} other The other value to compare. 16480 * @returns {boolean} Returns `true` if `value` is greater than `other`, 16481 * else `false`. 16482 */ 16483 function baseGt(value, other) { 16484 return value > other; 16485 } 16486 16487 /** 16488 * The base implementation of `_.has` without support for deep paths. 16489 * 16490 * @private 16491 * @param {Object} [object] The object to query. 16492 * @param {Array|string} key The key to check. 16493 * @returns {boolean} Returns `true` if `key` exists, else `false`. 16494 */ 16495 function baseHas(object, key) { 16496 return object != null && hasOwnProperty.call(object, key); 16497 } 16498 16499 /** 16500 * The base implementation of `_.hasIn` without support for deep paths. 16501 * 16502 * @private 16503 * @param {Object} [object] The object to query. 16504 * @param {Array|string} key The key to check. 16505 * @returns {boolean} Returns `true` if `key` exists, else `false`. 16506 */ 16507 function baseHasIn(object, key) { 16508 return object != null && key in Object(object); 16509 } 16510 16511 /** 16512 * The base implementation of `_.inRange` which doesn't coerce arguments. 16513 * 16514 * @private 16515 * @param {number} number The number to check. 16516 * @param {number} start The start of the range. 16517 * @param {number} end The end of the range. 16518 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. 16519 */ 16520 function baseInRange(number, start, end) { 16521 return number >= nativeMin(start, end) && number < nativeMax(start, end); 16522 } 16523 16524 /** 16525 * The base implementation of methods like `_.intersection`, without support 16526 * for iteratee shorthands, that accepts an array of arrays to inspect. 16527 * 16528 * @private 16529 * @param {Array} arrays The arrays to inspect. 16530 * @param {Function} [iteratee] The iteratee invoked per element. 16531 * @param {Function} [comparator] The comparator invoked per element. 16532 * @returns {Array} Returns the new array of shared values. 16533 */ 16534 function baseIntersection(arrays, iteratee, comparator) { 16535 var includes = comparator ? arrayIncludesWith : arrayIncludes, 16536 length = arrays[0].length, 16537 othLength = arrays.length, 16538 othIndex = othLength, 16539 caches = Array(othLength), 16540 maxLength = Infinity, 16541 result = []; 16542 16543 while (othIndex--) { 16544 var array = arrays[othIndex]; 16545 if (othIndex && iteratee) { 16546 array = arrayMap(array, baseUnary(iteratee)); 16547 } 16548 maxLength = nativeMin(array.length, maxLength); 16549 caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) 16550 ? new SetCache(othIndex && array) 16551 : undefined; 16552 } 16553 array = arrays[0]; 16554 16555 var index = -1, 16556 seen = caches[0]; 16557 16558 outer: 16559 while (++index < length && result.length < maxLength) { 16560 var value = array[index], 16561 computed = iteratee ? iteratee(value) : value; 16562 16563 value = (comparator || value !== 0) ? value : 0; 16564 if (!(seen 16565 ? cacheHas(seen, computed) 16566 : includes(result, computed, comparator) 16567 )) { 16568 othIndex = othLength; 16569 while (--othIndex) { 16570 var cache = caches[othIndex]; 16571 if (!(cache 16572 ? cacheHas(cache, computed) 16573 : includes(arrays[othIndex], computed, comparator)) 16574 ) { 16575 continue outer; 16576 } 16577 } 16578 if (seen) { 16579 seen.push(computed); 16580 } 16581 result.push(value); 16582 } 16583 } 16584 return result; 16585 } 16586 16587 /** 16588 * The base implementation of `_.invert` and `_.invertBy` which inverts 16589 * `object` with values transformed by `iteratee` and set by `setter`. 16590 * 16591 * @private 16592 * @param {Object} object The object to iterate over. 16593 * @param {Function} setter The function to set `accumulator` values. 16594 * @param {Function} iteratee The iteratee to transform values. 16595 * @param {Object} accumulator The initial inverted object. 16596 * @returns {Function} Returns `accumulator`. 16597 */ 16598 function baseInverter(object, setter, iteratee, accumulator) { 16599 baseForOwn(object, function(value, key, object) { 16600 setter(accumulator, iteratee(value), key, object); 16601 }); 16602 return accumulator; 16603 } 16604 16605 /** 16606 * The base implementation of `_.invoke` without support for individual 16607 * method arguments. 16608 * 16609 * @private 16610 * @param {Object} object The object to query. 16611 * @param {Array|string} path The path of the method to invoke. 16612 * @param {Array} args The arguments to invoke the method with. 16613 * @returns {*} Returns the result of the invoked method. 16614 */ 16615 function baseInvoke(object, path, args) { 16616 path = castPath(path, object); 16617 object = parent(object, path); 16618 var func = object == null ? object : object[toKey(last(path))]; 16619 return func == null ? undefined : apply(func, object, args); 16620 } 16621 16622 /** 16623 * The base implementation of `_.isArguments`. 16624 * 16625 * @private 16626 * @param {*} value The value to check. 16627 * @returns {boolean} Returns `true` if `value` is an `arguments` object, 16628 */ 16629 function baseIsArguments(value) { 16630 return isObjectLike(value) && baseGetTag(value) == argsTag; 16631 } 16632 16633 /** 16634 * The base implementation of `_.isArrayBuffer` without Node.js optimizations. 16635 * 16636 * @private 16637 * @param {*} value The value to check. 16638 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. 16639 */ 16640 function baseIsArrayBuffer(value) { 16641 return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; 16642 } 16643 16644 /** 16645 * The base implementation of `_.isDate` without Node.js optimizations. 16646 * 16647 * @private 16648 * @param {*} value The value to check. 16649 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. 16650 */ 16651 function baseIsDate(value) { 16652 return isObjectLike(value) && baseGetTag(value) == dateTag; 16653 } 16654 16655 /** 16656 * The base implementation of `_.isEqual` which supports partial comparisons 16657 * and tracks traversed objects. 16658 * 16659 * @private 16660 * @param {*} value The value to compare. 16661 * @param {*} other The other value to compare. 16662 * @param {boolean} bitmask The bitmask flags. 16663 * 1 - Unordered comparison 16664 * 2 - Partial comparison 16665 * @param {Function} [customizer] The function to customize comparisons. 16666 * @param {Object} [stack] Tracks traversed `value` and `other` objects. 16667 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. 16668 */ 16669 function baseIsEqual(value, other, bitmask, customizer, stack) { 16670 if (value === other) { 16671 return true; 16672 } 16673 if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { 16674 return value !== value && other !== other; 16675 } 16676 return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); 16677 } 16678 16679 /** 16680 * A specialized version of `baseIsEqual` for arrays and objects which performs 16681 * deep comparisons and tracks traversed objects enabling objects with circular 16682 * references to be compared. 16683 * 16684 * @private 16685 * @param {Object} object The object to compare. 16686 * @param {Object} other The other object to compare. 16687 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. 16688 * @param {Function} customizer The function to customize comparisons. 16689 * @param {Function} equalFunc The function to determine equivalents of values. 16690 * @param {Object} [stack] Tracks traversed `object` and `other` objects. 16691 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. 16692 */ 16693 function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { 16694 var objIsArr = isArray(object), 16695 othIsArr = isArray(other), 16696 objTag = objIsArr ? arrayTag : getTag(object), 16697 othTag = othIsArr ? arrayTag : getTag(other); 16698 16699 objTag = objTag == argsTag ? objectTag : objTag; 16700 othTag = othTag == argsTag ? objectTag : othTag; 16701 16702 var objIsObj = objTag == objectTag, 16703 othIsObj = othTag == objectTag, 16704 isSameTag = objTag == othTag; 16705 16706 if (isSameTag && isBuffer(object)) { 16707 if (!isBuffer(other)) { 16708 return false; 16709 } 16710 objIsArr = true; 16711 objIsObj = false; 16712 } 16713 if (isSameTag && !objIsObj) { 16714 stack || (stack = new Stack); 16715 return (objIsArr || isTypedArray(object)) 16716 ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) 16717 : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); 16718 } 16719 if (!(bitmask & COMPARE_PARTIAL_FLAG)) { 16720 var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), 16721 othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); 16722 16723 if (objIsWrapped || othIsWrapped) { 16724 var objUnwrapped = objIsWrapped ? object.value() : object, 16725 othUnwrapped = othIsWrapped ? other.value() : other; 16726 16727 stack || (stack = new Stack); 16728 return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); 16729 } 16730 } 16731 if (!isSameTag) { 16732 return false; 16733 } 16734 stack || (stack = new Stack); 16735 return equalObjects(object, other, bitmask, customizer, equalFunc, stack); 16736 } 16737 16738 /** 16739 * The base implementation of `_.isMap` without Node.js optimizations. 16740 * 16741 * @private 16742 * @param {*} value The value to check. 16743 * @returns {boolean} Returns `true` if `value` is a map, else `false`. 16744 */ 16745 function baseIsMap(value) { 16746 return isObjectLike(value) && getTag(value) == mapTag; 16747 } 16748 16749 /** 16750 * The base implementation of `_.isMatch` without support for iteratee shorthands. 16751 * 16752 * @private 16753 * @param {Object} object The object to inspect. 16754 * @param {Object} source The object of property values to match. 16755 * @param {Array} matchData The property names, values, and compare flags to match. 16756 * @param {Function} [customizer] The function to customize comparisons. 16757 * @returns {boolean} Returns `true` if `object` is a match, else `false`. 16758 */ 16759 function baseIsMatch(object, source, matchData, customizer) { 16760 var index = matchData.length, 16761 length = index, 16762 noCustomizer = !customizer; 16763 16764 if (object == null) { 16765 return !length; 16766 } 16767 object = Object(object); 16768 while (index--) { 16769 var data = matchData[index]; 16770 if ((noCustomizer && data[2]) 16771 ? data[1] !== object[data[0]] 16772 : !(data[0] in object) 16773 ) { 16774 return false; 16775 } 16776 } 16777 while (++index < length) { 16778 data = matchData[index]; 16779 var key = data[0], 16780 objValue = object[key], 16781 srcValue = data[1]; 16782 16783 if (noCustomizer && data[2]) { 16784 if (objValue === undefined && !(key in object)) { 16785 return false; 16786 } 16787 } else { 16788 var stack = new Stack; 16789 if (customizer) { 16790 var result = customizer(objValue, srcValue, key, object, source, stack); 16791 } 16792 if (!(result === undefined 16793 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) 16794 : result 16795 )) { 16796 return false; 16797 } 16798 } 16799 } 16800 return true; 16801 } 16802 16803 /** 16804 * The base implementation of `_.isNative` without bad shim checks. 16805 * 16806 * @private 16807 * @param {*} value The value to check. 16808 * @returns {boolean} Returns `true` if `value` is a native function, 16809 * else `false`. 16810 */ 16811 function baseIsNative(value) { 16812 if (!isObject(value) || isMasked(value)) { 16813 return false; 16814 } 16815 var pattern = isFunction(value) ? reIsNative : reIsHostCtor; 16816 return pattern.test(toSource(value)); 16817 } 16818 16819 /** 16820 * The base implementation of `_.isRegExp` without Node.js optimizations. 16821 * 16822 * @private 16823 * @param {*} value The value to check. 16824 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. 16825 */ 16826 function baseIsRegExp(value) { 16827 return isObjectLike(value) && baseGetTag(value) == regexpTag; 16828 } 16829 16830 /** 16831 * The base implementation of `_.isSet` without Node.js optimizations. 16832 * 16833 * @private 16834 * @param {*} value The value to check. 16835 * @returns {boolean} Returns `true` if `value` is a set, else `false`. 16836 */ 16837 function baseIsSet(value) { 16838 return isObjectLike(value) && getTag(value) == setTag; 16839 } 16840 16841 /** 16842 * The base implementation of `_.isTypedArray` without Node.js optimizations. 16843 * 16844 * @private 16845 * @param {*} value The value to check. 16846 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. 16847 */ 16848 function baseIsTypedArray(value) { 16849 return isObjectLike(value) && 16850 isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; 16851 } 16852 16853 /** 16854 * The base implementation of `_.iteratee`. 16855 * 16856 * @private 16857 * @param {*} [value=_.identity] The value to convert to an iteratee. 16858 * @returns {Function} Returns the iteratee. 16859 */ 16860 function baseIteratee(value) { 16861 // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. 16862 // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. 16863 if (typeof value == 'function') { 16864 return value; 16865 } 16866 if (value == null) { 16867 return identity; 16868 } 16869 if (typeof value == 'object') { 16870 return isArray(value) 16871 ? baseMatchesProperty(value[0], value[1]) 16872 : baseMatches(value); 16873 } 16874 return property(value); 16875 } 16876 16877 /** 16878 * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. 16879 * 16880 * @private 16881 * @param {Object} object The object to query. 16882 * @returns {Array} Returns the array of property names. 16883 */ 16884 function baseKeys(object) { 16885 if (!isPrototype(object)) { 16886 return nativeKeys(object); 16887 } 16888 var result = []; 16889 for (var key in Object(object)) { 16890 if (hasOwnProperty.call(object, key) && key != 'constructor') { 16891 result.push(key); 16892 } 16893 } 16894 return result; 16895 } 16896 16897 /** 16898 * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. 16899 * 16900 * @private 16901 * @param {Object} object The object to query. 16902 * @returns {Array} Returns the array of property names. 16903 */ 16904 function baseKeysIn(object) { 16905 if (!isObject(object)) { 16906 return nativeKeysIn(object); 16907 } 16908 var isProto = isPrototype(object), 16909 result = []; 16910 16911 for (var key in object) { 16912 if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { 16913 result.push(key); 16914 } 16915 } 16916 return result; 16917 } 16918 16919 /** 16920 * The base implementation of `_.lt` which doesn't coerce arguments. 16921 * 16922 * @private 16923 * @param {*} value The value to compare. 16924 * @param {*} other The other value to compare. 16925 * @returns {boolean} Returns `true` if `value` is less than `other`, 16926 * else `false`. 16927 */ 16928 function baseLt(value, other) { 16929 return value < other; 16930 } 16931 16932 /** 16933 * The base implementation of `_.map` without support for iteratee shorthands. 16934 * 16935 * @private 16936 * @param {Array|Object} collection The collection to iterate over. 16937 * @param {Function} iteratee The function invoked per iteration. 16938 * @returns {Array} Returns the new mapped array. 16939 */ 16940 function baseMap(collection, iteratee) { 16941 var index = -1, 16942 result = isArrayLike(collection) ? Array(collection.length) : []; 16943 16944 baseEach(collection, function(value, key, collection) { 16945 result[++index] = iteratee(value, key, collection); 16946 }); 16947 return result; 16948 } 16949 16950 /** 16951 * The base implementation of `_.matches` which doesn't clone `source`. 16952 * 16953 * @private 16954 * @param {Object} source The object of property values to match. 16955 * @returns {Function} Returns the new spec function. 16956 */ 16957 function baseMatches(source) { 16958 var matchData = getMatchData(source); 16959 if (matchData.length == 1 && matchData[0][2]) { 16960 return matchesStrictComparable(matchData[0][0], matchData[0][1]); 16961 } 16962 return function(object) { 16963 return object === source || baseIsMatch(object, source, matchData); 16964 }; 16965 } 16966 16967 /** 16968 * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. 16969 * 16970 * @private 16971 * @param {string} path The path of the property to get. 16972 * @param {*} srcValue The value to match. 16973 * @returns {Function} Returns the new spec function. 16974 */ 16975 function baseMatchesProperty(path, srcValue) { 16976 if (isKey(path) && isStrictComparable(srcValue)) { 16977 return matchesStrictComparable(toKey(path), srcValue); 16978 } 16979 return function(object) { 16980 var objValue = get(object, path); 16981 return (objValue === undefined && objValue === srcValue) 16982 ? hasIn(object, path) 16983 : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); 16984 }; 16985 } 16986 16987 /** 16988 * The base implementation of `_.merge` without support for multiple sources. 16989 * 16990 * @private 16991 * @param {Object} object The destination object. 16992 * @param {Object} source The source object. 16993 * @param {number} srcIndex The index of `source`. 16994 * @param {Function} [customizer] The function to customize merged values. 16995 * @param {Object} [stack] Tracks traversed source values and their merged 16996 * counterparts. 16997 */ 16998 function baseMerge(object, source, srcIndex, customizer, stack) { 16999 if (object === source) { 17000 return; 17001 } 17002 baseFor(source, function(srcValue, key) { 17003 stack || (stack = new Stack); 17004 if (isObject(srcValue)) { 17005 baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); 17006 } 17007 else { 17008 var newValue = customizer 17009 ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) 17010 : undefined; 17011 17012 if (newValue === undefined) { 17013 newValue = srcValue; 17014 } 17015 assignMergeValue(object, key, newValue); 17016 } 17017 }, keysIn); 17018 } 17019 17020 /** 17021 * A specialized version of `baseMerge` for arrays and objects which performs 17022 * deep merges and tracks traversed objects enabling objects with circular 17023 * references to be merged. 17024 * 17025 * @private 17026 * @param {Object} object The destination object. 17027 * @param {Object} source The source object. 17028 * @param {string} key The key of the value to merge. 17029 * @param {number} srcIndex The index of `source`. 17030 * @param {Function} mergeFunc The function to merge values. 17031 * @param {Function} [customizer] The function to customize assigned values. 17032 * @param {Object} [stack] Tracks traversed source values and their merged 17033 * counterparts. 17034 */ 17035 function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { 17036 var objValue = safeGet(object, key), 17037 srcValue = safeGet(source, key), 17038 stacked = stack.get(srcValue); 17039 17040 if (stacked) { 17041 assignMergeValue(object, key, stacked); 17042 return; 17043 } 17044 var newValue = customizer 17045 ? customizer(objValue, srcValue, (key + ''), object, source, stack) 17046 : undefined; 17047 17048 var isCommon = newValue === undefined; 17049 17050 if (isCommon) { 17051 var isArr = isArray(srcValue), 17052 isBuff = !isArr && isBuffer(srcValue), 17053 isTyped = !isArr && !isBuff && isTypedArray(srcValue); 17054 17055 newValue = srcValue; 17056 if (isArr || isBuff || isTyped) { 17057 if (isArray(objValue)) { 17058 newValue = objValue; 17059 } 17060 else if (isArrayLikeObject(objValue)) { 17061 newValue = copyArray(objValue); 17062 } 17063 else if (isBuff) { 17064 isCommon = false; 17065 newValue = cloneBuffer(srcValue, true); 17066 } 17067 else if (isTyped) { 17068 isCommon = false; 17069 newValue = cloneTypedArray(srcValue, true); 17070 } 17071 else { 17072 newValue = []; 17073 } 17074 } 17075 else if (isPlainObject(srcValue) || isArguments(srcValue)) { 17076 newValue = objValue; 17077 if (isArguments(objValue)) { 17078 newValue = toPlainObject(objValue); 17079 } 17080 else if (!isObject(objValue) || isFunction(objValue)) { 17081 newValue = initCloneObject(srcValue); 17082 } 17083 } 17084 else { 17085 isCommon = false; 17086 } 17087 } 17088 if (isCommon) { 17089 // Recursively merge objects and arrays (susceptible to call stack limits). 17090 stack.set(srcValue, newValue); 17091 mergeFunc(newValue, srcValue, srcIndex, customizer, stack); 17092 stack['delete'](srcValue); 17093 } 17094 assignMergeValue(object, key, newValue); 17095 } 17096 17097 /** 17098 * The base implementation of `_.nth` which doesn't coerce arguments. 17099 * 17100 * @private 17101 * @param {Array} array The array to query. 17102 * @param {number} n The index of the element to return. 17103 * @returns {*} Returns the nth element of `array`. 17104 */ 17105 function baseNth(array, n) { 17106 var length = array.length; 17107 if (!length) { 17108 return; 17109 } 17110 n += n < 0 ? length : 0; 17111 return isIndex(n, length) ? array[n] : undefined; 17112 } 17113 17114 /** 17115 * The base implementation of `_.orderBy` without param guards. 17116 * 17117 * @private 17118 * @param {Array|Object} collection The collection to iterate over. 17119 * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. 17120 * @param {string[]} orders The sort orders of `iteratees`. 17121 * @returns {Array} Returns the new sorted array. 17122 */ 17123 function baseOrderBy(collection, iteratees, orders) { 17124 if (iteratees.length) { 17125 iteratees = arrayMap(iteratees, function(iteratee) { 17126 if (isArray(iteratee)) { 17127 return function(value) { 17128 return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); 17129 } 17130 } 17131 return iteratee; 17132 }); 17133 } else { 17134 iteratees = [identity]; 17135 } 17136 17137 var index = -1; 17138 iteratees = arrayMap(iteratees, baseUnary(getIteratee())); 17139 17140 var result = baseMap(collection, function(value, key, collection) { 17141 var criteria = arrayMap(iteratees, function(iteratee) { 17142 return iteratee(value); 17143 }); 17144 return { 'criteria': criteria, 'index': ++index, 'value': value }; 17145 }); 17146 17147 return baseSortBy(result, function(object, other) { 17148 return compareMultiple(object, other, orders); 17149 }); 17150 } 17151 17152 /** 17153 * The base implementation of `_.pick` without support for individual 17154 * property identifiers. 17155 * 17156 * @private 17157 * @param {Object} object The source object. 17158 * @param {string[]} paths The property paths to pick. 17159 * @returns {Object} Returns the new object. 17160 */ 17161 function basePick(object, paths) { 17162 return basePickBy(object, paths, function(value, path) { 17163 return hasIn(object, path); 17164 }); 17165 } 17166 17167 /** 17168 * The base implementation of `_.pickBy` without support for iteratee shorthands. 17169 * 17170 * @private 17171 * @param {Object} object The source object. 17172 * @param {string[]} paths The property paths to pick. 17173 * @param {Function} predicate The function invoked per property. 17174 * @returns {Object} Returns the new object. 17175 */ 17176 function basePickBy(object, paths, predicate) { 17177 var index = -1, 17178 length = paths.length, 17179 result = {}; 17180 17181 while (++index < length) { 17182 var path = paths[index], 17183 value = baseGet(object, path); 17184 17185 if (predicate(value, path)) { 17186 baseSet(result, castPath(path, object), value); 17187 } 17188 } 17189 return result; 17190 } 17191 17192 /** 17193 * A specialized version of `baseProperty` which supports deep paths. 17194 * 17195 * @private 17196 * @param {Array|string} path The path of the property to get. 17197 * @returns {Function} Returns the new accessor function. 17198 */ 17199 function basePropertyDeep(path) { 17200 return function(object) { 17201 return baseGet(object, path); 17202 }; 17203 } 17204 17205 /** 17206 * The base implementation of `_.pullAllBy` without support for iteratee 17207 * shorthands. 17208 * 17209 * @private 17210 * @param {Array} array The array to modify. 17211 * @param {Array} values The values to remove. 17212 * @param {Function} [iteratee] The iteratee invoked per element. 17213 * @param {Function} [comparator] The comparator invoked per element. 17214 * @returns {Array} Returns `array`. 17215 */ 17216 function basePullAll(array, values, iteratee, comparator) { 17217 var indexOf = comparator ? baseIndexOfWith : baseIndexOf, 17218 index = -1, 17219 length = values.length, 17220 seen = array; 17221 17222 if (array === values) { 17223 values = copyArray(values); 17224 } 17225 if (iteratee) { 17226 seen = arrayMap(array, baseUnary(iteratee)); 17227 } 17228 while (++index < length) { 17229 var fromIndex = 0, 17230 value = values[index], 17231 computed = iteratee ? iteratee(value) : value; 17232 17233 while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { 17234 if (seen !== array) { 17235 splice.call(seen, fromIndex, 1); 17236 } 17237 splice.call(array, fromIndex, 1); 17238 } 17239 } 17240 return array; 17241 } 17242 17243 /** 17244 * The base implementation of `_.pullAt` without support for individual 17245 * indexes or capturing the removed elements. 17246 * 17247 * @private 17248 * @param {Array} array The array to modify. 17249 * @param {number[]} indexes The indexes of elements to remove. 17250 * @returns {Array} Returns `array`. 17251 */ 17252 function basePullAt(array, indexes) { 17253 var length = array ? indexes.length : 0, 17254 lastIndex = length - 1; 17255 17256 while (length--) { 17257 var index = indexes[length]; 17258 if (length == lastIndex || index !== previous) { 17259 var previous = index; 17260 if (isIndex(index)) { 17261 splice.call(array, index, 1); 17262 } else { 17263 baseUnset(array, index); 17264 } 17265 } 17266 } 17267 return array; 17268 } 17269 17270 /** 17271 * The base implementation of `_.random` without support for returning 17272 * floating-point numbers. 17273 * 17274 * @private 17275 * @param {number} lower The lower bound. 17276 * @param {number} upper The upper bound. 17277 * @returns {number} Returns the random number. 17278 */ 17279 function baseRandom(lower, upper) { 17280 return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); 17281 } 17282 17283 /** 17284 * The base implementation of `_.range` and `_.rangeRight` which doesn't 17285 * coerce arguments. 17286 * 17287 * @private 17288 * @param {number} start The start of the range. 17289 * @param {number} end The end of the range. 17290 * @param {number} step The value to increment or decrement by. 17291 * @param {boolean} [fromRight] Specify iterating from right to left. 17292 * @returns {Array} Returns the range of numbers. 17293 */ 17294 function baseRange(start, end, step, fromRight) { 17295 var index = -1, 17296 length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), 17297 result = Array(length); 17298 17299 while (length--) { 17300 result[fromRight ? length : ++index] = start; 17301 start += step; 17302 } 17303 return result; 17304 } 17305 17306 /** 17307 * The base implementation of `_.repeat` which doesn't coerce arguments. 17308 * 17309 * @private 17310 * @param {string} string The string to repeat. 17311 * @param {number} n The number of times to repeat the string. 17312 * @returns {string} Returns the repeated string. 17313 */ 17314 function baseRepeat(string, n) { 17315 var result = ''; 17316 if (!string || n < 1 || n > MAX_SAFE_INTEGER) { 17317 return result; 17318 } 17319 // Leverage the exponentiation by squaring algorithm for a faster repeat. 17320 // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details. 17321 do { 17322 if (n % 2) { 17323 result += string; 17324 } 17325 n = nativeFloor(n / 2); 17326 if (n) { 17327 string += string; 17328 } 17329 } while (n); 17330 17331 return result; 17332 } 17333 17334 /** 17335 * The base implementation of `_.rest` which doesn't validate or coerce arguments. 17336 * 17337 * @private 17338 * @param {Function} func The function to apply a rest parameter to. 17339 * @param {number} [start=func.length-1] The start position of the rest parameter. 17340 * @returns {Function} Returns the new function. 17341 */ 17342 function baseRest(func, start) { 17343 return setToString(overRest(func, start, identity), func + ''); 17344 } 17345 17346 /** 17347 * The base implementation of `_.sample`. 17348 * 17349 * @private 17350 * @param {Array|Object} collection The collection to sample. 17351 * @returns {*} Returns the random element. 17352 */ 17353 function baseSample(collection) { 17354 return arraySample(values(collection)); 17355 } 17356 17357 /** 17358 * The base implementation of `_.sampleSize` without param guards. 17359 * 17360 * @private 17361 * @param {Array|Object} collection The collection to sample. 17362 * @param {number} n The number of elements to sample. 17363 * @returns {Array} Returns the random elements. 17364 */ 17365 function baseSampleSize(collection, n) { 17366 var array = values(collection); 17367 return shuffleSelf(array, baseClamp(n, 0, array.length)); 17368 } 17369 17370 /** 17371 * The base implementation of `_.set`. 17372 * 17373 * @private 17374 * @param {Object} object The object to modify. 17375 * @param {Array|string} path The path of the property to set. 17376 * @param {*} value The value to set. 17377 * @param {Function} [customizer] The function to customize path creation. 17378 * @returns {Object} Returns `object`. 17379 */ 17380 function baseSet(object, path, value, customizer) { 17381 if (!isObject(object)) { 17382 return object; 17383 } 17384 path = castPath(path, object); 17385 17386 var index = -1, 17387 length = path.length, 17388 lastIndex = length - 1, 17389 nested = object; 17390 17391 while (nested != null && ++index < length) { 17392 var key = toKey(path[index]), 17393 newValue = value; 17394 17395 if (key === '__proto__' || key === 'constructor' || key === 'prototype') { 17396 return object; 17397 } 17398 17399 if (index != lastIndex) { 17400 var objValue = nested[key]; 17401 newValue = customizer ? customizer(objValue, key, nested) : undefined; 17402 if (newValue === undefined) { 17403 newValue = isObject(objValue) 17404 ? objValue 17405 : (isIndex(path[index + 1]) ? [] : {}); 17406 } 17407 } 17408 assignValue(nested, key, newValue); 17409 nested = nested[key]; 17410 } 17411 return object; 17412 } 17413 17414 /** 17415 * The base implementation of `setData` without support for hot loop shorting. 17416 * 17417 * @private 17418 * @param {Function} func The function to associate metadata with. 17419 * @param {*} data The metadata. 17420 * @returns {Function} Returns `func`. 17421 */ 17422 var baseSetData = !metaMap ? identity : function(func, data) { 17423 metaMap.set(func, data); 17424 return func; 17425 }; 17426 17427 /** 17428 * The base implementation of `setToString` without support for hot loop shorting. 17429 * 17430 * @private 17431 * @param {Function} func The function to modify. 17432 * @param {Function} string The `toString` result. 17433 * @returns {Function} Returns `func`. 17434 */ 17435 var baseSetToString = !defineProperty ? identity : function(func, string) { 17436 return defineProperty(func, 'toString', { 17437 'configurable': true, 17438 'enumerable': false, 17439 'value': constant(string), 17440 'writable': true 17441 }); 17442 }; 17443 17444 /** 17445 * The base implementation of `_.shuffle`. 17446 * 17447 * @private 17448 * @param {Array|Object} collection The collection to shuffle. 17449 * @returns {Array} Returns the new shuffled array. 17450 */ 17451 function baseShuffle(collection) { 17452 return shuffleSelf(values(collection)); 17453 } 17454 17455 /** 17456 * The base implementation of `_.slice` without an iteratee call guard. 17457 * 17458 * @private 17459 * @param {Array} array The array to slice. 17460 * @param {number} [start=0] The start position. 17461 * @param {number} [end=array.length] The end position. 17462 * @returns {Array} Returns the slice of `array`. 17463 */ 17464 function baseSlice(array, start, end) { 17465 var index = -1, 17466 length = array.length; 17467 17468 if (start < 0) { 17469 start = -start > length ? 0 : (length + start); 17470 } 17471 end = end > length ? length : end; 17472 if (end < 0) { 17473 end += length; 17474 } 17475 length = start > end ? 0 : ((end - start) >>> 0); 17476 start >>>= 0; 17477 17478 var result = Array(length); 17479 while (++index < length) { 17480 result[index] = array[index + start]; 17481 } 17482 return result; 17483 } 17484 17485 /** 17486 * The base implementation of `_.some` without support for iteratee shorthands. 17487 * 17488 * @private 17489 * @param {Array|Object} collection The collection to iterate over. 17490 * @param {Function} predicate The function invoked per iteration. 17491 * @returns {boolean} Returns `true` if any element passes the predicate check, 17492 * else `false`. 17493 */ 17494 function baseSome(collection, predicate) { 17495 var result; 17496 17497 baseEach(collection, function(value, index, collection) { 17498 result = predicate(value, index, collection); 17499 return !result; 17500 }); 17501 return !!result; 17502 } 17503 17504 /** 17505 * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which 17506 * performs a binary search of `array` to determine the index at which `value` 17507 * should be inserted into `array` in order to maintain its sort order. 17508 * 17509 * @private 17510 * @param {Array} array The sorted array to inspect. 17511 * @param {*} value The value to evaluate. 17512 * @param {boolean} [retHighest] Specify returning the highest qualified index. 17513 * @returns {number} Returns the index at which `value` should be inserted 17514 * into `array`. 17515 */ 17516 function baseSortedIndex(array, value, retHighest) { 17517 var low = 0, 17518 high = array == null ? low : array.length; 17519 17520 if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { 17521 while (low < high) { 17522 var mid = (low + high) >>> 1, 17523 computed = array[mid]; 17524 17525 if (computed !== null && !isSymbol(computed) && 17526 (retHighest ? (computed <= value) : (computed < value))) { 17527 low = mid + 1; 17528 } else { 17529 high = mid; 17530 } 17531 } 17532 return high; 17533 } 17534 return baseSortedIndexBy(array, value, identity, retHighest); 17535 } 17536 17537 /** 17538 * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy` 17539 * which invokes `iteratee` for `value` and each element of `array` to compute 17540 * their sort ranking. The iteratee is invoked with one argument; (value). 17541 * 17542 * @private 17543 * @param {Array} array The sorted array to inspect. 17544 * @param {*} value The value to evaluate. 17545 * @param {Function} iteratee The iteratee invoked per element. 17546 * @param {boolean} [retHighest] Specify returning the highest qualified index. 17547 * @returns {number} Returns the index at which `value` should be inserted 17548 * into `array`. 17549 */ 17550 function baseSortedIndexBy(array, value, iteratee, retHighest) { 17551 var low = 0, 17552 high = array == null ? 0 : array.length; 17553 if (high === 0) { 17554 return 0; 17555 } 17556 17557 value = iteratee(value); 17558 var valIsNaN = value !== value, 17559 valIsNull = value === null, 17560 valIsSymbol = isSymbol(value), 17561 valIsUndefined = value === undefined; 17562 17563 while (low < high) { 17564 var mid = nativeFloor((low + high) / 2), 17565 computed = iteratee(array[mid]), 17566 othIsDefined = computed !== undefined, 17567 othIsNull = computed === null, 17568 othIsReflexive = computed === computed, 17569 othIsSymbol = isSymbol(computed); 17570 17571 if (valIsNaN) { 17572 var setLow = retHighest || othIsReflexive; 17573 } else if (valIsUndefined) { 17574 setLow = othIsReflexive && (retHighest || othIsDefined); 17575 } else if (valIsNull) { 17576 setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); 17577 } else if (valIsSymbol) { 17578 setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); 17579 } else if (othIsNull || othIsSymbol) { 17580 setLow = false; 17581 } else { 17582 setLow = retHighest ? (computed <= value) : (computed < value); 17583 } 17584 if (setLow) { 17585 low = mid + 1; 17586 } else { 17587 high = mid; 17588 } 17589 } 17590 return nativeMin(high, MAX_ARRAY_INDEX); 17591 } 17592 17593 /** 17594 * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without 17595 * support for iteratee shorthands. 17596 * 17597 * @private 17598 * @param {Array} array The array to inspect. 17599 * @param {Function} [iteratee] The iteratee invoked per element. 17600 * @returns {Array} Returns the new duplicate free array. 17601 */ 17602 function baseSortedUniq(array, iteratee) { 17603 var index = -1, 17604 length = array.length, 17605 resIndex = 0, 17606 result = []; 17607 17608 while (++index < length) { 17609 var value = array[index], 17610 computed = iteratee ? iteratee(value) : value; 17611 17612 if (!index || !eq(computed, seen)) { 17613 var seen = computed; 17614 result[resIndex++] = value === 0 ? 0 : value; 17615 } 17616 } 17617 return result; 17618 } 17619 17620 /** 17621 * The base implementation of `_.toNumber` which doesn't ensure correct 17622 * conversions of binary, hexadecimal, or octal string values. 17623 * 17624 * @private 17625 * @param {*} value The value to process. 17626 * @returns {number} Returns the number. 17627 */ 17628 function baseToNumber(value) { 17629 if (typeof value == 'number') { 17630 return value; 17631 } 17632 if (isSymbol(value)) { 17633 return NAN; 17634 } 17635 return +value; 17636 } 17637 17638 /** 17639 * The base implementation of `_.toString` which doesn't convert nullish 17640 * values to empty strings. 17641 * 17642 * @private 17643 * @param {*} value The value to process. 17644 * @returns {string} Returns the string. 17645 */ 17646 function baseToString(value) { 17647 // Exit early for strings to avoid a performance hit in some environments. 17648 if (typeof value == 'string') { 17649 return value; 17650 } 17651 if (isArray(value)) { 17652 // Recursively convert values (susceptible to call stack limits). 17653 return arrayMap(value, baseToString) + ''; 17654 } 17655 if (isSymbol(value)) { 17656 return symbolToString ? symbolToString.call(value) : ''; 17657 } 17658 var result = (value + ''); 17659 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; 17660 } 17661 17662 /** 17663 * The base implementation of `_.uniqBy` without support for iteratee shorthands. 17664 * 17665 * @private 17666 * @param {Array} array The array to inspect. 17667 * @param {Function} [iteratee] The iteratee invoked per element. 17668 * @param {Function} [comparator] The comparator invoked per element. 17669 * @returns {Array} Returns the new duplicate free array. 17670 */ 17671 function baseUniq(array, iteratee, comparator) { 17672 var index = -1, 17673 includes = arrayIncludes, 17674 length = array.length, 17675 isCommon = true, 17676 result = [], 17677 seen = result; 17678 17679 if (comparator) { 17680 isCommon = false; 17681 includes = arrayIncludesWith; 17682 } 17683 else if (length >= LARGE_ARRAY_SIZE) { 17684 var set = iteratee ? null : createSet(array); 17685 if (set) { 17686 return setToArray(set); 17687 } 17688 isCommon = false; 17689 includes = cacheHas; 17690 seen = new SetCache; 17691 } 17692 else { 17693 seen = iteratee ? [] : result; 17694 } 17695 outer: 17696 while (++index < length) { 17697 var value = array[index], 17698 computed = iteratee ? iteratee(value) : value; 17699 17700 value = (comparator || value !== 0) ? value : 0; 17701 if (isCommon && computed === computed) { 17702 var seenIndex = seen.length; 17703 while (seenIndex--) { 17704 if (seen[seenIndex] === computed) { 17705 continue outer; 17706 } 17707 } 17708 if (iteratee) { 17709 seen.push(computed); 17710 } 17711 result.push(value); 17712 } 17713 else if (!includes(seen, computed, comparator)) { 17714 if (seen !== result) { 17715 seen.push(computed); 17716 } 17717 result.push(value); 17718 } 17719 } 17720 return result; 17721 } 17722 17723 /** 17724 * The base implementation of `_.unset`. 17725 * 17726 * @private 17727 * @param {Object} object The object to modify. 17728 * @param {Array|string} path The property path to unset. 17729 * @returns {boolean} Returns `true` if the property is deleted, else `false`. 17730 */ 17731 function baseUnset(object, path) { 17732 path = castPath(path, object); 17733 object = parent(object, path); 17734 return object == null || delete object[toKey(last(path))]; 17735 } 17736 17737 /** 17738 * The base implementation of `_.update`. 17739 * 17740 * @private 17741 * @param {Object} object The object to modify. 17742 * @param {Array|string} path The path of the property to update. 17743 * @param {Function} updater The function to produce the updated value. 17744 * @param {Function} [customizer] The function to customize path creation. 17745 * @returns {Object} Returns `object`. 17746 */ 17747 function baseUpdate(object, path, updater, customizer) { 17748 return baseSet(object, path, updater(baseGet(object, path)), customizer); 17749 } 17750 17751 /** 17752 * The base implementation of methods like `_.dropWhile` and `_.takeWhile` 17753 * without support for iteratee shorthands. 17754 * 17755 * @private 17756 * @param {Array} array The array to query. 17757 * @param {Function} predicate The function invoked per iteration. 17758 * @param {boolean} [isDrop] Specify dropping elements instead of taking them. 17759 * @param {boolean} [fromRight] Specify iterating from right to left. 17760 * @returns {Array} Returns the slice of `array`. 17761 */ 17762 function baseWhile(array, predicate, isDrop, fromRight) { 17763 var length = array.length, 17764 index = fromRight ? length : -1; 17765 17766 while ((fromRight ? index-- : ++index < length) && 17767 predicate(array[index], index, array)) {} 17768 17769 return isDrop 17770 ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length)) 17771 : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index)); 17772 } 17773 17774 /** 17775 * The base implementation of `wrapperValue` which returns the result of 17776 * performing a sequence of actions on the unwrapped `value`, where each 17777 * successive action is supplied the return value of the previous. 17778 * 17779 * @private 17780 * @param {*} value The unwrapped value. 17781 * @param {Array} actions Actions to perform to resolve the unwrapped value. 17782 * @returns {*} Returns the resolved value. 17783 */ 17784 function baseWrapperValue(value, actions) { 17785 var result = value; 17786 if (result instanceof LazyWrapper) { 17787 result = result.value(); 17788 } 17789 return arrayReduce(actions, function(result, action) { 17790 return action.func.apply(action.thisArg, arrayPush([result], action.args)); 17791 }, result); 17792 } 17793 17794 /** 17795 * The base implementation of methods like `_.xor`, without support for 17796 * iteratee shorthands, that accepts an array of arrays to inspect. 17797 * 17798 * @private 17799 * @param {Array} arrays The arrays to inspect. 17800 * @param {Function} [iteratee] The iteratee invoked per element. 17801 * @param {Function} [comparator] The comparator invoked per element. 17802 * @returns {Array} Returns the new array of values. 17803 */ 17804 function baseXor(arrays, iteratee, comparator) { 17805 var length = arrays.length; 17806 if (length < 2) { 17807 return length ? baseUniq(arrays[0]) : []; 17808 } 17809 var index = -1, 17810 result = Array(length); 17811 17812 while (++index < length) { 17813 var array = arrays[index], 17814 othIndex = -1; 17815 17816 while (++othIndex < length) { 17817 if (othIndex != index) { 17818 result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); 17819 } 17820 } 17821 } 17822 return baseUniq(baseFlatten(result, 1), iteratee, comparator); 17823 } 17824 17825 /** 17826 * This base implementation of `_.zipObject` which assigns values using `assignFunc`. 17827 * 17828 * @private 17829 * @param {Array} props The property identifiers. 17830 * @param {Array} values The property values. 17831 * @param {Function} assignFunc The function to assign values. 17832 * @returns {Object} Returns the new object. 17833 */ 17834 function baseZipObject(props, values, assignFunc) { 17835 var index = -1, 17836 length = props.length, 17837 valsLength = values.length, 17838 result = {}; 17839 17840 while (++index < length) { 17841 var value = index < valsLength ? values[index] : undefined; 17842 assignFunc(result, props[index], value); 17843 } 17844 return result; 17845 } 17846 17847 /** 17848 * Casts `value` to an empty array if it's not an array like object. 17849 * 17850 * @private 17851 * @param {*} value The value to inspect. 17852 * @returns {Array|Object} Returns the cast array-like object. 17853 */ 17854 function castArrayLikeObject(value) { 17855 return isArrayLikeObject(value) ? value : []; 17856 } 17857 17858 /** 17859 * Casts `value` to `identity` if it's not a function. 17860 * 17861 * @private 17862 * @param {*} value The value to inspect. 17863 * @returns {Function} Returns cast function. 17864 */ 17865 function castFunction(value) { 17866 return typeof value == 'function' ? value : identity; 17867 } 17868 17869 /** 17870 * Casts `value` to a path array if it's not one. 17871 * 17872 * @private 17873 * @param {*} value The value to inspect. 17874 * @param {Object} [object] The object to query keys on. 17875 * @returns {Array} Returns the cast property path array. 17876 */ 17877 function castPath(value, object) { 17878 if (isArray(value)) { 17879 return value; 17880 } 17881 return isKey(value, object) ? [value] : stringToPath(toString(value)); 17882 } 17883 17884 /** 17885 * A `baseRest` alias which can be replaced with `identity` by module 17886 * replacement plugins. 17887 * 17888 * @private 17889 * @type {Function} 17890 * @param {Function} func The function to apply a rest parameter to. 17891 * @returns {Function} Returns the new function. 17892 */ 17893 var castRest = baseRest; 17894 17895 /** 17896 * Casts `array` to a slice if it's needed. 17897 * 17898 * @private 17899 * @param {Array} array The array to inspect. 17900 * @param {number} start The start position. 17901 * @param {number} [end=array.length] The end position. 17902 * @returns {Array} Returns the cast slice. 17903 */ 17904 function castSlice(array, start, end) { 17905 var length = array.length; 17906 end = end === undefined ? length : end; 17907 return (!start && end >= length) ? array : baseSlice(array, start, end); 17908 } 17909 17910 /** 17911 * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout). 17912 * 17913 * @private 17914 * @param {number|Object} id The timer id or timeout object of the timer to clear. 17915 */ 17916 var clearTimeout = ctxClearTimeout || function(id) { 17917 return root.clearTimeout(id); 17918 }; 17919 17920 /** 17921 * Creates a clone of `buffer`. 17922 * 17923 * @private 17924 * @param {Buffer} buffer The buffer to clone. 17925 * @param {boolean} [isDeep] Specify a deep clone. 17926 * @returns {Buffer} Returns the cloned buffer. 17927 */ 17928 function cloneBuffer(buffer, isDeep) { 17929 if (isDeep) { 17930 return buffer.slice(); 17931 } 17932 var length = buffer.length, 17933 result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); 17934 17935 buffer.copy(result); 17936 return result; 17937 } 17938 17939 /** 17940 * Creates a clone of `arrayBuffer`. 17941 * 17942 * @private 17943 * @param {ArrayBuffer} arrayBuffer The array buffer to clone. 17944 * @returns {ArrayBuffer} Returns the cloned array buffer. 17945 */ 17946 function cloneArrayBuffer(arrayBuffer) { 17947 var result = new arrayBuffer.constructor(arrayBuffer.byteLength); 17948 new Uint8Array(result).set(new Uint8Array(arrayBuffer)); 17949 return result; 17950 } 17951 17952 /** 17953 * Creates a clone of `dataView`. 17954 * 17955 * @private 17956 * @param {Object} dataView The data view to clone. 17957 * @param {boolean} [isDeep] Specify a deep clone. 17958 * @returns {Object} Returns the cloned data view. 17959 */ 17960 function cloneDataView(dataView, isDeep) { 17961 var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; 17962 return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); 17963 } 17964 17965 /** 17966 * Creates a clone of `regexp`. 17967 * 17968 * @private 17969 * @param {Object} regexp The regexp to clone. 17970 * @returns {Object} Returns the cloned regexp. 17971 */ 17972 function cloneRegExp(regexp) { 17973 var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); 17974 result.lastIndex = regexp.lastIndex; 17975 return result; 17976 } 17977 17978 /** 17979 * Creates a clone of the `symbol` object. 17980 * 17981 * @private 17982 * @param {Object} symbol The symbol object to clone. 17983 * @returns {Object} Returns the cloned symbol object. 17984 */ 17985 function cloneSymbol(symbol) { 17986 return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; 17987 } 17988 17989 /** 17990 * Creates a clone of `typedArray`. 17991 * 17992 * @private 17993 * @param {Object} typedArray The typed array to clone. 17994 * @param {boolean} [isDeep] Specify a deep clone. 17995 * @returns {Object} Returns the cloned typed array. 17996 */ 17997 function cloneTypedArray(typedArray, isDeep) { 17998 var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; 17999 return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); 18000 } 18001 18002 /** 18003 * Compares values to sort them in ascending order. 18004 * 18005 * @private 18006 * @param {*} value The value to compare. 18007 * @param {*} other The other value to compare. 18008 * @returns {number} Returns the sort order indicator for `value`. 18009 */ 18010 function compareAscending(value, other) { 18011 if (value !== other) { 18012 var valIsDefined = value !== undefined, 18013 valIsNull = value === null, 18014 valIsReflexive = value === value, 18015 valIsSymbol = isSymbol(value); 18016 18017 var othIsDefined = other !== undefined, 18018 othIsNull = other === null, 18019 othIsReflexive = other === other, 18020 othIsSymbol = isSymbol(other); 18021 18022 if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || 18023 (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || 18024 (valIsNull && othIsDefined && othIsReflexive) || 18025 (!valIsDefined && othIsReflexive) || 18026 !valIsReflexive) { 18027 return 1; 18028 } 18029 if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || 18030 (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || 18031 (othIsNull && valIsDefined && valIsReflexive) || 18032 (!othIsDefined && valIsReflexive) || 18033 !othIsReflexive) { 18034 return -1; 18035 } 18036 } 18037 return 0; 18038 } 18039 18040 /** 18041 * Used by `_.orderBy` to compare multiple properties of a value to another 18042 * and stable sort them. 18043 * 18044 * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, 18045 * specify an order of "desc" for descending or "asc" for ascending sort order 18046 * of corresponding values. 18047 * 18048 * @private 18049 * @param {Object} object The object to compare. 18050 * @param {Object} other The other object to compare. 18051 * @param {boolean[]|string[]} orders The order to sort by for each property. 18052 * @returns {number} Returns the sort order indicator for `object`. 18053 */ 18054 function compareMultiple(object, other, orders) { 18055 var index = -1, 18056 objCriteria = object.criteria, 18057 othCriteria = other.criteria, 18058 length = objCriteria.length, 18059 ordersLength = orders.length; 18060 18061 while (++index < length) { 18062 var result = compareAscending(objCriteria[index], othCriteria[index]); 18063 if (result) { 18064 if (index >= ordersLength) { 18065 return result; 18066 } 18067 var order = orders[index]; 18068 return result * (order == 'desc' ? -1 : 1); 18069 } 18070 } 18071 // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications 18072 // that causes it, under certain circumstances, to provide the same value for 18073 // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 18074 // for more details. 18075 // 18076 // This also ensures a stable sort in V8 and other engines. 18077 // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. 18078 return object.index - other.index; 18079 } 18080 18081 /** 18082 * Creates an array that is the composition of partially applied arguments, 18083 * placeholders, and provided arguments into a single array of arguments. 18084 * 18085 * @private 18086 * @param {Array} args The provided arguments. 18087 * @param {Array} partials The arguments to prepend to those provided. 18088 * @param {Array} holders The `partials` placeholder indexes. 18089 * @params {boolean} [isCurried] Specify composing for a curried function. 18090 * @returns {Array} Returns the new array of composed arguments. 18091 */ 18092 function composeArgs(args, partials, holders, isCurried) { 18093 var argsIndex = -1, 18094 argsLength = args.length, 18095 holdersLength = holders.length, 18096 leftIndex = -1, 18097 leftLength = partials.length, 18098 rangeLength = nativeMax(argsLength - holdersLength, 0), 18099 result = Array(leftLength + rangeLength), 18100 isUncurried = !isCurried; 18101 18102 while (++leftIndex < leftLength) { 18103 result[leftIndex] = partials[leftIndex]; 18104 } 18105 while (++argsIndex < holdersLength) { 18106 if (isUncurried || argsIndex < argsLength) { 18107 result[holders[argsIndex]] = args[argsIndex]; 18108 } 18109 } 18110 while (rangeLength--) { 18111 result[leftIndex++] = args[argsIndex++]; 18112 } 18113 return result; 18114 } 18115 18116 /** 18117 * This function is like `composeArgs` except that the arguments composition 18118 * is tailored for `_.partialRight`. 18119 * 18120 * @private 18121 * @param {Array} args The provided arguments. 18122 * @param {Array} partials The arguments to append to those provided. 18123 * @param {Array} holders The `partials` placeholder indexes. 18124 * @params {boolean} [isCurried] Specify composing for a curried function. 18125 * @returns {Array} Returns the new array of composed arguments. 18126 */ 18127 function composeArgsRight(args, partials, holders, isCurried) { 18128 var argsIndex = -1, 18129 argsLength = args.length, 18130 holdersIndex = -1, 18131 holdersLength = holders.length, 18132 rightIndex = -1, 18133 rightLength = partials.length, 18134 rangeLength = nativeMax(argsLength - holdersLength, 0), 18135 result = Array(rangeLength + rightLength), 18136 isUncurried = !isCurried; 18137 18138 while (++argsIndex < rangeLength) { 18139 result[argsIndex] = args[argsIndex]; 18140 } 18141 var offset = argsIndex; 18142 while (++rightIndex < rightLength) { 18143 result[offset + rightIndex] = partials[rightIndex]; 18144 } 18145 while (++holdersIndex < holdersLength) { 18146 if (isUncurried || argsIndex < argsLength) { 18147 result[offset + holders[holdersIndex]] = args[argsIndex++]; 18148 } 18149 } 18150 return result; 18151 } 18152 18153 /** 18154 * Copies the values of `source` to `array`. 18155 * 18156 * @private 18157 * @param {Array} source The array to copy values from. 18158 * @param {Array} [array=[]] The array to copy values to. 18159 * @returns {Array} Returns `array`. 18160 */ 18161 function copyArray(source, array) { 18162 var index = -1, 18163 length = source.length; 18164 18165 array || (array = Array(length)); 18166 while (++index < length) { 18167 array[index] = source[index]; 18168 } 18169 return array; 18170 } 18171 18172 /** 18173 * Copies properties of `source` to `object`. 18174 * 18175 * @private 18176 * @param {Object} source The object to copy properties from. 18177 * @param {Array} props The property identifiers to copy. 18178 * @param {Object} [object={}] The object to copy properties to. 18179 * @param {Function} [customizer] The function to customize copied values. 18180 * @returns {Object} Returns `object`. 18181 */ 18182 function copyObject(source, props, object, customizer) { 18183 var isNew = !object; 18184 object || (object = {}); 18185 18186 var index = -1, 18187 length = props.length; 18188 18189 while (++index < length) { 18190 var key = props[index]; 18191 18192 var newValue = customizer 18193 ? customizer(object[key], source[key], key, object, source) 18194 : undefined; 18195 18196 if (newValue === undefined) { 18197 newValue = source[key]; 18198 } 18199 if (isNew) { 18200 baseAssignValue(object, key, newValue); 18201 } else { 18202 assignValue(object, key, newValue); 18203 } 18204 } 18205 return object; 18206 } 18207 18208 /** 18209 * Copies own symbols of `source` to `object`. 18210 * 18211 * @private 18212 * @param {Object} source The object to copy symbols from. 18213 * @param {Object} [object={}] The object to copy symbols to. 18214 * @returns {Object} Returns `object`. 18215 */ 18216 function copySymbols(source, object) { 18217 return copyObject(source, getSymbols(source), object); 18218 } 18219 18220 /** 18221 * Copies own and inherited symbols of `source` to `object`. 18222 * 18223 * @private 18224 * @param {Object} source The object to copy symbols from. 18225 * @param {Object} [object={}] The object to copy symbols to. 18226 * @returns {Object} Returns `object`. 18227 */ 18228 function copySymbolsIn(source, object) { 18229 return copyObject(source, getSymbolsIn(source), object); 18230 } 18231 18232 /** 18233 * Creates a function like `_.groupBy`. 18234 * 18235 * @private 18236 * @param {Function} setter The function to set accumulator values. 18237 * @param {Function} [initializer] The accumulator object initializer. 18238 * @returns {Function} Returns the new aggregator function. 18239 */ 18240 function createAggregator(setter, initializer) { 18241 return function(collection, iteratee) { 18242 var func = isArray(collection) ? arrayAggregator : baseAggregator, 18243 accumulator = initializer ? initializer() : {}; 18244 18245 return func(collection, setter, getIteratee(iteratee, 2), accumulator); 18246 }; 18247 } 18248 18249 /** 18250 * Creates a function like `_.assign`. 18251 * 18252 * @private 18253 * @param {Function} assigner The function to assign values. 18254 * @returns {Function} Returns the new assigner function. 18255 */ 18256 function createAssigner(assigner) { 18257 return baseRest(function(object, sources) { 18258 var index = -1, 18259 length = sources.length, 18260 customizer = length > 1 ? sources[length - 1] : undefined, 18261 guard = length > 2 ? sources[2] : undefined; 18262 18263 customizer = (assigner.length > 3 && typeof customizer == 'function') 18264 ? (length--, customizer) 18265 : undefined; 18266 18267 if (guard && isIterateeCall(sources[0], sources[1], guard)) { 18268 customizer = length < 3 ? undefined : customizer; 18269 length = 1; 18270 } 18271 object = Object(object); 18272 while (++index < length) { 18273 var source = sources[index]; 18274 if (source) { 18275 assigner(object, source, index, customizer); 18276 } 18277 } 18278 return object; 18279 }); 18280 } 18281 18282 /** 18283 * Creates a `baseEach` or `baseEachRight` function. 18284 * 18285 * @private 18286 * @param {Function} eachFunc The function to iterate over a collection. 18287 * @param {boolean} [fromRight] Specify iterating from right to left. 18288 * @returns {Function} Returns the new base function. 18289 */ 18290 function createBaseEach(eachFunc, fromRight) { 18291 return function(collection, iteratee) { 18292 if (collection == null) { 18293 return collection; 18294 } 18295 if (!isArrayLike(collection)) { 18296 return eachFunc(collection, iteratee); 18297 } 18298 var length = collection.length, 18299 index = fromRight ? length : -1, 18300 iterable = Object(collection); 18301 18302 while ((fromRight ? index-- : ++index < length)) { 18303 if (iteratee(iterable[index], index, iterable) === false) { 18304 break; 18305 } 18306 } 18307 return collection; 18308 }; 18309 } 18310 18311 /** 18312 * Creates a base function for methods like `_.forIn` and `_.forOwn`. 18313 * 18314 * @private 18315 * @param {boolean} [fromRight] Specify iterating from right to left. 18316 * @returns {Function} Returns the new base function. 18317 */ 18318 function createBaseFor(fromRight) { 18319 return function(object, iteratee, keysFunc) { 18320 var index = -1, 18321 iterable = Object(object), 18322 props = keysFunc(object), 18323 length = props.length; 18324 18325 while (length--) { 18326 var key = props[fromRight ? length : ++index]; 18327 if (iteratee(iterable[key], key, iterable) === false) { 18328 break; 18329 } 18330 } 18331 return object; 18332 }; 18333 } 18334 18335 /** 18336 * Creates a function that wraps `func` to invoke it with the optional `this` 18337 * binding of `thisArg`. 18338 * 18339 * @private 18340 * @param {Function} func The function to wrap. 18341 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 18342 * @param {*} [thisArg] The `this` binding of `func`. 18343 * @returns {Function} Returns the new wrapped function. 18344 */ 18345 function createBind(func, bitmask, thisArg) { 18346 var isBind = bitmask & WRAP_BIND_FLAG, 18347 Ctor = createCtor(func); 18348 18349 function wrapper() { 18350 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; 18351 return fn.apply(isBind ? thisArg : this, arguments); 18352 } 18353 return wrapper; 18354 } 18355 18356 /** 18357 * Creates a function like `_.lowerFirst`. 18358 * 18359 * @private 18360 * @param {string} methodName The name of the `String` case method to use. 18361 * @returns {Function} Returns the new case function. 18362 */ 18363 function createCaseFirst(methodName) { 18364 return function(string) { 18365 string = toString(string); 18366 18367 var strSymbols = hasUnicode(string) 18368 ? stringToArray(string) 18369 : undefined; 18370 18371 var chr = strSymbols 18372 ? strSymbols[0] 18373 : string.charAt(0); 18374 18375 var trailing = strSymbols 18376 ? castSlice(strSymbols, 1).join('') 18377 : string.slice(1); 18378 18379 return chr[methodName]() + trailing; 18380 }; 18381 } 18382 18383 /** 18384 * Creates a function like `_.camelCase`. 18385 * 18386 * @private 18387 * @param {Function} callback The function to combine each word. 18388 * @returns {Function} Returns the new compounder function. 18389 */ 18390 function createCompounder(callback) { 18391 return function(string) { 18392 return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); 18393 }; 18394 } 18395 18396 /** 18397 * Creates a function that produces an instance of `Ctor` regardless of 18398 * whether it was invoked as part of a `new` expression or by `call` or `apply`. 18399 * 18400 * @private 18401 * @param {Function} Ctor The constructor to wrap. 18402 * @returns {Function} Returns the new wrapped function. 18403 */ 18404 function createCtor(Ctor) { 18405 return function() { 18406 // Use a `switch` statement to work with class constructors. See 18407 // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist 18408 // for more details. 18409 var args = arguments; 18410 switch (args.length) { 18411 case 0: return new Ctor; 18412 case 1: return new Ctor(args[0]); 18413 case 2: return new Ctor(args[0], args[1]); 18414 case 3: return new Ctor(args[0], args[1], args[2]); 18415 case 4: return new Ctor(args[0], args[1], args[2], args[3]); 18416 case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); 18417 case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); 18418 case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); 18419 } 18420 var thisBinding = baseCreate(Ctor.prototype), 18421 result = Ctor.apply(thisBinding, args); 18422 18423 // Mimic the constructor's `return` behavior. 18424 // See https://es5.github.io/#x13.2.2 for more details. 18425 return isObject(result) ? result : thisBinding; 18426 }; 18427 } 18428 18429 /** 18430 * Creates a function that wraps `func` to enable currying. 18431 * 18432 * @private 18433 * @param {Function} func The function to wrap. 18434 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 18435 * @param {number} arity The arity of `func`. 18436 * @returns {Function} Returns the new wrapped function. 18437 */ 18438 function createCurry(func, bitmask, arity) { 18439 var Ctor = createCtor(func); 18440 18441 function wrapper() { 18442 var length = arguments.length, 18443 args = Array(length), 18444 index = length, 18445 placeholder = getHolder(wrapper); 18446 18447 while (index--) { 18448 args[index] = arguments[index]; 18449 } 18450 var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) 18451 ? [] 18452 : replaceHolders(args, placeholder); 18453 18454 length -= holders.length; 18455 if (length < arity) { 18456 return createRecurry( 18457 func, bitmask, createHybrid, wrapper.placeholder, undefined, 18458 args, holders, undefined, undefined, arity - length); 18459 } 18460 var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; 18461 return apply(fn, this, args); 18462 } 18463 return wrapper; 18464 } 18465 18466 /** 18467 * Creates a `_.find` or `_.findLast` function. 18468 * 18469 * @private 18470 * @param {Function} findIndexFunc The function to find the collection index. 18471 * @returns {Function} Returns the new find function. 18472 */ 18473 function createFind(findIndexFunc) { 18474 return function(collection, predicate, fromIndex) { 18475 var iterable = Object(collection); 18476 if (!isArrayLike(collection)) { 18477 var iteratee = getIteratee(predicate, 3); 18478 collection = keys(collection); 18479 predicate = function(key) { return iteratee(iterable[key], key, iterable); }; 18480 } 18481 var index = findIndexFunc(collection, predicate, fromIndex); 18482 return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; 18483 }; 18484 } 18485 18486 /** 18487 * Creates a `_.flow` or `_.flowRight` function. 18488 * 18489 * @private 18490 * @param {boolean} [fromRight] Specify iterating from right to left. 18491 * @returns {Function} Returns the new flow function. 18492 */ 18493 function createFlow(fromRight) { 18494 return flatRest(function(funcs) { 18495 var length = funcs.length, 18496 index = length, 18497 prereq = LodashWrapper.prototype.thru; 18498 18499 if (fromRight) { 18500 funcs.reverse(); 18501 } 18502 while (index--) { 18503 var func = funcs[index]; 18504 if (typeof func != 'function') { 18505 throw new TypeError(FUNC_ERROR_TEXT); 18506 } 18507 if (prereq && !wrapper && getFuncName(func) == 'wrapper') { 18508 var wrapper = new LodashWrapper([], true); 18509 } 18510 } 18511 index = wrapper ? index : length; 18512 while (++index < length) { 18513 func = funcs[index]; 18514 18515 var funcName = getFuncName(func), 18516 data = funcName == 'wrapper' ? getData(func) : undefined; 18517 18518 if (data && isLaziable(data[0]) && 18519 data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && 18520 !data[4].length && data[9] == 1 18521 ) { 18522 wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); 18523 } else { 18524 wrapper = (func.length == 1 && isLaziable(func)) 18525 ? wrapper[funcName]() 18526 : wrapper.thru(func); 18527 } 18528 } 18529 return function() { 18530 var args = arguments, 18531 value = args[0]; 18532 18533 if (wrapper && args.length == 1 && isArray(value)) { 18534 return wrapper.plant(value).value(); 18535 } 18536 var index = 0, 18537 result = length ? funcs[index].apply(this, args) : value; 18538 18539 while (++index < length) { 18540 result = funcs[index].call(this, result); 18541 } 18542 return result; 18543 }; 18544 }); 18545 } 18546 18547 /** 18548 * Creates a function that wraps `func` to invoke it with optional `this` 18549 * binding of `thisArg`, partial application, and currying. 18550 * 18551 * @private 18552 * @param {Function|string} func The function or method name to wrap. 18553 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 18554 * @param {*} [thisArg] The `this` binding of `func`. 18555 * @param {Array} [partials] The arguments to prepend to those provided to 18556 * the new function. 18557 * @param {Array} [holders] The `partials` placeholder indexes. 18558 * @param {Array} [partialsRight] The arguments to append to those provided 18559 * to the new function. 18560 * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. 18561 * @param {Array} [argPos] The argument positions of the new function. 18562 * @param {number} [ary] The arity cap of `func`. 18563 * @param {number} [arity] The arity of `func`. 18564 * @returns {Function} Returns the new wrapped function. 18565 */ 18566 function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { 18567 var isAry = bitmask & WRAP_ARY_FLAG, 18568 isBind = bitmask & WRAP_BIND_FLAG, 18569 isBindKey = bitmask & WRAP_BIND_KEY_FLAG, 18570 isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), 18571 isFlip = bitmask & WRAP_FLIP_FLAG, 18572 Ctor = isBindKey ? undefined : createCtor(func); 18573 18574 function wrapper() { 18575 var length = arguments.length, 18576 args = Array(length), 18577 index = length; 18578 18579 while (index--) { 18580 args[index] = arguments[index]; 18581 } 18582 if (isCurried) { 18583 var placeholder = getHolder(wrapper), 18584 holdersCount = countHolders(args, placeholder); 18585 } 18586 if (partials) { 18587 args = composeArgs(args, partials, holders, isCurried); 18588 } 18589 if (partialsRight) { 18590 args = composeArgsRight(args, partialsRight, holdersRight, isCurried); 18591 } 18592 length -= holdersCount; 18593 if (isCurried && length < arity) { 18594 var newHolders = replaceHolders(args, placeholder); 18595 return createRecurry( 18596 func, bitmask, createHybrid, wrapper.placeholder, thisArg, 18597 args, newHolders, argPos, ary, arity - length 18598 ); 18599 } 18600 var thisBinding = isBind ? thisArg : this, 18601 fn = isBindKey ? thisBinding[func] : func; 18602 18603 length = args.length; 18604 if (argPos) { 18605 args = reorder(args, argPos); 18606 } else if (isFlip && length > 1) { 18607 args.reverse(); 18608 } 18609 if (isAry && ary < length) { 18610 args.length = ary; 18611 } 18612 if (this && this !== root && this instanceof wrapper) { 18613 fn = Ctor || createCtor(fn); 18614 } 18615 return fn.apply(thisBinding, args); 18616 } 18617 return wrapper; 18618 } 18619 18620 /** 18621 * Creates a function like `_.invertBy`. 18622 * 18623 * @private 18624 * @param {Function} setter The function to set accumulator values. 18625 * @param {Function} toIteratee The function to resolve iteratees. 18626 * @returns {Function} Returns the new inverter function. 18627 */ 18628 function createInverter(setter, toIteratee) { 18629 return function(object, iteratee) { 18630 return baseInverter(object, setter, toIteratee(iteratee), {}); 18631 }; 18632 } 18633 18634 /** 18635 * Creates a function that performs a mathematical operation on two values. 18636 * 18637 * @private 18638 * @param {Function} operator The function to perform the operation. 18639 * @param {number} [defaultValue] The value used for `undefined` arguments. 18640 * @returns {Function} Returns the new mathematical operation function. 18641 */ 18642 function createMathOperation(operator, defaultValue) { 18643 return function(value, other) { 18644 var result; 18645 if (value === undefined && other === undefined) { 18646 return defaultValue; 18647 } 18648 if (value !== undefined) { 18649 result = value; 18650 } 18651 if (other !== undefined) { 18652 if (result === undefined) { 18653 return other; 18654 } 18655 if (typeof value == 'string' || typeof other == 'string') { 18656 value = baseToString(value); 18657 other = baseToString(other); 18658 } else { 18659 value = baseToNumber(value); 18660 other = baseToNumber(other); 18661 } 18662 result = operator(value, other); 18663 } 18664 return result; 18665 }; 18666 } 18667 18668 /** 18669 * Creates a function like `_.over`. 18670 * 18671 * @private 18672 * @param {Function} arrayFunc The function to iterate over iteratees. 18673 * @returns {Function} Returns the new over function. 18674 */ 18675 function createOver(arrayFunc) { 18676 return flatRest(function(iteratees) { 18677 iteratees = arrayMap(iteratees, baseUnary(getIteratee())); 18678 return baseRest(function(args) { 18679 var thisArg = this; 18680 return arrayFunc(iteratees, function(iteratee) { 18681 return apply(iteratee, thisArg, args); 18682 }); 18683 }); 18684 }); 18685 } 18686 18687 /** 18688 * Creates the padding for `string` based on `length`. The `chars` string 18689 * is truncated if the number of characters exceeds `length`. 18690 * 18691 * @private 18692 * @param {number} length The padding length. 18693 * @param {string} [chars=' '] The string used as padding. 18694 * @returns {string} Returns the padding for `string`. 18695 */ 18696 function createPadding(length, chars) { 18697 chars = chars === undefined ? ' ' : baseToString(chars); 18698 18699 var charsLength = chars.length; 18700 if (charsLength < 2) { 18701 return charsLength ? baseRepeat(chars, length) : chars; 18702 } 18703 var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); 18704 return hasUnicode(chars) 18705 ? castSlice(stringToArray(result), 0, length).join('') 18706 : result.slice(0, length); 18707 } 18708 18709 /** 18710 * Creates a function that wraps `func` to invoke it with the `this` binding 18711 * of `thisArg` and `partials` prepended to the arguments it receives. 18712 * 18713 * @private 18714 * @param {Function} func The function to wrap. 18715 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 18716 * @param {*} thisArg The `this` binding of `func`. 18717 * @param {Array} partials The arguments to prepend to those provided to 18718 * the new function. 18719 * @returns {Function} Returns the new wrapped function. 18720 */ 18721 function createPartial(func, bitmask, thisArg, partials) { 18722 var isBind = bitmask & WRAP_BIND_FLAG, 18723 Ctor = createCtor(func); 18724 18725 function wrapper() { 18726 var argsIndex = -1, 18727 argsLength = arguments.length, 18728 leftIndex = -1, 18729 leftLength = partials.length, 18730 args = Array(leftLength + argsLength), 18731 fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; 18732 18733 while (++leftIndex < leftLength) { 18734 args[leftIndex] = partials[leftIndex]; 18735 } 18736 while (argsLength--) { 18737 args[leftIndex++] = arguments[++argsIndex]; 18738 } 18739 return apply(fn, isBind ? thisArg : this, args); 18740 } 18741 return wrapper; 18742 } 18743 18744 /** 18745 * Creates a `_.range` or `_.rangeRight` function. 18746 * 18747 * @private 18748 * @param {boolean} [fromRight] Specify iterating from right to left. 18749 * @returns {Function} Returns the new range function. 18750 */ 18751 function createRange(fromRight) { 18752 return function(start, end, step) { 18753 if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { 18754 end = step = undefined; 18755 } 18756 // Ensure the sign of `-0` is preserved. 18757 start = toFinite(start); 18758 if (end === undefined) { 18759 end = start; 18760 start = 0; 18761 } else { 18762 end = toFinite(end); 18763 } 18764 step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); 18765 return baseRange(start, end, step, fromRight); 18766 }; 18767 } 18768 18769 /** 18770 * Creates a function that performs a relational operation on two values. 18771 * 18772 * @private 18773 * @param {Function} operator The function to perform the operation. 18774 * @returns {Function} Returns the new relational operation function. 18775 */ 18776 function createRelationalOperation(operator) { 18777 return function(value, other) { 18778 if (!(typeof value == 'string' && typeof other == 'string')) { 18779 value = toNumber(value); 18780 other = toNumber(other); 18781 } 18782 return operator(value, other); 18783 }; 18784 } 18785 18786 /** 18787 * Creates a function that wraps `func` to continue currying. 18788 * 18789 * @private 18790 * @param {Function} func The function to wrap. 18791 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 18792 * @param {Function} wrapFunc The function to create the `func` wrapper. 18793 * @param {*} placeholder The placeholder value. 18794 * @param {*} [thisArg] The `this` binding of `func`. 18795 * @param {Array} [partials] The arguments to prepend to those provided to 18796 * the new function. 18797 * @param {Array} [holders] The `partials` placeholder indexes. 18798 * @param {Array} [argPos] The argument positions of the new function. 18799 * @param {number} [ary] The arity cap of `func`. 18800 * @param {number} [arity] The arity of `func`. 18801 * @returns {Function} Returns the new wrapped function. 18802 */ 18803 function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { 18804 var isCurry = bitmask & WRAP_CURRY_FLAG, 18805 newHolders = isCurry ? holders : undefined, 18806 newHoldersRight = isCurry ? undefined : holders, 18807 newPartials = isCurry ? partials : undefined, 18808 newPartialsRight = isCurry ? undefined : partials; 18809 18810 bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); 18811 bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); 18812 18813 if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { 18814 bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); 18815 } 18816 var newData = [ 18817 func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, 18818 newHoldersRight, argPos, ary, arity 18819 ]; 18820 18821 var result = wrapFunc.apply(undefined, newData); 18822 if (isLaziable(func)) { 18823 setData(result, newData); 18824 } 18825 result.placeholder = placeholder; 18826 return setWrapToString(result, func, bitmask); 18827 } 18828 18829 /** 18830 * Creates a function like `_.round`. 18831 * 18832 * @private 18833 * @param {string} methodName The name of the `Math` method to use when rounding. 18834 * @returns {Function} Returns the new round function. 18835 */ 18836 function createRound(methodName) { 18837 var func = Math[methodName]; 18838 return function(number, precision) { 18839 number = toNumber(number); 18840 precision = precision == null ? 0 : nativeMin(toInteger(precision), 292); 18841 if (precision && nativeIsFinite(number)) { 18842 // Shift with exponential notation to avoid floating-point issues. 18843 // See [MDN](https://mdn.io/round#Examples) for more details. 18844 var pair = (toString(number) + 'e').split('e'), 18845 value = func(pair[0] + 'e' + (+pair[1] + precision)); 18846 18847 pair = (toString(value) + 'e').split('e'); 18848 return +(pair[0] + 'e' + (+pair[1] - precision)); 18849 } 18850 return func(number); 18851 }; 18852 } 18853 18854 /** 18855 * Creates a set object of `values`. 18856 * 18857 * @private 18858 * @param {Array} values The values to add to the set. 18859 * @returns {Object} Returns the new set. 18860 */ 18861 var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { 18862 return new Set(values); 18863 }; 18864 18865 /** 18866 * Creates a `_.toPairs` or `_.toPairsIn` function. 18867 * 18868 * @private 18869 * @param {Function} keysFunc The function to get the keys of a given object. 18870 * @returns {Function} Returns the new pairs function. 18871 */ 18872 function createToPairs(keysFunc) { 18873 return function(object) { 18874 var tag = getTag(object); 18875 if (tag == mapTag) { 18876 return mapToArray(object); 18877 } 18878 if (tag == setTag) { 18879 return setToPairs(object); 18880 } 18881 return baseToPairs(object, keysFunc(object)); 18882 }; 18883 } 18884 18885 /** 18886 * Creates a function that either curries or invokes `func` with optional 18887 * `this` binding and partially applied arguments. 18888 * 18889 * @private 18890 * @param {Function|string} func The function or method name to wrap. 18891 * @param {number} bitmask The bitmask flags. 18892 * 1 - `_.bind` 18893 * 2 - `_.bindKey` 18894 * 4 - `_.curry` or `_.curryRight` of a bound function 18895 * 8 - `_.curry` 18896 * 16 - `_.curryRight` 18897 * 32 - `_.partial` 18898 * 64 - `_.partialRight` 18899 * 128 - `_.rearg` 18900 * 256 - `_.ary` 18901 * 512 - `_.flip` 18902 * @param {*} [thisArg] The `this` binding of `func`. 18903 * @param {Array} [partials] The arguments to be partially applied. 18904 * @param {Array} [holders] The `partials` placeholder indexes. 18905 * @param {Array} [argPos] The argument positions of the new function. 18906 * @param {number} [ary] The arity cap of `func`. 18907 * @param {number} [arity] The arity of `func`. 18908 * @returns {Function} Returns the new wrapped function. 18909 */ 18910 function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { 18911 var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; 18912 if (!isBindKey && typeof func != 'function') { 18913 throw new TypeError(FUNC_ERROR_TEXT); 18914 } 18915 var length = partials ? partials.length : 0; 18916 if (!length) { 18917 bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); 18918 partials = holders = undefined; 18919 } 18920 ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); 18921 arity = arity === undefined ? arity : toInteger(arity); 18922 length -= holders ? holders.length : 0; 18923 18924 if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { 18925 var partialsRight = partials, 18926 holdersRight = holders; 18927 18928 partials = holders = undefined; 18929 } 18930 var data = isBindKey ? undefined : getData(func); 18931 18932 var newData = [ 18933 func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, 18934 argPos, ary, arity 18935 ]; 18936 18937 if (data) { 18938 mergeData(newData, data); 18939 } 18940 func = newData[0]; 18941 bitmask = newData[1]; 18942 thisArg = newData[2]; 18943 partials = newData[3]; 18944 holders = newData[4]; 18945 arity = newData[9] = newData[9] === undefined 18946 ? (isBindKey ? 0 : func.length) 18947 : nativeMax(newData[9] - length, 0); 18948 18949 if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { 18950 bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); 18951 } 18952 if (!bitmask || bitmask == WRAP_BIND_FLAG) { 18953 var result = createBind(func, bitmask, thisArg); 18954 } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { 18955 result = createCurry(func, bitmask, arity); 18956 } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { 18957 result = createPartial(func, bitmask, thisArg, partials); 18958 } else { 18959 result = createHybrid.apply(undefined, newData); 18960 } 18961 var setter = data ? baseSetData : setData; 18962 return setWrapToString(setter(result, newData), func, bitmask); 18963 } 18964 18965 /** 18966 * Used by `_.defaults` to customize its `_.assignIn` use to assign properties 18967 * of source objects to the destination object for all destination properties 18968 * that resolve to `undefined`. 18969 * 18970 * @private 18971 * @param {*} objValue The destination value. 18972 * @param {*} srcValue The source value. 18973 * @param {string} key The key of the property to assign. 18974 * @param {Object} object The parent object of `objValue`. 18975 * @returns {*} Returns the value to assign. 18976 */ 18977 function customDefaultsAssignIn(objValue, srcValue, key, object) { 18978 if (objValue === undefined || 18979 (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) { 18980 return srcValue; 18981 } 18982 return objValue; 18983 } 18984 18985 /** 18986 * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source 18987 * objects into destination objects that are passed thru. 18988 * 18989 * @private 18990 * @param {*} objValue The destination value. 18991 * @param {*} srcValue The source value. 18992 * @param {string} key The key of the property to merge. 18993 * @param {Object} object The parent object of `objValue`. 18994 * @param {Object} source The parent object of `srcValue`. 18995 * @param {Object} [stack] Tracks traversed source values and their merged 18996 * counterparts. 18997 * @returns {*} Returns the value to assign. 18998 */ 18999 function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { 19000 if (isObject(objValue) && isObject(srcValue)) { 19001 // Recursively merge objects and arrays (susceptible to call stack limits). 19002 stack.set(srcValue, objValue); 19003 baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); 19004 stack['delete'](srcValue); 19005 } 19006 return objValue; 19007 } 19008 19009 /** 19010 * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain 19011 * objects. 19012 * 19013 * @private 19014 * @param {*} value The value to inspect. 19015 * @param {string} key The key of the property to inspect. 19016 * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. 19017 */ 19018 function customOmitClone(value) { 19019 return isPlainObject(value) ? undefined : value; 19020 } 19021 19022 /** 19023 * A specialized version of `baseIsEqualDeep` for arrays with support for 19024 * partial deep comparisons. 19025 * 19026 * @private 19027 * @param {Array} array The array to compare. 19028 * @param {Array} other The other array to compare. 19029 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. 19030 * @param {Function} customizer The function to customize comparisons. 19031 * @param {Function} equalFunc The function to determine equivalents of values. 19032 * @param {Object} stack Tracks traversed `array` and `other` objects. 19033 * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. 19034 */ 19035 function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { 19036 var isPartial = bitmask & COMPARE_PARTIAL_FLAG, 19037 arrLength = array.length, 19038 othLength = other.length; 19039 19040 if (arrLength != othLength && !(isPartial && othLength > arrLength)) { 19041 return false; 19042 } 19043 // Check that cyclic values are equal. 19044 var arrStacked = stack.get(array); 19045 var othStacked = stack.get(other); 19046 if (arrStacked && othStacked) { 19047 return arrStacked == other && othStacked == array; 19048 } 19049 var index = -1, 19050 result = true, 19051 seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; 19052 19053 stack.set(array, other); 19054 stack.set(other, array); 19055 19056 // Ignore non-index properties. 19057 while (++index < arrLength) { 19058 var arrValue = array[index], 19059 othValue = other[index]; 19060 19061 if (customizer) { 19062 var compared = isPartial 19063 ? customizer(othValue, arrValue, index, other, array, stack) 19064 : customizer(arrValue, othValue, index, array, other, stack); 19065 } 19066 if (compared !== undefined) { 19067 if (compared) { 19068 continue; 19069 } 19070 result = false; 19071 break; 19072 } 19073 // Recursively compare arrays (susceptible to call stack limits). 19074 if (seen) { 19075 if (!arraySome(other, function(othValue, othIndex) { 19076 if (!cacheHas(seen, othIndex) && 19077 (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { 19078 return seen.push(othIndex); 19079 } 19080 })) { 19081 result = false;
vendor: 4,179 bytes, lines 19082-19193
19082 break; 19083 } 19084 } else if (!( 19085 arrValue === othValue || 19086 equalFunc(arrValue, othValue, bitmask, customizer, stack) 19087 )) { 19088 result = false; 19089 break; 19090 } 19091 } 19092 stack['delete'](array); 19093 stack['delete'](other); 19094 return result; 19095 } 19096 19097 /** 19098 * A specialized version of `baseIsEqualDeep` for comparing objects of 19099 * the same `toStringTag`. 19100 * 19101 * **Note:** This function only supports comparing values with tags of 19102 * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. 19103 * 19104 * @private 19105 * @param {Object} object The object to compare. 19106 * @param {Object} other The other object to compare. 19107 * @param {string} tag The `toStringTag` of the objects to compare. 19108 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. 19109 * @param {Function} customizer The function to customize comparisons. 19110 * @param {Function} equalFunc The function to determine equivalents of values. 19111 * @param {Object} stack Tracks traversed `object` and `other` objects. 19112 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. 19113 */ 19114 function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { 19115 switch (tag) { 19116 case dataViewTag: 19117 if ((object.byteLength != other.byteLength) || 19118 (object.byteOffset != other.byteOffset)) { 19119 return false; 19120 } 19121 object = object.buffer; 19122 other = other.buffer; 19123 19124 case arrayBufferTag: 19125 if ((object.byteLength != other.byteLength) || 19126 !equalFunc(new Uint8Array(object), new Uint8Array(other))) { 19127 return false; 19128 } 19129 return true; 19130 19131 case boolTag: 19132 case dateTag: 19133 case numberTag: 19134 // Coerce booleans to `1` or `0` and dates to milliseconds. 19135 // Invalid dates are coerced to `NaN`. 19136 return eq(+object, +other); 19137 19138 case errorTag: 19139 return object.name == other.name && object.message == other.message; 19140 19141 case regexpTag: 19142 case stringTag: 19143 // Coerce regexes to strings and treat strings, primitives and objects, 19144 // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring 19145 // for more details. 19146 return object == (other + ''); 19147 19148 case mapTag: 19149 var convert = mapToArray; 19150 19151 case setTag: 19152 var isPartial = bitmask & COMPARE_PARTIAL_FLAG; 19153 convert || (convert = setToArray); 19154 19155 if (object.size != other.size && !isPartial) { 19156 return false; 19157 } 19158 // Assume cyclic values are equal. 19159 var stacked = stack.get(object); 19160 if (stacked) { 19161 return stacked == other; 19162 } 19163 bitmask |= COMPARE_UNORDERED_FLAG; 19164 19165 // Recursively compare objects (susceptible to call stack limits). 19166 stack.set(object, other); 19167 var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); 19168 stack['delete'](object); 19169 return result; 19170 19171 case symbolTag: 19172 if (symbolValueOf) { 19173 return symbolValueOf.call(object) == symbolValueOf.call(other); 19174 } 19175 } 19176 return false; 19177 } 19178 19179 /** 19180 * A specialized version of `baseIsEqualDeep` for objects with support for 19181 * partial deep comparisons. 19182 * 19183 * @private 19184 * @param {Object} object The object to compare. 19185 * @param {Object} other The other object to compare. 19186 * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. 19187 * @param {Function} customizer The function to customize comparisons. 19188 * @param {Function} equalFunc The function to determine equivalents of values. 19189 * @param {Object} stack Tracks traversed `object` and `other` objects. 19190 * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. 19191 */ 19192 function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { 19193 var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
vendor: 9,614 bytes, lines 19194-19501
19194 objProps = getAllKeys(object), 19195 objLength = objProps.length, 19196 othProps = getAllKeys(other), 19197 othLength = othProps.length; 19198 19199 if (objLength != othLength && !isPartial) { 19200 return false; 19201 } 19202 var index = objLength; 19203 while (index--) { 19204 var key = objProps[index]; 19205 if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { 19206 return false; 19207 } 19208 } 19209 // Check that cyclic values are equal. 19210 var objStacked = stack.get(object); 19211 var othStacked = stack.get(other); 19212 if (objStacked && othStacked) { 19213 return objStacked == other && othStacked == object; 19214 } 19215 var result = true; 19216 stack.set(object, other); 19217 stack.set(other, object); 19218 19219 var skipCtor = isPartial; 19220 while (++index < objLength) { 19221 key = objProps[index]; 19222 var objValue = object[key], 19223 othValue = other[key]; 19224 19225 if (customizer) { 19226 var compared = isPartial 19227 ? customizer(othValue, objValue, key, other, object, stack) 19228 : customizer(objValue, othValue, key, object, other, stack); 19229 } 19230 // Recursively compare objects (susceptible to call stack limits). 19231 if (!(compared === undefined 19232 ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) 19233 : compared 19234 )) { 19235 result = false; 19236 break; 19237 } 19238 skipCtor || (skipCtor = key == 'constructor'); 19239 } 19240 if (result && !skipCtor) { 19241 var objCtor = object.constructor, 19242 othCtor = other.constructor; 19243 19244 // Non `Object` object instances with different constructors are not equal. 19245 if (objCtor != othCtor && 19246 ('constructor' in object && 'constructor' in other) && 19247 !(typeof objCtor == 'function' && objCtor instanceof objCtor && 19248 typeof othCtor == 'function' && othCtor instanceof othCtor)) { 19249 result = false; 19250 } 19251 } 19252 stack['delete'](object); 19253 stack['delete'](other); 19254 return result; 19255 } 19256 19257 /** 19258 * A specialized version of `baseRest` which flattens the rest array. 19259 * 19260 * @private 19261 * @param {Function} func The function to apply a rest parameter to. 19262 * @returns {Function} Returns the new function. 19263 */ 19264 function flatRest(func) { 19265 return setToString(overRest(func, undefined, flatten), func + ''); 19266 } 19267 19268 /** 19269 * Creates an array of own enumerable property names and symbols of `object`. 19270 * 19271 * @private 19272 * @param {Object} object The object to query. 19273 * @returns {Array} Returns the array of property names and symbols. 19274 */ 19275 function getAllKeys(object) { 19276 return baseGetAllKeys(object, keys, getSymbols); 19277 } 19278 19279 /** 19280 * Creates an array of own and inherited enumerable property names and 19281 * symbols of `object`. 19282 * 19283 * @private 19284 * @param {Object} object The object to query. 19285 * @returns {Array} Returns the array of property names and symbols. 19286 */ 19287 function getAllKeysIn(object) { 19288 return baseGetAllKeys(object, keysIn, getSymbolsIn); 19289 } 19290 19291 /** 19292 * Gets metadata for `func`. 19293 * 19294 * @private 19295 * @param {Function} func The function to query. 19296 * @returns {*} Returns the metadata for `func`. 19297 */ 19298 var getData = !metaMap ? noop : function(func) { 19299 return metaMap.get(func); 19300 }; 19301 19302 /** 19303 * Gets the name of `func`. 19304 * 19305 * @private 19306 * @param {Function} func The function to query. 19307 * @returns {string} Returns the function name. 19308 */ 19309 function getFuncName(func) { 19310 var result = (func.name + ''), 19311 array = realNames[result], 19312 length = hasOwnProperty.call(realNames, result) ? array.length : 0; 19313 19314 while (length--) { 19315 var data = array[length], 19316 otherFunc = data.func; 19317 if (otherFunc == null || otherFunc == func) { 19318 return data.name; 19319 } 19320 } 19321 return result; 19322 } 19323 19324 /** 19325 * Gets the argument placeholder value for `func`. 19326 * 19327 * @private 19328 * @param {Function} func The function to inspect. 19329 * @returns {*} Returns the placeholder value. 19330 */ 19331 function getHolder(func) { 19332 var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; 19333 return object.placeholder; 19334 } 19335 19336 /** 19337 * Gets the appropriate "iteratee" function. If `_.iteratee` is customized, 19338 * this function returns the custom method, otherwise it returns `baseIteratee`. 19339 * If arguments are provided, the chosen function is invoked with them and 19340 * its result is returned. 19341 * 19342 * @private 19343 * @param {*} [value] The value to convert to an iteratee. 19344 * @param {number} [arity] The arity of the created iteratee. 19345 * @returns {Function} Returns the chosen function or its result. 19346 */ 19347 function getIteratee() { 19348 var result = lodash.iteratee || iteratee; 19349 result = result === iteratee ? baseIteratee : result; 19350 return arguments.length ? result(arguments[0], arguments[1]) : result; 19351 } 19352 19353 /** 19354 * Gets the data for `map`. 19355 * 19356 * @private 19357 * @param {Object} map The map to query. 19358 * @param {string} key The reference key. 19359 * @returns {*} Returns the map data. 19360 */ 19361 function getMapData(map, key) { 19362 var data = map.__data__; 19363 return isKeyable(key) 19364 ? data[typeof key == 'string' ? 'string' : 'hash'] 19365 : data.map; 19366 } 19367 19368 /** 19369 * Gets the property names, values, and compare flags of `object`. 19370 * 19371 * @private 19372 * @param {Object} object The object to query. 19373 * @returns {Array} Returns the match data of `object`. 19374 */ 19375 function getMatchData(object) { 19376 var result = keys(object), 19377 length = result.length; 19378 19379 while (length--) { 19380 var key = result[length], 19381 value = object[key]; 19382 19383 result[length] = [key, value, isStrictComparable(value)]; 19384 } 19385 return result; 19386 } 19387 19388 /** 19389 * Gets the native function at `key` of `object`. 19390 * 19391 * @private 19392 * @param {Object} object The object to query. 19393 * @param {string} key The key of the method to get. 19394 * @returns {*} Returns the function if it's native, else `undefined`. 19395 */ 19396 function getNative(object, key) { 19397 var value = getValue(object, key); 19398 return baseIsNative(value) ? value : undefined; 19399 } 19400 19401 /** 19402 * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. 19403 * 19404 * @private 19405 * @param {*} value The value to query. 19406 * @returns {string} Returns the raw `toStringTag`. 19407 */ 19408 function getRawTag(value) { 19409 var isOwn = hasOwnProperty.call(value, symToStringTag), 19410 tag = value[symToStringTag]; 19411 19412 try { 19413 value[symToStringTag] = undefined; 19414 var unmasked = true; 19415 } catch (e) {} 19416 19417 var result = nativeObjectToString.call(value); 19418 if (unmasked) { 19419 if (isOwn) { 19420 value[symToStringTag] = tag; 19421 } else { 19422 delete value[symToStringTag]; 19423 } 19424 } 19425 return result; 19426 } 19427 19428 /** 19429 * Creates an array of the own enumerable symbols of `object`. 19430 * 19431 * @private 19432 * @param {Object} object The object to query. 19433 * @returns {Array} Returns the array of symbols. 19434 */ 19435 var getSymbols = !nativeGetSymbols ? stubArray : function(object) { 19436 if (object == null) { 19437 return []; 19438 } 19439 object = Object(object); 19440 return arrayFilter(nativeGetSymbols(object), function(symbol) { 19441 return propertyIsEnumerable.call(object, symbol); 19442 }); 19443 }; 19444 19445 /** 19446 * Creates an array of the own and inherited enumerable symbols of `object`. 19447 * 19448 * @private 19449 * @param {Object} object The object to query. 19450 * @returns {Array} Returns the array of symbols. 19451 */ 19452 var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { 19453 var result = []; 19454 while (object) { 19455 arrayPush(result, getSymbols(object)); 19456 object = getPrototype(object); 19457 } 19458 return result; 19459 }; 19460 19461 /** 19462 * Gets the `toStringTag` of `value`. 19463 * 19464 * @private 19465 * @param {*} value The value to query. 19466 * @returns {string} Returns the `toStringTag`. 19467 */ 19468 var getTag = baseGetTag; 19469 19470 // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. 19471 if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || 19472 (Map && getTag(new Map) != mapTag) || 19473 (Promise && getTag(Promise.resolve()) != promiseTag) || 19474 (Set && getTag(new Set) != setTag) || 19475 (WeakMap && getTag(new WeakMap) != weakMapTag)) { 19476 getTag = function(value) { 19477 var result = baseGetTag(value), 19478 Ctor = result == objectTag ? value.constructor : undefined, 19479 ctorString = Ctor ? toSource(Ctor) : ''; 19480 19481 if (ctorString) { 19482 switch (ctorString) { 19483 case dataViewCtorString: return dataViewTag; 19484 case mapCtorString: return mapTag; 19485 case promiseCtorString: return promiseTag; 19486 case setCtorString: return setTag; 19487 case weakMapCtorString: return weakMapTag; 19488 } 19489 } 19490 return result; 19491 }; 19492 } 19493 19494 /** 19495 * Gets the view, applying any `transforms` to the `start` and `end` positions. 19496 * 19497 * @private 19498 * @param {number} start The start of the view. 19499 * @param {number} end The end of the view. 19500 * @param {Array} transforms The transformations to apply to the view. 19501 * @returns {Object}
vendor: 6,432 bytes, lines 19501-19706
19501 Returns an object containing the `start` and `end` 19502 * positions of the view. 19503 */ 19504 function getView(start, end, transforms) { 19505 var index = -1, 19506 length = transforms.length; 19507 19508 while (++index < length) { 19509 var data = transforms[index], 19510 size = data.size; 19511 19512 switch (data.type) { 19513 case 'drop': start += size; break; 19514 case 'dropRight': end -= size; break; 19515 case 'take': end = nativeMin(end, start + size); break; 19516 case 'takeRight': start = nativeMax(start, end - size); break; 19517 } 19518 } 19519 return { 'start': start, 'end': end }; 19520 } 19521 19522 /** 19523 * Extracts wrapper details from the `source` body comment. 19524 * 19525 * @private 19526 * @param {string} source The source to inspect. 19527 * @returns {Array} Returns the wrapper details. 19528 */ 19529 function getWrapDetails(source) { 19530 var match = source.match(reWrapDetails); 19531 return match ? match[1].split(reSplitDetails) : []; 19532 } 19533 19534 /** 19535 * Checks if `path` exists on `object`. 19536 * 19537 * @private 19538 * @param {Object} object The object to query. 19539 * @param {Array|string} path The path to check. 19540 * @param {Function} hasFunc The function to check properties. 19541 * @returns {boolean} Returns `true` if `path` exists, else `false`. 19542 */ 19543 function hasPath(object, path, hasFunc) { 19544 path = castPath(path, object); 19545 19546 var index = -1, 19547 length = path.length, 19548 result = false; 19549 19550 while (++index < length) { 19551 var key = toKey(path[index]); 19552 if (!(result = object != null && hasFunc(object, key))) { 19553 break; 19554 } 19555 object = object[key]; 19556 } 19557 if (result || ++index != length) { 19558 return result; 19559 } 19560 length = object == null ? 0 : object.length; 19561 return !!length && isLength(length) && isIndex(key, length) && 19562 (isArray(object) || isArguments(object)); 19563 } 19564 19565 /** 19566 * Initializes an array clone. 19567 * 19568 * @private 19569 * @param {Array} array The array to clone. 19570 * @returns {Array} Returns the initialized clone. 19571 */ 19572 function initCloneArray(array) { 19573 var length = array.length, 19574 result = new array.constructor(length); 19575 19576 // Add properties assigned by `RegExp#exec`. 19577 if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { 19578 result.index = array.index; 19579 result.input = array.input; 19580 } 19581 return result; 19582 } 19583 19584 /** 19585 * Initializes an object clone. 19586 * 19587 * @private 19588 * @param {Object} object The object to clone. 19589 * @returns {Object} Returns the initialized clone. 19590 */ 19591 function initCloneObject(object) { 19592 return (typeof object.constructor == 'function' && !isPrototype(object)) 19593 ? baseCreate(getPrototype(object)) 19594 : {}; 19595 } 19596 19597 /** 19598 * Initializes an object clone based on its `toStringTag`. 19599 * 19600 * **Note:** This function only supports cloning values with tags of 19601 * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. 19602 * 19603 * @private 19604 * @param {Object} object The object to clone. 19605 * @param {string} tag The `toStringTag` of the object to clone. 19606 * @param {boolean} [isDeep] Specify a deep clone. 19607 * @returns {Object} Returns the initialized clone. 19608 */ 19609 function initCloneByTag(object, tag, isDeep) { 19610 var Ctor = object.constructor; 19611 switch (tag) { 19612 case arrayBufferTag: 19613 return cloneArrayBuffer(object); 19614 19615 case boolTag: 19616 case dateTag: 19617 return new Ctor(+object); 19618 19619 case dataViewTag: 19620 return cloneDataView(object, isDeep); 19621 19622 case float32Tag: case float64Tag: 19623 case int8Tag: case int16Tag: case int32Tag: 19624 case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: 19625 return cloneTypedArray(object, isDeep); 19626 19627 case mapTag: 19628 return new Ctor; 19629 19630 case numberTag: 19631 case stringTag: 19632 return new Ctor(object); 19633 19634 case regexpTag: 19635 return cloneRegExp(object); 19636 19637 case setTag: 19638 return new Ctor; 19639 19640 case symbolTag: 19641 return cloneSymbol(object); 19642 } 19643 } 19644 19645 /** 19646 * Inserts wrapper `details` in a comment at the top of the `source` body. 19647 * 19648 * @private 19649 * @param {string} source The source to modify. 19650 * @returns {Array} details The details to insert. 19651 * @returns {string} Returns the modified source. 19652 */ 19653 function insertWrapDetails(source, details) { 19654 var length = details.length; 19655 if (!length) { 19656 return source; 19657 } 19658 var lastIndex = length - 1; 19659 details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; 19660 details = details.join(length > 2 ? ', ' : ' '); 19661 return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); 19662 } 19663 19664 /** 19665 * Checks if `value` is a flattenable `arguments` object or array. 19666 * 19667 * @private 19668 * @param {*} value The value to check. 19669 * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. 19670 */ 19671 function isFlattenable(value) { 19672 return isArray(value) || isArguments(value) || 19673 !!(spreadableSymbol && value && value[spreadableSymbol]); 19674 } 19675 19676 /** 19677 * Checks if `value` is a valid array-like index. 19678 * 19679 * @private 19680 * @param {*} value The value to check. 19681 * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. 19682 * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. 19683 */ 19684 function isIndex(value, length) { 19685 var type = typeof value; 19686 length = length == null ? MAX_SAFE_INTEGER : length; 19687 19688 return !!length && 19689 (type == 'number' || 19690 (type != 'symbol' && reIsUint.test(value))) && 19691 (value > -1 && value % 1 == 0 && value < length); 19692 } 19693 19694 /** 19695 * Checks if the given arguments are from an iteratee call. 19696 * 19697 * @private 19698 * @param {*} value The potential iteratee value argument. 19699 * @param {*} index The potential iteratee index or key argument. 19700 * @param {*} object The potential iteratee object argument. 19701 * @returns {boolean} Returns `true` if the arguments are from an iteratee call, 19702 * else `false`. 19703 */ 19704 function isIterateeCall(value, index, object) { 19705 if (!isObject(object)) { 19706 return false;
vendor: 14,387 bytes, lines 19707-20153
19707 } 19708 var type = typeof index; 19709 if (type == 'number' 19710 ? (isArrayLike(object) && isIndex(index, object.length)) 19711 : (type == 'string' && index in object) 19712 ) { 19713 return eq(object[index], value); 19714 } 19715 return false; 19716 } 19717 19718 /** 19719 * Checks if `value` is a property name and not a property path. 19720 * 19721 * @private 19722 * @param {*} value The value to check. 19723 * @param {Object} [object] The object to query keys on. 19724 * @returns {boolean} Returns `true` if `value` is a property name, else `false`. 19725 */ 19726 function isKey(value, object) { 19727 if (isArray(value)) { 19728 return false; 19729 } 19730 var type = typeof value; 19731 if (type == 'number' || type == 'symbol' || type == 'boolean' || 19732 value == null || isSymbol(value)) { 19733 return true; 19734 } 19735 return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || 19736 (object != null && value in Object(object)); 19737 } 19738 19739 /** 19740 * Checks if `value` is suitable for use as unique object key. 19741 * 19742 * @private 19743 * @param {*} value The value to check. 19744 * @returns {boolean} Returns `true` if `value` is suitable, else `false`. 19745 */ 19746 function isKeyable(value) { 19747 var type = typeof value; 19748 return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') 19749 ? (value !== '__proto__') 19750 : (value === null); 19751 } 19752 19753 /** 19754 * Checks if `func` has a lazy counterpart. 19755 * 19756 * @private 19757 * @param {Function} func The function to check. 19758 * @returns {boolean} Returns `true` if `func` has a lazy counterpart, 19759 * else `false`. 19760 */ 19761 function isLaziable(func) { 19762 var funcName = getFuncName(func), 19763 other = lodash[funcName]; 19764 19765 if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { 19766 return false; 19767 } 19768 if (func === other) { 19769 return true; 19770 } 19771 var data = getData(other); 19772 return !!data && func === data[0]; 19773 } 19774 19775 /** 19776 * Checks if `func` has its source masked. 19777 * 19778 * @private 19779 * @param {Function} func The function to check. 19780 * @returns {boolean} Returns `true` if `func` is masked, else `false`. 19781 */ 19782 function isMasked(func) { 19783 return !!maskSrcKey && (maskSrcKey in func); 19784 } 19785 19786 /** 19787 * Checks if `func` is capable of being masked. 19788 * 19789 * @private 19790 * @param {*} value The value to check. 19791 * @returns {boolean} Returns `true` if `func` is maskable, else `false`. 19792 */ 19793 var isMaskable = coreJsData ? isFunction : stubFalse; 19794 19795 /** 19796 * Checks if `value` is likely a prototype object. 19797 * 19798 * @private 19799 * @param {*} value The value to check. 19800 * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. 19801 */ 19802 function isPrototype(value) { 19803 var Ctor = value && value.constructor, 19804 proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; 19805 19806 return value === proto; 19807 } 19808 19809 /** 19810 * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. 19811 * 19812 * @private 19813 * @param {*} value The value to check. 19814 * @returns {boolean} Returns `true` if `value` if suitable for strict 19815 * equality comparisons, else `false`. 19816 */ 19817 function isStrictComparable(value) { 19818 return value === value && !isObject(value); 19819 } 19820 19821 /** 19822 * A specialized version of `matchesProperty` for source values suitable 19823 * for strict equality comparisons, i.e. `===`. 19824 * 19825 * @private 19826 * @param {string} key The key of the property to get. 19827 * @param {*} srcValue The value to match. 19828 * @returns {Function} Returns the new spec function. 19829 */ 19830 function matchesStrictComparable(key, srcValue) { 19831 return function(object) { 19832 if (object == null) { 19833 return false; 19834 } 19835 return object[key] === srcValue && 19836 (srcValue !== undefined || (key in Object(object))); 19837 }; 19838 } 19839 19840 /** 19841 * A specialized version of `_.memoize` which clears the memoized function's 19842 * cache when it exceeds `MAX_MEMOIZE_SIZE`. 19843 * 19844 * @private 19845 * @param {Function} func The function to have its output memoized. 19846 * @returns {Function} Returns the new memoized function. 19847 */ 19848 function memoizeCapped(func) { 19849 var result = memoize(func, function(key) { 19850 if (cache.size === MAX_MEMOIZE_SIZE) { 19851 cache.clear(); 19852 } 19853 return key; 19854 }); 19855 19856 var cache = result.cache; 19857 return result; 19858 } 19859 19860 /** 19861 * Merges the function metadata of `source` into `data`. 19862 * 19863 * Merging metadata reduces the number of wrappers used to invoke a function. 19864 * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` 19865 * may be applied regardless of execution order. Methods like `_.ary` and 19866 * `_.rearg` modify function arguments, making the order in which they are 19867 * executed important, preventing the merging of metadata. However, we make 19868 * an exception for a safe combined case where curried functions have `_.ary` 19869 * and or `_.rearg` applied. 19870 * 19871 * @private 19872 * @param {Array} data The destination metadata. 19873 * @param {Array} source The source metadata. 19874 * @returns {Array} Returns `data`. 19875 */ 19876 function mergeData(data, source) { 19877 var bitmask = data[1], 19878 srcBitmask = source[1], 19879 newBitmask = bitmask | srcBitmask, 19880 isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); 19881 19882 var isCombo = 19883 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || 19884 ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || 19885 ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); 19886 19887 // Exit early if metadata can't be merged. 19888 if (!(isCommon || isCombo)) { 19889 return data; 19890 } 19891 // Use source `thisArg` if available. 19892 if (srcBitmask & WRAP_BIND_FLAG) { 19893 data[2] = source[2]; 19894 // Set when currying a bound function. 19895 newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; 19896 } 19897 // Compose partial arguments. 19898 var value = source[3]; 19899 if (value) { 19900 var partials = data[3]; 19901 data[3] = partials ? composeArgs(partials, value, source[4]) : value; 19902 data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; 19903 } 19904 // Compose partial right arguments. 19905 value = source[5]; 19906 if (value) { 19907 partials = data[5]; 19908 data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; 19909 data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; 19910 } 19911 // Use source `argPos` if available. 19912 value = source[7]; 19913 if (value) { 19914 data[7] = value; 19915 } 19916 // Use source `ary` if it's smaller. 19917 if (srcBitmask & WRAP_ARY_FLAG) { 19918 data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); 19919 } 19920 // Use source `arity` if one is not provided. 19921 if (data[9] == null) { 19922 data[9] = source[9]; 19923 } 19924 // Use source `func` and merge bitmasks. 19925 data[0] = source[0]; 19926 data[1] = newBitmask; 19927 19928 return data; 19929 } 19930 19931 /** 19932 * This function is like 19933 * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) 19934 * except that it includes inherited enumerable properties. 19935 * 19936 * @private 19937 * @param {Object} object The object to query. 19938 * @returns {Array} Returns the array of property names. 19939 */ 19940 function nativeKeysIn(object) { 19941 var result = []; 19942 if (object != null) { 19943 for (var key in Object(object)) { 19944 result.push(key); 19945 } 19946 } 19947 return result; 19948 } 19949 19950 /** 19951 * Converts `value` to a string using `Object.prototype.toString`. 19952 * 19953 * @private 19954 * @param {*} value The value to convert. 19955 * @returns {string} Returns the converted string. 19956 */ 19957 function objectToString(value) { 19958 return nativeObjectToString.call(value); 19959 } 19960 19961 /** 19962 * A specialized version of `baseRest` which transforms the rest array. 19963 * 19964 * @private 19965 * @param {Function} func The function to apply a rest parameter to. 19966 * @param {number} [start=func.length-1] The start position of the rest parameter. 19967 * @param {Function} transform The rest array transform. 19968 * @returns {Function} Returns the new function. 19969 */ 19970 function overRest(func, start, transform) { 19971 start = nativeMax(start === undefined ? (func.length - 1) : start, 0); 19972 return function() { 19973 var args = arguments, 19974 index = -1, 19975 length = nativeMax(args.length - start, 0), 19976 array = Array(length); 19977 19978 while (++index < length) { 19979 array[index] = args[start + index]; 19980 } 19981 index = -1; 19982 var otherArgs = Array(start + 1); 19983 while (++index < start) { 19984 otherArgs[index] = args[index]; 19985 } 19986 otherArgs[start] = transform(array); 19987 return apply(func, this, otherArgs); 19988 }; 19989 } 19990 19991 /** 19992 * Gets the parent value at `path` of `object`. 19993 * 19994 * @private 19995 * @param {Object} object The object to query. 19996 * @param {Array} path The path to get the parent value of. 19997 * @returns {*} Returns the parent value. 19998 */ 19999 function parent(object, path) { 20000 return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); 20001 } 20002 20003 /** 20004 * Reorder `array` according to the specified indexes where the element at 20005 * the first index is assigned as the first element, the element at 20006 * the second index is assigned as the second element, and so on. 20007 * 20008 * @private 20009 * @param {Array} array The array to reorder. 20010 * @param {Array} indexes The arranged array indexes. 20011 * @returns {Array} Returns `array`. 20012 */ 20013 function reorder(array, indexes) { 20014 var arrLength = array.length, 20015 length = nativeMin(indexes.length, arrLength), 20016 oldArray = copyArray(array); 20017 20018 while (length--) { 20019 var index = indexes[length]; 20020 array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; 20021 } 20022 return array; 20023 } 20024 20025 /** 20026 * Gets the value at `key`, unless `key` is "__proto__" or "constructor". 20027 * 20028 * @private 20029 * @param {Object} object The object to query. 20030 * @param {string} key The key of the property to get. 20031 * @returns {*} Returns the property value. 20032 */ 20033 function safeGet(object, key) { 20034 if (key === 'constructor' && typeof object[key] === 'function') { 20035 return; 20036 } 20037 20038 if (key == '__proto__') { 20039 return; 20040 } 20041 20042 return object[key]; 20043 } 20044 20045 /** 20046 * Sets metadata for `func`. 20047 * 20048 * **Note:** If this function becomes hot, i.e. is invoked a lot in a short 20049 * period of time, it will trip its breaker and transition to an identity 20050 * function to avoid garbage collection pauses in V8. See 20051 * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) 20052 * for more details. 20053 * 20054 * @private 20055 * @param {Function} func The function to associate metadata with. 20056 * @param {*} data The metadata. 20057 * @returns {Function} Returns `func`. 20058 */ 20059 var setData = shortOut(baseSetData); 20060 20061 /** 20062 * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout). 20063 * 20064 * @private 20065 * @param {Function} func The function to delay. 20066 * @param {number} wait The number of milliseconds to delay invocation. 20067 * @returns {number|Object} Returns the timer id or timeout object. 20068 */ 20069 var setTimeout = ctxSetTimeout || function(func, wait) { 20070 return root.setTimeout(func, wait); 20071 }; 20072 20073 /** 20074 * Sets the `toString` method of `func` to return `string`. 20075 * 20076 * @private 20077 * @param {Function} func The function to modify. 20078 * @param {Function} string The `toString` result. 20079 * @returns {Function} Returns `func`. 20080 */ 20081 var setToString = shortOut(baseSetToString); 20082 20083 /** 20084 * Sets the `toString` method of `wrapper` to mimic the source of `reference` 20085 * with wrapper details in a comment at the top of the source body. 20086 * 20087 * @private 20088 * @param {Function} wrapper The function to modify. 20089 * @param {Function} reference The reference function. 20090 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 20091 * @returns {Function} Returns `wrapper`. 20092 */ 20093 function setWrapToString(wrapper, reference, bitmask) { 20094 var source = (reference + ''); 20095 return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); 20096 } 20097 20098 /** 20099 * Creates a function that'll short out and invoke `identity` instead 20100 * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` 20101 * milliseconds. 20102 * 20103 * @private 20104 * @param {Function} func The function to restrict. 20105 * @returns {Function} Returns the new shortable function. 20106 */ 20107 function shortOut(func) { 20108 var count = 0, 20109 lastCalled = 0; 20110 20111 return function() { 20112 var stamp = nativeNow(), 20113 remaining = HOT_SPAN - (stamp - lastCalled); 20114 20115 lastCalled = stamp; 20116 if (remaining > 0) { 20117 if (++count >= HOT_COUNT) { 20118 return arguments[0]; 20119 } 20120 } else { 20121 count = 0; 20122 } 20123 return func.apply(undefined, arguments); 20124 }; 20125 } 20126 20127 /** 20128 * A specialized version of `_.shuffle` which mutates and sets the size of `array`. 20129 * 20130 * @private 20131 * @param {Array} array The array to shuffle. 20132 * @param {number} [size=array.length] The size of `array`. 20133 * @returns {Array} Returns `array`. 20134 */ 20135 function shuffleSelf(array, size) { 20136 var index = -1, 20137 length = array.length, 20138 lastIndex = length - 1; 20139 20140 size = size === undefined ? length : size; 20141 while (++index < size) { 20142 var rand = baseRandom(index, lastIndex), 20143 value = array[rand]; 20144 20145 array[rand] = array[index]; 20146 array[index] = value; 20147 } 20148 array.length = size; 20149 return array; 20150 } 20151 20152 /** 20153 * Converts `string` to a property path array.
vendor: 1,775 bytes, lines 20154-20214
20154 * 20155 * @private 20156 * @param {string} string The string to convert. 20157 * @returns {Array} Returns the property path array. 20158 */ 20159 var stringToPath = memoizeCapped(function(string) { 20160 var result = []; 20161 if (string.charCodeAt(0) === 46 /* . */) { 20162 result.push(''); 20163 } 20164 string.replace(rePropName, function(match, number, quote, subString) { 20165 result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); 20166 }); 20167 return result; 20168 }); 20169 20170 /** 20171 * Converts `value` to a string key if it's not a string or symbol. 20172 * 20173 * @private 20174 * @param {*} value The value to inspect. 20175 * @returns {string|symbol} Returns the key. 20176 */ 20177 function toKey(value) { 20178 if (typeof value == 'string' || isSymbol(value)) { 20179 return value; 20180 } 20181 var result = (value + ''); 20182 return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; 20183 } 20184 20185 /** 20186 * Converts `func` to its source code. 20187 * 20188 * @private 20189 * @param {Function} func The function to convert. 20190 * @returns {string} Returns the source code. 20191 */ 20192 function toSource(func) { 20193 if (func != null) { 20194 try { 20195 return funcToString.call(func); 20196 } catch (e) {} 20197 try { 20198 return (func + ''); 20199 } catch (e) {} 20200 } 20201 return ''; 20202 } 20203 20204 /** 20205 * Updates wrapper `details` based on `bitmask` flags. 20206 * 20207 * @private 20208 * @returns {Array} details The details to modify. 20209 * @param {number} bitmask The bitmask flags. See `createWrap` for more details. 20210 * @returns {Array} Returns `details`. 20211 */ 20212 function updateWrapDetails(details, bitmask) { 20213 arrayEach(wrapFlags, function(pair) { 20214 var value = '_.' + pair[0];
vendor: 80,381 bytes, lines 20215-22798
20215 if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { 20216 details.push(value); 20217 } 20218 }); 20219 return details.sort(); 20220 } 20221 20222 /** 20223 * Creates a clone of `wrapper`. 20224 * 20225 * @private 20226 * @param {Object} wrapper The wrapper to clone. 20227 * @returns {Object} Returns the cloned wrapper. 20228 */ 20229 function wrapperClone(wrapper) { 20230 if (wrapper instanceof LazyWrapper) { 20231 return wrapper.clone(); 20232 } 20233 var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); 20234 result.__actions__ = copyArray(wrapper.__actions__); 20235 result.__index__ = wrapper.__index__; 20236 result.__values__ = wrapper.__values__; 20237 return result; 20238 } 20239 20240 /*------------------------------------------------------------------------*/ 20241 20242 /** 20243 * Creates an array of elements split into groups the length of `size`. 20244 * If `array` can't be split evenly, the final chunk will be the remaining 20245 * elements. 20246 * 20247 * @static 20248 * @memberOf _ 20249 * @since 3.0.0 20250 * @category Array 20251 * @param {Array} array The array to process. 20252 * @param {number} [size=1] The length of each chunk 20253 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 20254 * @returns {Array} Returns the new array of chunks. 20255 * @example 20256 * 20257 * _.chunk(['a', 'b', 'c', 'd'], 2); 20258 * // => [['a', 'b'], ['c', 'd']] 20259 * 20260 * _.chunk(['a', 'b', 'c', 'd'], 3); 20261 * // => [['a', 'b', 'c'], ['d']] 20262 */ 20263 function chunk(array, size, guard) { 20264 if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { 20265 size = 1; 20266 } else { 20267 size = nativeMax(toInteger(size), 0); 20268 } 20269 var length = array == null ? 0 : array.length; 20270 if (!length || size < 1) { 20271 return []; 20272 } 20273 var index = 0, 20274 resIndex = 0, 20275 result = Array(nativeCeil(length / size)); 20276 20277 while (index < length) { 20278 result[resIndex++] = baseSlice(array, index, (index += size)); 20279 } 20280 return result; 20281 } 20282 20283 /** 20284 * Creates an array with all falsey values removed. The values `false`, `null`, 20285 * `0`, `""`, `undefined`, and `NaN` are falsey. 20286 * 20287 * @static 20288 * @memberOf _ 20289 * @since 0.1.0 20290 * @category Array 20291 * @param {Array} array The array to compact. 20292 * @returns {Array} Returns the new array of filtered values. 20293 * @example 20294 * 20295 * _.compact([0, 1, false, 2, '', 3]); 20296 * // => [1, 2, 3] 20297 */ 20298 function compact(array) { 20299 var index = -1, 20300 length = array == null ? 0 : array.length, 20301 resIndex = 0, 20302 result = []; 20303 20304 while (++index < length) { 20305 var value = array[index]; 20306 if (value) { 20307 result[resIndex++] = value; 20308 } 20309 } 20310 return result; 20311 } 20312 20313 /** 20314 * Creates a new array concatenating `array` with any additional arrays 20315 * and/or values. 20316 * 20317 * @static 20318 * @memberOf _ 20319 * @since 4.0.0 20320 * @category Array 20321 * @param {Array} array The array to concatenate. 20322 * @param {...*} [values] The values to concatenate. 20323 * @returns {Array} Returns the new concatenated array. 20324 * @example 20325 * 20326 * var array = [1]; 20327 * var other = _.concat(array, 2, [3], [[4]]); 20328 * 20329 * console.log(other); 20330 * // => [1, 2, 3, [4]] 20331 * 20332 * console.log(array); 20333 * // => [1] 20334 */ 20335 function concat() { 20336 var length = arguments.length; 20337 if (!length) { 20338 return []; 20339 } 20340 var args = Array(length - 1), 20341 array = arguments[0], 20342 index = length; 20343 20344 while (index--) { 20345 args[index - 1] = arguments[index]; 20346 } 20347 return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); 20348 } 20349 20350 /** 20351 * Creates an array of `array` values not included in the other given arrays 20352 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 20353 * for equality comparisons. The order and references of result values are 20354 * determined by the first array. 20355 * 20356 * **Note:** Unlike `_.pullAll`, this method returns a new array. 20357 * 20358 * @static 20359 * @memberOf _ 20360 * @since 0.1.0 20361 * @category Array 20362 * @param {Array} array The array to inspect. 20363 * @param {...Array} [values] The values to exclude. 20364 * @returns {Array} Returns the new array of filtered values. 20365 * @see _.without, _.xor 20366 * @example 20367 * 20368 * _.difference([2, 1], [2, 3]); 20369 * // => [1] 20370 */ 20371 var difference = baseRest(function(array, values) { 20372 return isArrayLikeObject(array) 20373 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) 20374 : []; 20375 }); 20376 20377 /** 20378 * This method is like `_.difference` except that it accepts `iteratee` which 20379 * is invoked for each element of `array` and `values` to generate the criterion 20380 * by which they're compared. The order and references of result values are 20381 * determined by the first array. The iteratee is invoked with one argument: 20382 * (value). 20383 * 20384 * **Note:** Unlike `_.pullAllBy`, this method returns a new array. 20385 * 20386 * @static 20387 * @memberOf _ 20388 * @since 4.0.0 20389 * @category Array 20390 * @param {Array} array The array to inspect. 20391 * @param {...Array} [values] The values to exclude. 20392 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 20393 * @returns {Array} Returns the new array of filtered values. 20394 * @example 20395 * 20396 * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor); 20397 * // => [1.2] 20398 * 20399 * // The `_.property` iteratee shorthand. 20400 * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); 20401 * // => [{ 'x': 2 }] 20402 */ 20403 var differenceBy = baseRest(function(array, values) { 20404 var iteratee = last(values); 20405 if (isArrayLikeObject(iteratee)) { 20406 iteratee = undefined; 20407 } 20408 return isArrayLikeObject(array) 20409 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) 20410 : []; 20411 }); 20412 20413 /** 20414 * This method is like `_.difference` except that it accepts `comparator` 20415 * which is invoked to compare elements of `array` to `values`. The order and 20416 * references of result values are determined by the first array. The comparator 20417 * is invoked with two arguments: (arrVal, othVal). 20418 * 20419 * **Note:** Unlike `_.pullAllWith`, this method returns a new array. 20420 * 20421 * @static 20422 * @memberOf _ 20423 * @since 4.0.0 20424 * @category Array 20425 * @param {Array} array The array to inspect. 20426 * @param {...Array} [values] The values to exclude. 20427 * @param {Function} [comparator] The comparator invoked per element. 20428 * @returns {Array} Returns the new array of filtered values. 20429 * @example 20430 * 20431 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; 20432 * 20433 * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual); 20434 * // => [{ 'x': 2, 'y': 1 }] 20435 */ 20436 var differenceWith = baseRest(function(array, values) { 20437 var comparator = last(values); 20438 if (isArrayLikeObject(comparator)) { 20439 comparator = undefined; 20440 } 20441 return isArrayLikeObject(array) 20442 ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) 20443 : []; 20444 }); 20445 20446 /** 20447 * Creates a slice of `array` with `n` elements dropped from the beginning. 20448 * 20449 * @static 20450 * @memberOf _ 20451 * @since 0.5.0 20452 * @category Array 20453 * @param {Array} array The array to query. 20454 * @param {number} [n=1] The number of elements to drop. 20455 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 20456 * @returns {Array} Returns the slice of `array`. 20457 * @example 20458 * 20459 * _.drop([1, 2, 3]); 20460 * // => [2, 3] 20461 * 20462 * _.drop([1, 2, 3], 2); 20463 * // => [3] 20464 * 20465 * _.drop([1, 2, 3], 5); 20466 * // => [] 20467 * 20468 * _.drop([1, 2, 3], 0); 20469 * // => [1, 2, 3] 20470 */ 20471 function drop(array, n, guard) { 20472 var length = array == null ? 0 : array.length; 20473 if (!length) { 20474 return []; 20475 } 20476 n = (guard || n === undefined) ? 1 : toInteger(n); 20477 return baseSlice(array, n < 0 ? 0 : n, length); 20478 } 20479 20480 /** 20481 * Creates a slice of `array` with `n` elements dropped from the end. 20482 * 20483 * @static 20484 * @memberOf _ 20485 * @since 3.0.0 20486 * @category Array 20487 * @param {Array} array The array to query. 20488 * @param {number} [n=1] The number of elements to drop. 20489 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 20490 * @returns {Array} Returns the slice of `array`. 20491 * @example 20492 * 20493 * _.dropRight([1, 2, 3]); 20494 * // => [1, 2] 20495 * 20496 * _.dropRight([1, 2, 3], 2); 20497 * // => [1] 20498 * 20499 * _.dropRight([1, 2, 3], 5); 20500 * // => [] 20501 * 20502 * _.dropRight([1, 2, 3], 0); 20503 * // => [1, 2, 3] 20504 */ 20505 function dropRight(array, n, guard) { 20506 var length = array == null ? 0 : array.length; 20507 if (!length) { 20508 return []; 20509 } 20510 n = (guard || n === undefined) ? 1 : toInteger(n); 20511 n = length - n; 20512 return baseSlice(array, 0, n < 0 ? 0 : n); 20513 } 20514 20515 /** 20516 * Creates a slice of `array` excluding elements dropped from the end. 20517 * Elements are dropped until `predicate` returns falsey. The predicate is 20518 * invoked with three arguments: (value, index, array). 20519 * 20520 * @static 20521 * @memberOf _ 20522 * @since 3.0.0 20523 * @category Array 20524 * @param {Array} array The array to query. 20525 * @param {Function} [predicate=_.identity] The function invoked per iteration. 20526 * @returns {Array} Returns the slice of `array`. 20527 * @example 20528 * 20529 * var users = [ 20530 * { 'user': 'barney', 'active': true }, 20531 * { 'user': 'fred', 'active': false }, 20532 * { 'user': 'pebbles', 'active': false } 20533 * ]; 20534 * 20535 * _.dropRightWhile(users, function(o) { return !o.active; }); 20536 * // => objects for ['barney'] 20537 * 20538 * // The `_.matches` iteratee shorthand. 20539 * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); 20540 * // => objects for ['barney', 'fred'] 20541 * 20542 * // The `_.matchesProperty` iteratee shorthand. 20543 * _.dropRightWhile(users, ['active', false]); 20544 * // => objects for ['barney'] 20545 * 20546 * // The `_.property` iteratee shorthand. 20547 * _.dropRightWhile(users, 'active'); 20548 * // => objects for ['barney', 'fred', 'pebbles'] 20549 */ 20550 function dropRightWhile(array, predicate) { 20551 return (array && array.length) 20552 ? baseWhile(array, getIteratee(predicate, 3), true, true) 20553 : []; 20554 } 20555 20556 /** 20557 * Creates a slice of `array` excluding elements dropped from the beginning. 20558 * Elements are dropped until `predicate` returns falsey. The predicate is 20559 * invoked with three arguments: (value, index, array). 20560 * 20561 * @static 20562 * @memberOf _ 20563 * @since 3.0.0 20564 * @category Array 20565 * @param {Array} array The array to query. 20566 * @param {Function} [predicate=_.identity] The function invoked per iteration. 20567 * @returns {Array} Returns the slice of `array`. 20568 * @example 20569 * 20570 * var users = [ 20571 * { 'user': 'barney', 'active': false }, 20572 * { 'user': 'fred', 'active': false }, 20573 * { 'user': 'pebbles', 'active': true } 20574 * ]; 20575 * 20576 * _.dropWhile(users, function(o) { return !o.active; }); 20577 * // => objects for ['pebbles'] 20578 * 20579 * // The `_.matches` iteratee shorthand. 20580 * _.dropWhile(users, { 'user': 'barney', 'active': false }); 20581 * // => objects for ['fred', 'pebbles'] 20582 * 20583 * // The `_.matchesProperty` iteratee shorthand. 20584 * _.dropWhile(users, ['active', false]); 20585 * // => objects for ['pebbles'] 20586 * 20587 * // The `_.property` iteratee shorthand. 20588 * _.dropWhile(users, 'active'); 20589 * // => objects for ['barney', 'fred', 'pebbles'] 20590 */ 20591 function dropWhile(array, predicate) { 20592 return (array && array.length) 20593 ? baseWhile(array, getIteratee(predicate, 3), true) 20594 : []; 20595 } 20596 20597 /** 20598 * Fills elements of `array` with `value` from `start` up to, but not 20599 * including, `end`. 20600 * 20601 * **Note:** This method mutates `array`. 20602 * 20603 * @static 20604 * @memberOf _ 20605 * @since 3.2.0 20606 * @category Array 20607 * @param {Array} array The array to fill. 20608 * @param {*} value The value to fill `array` with. 20609 * @param {number} [start=0] The start position. 20610 * @param {number} [end=array.length] The end position. 20611 * @returns {Array} Returns `array`. 20612 * @example 20613 * 20614 * var array = [1, 2, 3]; 20615 * 20616 * _.fill(array, 'a'); 20617 * console.log(array); 20618 * // => ['a', 'a', 'a'] 20619 * 20620 * _.fill(Array(3), 2); 20621 * // => [2, 2, 2] 20622 * 20623 * _.fill([4, 6, 8, 10], '*', 1, 3); 20624 * // => [4, '*', '*', 10] 20625 */ 20626 function fill(array, value, start, end) { 20627 var length = array == null ? 0 : array.length; 20628 if (!length) { 20629 return []; 20630 } 20631 if (start && typeof start != 'number' && isIterateeCall(array, value, start)) { 20632 start = 0; 20633 end = length; 20634 } 20635 return baseFill(array, value, start, end); 20636 } 20637 20638 /** 20639 * This method is like `_.find` except that it returns the index of the first 20640 * element `predicate` returns truthy for instead of the element itself. 20641 * 20642 * @static 20643 * @memberOf _ 20644 * @since 1.1.0 20645 * @category Array 20646 * @param {Array} array The array to inspect. 20647 * @param {Function} [predicate=_.identity] The function invoked per iteration. 20648 * @param {number} [fromIndex=0] The index to search from. 20649 * @returns {number} Returns the index of the found element, else `-1`. 20650 * @example 20651 * 20652 * var users = [ 20653 * { 'user': 'barney', 'active': false }, 20654 * { 'user': 'fred', 'active': false }, 20655 * { 'user': 'pebbles', 'active': true } 20656 * ]; 20657 * 20658 * _.findIndex(users, function(o) { return o.user == 'barney'; }); 20659 * // => 0 20660 * 20661 * // The `_.matches` iteratee shorthand. 20662 * _.findIndex(users, { 'user': 'fred', 'active': false }); 20663 * // => 1 20664 * 20665 * // The `_.matchesProperty` iteratee shorthand. 20666 * _.findIndex(users, ['active', false]); 20667 * // => 0 20668 * 20669 * // The `_.property` iteratee shorthand. 20670 * _.findIndex(users, 'active'); 20671 * // => 2 20672 */ 20673 function findIndex(array, predicate, fromIndex) { 20674 var length = array == null ? 0 : array.length; 20675 if (!length) { 20676 return -1; 20677 } 20678 var index = fromIndex == null ? 0 : toInteger(fromIndex); 20679 if (index < 0) { 20680 index = nativeMax(length + index, 0); 20681 } 20682 return baseFindIndex(array, getIteratee(predicate, 3), index); 20683 } 20684 20685 /** 20686 * This method is like `_.findIndex` except that it iterates over elements 20687 * of `collection` from right to left. 20688 * 20689 * @static 20690 * @memberOf _ 20691 * @since 2.0.0 20692 * @category Array 20693 * @param {Array} array The array to inspect. 20694 * @param {Function} [predicate=_.identity] The function invoked per iteration. 20695 * @param {number} [fromIndex=array.length-1] The index to search from. 20696 * @returns {number} Returns the index of the found element, else `-1`. 20697 * @example 20698 * 20699 * var users = [ 20700 * { 'user': 'barney', 'active': true }, 20701 * { 'user': 'fred', 'active': false }, 20702 * { 'user': 'pebbles', 'active': false } 20703 * ]; 20704 * 20705 * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); 20706 * // => 2 20707 * 20708 * // The `_.matches` iteratee shorthand. 20709 * _.findLastIndex(users, { 'user': 'barney', 'active': true }); 20710 * // => 0 20711 * 20712 * // The `_.matchesProperty` iteratee shorthand. 20713 * _.findLastIndex(users, ['active', false]); 20714 * // => 2 20715 * 20716 * // The `_.property` iteratee shorthand. 20717 * _.findLastIndex(users, 'active'); 20718 * // => 0 20719 */ 20720 function findLastIndex(array, predicate, fromIndex) { 20721 var length = array == null ? 0 : array.length; 20722 if (!length) { 20723 return -1; 20724 } 20725 var index = length - 1; 20726 if (fromIndex !== undefined) { 20727 index = toInteger(fromIndex); 20728 index = fromIndex < 0 20729 ? nativeMax(length + index, 0) 20730 : nativeMin(index, length - 1); 20731 } 20732 return baseFindIndex(array, getIteratee(predicate, 3), index, true); 20733 } 20734 20735 /** 20736 * Flattens `array` a single level deep. 20737 * 20738 * @static 20739 * @memberOf _ 20740 * @since 0.1.0 20741 * @category Array 20742 * @param {Array} array The array to flatten. 20743 * @returns {Array} Returns the new flattened array. 20744 * @example 20745 * 20746 * _.flatten([1, [2, [3, [4]], 5]]); 20747 * // => [1, 2, [3, [4]], 5] 20748 */ 20749 function flatten(array) { 20750 var length = array == null ? 0 : array.length; 20751 return length ? baseFlatten(array, 1) : []; 20752 } 20753 20754 /** 20755 * Recursively flattens `array`. 20756 * 20757 * @static 20758 * @memberOf _ 20759 * @since 3.0.0 20760 * @category Array 20761 * @param {Array} array The array to flatten. 20762 * @returns {Array} Returns the new flattened array. 20763 * @example 20764 * 20765 * _.flattenDeep([1, [2, [3, [4]], 5]]); 20766 * // => [1, 2, 3, 4, 5] 20767 */ 20768 function flattenDeep(array) { 20769 var length = array == null ? 0 : array.length; 20770 return length ? baseFlatten(array, INFINITY) : []; 20771 } 20772 20773 /** 20774 * Recursively flatten `array` up to `depth` times. 20775 * 20776 * @static 20777 * @memberOf _ 20778 * @since 4.4.0 20779 * @category Array 20780 * @param {Array} array The array to flatten. 20781 * @param {number} [depth=1] The maximum recursion depth. 20782 * @returns {Array} Returns the new flattened array. 20783 * @example 20784 * 20785 * var array = [1, [2, [3, [4]], 5]]; 20786 * 20787 * _.flattenDepth(array, 1); 20788 * // => [1, 2, [3, [4]], 5] 20789 * 20790 * _.flattenDepth(array, 2); 20791 * // => [1, 2, 3, [4], 5] 20792 */ 20793 function flattenDepth(array, depth) { 20794 var length = array == null ? 0 : array.length; 20795 if (!length) { 20796 return []; 20797 } 20798 depth = depth === undefined ? 1 : toInteger(depth); 20799 return baseFlatten(array, depth); 20800 } 20801 20802 /** 20803 * The inverse of `_.toPairs`; this method returns an object composed 20804 * from key-value `pairs`. 20805 * 20806 * @static 20807 * @memberOf _ 20808 * @since 4.0.0 20809 * @category Array 20810 * @param {Array} pairs The key-value pairs. 20811 * @returns {Object} Returns the new object. 20812 * @example 20813 * 20814 * _.fromPairs([['a', 1], ['b', 2]]); 20815 * // => { 'a': 1, 'b': 2 } 20816 */ 20817 function fromPairs(pairs) { 20818 var index = -1, 20819 length = pairs == null ? 0 : pairs.length, 20820 result = {}; 20821 20822 while (++index < length) { 20823 var pair = pairs[index]; 20824 result[pair[0]] = pair[1]; 20825 } 20826 return result; 20827 } 20828 20829 /** 20830 * Gets the first element of `array`. 20831 * 20832 * @static 20833 * @memberOf _ 20834 * @since 0.1.0 20835 * @alias first 20836 * @category Array 20837 * @param {Array} array The array to query. 20838 * @returns {*} Returns the first element of `array`. 20839 * @example 20840 * 20841 * _.head([1, 2, 3]); 20842 * // => 1 20843 * 20844 * _.head([]); 20845 * // => undefined 20846 */ 20847 function head(array) { 20848 return (array && array.length) ? array[0] : undefined; 20849 } 20850 20851 /** 20852 * Gets the index at which the first occurrence of `value` is found in `array` 20853 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 20854 * for equality comparisons. If `fromIndex` is negative, it's used as the 20855 * offset from the end of `array`. 20856 * 20857 * @static 20858 * @memberOf _ 20859 * @since 0.1.0 20860 * @category Array 20861 * @param {Array} array The array to inspect. 20862 * @param {*} value The value to search for. 20863 * @param {number} [fromIndex=0] The index to search from. 20864 * @returns {number} Returns the index of the matched value, else `-1`. 20865 * @example 20866 * 20867 * _.indexOf([1, 2, 1, 2], 2); 20868 * // => 1 20869 * 20870 * // Search from the `fromIndex`. 20871 * _.indexOf([1, 2, 1, 2], 2, 2); 20872 * // => 3 20873 */ 20874 function indexOf(array, value, fromIndex) { 20875 var length = array == null ? 0 : array.length; 20876 if (!length) { 20877 return -1; 20878 } 20879 var index = fromIndex == null ? 0 : toInteger(fromIndex); 20880 if (index < 0) { 20881 index = nativeMax(length + index, 0); 20882 } 20883 return baseIndexOf(array, value, index); 20884 } 20885 20886 /** 20887 * Gets all but the last element of `array`. 20888 * 20889 * @static 20890 * @memberOf _ 20891 * @since 0.1.0 20892 * @category Array 20893 * @param {Array} array The array to query. 20894 * @returns {Array} Returns the slice of `array`. 20895 * @example 20896 * 20897 * _.initial([1, 2, 3]); 20898 * // => [1, 2] 20899 */ 20900 function initial(array) { 20901 var length = array == null ? 0 : array.length; 20902 return length ? baseSlice(array, 0, -1) : []; 20903 } 20904 20905 /** 20906 * Creates an array of unique values that are included in all given arrays 20907 * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 20908 * for equality comparisons. The order and references of result values are 20909 * determined by the first array. 20910 * 20911 * @static 20912 * @memberOf _ 20913 * @since 0.1.0 20914 * @category Array 20915 * @param {...Array} [arrays] The arrays to inspect. 20916 * @returns {Array} Returns the new array of intersecting values. 20917 * @example 20918 * 20919 * _.intersection([2, 1], [2, 3]); 20920 * // => [2] 20921 */ 20922 var intersection = baseRest(function(arrays) { 20923 var mapped = arrayMap(arrays, castArrayLikeObject); 20924 return (mapped.length && mapped[0] === arrays[0]) 20925 ? baseIntersection(mapped) 20926 : []; 20927 }); 20928 20929 /** 20930 * This method is like `_.intersection` except that it accepts `iteratee` 20931 * which is invoked for each element of each `arrays` to generate the criterion 20932 * by which they're compared. The order and references of result values are 20933 * determined by the first array. The iteratee is invoked with one argument: 20934 * (value). 20935 * 20936 * @static 20937 * @memberOf _ 20938 * @since 4.0.0 20939 * @category Array 20940 * @param {...Array} [arrays] The arrays to inspect. 20941 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 20942 * @returns {Array} Returns the new array of intersecting values. 20943 * @example 20944 * 20945 * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor); 20946 * // => [2.1] 20947 * 20948 * // The `_.property` iteratee shorthand. 20949 * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); 20950 * // => [{ 'x': 1 }] 20951 */ 20952 var intersectionBy = baseRest(function(arrays) { 20953 var iteratee = last(arrays), 20954 mapped = arrayMap(arrays, castArrayLikeObject); 20955 20956 if (iteratee === last(mapped)) { 20957 iteratee = undefined; 20958 } else { 20959 mapped.pop(); 20960 } 20961 return (mapped.length && mapped[0] === arrays[0]) 20962 ? baseIntersection(mapped, getIteratee(iteratee, 2)) 20963 : []; 20964 }); 20965 20966 /** 20967 * This method is like `_.intersection` except that it accepts `comparator` 20968 * which is invoked to compare elements of `arrays`. The order and references 20969 * of result values are determined by the first array. The comparator is 20970 * invoked with two arguments: (arrVal, othVal). 20971 * 20972 * @static 20973 * @memberOf _ 20974 * @since 4.0.0 20975 * @category Array 20976 * @param {...Array} [arrays] The arrays to inspect. 20977 * @param {Function} [comparator] The comparator invoked per element. 20978 * @returns {Array} Returns the new array of intersecting values. 20979 * @example 20980 * 20981 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; 20982 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; 20983 * 20984 * _.intersectionWith(objects, others, _.isEqual); 20985 * // => [{ 'x': 1, 'y': 2 }] 20986 */ 20987 var intersectionWith = baseRest(function(arrays) { 20988 var comparator = last(arrays), 20989 mapped = arrayMap(arrays, castArrayLikeObject); 20990 20991 comparator = typeof comparator == 'function' ? comparator : undefined; 20992 if (comparator) { 20993 mapped.pop(); 20994 } 20995 return (mapped.length && mapped[0] === arrays[0]) 20996 ? baseIntersection(mapped, undefined, comparator) 20997 : []; 20998 }); 20999 21000 /** 21001 * Converts all elements in `array` into a string separated by `separator`. 21002 * 21003 * @static 21004 * @memberOf _ 21005 * @since 4.0.0 21006 * @category Array 21007 * @param {Array} array The array to convert. 21008 * @param {string} [separator=','] The element separator. 21009 * @returns {string} Returns the joined string. 21010 * @example 21011 * 21012 * _.join(['a', 'b', 'c'], '~'); 21013 * // => 'a~b~c' 21014 */ 21015 function join(array, separator) { 21016 return array == null ? '' : nativeJoin.call(array, separator); 21017 } 21018 21019 /** 21020 * Gets the last element of `array`. 21021 * 21022 * @static 21023 * @memberOf _ 21024 * @since 0.1.0 21025 * @category Array 21026 * @param {Array} array The array to query. 21027 * @returns {*} Returns the last element of `array`. 21028 * @example 21029 * 21030 * _.last([1, 2, 3]); 21031 * // => 3 21032 */ 21033 function last(array) { 21034 var length = array == null ? 0 : array.length; 21035 return length ? array[length - 1] : undefined; 21036 } 21037 21038 /** 21039 * This method is like `_.indexOf` except that it iterates over elements of 21040 * `array` from right to left. 21041 * 21042 * @static 21043 * @memberOf _ 21044 * @since 0.1.0 21045 * @category Array 21046 * @param {Array} array The array to inspect. 21047 * @param {*} value The value to search for. 21048 * @param {number} [fromIndex=array.length-1] The index to search from. 21049 * @returns {number} Returns the index of the matched value, else `-1`. 21050 * @example 21051 * 21052 * _.lastIndexOf([1, 2, 1, 2], 2); 21053 * // => 3 21054 * 21055 * // Search from the `fromIndex`. 21056 * _.lastIndexOf([1, 2, 1, 2], 2, 2); 21057 * // => 1 21058 */ 21059 function lastIndexOf(array, value, fromIndex) { 21060 var length = array == null ? 0 : array.length; 21061 if (!length) { 21062 return -1; 21063 } 21064 var index = length; 21065 if (fromIndex !== undefined) { 21066 index = toInteger(fromIndex); 21067 index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1); 21068 } 21069 return value === value 21070 ? strictLastIndexOf(array, value, index) 21071 : baseFindIndex(array, baseIsNaN, index, true); 21072 } 21073 21074 /** 21075 * Gets the element at index `n` of `array`. If `n` is negative, the nth 21076 * element from the end is returned. 21077 * 21078 * @static 21079 * @memberOf _ 21080 * @since 4.11.0 21081 * @category Array 21082 * @param {Array} array The array to query. 21083 * @param {number} [n=0] The index of the element to return. 21084 * @returns {*} Returns the nth element of `array`. 21085 * @example 21086 * 21087 * var array = ['a', 'b', 'c', 'd']; 21088 * 21089 * _.nth(array, 1); 21090 * // => 'b' 21091 * 21092 * _.nth(array, -2); 21093 * // => 'c'; 21094 */ 21095 function nth(array, n) { 21096 return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; 21097 } 21098 21099 /** 21100 * Removes all given values from `array` using 21101 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 21102 * for equality comparisons. 21103 * 21104 * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove` 21105 * to remove elements from an array by predicate. 21106 * 21107 * @static 21108 * @memberOf _ 21109 * @since 2.0.0 21110 * @category Array 21111 * @param {Array} array The array to modify. 21112 * @param {...*} [values] The values to remove. 21113 * @returns {Array} Returns `array`. 21114 * @example 21115 * 21116 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; 21117 * 21118 * _.pull(array, 'a', 'c'); 21119 * console.log(array); 21120 * // => ['b', 'b'] 21121 */ 21122 var pull = baseRest(pullAll); 21123 21124 /** 21125 * This method is like `_.pull` except that it accepts an array of values to remove. 21126 * 21127 * **Note:** Unlike `_.difference`, this method mutates `array`. 21128 * 21129 * @static 21130 * @memberOf _ 21131 * @since 4.0.0 21132 * @category Array 21133 * @param {Array} array The array to modify. 21134 * @param {Array} values The values to remove. 21135 * @returns {Array} Returns `array`. 21136 * @example 21137 * 21138 * var array = ['a', 'b', 'c', 'a', 'b', 'c']; 21139 * 21140 * _.pullAll(array, ['a', 'c']); 21141 * console.log(array); 21142 * // => ['b', 'b'] 21143 */ 21144 function pullAll(array, values) { 21145 return (array && array.length && values && values.length) 21146 ? basePullAll(array, values) 21147 : array; 21148 } 21149 21150 /** 21151 * This method is like `_.pullAll` except that it accepts `iteratee` which is 21152 * invoked for each element of `array` and `values` to generate the criterion 21153 * by which they're compared. The iteratee is invoked with one argument: (value). 21154 * 21155 * **Note:** Unlike `_.differenceBy`, this method mutates `array`. 21156 * 21157 * @static 21158 * @memberOf _ 21159 * @since 4.0.0 21160 * @category Array 21161 * @param {Array} array The array to modify. 21162 * @param {Array} values The values to remove. 21163 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 21164 * @returns {Array} Returns `array`. 21165 * @example 21166 * 21167 * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }]; 21168 * 21169 * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x'); 21170 * console.log(array); 21171 * // => [{ 'x': 2 }] 21172 */ 21173 function pullAllBy(array, values, iteratee) { 21174 return (array && array.length && values && values.length) 21175 ? basePullAll(array, values, getIteratee(iteratee, 2)) 21176 : array; 21177 } 21178 21179 /** 21180 * This method is like `_.pullAll` except that it accepts `comparator` which 21181 * is invoked to compare elements of `array` to `values`. The comparator is 21182 * invoked with two arguments: (arrVal, othVal). 21183 * 21184 * **Note:** Unlike `_.differenceWith`, this method mutates `array`. 21185 * 21186 * @static 21187 * @memberOf _ 21188 * @since 4.6.0 21189 * @category Array 21190 * @param {Array} array The array to modify. 21191 * @param {Array} values The values to remove. 21192 * @param {Function} [comparator] The comparator invoked per element. 21193 * @returns {Array} Returns `array`. 21194 * @example 21195 * 21196 * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }]; 21197 * 21198 * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual); 21199 * console.log(array); 21200 * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }] 21201 */ 21202 function pullAllWith(array, values, comparator) { 21203 return (array && array.length && values && values.length) 21204 ? basePullAll(array, values, undefined, comparator) 21205 : array; 21206 } 21207 21208 /** 21209 * Removes elements from `array` corresponding to `indexes` and returns an 21210 * array of removed elements. 21211 * 21212 * **Note:** Unlike `_.at`, this method mutates `array`. 21213 * 21214 * @static 21215 * @memberOf _ 21216 * @since 3.0.0 21217 * @category Array 21218 * @param {Array} array The array to modify. 21219 * @param {...(number|number[])} [indexes] The indexes of elements to remove. 21220 * @returns {Array} Returns the new array of removed elements. 21221 * @example 21222 * 21223 * var array = ['a', 'b', 'c', 'd']; 21224 * var pulled = _.pullAt(array, [1, 3]); 21225 * 21226 * console.log(array); 21227 * // => ['a', 'c'] 21228 * 21229 * console.log(pulled); 21230 * // => ['b', 'd'] 21231 */ 21232 var pullAt = flatRest(function(array, indexes) { 21233 var length = array == null ? 0 : array.length, 21234 result = baseAt(array, indexes); 21235 21236 basePullAt(array, arrayMap(indexes, function(index) { 21237 return isIndex(index, length) ? +index : index; 21238 }).sort(compareAscending)); 21239 21240 return result; 21241 }); 21242 21243 /** 21244 * Removes all elements from `array` that `predicate` returns truthy for 21245 * and returns an array of the removed elements. The predicate is invoked 21246 * with three arguments: (value, index, array). 21247 * 21248 * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull` 21249 * to pull elements from an array by value. 21250 * 21251 * @static 21252 * @memberOf _ 21253 * @since 2.0.0 21254 * @category Array 21255 * @param {Array} array The array to modify. 21256 * @param {Function} [predicate=_.identity] The function invoked per iteration. 21257 * @returns {Array} Returns the new array of removed elements. 21258 * @example 21259 * 21260 * var array = [1, 2, 3, 4]; 21261 * var evens = _.remove(array, function(n) { 21262 * return n % 2 == 0; 21263 * }); 21264 * 21265 * console.log(array); 21266 * // => [1, 3] 21267 * 21268 * console.log(evens); 21269 * // => [2, 4] 21270 */ 21271 function remove(array, predicate) { 21272 var result = []; 21273 if (!(array && array.length)) { 21274 return result; 21275 } 21276 var index = -1, 21277 indexes = [], 21278 length = array.length; 21279 21280 predicate = getIteratee(predicate, 3); 21281 while (++index < length) { 21282 var value = array[index]; 21283 if (predicate(value, index, array)) { 21284 result.push(value); 21285 indexes.push(index); 21286 } 21287 } 21288 basePullAt(array, indexes); 21289 return result; 21290 } 21291 21292 /** 21293 * Reverses `array` so that the first element becomes the last, the second 21294 * element becomes the second to last, and so on. 21295 * 21296 * **Note:** This method mutates `array` and is based on 21297 * [`Array#reverse`](https://mdn.io/Array/reverse). 21298 * 21299 * @static 21300 * @memberOf _ 21301 * @since 4.0.0 21302 * @category Array 21303 * @param {Array} array The array to modify. 21304 * @returns {Array} Returns `array`. 21305 * @example 21306 * 21307 * var array = [1, 2, 3]; 21308 * 21309 * _.reverse(array); 21310 * // => [3, 2, 1] 21311 * 21312 * console.log(array); 21313 * // => [3, 2, 1] 21314 */ 21315 function reverse(array) { 21316 return array == null ? array : nativeReverse.call(array); 21317 } 21318 21319 /** 21320 * Creates a slice of `array` from `start` up to, but not including, `end`. 21321 * 21322 * **Note:** This method is used instead of 21323 * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are 21324 * returned. 21325 * 21326 * @static 21327 * @memberOf _ 21328 * @since 3.0.0 21329 * @category Array 21330 * @param {Array} array The array to slice. 21331 * @param {number} [start=0] The start position. 21332 * @param {number} [end=array.length] The end position. 21333 * @returns {Array} Returns the slice of `array`. 21334 */ 21335 function slice(array, start, end) { 21336 var length = array == null ? 0 : array.length; 21337 if (!length) { 21338 return []; 21339 } 21340 if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { 21341 start = 0; 21342 end = length; 21343 } 21344 else { 21345 start = start == null ? 0 : toInteger(start); 21346 end = end === undefined ? length : toInteger(end); 21347 } 21348 return baseSlice(array, start, end); 21349 } 21350 21351 /** 21352 * Uses a binary search to determine the lowest index at which `value` 21353 * should be inserted into `array` in order to maintain its sort order. 21354 * 21355 * @static 21356 * @memberOf _ 21357 * @since 0.1.0 21358 * @category Array 21359 * @param {Array} array The sorted array to inspect. 21360 * @param {*} value The value to evaluate. 21361 * @returns {number} Returns the index at which `value` should be inserted 21362 * into `array`. 21363 * @example 21364 * 21365 * _.sortedIndex([30, 50], 40); 21366 * // => 1 21367 */ 21368 function sortedIndex(array, value) { 21369 return baseSortedIndex(array, value); 21370 } 21371 21372 /** 21373 * This method is like `_.sortedIndex` except that it accepts `iteratee` 21374 * which is invoked for `value` and each element of `array` to compute their 21375 * sort ranking. The iteratee is invoked with one argument: (value). 21376 * 21377 * @static 21378 * @memberOf _ 21379 * @since 4.0.0 21380 * @category Array 21381 * @param {Array} array The sorted array to inspect. 21382 * @param {*} value The value to evaluate. 21383 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 21384 * @returns {number} Returns the index at which `value` should be inserted 21385 * into `array`. 21386 * @example 21387 * 21388 * var objects = [{ 'x': 4 }, { 'x': 5 }]; 21389 * 21390 * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); 21391 * // => 0 21392 * 21393 * // The `_.property` iteratee shorthand. 21394 * _.sortedIndexBy(objects, { 'x': 4 }, 'x'); 21395 * // => 0 21396 */ 21397 function sortedIndexBy(array, value, iteratee) { 21398 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2)); 21399 } 21400 21401 /** 21402 * This method is like `_.indexOf` except that it performs a binary 21403 * search on a sorted `array`. 21404 * 21405 * @static 21406 * @memberOf _ 21407 * @since 4.0.0 21408 * @category Array 21409 * @param {Array} array The array to inspect. 21410 * @param {*} value The value to search for. 21411 * @returns {number} Returns the index of the matched value, else `-1`. 21412 * @example 21413 * 21414 * _.sortedIndexOf([4, 5, 5, 5, 6], 5); 21415 * // => 1 21416 */ 21417 function sortedIndexOf(array, value) { 21418 var length = array == null ? 0 : array.length; 21419 if (length) { 21420 var index = baseSortedIndex(array, value); 21421 if (index < length && eq(array[index], value)) { 21422 return index; 21423 } 21424 } 21425 return -1; 21426 } 21427 21428 /** 21429 * This method is like `_.sortedIndex` except that it returns the highest 21430 * index at which `value` should be inserted into `array` in order to 21431 * maintain its sort order. 21432 * 21433 * @static 21434 * @memberOf _ 21435 * @since 3.0.0 21436 * @category Array 21437 * @param {Array} array The sorted array to inspect. 21438 * @param {*} value The value to evaluate. 21439 * @returns {number} Returns the index at which `value` should be inserted 21440 * into `array`. 21441 * @example 21442 * 21443 * _.sortedLastIndex([4, 5, 5, 5, 6], 5); 21444 * // => 4 21445 */ 21446 function sortedLastIndex(array, value) { 21447 return baseSortedIndex(array, value, true); 21448 } 21449 21450 /** 21451 * This method is like `_.sortedLastIndex` except that it accepts `iteratee` 21452 * which is invoked for `value` and each element of `array` to compute their 21453 * sort ranking. The iteratee is invoked with one argument: (value). 21454 * 21455 * @static 21456 * @memberOf _ 21457 * @since 4.0.0 21458 * @category Array 21459 * @param {Array} array The sorted array to inspect. 21460 * @param {*} value The value to evaluate. 21461 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 21462 * @returns {number} Returns the index at which `value` should be inserted 21463 * into `array`. 21464 * @example 21465 * 21466 * var objects = [{ 'x': 4 }, { 'x': 5 }]; 21467 * 21468 * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; }); 21469 * // => 1 21470 * 21471 * // The `_.property` iteratee shorthand. 21472 * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x'); 21473 * // => 1 21474 */ 21475 function sortedLastIndexBy(array, value, iteratee) { 21476 return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true); 21477 } 21478 21479 /** 21480 * This method is like `_.lastIndexOf` except that it performs a binary 21481 * search on a sorted `array`. 21482 * 21483 * @static 21484 * @memberOf _ 21485 * @since 4.0.0 21486 * @category Array 21487 * @param {Array} array The array to inspect. 21488 * @param {*} value The value to search for. 21489 * @returns {number} Returns the index of the matched value, else `-1`. 21490 * @example 21491 * 21492 * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5); 21493 * // => 3 21494 */ 21495 function sortedLastIndexOf(array, value) { 21496 var length = array == null ? 0 : array.length; 21497 if (length) { 21498 var index = baseSortedIndex(array, value, true) - 1; 21499 if (eq(array[index], value)) { 21500 return index; 21501 } 21502 } 21503 return -1; 21504 } 21505 21506 /** 21507 * This method is like `_.uniq` except that it's designed and optimized 21508 * for sorted arrays. 21509 * 21510 * @static 21511 * @memberOf _ 21512 * @since 4.0.0 21513 * @category Array 21514 * @param {Array} array The array to inspect. 21515 * @returns {Array} Returns the new duplicate free array. 21516 * @example 21517 * 21518 * _.sortedUniq([1, 1, 2]); 21519 * // => [1, 2] 21520 */ 21521 function sortedUniq(array) { 21522 return (array && array.length) 21523 ? baseSortedUniq(array) 21524 : []; 21525 } 21526 21527 /** 21528 * This method is like `_.uniqBy` except that it's designed and optimized 21529 * for sorted arrays. 21530 * 21531 * @static 21532 * @memberOf _ 21533 * @since 4.0.0 21534 * @category Array 21535 * @param {Array} array The array to inspect. 21536 * @param {Function} [iteratee] The iteratee invoked per element. 21537 * @returns {Array} Returns the new duplicate free array. 21538 * @example 21539 * 21540 * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); 21541 * // => [1.1, 2.3] 21542 */ 21543 function sortedUniqBy(array, iteratee) { 21544 return (array && array.length) 21545 ? baseSortedUniq(array, getIteratee(iteratee, 2)) 21546 : []; 21547 } 21548 21549 /** 21550 * Gets all but the first element of `array`. 21551 * 21552 * @static 21553 * @memberOf _ 21554 * @since 4.0.0 21555 * @category Array 21556 * @param {Array} array The array to query. 21557 * @returns {Array} Returns the slice of `array`. 21558 * @example 21559 * 21560 * _.tail([1, 2, 3]); 21561 * // => [2, 3] 21562 */ 21563 function tail(array) { 21564 var length = array == null ? 0 : array.length; 21565 return length ? baseSlice(array, 1, length) : []; 21566 } 21567 21568 /** 21569 * Creates a slice of `array` with `n` elements taken from the beginning. 21570 * 21571 * @static 21572 * @memberOf _ 21573 * @since 0.1.0 21574 * @category Array 21575 * @param {Array} array The array to query. 21576 * @param {number} [n=1] The number of elements to take. 21577 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 21578 * @returns {Array} Returns the slice of `array`. 21579 * @example 21580 * 21581 * _.take([1, 2, 3]); 21582 * // => [1] 21583 * 21584 * _.take([1, 2, 3], 2); 21585 * // => [1, 2] 21586 * 21587 * _.take([1, 2, 3], 5); 21588 * // => [1, 2, 3] 21589 * 21590 * _.take([1, 2, 3], 0); 21591 * // => [] 21592 */ 21593 function take(array, n, guard) { 21594 if (!(array && array.length)) { 21595 return []; 21596 } 21597 n = (guard || n === undefined) ? 1 : toInteger(n); 21598 return baseSlice(array, 0, n < 0 ? 0 : n); 21599 } 21600 21601 /** 21602 * Creates a slice of `array` with `n` elements taken from the end. 21603 * 21604 * @static 21605 * @memberOf _ 21606 * @since 3.0.0 21607 * @category Array 21608 * @param {Array} array The array to query. 21609 * @param {number} [n=1] The number of elements to take. 21610 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 21611 * @returns {Array} Returns the slice of `array`. 21612 * @example 21613 * 21614 * _.takeRight([1, 2, 3]); 21615 * // => [3] 21616 * 21617 * _.takeRight([1, 2, 3], 2); 21618 * // => [2, 3] 21619 * 21620 * _.takeRight([1, 2, 3], 5); 21621 * // => [1, 2, 3] 21622 * 21623 * _.takeRight([1, 2, 3], 0); 21624 * // => [] 21625 */ 21626 function takeRight(array, n, guard) { 21627 var length = array == null ? 0 : array.length; 21628 if (!length) { 21629 return []; 21630 } 21631 n = (guard || n === undefined) ? 1 : toInteger(n); 21632 n = length - n; 21633 return baseSlice(array, n < 0 ? 0 : n, length); 21634 } 21635 21636 /** 21637 * Creates a slice of `array` with elements taken from the end. Elements are 21638 * taken until `predicate` returns falsey. The predicate is invoked with 21639 * three arguments: (value, index, array). 21640 * 21641 * @static 21642 * @memberOf _ 21643 * @since 3.0.0 21644 * @category Array 21645 * @param {Array} array The array to query. 21646 * @param {Function} [predicate=_.identity] The function invoked per iteration. 21647 * @returns {Array} Returns the slice of `array`. 21648 * @example 21649 * 21650 * var users = [ 21651 * { 'user': 'barney', 'active': true }, 21652 * { 'user': 'fred', 'active': false }, 21653 * { 'user': 'pebbles', 'active': false } 21654 * ]; 21655 * 21656 * _.takeRightWhile(users, function(o) { return !o.active; }); 21657 * // => objects for ['fred', 'pebbles'] 21658 * 21659 * // The `_.matches` iteratee shorthand. 21660 * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); 21661 * // => objects for ['pebbles'] 21662 * 21663 * // The `_.matchesProperty` iteratee shorthand. 21664 * _.takeRightWhile(users, ['active', false]); 21665 * // => objects for ['fred', 'pebbles'] 21666 * 21667 * // The `_.property` iteratee shorthand. 21668 * _.takeRightWhile(users, 'active'); 21669 * // => [] 21670 */ 21671 function takeRightWhile(array, predicate) { 21672 return (array && array.length) 21673 ? baseWhile(array, getIteratee(predicate, 3), false, true) 21674 : []; 21675 } 21676 21677 /** 21678 * Creates a slice of `array` with elements taken from the beginning. Elements 21679 * are taken until `predicate` returns falsey. The predicate is invoked with 21680 * three arguments: (value, index, array). 21681 * 21682 * @static 21683 * @memberOf _ 21684 * @since 3.0.0 21685 * @category Array 21686 * @param {Array} array The array to query. 21687 * @param {Function} [predicate=_.identity] The function invoked per iteration. 21688 * @returns {Array} Returns the slice of `array`. 21689 * @example 21690 * 21691 * var users = [ 21692 * { 'user': 'barney', 'active': false }, 21693 * { 'user': 'fred', 'active': false }, 21694 * { 'user': 'pebbles', 'active': true } 21695 * ]; 21696 * 21697 * _.takeWhile(users, function(o) { return !o.active; }); 21698 * // => objects for ['barney', 'fred'] 21699 * 21700 * // The `_.matches` iteratee shorthand. 21701 * _.takeWhile(users, { 'user': 'barney', 'active': false }); 21702 * // => objects for ['barney'] 21703 * 21704 * // The `_.matchesProperty` iteratee shorthand. 21705 * _.takeWhile(users, ['active', false]); 21706 * // => objects for ['barney', 'fred'] 21707 * 21708 * // The `_.property` iteratee shorthand. 21709 * _.takeWhile(users, 'active'); 21710 * // => [] 21711 */ 21712 function takeWhile(array, predicate) { 21713 return (array && array.length) 21714 ? baseWhile(array, getIteratee(predicate, 3)) 21715 : []; 21716 } 21717 21718 /** 21719 * Creates an array of unique values, in order, from all given arrays using 21720 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 21721 * for equality comparisons. 21722 * 21723 * @static 21724 * @memberOf _ 21725 * @since 0.1.0 21726 * @category Array 21727 * @param {...Array} [arrays] The arrays to inspect. 21728 * @returns {Array} Returns the new array of combined values. 21729 * @example 21730 * 21731 * _.union([2], [1, 2]); 21732 * // => [2, 1] 21733 */ 21734 var union = baseRest(function(arrays) { 21735 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); 21736 }); 21737 21738 /** 21739 * This method is like `_.union` except that it accepts `iteratee` which is 21740 * invoked for each element of each `arrays` to generate the criterion by 21741 * which uniqueness is computed. Result values are chosen from the first 21742 * array in which the value occurs. The iteratee is invoked with one argument: 21743 * (value). 21744 * 21745 * @static 21746 * @memberOf _ 21747 * @since 4.0.0 21748 * @category Array 21749 * @param {...Array} [arrays] The arrays to inspect. 21750 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 21751 * @returns {Array} Returns the new array of combined values. 21752 * @example 21753 * 21754 * _.unionBy([2.1], [1.2, 2.3], Math.floor); 21755 * // => [2.1, 1.2] 21756 * 21757 * // The `_.property` iteratee shorthand. 21758 * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); 21759 * // => [{ 'x': 1 }, { 'x': 2 }] 21760 */ 21761 var unionBy = baseRest(function(arrays) { 21762 var iteratee = last(arrays); 21763 if (isArrayLikeObject(iteratee)) { 21764 iteratee = undefined; 21765 } 21766 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)); 21767 }); 21768 21769 /** 21770 * This method is like `_.union` except that it accepts `comparator` which 21771 * is invoked to compare elements of `arrays`. Result values are chosen from 21772 * the first array in which the value occurs. The comparator is invoked 21773 * with two arguments: (arrVal, othVal). 21774 * 21775 * @static 21776 * @memberOf _ 21777 * @since 4.0.0 21778 * @category Array 21779 * @param {...Array} [arrays] The arrays to inspect. 21780 * @param {Function} [comparator] The comparator invoked per element. 21781 * @returns {Array} Returns the new array of combined values. 21782 * @example 21783 * 21784 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; 21785 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; 21786 * 21787 * _.unionWith(objects, others, _.isEqual); 21788 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] 21789 */ 21790 var unionWith = baseRest(function(arrays) { 21791 var comparator = last(arrays); 21792 comparator = typeof comparator == 'function' ? comparator : undefined; 21793 return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator); 21794 }); 21795 21796 /** 21797 * Creates a duplicate-free version of an array, using 21798 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 21799 * for equality comparisons, in which only the first occurrence of each element 21800 * is kept. The order of result values is determined by the order they occur 21801 * in the array. 21802 * 21803 * @static 21804 * @memberOf _ 21805 * @since 0.1.0 21806 * @category Array 21807 * @param {Array} array The array to inspect. 21808 * @returns {Array} Returns the new duplicate free array. 21809 * @example 21810 * 21811 * _.uniq([2, 1, 2]); 21812 * // => [2, 1] 21813 */ 21814 function uniq(array) { 21815 return (array && array.length) ? baseUniq(array) : []; 21816 } 21817 21818 /** 21819 * This method is like `_.uniq` except that it accepts `iteratee` which is 21820 * invoked for each element in `array` to generate the criterion by which 21821 * uniqueness is computed. The order of result values is determined by the 21822 * order they occur in the array. The iteratee is invoked with one argument: 21823 * (value). 21824 * 21825 * @static 21826 * @memberOf _ 21827 * @since 4.0.0 21828 * @category Array 21829 * @param {Array} array The array to inspect. 21830 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 21831 * @returns {Array} Returns the new duplicate free array. 21832 * @example 21833 * 21834 * _.uniqBy([2.1, 1.2, 2.3], Math.floor); 21835 * // => [2.1, 1.2] 21836 * 21837 * // The `_.property` iteratee shorthand. 21838 * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); 21839 * // => [{ 'x': 1 }, { 'x': 2 }] 21840 */ 21841 function uniqBy(array, iteratee) { 21842 return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : []; 21843 } 21844 21845 /** 21846 * This method is like `_.uniq` except that it accepts `comparator` which 21847 * is invoked to compare elements of `array`. The order of result values is 21848 * determined by the order they occur in the array.The comparator is invoked 21849 * with two arguments: (arrVal, othVal). 21850 * 21851 * @static 21852 * @memberOf _ 21853 * @since 4.0.0 21854 * @category Array 21855 * @param {Array} array The array to inspect. 21856 * @param {Function} [comparator] The comparator invoked per element. 21857 * @returns {Array} Returns the new duplicate free array. 21858 * @example 21859 * 21860 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }]; 21861 * 21862 * _.uniqWith(objects, _.isEqual); 21863 * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }] 21864 */ 21865 function uniqWith(array, comparator) { 21866 comparator = typeof comparator == 'function' ? comparator : undefined; 21867 return (array && array.length) ? baseUniq(array, undefined, comparator) : []; 21868 } 21869 21870 /** 21871 * This method is like `_.zip` except that it accepts an array of grouped 21872 * elements and creates an array regrouping the elements to their pre-zip 21873 * configuration. 21874 * 21875 * @static 21876 * @memberOf _ 21877 * @since 1.2.0 21878 * @category Array 21879 * @param {Array} array The array of grouped elements to process. 21880 * @returns {Array} Returns the new array of regrouped elements. 21881 * @example 21882 * 21883 * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); 21884 * // => [['a', 1, true], ['b', 2, false]] 21885 * 21886 * _.unzip(zipped); 21887 * // => [['a', 'b'], [1, 2], [true, false]] 21888 */ 21889 function unzip(array) { 21890 if (!(array && array.length)) { 21891 return []; 21892 } 21893 var length = 0; 21894 array = arrayFilter(array, function(group) { 21895 if (isArrayLikeObject(group)) { 21896 length = nativeMax(group.length, length); 21897 return true; 21898 } 21899 }); 21900 return baseTimes(length, function(index) { 21901 return arrayMap(array, baseProperty(index)); 21902 }); 21903 } 21904 21905 /** 21906 * This method is like `_.unzip` except that it accepts `iteratee` to specify 21907 * how regrouped values should be combined. The iteratee is invoked with the 21908 * elements of each group: (...group). 21909 * 21910 * @static 21911 * @memberOf _ 21912 * @since 3.8.0 21913 * @category Array 21914 * @param {Array} array The array of grouped elements to process. 21915 * @param {Function} [iteratee=_.identity] The function to combine 21916 * regrouped values. 21917 * @returns {Array} Returns the new array of regrouped elements. 21918 * @example 21919 * 21920 * var zipped = _.zip([1, 2], [10, 20], [100, 200]); 21921 * // => [[1, 10, 100], [2, 20, 200]] 21922 * 21923 * _.unzipWith(zipped, _.add); 21924 * // => [3, 30, 300] 21925 */ 21926 function unzipWith(array, iteratee) { 21927 if (!(array && array.length)) { 21928 return []; 21929 } 21930 var result = unzip(array); 21931 if (iteratee == null) { 21932 return result; 21933 } 21934 return arrayMap(result, function(group) { 21935 return apply(iteratee, undefined, group); 21936 }); 21937 } 21938 21939 /** 21940 * Creates an array excluding all given values using 21941 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 21942 * for equality comparisons. 21943 * 21944 * **Note:** Unlike `_.pull`, this method returns a new array. 21945 * 21946 * @static 21947 * @memberOf _ 21948 * @since 0.1.0 21949 * @category Array 21950 * @param {Array} array The array to inspect. 21951 * @param {...*} [values] The values to exclude. 21952 * @returns {Array} Returns the new array of filtered values. 21953 * @see _.difference, _.xor 21954 * @example 21955 * 21956 * _.without([2, 1, 2, 3], 1, 2); 21957 * // => [3] 21958 */ 21959 var without = baseRest(function(array, values) { 21960 return isArrayLikeObject(array) 21961 ? baseDifference(array, values) 21962 : []; 21963 }); 21964 21965 /** 21966 * Creates an array of unique values that is the 21967 * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference) 21968 * of the given arrays. The order of result values is determined by the order 21969 * they occur in the arrays. 21970 * 21971 * @static 21972 * @memberOf _ 21973 * @since 2.4.0 21974 * @category Array 21975 * @param {...Array} [arrays] The arrays to inspect. 21976 * @returns {Array} Returns the new array of filtered values. 21977 * @see _.difference, _.without 21978 * @example 21979 * 21980 * _.xor([2, 1], [2, 3]); 21981 * // => [1, 3] 21982 */ 21983 var xor = baseRest(function(arrays) { 21984 return baseXor(arrayFilter(arrays, isArrayLikeObject)); 21985 }); 21986 21987 /** 21988 * This method is like `_.xor` except that it accepts `iteratee` which is 21989 * invoked for each element of each `arrays` to generate the criterion by 21990 * which by which they're compared. The order of result values is determined 21991 * by the order they occur in the arrays. The iteratee is invoked with one 21992 * argument: (value). 21993 * 21994 * @static 21995 * @memberOf _ 21996 * @since 4.0.0 21997 * @category Array 21998 * @param {...Array} [arrays] The arrays to inspect. 21999 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 22000 * @returns {Array} Returns the new array of filtered values. 22001 * @example 22002 * 22003 * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor); 22004 * // => [1.2, 3.4] 22005 * 22006 * // The `_.property` iteratee shorthand. 22007 * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); 22008 * // => [{ 'x': 2 }] 22009 */ 22010 var xorBy = baseRest(function(arrays) { 22011 var iteratee = last(arrays); 22012 if (isArrayLikeObject(iteratee)) { 22013 iteratee = undefined; 22014 } 22015 return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2)); 22016 }); 22017 22018 /** 22019 * This method is like `_.xor` except that it accepts `comparator` which is 22020 * invoked to compare elements of `arrays`. The order of result values is 22021 * determined by the order they occur in the arrays. The comparator is invoked 22022 * with two arguments: (arrVal, othVal). 22023 * 22024 * @static 22025 * @memberOf _ 22026 * @since 4.0.0 22027 * @category Array 22028 * @param {...Array} [arrays] The arrays to inspect. 22029 * @param {Function} [comparator] The comparator invoked per element. 22030 * @returns {Array} Returns the new array of filtered values. 22031 * @example 22032 * 22033 * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]; 22034 * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }]; 22035 * 22036 * _.xorWith(objects, others, _.isEqual); 22037 * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }] 22038 */ 22039 var xorWith = baseRest(function(arrays) { 22040 var comparator = last(arrays); 22041 comparator = typeof comparator == 'function' ? comparator : undefined; 22042 return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator); 22043 }); 22044 22045 /** 22046 * Creates an array of grouped elements, the first of which contains the 22047 * first elements of the given arrays, the second of which contains the 22048 * second elements of the given arrays, and so on. 22049 * 22050 * @static 22051 * @memberOf _ 22052 * @since 0.1.0 22053 * @category Array 22054 * @param {...Array} [arrays] The arrays to process. 22055 * @returns {Array} Returns the new array of grouped elements. 22056 * @example 22057 * 22058 * _.zip(['a', 'b'], [1, 2], [true, false]); 22059 * // => [['a', 1, true], ['b', 2, false]] 22060 */ 22061 var zip = baseRest(unzip); 22062 22063 /** 22064 * This method is like `_.fromPairs` except that it accepts two arrays, 22065 * one of property identifiers and one of corresponding values. 22066 * 22067 * @static 22068 * @memberOf _ 22069 * @since 0.4.0 22070 * @category Array 22071 * @param {Array} [props=[]] The property identifiers. 22072 * @param {Array} [values=[]] The property values. 22073 * @returns {Object} Returns the new object. 22074 * @example 22075 * 22076 * _.zipObject(['a', 'b'], [1, 2]); 22077 * // => { 'a': 1, 'b': 2 } 22078 */ 22079 function zipObject(props, values) { 22080 return baseZipObject(props || [], values || [], assignValue); 22081 } 22082 22083 /** 22084 * This method is like `_.zipObject` except that it supports property paths. 22085 * 22086 * @static 22087 * @memberOf _ 22088 * @since 4.1.0 22089 * @category Array 22090 * @param {Array} [props=[]] The property identifiers. 22091 * @param {Array} [values=[]] The property values. 22092 * @returns {Object} Returns the new object. 22093 * @example 22094 * 22095 * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]); 22096 * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } } 22097 */ 22098 function zipObjectDeep(props, values) { 22099 return baseZipObject(props || [], values || [], baseSet); 22100 } 22101 22102 /** 22103 * This method is like `_.zip` except that it accepts `iteratee` to specify 22104 * how grouped values should be combined. The iteratee is invoked with the 22105 * elements of each group: (...group). 22106 * 22107 * @static 22108 * @memberOf _ 22109 * @since 3.8.0 22110 * @category Array 22111 * @param {...Array} [arrays] The arrays to process. 22112 * @param {Function} [iteratee=_.identity] The function to combine 22113 * grouped values. 22114 * @returns {Array} Returns the new array of grouped elements. 22115 * @example 22116 * 22117 * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) { 22118 * return a + b + c; 22119 * }); 22120 * // => [111, 222] 22121 */ 22122 var zipWith = baseRest(function(arrays) { 22123 var length = arrays.length, 22124 iteratee = length > 1 ? arrays[length - 1] : undefined; 22125 22126 iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined; 22127 return unzipWith(arrays, iteratee); 22128 }); 22129 22130 /*------------------------------------------------------------------------*/ 22131 22132 /** 22133 * Creates a `lodash` wrapper instance that wraps `value` with explicit method 22134 * chain sequences enabled. The result of such sequences must be unwrapped 22135 * with `_#value`. 22136 * 22137 * @static 22138 * @memberOf _ 22139 * @since 1.3.0 22140 * @category Seq 22141 * @param {*} value The value to wrap. 22142 * @returns {Object} Returns the new `lodash` wrapper instance. 22143 * @example 22144 * 22145 * var users = [ 22146 * { 'user': 'barney', 'age': 36 }, 22147 * { 'user': 'fred', 'age': 40 }, 22148 * { 'user': 'pebbles', 'age': 1 } 22149 * ]; 22150 * 22151 * var youngest = _ 22152 * .chain(users) 22153 * .sortBy('age') 22154 * .map(function(o) { 22155 * return o.user + ' is ' + o.age; 22156 * }) 22157 * .head() 22158 * .value(); 22159 * // => 'pebbles is 1' 22160 */ 22161 function chain(value) { 22162 var result = lodash(value); 22163 result.__chain__ = true; 22164 return result; 22165 } 22166 22167 /** 22168 * This method invokes `interceptor` and returns `value`. The interceptor 22169 * is invoked with one argument; (value). The purpose of this method is to 22170 * "tap into" a method chain sequence in order to modify intermediate results. 22171 * 22172 * @static 22173 * @memberOf _ 22174 * @since 0.1.0 22175 * @category Seq 22176 * @param {*} value The value to provide to `interceptor`. 22177 * @param {Function} interceptor The function to invoke. 22178 * @returns {*} Returns `value`. 22179 * @example 22180 * 22181 * _([1, 2, 3]) 22182 * .tap(function(array) { 22183 * // Mutate input array. 22184 * array.pop(); 22185 * }) 22186 * .reverse() 22187 * .value(); 22188 * // => [2, 1] 22189 */ 22190 function tap(value, interceptor) { 22191 interceptor(value); 22192 return value; 22193 } 22194 22195 /** 22196 * This method is like `_.tap` except that it returns the result of `interceptor`. 22197 * The purpose of this method is to "pass thru" values replacing intermediate 22198 * results in a method chain sequence. 22199 * 22200 * @static 22201 * @memberOf _ 22202 * @since 3.0.0 22203 * @category Seq 22204 * @param {*} value The value to provide to `interceptor`. 22205 * @param {Function} interceptor The function to invoke. 22206 * @returns {*} Returns the result of `interceptor`. 22207 * @example 22208 * 22209 * _(' abc ') 22210 * .chain() 22211 * .trim() 22212 * .thru(function(value) { 22213 * return [value]; 22214 * }) 22215 * .value(); 22216 * // => ['abc'] 22217 */ 22218 function thru(value, interceptor) { 22219 return interceptor(value); 22220 } 22221 22222 /** 22223 * This method is the wrapper version of `_.at`. 22224 * 22225 * @name at 22226 * @memberOf _ 22227 * @since 1.0.0 22228 * @category Seq 22229 * @param {...(string|string[])} [paths] The property paths to pick. 22230 * @returns {Object} Returns the new `lodash` wrapper instance. 22231 * @example 22232 * 22233 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; 22234 * 22235 * _(object).at(['a[0].b.c', 'a[1]']).value(); 22236 * // => [3, 4] 22237 */ 22238 var wrapperAt = flatRest(function(paths) { 22239 var length = paths.length, 22240 start = length ? paths[0] : 0, 22241 value = this.__wrapped__, 22242 interceptor = function(object) { return baseAt(object, paths); }; 22243 22244 if (length > 1 || this.__actions__.length || 22245 !(value instanceof LazyWrapper) || !isIndex(start)) { 22246 return this.thru(interceptor); 22247 } 22248 value = value.slice(start, +start + (length ? 1 : 0)); 22249 value.__actions__.push({ 22250 'func': thru, 22251 'args': [interceptor], 22252 'thisArg': undefined 22253 }); 22254 return new LodashWrapper(value, this.__chain__).thru(function(array) { 22255 if (length && !array.length) { 22256 array.push(undefined); 22257 } 22258 return array; 22259 }); 22260 }); 22261 22262 /** 22263 * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. 22264 * 22265 * @name chain 22266 * @memberOf _ 22267 * @since 0.1.0 22268 * @category Seq 22269 * @returns {Object} Returns the new `lodash` wrapper instance. 22270 * @example 22271 * 22272 * var users = [ 22273 * { 'user': 'barney', 'age': 36 }, 22274 * { 'user': 'fred', 'age': 40 } 22275 * ]; 22276 * 22277 * // A sequence without explicit chaining. 22278 * _(users).head(); 22279 * // => { 'user': 'barney', 'age': 36 } 22280 * 22281 * // A sequence with explicit chaining. 22282 * _(users) 22283 * .chain() 22284 * .head() 22285 * .pick('user') 22286 * .value(); 22287 * // => { 'user': 'barney' } 22288 */ 22289 function wrapperChain() { 22290 return chain(this); 22291 } 22292 22293 /** 22294 * Executes the chain sequence and returns the wrapped result. 22295 * 22296 * @name commit 22297 * @memberOf _ 22298 * @since 3.2.0 22299 * @category Seq 22300 * @returns {Object} Returns the new `lodash` wrapper instance. 22301 * @example 22302 * 22303 * var array = [1, 2]; 22304 * var wrapped = _(array).push(3); 22305 * 22306 * console.log(array); 22307 * // => [1, 2] 22308 * 22309 * wrapped = wrapped.commit(); 22310 * console.log(array); 22311 * // => [1, 2, 3] 22312 * 22313 * wrapped.last(); 22314 * // => 3 22315 * 22316 * console.log(array); 22317 * // => [1, 2, 3] 22318 */ 22319 function wrapperCommit() { 22320 return new LodashWrapper(this.value(), this.__chain__); 22321 } 22322 22323 /** 22324 * Gets the next value on a wrapped object following the 22325 * [iterator protocol](https://mdn.io/iteration_protocols#iterator). 22326 * 22327 * @name next 22328 * @memberOf _ 22329 * @since 4.0.0 22330 * @category Seq 22331 * @returns {Object} Returns the next iterator value. 22332 * @example 22333 * 22334 * var wrapped = _([1, 2]); 22335 * 22336 * wrapped.next(); 22337 * // => { 'done': false, 'value': 1 } 22338 * 22339 * wrapped.next(); 22340 * // => { 'done': false, 'value': 2 } 22341 * 22342 * wrapped.next(); 22343 * // => { 'done': true, 'value': undefined } 22344 */ 22345 function wrapperNext() { 22346 if (this.__values__ === undefined) { 22347 this.__values__ = toArray(this.value()); 22348 } 22349 var done = this.__index__ >= this.__values__.length, 22350 value = done ? undefined : this.__values__[this.__index__++]; 22351 22352 return { 'done': done, 'value': value }; 22353 } 22354 22355 /** 22356 * Enables the wrapper to be iterable. 22357 * 22358 * @name Symbol.iterator 22359 * @memberOf _ 22360 * @since 4.0.0 22361 * @category Seq 22362 * @returns {Object} Returns the wrapper object. 22363 * @example 22364 * 22365 * var wrapped = _([1, 2]); 22366 * 22367 * wrapped[Symbol.iterator]() === wrapped; 22368 * // => true 22369 * 22370 * Array.from(wrapped); 22371 * // => [1, 2] 22372 */ 22373 function wrapperToIterator() { 22374 return this; 22375 } 22376 22377 /** 22378 * Creates a clone of the chain sequence planting `value` as the wrapped value. 22379 * 22380 * @name plant 22381 * @memberOf _ 22382 * @since 3.2.0 22383 * @category Seq 22384 * @param {*} value The value to plant. 22385 * @returns {Object} Returns the new `lodash` wrapper instance. 22386 * @example 22387 * 22388 * function square(n) { 22389 * return n * n; 22390 * } 22391 * 22392 * var wrapped = _([1, 2]).map(square); 22393 * var other = wrapped.plant([3, 4]); 22394 * 22395 * other.value(); 22396 * // => [9, 16] 22397 * 22398 * wrapped.value(); 22399 * // => [1, 4] 22400 */ 22401 function wrapperPlant(value) { 22402 var result, 22403 parent = this; 22404 22405 while (parent instanceof baseLodash) { 22406 var clone = wrapperClone(parent); 22407 clone.__index__ = 0; 22408 clone.__values__ = undefined; 22409 if (result) { 22410 previous.__wrapped__ = clone; 22411 } else { 22412 result = clone; 22413 } 22414 var previous = clone; 22415 parent = parent.__wrapped__; 22416 } 22417 previous.__wrapped__ = value; 22418 return result; 22419 } 22420 22421 /** 22422 * This method is the wrapper version of `_.reverse`. 22423 * 22424 * **Note:** This method mutates the wrapped array. 22425 * 22426 * @name reverse 22427 * @memberOf _ 22428 * @since 0.1.0 22429 * @category Seq 22430 * @returns {Object} Returns the new `lodash` wrapper instance. 22431 * @example 22432 * 22433 * var array = [1, 2, 3]; 22434 * 22435 * _(array).reverse().value() 22436 * // => [3, 2, 1] 22437 * 22438 * console.log(array); 22439 * // => [3, 2, 1] 22440 */ 22441 function wrapperReverse() { 22442 var value = this.__wrapped__; 22443 if (value instanceof LazyWrapper) { 22444 var wrapped = value; 22445 if (this.__actions__.length) { 22446 wrapped = new LazyWrapper(this); 22447 } 22448 wrapped = wrapped.reverse(); 22449 wrapped.__actions__.push({ 22450 'func': thru, 22451 'args': [reverse], 22452 'thisArg': undefined 22453 }); 22454 return new LodashWrapper(wrapped, this.__chain__); 22455 } 22456 return this.thru(reverse); 22457 } 22458 22459 /** 22460 * Executes the chain sequence to resolve the unwrapped value. 22461 * 22462 * @name value 22463 * @memberOf _ 22464 * @since 0.1.0 22465 * @alias toJSON, valueOf 22466 * @category Seq 22467 * @returns {*} Returns the resolved unwrapped value. 22468 * @example 22469 * 22470 * _([1, 2, 3]).value(); 22471 * // => [1, 2, 3] 22472 */ 22473 function wrapperValue() { 22474 return baseWrapperValue(this.__wrapped__, this.__actions__); 22475 } 22476 22477 /*------------------------------------------------------------------------*/ 22478 22479 /** 22480 * Creates an object composed of keys generated from the results of running 22481 * each element of `collection` thru `iteratee`. The corresponding value of 22482 * each key is the number of times the key was returned by `iteratee`. The 22483 * iteratee is invoked with one argument: (value). 22484 * 22485 * @static 22486 * @memberOf _ 22487 * @since 0.5.0 22488 * @category Collection 22489 * @param {Array|Object} collection The collection to iterate over. 22490 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. 22491 * @returns {Object} Returns the composed aggregate object. 22492 * @example 22493 * 22494 * _.countBy([6.1, 4.2, 6.3], Math.floor); 22495 * // => { '4': 1, '6': 2 } 22496 * 22497 * // The `_.property` iteratee shorthand. 22498 * _.countBy(['one', 'two', 'three'], 'length'); 22499 * // => { '3': 2, '5': 1 } 22500 */ 22501 var countBy = createAggregator(function(result, value, key) { 22502 if (hasOwnProperty.call(result, key)) { 22503 ++result[key]; 22504 } else { 22505 baseAssignValue(result, key, 1); 22506 } 22507 }); 22508 22509 /** 22510 * Checks if `predicate` returns truthy for **all** elements of `collection`. 22511 * Iteration is stopped once `predicate` returns falsey. The predicate is 22512 * invoked with three arguments: (value, index|key, collection). 22513 * 22514 * **Note:** This method returns `true` for 22515 * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because 22516 * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of 22517 * elements of empty collections. 22518 * 22519 * @static 22520 * @memberOf _ 22521 * @since 0.1.0 22522 * @category Collection 22523 * @param {Array|Object} collection The collection to iterate over. 22524 * @param {Function} [predicate=_.identity] The function invoked per iteration. 22525 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 22526 * @returns {boolean} Returns `true` if all elements pass the predicate check, 22527 * else `false`. 22528 * @example 22529 * 22530 * _.every([true, 1, null, 'yes'], Boolean); 22531 * // => false 22532 * 22533 * var users = [ 22534 * { 'user': 'barney', 'age': 36, 'active': false }, 22535 * { 'user': 'fred', 'age': 40, 'active': false } 22536 * ]; 22537 * 22538 * // The `_.matches` iteratee shorthand. 22539 * _.every(users, { 'user': 'barney', 'active': false }); 22540 * // => false 22541 * 22542 * // The `_.matchesProperty` iteratee shorthand. 22543 * _.every(users, ['active', false]); 22544 * // => true 22545 * 22546 * // The `_.property` iteratee shorthand. 22547 * _.every(users, 'active'); 22548 * // => false 22549 */ 22550 function every(collection, predicate, guard) { 22551 var func = isArray(collection) ? arrayEvery : baseEvery; 22552 if (guard && isIterateeCall(collection, predicate, guard)) { 22553 predicate = undefined; 22554 } 22555 return func(collection, getIteratee(predicate, 3)); 22556 } 22557 22558 /** 22559 * Iterates over elements of `collection`, returning an array of all elements 22560 * `predicate` returns truthy for. The predicate is invoked with three 22561 * arguments: (value, index|key, collection). 22562 * 22563 * **Note:** Unlike `_.remove`, this method returns a new array. 22564 * 22565 * @static 22566 * @memberOf _ 22567 * @since 0.1.0 22568 * @category Collection 22569 * @param {Array|Object} collection The collection to iterate over. 22570 * @param {Function} [predicate=_.identity] The function invoked per iteration. 22571 * @returns {Array} Returns the new filtered array. 22572 * @see _.reject 22573 * @example 22574 * 22575 * var users = [ 22576 * { 'user': 'barney', 'age': 36, 'active': true }, 22577 * { 'user': 'fred', 'age': 40, 'active': false } 22578 * ]; 22579 * 22580 * _.filter(users, function(o) { return !o.active; }); 22581 * // => objects for ['fred'] 22582 * 22583 * // The `_.matches` iteratee shorthand. 22584 * _.filter(users, { 'age': 36, 'active': true }); 22585 * // => objects for ['barney'] 22586 * 22587 * // The `_.matchesProperty` iteratee shorthand. 22588 * _.filter(users, ['active', false]); 22589 * // => objects for ['fred'] 22590 * 22591 * // The `_.property` iteratee shorthand. 22592 * _.filter(users, 'active'); 22593 * // => objects for ['barney'] 22594 * 22595 * // Combining several predicates using `_.overEvery` or `_.overSome`. 22596 * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]])); 22597 * // => objects for ['fred', 'barney'] 22598 */ 22599 function filter(collection, predicate) { 22600 var func = isArray(collection) ? arrayFilter : baseFilter; 22601 return func(collection, getIteratee(predicate, 3)); 22602 } 22603 22604 /** 22605 * Iterates over elements of `collection`, returning the first element 22606 * `predicate` returns truthy for. The predicate is invoked with three 22607 * arguments: (value, index|key, collection). 22608 * 22609 * @static 22610 * @memberOf _ 22611 * @since 0.1.0 22612 * @category Collection 22613 * @param {Array|Object} collection The collection to inspect. 22614 * @param {Function} [predicate=_.identity] The function invoked per iteration. 22615 * @param {number} [fromIndex=0] The index to search from. 22616 * @returns {*} Returns the matched element, else `undefined`. 22617 * @example 22618 * 22619 * var users = [ 22620 * { 'user': 'barney', 'age': 36, 'active': true }, 22621 * { 'user': 'fred', 'age': 40, 'active': false }, 22622 * { 'user': 'pebbles', 'age': 1, 'active': true } 22623 * ]; 22624 * 22625 * _.find(users, function(o) { return o.age < 40; }); 22626 * // => object for 'barney' 22627 * 22628 * // The `_.matches` iteratee shorthand. 22629 * _.find(users, { 'age': 1, 'active': true }); 22630 * // => object for 'pebbles' 22631 * 22632 * // The `_.matchesProperty` iteratee shorthand. 22633 * _.find(users, ['active', false]); 22634 * // => object for 'fred' 22635 * 22636 * // The `_.property` iteratee shorthand. 22637 * _.find(users, 'active'); 22638 * // => object for 'barney' 22639 */ 22640 var find = createFind(findIndex); 22641 22642 /** 22643 * This method is like `_.find` except that it iterates over elements of 22644 * `collection` from right to left. 22645 * 22646 * @static 22647 * @memberOf _ 22648 * @since 2.0.0 22649 * @category Collection 22650 * @param {Array|Object} collection The collection to inspect. 22651 * @param {Function} [predicate=_.identity] The function invoked per iteration. 22652 * @param {number} [fromIndex=collection.length-1] The index to search from. 22653 * @returns {*} Returns the matched element, else `undefined`. 22654 * @example 22655 * 22656 * _.findLast([1, 2, 3, 4], function(n) { 22657 * return n % 2 == 1; 22658 * }); 22659 * // => 3 22660 */ 22661 var findLast = createFind(findLastIndex); 22662 22663 /** 22664 * Creates a flattened array of values by running each element in `collection` 22665 * thru `iteratee` and flattening the mapped results. The iteratee is invoked 22666 * with three arguments: (value, index|key, collection). 22667 * 22668 * @static 22669 * @memberOf _ 22670 * @since 4.0.0 22671 * @category Collection 22672 * @param {Array|Object} collection The collection to iterate over. 22673 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 22674 * @returns {Array} Returns the new flattened array. 22675 * @example 22676 * 22677 * function duplicate(n) { 22678 * return [n, n]; 22679 * } 22680 * 22681 * _.flatMap([1, 2], duplicate); 22682 * // => [1, 1, 2, 2] 22683 */ 22684 function flatMap(collection, iteratee) { 22685 return baseFlatten(map(collection, iteratee), 1); 22686 } 22687 22688 /** 22689 * This method is like `_.flatMap` except that it recursively flattens the 22690 * mapped results. 22691 * 22692 * @static 22693 * @memberOf _ 22694 * @since 4.7.0 22695 * @category Collection 22696 * @param {Array|Object} collection The collection to iterate over. 22697 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 22698 * @returns {Array} Returns the new flattened array. 22699 * @example 22700 * 22701 * function duplicate(n) { 22702 * return [[[n, n]]]; 22703 * } 22704 * 22705 * _.flatMapDeep([1, 2], duplicate); 22706 * // => [1, 1, 2, 2] 22707 */ 22708 function flatMapDeep(collection, iteratee) { 22709 return baseFlatten(map(collection, iteratee), INFINITY); 22710 } 22711 22712 /** 22713 * This method is like `_.flatMap` except that it recursively flattens the 22714 * mapped results up to `depth` times. 22715 * 22716 * @static 22717 * @memberOf _ 22718 * @since 4.7.0 22719 * @category Collection 22720 * @param {Array|Object} collection The collection to iterate over. 22721 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 22722 * @param {number} [depth=1] The maximum recursion depth. 22723 * @returns {Array} Returns the new flattened array. 22724 * @example 22725 * 22726 * function duplicate(n) { 22727 * return [[[n, n]]]; 22728 * } 22729 * 22730 * _.flatMapDepth([1, 2], duplicate, 2); 22731 * // => [[1, 1], [2, 2]] 22732 */ 22733 function flatMapDepth(collection, iteratee, depth) { 22734 depth = depth === undefined ? 1 : toInteger(depth); 22735 return baseFlatten(map(collection, iteratee), depth); 22736 } 22737 22738 /** 22739 * Iterates over elements of `collection` and invokes `iteratee` for each element. 22740 * The iteratee is invoked with three arguments: (value, index|key, collection). 22741 * Iteratee functions may exit iteration early by explicitly returning `false`. 22742 * 22743 * **Note:** As with other "Collections" methods, objects with a "length" 22744 * property are iterated like arrays. To avoid this behavior use `_.forIn` 22745 * or `_.forOwn` for object iteration. 22746 * 22747 * @static 22748 * @memberOf _ 22749 * @since 0.1.0 22750 * @alias each 22751 * @category Collection 22752 * @param {Array|Object} collection The collection to iterate over. 22753 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 22754 * @returns {Array|Object} Returns `collection`. 22755 * @see _.forEachRight 22756 * @example 22757 * 22758 * _.forEach([1, 2], function(value) { 22759 * console.log(value); 22760 * }); 22761 * // => Logs `1` then `2`. 22762 * 22763 * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { 22764 * console.log(key); 22765 * }); 22766 * // => Logs 'a' then 'b' (iteration order is not guaranteed). 22767 */ 22768 function forEach(collection, iteratee) { 22769 var func = isArray(collection) ? arrayEach : baseEach; 22770 return func(collection, getIteratee(iteratee, 3)); 22771 } 22772 22773 /** 22774 * This method is like `_.forEach` except that it iterates over elements of 22775 * `collection` from right to left. 22776 * 22777 * @static 22778 * @memberOf _ 22779 * @since 2.0.0 22780 * @alias eachRight 22781 * @category Collection 22782 * @param {Array|Object} collection The collection to iterate over. 22783 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 22784 * @returns {Array|Object} Returns `collection`. 22785 * @see _.forEach 22786 * @example 22787 * 22788 * _.forEachRight([1, 2], function(value) { 22789 * console.log(value); 22790 * }); 22791 * // => Logs `2` then `1`. 22792 */ 22793 function forEachRight(collection, iteratee) { 22794 var func = isArray(collection) ? arrayEachRight : baseEachRight; 22795 return func(collection, getIteratee(iteratee, 3)); 22796 } 22797 22798 /**
vendor: 4,136 bytes, lines 22799-22906
22799 * Creates an object composed of keys generated from the results of running 22800 * each element of `collection` thru `iteratee`. The order of grouped values 22801 * is determined by the order they occur in `collection`. The corresponding 22802 * value of each key is an array of elements responsible for generating the 22803 * key. The iteratee is invoked with one argument: (value). 22804 * 22805 * @static 22806 * @memberOf _ 22807 * @since 0.1.0 22808 * @category Collection 22809 * @param {Array|Object} collection The collection to iterate over. 22810 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. 22811 * @returns {Object} Returns the composed aggregate object. 22812 * @example 22813 * 22814 * _.groupBy([6.1, 4.2, 6.3], Math.floor); 22815 * // => { '4': [4.2], '6': [6.1, 6.3] } 22816 * 22817 * // The `_.property` iteratee shorthand. 22818 * _.groupBy(['one', 'two', 'three'], 'length'); 22819 * // => { '3': ['one', 'two'], '5': ['three'] } 22820 */ 22821 var groupBy = createAggregator(function(result, value, key) { 22822 if (hasOwnProperty.call(result, key)) { 22823 result[key].push(value); 22824 } else { 22825 baseAssignValue(result, key, [value]); 22826 } 22827 }); 22828 22829 /** 22830 * Checks if `value` is in `collection`. If `collection` is a string, it's 22831 * checked for a substring of `value`, otherwise 22832 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 22833 * is used for equality comparisons. If `fromIndex` is negative, it's used as 22834 * the offset from the end of `collection`. 22835 * 22836 * @static 22837 * @memberOf _ 22838 * @since 0.1.0 22839 * @category Collection 22840 * @param {Array|Object|string} collection The collection to inspect. 22841 * @param {*} value The value to search for. 22842 * @param {number} [fromIndex=0] The index to search from. 22843 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. 22844 * @returns {boolean} Returns `true` if `value` is found, else `false`. 22845 * @example 22846 * 22847 * _.includes([1, 2, 3], 1); 22848 * // => true 22849 * 22850 * _.includes([1, 2, 3], 1, 2); 22851 * // => false 22852 * 22853 * _.includes({ 'a': 1, 'b': 2 }, 1); 22854 * // => true 22855 * 22856 * _.includes('abcd', 'bc'); 22857 * // => true 22858 */ 22859 function includes(collection, value, fromIndex, guard) { 22860 collection = isArrayLike(collection) ? collection : values(collection); 22861 fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0; 22862 22863 var length = collection.length; 22864 if (fromIndex < 0) { 22865 fromIndex = nativeMax(length + fromIndex, 0); 22866 } 22867 return isString(collection) 22868 ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1) 22869 : (!!length && baseIndexOf(collection, value, fromIndex) > -1); 22870 } 22871 22872 /** 22873 * Invokes the method at `path` of each element in `collection`, returning 22874 * an array of the results of each invoked method. Any additional arguments 22875 * are provided to each invoked method. If `path` is a function, it's invoked 22876 * for, and `this` bound to, each element in `collection`. 22877 * 22878 * @static 22879 * @memberOf _ 22880 * @since 4.0.0 22881 * @category Collection 22882 * @param {Array|Object} collection The collection to iterate over. 22883 * @param {Array|Function|string} path The path of the method to invoke or 22884 * the function invoked per iteration. 22885 * @param {...*} [args] The arguments to invoke each method with. 22886 * @returns {Array} Returns the array of results. 22887 * @example 22888 * 22889 * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort'); 22890 * // => [[1, 5, 7], [1, 2, 3]] 22891 * 22892 * _.invokeMap([123, 456], String.prototype.split, ''); 22893 * // => [['1', '2', '3'], ['4', '5', '6']] 22894 */ 22895 var invokeMap = baseRest(function(collection, path, args) { 22896 var index = -1, 22897 isFunc = typeof path == 'function', 22898 result = isArrayLike(collection) ? Array(collection.length) : []; 22899 22900 baseEach(collection, function(value) { 22901 result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); 22902 }); 22903 return result; 22904 }); 22905 22906 /**
vendor: 68,500 bytes, lines 22907-25021
22907 * Creates an object composed of keys generated from the results of running 22908 * each element of `collection` thru `iteratee`. The corresponding value of 22909 * each key is the last element responsible for generating the key. The 22910 * iteratee is invoked with one argument: (value). 22911 * 22912 * @static 22913 * @memberOf _ 22914 * @since 4.0.0 22915 * @category Collection 22916 * @param {Array|Object} collection The collection to iterate over. 22917 * @param {Function} [iteratee=_.identity] The iteratee to transform keys. 22918 * @returns {Object} Returns the composed aggregate object. 22919 * @example 22920 * 22921 * var array = [ 22922 * { 'dir': 'left', 'code': 97 }, 22923 * { 'dir': 'right', 'code': 100 } 22924 * ]; 22925 * 22926 * _.keyBy(array, function(o) { 22927 * return String.fromCharCode(o.code); 22928 * }); 22929 * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } } 22930 * 22931 * _.keyBy(array, 'dir'); 22932 * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } } 22933 */ 22934 var keyBy = createAggregator(function(result, value, key) { 22935 baseAssignValue(result, key, value); 22936 }); 22937 22938 /** 22939 * Creates an array of values by running each element in `collection` thru 22940 * `iteratee`. The iteratee is invoked with three arguments: 22941 * (value, index|key, collection). 22942 * 22943 * Many lodash methods are guarded to work as iteratees for methods like 22944 * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. 22945 * 22946 * The guarded methods are: 22947 * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, 22948 * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, 22949 * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, 22950 * `template`, `trim`, `trimEnd`, `trimStart`, and `words` 22951 * 22952 * @static 22953 * @memberOf _ 22954 * @since 0.1.0 22955 * @category Collection 22956 * @param {Array|Object} collection The collection to iterate over. 22957 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 22958 * @returns {Array} Returns the new mapped array. 22959 * @example 22960 * 22961 * function square(n) { 22962 * return n * n; 22963 * } 22964 * 22965 * _.map([4, 8], square); 22966 * // => [16, 64] 22967 * 22968 * _.map({ 'a': 4, 'b': 8 }, square); 22969 * // => [16, 64] (iteration order is not guaranteed) 22970 * 22971 * var users = [ 22972 * { 'user': 'barney' }, 22973 * { 'user': 'fred' } 22974 * ]; 22975 * 22976 * // The `_.property` iteratee shorthand. 22977 * _.map(users, 'user'); 22978 * // => ['barney', 'fred'] 22979 */ 22980 function map(collection, iteratee) { 22981 var func = isArray(collection) ? arrayMap : baseMap; 22982 return func(collection, getIteratee(iteratee, 3)); 22983 } 22984 22985 /** 22986 * This method is like `_.sortBy` except that it allows specifying the sort 22987 * orders of the iteratees to sort by. If `orders` is unspecified, all values 22988 * are sorted in ascending order. Otherwise, specify an order of "desc" for 22989 * descending or "asc" for ascending sort order of corresponding values. 22990 * 22991 * @static 22992 * @memberOf _ 22993 * @since 4.0.0 22994 * @category Collection 22995 * @param {Array|Object} collection The collection to iterate over. 22996 * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]] 22997 * The iteratees to sort by. 22998 * @param {string[]} [orders] The sort orders of `iteratees`. 22999 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`. 23000 * @returns {Array} Returns the new sorted array. 23001 * @example 23002 * 23003 * var users = [ 23004 * { 'user': 'fred', 'age': 48 }, 23005 * { 'user': 'barney', 'age': 34 }, 23006 * { 'user': 'fred', 'age': 40 }, 23007 * { 'user': 'barney', 'age': 36 } 23008 * ]; 23009 * 23010 * // Sort by `user` in ascending order and by `age` in descending order. 23011 * _.orderBy(users, ['user', 'age'], ['asc', 'desc']); 23012 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] 23013 */ 23014 function orderBy(collection, iteratees, orders, guard) { 23015 if (collection == null) { 23016 return []; 23017 } 23018 if (!isArray(iteratees)) { 23019 iteratees = iteratees == null ? [] : [iteratees]; 23020 } 23021 orders = guard ? undefined : orders; 23022 if (!isArray(orders)) { 23023 orders = orders == null ? [] : [orders]; 23024 } 23025 return baseOrderBy(collection, iteratees, orders); 23026 } 23027 23028 /** 23029 * Creates an array of elements split into two groups, the first of which 23030 * contains elements `predicate` returns truthy for, the second of which 23031 * contains elements `predicate` returns falsey for. The predicate is 23032 * invoked with one argument: (value). 23033 * 23034 * @static 23035 * @memberOf _ 23036 * @since 3.0.0 23037 * @category Collection 23038 * @param {Array|Object} collection The collection to iterate over. 23039 * @param {Function} [predicate=_.identity] The function invoked per iteration. 23040 * @returns {Array} Returns the array of grouped elements. 23041 * @example 23042 * 23043 * var users = [ 23044 * { 'user': 'barney', 'age': 36, 'active': false }, 23045 * { 'user': 'fred', 'age': 40, 'active': true }, 23046 * { 'user': 'pebbles', 'age': 1, 'active': false } 23047 * ]; 23048 * 23049 * _.partition(users, function(o) { return o.active; }); 23050 * // => objects for [['fred'], ['barney', 'pebbles']] 23051 * 23052 * // The `_.matches` iteratee shorthand. 23053 * _.partition(users, { 'age': 1, 'active': false }); 23054 * // => objects for [['pebbles'], ['barney', 'fred']] 23055 * 23056 * // The `_.matchesProperty` iteratee shorthand. 23057 * _.partition(users, ['active', false]); 23058 * // => objects for [['barney', 'pebbles'], ['fred']] 23059 * 23060 * // The `_.property` iteratee shorthand. 23061 * _.partition(users, 'active'); 23062 * // => objects for [['fred'], ['barney', 'pebbles']] 23063 */ 23064 var partition = createAggregator(function(result, value, key) { 23065 result[key ? 0 : 1].push(value); 23066 }, function() { return [[], []]; }); 23067 23068 /** 23069 * Reduces `collection` to a value which is the accumulated result of running 23070 * each element in `collection` thru `iteratee`, where each successive 23071 * invocation is supplied the return value of the previous. If `accumulator` 23072 * is not given, the first element of `collection` is used as the initial 23073 * value. The iteratee is invoked with four arguments: 23074 * (accumulator, value, index|key, collection). 23075 * 23076 * Many lodash methods are guarded to work as iteratees for methods like 23077 * `_.reduce`, `_.reduceRight`, and `_.transform`. 23078 * 23079 * The guarded methods are: 23080 * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, 23081 * and `sortBy` 23082 * 23083 * @static 23084 * @memberOf _ 23085 * @since 0.1.0 23086 * @category Collection 23087 * @param {Array|Object} collection The collection to iterate over. 23088 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 23089 * @param {*} [accumulator] The initial value. 23090 * @returns {*} Returns the accumulated value. 23091 * @see _.reduceRight 23092 * @example 23093 * 23094 * _.reduce([1, 2], function(sum, n) { 23095 * return sum + n; 23096 * }, 0); 23097 * // => 3 23098 * 23099 * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { 23100 * (result[value] || (result[value] = [])).push(key); 23101 * return result; 23102 * }, {}); 23103 * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) 23104 */ 23105 function reduce(collection, iteratee, accumulator) { 23106 var func = isArray(collection) ? arrayReduce : baseReduce, 23107 initAccum = arguments.length < 3; 23108 23109 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach); 23110 } 23111 23112 /** 23113 * This method is like `_.reduce` except that it iterates over elements of 23114 * `collection` from right to left. 23115 * 23116 * @static 23117 * @memberOf _ 23118 * @since 0.1.0 23119 * @category Collection 23120 * @param {Array|Object} collection The collection to iterate over. 23121 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 23122 * @param {*} [accumulator] The initial value. 23123 * @returns {*} Returns the accumulated value. 23124 * @see _.reduce 23125 * @example 23126 * 23127 * var array = [[0, 1], [2, 3], [4, 5]]; 23128 * 23129 * _.reduceRight(array, function(flattened, other) { 23130 * return flattened.concat(other); 23131 * }, []); 23132 * // => [4, 5, 2, 3, 0, 1] 23133 */ 23134 function reduceRight(collection, iteratee, accumulator) { 23135 var func = isArray(collection) ? arrayReduceRight : baseReduce, 23136 initAccum = arguments.length < 3; 23137 23138 return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight); 23139 } 23140 23141 /** 23142 * The opposite of `_.filter`; this method returns the elements of `collection` 23143 * that `predicate` does **not** return truthy for. 23144 * 23145 * @static 23146 * @memberOf _ 23147 * @since 0.1.0 23148 * @category Collection 23149 * @param {Array|Object} collection The collection to iterate over. 23150 * @param {Function} [predicate=_.identity] The function invoked per iteration. 23151 * @returns {Array} Returns the new filtered array. 23152 * @see _.filter 23153 * @example 23154 * 23155 * var users = [ 23156 * { 'user': 'barney', 'age': 36, 'active': false }, 23157 * { 'user': 'fred', 'age': 40, 'active': true } 23158 * ]; 23159 * 23160 * _.reject(users, function(o) { return !o.active; }); 23161 * // => objects for ['fred'] 23162 * 23163 * // The `_.matches` iteratee shorthand. 23164 * _.reject(users, { 'age': 40, 'active': true }); 23165 * // => objects for ['barney'] 23166 * 23167 * // The `_.matchesProperty` iteratee shorthand. 23168 * _.reject(users, ['active', false]); 23169 * // => objects for ['fred'] 23170 * 23171 * // The `_.property` iteratee shorthand. 23172 * _.reject(users, 'active'); 23173 * // => objects for ['barney'] 23174 */ 23175 function reject(collection, predicate) { 23176 var func = isArray(collection) ? arrayFilter : baseFilter; 23177 return func(collection, negate(getIteratee(predicate, 3))); 23178 } 23179 23180 /** 23181 * Gets a random element from `collection`. 23182 * 23183 * @static 23184 * @memberOf _ 23185 * @since 2.0.0 23186 * @category Collection 23187 * @param {Array|Object} collection The collection to sample. 23188 * @returns {*} Returns the random element. 23189 * @example 23190 * 23191 * _.sample([1, 2, 3, 4]); 23192 * // => 2 23193 */ 23194 function sample(collection) { 23195 var func = isArray(collection) ? arraySample : baseSample; 23196 return func(collection); 23197 } 23198 23199 /** 23200 * Gets `n` random elements at unique keys from `collection` up to the 23201 * size of `collection`. 23202 * 23203 * @static 23204 * @memberOf _ 23205 * @since 4.0.0 23206 * @category Collection 23207 * @param {Array|Object} collection The collection to sample. 23208 * @param {number} [n=1] The number of elements to sample. 23209 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 23210 * @returns {Array} Returns the random elements. 23211 * @example 23212 * 23213 * _.sampleSize([1, 2, 3], 2); 23214 * // => [3, 1] 23215 * 23216 * _.sampleSize([1, 2, 3], 4); 23217 * // => [2, 3, 1] 23218 */ 23219 function sampleSize(collection, n, guard) { 23220 if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) { 23221 n = 1; 23222 } else { 23223 n = toInteger(n); 23224 } 23225 var func = isArray(collection) ? arraySampleSize : baseSampleSize; 23226 return func(collection, n); 23227 } 23228 23229 /** 23230 * Creates an array of shuffled values, using a version of the 23231 * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle). 23232 * 23233 * @static 23234 * @memberOf _ 23235 * @since 0.1.0 23236 * @category Collection 23237 * @param {Array|Object} collection The collection to shuffle. 23238 * @returns {Array} Returns the new shuffled array. 23239 * @example 23240 * 23241 * _.shuffle([1, 2, 3, 4]); 23242 * // => [4, 1, 3, 2] 23243 */ 23244 function shuffle(collection) { 23245 var func = isArray(collection) ? arrayShuffle : baseShuffle; 23246 return func(collection); 23247 } 23248 23249 /** 23250 * Gets the size of `collection` by returning its length for array-like 23251 * values or the number of own enumerable string keyed properties for objects. 23252 * 23253 * @static 23254 * @memberOf _ 23255 * @since 0.1.0 23256 * @category Collection 23257 * @param {Array|Object|string} collection The collection to inspect. 23258 * @returns {number} Returns the collection size. 23259 * @example 23260 * 23261 * _.size([1, 2, 3]); 23262 * // => 3 23263 * 23264 * _.size({ 'a': 1, 'b': 2 }); 23265 * // => 2 23266 * 23267 * _.size('pebbles'); 23268 * // => 7 23269 */ 23270 function size(collection) { 23271 if (collection == null) { 23272 return 0; 23273 } 23274 if (isArrayLike(collection)) { 23275 return isString(collection) ? stringSize(collection) : collection.length; 23276 } 23277 var tag = getTag(collection); 23278 if (tag == mapTag || tag == setTag) { 23279 return collection.size; 23280 } 23281 return baseKeys(collection).length; 23282 } 23283 23284 /** 23285 * Checks if `predicate` returns truthy for **any** element of `collection`. 23286 * Iteration is stopped once `predicate` returns truthy. The predicate is 23287 * invoked with three arguments: (value, index|key, collection). 23288 * 23289 * @static 23290 * @memberOf _ 23291 * @since 0.1.0 23292 * @category Collection 23293 * @param {Array|Object} collection The collection to iterate over. 23294 * @param {Function} [predicate=_.identity] The function invoked per iteration. 23295 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 23296 * @returns {boolean} Returns `true` if any element passes the predicate check, 23297 * else `false`. 23298 * @example 23299 * 23300 * _.some([null, 0, 'yes', false], Boolean); 23301 * // => true 23302 * 23303 * var users = [ 23304 * { 'user': 'barney', 'active': true }, 23305 * { 'user': 'fred', 'active': false } 23306 * ]; 23307 * 23308 * // The `_.matches` iteratee shorthand. 23309 * _.some(users, { 'user': 'barney', 'active': false }); 23310 * // => false 23311 * 23312 * // The `_.matchesProperty` iteratee shorthand. 23313 * _.some(users, ['active', false]); 23314 * // => true 23315 * 23316 * // The `_.property` iteratee shorthand. 23317 * _.some(users, 'active'); 23318 * // => true 23319 */ 23320 function some(collection, predicate, guard) { 23321 var func = isArray(collection) ? arraySome : baseSome; 23322 if (guard && isIterateeCall(collection, predicate, guard)) { 23323 predicate = undefined; 23324 } 23325 return func(collection, getIteratee(predicate, 3)); 23326 } 23327 23328 /** 23329 * Creates an array of elements, sorted in ascending order by the results of 23330 * running each element in a collection thru each iteratee. This method 23331 * performs a stable sort, that is, it preserves the original sort order of 23332 * equal elements. The iteratees are invoked with one argument: (value). 23333 * 23334 * @static 23335 * @memberOf _ 23336 * @since 0.1.0 23337 * @category Collection 23338 * @param {Array|Object} collection The collection to iterate over. 23339 * @param {...(Function|Function[])} [iteratees=[_.identity]] 23340 * The iteratees to sort by. 23341 * @returns {Array} Returns the new sorted array. 23342 * @example 23343 * 23344 * var users = [ 23345 * { 'user': 'fred', 'age': 48 }, 23346 * { 'user': 'barney', 'age': 36 }, 23347 * { 'user': 'fred', 'age': 30 }, 23348 * { 'user': 'barney', 'age': 34 } 23349 * ]; 23350 * 23351 * _.sortBy(users, [function(o) { return o.user; }]); 23352 * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]] 23353 * 23354 * _.sortBy(users, ['user', 'age']); 23355 * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]] 23356 */ 23357 var sortBy = baseRest(function(collection, iteratees) { 23358 if (collection == null) { 23359 return []; 23360 } 23361 var length = iteratees.length; 23362 if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { 23363 iteratees = []; 23364 } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { 23365 iteratees = [iteratees[0]]; 23366 } 23367 return baseOrderBy(collection, baseFlatten(iteratees, 1), []); 23368 }); 23369 23370 /*------------------------------------------------------------------------*/ 23371 23372 /** 23373 * Gets the timestamp of the number of milliseconds that have elapsed since 23374 * the Unix epoch (1 January 1970 00:00:00 UTC). 23375 * 23376 * @static 23377 * @memberOf _ 23378 * @since 2.4.0 23379 * @category Date 23380 * @returns {number} Returns the timestamp. 23381 * @example 23382 * 23383 * _.defer(function(stamp) { 23384 * console.log(_.now() - stamp); 23385 * }, _.now()); 23386 * // => Logs the number of milliseconds it took for the deferred invocation. 23387 */ 23388 var now = ctxNow || function() { 23389 return root.Date.now(); 23390 }; 23391 23392 /*------------------------------------------------------------------------*/ 23393 23394 /** 23395 * The opposite of `_.before`; this method creates a function that invokes 23396 * `func` once it's called `n` or more times. 23397 * 23398 * @static 23399 * @memberOf _ 23400 * @since 0.1.0 23401 * @category Function 23402 * @param {number} n The number of calls before `func` is invoked. 23403 * @param {Function} func The function to restrict. 23404 * @returns {Function} Returns the new restricted function. 23405 * @example 23406 * 23407 * var saves = ['profile', 'settings']; 23408 * 23409 * var done = _.after(saves.length, function() { 23410 * console.log('done saving!'); 23411 * }); 23412 * 23413 * _.forEach(saves, function(type) { 23414 * asyncSave({ 'type': type, 'complete': done }); 23415 * }); 23416 * // => Logs 'done saving!' after the two async saves have completed. 23417 */ 23418 function after(n, func) { 23419 if (typeof func != 'function') { 23420 throw new TypeError(FUNC_ERROR_TEXT); 23421 } 23422 n = toInteger(n); 23423 return function() { 23424 if (--n < 1) { 23425 return func.apply(this, arguments); 23426 } 23427 }; 23428 } 23429 23430 /** 23431 * Creates a function that invokes `func`, with up to `n` arguments, 23432 * ignoring any additional arguments. 23433 * 23434 * @static 23435 * @memberOf _ 23436 * @since 3.0.0 23437 * @category Function 23438 * @param {Function} func The function to cap arguments for. 23439 * @param {number} [n=func.length] The arity cap. 23440 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 23441 * @returns {Function} Returns the new capped function. 23442 * @example 23443 * 23444 * _.map(['6', '8', '10'], _.ary(parseInt, 1)); 23445 * // => [6, 8, 10] 23446 */ 23447 function ary(func, n, guard) { 23448 n = guard ? undefined : n; 23449 n = (func && n == null) ? func.length : n; 23450 return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n); 23451 } 23452 23453 /** 23454 * Creates a function that invokes `func`, with the `this` binding and arguments 23455 * of the created function, while it's called less than `n` times. Subsequent 23456 * calls to the created function return the result of the last `func` invocation. 23457 * 23458 * @static 23459 * @memberOf _ 23460 * @since 3.0.0 23461 * @category Function 23462 * @param {number} n The number of calls at which `func` is no longer invoked. 23463 * @param {Function} func The function to restrict. 23464 * @returns {Function} Returns the new restricted function. 23465 * @example 23466 * 23467 * jQuery(element).on('click', _.before(5, addContactToList)); 23468 * // => Allows adding up to 4 contacts to the list. 23469 */ 23470 function before(n, func) { 23471 var result; 23472 if (typeof func != 'function') { 23473 throw new TypeError(FUNC_ERROR_TEXT); 23474 } 23475 n = toInteger(n); 23476 return function() { 23477 if (--n > 0) { 23478 result = func.apply(this, arguments); 23479 } 23480 if (n <= 1) { 23481 func = undefined; 23482 } 23483 return result; 23484 }; 23485 } 23486 23487 /** 23488 * Creates a function that invokes `func` with the `this` binding of `thisArg` 23489 * and `partials` prepended to the arguments it receives. 23490 * 23491 * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, 23492 * may be used as a placeholder for partially applied arguments. 23493 * 23494 * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" 23495 * property of bound functions. 23496 * 23497 * @static 23498 * @memberOf _ 23499 * @since 0.1.0 23500 * @category Function 23501 * @param {Function} func The function to bind. 23502 * @param {*} thisArg The `this` binding of `func`. 23503 * @param {...*} [partials] The arguments to be partially applied. 23504 * @returns {Function} Returns the new bound function. 23505 * @example 23506 * 23507 * function greet(greeting, punctuation) { 23508 * return greeting + ' ' + this.user + punctuation; 23509 * } 23510 * 23511 * var object = { 'user': 'fred' }; 23512 * 23513 * var bound = _.bind(greet, object, 'hi'); 23514 * bound('!'); 23515 * // => 'hi fred!' 23516 * 23517 * // Bound with placeholders. 23518 * var bound = _.bind(greet, object, _, '!'); 23519 * bound('hi'); 23520 * // => 'hi fred!' 23521 */ 23522 var bind = baseRest(function(func, thisArg, partials) { 23523 var bitmask = WRAP_BIND_FLAG; 23524 if (partials.length) { 23525 var holders = replaceHolders(partials, getHolder(bind)); 23526 bitmask |= WRAP_PARTIAL_FLAG; 23527 } 23528 return createWrap(func, bitmask, thisArg, partials, holders); 23529 }); 23530 23531 /** 23532 * Creates a function that invokes the method at `object[key]` with `partials` 23533 * prepended to the arguments it receives. 23534 * 23535 * This method differs from `_.bind` by allowing bound functions to reference 23536 * methods that may be redefined or don't yet exist. See 23537 * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern) 23538 * for more details. 23539 * 23540 * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic 23541 * builds, may be used as a placeholder for partially applied arguments. 23542 * 23543 * @static 23544 * @memberOf _ 23545 * @since 0.10.0 23546 * @category Function 23547 * @param {Object} object The object to invoke the method on. 23548 * @param {string} key The key of the method. 23549 * @param {...*} [partials] The arguments to be partially applied. 23550 * @returns {Function} Returns the new bound function. 23551 * @example 23552 * 23553 * var object = { 23554 * 'user': 'fred', 23555 * 'greet': function(greeting, punctuation) { 23556 * return greeting + ' ' + this.user + punctuation; 23557 * } 23558 * }; 23559 * 23560 * var bound = _.bindKey(object, 'greet', 'hi'); 23561 * bound('!'); 23562 * // => 'hi fred!' 23563 * 23564 * object.greet = function(greeting, punctuation) { 23565 * return greeting + 'ya ' + this.user + punctuation; 23566 * }; 23567 * 23568 * bound('!'); 23569 * // => 'hiya fred!' 23570 * 23571 * // Bound with placeholders. 23572 * var bound = _.bindKey(object, 'greet', _, '!'); 23573 * bound('hi'); 23574 * // => 'hiya fred!' 23575 */ 23576 var bindKey = baseRest(function(object, key, partials) { 23577 var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; 23578 if (partials.length) { 23579 var holders = replaceHolders(partials, getHolder(bindKey)); 23580 bitmask |= WRAP_PARTIAL_FLAG; 23581 } 23582 return createWrap(key, bitmask, object, partials, holders); 23583 }); 23584 23585 /** 23586 * Creates a function that accepts arguments of `func` and either invokes 23587 * `func` returning its result, if at least `arity` number of arguments have 23588 * been provided, or returns a function that accepts the remaining `func` 23589 * arguments, and so on. The arity of `func` may be specified if `func.length` 23590 * is not sufficient. 23591 * 23592 * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds, 23593 * may be used as a placeholder for provided arguments. 23594 * 23595 * **Note:** This method doesn't set the "length" property of curried functions. 23596 * 23597 * @static 23598 * @memberOf _ 23599 * @since 2.0.0 23600 * @category Function 23601 * @param {Function} func The function to curry. 23602 * @param {number} [arity=func.length] The arity of `func`. 23603 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 23604 * @returns {Function} Returns the new curried function. 23605 * @example 23606 * 23607 * var abc = function(a, b, c) { 23608 * return [a, b, c]; 23609 * }; 23610 * 23611 * var curried = _.curry(abc); 23612 * 23613 * curried(1)(2)(3); 23614 * // => [1, 2, 3] 23615 * 23616 * curried(1, 2)(3); 23617 * // => [1, 2, 3] 23618 * 23619 * curried(1, 2, 3); 23620 * // => [1, 2, 3] 23621 * 23622 * // Curried with placeholders. 23623 * curried(1)(_, 3)(2); 23624 * // => [1, 2, 3] 23625 */ 23626 function curry(func, arity, guard) { 23627 arity = guard ? undefined : arity; 23628 var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity); 23629 result.placeholder = curry.placeholder; 23630 return result; 23631 } 23632 23633 /** 23634 * This method is like `_.curry` except that arguments are applied to `func` 23635 * in the manner of `_.partialRight` instead of `_.partial`. 23636 * 23637 * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic 23638 * builds, may be used as a placeholder for provided arguments. 23639 * 23640 * **Note:** This method doesn't set the "length" property of curried functions. 23641 * 23642 * @static 23643 * @memberOf _ 23644 * @since 3.0.0 23645 * @category Function 23646 * @param {Function} func The function to curry. 23647 * @param {number} [arity=func.length] The arity of `func`. 23648 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 23649 * @returns {Function} Returns the new curried function. 23650 * @example 23651 * 23652 * var abc = function(a, b, c) { 23653 * return [a, b, c]; 23654 * }; 23655 * 23656 * var curried = _.curryRight(abc); 23657 * 23658 * curried(3)(2)(1); 23659 * // => [1, 2, 3] 23660 * 23661 * curried(2, 3)(1); 23662 * // => [1, 2, 3] 23663 * 23664 * curried(1, 2, 3); 23665 * // => [1, 2, 3] 23666 * 23667 * // Curried with placeholders. 23668 * curried(3)(1, _)(2); 23669 * // => [1, 2, 3] 23670 */ 23671 function curryRight(func, arity, guard) { 23672 arity = guard ? undefined : arity; 23673 var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity); 23674 result.placeholder = curryRight.placeholder; 23675 return result; 23676 } 23677 23678 /** 23679 * Creates a debounced function that delays invoking `func` until after `wait` 23680 * milliseconds have elapsed since the last time the debounced function was 23681 * invoked. The debounced function comes with a `cancel` method to cancel 23682 * delayed `func` invocations and a `flush` method to immediately invoke them. 23683 * Provide `options` to indicate whether `func` should be invoked on the 23684 * leading and/or trailing edge of the `wait` timeout. The `func` is invoked 23685 * with the last arguments provided to the debounced function. Subsequent 23686 * calls to the debounced function return the result of the last `func` 23687 * invocation. 23688 * 23689 * **Note:** If `leading` and `trailing` options are `true`, `func` is 23690 * invoked on the trailing edge of the timeout only if the debounced function 23691 * is invoked more than once during the `wait` timeout. 23692 * 23693 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred 23694 * until to the next tick, similar to `setTimeout` with a timeout of `0`. 23695 * 23696 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) 23697 * for details over the differences between `_.debounce` and `_.throttle`. 23698 * 23699 * @static 23700 * @memberOf _ 23701 * @since 0.1.0 23702 * @category Function 23703 * @param {Function} func The function to debounce. 23704 * @param {number} [wait=0] The number of milliseconds to delay. 23705 * @param {Object} [options={}] The options object. 23706 * @param {boolean} [options.leading=false] 23707 * Specify invoking on the leading edge of the timeout. 23708 * @param {number} [options.maxWait] 23709 * The maximum time `func` is allowed to be delayed before it's invoked. 23710 * @param {boolean} [options.trailing=true] 23711 * Specify invoking on the trailing edge of the timeout. 23712 * @returns {Function} Returns the new debounced function. 23713 * @example 23714 * 23715 * // Avoid costly calculations while the window size is in flux. 23716 * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); 23717 * 23718 * // Invoke `sendMail` when clicked, debouncing subsequent calls. 23719 * jQuery(element).on('click', _.debounce(sendMail, 300, { 23720 * 'leading': true, 23721 * 'trailing': false 23722 * })); 23723 * 23724 * // Ensure `batchLog` is invoked once after 1 second of debounced calls. 23725 * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); 23726 * var source = new EventSource('/stream'); 23727 * jQuery(source).on('message', debounced); 23728 * 23729 * // Cancel the trailing debounced invocation. 23730 * jQuery(window).on('popstate', debounced.cancel); 23731 */ 23732 function debounce(func, wait, options) { 23733 var lastArgs, 23734 lastThis, 23735 maxWait, 23736 result, 23737 timerId, 23738 lastCallTime, 23739 lastInvokeTime = 0, 23740 leading = false, 23741 maxing = false, 23742 trailing = true; 23743 23744 if (typeof func != 'function') { 23745 throw new TypeError(FUNC_ERROR_TEXT); 23746 } 23747 wait = toNumber(wait) || 0; 23748 if (isObject(options)) { 23749 leading = !!options.leading; 23750 maxing = 'maxWait' in options; 23751 maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; 23752 trailing = 'trailing' in options ? !!options.trailing : trailing; 23753 } 23754 23755 function invokeFunc(time) { 23756 var args = lastArgs, 23757 thisArg = lastThis; 23758 23759 lastArgs = lastThis = undefined; 23760 lastInvokeTime = time; 23761 result = func.apply(thisArg, args); 23762 return result; 23763 } 23764 23765 function leadingEdge(time) { 23766 // Reset any `maxWait` timer. 23767 lastInvokeTime = time; 23768 // Start the timer for the trailing edge. 23769 timerId = setTimeout(timerExpired, wait); 23770 // Invoke the leading edge. 23771 return leading ? invokeFunc(time) : result; 23772 } 23773 23774 function remainingWait(time) { 23775 var timeSinceLastCall = time - lastCallTime, 23776 timeSinceLastInvoke = time - lastInvokeTime, 23777 timeWaiting = wait - timeSinceLastCall; 23778 23779 return maxing 23780 ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) 23781 : timeWaiting; 23782 } 23783 23784 function shouldInvoke(time) { 23785 var timeSinceLastCall = time - lastCallTime, 23786 timeSinceLastInvoke = time - lastInvokeTime; 23787 23788 // Either this is the first call, activity has stopped and we're at the 23789 // trailing edge, the system time has gone backwards and we're treating 23790 // it as the trailing edge, or we've hit the `maxWait` limit. 23791 return (lastCallTime === undefined || (timeSinceLastCall >= wait) || 23792 (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); 23793 } 23794 23795 function timerExpired() { 23796 var time = now(); 23797 if (shouldInvoke(time)) { 23798 return trailingEdge(time); 23799 } 23800 // Restart the timer. 23801 timerId = setTimeout(timerExpired, remainingWait(time)); 23802 } 23803 23804 function trailingEdge(time) { 23805 timerId = undefined; 23806 23807 // Only invoke if we have `lastArgs` which means `func` has been 23808 // debounced at least once. 23809 if (trailing && lastArgs) { 23810 return invokeFunc(time); 23811 } 23812 lastArgs = lastThis = undefined; 23813 return result; 23814 } 23815 23816 function cancel() { 23817 if (timerId !== undefined) { 23818 clearTimeout(timerId); 23819 } 23820 lastInvokeTime = 0; 23821 lastArgs = lastCallTime = lastThis = timerId = undefined; 23822 } 23823 23824 function flush() { 23825 return timerId === undefined ? result : trailingEdge(now()); 23826 } 23827 23828 function debounced() { 23829 var time = now(), 23830 isInvoking = shouldInvoke(time); 23831 23832 lastArgs = arguments; 23833 lastThis = this; 23834 lastCallTime = time; 23835 23836 if (isInvoking) { 23837 if (timerId === undefined) { 23838 return leadingEdge(lastCallTime); 23839 } 23840 if (maxing) { 23841 // Handle invocations in a tight loop. 23842 clearTimeout(timerId); 23843 timerId = setTimeout(timerExpired, wait); 23844 return invokeFunc(lastCallTime); 23845 } 23846 } 23847 if (timerId === undefined) { 23848 timerId = setTimeout(timerExpired, wait); 23849 } 23850 return result; 23851 } 23852 debounced.cancel = cancel; 23853 debounced.flush = flush; 23854 return debounced; 23855 } 23856 23857 /** 23858 * Defers invoking the `func` until the current call stack has cleared. Any 23859 * additional arguments are provided to `func` when it's invoked. 23860 * 23861 * @static 23862 * @memberOf _ 23863 * @since 0.1.0 23864 * @category Function 23865 * @param {Function} func The function to defer. 23866 * @param {...*} [args] The arguments to invoke `func` with. 23867 * @returns {number} Returns the timer id. 23868 * @example 23869 * 23870 * _.defer(function(text) { 23871 * console.log(text); 23872 * }, 'deferred'); 23873 * // => Logs 'deferred' after one millisecond. 23874 */ 23875 var defer = baseRest(function(func, args) { 23876 return baseDelay(func, 1, args); 23877 }); 23878 23879 /** 23880 * Invokes `func` after `wait` milliseconds. Any additional arguments are 23881 * provided to `func` when it's invoked. 23882 * 23883 * @static 23884 * @memberOf _ 23885 * @since 0.1.0 23886 * @category Function 23887 * @param {Function} func The function to delay. 23888 * @param {number} wait The number of milliseconds to delay invocation. 23889 * @param {...*} [args] The arguments to invoke `func` with. 23890 * @returns {number} Returns the timer id. 23891 * @example 23892 * 23893 * _.delay(function(text) { 23894 * console.log(text); 23895 * }, 1000, 'later'); 23896 * // => Logs 'later' after one second. 23897 */ 23898 var delay = baseRest(function(func, wait, args) { 23899 return baseDelay(func, toNumber(wait) || 0, args); 23900 }); 23901 23902 /** 23903 * Creates a function that invokes `func` with arguments reversed. 23904 * 23905 * @static 23906 * @memberOf _ 23907 * @since 4.0.0 23908 * @category Function 23909 * @param {Function} func The function to flip arguments for. 23910 * @returns {Function} Returns the new flipped function. 23911 * @example 23912 * 23913 * var flipped = _.flip(function() { 23914 * return _.toArray(arguments); 23915 * }); 23916 * 23917 * flipped('a', 'b', 'c', 'd'); 23918 * // => ['d', 'c', 'b', 'a'] 23919 */ 23920 function flip(func) { 23921 return createWrap(func, WRAP_FLIP_FLAG); 23922 } 23923 23924 /** 23925 * Creates a function that memoizes the result of `func`. If `resolver` is 23926 * provided, it determines the cache key for storing the result based on the 23927 * arguments provided to the memoized function. By default, the first argument 23928 * provided to the memoized function is used as the map cache key. The `func` 23929 * is invoked with the `this` binding of the memoized function. 23930 * 23931 * **Note:** The cache is exposed as the `cache` property on the memoized 23932 * function. Its creation may be customized by replacing the `_.memoize.Cache` 23933 * constructor with one whose instances implement the 23934 * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) 23935 * method interface of `clear`, `delete`, `get`, `has`, and `set`. 23936 * 23937 * @static 23938 * @memberOf _ 23939 * @since 0.1.0 23940 * @category Function 23941 * @param {Function} func The function to have its output memoized. 23942 * @param {Function} [resolver] The function to resolve the cache key. 23943 * @returns {Function} Returns the new memoized function. 23944 * @example 23945 * 23946 * var object = { 'a': 1, 'b': 2 }; 23947 * var other = { 'c': 3, 'd': 4 }; 23948 * 23949 * var values = _.memoize(_.values); 23950 * values(object); 23951 * // => [1, 2] 23952 * 23953 * values(other); 23954 * // => [3, 4] 23955 * 23956 * object.a = 2; 23957 * values(object); 23958 * // => [1, 2] 23959 * 23960 * // Modify the result cache. 23961 * values.cache.set(object, ['a', 'b']); 23962 * values(object); 23963 * // => ['a', 'b'] 23964 * 23965 * // Replace `_.memoize.Cache`. 23966 * _.memoize.Cache = WeakMap; 23967 */ 23968 function memoize(func, resolver) { 23969 if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { 23970 throw new TypeError(FUNC_ERROR_TEXT); 23971 } 23972 var memoized = function() { 23973 var args = arguments, 23974 key = resolver ? resolver.apply(this, args) : args[0], 23975 cache = memoized.cache; 23976 23977 if (cache.has(key)) { 23978 return cache.get(key); 23979 } 23980 var result = func.apply(this, args); 23981 memoized.cache = cache.set(key, result) || cache; 23982 return result; 23983 }; 23984 memoized.cache = new (memoize.Cache || MapCache); 23985 return memoized; 23986 } 23987 23988 // Expose `MapCache`. 23989 memoize.Cache = MapCache; 23990 23991 /** 23992 * Creates a function that negates the result of the predicate `func`. The 23993 * `func` predicate is invoked with the `this` binding and arguments of the 23994 * created function. 23995 * 23996 * @static 23997 * @memberOf _ 23998 * @since 3.0.0 23999 * @category Function 24000 * @param {Function} predicate The predicate to negate. 24001 * @returns {Function} Returns the new negated function. 24002 * @example 24003 * 24004 * function isEven(n) { 24005 * return n % 2 == 0; 24006 * } 24007 * 24008 * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); 24009 * // => [1, 3, 5] 24010 */ 24011 function negate(predicate) { 24012 if (typeof predicate != 'function') { 24013 throw new TypeError(FUNC_ERROR_TEXT); 24014 } 24015 return function() { 24016 var args = arguments; 24017 switch (args.length) { 24018 case 0: return !predicate.call(this); 24019 case 1: return !predicate.call(this, args[0]); 24020 case 2: return !predicate.call(this, args[0], args[1]); 24021 case 3: return !predicate.call(this, args[0], args[1], args[2]); 24022 } 24023 return !predicate.apply(this, args); 24024 }; 24025 } 24026 24027 /** 24028 * Creates a function that is restricted to invoking `func` once. Repeat calls 24029 * to the function return the value of the first invocation. The `func` is 24030 * invoked with the `this` binding and arguments of the created function. 24031 * 24032 * @static 24033 * @memberOf _ 24034 * @since 0.1.0 24035 * @category Function 24036 * @param {Function} func The function to restrict. 24037 * @returns {Function} Returns the new restricted function. 24038 * @example 24039 * 24040 * var initialize = _.once(createApplication); 24041 * initialize(); 24042 * initialize(); 24043 * // => `createApplication` is invoked once 24044 */ 24045 function once(func) { 24046 return before(2, func); 24047 } 24048 24049 /** 24050 * Creates a function that invokes `func` with its arguments transformed. 24051 * 24052 * @static 24053 * @since 4.0.0 24054 * @memberOf _ 24055 * @category Function 24056 * @param {Function} func The function to wrap. 24057 * @param {...(Function|Function[])} [transforms=[_.identity]] 24058 * The argument transforms. 24059 * @returns {Function} Returns the new function. 24060 * @example 24061 * 24062 * function doubled(n) { 24063 * return n * 2; 24064 * } 24065 * 24066 * function square(n) { 24067 * return n * n; 24068 * } 24069 * 24070 * var func = _.overArgs(function(x, y) { 24071 * return [x, y]; 24072 * }, [square, doubled]); 24073 * 24074 * func(9, 3); 24075 * // => [81, 6] 24076 * 24077 * func(10, 5); 24078 * // => [100, 10] 24079 */ 24080 var overArgs = castRest(function(func, transforms) { 24081 transforms = (transforms.length == 1 && isArray(transforms[0])) 24082 ? arrayMap(transforms[0], baseUnary(getIteratee())) 24083 : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee())); 24084 24085 var funcsLength = transforms.length; 24086 return baseRest(function(args) { 24087 var index = -1, 24088 length = nativeMin(args.length, funcsLength); 24089 24090 while (++index < length) { 24091 args[index] = transforms[index].call(this, args[index]); 24092 } 24093 return apply(func, this, args); 24094 }); 24095 }); 24096 24097 /** 24098 * Creates a function that invokes `func` with `partials` prepended to the 24099 * arguments it receives. This method is like `_.bind` except it does **not** 24100 * alter the `this` binding. 24101 * 24102 * The `_.partial.placeholder` value, which defaults to `_` in monolithic 24103 * builds, may be used as a placeholder for partially applied arguments. 24104 * 24105 * **Note:** This method doesn't set the "length" property of partially 24106 * applied functions. 24107 * 24108 * @static 24109 * @memberOf _ 24110 * @since 0.2.0 24111 * @category Function 24112 * @param {Function} func The function to partially apply arguments to. 24113 * @param {...*} [partials] The arguments to be partially applied. 24114 * @returns {Function} Returns the new partially applied function. 24115 * @example 24116 * 24117 * function greet(greeting, name) { 24118 * return greeting + ' ' + name; 24119 * } 24120 * 24121 * var sayHelloTo = _.partial(greet, 'hello'); 24122 * sayHelloTo('fred'); 24123 * // => 'hello fred' 24124 * 24125 * // Partially applied with placeholders. 24126 * var greetFred = _.partial(greet, _, 'fred'); 24127 * greetFred('hi'); 24128 * // => 'hi fred' 24129 */ 24130 var partial = baseRest(function(func, partials) { 24131 var holders = replaceHolders(partials, getHolder(partial)); 24132 return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders); 24133 }); 24134 24135 /** 24136 * This method is like `_.partial` except that partially applied arguments 24137 * are appended to the arguments it receives. 24138 * 24139 * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic 24140 * builds, may be used as a placeholder for partially applied arguments. 24141 * 24142 * **Note:** This method doesn't set the "length" property of partially 24143 * applied functions. 24144 * 24145 * @static 24146 * @memberOf _ 24147 * @since 1.0.0 24148 * @category Function 24149 * @param {Function} func The function to partially apply arguments to. 24150 * @param {...*} [partials] The arguments to be partially applied. 24151 * @returns {Function} Returns the new partially applied function. 24152 * @example 24153 * 24154 * function greet(greeting, name) { 24155 * return greeting + ' ' + name; 24156 * } 24157 * 24158 * var greetFred = _.partialRight(greet, 'fred'); 24159 * greetFred('hi'); 24160 * // => 'hi fred' 24161 * 24162 * // Partially applied with placeholders. 24163 * var sayHelloTo = _.partialRight(greet, 'hello', _); 24164 * sayHelloTo('fred'); 24165 * // => 'hello fred' 24166 */ 24167 var partialRight = baseRest(function(func, partials) { 24168 var holders = replaceHolders(partials, getHolder(partialRight)); 24169 return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders); 24170 }); 24171 24172 /** 24173 * Creates a function that invokes `func` with arguments arranged according 24174 * to the specified `indexes` where the argument value at the first index is 24175 * provided as the first argument, the argument value at the second index is 24176 * provided as the second argument, and so on. 24177 * 24178 * @static 24179 * @memberOf _ 24180 * @since 3.0.0 24181 * @category Function 24182 * @param {Function} func The function to rearrange arguments for. 24183 * @param {...(number|number[])} indexes The arranged argument indexes. 24184 * @returns {Function} Returns the new function. 24185 * @example 24186 * 24187 * var rearged = _.rearg(function(a, b, c) { 24188 * return [a, b, c]; 24189 * }, [2, 0, 1]); 24190 * 24191 * rearged('b', 'c', 'a') 24192 * // => ['a', 'b', 'c'] 24193 */ 24194 var rearg = flatRest(function(func, indexes) { 24195 return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes); 24196 }); 24197 24198 /** 24199 * Creates a function that invokes `func` with the `this` binding of the 24200 * created function and arguments from `start` and beyond provided as 24201 * an array. 24202 * 24203 * **Note:** This method is based on the 24204 * [rest parameter](https://mdn.io/rest_parameters). 24205 * 24206 * @static 24207 * @memberOf _ 24208 * @since 4.0.0 24209 * @category Function 24210 * @param {Function} func The function to apply a rest parameter to. 24211 * @param {number} [start=func.length-1] The start position of the rest parameter. 24212 * @returns {Function} Returns the new function. 24213 * @example 24214 * 24215 * var say = _.rest(function(what, names) { 24216 * return what + ' ' + _.initial(names).join(', ') + 24217 * (_.size(names) > 1 ? ', & ' : '') + _.last(names); 24218 * }); 24219 * 24220 * say('hello', 'fred', 'barney', 'pebbles'); 24221 * // => 'hello fred, barney, & pebbles' 24222 */ 24223 function rest(func, start) { 24224 if (typeof func != 'function') { 24225 throw new TypeError(FUNC_ERROR_TEXT); 24226 } 24227 start = start === undefined ? start : toInteger(start); 24228 return baseRest(func, start); 24229 } 24230 24231 /** 24232 * Creates a function that invokes `func` with the `this` binding of the 24233 * create function and an array of arguments much like 24234 * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply). 24235 * 24236 * **Note:** This method is based on the 24237 * [spread operator](https://mdn.io/spread_operator). 24238 * 24239 * @static 24240 * @memberOf _ 24241 * @since 3.2.0 24242 * @category Function 24243 * @param {Function} func The function to spread arguments over. 24244 * @param {number} [start=0] The start position of the spread. 24245 * @returns {Function} Returns the new function. 24246 * @example 24247 * 24248 * var say = _.spread(function(who, what) { 24249 * return who + ' says ' + what; 24250 * }); 24251 * 24252 * say(['fred', 'hello']); 24253 * // => 'fred says hello' 24254 * 24255 * var numbers = Promise.all([ 24256 * Promise.resolve(40), 24257 * Promise.resolve(36) 24258 * ]); 24259 * 24260 * numbers.then(_.spread(function(x, y) { 24261 * return x + y; 24262 * })); 24263 * // => a Promise of 76 24264 */ 24265 function spread(func, start) { 24266 if (typeof func != 'function') { 24267 throw new TypeError(FUNC_ERROR_TEXT); 24268 } 24269 start = start == null ? 0 : nativeMax(toInteger(start), 0); 24270 return baseRest(function(args) { 24271 var array = args[start], 24272 otherArgs = castSlice(args, 0, start); 24273 24274 if (array) { 24275 arrayPush(otherArgs, array); 24276 } 24277 return apply(func, this, otherArgs); 24278 }); 24279 } 24280 24281 /** 24282 * Creates a throttled function that only invokes `func` at most once per 24283 * every `wait` milliseconds. The throttled function comes with a `cancel` 24284 * method to cancel delayed `func` invocations and a `flush` method to 24285 * immediately invoke them. Provide `options` to indicate whether `func` 24286 * should be invoked on the leading and/or trailing edge of the `wait` 24287 * timeout. The `func` is invoked with the last arguments provided to the 24288 * throttled function. Subsequent calls to the throttled function return the 24289 * result of the last `func` invocation. 24290 * 24291 * **Note:** If `leading` and `trailing` options are `true`, `func` is 24292 * invoked on the trailing edge of the timeout only if the throttled function 24293 * is invoked more than once during the `wait` timeout. 24294 * 24295 * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred 24296 * until to the next tick, similar to `setTimeout` with a timeout of `0`. 24297 * 24298 * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) 24299 * for details over the differences between `_.throttle` and `_.debounce`. 24300 * 24301 * @static 24302 * @memberOf _ 24303 * @since 0.1.0 24304 * @category Function 24305 * @param {Function} func The function to throttle. 24306 * @param {number} [wait=0] The number of milliseconds to throttle invocations to. 24307 * @param {Object} [options={}] The options object. 24308 * @param {boolean} [options.leading=true] 24309 * Specify invoking on the leading edge of the timeout. 24310 * @param {boolean} [options.trailing=true] 24311 * Specify invoking on the trailing edge of the timeout. 24312 * @returns {Function} Returns the new throttled function. 24313 * @example 24314 * 24315 * // Avoid excessively updating the position while scrolling. 24316 * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); 24317 * 24318 * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. 24319 * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); 24320 * jQuery(element).on('click', throttled); 24321 * 24322 * // Cancel the trailing throttled invocation. 24323 * jQuery(window).on('popstate', throttled.cancel); 24324 */ 24325 function throttle(func, wait, options) { 24326 var leading = true, 24327 trailing = true; 24328 24329 if (typeof func != 'function') { 24330 throw new TypeError(FUNC_ERROR_TEXT); 24331 } 24332 if (isObject(options)) { 24333 leading = 'leading' in options ? !!options.leading : leading; 24334 trailing = 'trailing' in options ? !!options.trailing : trailing; 24335 } 24336 return debounce(func, wait, { 24337 'leading': leading, 24338 'maxWait': wait, 24339 'trailing': trailing 24340 }); 24341 } 24342 24343 /** 24344 * Creates a function that accepts up to one argument, ignoring any 24345 * additional arguments. 24346 * 24347 * @static 24348 * @memberOf _ 24349 * @since 4.0.0 24350 * @category Function 24351 * @param {Function} func The function to cap arguments for. 24352 * @returns {Function} Returns the new capped function. 24353 * @example 24354 * 24355 * _.map(['6', '8', '10'], _.unary(parseInt)); 24356 * // => [6, 8, 10] 24357 */ 24358 function unary(func) { 24359 return ary(func, 1); 24360 } 24361 24362 /** 24363 * Creates a function that provides `value` to `wrapper` as its first 24364 * argument. Any additional arguments provided to the function are appended 24365 * to those provided to the `wrapper`. The wrapper is invoked with the `this` 24366 * binding of the created function. 24367 * 24368 * @static 24369 * @memberOf _ 24370 * @since 0.1.0 24371 * @category Function 24372 * @param {*} value The value to wrap. 24373 * @param {Function} [wrapper=identity] The wrapper function. 24374 * @returns {Function} Returns the new function. 24375 * @example 24376 * 24377 * var p = _.wrap(_.escape, function(func, text) { 24378 * return '<p>' + func(text) + '</p>'; 24379 * }); 24380 * 24381 * p('fred, barney, & pebbles'); 24382 * // => '<p>fred, barney, & pebbles</p>' 24383 */ 24384 function wrap(value, wrapper) { 24385 return partial(castFunction(wrapper), value); 24386 } 24387 24388 /*------------------------------------------------------------------------*/ 24389 24390 /** 24391 * Casts `value` as an array if it's not one. 24392 * 24393 * @static 24394 * @memberOf _ 24395 * @since 4.4.0 24396 * @category Lang 24397 * @param {*} value The value to inspect. 24398 * @returns {Array} Returns the cast array. 24399 * @example 24400 * 24401 * _.castArray(1); 24402 * // => [1] 24403 * 24404 * _.castArray({ 'a': 1 }); 24405 * // => [{ 'a': 1 }] 24406 * 24407 * _.castArray('abc'); 24408 * // => ['abc'] 24409 * 24410 * _.castArray(null); 24411 * // => [null] 24412 * 24413 * _.castArray(undefined); 24414 * // => [undefined] 24415 * 24416 * _.castArray(); 24417 * // => [] 24418 * 24419 * var array = [1, 2, 3]; 24420 * console.log(_.castArray(array) === array); 24421 * // => true 24422 */ 24423 function castArray() { 24424 if (!arguments.length) { 24425 return []; 24426 } 24427 var value = arguments[0]; 24428 return isArray(value) ? value : [value]; 24429 } 24430 24431 /** 24432 * Creates a shallow clone of `value`. 24433 * 24434 * **Note:** This method is loosely based on the 24435 * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) 24436 * and supports cloning arrays, array buffers, booleans, date objects, maps, 24437 * numbers, `Object` objects, regexes, sets, strings, symbols, and typed 24438 * arrays. The own enumerable properties of `arguments` objects are cloned 24439 * as plain objects. An empty object is returned for uncloneable values such 24440 * as error objects, functions, DOM nodes, and WeakMaps. 24441 * 24442 * @static 24443 * @memberOf _ 24444 * @since 0.1.0 24445 * @category Lang 24446 * @param {*} value The value to clone. 24447 * @returns {*} Returns the cloned value. 24448 * @see _.cloneDeep 24449 * @example 24450 * 24451 * var objects = [{ 'a': 1 }, { 'b': 2 }]; 24452 * 24453 * var shallow = _.clone(objects); 24454 * console.log(shallow[0] === objects[0]); 24455 * // => true 24456 */ 24457 function clone(value) { 24458 return baseClone(value, CLONE_SYMBOLS_FLAG); 24459 } 24460 24461 /** 24462 * This method is like `_.clone` except that it accepts `customizer` which 24463 * is invoked to produce the cloned value. If `customizer` returns `undefined`, 24464 * cloning is handled by the method instead. The `customizer` is invoked with 24465 * up to four arguments; (value [, index|key, object, stack]). 24466 * 24467 * @static 24468 * @memberOf _ 24469 * @since 4.0.0 24470 * @category Lang 24471 * @param {*} value The value to clone. 24472 * @param {Function} [customizer] The function to customize cloning. 24473 * @returns {*} Returns the cloned value. 24474 * @see _.cloneDeepWith 24475 * @example 24476 * 24477 * function customizer(value) { 24478 * if (_.isElement(value)) { 24479 * return value.cloneNode(false); 24480 * } 24481 * } 24482 * 24483 * var el = _.cloneWith(document.body, customizer); 24484 * 24485 * console.log(el === document.body); 24486 * // => false 24487 * console.log(el.nodeName); 24488 * // => 'BODY' 24489 * console.log(el.childNodes.length); 24490 * // => 0 24491 */ 24492 function cloneWith(value, customizer) { 24493 customizer = typeof customizer == 'function' ? customizer : undefined; 24494 return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); 24495 } 24496 24497 /** 24498 * This method is like `_.clone` except that it recursively clones `value`. 24499 * 24500 * @static 24501 * @memberOf _ 24502 * @since 1.0.0 24503 * @category Lang 24504 * @param {*} value The value to recursively clone. 24505 * @returns {*} Returns the deep cloned value. 24506 * @see _.clone 24507 * @example 24508 * 24509 * var objects = [{ 'a': 1 }, { 'b': 2 }]; 24510 * 24511 * var deep = _.cloneDeep(objects); 24512 * console.log(deep[0] === objects[0]); 24513 * // => false 24514 */ 24515 function cloneDeep(value) { 24516 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); 24517 } 24518 24519 /** 24520 * This method is like `_.cloneWith` except that it recursively clones `value`. 24521 * 24522 * @static 24523 * @memberOf _ 24524 * @since 4.0.0 24525 * @category Lang 24526 * @param {*} value The value to recursively clone. 24527 * @param {Function} [customizer] The function to customize cloning. 24528 * @returns {*} Returns the deep cloned value. 24529 * @see _.cloneWith 24530 * @example 24531 * 24532 * function customizer(value) { 24533 * if (_.isElement(value)) { 24534 * return value.cloneNode(true); 24535 * } 24536 * } 24537 * 24538 * var el = _.cloneDeepWith(document.body, customizer); 24539 * 24540 * console.log(el === document.body); 24541 * // => false 24542 * console.log(el.nodeName); 24543 * // => 'BODY' 24544 * console.log(el.childNodes.length); 24545 * // => 20 24546 */ 24547 function cloneDeepWith(value, customizer) { 24548 customizer = typeof customizer == 'function' ? customizer : undefined; 24549 return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); 24550 } 24551 24552 /** 24553 * Checks if `object` conforms to `source` by invoking the predicate 24554 * properties of `source` with the corresponding property values of `object`. 24555 * 24556 * **Note:** This method is equivalent to `_.conforms` when `source` is 24557 * partially applied. 24558 * 24559 * @static 24560 * @memberOf _ 24561 * @since 4.14.0 24562 * @category Lang 24563 * @param {Object} object The object to inspect. 24564 * @param {Object} source The object of property predicates to conform to. 24565 * @returns {boolean} Returns `true` if `object` conforms, else `false`. 24566 * @example 24567 * 24568 * var object = { 'a': 1, 'b': 2 }; 24569 * 24570 * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); 24571 * // => true 24572 * 24573 * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); 24574 * // => false 24575 */ 24576 function conformsTo(object, source) { 24577 return source == null || baseConformsTo(object, source, keys(source)); 24578 } 24579 24580 /** 24581 * Performs a 24582 * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) 24583 * comparison between two values to determine if they are equivalent. 24584 * 24585 * @static 24586 * @memberOf _ 24587 * @since 4.0.0 24588 * @category Lang 24589 * @param {*} value The value to compare. 24590 * @param {*} other The other value to compare. 24591 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. 24592 * @example 24593 * 24594 * var object = { 'a': 1 }; 24595 * var other = { 'a': 1 }; 24596 * 24597 * _.eq(object, object); 24598 * // => true 24599 * 24600 * _.eq(object, other); 24601 * // => false 24602 * 24603 * _.eq('a', 'a'); 24604 * // => true 24605 * 24606 * _.eq('a', Object('a')); 24607 * // => false 24608 * 24609 * _.eq(NaN, NaN); 24610 * // => true 24611 */ 24612 function eq(value, other) { 24613 return value === other || (value !== value && other !== other); 24614 } 24615 24616 /** 24617 * Checks if `value` is greater than `other`. 24618 * 24619 * @static 24620 * @memberOf _ 24621 * @since 3.9.0 24622 * @category Lang 24623 * @param {*} value The value to compare. 24624 * @param {*} other The other value to compare. 24625 * @returns {boolean} Returns `true` if `value` is greater than `other`, 24626 * else `false`. 24627 * @see _.lt 24628 * @example 24629 * 24630 * _.gt(3, 1); 24631 * // => true 24632 * 24633 * _.gt(3, 3); 24634 * // => false 24635 * 24636 * _.gt(1, 3); 24637 * // => false 24638 */ 24639 var gt = createRelationalOperation(baseGt); 24640 24641 /** 24642 * Checks if `value` is greater than or equal to `other`. 24643 * 24644 * @static 24645 * @memberOf _ 24646 * @since 3.9.0 24647 * @category Lang 24648 * @param {*} value The value to compare. 24649 * @param {*} other The other value to compare. 24650 * @returns {boolean} Returns `true` if `value` is greater than or equal to 24651 * `other`, else `false`. 24652 * @see _.lte 24653 * @example 24654 * 24655 * _.gte(3, 1); 24656 * // => true 24657 * 24658 * _.gte(3, 3); 24659 * // => true 24660 * 24661 * _.gte(1, 3); 24662 * // => false 24663 */ 24664 var gte = createRelationalOperation(function(value, other) { 24665 return value >= other; 24666 }); 24667 24668 /** 24669 * Checks if `value` is likely an `arguments` object. 24670 * 24671 * @static 24672 * @memberOf _ 24673 * @since 0.1.0 24674 * @category Lang 24675 * @param {*} value The value to check. 24676 * @returns {boolean} Returns `true` if `value` is an `arguments` object, 24677 * else `false`. 24678 * @example 24679 * 24680 * _.isArguments(function() { return arguments; }()); 24681 * // => true 24682 * 24683 * _.isArguments([1, 2, 3]); 24684 * // => false 24685 */ 24686 var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { 24687 return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && 24688 !propertyIsEnumerable.call(value, 'callee'); 24689 }; 24690 24691 /** 24692 * Checks if `value` is classified as an `Array` object. 24693 * 24694 * @static 24695 * @memberOf _ 24696 * @since 0.1.0 24697 * @category Lang 24698 * @param {*} value The value to check. 24699 * @returns {boolean} Returns `true` if `value` is an array, else `false`. 24700 * @example 24701 * 24702 * _.isArray([1, 2, 3]); 24703 * // => true 24704 * 24705 * _.isArray(document.body.children); 24706 * // => false 24707 * 24708 * _.isArray('abc'); 24709 * // => false 24710 * 24711 * _.isArray(_.noop); 24712 * // => false 24713 */ 24714 var isArray = Array.isArray; 24715 24716 /** 24717 * Checks if `value` is classified as an `ArrayBuffer` object. 24718 * 24719 * @static 24720 * @memberOf _ 24721 * @since 4.3.0 24722 * @category Lang 24723 * @param {*} value The value to check. 24724 * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. 24725 * @example 24726 * 24727 * _.isArrayBuffer(new ArrayBuffer(2)); 24728 * // => true 24729 * 24730 * _.isArrayBuffer(new Array(2)); 24731 * // => false 24732 */ 24733 var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; 24734 24735 /** 24736 * Checks if `value` is array-like. A value is considered array-like if it's 24737 * not a function and has a `value.length` that's an integer greater than or 24738 * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. 24739 * 24740 * @static 24741 * @memberOf _ 24742 * @since 4.0.0 24743 * @category Lang 24744 * @param {*} value The value to check. 24745 * @returns {boolean} Returns `true` if `value` is array-like, else `false`. 24746 * @example 24747 * 24748 * _.isArrayLike([1, 2, 3]); 24749 * // => true 24750 * 24751 * _.isArrayLike(document.body.children); 24752 * // => true 24753 * 24754 * _.isArrayLike('abc'); 24755 * // => true 24756 * 24757 * _.isArrayLike(_.noop); 24758 * // => false 24759 */ 24760 function isArrayLike(value) { 24761 return value != null && isLength(value.length) && !isFunction(value); 24762 } 24763 24764 /** 24765 * This method is like `_.isArrayLike` except that it also checks if `value` 24766 * is an object. 24767 * 24768 * @static 24769 * @memberOf _ 24770 * @since 4.0.0 24771 * @category Lang 24772 * @param {*} value The value to check. 24773 * @returns {boolean} Returns `true` if `value` is an array-like object, 24774 * else `false`. 24775 * @example 24776 * 24777 * _.isArrayLikeObject([1, 2, 3]); 24778 * // => true 24779 * 24780 * _.isArrayLikeObject(document.body.children); 24781 * // => true 24782 * 24783 * _.isArrayLikeObject('abc'); 24784 * // => false 24785 * 24786 * _.isArrayLikeObject(_.noop); 24787 * // => false 24788 */ 24789 function isArrayLikeObject(value) { 24790 return isObjectLike(value) && isArrayLike(value); 24791 } 24792 24793 /** 24794 * Checks if `value` is classified as a boolean primitive or object. 24795 * 24796 * @static 24797 * @memberOf _ 24798 * @since 0.1.0 24799 * @category Lang 24800 * @param {*} value The value to check. 24801 * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. 24802 * @example 24803 * 24804 * _.isBoolean(false); 24805 * // => true 24806 * 24807 * _.isBoolean(null); 24808 * // => false 24809 */ 24810 function isBoolean(value) { 24811 return value === true || value === false || 24812 (isObjectLike(value) && baseGetTag(value) == boolTag); 24813 } 24814 24815 /** 24816 * Checks if `value` is a buffer. 24817 * 24818 * @static 24819 * @memberOf _ 24820 * @since 4.3.0 24821 * @category Lang 24822 * @param {*} value The value to check. 24823 * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. 24824 * @example 24825 * 24826 * _.isBuffer(new Buffer(2)); 24827 * // => true 24828 * 24829 * _.isBuffer(new Uint8Array(2)); 24830 * // => false 24831 */ 24832 var isBuffer = nativeIsBuffer || stubFalse; 24833 24834 /** 24835 * Checks if `value` is classified as a `Date` object. 24836 * 24837 * @static 24838 * @memberOf _ 24839 * @since 0.1.0 24840 * @category Lang 24841 * @param {*} value The value to check. 24842 * @returns {boolean} Returns `true` if `value` is a date object, else `false`. 24843 * @example 24844 * 24845 * _.isDate(new Date); 24846 * // => true 24847 * 24848 * _.isDate('Mon April 23 2012'); 24849 * // => false 24850 */ 24851 var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; 24852 24853 /** 24854 * Checks if `value` is likely a DOM element. 24855 * 24856 * @static 24857 * @memberOf _ 24858 * @since 0.1.0 24859 * @category Lang 24860 * @param {*} value The value to check. 24861 * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. 24862 * @example 24863 * 24864 * _.isElement(document.body); 24865 * // => true 24866 * 24867 * _.isElement('<body>'); 24868 * // => false 24869 */ 24870 function isElement(value) { 24871 return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); 24872 } 24873 24874 /** 24875 * Checks if `value` is an empty object, collection, map, or set. 24876 * 24877 * Objects are considered empty if they have no own enumerable string keyed 24878 * properties. 24879 * 24880 * Array-like values such as `arguments` objects, arrays, buffers, strings, or 24881 * jQuery-like collections are considered empty if they have a `length` of `0`. 24882 * Similarly, maps and sets are considered empty if they have a `size` of `0`. 24883 * 24884 * @static 24885 * @memberOf _ 24886 * @since 0.1.0 24887 * @category Lang 24888 * @param {*} value The value to check. 24889 * @returns {boolean} Returns `true` if `value` is empty, else `false`. 24890 * @example 24891 * 24892 * _.isEmpty(null); 24893 * // => true 24894 * 24895 * _.isEmpty(true); 24896 * // => true 24897 * 24898 * _.isEmpty(1); 24899 * // => true 24900 * 24901 * _.isEmpty([1, 2, 3]); 24902 * // => false 24903 * 24904 * _.isEmpty({ 'a': 1 }); 24905 * // => false 24906 */ 24907 function isEmpty(value) { 24908 if (value == null) { 24909 return true; 24910 } 24911 if (isArrayLike(value) && 24912 (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || 24913 isBuffer(value) || isTypedArray(value) || isArguments(value))) { 24914 return !value.length; 24915 } 24916 var tag = getTag(value); 24917 if (tag == mapTag || tag == setTag) { 24918 return !value.size; 24919 } 24920 if (isPrototype(value)) { 24921 return !baseKeys(value).length; 24922 } 24923 for (var key in value) { 24924 if (hasOwnProperty.call(value, key)) { 24925 return false; 24926 } 24927 } 24928 return true; 24929 } 24930 24931 /** 24932 * Performs a deep comparison between two values to determine if they are 24933 * equivalent. 24934 * 24935 * **Note:** This method supports comparing arrays, array buffers, booleans, 24936 * date objects, error objects, maps, numbers, `Object` objects, regexes, 24937 * sets, strings, symbols, and typed arrays. `Object` objects are compared 24938 * by their own, not inherited, enumerable properties. Functions and DOM 24939 * nodes are compared by strict equality, i.e. `===`. 24940 * 24941 * @static 24942 * @memberOf _ 24943 * @since 0.1.0 24944 * @category Lang 24945 * @param {*} value The value to compare. 24946 * @param {*} other The other value to compare. 24947 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. 24948 * @example 24949 * 24950 * var object = { 'a': 1 }; 24951 * var other = { 'a': 1 }; 24952 * 24953 * _.isEqual(object, other); 24954 * // => true 24955 * 24956 * object === other; 24957 * // => false 24958 */ 24959 function isEqual(value, other) { 24960 return baseIsEqual(value, other); 24961 } 24962 24963 /** 24964 * This method is like `_.isEqual` except that it accepts `customizer` which 24965 * is invoked to compare values. If `customizer` returns `undefined`, comparisons 24966 * are handled by the method instead. The `customizer` is invoked with up to 24967 * six arguments: (objValue, othValue [, index|key, object, other, stack]). 24968 * 24969 * @static 24970 * @memberOf _ 24971 * @since 4.0.0 24972 * @category Lang 24973 * @param {*} value The value to compare. 24974 * @param {*} other The other value to compare. 24975 * @param {Function} [customizer] The function to customize comparisons. 24976 * @returns {boolean} Returns `true` if the values are equivalent, else `false`. 24977 * @example 24978 * 24979 * function isGreeting(value) { 24980 * return /^h(?:i|ello)$/.test(value); 24981 * } 24982 * 24983 * function customizer(objValue, othValue) { 24984 * if (isGreeting(objValue) && isGreeting(othValue)) { 24985 * return true; 24986 * } 24987 * } 24988 * 24989 * var array = ['hello', 'goodbye']; 24990 * var other = ['hi', 'goodbye']; 24991 * 24992 * _.isEqualWith(array, other, customizer); 24993 * // => true 24994 */ 24995 function isEqualWith(value, other, customizer) { 24996 customizer = typeof customizer == 'function' ? customizer : undefined; 24997 var result = customizer ? customizer(value, other) : undefined; 24998 return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; 24999 } 25000 25001 /** 25002 * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, 25003 * `SyntaxError`, `TypeError`, or `URIError` object. 25004 * 25005 * @static 25006 * @memberOf _ 25007 * @since 3.0.0 25008 * @category Lang 25009 * @param {*} value The value to check. 25010 * @returns {boolean} Returns `true` if `value` is an error object, else `false`. 25011 * @example 25012 * 25013 * _.isError(new Error); 25014 * // => true 25015 * 25016 * _.isError(Error); 25017 * // => false 25018 */ 25019 function isError(value) { 25020 if (!isObjectLike(value)) { 25021 return false;
vendor: 6,607 bytes, lines 25022-25259
25022 } 25023 var tag = baseGetTag(value); 25024 return tag == errorTag || tag == domExcTag || 25025 (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); 25026 } 25027 25028 /** 25029 * Checks if `value` is a finite primitive number. 25030 * 25031 * **Note:** This method is based on 25032 * [`Number.isFinite`](https://mdn.io/Number/isFinite). 25033 * 25034 * @static 25035 * @memberOf _ 25036 * @since 0.1.0 25037 * @category Lang 25038 * @param {*} value The value to check. 25039 * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. 25040 * @example 25041 * 25042 * _.isFinite(3); 25043 * // => true 25044 * 25045 * _.isFinite(Number.MIN_VALUE); 25046 * // => true 25047 * 25048 * _.isFinite(Infinity); 25049 * // => false 25050 * 25051 * _.isFinite('3'); 25052 * // => false 25053 */ 25054 function isFinite(value) { 25055 return typeof value == 'number' && nativeIsFinite(value); 25056 } 25057 25058 /** 25059 * Checks if `value` is classified as a `Function` object. 25060 * 25061 * @static 25062 * @memberOf _ 25063 * @since 0.1.0 25064 * @category Lang 25065 * @param {*} value The value to check. 25066 * @returns {boolean} Returns `true` if `value` is a function, else `false`. 25067 * @example 25068 * 25069 * _.isFunction(_); 25070 * // => true 25071 * 25072 * _.isFunction(/abc/); 25073 * // => false 25074 */ 25075 function isFunction(value) { 25076 if (!isObject(value)) { 25077 return false; 25078 } 25079 // The use of `Object#toString` avoids issues with the `typeof` operator 25080 // in Safari 9 which returns 'object' for typed arrays and other constructors. 25081 var tag = baseGetTag(value); 25082 return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; 25083 } 25084 25085 /** 25086 * Checks if `value` is an integer. 25087 * 25088 * **Note:** This method is based on 25089 * [`Number.isInteger`](https://mdn.io/Number/isInteger). 25090 * 25091 * @static 25092 * @memberOf _ 25093 * @since 4.0.0 25094 * @category Lang 25095 * @param {*} value The value to check. 25096 * @returns {boolean} Returns `true` if `value` is an integer, else `false`. 25097 * @example 25098 * 25099 * _.isInteger(3); 25100 * // => true 25101 * 25102 * _.isInteger(Number.MIN_VALUE); 25103 * // => false 25104 * 25105 * _.isInteger(Infinity); 25106 * // => false 25107 * 25108 * _.isInteger('3'); 25109 * // => false 25110 */ 25111 function isInteger(value) { 25112 return typeof value == 'number' && value == toInteger(value); 25113 } 25114 25115 /** 25116 * Checks if `value` is a valid array-like length. 25117 * 25118 * **Note:** This method is loosely based on 25119 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). 25120 * 25121 * @static 25122 * @memberOf _ 25123 * @since 4.0.0 25124 * @category Lang 25125 * @param {*} value The value to check. 25126 * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. 25127 * @example 25128 * 25129 * _.isLength(3); 25130 * // => true 25131 * 25132 * _.isLength(Number.MIN_VALUE); 25133 * // => false 25134 * 25135 * _.isLength(Infinity); 25136 * // => false 25137 * 25138 * _.isLength('3'); 25139 * // => false 25140 */ 25141 function isLength(value) { 25142 return typeof value == 'number' && 25143 value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; 25144 } 25145 25146 /** 25147 * Checks if `value` is the 25148 * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) 25149 * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) 25150 * 25151 * @static 25152 * @memberOf _ 25153 * @since 0.1.0 25154 * @category Lang 25155 * @param {*} value The value to check. 25156 * @returns {boolean} Returns `true` if `value` is an object, else `false`. 25157 * @example 25158 * 25159 * _.isObject({}); 25160 * // => true 25161 * 25162 * _.isObject([1, 2, 3]); 25163 * // => true 25164 * 25165 * _.isObject(_.noop); 25166 * // => true 25167 * 25168 * _.isObject(null); 25169 * // => false 25170 */ 25171 function isObject(value) { 25172 var type = typeof value; 25173 return value != null && (type == 'object' || type == 'function'); 25174 } 25175 25176 /** 25177 * Checks if `value` is object-like. A value is object-like if it's not `null` 25178 * and has a `typeof` result of "object". 25179 * 25180 * @static 25181 * @memberOf _ 25182 * @since 4.0.0 25183 * @category Lang 25184 * @param {*} value The value to check. 25185 * @returns {boolean} Returns `true` if `value` is object-like, else `false`. 25186 * @example 25187 * 25188 * _.isObjectLike({}); 25189 * // => true 25190 * 25191 * _.isObjectLike([1, 2, 3]); 25192 * // => true 25193 * 25194 * _.isObjectLike(_.noop); 25195 * // => false 25196 * 25197 * _.isObjectLike(null); 25198 * // => false 25199 */ 25200 function isObjectLike(value) { 25201 return value != null && typeof value == 'object'; 25202 } 25203 25204 /** 25205 * Checks if `value` is classified as a `Map` object. 25206 * 25207 * @static 25208 * @memberOf _ 25209 * @since 4.3.0 25210 * @category Lang 25211 * @param {*} value The value to check. 25212 * @returns {boolean} Returns `true` if `value` is a map, else `false`. 25213 * @example 25214 * 25215 * _.isMap(new Map); 25216 * // => true 25217 * 25218 * _.isMap(new WeakMap); 25219 * // => false 25220 */ 25221 var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; 25222 25223 /** 25224 * Performs a partial deep comparison between `object` and `source` to 25225 * determine if `object` contains equivalent property values. 25226 * 25227 * **Note:** This method is equivalent to `_.matches` when `source` is 25228 * partially applied. 25229 * 25230 * Partial comparisons will match empty array and empty object `source` 25231 * values against any array or object value, respectively. See `_.isEqual` 25232 * for a list of supported value comparisons. 25233 * 25234 * @static 25235 * @memberOf _ 25236 * @since 3.0.0 25237 * @category Lang 25238 * @param {Object} object The object to inspect. 25239 * @param {Object} source The object of property values to match. 25240 * @returns {boolean} Returns `true` if `object` is a match, else `false`. 25241 * @example 25242 * 25243 * var object = { 'a': 1, 'b': 2 }; 25244 * 25245 * _.isMatch(object, { 'b': 2 }); 25246 * // => true 25247 * 25248 * _.isMatch(object, { 'b': 1 }); 25249 * // => false 25250 */ 25251 function isMatch(object, source) { 25252 return object === source || baseIsMatch(object, source, getMatchData(source)); 25253 } 25254 25255 /** 25256 * This method is like `_.isMatch` except that it accepts `customizer` which 25257 * is invoked to compare values. If `customizer` returns `undefined`, comparisons 25258 * are handled by the method instead. The `customizer` is invoked with five 25259 * arguments: (objValue, srcValue, index|key, object, source).
vendor: 12,241 bytes, lines 25260-25725
25260 * 25261 * @static 25262 * @memberOf _ 25263 * @since 4.0.0 25264 * @category Lang 25265 * @param {Object} object The object to inspect. 25266 * @param {Object} source The object of property values to match. 25267 * @param {Function} [customizer] The function to customize comparisons. 25268 * @returns {boolean} Returns `true` if `object` is a match, else `false`. 25269 * @example 25270 * 25271 * function isGreeting(value) { 25272 * return /^h(?:i|ello)$/.test(value); 25273 * } 25274 * 25275 * function customizer(objValue, srcValue) { 25276 * if (isGreeting(objValue) && isGreeting(srcValue)) { 25277 * return true; 25278 * } 25279 * } 25280 * 25281 * var object = { 'greeting': 'hello' }; 25282 * var source = { 'greeting': 'hi' }; 25283 * 25284 * _.isMatchWith(object, source, customizer); 25285 * // => true 25286 */ 25287 function isMatchWith(object, source, customizer) { 25288 customizer = typeof customizer == 'function' ? customizer : undefined; 25289 return baseIsMatch(object, source, getMatchData(source), customizer); 25290 } 25291 25292 /** 25293 * Checks if `value` is `NaN`. 25294 * 25295 * **Note:** This method is based on 25296 * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as 25297 * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for 25298 * `undefined` and other non-number values. 25299 * 25300 * @static 25301 * @memberOf _ 25302 * @since 0.1.0 25303 * @category Lang 25304 * @param {*} value The value to check. 25305 * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. 25306 * @example 25307 * 25308 * _.isNaN(NaN); 25309 * // => true 25310 * 25311 * _.isNaN(new Number(NaN)); 25312 * // => true 25313 * 25314 * isNaN(undefined); 25315 * // => true 25316 * 25317 * _.isNaN(undefined); 25318 * // => false 25319 */ 25320 function isNaN(value) { 25321 // An `NaN` primitive is the only value that is not equal to itself. 25322 // Perform the `toStringTag` check first to avoid errors with some 25323 // ActiveX objects in IE. 25324 return isNumber(value) && value != +value; 25325 } 25326 25327 /** 25328 * Checks if `value` is a pristine native function. 25329 * 25330 * **Note:** This method can't reliably detect native functions in the presence 25331 * of the core-js package because core-js circumvents this kind of detection. 25332 * Despite multiple requests, the core-js maintainer has made it clear: any 25333 * attempt to fix the detection will be obstructed. As a result, we're left 25334 * with little choice but to throw an error. Unfortunately, this also affects 25335 * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), 25336 * which rely on core-js. 25337 * 25338 * @static 25339 * @memberOf _ 25340 * @since 3.0.0 25341 * @category Lang 25342 * @param {*} value The value to check. 25343 * @returns {boolean} Returns `true` if `value` is a native function, 25344 * else `false`. 25345 * @example 25346 * 25347 * _.isNative(Array.prototype.push); 25348 * // => true 25349 * 25350 * _.isNative(_); 25351 * // => false 25352 */ 25353 function isNative(value) { 25354 if (isMaskable(value)) { 25355 throw new Error(CORE_ERROR_TEXT); 25356 } 25357 return baseIsNative(value); 25358 } 25359 25360 /** 25361 * Checks if `value` is `null`. 25362 * 25363 * @static 25364 * @memberOf _ 25365 * @since 0.1.0 25366 * @category Lang 25367 * @param {*} value The value to check. 25368 * @returns {boolean} Returns `true` if `value` is `null`, else `false`. 25369 * @example 25370 * 25371 * _.isNull(null); 25372 * // => true 25373 * 25374 * _.isNull(void 0); 25375 * // => false 25376 */ 25377 function isNull(value) { 25378 return value === null; 25379 } 25380 25381 /** 25382 * Checks if `value` is `null` or `undefined`. 25383 * 25384 * @static 25385 * @memberOf _ 25386 * @since 4.0.0 25387 * @category Lang 25388 * @param {*} value The value to check. 25389 * @returns {boolean} Returns `true` if `value` is nullish, else `false`. 25390 * @example 25391 * 25392 * _.isNil(null); 25393 * // => true 25394 * 25395 * _.isNil(void 0); 25396 * // => true 25397 * 25398 * _.isNil(NaN); 25399 * // => false 25400 */ 25401 function isNil(value) { 25402 return value == null; 25403 } 25404 25405 /** 25406 * Checks if `value` is classified as a `Number` primitive or object. 25407 * 25408 * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are 25409 * classified as numbers, use the `_.isFinite` method. 25410 * 25411 * @static 25412 * @memberOf _ 25413 * @since 0.1.0 25414 * @category Lang 25415 * @param {*} value The value to check. 25416 * @returns {boolean} Returns `true` if `value` is a number, else `false`. 25417 * @example 25418 * 25419 * _.isNumber(3); 25420 * // => true 25421 * 25422 * _.isNumber(Number.MIN_VALUE); 25423 * // => true 25424 * 25425 * _.isNumber(Infinity); 25426 * // => true 25427 * 25428 * _.isNumber('3'); 25429 * // => false 25430 */ 25431 function isNumber(value) { 25432 return typeof value == 'number' || 25433 (isObjectLike(value) && baseGetTag(value) == numberTag); 25434 } 25435 25436 /** 25437 * Checks if `value` is a plain object, that is, an object created by the 25438 * `Object` constructor or one with a `[[Prototype]]` of `null`. 25439 * 25440 * @static 25441 * @memberOf _ 25442 * @since 0.8.0 25443 * @category Lang 25444 * @param {*} value The value to check. 25445 * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. 25446 * @example 25447 * 25448 * function Foo() { 25449 * this.a = 1; 25450 * } 25451 * 25452 * _.isPlainObject(new Foo); 25453 * // => false 25454 * 25455 * _.isPlainObject([1, 2, 3]); 25456 * // => false 25457 * 25458 * _.isPlainObject({ 'x': 0, 'y': 0 }); 25459 * // => true 25460 * 25461 * _.isPlainObject(Object.create(null)); 25462 * // => true 25463 */ 25464 function isPlainObject(value) { 25465 if (!isObjectLike(value) || baseGetTag(value) != objectTag) { 25466 return false; 25467 } 25468 var proto = getPrototype(value); 25469 if (proto === null) { 25470 return true; 25471 } 25472 var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; 25473 return typeof Ctor == 'function' && Ctor instanceof Ctor && 25474 funcToString.call(Ctor) == objectCtorString; 25475 } 25476 25477 /** 25478 * Checks if `value` is classified as a `RegExp` object. 25479 * 25480 * @static 25481 * @memberOf _ 25482 * @since 0.1.0 25483 * @category Lang 25484 * @param {*} value The value to check. 25485 * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. 25486 * @example 25487 * 25488 * _.isRegExp(/abc/); 25489 * // => true 25490 * 25491 * _.isRegExp('/abc/'); 25492 * // => false 25493 */ 25494 var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; 25495 25496 /** 25497 * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 25498 * double precision number which isn't the result of a rounded unsafe integer. 25499 * 25500 * **Note:** This method is based on 25501 * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). 25502 * 25503 * @static 25504 * @memberOf _ 25505 * @since 4.0.0 25506 * @category Lang 25507 * @param {*} value The value to check. 25508 * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. 25509 * @example 25510 * 25511 * _.isSafeInteger(3); 25512 * // => true 25513 * 25514 * _.isSafeInteger(Number.MIN_VALUE); 25515 * // => false 25516 * 25517 * _.isSafeInteger(Infinity); 25518 * // => false 25519 * 25520 * _.isSafeInteger('3'); 25521 * // => false 25522 */ 25523 function isSafeInteger(value) { 25524 return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; 25525 } 25526 25527 /** 25528 * Checks if `value` is classified as a `Set` object. 25529 * 25530 * @static 25531 * @memberOf _ 25532 * @since 4.3.0 25533 * @category Lang 25534 * @param {*} value The value to check. 25535 * @returns {boolean} Returns `true` if `value` is a set, else `false`. 25536 * @example 25537 * 25538 * _.isSet(new Set); 25539 * // => true 25540 * 25541 * _.isSet(new WeakSet); 25542 * // => false 25543 */ 25544 var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; 25545 25546 /** 25547 * Checks if `value` is classified as a `String` primitive or object. 25548 * 25549 * @static 25550 * @since 0.1.0 25551 * @memberOf _ 25552 * @category Lang 25553 * @param {*} value The value to check. 25554 * @returns {boolean} Returns `true` if `value` is a string, else `false`. 25555 * @example 25556 * 25557 * _.isString('abc'); 25558 * // => true 25559 * 25560 * _.isString(1); 25561 * // => false 25562 */ 25563 function isString(value) { 25564 return typeof value == 'string' || 25565 (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); 25566 } 25567 25568 /** 25569 * Checks if `value` is classified as a `Symbol` primitive or object. 25570 * 25571 * @static 25572 * @memberOf _ 25573 * @since 4.0.0 25574 * @category Lang 25575 * @param {*} value The value to check. 25576 * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. 25577 * @example 25578 * 25579 * _.isSymbol(Symbol.iterator); 25580 * // => true 25581 * 25582 * _.isSymbol('abc'); 25583 * // => false 25584 */ 25585 function isSymbol(value) { 25586 return typeof value == 'symbol' || 25587 (isObjectLike(value) && baseGetTag(value) == symbolTag); 25588 } 25589 25590 /** 25591 * Checks if `value` is classified as a typed array. 25592 * 25593 * @static 25594 * @memberOf _ 25595 * @since 3.0.0 25596 * @category Lang 25597 * @param {*} value The value to check. 25598 * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. 25599 * @example 25600 * 25601 * _.isTypedArray(new Uint8Array); 25602 * // => true 25603 * 25604 * _.isTypedArray([]); 25605 * // => false 25606 */ 25607 var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; 25608 25609 /** 25610 * Checks if `value` is `undefined`. 25611 * 25612 * @static 25613 * @since 0.1.0 25614 * @memberOf _ 25615 * @category Lang 25616 * @param {*} value The value to check. 25617 * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. 25618 * @example 25619 * 25620 * _.isUndefined(void 0); 25621 * // => true 25622 * 25623 * _.isUndefined(null); 25624 * // => false 25625 */ 25626 function isUndefined(value) { 25627 return value === undefined; 25628 } 25629 25630 /** 25631 * Checks if `value` is classified as a `WeakMap` object. 25632 * 25633 * @static 25634 * @memberOf _ 25635 * @since 4.3.0 25636 * @category Lang 25637 * @param {*} value The value to check. 25638 * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. 25639 * @example 25640 * 25641 * _.isWeakMap(new WeakMap); 25642 * // => true 25643 * 25644 * _.isWeakMap(new Map); 25645 * // => false 25646 */ 25647 function isWeakMap(value) { 25648 return isObjectLike(value) && getTag(value) == weakMapTag; 25649 } 25650 25651 /** 25652 * Checks if `value` is classified as a `WeakSet` object. 25653 * 25654 * @static 25655 * @memberOf _ 25656 * @since 4.3.0 25657 * @category Lang 25658 * @param {*} value The value to check. 25659 * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. 25660 * @example 25661 * 25662 * _.isWeakSet(new WeakSet); 25663 * // => true 25664 * 25665 * _.isWeakSet(new Set); 25666 * // => false 25667 */ 25668 function isWeakSet(value) { 25669 return isObjectLike(value) && baseGetTag(value) == weakSetTag; 25670 } 25671 25672 /** 25673 * Checks if `value` is less than `other`. 25674 * 25675 * @static 25676 * @memberOf _ 25677 * @since 3.9.0 25678 * @category Lang 25679 * @param {*} value The value to compare. 25680 * @param {*} other The other value to compare. 25681 * @returns {boolean} Returns `true` if `value` is less than `other`, 25682 * else `false`. 25683 * @see _.gt 25684 * @example 25685 * 25686 * _.lt(1, 3); 25687 * // => true 25688 * 25689 * _.lt(3, 3); 25690 * // => false 25691 * 25692 * _.lt(3, 1); 25693 * // => false 25694 */ 25695 var lt = createRelationalOperation(baseLt); 25696 25697 /** 25698 * Checks if `value` is less than or equal to `other`. 25699 * 25700 * @static 25701 * @memberOf _ 25702 * @since 3.9.0 25703 * @category Lang 25704 * @param {*} value The value to compare. 25705 * @param {*} other The other value to compare. 25706 * @returns {boolean} Returns `true` if `value` is less than or equal to 25707 * `other`, else `false`. 25708 * @see _.gte 25709 * @example 25710 * 25711 * _.lte(1, 3); 25712 * // => true 25713 * 25714 * _.lte(3, 3); 25715 * // => true 25716 * 25717 * _.lte(3, 1); 25718 * // => false 25719 */ 25720 var lte = createRelationalOperation(function(value, other) { 25721 return value <= other; 25722 }); 25723 25724 /** 25725 * Converts `value` to an array.
vendor: 11,756 bytes, lines 25726-26155
25726 * 25727 * @static 25728 * @since 0.1.0 25729 * @memberOf _ 25730 * @category Lang 25731 * @param {*} value The value to convert. 25732 * @returns {Array} Returns the converted array. 25733 * @example 25734 * 25735 * _.toArray({ 'a': 1, 'b': 2 }); 25736 * // => [1, 2] 25737 * 25738 * _.toArray('abc'); 25739 * // => ['a', 'b', 'c'] 25740 * 25741 * _.toArray(1); 25742 * // => [] 25743 * 25744 * _.toArray(null); 25745 * // => [] 25746 */ 25747 function toArray(value) { 25748 if (!value) { 25749 return []; 25750 } 25751 if (isArrayLike(value)) { 25752 return isString(value) ? stringToArray(value) : copyArray(value); 25753 } 25754 if (symIterator && value[symIterator]) { 25755 return iteratorToArray(value[symIterator]()); 25756 } 25757 var tag = getTag(value), 25758 func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); 25759 25760 return func(value); 25761 } 25762 25763 /** 25764 * Converts `value` to a finite number. 25765 * 25766 * @static 25767 * @memberOf _ 25768 * @since 4.12.0 25769 * @category Lang 25770 * @param {*} value The value to convert. 25771 * @returns {number} Returns the converted number. 25772 * @example 25773 * 25774 * _.toFinite(3.2); 25775 * // => 3.2 25776 * 25777 * _.toFinite(Number.MIN_VALUE); 25778 * // => 5e-324 25779 * 25780 * _.toFinite(Infinity); 25781 * // => 1.7976931348623157e+308 25782 * 25783 * _.toFinite('3.2'); 25784 * // => 3.2 25785 */ 25786 function toFinite(value) { 25787 if (!value) { 25788 return value === 0 ? value : 0; 25789 } 25790 value = toNumber(value); 25791 if (value === INFINITY || value === -INFINITY) { 25792 var sign = (value < 0 ? -1 : 1); 25793 return sign * MAX_INTEGER; 25794 } 25795 return value === value ? value : 0; 25796 } 25797 25798 /** 25799 * Converts `value` to an integer. 25800 * 25801 * **Note:** This method is loosely based on 25802 * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). 25803 * 25804 * @static 25805 * @memberOf _ 25806 * @since 4.0.0 25807 * @category Lang 25808 * @param {*} value The value to convert. 25809 * @returns {number} Returns the converted integer. 25810 * @example 25811 * 25812 * _.toInteger(3.2); 25813 * // => 3 25814 * 25815 * _.toInteger(Number.MIN_VALUE); 25816 * // => 0 25817 * 25818 * _.toInteger(Infinity); 25819 * // => 1.7976931348623157e+308 25820 * 25821 * _.toInteger('3.2'); 25822 * // => 3 25823 */ 25824 function toInteger(value) { 25825 var result = toFinite(value), 25826 remainder = result % 1; 25827 25828 return result === result ? (remainder ? result - remainder : result) : 0; 25829 } 25830 25831 /** 25832 * Converts `value` to an integer suitable for use as the length of an 25833 * array-like object. 25834 * 25835 * **Note:** This method is based on 25836 * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). 25837 * 25838 * @static 25839 * @memberOf _ 25840 * @since 4.0.0 25841 * @category Lang 25842 * @param {*} value The value to convert. 25843 * @returns {number} Returns the converted integer. 25844 * @example 25845 * 25846 * _.toLength(3.2); 25847 * // => 3 25848 * 25849 * _.toLength(Number.MIN_VALUE); 25850 * // => 0 25851 * 25852 * _.toLength(Infinity); 25853 * // => 4294967295 25854 * 25855 * _.toLength('3.2'); 25856 * // => 3 25857 */ 25858 function toLength(value) { 25859 return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; 25860 } 25861 25862 /** 25863 * Converts `value` to a number. 25864 * 25865 * @static 25866 * @memberOf _ 25867 * @since 4.0.0 25868 * @category Lang 25869 * @param {*} value The value to process. 25870 * @returns {number} Returns the number. 25871 * @example 25872 * 25873 * _.toNumber(3.2); 25874 * // => 3.2 25875 * 25876 * _.toNumber(Number.MIN_VALUE); 25877 * // => 5e-324 25878 * 25879 * _.toNumber(Infinity); 25880 * // => Infinity 25881 * 25882 * _.toNumber('3.2'); 25883 * // => 3.2 25884 */ 25885 function toNumber(value) { 25886 if (typeof value == 'number') { 25887 return value; 25888 } 25889 if (isSymbol(value)) { 25890 return NAN; 25891 } 25892 if (isObject(value)) { 25893 var other = typeof value.valueOf == 'function' ? value.valueOf() : value; 25894 value = isObject(other) ? (other + '') : other; 25895 } 25896 if (typeof value != 'string') { 25897 return value === 0 ? value : +value; 25898 } 25899 value = baseTrim(value); 25900 var isBinary = reIsBinary.test(value); 25901 return (isBinary || reIsOctal.test(value)) 25902 ? freeParseInt(value.slice(2), isBinary ? 2 : 8) 25903 : (reIsBadHex.test(value) ? NAN : +value); 25904 } 25905 25906 /** 25907 * Converts `value` to a plain object flattening inherited enumerable string 25908 * keyed properties of `value` to own properties of the plain object. 25909 * 25910 * @static 25911 * @memberOf _ 25912 * @since 3.0.0 25913 * @category Lang 25914 * @param {*} value The value to convert. 25915 * @returns {Object} Returns the converted plain object. 25916 * @example 25917 * 25918 * function Foo() { 25919 * this.b = 2; 25920 * } 25921 * 25922 * Foo.prototype.c = 3; 25923 * 25924 * _.assign({ 'a': 1 }, new Foo); 25925 * // => { 'a': 1, 'b': 2 } 25926 * 25927 * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); 25928 * // => { 'a': 1, 'b': 2, 'c': 3 } 25929 */ 25930 function toPlainObject(value) { 25931 return copyObject(value, keysIn(value)); 25932 } 25933 25934 /** 25935 * Converts `value` to a safe integer. A safe integer can be compared and 25936 * represented correctly. 25937 * 25938 * @static 25939 * @memberOf _ 25940 * @since 4.0.0 25941 * @category Lang 25942 * @param {*} value The value to convert. 25943 * @returns {number} Returns the converted integer. 25944 * @example 25945 * 25946 * _.toSafeInteger(3.2); 25947 * // => 3 25948 * 25949 * _.toSafeInteger(Number.MIN_VALUE); 25950 * // => 0 25951 * 25952 * _.toSafeInteger(Infinity); 25953 * // => 9007199254740991 25954 * 25955 * _.toSafeInteger('3.2'); 25956 * // => 3 25957 */ 25958 function toSafeInteger(value) { 25959 return value 25960 ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) 25961 : (value === 0 ? value : 0); 25962 } 25963 25964 /** 25965 * Converts `value` to a string. An empty string is returned for `null` 25966 * and `undefined` values. The sign of `-0` is preserved. 25967 * 25968 * @static 25969 * @memberOf _ 25970 * @since 4.0.0 25971 * @category Lang 25972 * @param {*} value The value to convert. 25973 * @returns {string} Returns the converted string. 25974 * @example 25975 * 25976 * _.toString(null); 25977 * // => '' 25978 * 25979 * _.toString(-0); 25980 * // => '-0' 25981 * 25982 * _.toString([1, 2, 3]); 25983 * // => '1,2,3' 25984 */ 25985 function toString(value) { 25986 return value == null ? '' : baseToString(value); 25987 } 25988 25989 /*------------------------------------------------------------------------*/ 25990 25991 /** 25992 * Assigns own enumerable string keyed properties of source objects to the 25993 * destination object. Source objects are applied from left to right. 25994 * Subsequent sources overwrite property assignments of previous sources. 25995 * 25996 * **Note:** This method mutates `object` and is loosely based on 25997 * [`Object.assign`](https://mdn.io/Object/assign). 25998 * 25999 * @static 26000 * @memberOf _ 26001 * @since 0.10.0 26002 * @category Object 26003 * @param {Object} object The destination object. 26004 * @param {...Object} [sources] The source objects. 26005 * @returns {Object} Returns `object`. 26006 * @see _.assignIn 26007 * @example 26008 * 26009 * function Foo() { 26010 * this.a = 1; 26011 * } 26012 * 26013 * function Bar() { 26014 * this.c = 3; 26015 * } 26016 * 26017 * Foo.prototype.b = 2; 26018 * Bar.prototype.d = 4; 26019 * 26020 * _.assign({ 'a': 0 }, new Foo, new Bar); 26021 * // => { 'a': 1, 'c': 3 } 26022 */ 26023 var assign = createAssigner(function(object, source) { 26024 if (isPrototype(source) || isArrayLike(source)) { 26025 copyObject(source, keys(source), object); 26026 return; 26027 } 26028 for (var key in source) { 26029 if (hasOwnProperty.call(source, key)) { 26030 assignValue(object, key, source[key]); 26031 } 26032 } 26033 }); 26034 26035 /** 26036 * This method is like `_.assign` except that it iterates over own and 26037 * inherited source properties. 26038 * 26039 * **Note:** This method mutates `object`. 26040 * 26041 * @static 26042 * @memberOf _ 26043 * @since 4.0.0 26044 * @alias extend 26045 * @category Object 26046 * @param {Object} object The destination object. 26047 * @param {...Object} [sources] The source objects. 26048 * @returns {Object} Returns `object`. 26049 * @see _.assign 26050 * @example 26051 * 26052 * function Foo() { 26053 * this.a = 1; 26054 * } 26055 * 26056 * function Bar() { 26057 * this.c = 3; 26058 * } 26059 * 26060 * Foo.prototype.b = 2; 26061 * Bar.prototype.d = 4; 26062 * 26063 * _.assignIn({ 'a': 0 }, new Foo, new Bar); 26064 * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } 26065 */ 26066 var assignIn = createAssigner(function(object, source) { 26067 copyObject(source, keysIn(source), object); 26068 }); 26069 26070 /** 26071 * This method is like `_.assignIn` except that it accepts `customizer` 26072 * which is invoked to produce the assigned values. If `customizer` returns 26073 * `undefined`, assignment is handled by the method instead. The `customizer` 26074 * is invoked with five arguments: (objValue, srcValue, key, object, source). 26075 * 26076 * **Note:** This method mutates `object`. 26077 * 26078 * @static 26079 * @memberOf _ 26080 * @since 4.0.0 26081 * @alias extendWith 26082 * @category Object 26083 * @param {Object} object The destination object. 26084 * @param {...Object} sources The source objects. 26085 * @param {Function} [customizer] The function to customize assigned values. 26086 * @returns {Object} Returns `object`. 26087 * @see _.assignWith 26088 * @example 26089 * 26090 * function customizer(objValue, srcValue) { 26091 * return _.isUndefined(objValue) ? srcValue : objValue; 26092 * } 26093 * 26094 * var defaults = _.partialRight(_.assignInWith, customizer); 26095 * 26096 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); 26097 * // => { 'a': 1, 'b': 2 } 26098 */ 26099 var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { 26100 copyObject(source, keysIn(source), object, customizer); 26101 }); 26102 26103 /** 26104 * This method is like `_.assign` except that it accepts `customizer` 26105 * which is invoked to produce the assigned values. If `customizer` returns 26106 * `undefined`, assignment is handled by the method instead. The `customizer` 26107 * is invoked with five arguments: (objValue, srcValue, key, object, source). 26108 * 26109 * **Note:** This method mutates `object`. 26110 * 26111 * @static 26112 * @memberOf _ 26113 * @since 4.0.0 26114 * @category Object 26115 * @param {Object} object The destination object. 26116 * @param {...Object} sources The source objects. 26117 * @param {Function} [customizer] The function to customize assigned values. 26118 * @returns {Object} Returns `object`. 26119 * @see _.assignInWith 26120 * @example 26121 * 26122 * function customizer(objValue, srcValue) { 26123 * return _.isUndefined(objValue) ? srcValue : objValue; 26124 * } 26125 * 26126 * var defaults = _.partialRight(_.assignWith, customizer); 26127 * 26128 * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); 26129 * // => { 'a': 1, 'b': 2 } 26130 */ 26131 var assignWith = createAssigner(function(object, source, srcIndex, customizer) { 26132 copyObject(source, keys(source), object, customizer); 26133 }); 26134 26135 /** 26136 * Creates an array of values corresponding to `paths` of `object`. 26137 * 26138 * @static 26139 * @memberOf _ 26140 * @since 1.0.0 26141 * @category Object 26142 * @param {Object} object The object to iterate over. 26143 * @param {...(string|string[])} [paths] The property paths to pick. 26144 * @returns {Array} Returns the picked values. 26145 * @example 26146 * 26147 * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; 26148 * 26149 * _.at(object, ['a[0].b.c', 'a[1]']); 26150 * // => [3, 4] 26151 */ 26152 var at = flatRest(baseAt); 26153 26154 /** 26155 * Creates an object that inherits from the `prototype` object. If a
vendor: 13,619 bytes, lines 26156-26620
26156 * `properties` object is given, its own enumerable string keyed properties 26157 * are assigned to the created object. 26158 * 26159 * @static 26160 * @memberOf _ 26161 * @since 2.3.0 26162 * @category Object 26163 * @param {Object} prototype The object to inherit from. 26164 * @param {Object} [properties] The properties to assign to the object. 26165 * @returns {Object} Returns the new object. 26166 * @example 26167 * 26168 * function Shape() { 26169 * this.x = 0; 26170 * this.y = 0; 26171 * } 26172 * 26173 * function Circle() { 26174 * Shape.call(this); 26175 * } 26176 * 26177 * Circle.prototype = _.create(Shape.prototype, { 26178 * 'constructor': Circle 26179 * }); 26180 * 26181 * var circle = new Circle; 26182 * circle instanceof Circle; 26183 * // => true 26184 * 26185 * circle instanceof Shape; 26186 * // => true 26187 */ 26188 function create(prototype, properties) { 26189 var result = baseCreate(prototype); 26190 return properties == null ? result : baseAssign(result, properties); 26191 } 26192 26193 /** 26194 * Assigns own and inherited enumerable string keyed properties of source 26195 * objects to the destination object for all destination properties that 26196 * resolve to `undefined`. Source objects are applied from left to right. 26197 * Once a property is set, additional values of the same property are ignored. 26198 * 26199 * **Note:** This method mutates `object`. 26200 * 26201 * @static 26202 * @since 0.1.0 26203 * @memberOf _ 26204 * @category Object 26205 * @param {Object} object The destination object. 26206 * @param {...Object} [sources] The source objects. 26207 * @returns {Object} Returns `object`. 26208 * @see _.defaultsDeep 26209 * @example 26210 * 26211 * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); 26212 * // => { 'a': 1, 'b': 2 } 26213 */ 26214 var defaults = baseRest(function(object, sources) { 26215 object = Object(object); 26216 26217 var index = -1; 26218 var length = sources.length; 26219 var guard = length > 2 ? sources[2] : undefined; 26220 26221 if (guard && isIterateeCall(sources[0], sources[1], guard)) { 26222 length = 1; 26223 } 26224 26225 while (++index < length) { 26226 var source = sources[index]; 26227 var props = keysIn(source); 26228 var propsIndex = -1; 26229 var propsLength = props.length; 26230 26231 while (++propsIndex < propsLength) { 26232 var key = props[propsIndex]; 26233 var value = object[key]; 26234 26235 if (value === undefined || 26236 (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { 26237 object[key] = source[key]; 26238 } 26239 } 26240 } 26241 26242 return object; 26243 }); 26244 26245 /** 26246 * This method is like `_.defaults` except that it recursively assigns 26247 * default properties. 26248 * 26249 * **Note:** This method mutates `object`. 26250 * 26251 * @static 26252 * @memberOf _ 26253 * @since 3.10.0 26254 * @category Object 26255 * @param {Object} object The destination object. 26256 * @param {...Object} [sources] The source objects. 26257 * @returns {Object} Returns `object`. 26258 * @see _.defaults 26259 * @example 26260 * 26261 * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); 26262 * // => { 'a': { 'b': 2, 'c': 3 } } 26263 */ 26264 var defaultsDeep = baseRest(function(args) { 26265 args.push(undefined, customDefaultsMerge); 26266 return apply(mergeWith, undefined, args); 26267 }); 26268 26269 /** 26270 * This method is like `_.find` except that it returns the key of the first 26271 * element `predicate` returns truthy for instead of the element itself. 26272 * 26273 * @static 26274 * @memberOf _ 26275 * @since 1.1.0 26276 * @category Object 26277 * @param {Object} object The object to inspect. 26278 * @param {Function} [predicate=_.identity] The function invoked per iteration. 26279 * @returns {string|undefined} Returns the key of the matched element, 26280 * else `undefined`. 26281 * @example 26282 * 26283 * var users = { 26284 * 'barney': { 'age': 36, 'active': true }, 26285 * 'fred': { 'age': 40, 'active': false }, 26286 * 'pebbles': { 'age': 1, 'active': true } 26287 * }; 26288 * 26289 * _.findKey(users, function(o) { return o.age < 40; }); 26290 * // => 'barney' (iteration order is not guaranteed) 26291 * 26292 * // The `_.matches` iteratee shorthand. 26293 * _.findKey(users, { 'age': 1, 'active': true }); 26294 * // => 'pebbles' 26295 * 26296 * // The `_.matchesProperty` iteratee shorthand. 26297 * _.findKey(users, ['active', false]); 26298 * // => 'fred' 26299 * 26300 * // The `_.property` iteratee shorthand. 26301 * _.findKey(users, 'active'); 26302 * // => 'barney' 26303 */ 26304 function findKey(object, predicate) { 26305 return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); 26306 } 26307 26308 /** 26309 * This method is like `_.findKey` except that it iterates over elements of 26310 * a collection in the opposite order. 26311 * 26312 * @static 26313 * @memberOf _ 26314 * @since 2.0.0 26315 * @category Object 26316 * @param {Object} object The object to inspect. 26317 * @param {Function} [predicate=_.identity] The function invoked per iteration. 26318 * @returns {string|undefined} Returns the key of the matched element, 26319 * else `undefined`. 26320 * @example 26321 * 26322 * var users = { 26323 * 'barney': { 'age': 36, 'active': true }, 26324 * 'fred': { 'age': 40, 'active': false }, 26325 * 'pebbles': { 'age': 1, 'active': true } 26326 * }; 26327 * 26328 * _.findLastKey(users, function(o) { return o.age < 40; }); 26329 * // => returns 'pebbles' assuming `_.findKey` returns 'barney' 26330 * 26331 * // The `_.matches` iteratee shorthand. 26332 * _.findLastKey(users, { 'age': 36, 'active': true }); 26333 * // => 'barney' 26334 * 26335 * // The `_.matchesProperty` iteratee shorthand. 26336 * _.findLastKey(users, ['active', false]); 26337 * // => 'fred' 26338 * 26339 * // The `_.property` iteratee shorthand. 26340 * _.findLastKey(users, 'active'); 26341 * // => 'pebbles' 26342 */ 26343 function findLastKey(object, predicate) { 26344 return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); 26345 } 26346 26347 /** 26348 * Iterates over own and inherited enumerable string keyed properties of an 26349 * object and invokes `iteratee` for each property. The iteratee is invoked 26350 * with three arguments: (value, key, object). Iteratee functions may exit 26351 * iteration early by explicitly returning `false`. 26352 * 26353 * @static 26354 * @memberOf _ 26355 * @since 0.3.0 26356 * @category Object 26357 * @param {Object} object The object to iterate over. 26358 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 26359 * @returns {Object} Returns `object`. 26360 * @see _.forInRight 26361 * @example 26362 * 26363 * function Foo() { 26364 * this.a = 1; 26365 * this.b = 2; 26366 * } 26367 * 26368 * Foo.prototype.c = 3; 26369 * 26370 * _.forIn(new Foo, function(value, key) { 26371 * console.log(key); 26372 * }); 26373 * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). 26374 */ 26375 function forIn(object, iteratee) { 26376 return object == null 26377 ? object 26378 : baseFor(object, getIteratee(iteratee, 3), keysIn); 26379 } 26380 26381 /** 26382 * This method is like `_.forIn` except that it iterates over properties of 26383 * `object` in the opposite order. 26384 * 26385 * @static 26386 * @memberOf _ 26387 * @since 2.0.0 26388 * @category Object 26389 * @param {Object} object The object to iterate over. 26390 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 26391 * @returns {Object} Returns `object`. 26392 * @see _.forIn 26393 * @example 26394 * 26395 * function Foo() { 26396 * this.a = 1; 26397 * this.b = 2; 26398 * } 26399 * 26400 * Foo.prototype.c = 3; 26401 * 26402 * _.forInRight(new Foo, function(value, key) { 26403 * console.log(key); 26404 * }); 26405 * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. 26406 */ 26407 function forInRight(object, iteratee) { 26408 return object == null 26409 ? object 26410 : baseForRight(object, getIteratee(iteratee, 3), keysIn); 26411 } 26412 26413 /** 26414 * Iterates over own enumerable string keyed properties of an object and 26415 * invokes `iteratee` for each property. The iteratee is invoked with three 26416 * arguments: (value, key, object). Iteratee functions may exit iteration 26417 * early by explicitly returning `false`. 26418 * 26419 * @static 26420 * @memberOf _ 26421 * @since 0.3.0 26422 * @category Object 26423 * @param {Object} object The object to iterate over. 26424 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 26425 * @returns {Object} Returns `object`. 26426 * @see _.forOwnRight 26427 * @example 26428 * 26429 * function Foo() { 26430 * this.a = 1; 26431 * this.b = 2; 26432 * } 26433 * 26434 * Foo.prototype.c = 3; 26435 * 26436 * _.forOwn(new Foo, function(value, key) { 26437 * console.log(key); 26438 * }); 26439 * // => Logs 'a' then 'b' (iteration order is not guaranteed). 26440 */ 26441 function forOwn(object, iteratee) { 26442 return object && baseForOwn(object, getIteratee(iteratee, 3)); 26443 } 26444 26445 /** 26446 * This method is like `_.forOwn` except that it iterates over properties of 26447 * `object` in the opposite order. 26448 * 26449 * @static 26450 * @memberOf _ 26451 * @since 2.0.0 26452 * @category Object 26453 * @param {Object} object The object to iterate over. 26454 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 26455 * @returns {Object} Returns `object`. 26456 * @see _.forOwn 26457 * @example 26458 * 26459 * function Foo() { 26460 * this.a = 1; 26461 * this.b = 2; 26462 * } 26463 * 26464 * Foo.prototype.c = 3; 26465 * 26466 * _.forOwnRight(new Foo, function(value, key) { 26467 * console.log(key); 26468 * }); 26469 * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. 26470 */ 26471 function forOwnRight(object, iteratee) { 26472 return object && baseForOwnRight(object, getIteratee(iteratee, 3)); 26473 } 26474 26475 /** 26476 * Creates an array of function property names from own enumerable properties 26477 * of `object`. 26478 * 26479 * @static 26480 * @since 0.1.0 26481 * @memberOf _ 26482 * @category Object 26483 * @param {Object} object The object to inspect. 26484 * @returns {Array} Returns the function names. 26485 * @see _.functionsIn 26486 * @example 26487 * 26488 * function Foo() { 26489 * this.a = _.constant('a'); 26490 * this.b = _.constant('b'); 26491 * } 26492 * 26493 * Foo.prototype.c = _.constant('c'); 26494 * 26495 * _.functions(new Foo); 26496 * // => ['a', 'b'] 26497 */ 26498 function functions(object) { 26499 return object == null ? [] : baseFunctions(object, keys(object)); 26500 } 26501 26502 /** 26503 * Creates an array of function property names from own and inherited 26504 * enumerable properties of `object`. 26505 * 26506 * @static 26507 * @memberOf _ 26508 * @since 4.0.0 26509 * @category Object 26510 * @param {Object} object The object to inspect. 26511 * @returns {Array} Returns the function names. 26512 * @see _.functions 26513 * @example 26514 * 26515 * function Foo() { 26516 * this.a = _.constant('a'); 26517 * this.b = _.constant('b'); 26518 * } 26519 * 26520 * Foo.prototype.c = _.constant('c'); 26521 * 26522 * _.functionsIn(new Foo); 26523 * // => ['a', 'b', 'c'] 26524 */ 26525 function functionsIn(object) { 26526 return object == null ? [] : baseFunctions(object, keysIn(object)); 26527 } 26528 26529 /** 26530 * Gets the value at `path` of `object`. If the resolved value is 26531 * `undefined`, the `defaultValue` is returned in its place. 26532 * 26533 * @static 26534 * @memberOf _ 26535 * @since 3.7.0 26536 * @category Object 26537 * @param {Object} object The object to query. 26538 * @param {Array|string} path The path of the property to get. 26539 * @param {*} [defaultValue] The value returned for `undefined` resolved values. 26540 * @returns {*} Returns the resolved value. 26541 * @example 26542 * 26543 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; 26544 * 26545 * _.get(object, 'a[0].b.c'); 26546 * // => 3 26547 * 26548 * _.get(object, ['a', '0', 'b', 'c']); 26549 * // => 3 26550 * 26551 * _.get(object, 'a.b.c', 'default'); 26552 * // => 'default' 26553 */ 26554 function get(object, path, defaultValue) { 26555 var result = object == null ? undefined : baseGet(object, path); 26556 return result === undefined ? defaultValue : result; 26557 } 26558 26559 /** 26560 * Checks if `path` is a direct property of `object`. 26561 * 26562 * @static 26563 * @since 0.1.0 26564 * @memberOf _ 26565 * @category Object 26566 * @param {Object} object The object to query. 26567 * @param {Array|string} path The path to check. 26568 * @returns {boolean} Returns `true` if `path` exists, else `false`. 26569 * @example 26570 * 26571 * var object = { 'a': { 'b': 2 } }; 26572 * var other = _.create({ 'a': _.create({ 'b': 2 }) }); 26573 * 26574 * _.has(object, 'a'); 26575 * // => true 26576 * 26577 * _.has(object, 'a.b'); 26578 * // => true 26579 * 26580 * _.has(object, ['a', 'b']); 26581 * // => true 26582 * 26583 * _.has(other, 'a'); 26584 * // => false 26585 */ 26586 function has(object, path) { 26587 return object != null && hasPath(object, path, baseHas); 26588 } 26589 26590 /** 26591 * Checks if `path` is a direct or inherited property of `object`. 26592 * 26593 * @static 26594 * @memberOf _ 26595 * @since 4.0.0 26596 * @category Object 26597 * @param {Object} object The object to query. 26598 * @param {Array|string} path The path to check. 26599 * @returns {boolean} Returns `true` if `path` exists, else `false`. 26600 * @example 26601 * 26602 * var object = _.create({ 'a': _.create({ 'b': 2 }) }); 26603 * 26604 * _.hasIn(object, 'a'); 26605 * // => true 26606 * 26607 * _.hasIn(object, 'a.b'); 26608 * // => true 26609 * 26610 * _.hasIn(object, ['a', 'b']); 26611 * // => true 26612 * 26613 * _.hasIn(object, 'b'); 26614 * // => false 26615 */ 26616 function hasIn(object, path) { 26617 return object != null && hasPath(object, path, baseHasIn); 26618 } 26619 26620 /**
vendor: 11,848 bytes, lines 26621-26991
26621 * Creates an object composed of the inverted keys and values of `object`. 26622 * If `object` contains duplicate values, subsequent values overwrite 26623 * property assignments of previous values. 26624 * 26625 * @static 26626 * @memberOf _ 26627 * @since 0.7.0 26628 * @category Object 26629 * @param {Object} object The object to invert. 26630 * @returns {Object} Returns the new inverted object. 26631 * @example 26632 * 26633 * var object = { 'a': 1, 'b': 2, 'c': 1 }; 26634 * 26635 * _.invert(object); 26636 * // => { '1': 'c', '2': 'b' } 26637 */ 26638 var invert = createInverter(function(result, value, key) { 26639 if (value != null && 26640 typeof value.toString != 'function') { 26641 value = nativeObjectToString.call(value); 26642 } 26643 26644 result[value] = key; 26645 }, constant(identity)); 26646 26647 /** 26648 * This method is like `_.invert` except that the inverted object is generated 26649 * from the results of running each element of `object` thru `iteratee`. The 26650 * corresponding inverted value of each inverted key is an array of keys 26651 * responsible for generating the inverted value. The iteratee is invoked 26652 * with one argument: (value). 26653 * 26654 * @static 26655 * @memberOf _ 26656 * @since 4.1.0 26657 * @category Object 26658 * @param {Object} object The object to invert. 26659 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 26660 * @returns {Object} Returns the new inverted object. 26661 * @example 26662 * 26663 * var object = { 'a': 1, 'b': 2, 'c': 1 }; 26664 * 26665 * _.invertBy(object); 26666 * // => { '1': ['a', 'c'], '2': ['b'] } 26667 * 26668 * _.invertBy(object, function(value) { 26669 * return 'group' + value; 26670 * }); 26671 * // => { 'group1': ['a', 'c'], 'group2': ['b'] } 26672 */ 26673 var invertBy = createInverter(function(result, value, key) { 26674 if (value != null && 26675 typeof value.toString != 'function') { 26676 value = nativeObjectToString.call(value); 26677 } 26678 26679 if (hasOwnProperty.call(result, value)) { 26680 result[value].push(key); 26681 } else { 26682 result[value] = [key]; 26683 } 26684 }, getIteratee); 26685 26686 /** 26687 * Invokes the method at `path` of `object`. 26688 * 26689 * @static 26690 * @memberOf _ 26691 * @since 4.0.0 26692 * @category Object 26693 * @param {Object} object The object to query. 26694 * @param {Array|string} path The path of the method to invoke. 26695 * @param {...*} [args] The arguments to invoke the method with. 26696 * @returns {*} Returns the result of the invoked method. 26697 * @example 26698 * 26699 * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; 26700 * 26701 * _.invoke(object, 'a[0].b.c.slice', 1, 3); 26702 * // => [2, 3] 26703 */ 26704 var invoke = baseRest(baseInvoke); 26705 26706 /** 26707 * Creates an array of the own enumerable property names of `object`. 26708 * 26709 * **Note:** Non-object values are coerced to objects. See the 26710 * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) 26711 * for more details. 26712 * 26713 * @static 26714 * @since 0.1.0 26715 * @memberOf _ 26716 * @category Object 26717 * @param {Object} object The object to query. 26718 * @returns {Array} Returns the array of property names. 26719 * @example 26720 * 26721 * function Foo() { 26722 * this.a = 1; 26723 * this.b = 2; 26724 * } 26725 * 26726 * Foo.prototype.c = 3; 26727 * 26728 * _.keys(new Foo); 26729 * // => ['a', 'b'] (iteration order is not guaranteed) 26730 * 26731 * _.keys('hi'); 26732 * // => ['0', '1'] 26733 */ 26734 function keys(object) { 26735 return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); 26736 } 26737 26738 /** 26739 * Creates an array of the own and inherited enumerable property names of `object`. 26740 * 26741 * **Note:** Non-object values are coerced to objects. 26742 * 26743 * @static 26744 * @memberOf _ 26745 * @since 3.0.0 26746 * @category Object 26747 * @param {Object} object The object to query. 26748 * @returns {Array} Returns the array of property names. 26749 * @example 26750 * 26751 * function Foo() { 26752 * this.a = 1; 26753 * this.b = 2; 26754 * } 26755 * 26756 * Foo.prototype.c = 3; 26757 * 26758 * _.keysIn(new Foo); 26759 * // => ['a', 'b', 'c'] (iteration order is not guaranteed) 26760 */ 26761 function keysIn(object) { 26762 return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); 26763 } 26764 26765 /** 26766 * The opposite of `_.mapValues`; this method creates an object with the 26767 * same values as `object` and keys generated by running each own enumerable 26768 * string keyed property of `object` thru `iteratee`. The iteratee is invoked 26769 * with three arguments: (value, key, object). 26770 * 26771 * @static 26772 * @memberOf _ 26773 * @since 3.8.0 26774 * @category Object 26775 * @param {Object} object The object to iterate over. 26776 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 26777 * @returns {Object} Returns the new mapped object. 26778 * @see _.mapValues 26779 * @example 26780 * 26781 * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { 26782 * return key + value; 26783 * }); 26784 * // => { 'a1': 1, 'b2': 2 } 26785 */ 26786 function mapKeys(object, iteratee) { 26787 var result = {}; 26788 iteratee = getIteratee(iteratee, 3); 26789 26790 baseForOwn(object, function(value, key, object) { 26791 baseAssignValue(result, iteratee(value, key, object), value); 26792 }); 26793 return result; 26794 } 26795 26796 /** 26797 * Creates an object with the same keys as `object` and values generated 26798 * by running each own enumerable string keyed property of `object` thru 26799 * `iteratee`. The iteratee is invoked with three arguments: 26800 * (value, key, object). 26801 * 26802 * @static 26803 * @memberOf _ 26804 * @since 2.4.0 26805 * @category Object 26806 * @param {Object} object The object to iterate over. 26807 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 26808 * @returns {Object} Returns the new mapped object. 26809 * @see _.mapKeys 26810 * @example 26811 * 26812 * var users = { 26813 * 'fred': { 'user': 'fred', 'age': 40 }, 26814 * 'pebbles': { 'user': 'pebbles', 'age': 1 } 26815 * }; 26816 * 26817 * _.mapValues(users, function(o) { return o.age; }); 26818 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) 26819 * 26820 * // The `_.property` iteratee shorthand. 26821 * _.mapValues(users, 'age'); 26822 * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) 26823 */ 26824 function mapValues(object, iteratee) { 26825 var result = {}; 26826 iteratee = getIteratee(iteratee, 3); 26827 26828 baseForOwn(object, function(value, key, object) { 26829 baseAssignValue(result, key, iteratee(value, key, object)); 26830 }); 26831 return result; 26832 } 26833 26834 /** 26835 * This method is like `_.assign` except that it recursively merges own and 26836 * inherited enumerable string keyed properties of source objects into the 26837 * destination object. Source properties that resolve to `undefined` are 26838 * skipped if a destination value exists. Array and plain object properties 26839 * are merged recursively. Other objects and value types are overridden by 26840 * assignment. Source objects are applied from left to right. Subsequent 26841 * sources overwrite property assignments of previous sources. 26842 * 26843 * **Note:** This method mutates `object`. 26844 * 26845 * @static 26846 * @memberOf _ 26847 * @since 0.5.0 26848 * @category Object 26849 * @param {Object} object The destination object. 26850 * @param {...Object} [sources] The source objects. 26851 * @returns {Object} Returns `object`. 26852 * @example 26853 * 26854 * var object = { 26855 * 'a': [{ 'b': 2 }, { 'd': 4 }] 26856 * }; 26857 * 26858 * var other = { 26859 * 'a': [{ 'c': 3 }, { 'e': 5 }] 26860 * }; 26861 * 26862 * _.merge(object, other); 26863 * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } 26864 */ 26865 var merge = createAssigner(function(object, source, srcIndex) { 26866 baseMerge(object, source, srcIndex); 26867 }); 26868 26869 /** 26870 * This method is like `_.merge` except that it accepts `customizer` which 26871 * is invoked to produce the merged values of the destination and source 26872 * properties. If `customizer` returns `undefined`, merging is handled by the 26873 * method instead. The `customizer` is invoked with six arguments: 26874 * (objValue, srcValue, key, object, source, stack). 26875 * 26876 * **Note:** This method mutates `object`. 26877 * 26878 * @static 26879 * @memberOf _ 26880 * @since 4.0.0 26881 * @category Object 26882 * @param {Object} object The destination object. 26883 * @param {...Object} sources The source objects. 26884 * @param {Function} customizer The function to customize assigned values. 26885 * @returns {Object} Returns `object`. 26886 * @example 26887 * 26888 * function customizer(objValue, srcValue) { 26889 * if (_.isArray(objValue)) { 26890 * return objValue.concat(srcValue); 26891 * } 26892 * } 26893 * 26894 * var object = { 'a': [1], 'b': [2] }; 26895 * var other = { 'a': [3], 'b': [4] }; 26896 * 26897 * _.mergeWith(object, other, customizer); 26898 * // => { 'a': [1, 3], 'b': [2, 4] } 26899 */ 26900 var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { 26901 baseMerge(object, source, srcIndex, customizer); 26902 }); 26903 26904 /** 26905 * The opposite of `_.pick`; this method creates an object composed of the 26906 * own and inherited enumerable property paths of `object` that are not omitted. 26907 * 26908 * **Note:** This method is considerably slower than `_.pick`. 26909 * 26910 * @static 26911 * @since 0.1.0 26912 * @memberOf _ 26913 * @category Object 26914 * @param {Object} object The source object. 26915 * @param {...(string|string[])} [paths] The property paths to omit. 26916 * @returns {Object} Returns the new object. 26917 * @example 26918 * 26919 * var object = { 'a': 1, 'b': '2', 'c': 3 }; 26920 * 26921 * _.omit(object, ['a', 'c']); 26922 * // => { 'b': '2' } 26923 */ 26924 var omit = flatRest(function(object, paths) { 26925 var result = {}; 26926 if (object == null) { 26927 return result; 26928 } 26929 var isDeep = false; 26930 paths = arrayMap(paths, function(path) { 26931 path = castPath(path, object); 26932 isDeep || (isDeep = path.length > 1); 26933 return path; 26934 }); 26935 copyObject(object, getAllKeysIn(object), result); 26936 if (isDeep) { 26937 result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); 26938 } 26939 var length = paths.length; 26940 while (length--) { 26941 baseUnset(result, paths[length]); 26942 } 26943 return result; 26944 }); 26945 26946 /** 26947 * The opposite of `_.pickBy`; this method creates an object composed of 26948 * the own and inherited enumerable string keyed properties of `object` that 26949 * `predicate` doesn't return truthy for. The predicate is invoked with two 26950 * arguments: (value, key). 26951 * 26952 * @static 26953 * @memberOf _ 26954 * @since 4.0.0 26955 * @category Object 26956 * @param {Object} object The source object. 26957 * @param {Function} [predicate=_.identity] The function invoked per property. 26958 * @returns {Object} Returns the new object. 26959 * @example 26960 * 26961 * var object = { 'a': 1, 'b': '2', 'c': 3 }; 26962 * 26963 * _.omitBy(object, _.isNumber); 26964 * // => { 'b': '2' } 26965 */ 26966 function omitBy(object, predicate) { 26967 return pickBy(object, negate(getIteratee(predicate))); 26968 } 26969 26970 /** 26971 * Creates an object composed of the picked `object` properties. 26972 * 26973 * @static 26974 * @since 0.1.0 26975 * @memberOf _ 26976 * @category Object 26977 * @param {Object} object The source object. 26978 * @param {...(string|string[])} [paths] The property paths to pick. 26979 * @returns {Object} Returns the new object. 26980 * @example 26981 * 26982 * var object = { 'a': 1, 'b': '2', 'c': 3 }; 26983 * 26984 * _.pick(object, ['a', 'c']); 26985 * // => { 'a': 1, 'c': 3 } 26986 */ 26987 var pick = flatRest(function(object, paths) { 26988 return object == null ? {} : basePick(object, paths); 26989 }); 26990 26991 /**
vendor: 11,160 bytes, lines 26992-27330
26992 * Creates an object composed of the `object` properties `predicate` returns 26993 * truthy for. The predicate is invoked with two arguments: (value, key). 26994 * 26995 * @static 26996 * @memberOf _ 26997 * @since 4.0.0 26998 * @category Object 26999 * @param {Object} object The source object. 27000 * @param {Function} [predicate=_.identity] The function invoked per property. 27001 * @returns {Object} Returns the new object. 27002 * @example 27003 * 27004 * var object = { 'a': 1, 'b': '2', 'c': 3 }; 27005 * 27006 * _.pickBy(object, _.isNumber); 27007 * // => { 'a': 1, 'c': 3 } 27008 */ 27009 function pickBy(object, predicate) { 27010 if (object == null) { 27011 return {}; 27012 } 27013 var props = arrayMap(getAllKeysIn(object), function(prop) { 27014 return [prop]; 27015 }); 27016 predicate = getIteratee(predicate); 27017 return basePickBy(object, props, function(value, path) { 27018 return predicate(value, path[0]); 27019 }); 27020 } 27021 27022 /** 27023 * This method is like `_.get` except that if the resolved value is a 27024 * function it's invoked with the `this` binding of its parent object and 27025 * its result is returned. 27026 * 27027 * @static 27028 * @since 0.1.0 27029 * @memberOf _ 27030 * @category Object 27031 * @param {Object} object The object to query. 27032 * @param {Array|string} path The path of the property to resolve. 27033 * @param {*} [defaultValue] The value returned for `undefined` resolved values. 27034 * @returns {*} Returns the resolved value. 27035 * @example 27036 * 27037 * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; 27038 * 27039 * _.result(object, 'a[0].b.c1'); 27040 * // => 3 27041 * 27042 * _.result(object, 'a[0].b.c2'); 27043 * // => 4 27044 * 27045 * _.result(object, 'a[0].b.c3', 'default'); 27046 * // => 'default' 27047 * 27048 * _.result(object, 'a[0].b.c3', _.constant('default')); 27049 * // => 'default' 27050 */ 27051 function result(object, path, defaultValue) { 27052 path = castPath(path, object); 27053 27054 var index = -1, 27055 length = path.length; 27056 27057 // Ensure the loop is entered when path is empty. 27058 if (!length) { 27059 length = 1; 27060 object = undefined; 27061 } 27062 while (++index < length) { 27063 var value = object == null ? undefined : object[toKey(path[index])]; 27064 if (value === undefined) { 27065 index = length; 27066 value = defaultValue; 27067 } 27068 object = isFunction(value) ? value.call(object) : value; 27069 } 27070 return object; 27071 } 27072 27073 /** 27074 * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, 27075 * it's created. Arrays are created for missing index properties while objects 27076 * are created for all other missing properties. Use `_.setWith` to customize 27077 * `path` creation. 27078 * 27079 * **Note:** This method mutates `object`. 27080 * 27081 * @static 27082 * @memberOf _ 27083 * @since 3.7.0 27084 * @category Object 27085 * @param {Object} object The object to modify. 27086 * @param {Array|string} path The path of the property to set. 27087 * @param {*} value The value to set. 27088 * @returns {Object} Returns `object`. 27089 * @example 27090 * 27091 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; 27092 * 27093 * _.set(object, 'a[0].b.c', 4); 27094 * console.log(object.a[0].b.c); 27095 * // => 4 27096 * 27097 * _.set(object, ['x', '0', 'y', 'z'], 5); 27098 * console.log(object.x[0].y.z); 27099 * // => 5 27100 */ 27101 function set(object, path, value) { 27102 return object == null ? object : baseSet(object, path, value); 27103 } 27104 27105 /** 27106 * This method is like `_.set` except that it accepts `customizer` which is 27107 * invoked to produce the objects of `path`. If `customizer` returns `undefined` 27108 * path creation is handled by the method instead. The `customizer` is invoked 27109 * with three arguments: (nsValue, key, nsObject). 27110 * 27111 * **Note:** This method mutates `object`. 27112 * 27113 * @static 27114 * @memberOf _ 27115 * @since 4.0.0 27116 * @category Object 27117 * @param {Object} object The object to modify. 27118 * @param {Array|string} path The path of the property to set. 27119 * @param {*} value The value to set. 27120 * @param {Function} [customizer] The function to customize assigned values. 27121 * @returns {Object} Returns `object`. 27122 * @example 27123 * 27124 * var object = {}; 27125 * 27126 * _.setWith(object, '[0][1]', 'a', Object); 27127 * // => { '0': { '1': 'a' } } 27128 */ 27129 function setWith(object, path, value, customizer) { 27130 customizer = typeof customizer == 'function' ? customizer : undefined; 27131 return object == null ? object : baseSet(object, path, value, customizer); 27132 } 27133 27134 /** 27135 * Creates an array of own enumerable string keyed-value pairs for `object` 27136 * which can be consumed by `_.fromPairs`. If `object` is a map or set, its 27137 * entries are returned. 27138 * 27139 * @static 27140 * @memberOf _ 27141 * @since 4.0.0 27142 * @alias entries 27143 * @category Object 27144 * @param {Object} object The object to query. 27145 * @returns {Array} Returns the key-value pairs. 27146 * @example 27147 * 27148 * function Foo() { 27149 * this.a = 1; 27150 * this.b = 2; 27151 * } 27152 * 27153 * Foo.prototype.c = 3; 27154 * 27155 * _.toPairs(new Foo); 27156 * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) 27157 */ 27158 var toPairs = createToPairs(keys); 27159 27160 /** 27161 * Creates an array of own and inherited enumerable string keyed-value pairs 27162 * for `object` which can be consumed by `_.fromPairs`. If `object` is a map 27163 * or set, its entries are returned. 27164 * 27165 * @static 27166 * @memberOf _ 27167 * @since 4.0.0 27168 * @alias entriesIn 27169 * @category Object 27170 * @param {Object} object The object to query. 27171 * @returns {Array} Returns the key-value pairs. 27172 * @example 27173 * 27174 * function Foo() { 27175 * this.a = 1; 27176 * this.b = 2; 27177 * } 27178 * 27179 * Foo.prototype.c = 3; 27180 * 27181 * _.toPairsIn(new Foo); 27182 * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) 27183 */ 27184 var toPairsIn = createToPairs(keysIn); 27185 27186 /** 27187 * An alternative to `_.reduce`; this method transforms `object` to a new 27188 * `accumulator` object which is the result of running each of its own 27189 * enumerable string keyed properties thru `iteratee`, with each invocation 27190 * potentially mutating the `accumulator` object. If `accumulator` is not 27191 * provided, a new object with the same `[[Prototype]]` will be used. The 27192 * iteratee is invoked with four arguments: (accumulator, value, key, object). 27193 * Iteratee functions may exit iteration early by explicitly returning `false`. 27194 * 27195 * @static 27196 * @memberOf _ 27197 * @since 1.3.0 27198 * @category Object 27199 * @param {Object} object The object to iterate over. 27200 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 27201 * @param {*} [accumulator] The custom accumulator value. 27202 * @returns {*} Returns the accumulated value. 27203 * @example 27204 * 27205 * _.transform([2, 3, 4], function(result, n) { 27206 * result.push(n *= n); 27207 * return n % 2 == 0; 27208 * }, []); 27209 * // => [4, 9] 27210 * 27211 * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { 27212 * (result[value] || (result[value] = [])).push(key); 27213 * }, {}); 27214 * // => { '1': ['a', 'c'], '2': ['b'] } 27215 */ 27216 function transform(object, iteratee, accumulator) { 27217 var isArr = isArray(object), 27218 isArrLike = isArr || isBuffer(object) || isTypedArray(object); 27219 27220 iteratee = getIteratee(iteratee, 4); 27221 if (accumulator == null) { 27222 var Ctor = object && object.constructor; 27223 if (isArrLike) { 27224 accumulator = isArr ? new Ctor : []; 27225 } 27226 else if (isObject(object)) { 27227 accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; 27228 } 27229 else { 27230 accumulator = {}; 27231 } 27232 } 27233 (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { 27234 return iteratee(accumulator, value, index, object); 27235 }); 27236 return accumulator; 27237 } 27238 27239 /** 27240 * Removes the property at `path` of `object`. 27241 * 27242 * **Note:** This method mutates `object`. 27243 * 27244 * @static 27245 * @memberOf _ 27246 * @since 4.0.0 27247 * @category Object 27248 * @param {Object} object The object to modify. 27249 * @param {Array|string} path The path of the property to unset. 27250 * @returns {boolean} Returns `true` if the property is deleted, else `false`. 27251 * @example 27252 * 27253 * var object = { 'a': [{ 'b': { 'c': 7 } }] }; 27254 * _.unset(object, 'a[0].b.c'); 27255 * // => true 27256 * 27257 * console.log(object); 27258 * // => { 'a': [{ 'b': {} }] }; 27259 * 27260 * _.unset(object, ['a', '0', 'b', 'c']); 27261 * // => true 27262 * 27263 * console.log(object); 27264 * // => { 'a': [{ 'b': {} }] }; 27265 */ 27266 function unset(object, path) { 27267 return object == null ? true : baseUnset(object, path); 27268 } 27269 27270 /** 27271 * This method is like `_.set` except that accepts `updater` to produce the 27272 * value to set. Use `_.updateWith` to customize `path` creation. The `updater` 27273 * is invoked with one argument: (value). 27274 * 27275 * **Note:** This method mutates `object`. 27276 * 27277 * @static 27278 * @memberOf _ 27279 * @since 4.6.0 27280 * @category Object 27281 * @param {Object} object The object to modify. 27282 * @param {Array|string} path The path of the property to set. 27283 * @param {Function} updater The function to produce the updated value. 27284 * @returns {Object} Returns `object`. 27285 * @example 27286 * 27287 * var object = { 'a': [{ 'b': { 'c': 3 } }] }; 27288 * 27289 * _.update(object, 'a[0].b.c', function(n) { return n * n; }); 27290 * console.log(object.a[0].b.c); 27291 * // => 9 27292 * 27293 * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); 27294 * console.log(object.x[0].y.z); 27295 * // => 0 27296 */ 27297 function update(object, path, updater) { 27298 return object == null ? object : baseUpdate(object, path, castFunction(updater)); 27299 } 27300 27301 /** 27302 * This method is like `_.update` except that it accepts `customizer` which is 27303 * invoked to produce the objects of `path`. If `customizer` returns `undefined` 27304 * path creation is handled by the method instead. The `customizer` is invoked 27305 * with three arguments: (nsValue, key, nsObject). 27306 * 27307 * **Note:** This method mutates `object`. 27308 * 27309 * @static 27310 * @memberOf _ 27311 * @since 4.6.0 27312 * @category Object 27313 * @param {Object} object The object to modify. 27314 * @param {Array|string} path The path of the property to set. 27315 * @param {Function} updater The function to produce the updated value. 27316 * @param {Function} [customizer] The function to customize assigned values. 27317 * @returns {Object} Returns `object`. 27318 * @example 27319 * 27320 * var object = {}; 27321 * 27322 * _.updateWith(object, '[0][1]', _.constant('a'), Object); 27323 * // => { '0': { '1': 'a' } } 27324 */ 27325 function updateWith(object, path, updater, customizer) { 27326 customizer = typeof customizer == 'function' ? customizer : undefined; 27327 return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); 27328 } 27329 27330 /**
vendor: 1,263 bytes, lines 27331-27380
27331 * Creates an array of the own enumerable string keyed property values of `object`. 27332 * 27333 * **Note:** Non-object values are coerced to objects. 27334 * 27335 * @static 27336 * @since 0.1.0 27337 * @memberOf _ 27338 * @category Object 27339 * @param {Object} object The object to query. 27340 * @returns {Array} Returns the array of property values. 27341 * @example 27342 * 27343 * function Foo() { 27344 * this.a = 1; 27345 * this.b = 2; 27346 * } 27347 * 27348 * Foo.prototype.c = 3; 27349 * 27350 * _.values(new Foo); 27351 * // => [1, 2] (iteration order is not guaranteed) 27352 * 27353 * _.values('hi'); 27354 * // => ['h', 'i'] 27355 */ 27356 function values(object) { 27357 return object == null ? [] : baseValues(object, keys(object)); 27358 } 27359 27360 /** 27361 * Creates an array of the own and inherited enumerable string keyed property 27362 * values of `object`. 27363 * 27364 * **Note:** Non-object values are coerced to objects. 27365 * 27366 * @static 27367 * @memberOf _ 27368 * @since 3.0.0 27369 * @category Object 27370 * @param {Object} object The object to query. 27371 * @returns {Array} Returns the array of property values. 27372 * @example 27373 * 27374 * function Foo() { 27375 * this.a = 1; 27376 * this.b = 2; 27377 * } 27378 * 27379 * Foo.prototype.c = 3; 27380 *
vendor: 9,679 bytes, lines 27381-27701
27381 * _.valuesIn(new Foo); 27382 * // => [1, 2, 3] (iteration order is not guaranteed) 27383 */ 27384 function valuesIn(object) { 27385 return object == null ? [] : baseValues(object, keysIn(object)); 27386 } 27387 27388 /*------------------------------------------------------------------------*/ 27389 27390 /** 27391 * Clamps `number` within the inclusive `lower` and `upper` bounds. 27392 * 27393 * @static 27394 * @memberOf _ 27395 * @since 4.0.0 27396 * @category Number 27397 * @param {number} number The number to clamp. 27398 * @param {number} [lower] The lower bound. 27399 * @param {number} upper The upper bound. 27400 * @returns {number} Returns the clamped number. 27401 * @example 27402 * 27403 * _.clamp(-10, -5, 5); 27404 * // => -5 27405 * 27406 * _.clamp(10, -5, 5); 27407 * // => 5 27408 */ 27409 function clamp(number, lower, upper) { 27410 if (upper === undefined) { 27411 upper = lower; 27412 lower = undefined; 27413 } 27414 if (upper !== undefined) { 27415 upper = toNumber(upper); 27416 upper = upper === upper ? upper : 0; 27417 } 27418 if (lower !== undefined) { 27419 lower = toNumber(lower); 27420 lower = lower === lower ? lower : 0; 27421 } 27422 return baseClamp(toNumber(number), lower, upper); 27423 } 27424 27425 /** 27426 * Checks if `n` is between `start` and up to, but not including, `end`. If 27427 * `end` is not specified, it's set to `start` with `start` then set to `0`. 27428 * If `start` is greater than `end` the params are swapped to support 27429 * negative ranges. 27430 * 27431 * @static 27432 * @memberOf _ 27433 * @since 3.3.0 27434 * @category Number 27435 * @param {number} number The number to check. 27436 * @param {number} [start=0] The start of the range. 27437 * @param {number} end The end of the range. 27438 * @returns {boolean} Returns `true` if `number` is in the range, else `false`. 27439 * @see _.range, _.rangeRight 27440 * @example 27441 * 27442 * _.inRange(3, 2, 4); 27443 * // => true 27444 * 27445 * _.inRange(4, 8); 27446 * // => true 27447 * 27448 * _.inRange(4, 2); 27449 * // => false 27450 * 27451 * _.inRange(2, 2); 27452 * // => false 27453 * 27454 * _.inRange(1.2, 2); 27455 * // => true 27456 * 27457 * _.inRange(5.2, 4); 27458 * // => false 27459 * 27460 * _.inRange(-3, -2, -6); 27461 * // => true 27462 */ 27463 function inRange(number, start, end) { 27464 start = toFinite(start); 27465 if (end === undefined) { 27466 end = start; 27467 start = 0; 27468 } else { 27469 end = toFinite(end); 27470 } 27471 number = toNumber(number); 27472 return baseInRange(number, start, end); 27473 } 27474 27475 /** 27476 * Produces a random number between the inclusive `lower` and `upper` bounds. 27477 * If only one argument is provided a number between `0` and the given number 27478 * is returned. If `floating` is `true`, or either `lower` or `upper` are 27479 * floats, a floating-point number is returned instead of an integer. 27480 * 27481 * **Note:** JavaScript follows the IEEE-754 standard for resolving 27482 * floating-point values which can produce unexpected results. 27483 * 27484 * @static 27485 * @memberOf _ 27486 * @since 0.7.0 27487 * @category Number 27488 * @param {number} [lower=0] The lower bound. 27489 * @param {number} [upper=1] The upper bound. 27490 * @param {boolean} [floating] Specify returning a floating-point number. 27491 * @returns {number} Returns the random number. 27492 * @example 27493 * 27494 * _.random(0, 5); 27495 * // => an integer between 0 and 5 27496 * 27497 * _.random(5); 27498 * // => also an integer between 0 and 5 27499 * 27500 * _.random(5, true); 27501 * // => a floating-point number between 0 and 5 27502 * 27503 * _.random(1.2, 5.2); 27504 * // => a floating-point number between 1.2 and 5.2 27505 */ 27506 function random(lower, upper, floating) { 27507 if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { 27508 upper = floating = undefined; 27509 } 27510 if (floating === undefined) { 27511 if (typeof upper == 'boolean') { 27512 floating = upper; 27513 upper = undefined; 27514 } 27515 else if (typeof lower == 'boolean') { 27516 floating = lower; 27517 lower = undefined; 27518 } 27519 } 27520 if (lower === undefined && upper === undefined) { 27521 lower = 0; 27522 upper = 1; 27523 } 27524 else { 27525 lower = toFinite(lower); 27526 if (upper === undefined) { 27527 upper = lower; 27528 lower = 0; 27529 } else { 27530 upper = toFinite(upper); 27531 } 27532 } 27533 if (lower > upper) { 27534 var temp = lower; 27535 lower = upper; 27536 upper = temp; 27537 } 27538 if (floating || lower % 1 || upper % 1) { 27539 var rand = nativeRandom(); 27540 return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); 27541 } 27542 return baseRandom(lower, upper); 27543 } 27544 27545 /*------------------------------------------------------------------------*/ 27546 27547 /** 27548 * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). 27549 * 27550 * @static 27551 * @memberOf _ 27552 * @since 3.0.0 27553 * @category String 27554 * @param {string} [string=''] The string to convert. 27555 * @returns {string} Returns the camel cased string. 27556 * @example 27557 * 27558 * _.camelCase('Foo Bar'); 27559 * // => 'fooBar' 27560 * 27561 * _.camelCase('--foo-bar--'); 27562 * // => 'fooBar' 27563 * 27564 * _.camelCase('__FOO_BAR__'); 27565 * // => 'fooBar' 27566 */ 27567 var camelCase = createCompounder(function(result, word, index) { 27568 word = word.toLowerCase(); 27569 return result + (index ? capitalize(word) : word); 27570 }); 27571 27572 /** 27573 * Converts the first character of `string` to upper case and the remaining 27574 * to lower case. 27575 * 27576 * @static 27577 * @memberOf _ 27578 * @since 3.0.0 27579 * @category String 27580 * @param {string} [string=''] The string to capitalize. 27581 * @returns {string} Returns the capitalized string. 27582 * @example 27583 * 27584 * _.capitalize('FRED'); 27585 * // => 'Fred' 27586 */ 27587 function capitalize(string) { 27588 return upperFirst(toString(string).toLowerCase()); 27589 } 27590 27591 /** 27592 * Deburrs `string` by converting 27593 * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) 27594 * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) 27595 * letters to basic Latin letters and removing 27596 * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). 27597 * 27598 * @static 27599 * @memberOf _ 27600 * @since 3.0.0 27601 * @category String 27602 * @param {string} [string=''] The string to deburr. 27603 * @returns {string} Returns the deburred string. 27604 * @example 27605 * 27606 * _.deburr('déjà vu'); 27607 * // => 'deja vu' 27608 */ 27609 function deburr(string) { 27610 string = toString(string); 27611 return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); 27612 } 27613 27614 /** 27615 * Checks if `string` ends with the given target string. 27616 * 27617 * @static 27618 * @memberOf _ 27619 * @since 3.0.0 27620 * @category String 27621 * @param {string} [string=''] The string to inspect. 27622 * @param {string} [target] The string to search for. 27623 * @param {number} [position=string.length] The position to search up to. 27624 * @returns {boolean} Returns `true` if `string` ends with `target`, 27625 * else `false`. 27626 * @example 27627 * 27628 * _.endsWith('abc', 'c'); 27629 * // => true 27630 * 27631 * _.endsWith('abc', 'b'); 27632 * // => false 27633 * 27634 * _.endsWith('abc', 'b', 2); 27635 * // => true 27636 */ 27637 function endsWith(string, target, position) { 27638 string = toString(string); 27639 target = baseToString(target); 27640 27641 var length = string.length; 27642 position = position === undefined 27643 ? length 27644 : baseClamp(toInteger(position), 0, length); 27645 27646 var end = position; 27647 position -= target.length; 27648 return position >= 0 && string.slice(position, end) == target; 27649 } 27650 27651 /** 27652 * Converts the characters "&", "<", ">", '"', and "'" in `string` to their 27653 * corresponding HTML entities. 27654 * 27655 * **Note:** No other characters are escaped. To escape additional 27656 * characters use a third-party library like [_he_](https://mths.be/he). 27657 * 27658 * Though the ">" character is escaped for symmetry, characters like 27659 * ">" and "/" don't need escaping in HTML and have no special meaning 27660 * unless they're part of a tag or unquoted attribute value. See 27661 * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) 27662 * (under "semi-related fun fact") for more details. 27663 * 27664 * When working with HTML you should always 27665 * [quote attribute values](http://wonko.com/post/html-escaping) to reduce 27666 * XSS vectors. 27667 * 27668 * @static 27669 * @since 0.1.0 27670 * @memberOf _ 27671 * @category String 27672 * @param {string} [string=''] The string to escape. 27673 * @returns {string} Returns the escaped string. 27674 * @example 27675 * 27676 * _.escape('fred, barney, & pebbles'); 27677 * // => 'fred, barney, & pebbles' 27678 */ 27679 function escape(string) { 27680 string = toString(string); 27681 return (string && reHasUnescapedHtml.test(string)) 27682 ? string.replace(reUnescapedHtml, escapeHtmlChar) 27683 : string; 27684 } 27685 27686 /** 27687 * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", 27688 * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. 27689 * 27690 * @static 27691 * @memberOf _ 27692 * @since 3.0.0 27693 * @category String 27694 * @param {string} [string=''] The string to escape. 27695 * @returns {string} Returns the escaped string. 27696 * @example 27697 * 27698 * _.escapeRegExp('[lodash](https://lodash.com/)'); 27699 * // => '\[lodash\]\(https://lodash\.com/\)' 27700 */ 27701 function escapeRegExp(string) {
vendor: 4,658 bytes, lines 27702-27871
27702 string = toString(string); 27703 return (string && reHasRegExpChar.test(string)) 27704 ? string.replace(reRegExpChar, '\\$&') 27705 : string; 27706 } 27707 27708 /** 27709 * Converts `string` to 27710 * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). 27711 * 27712 * @static 27713 * @memberOf _ 27714 * @since 3.0.0 27715 * @category String 27716 * @param {string} [string=''] The string to convert. 27717 * @returns {string} Returns the kebab cased string. 27718 * @example 27719 * 27720 * _.kebabCase('Foo Bar'); 27721 * // => 'foo-bar' 27722 * 27723 * _.kebabCase('fooBar'); 27724 * // => 'foo-bar' 27725 * 27726 * _.kebabCase('__FOO_BAR__'); 27727 * // => 'foo-bar' 27728 */ 27729 var kebabCase = createCompounder(function(result, word, index) { 27730 return result + (index ? '-' : '') + word.toLowerCase(); 27731 }); 27732 27733 /** 27734 * Converts `string`, as space separated words, to lower case. 27735 * 27736 * @static 27737 * @memberOf _ 27738 * @since 4.0.0 27739 * @category String 27740 * @param {string} [string=''] The string to convert. 27741 * @returns {string} Returns the lower cased string. 27742 * @example 27743 * 27744 * _.lowerCase('--Foo-Bar--'); 27745 * // => 'foo bar' 27746 * 27747 * _.lowerCase('fooBar'); 27748 * // => 'foo bar' 27749 * 27750 * _.lowerCase('__FOO_BAR__'); 27751 * // => 'foo bar' 27752 */ 27753 var lowerCase = createCompounder(function(result, word, index) { 27754 return result + (index ? ' ' : '') + word.toLowerCase(); 27755 }); 27756 27757 /** 27758 * Converts the first character of `string` to lower case. 27759 * 27760 * @static 27761 * @memberOf _ 27762 * @since 4.0.0 27763 * @category String 27764 * @param {string} [string=''] The string to convert. 27765 * @returns {string} Returns the converted string. 27766 * @example 27767 * 27768 * _.lowerFirst('Fred'); 27769 * // => 'fred' 27770 * 27771 * _.lowerFirst('FRED'); 27772 * // => 'fRED' 27773 */ 27774 var lowerFirst = createCaseFirst('toLowerCase'); 27775 27776 /** 27777 * Pads `string` on the left and right sides if it's shorter than `length`. 27778 * Padding characters are truncated if they can't be evenly divided by `length`. 27779 * 27780 * @static 27781 * @memberOf _ 27782 * @since 3.0.0 27783 * @category String 27784 * @param {string} [string=''] The string to pad. 27785 * @param {number} [length=0] The padding length. 27786 * @param {string} [chars=' '] The string used as padding. 27787 * @returns {string} Returns the padded string. 27788 * @example 27789 * 27790 * _.pad('abc', 8); 27791 * // => ' abc ' 27792 * 27793 * _.pad('abc', 8, '_-'); 27794 * // => '_-abc_-_' 27795 * 27796 * _.pad('abc', 3); 27797 * // => 'abc' 27798 */ 27799 function pad(string, length, chars) { 27800 string = toString(string); 27801 length = toInteger(length); 27802 27803 var strLength = length ? stringSize(string) : 0; 27804 if (!length || strLength >= length) { 27805 return string; 27806 } 27807 var mid = (length - strLength) / 2; 27808 return ( 27809 createPadding(nativeFloor(mid), chars) + 27810 string + 27811 createPadding(nativeCeil(mid), chars) 27812 ); 27813 } 27814 27815 /** 27816 * Pads `string` on the right side if it's shorter than `length`. Padding 27817 * characters are truncated if they exceed `length`. 27818 * 27819 * @static 27820 * @memberOf _ 27821 * @since 4.0.0 27822 * @category String 27823 * @param {string} [string=''] The string to pad. 27824 * @param {number} [length=0] The padding length. 27825 * @param {string} [chars=' '] The string used as padding. 27826 * @returns {string} Returns the padded string. 27827 * @example 27828 * 27829 * _.padEnd('abc', 6); 27830 * // => 'abc ' 27831 * 27832 * _.padEnd('abc', 6, '_-'); 27833 * // => 'abc_-_' 27834 * 27835 * _.padEnd('abc', 3); 27836 * // => 'abc' 27837 */ 27838 function padEnd(string, length, chars) { 27839 string = toString(string); 27840 length = toInteger(length); 27841 27842 var strLength = length ? stringSize(string) : 0; 27843 return (length && strLength < length) 27844 ? (string + createPadding(length - strLength, chars)) 27845 : string; 27846 } 27847 27848 /** 27849 * Pads `string` on the left side if it's shorter than `length`. Padding 27850 * characters are truncated if they exceed `length`. 27851 * 27852 * @static 27853 * @memberOf _ 27854 * @since 4.0.0 27855 * @category String 27856 * @param {string} [string=''] The string to pad. 27857 * @param {number} [length=0] The padding length. 27858 * @param {string} [chars=' '] The string used as padding. 27859 * @returns {string} Returns the padded string. 27860 * @example 27861 * 27862 * _.padStart('abc', 6); 27863 * // => ' abc' 27864 * 27865 * _.padStart('abc', 6, '_-'); 27866 * // => '_-_abc' 27867 * 27868 * _.padStart('abc', 3); 27869 * // => 'abc' 27870 */ 27871 function padStart(string, length, chars) {
vendor: 29,827 bytes, lines 27872-28769
27872 string = toString(string); 27873 length = toInteger(length); 27874 27875 var strLength = length ? stringSize(string) : 0; 27876 return (length && strLength < length) 27877 ? (createPadding(length - strLength, chars) + string) 27878 : string; 27879 } 27880 27881 /** 27882 * Converts `string` to an integer of the specified radix. If `radix` is 27883 * `undefined` or `0`, a `radix` of `10` is used unless `value` is a 27884 * hexadecimal, in which case a `radix` of `16` is used. 27885 * 27886 * **Note:** This method aligns with the 27887 * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. 27888 * 27889 * @static 27890 * @memberOf _ 27891 * @since 1.1.0 27892 * @category String 27893 * @param {string} string The string to convert. 27894 * @param {number} [radix=10] The radix to interpret `value` by. 27895 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 27896 * @returns {number} Returns the converted integer. 27897 * @example 27898 * 27899 * _.parseInt('08'); 27900 * // => 8 27901 * 27902 * _.map(['6', '08', '10'], _.parseInt); 27903 * // => [6, 8, 10] 27904 */ 27905 function parseInt(string, radix, guard) { 27906 if (guard || radix == null) { 27907 radix = 0; 27908 } else if (radix) { 27909 radix = +radix; 27910 } 27911 return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); 27912 } 27913 27914 /** 27915 * Repeats the given string `n` times. 27916 * 27917 * @static 27918 * @memberOf _ 27919 * @since 3.0.0 27920 * @category String 27921 * @param {string} [string=''] The string to repeat. 27922 * @param {number} [n=1] The number of times to repeat the string. 27923 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 27924 * @returns {string} Returns the repeated string. 27925 * @example 27926 * 27927 * _.repeat('*', 3); 27928 * // => '***' 27929 * 27930 * _.repeat('abc', 2); 27931 * // => 'abcabc' 27932 * 27933 * _.repeat('abc', 0); 27934 * // => '' 27935 */ 27936 function repeat(string, n, guard) { 27937 if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { 27938 n = 1; 27939 } else { 27940 n = toInteger(n); 27941 } 27942 return baseRepeat(toString(string), n); 27943 } 27944 27945 /** 27946 * Replaces matches for `pattern` in `string` with `replacement`. 27947 * 27948 * **Note:** This method is based on 27949 * [`String#replace`](https://mdn.io/String/replace). 27950 * 27951 * @static 27952 * @memberOf _ 27953 * @since 4.0.0 27954 * @category String 27955 * @param {string} [string=''] The string to modify. 27956 * @param {RegExp|string} pattern The pattern to replace. 27957 * @param {Function|string} replacement The match replacement. 27958 * @returns {string} Returns the modified string. 27959 * @example 27960 * 27961 * _.replace('Hi Fred', 'Fred', 'Barney'); 27962 * // => 'Hi Barney' 27963 */ 27964 function replace() { 27965 var args = arguments, 27966 string = toString(args[0]); 27967 27968 return args.length < 3 ? string : string.replace(args[1], args[2]); 27969 } 27970 27971 /** 27972 * Converts `string` to 27973 * [snake case](https://en.wikipedia.org/wiki/Snake_case). 27974 * 27975 * @static 27976 * @memberOf _ 27977 * @since 3.0.0 27978 * @category String 27979 * @param {string} [string=''] The string to convert. 27980 * @returns {string} Returns the snake cased string. 27981 * @example 27982 * 27983 * _.snakeCase('Foo Bar'); 27984 * // => 'foo_bar' 27985 * 27986 * _.snakeCase('fooBar'); 27987 * // => 'foo_bar' 27988 * 27989 * _.snakeCase('--FOO-BAR--'); 27990 * // => 'foo_bar' 27991 */ 27992 var snakeCase = createCompounder(function(result, word, index) { 27993 return result + (index ? '_' : '') + word.toLowerCase(); 27994 }); 27995 27996 /** 27997 * Splits `string` by `separator`. 27998 * 27999 * **Note:** This method is based on 28000 * [`String#split`](https://mdn.io/String/split). 28001 * 28002 * @static 28003 * @memberOf _ 28004 * @since 4.0.0 28005 * @category String 28006 * @param {string} [string=''] The string to split. 28007 * @param {RegExp|string} separator The separator pattern to split by. 28008 * @param {number} [limit] The length to truncate results to. 28009 * @returns {Array} Returns the string segments. 28010 * @example 28011 * 28012 * _.split('a-b-c', '-', 2); 28013 * // => ['a', 'b'] 28014 */ 28015 function split(string, separator, limit) { 28016 if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { 28017 separator = limit = undefined; 28018 } 28019 limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; 28020 if (!limit) { 28021 return []; 28022 } 28023 string = toString(string); 28024 if (string && ( 28025 typeof separator == 'string' || 28026 (separator != null && !isRegExp(separator)) 28027 )) { 28028 separator = baseToString(separator); 28029 if (!separator && hasUnicode(string)) { 28030 return castSlice(stringToArray(string), 0, limit); 28031 } 28032 } 28033 return string.split(separator, limit); 28034 } 28035 28036 /** 28037 * Converts `string` to 28038 * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). 28039 * 28040 * @static 28041 * @memberOf _ 28042 * @since 3.1.0 28043 * @category String 28044 * @param {string} [string=''] The string to convert. 28045 * @returns {string} Returns the start cased string. 28046 * @example 28047 * 28048 * _.startCase('--foo-bar--'); 28049 * // => 'Foo Bar' 28050 * 28051 * _.startCase('fooBar'); 28052 * // => 'Foo Bar' 28053 * 28054 * _.startCase('__FOO_BAR__'); 28055 * // => 'FOO BAR' 28056 */ 28057 var startCase = createCompounder(function(result, word, index) { 28058 return result + (index ? ' ' : '') + upperFirst(word); 28059 }); 28060 28061 /** 28062 * Checks if `string` starts with the given target string. 28063 * 28064 * @static 28065 * @memberOf _ 28066 * @since 3.0.0 28067 * @category String 28068 * @param {string} [string=''] The string to inspect. 28069 * @param {string} [target] The string to search for. 28070 * @param {number} [position=0] The position to search from. 28071 * @returns {boolean} Returns `true` if `string` starts with `target`, 28072 * else `false`. 28073 * @example 28074 * 28075 * _.startsWith('abc', 'a'); 28076 * // => true 28077 * 28078 * _.startsWith('abc', 'b'); 28079 * // => false 28080 * 28081 * _.startsWith('abc', 'b', 1); 28082 * // => true 28083 */ 28084 function startsWith(string, target, position) { 28085 string = toString(string); 28086 position = position == null 28087 ? 0 28088 : baseClamp(toInteger(position), 0, string.length); 28089 28090 target = baseToString(target); 28091 return string.slice(position, position + target.length) == target; 28092 } 28093 28094 /** 28095 * Creates a compiled template function that can interpolate data properties 28096 * in "interpolate" delimiters, HTML-escape interpolated data properties in 28097 * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data 28098 * properties may be accessed as free variables in the template. If a setting 28099 * object is given, it takes precedence over `_.templateSettings` values. 28100 * 28101 * **Note:** In the development build `_.template` utilizes 28102 * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) 28103 * for easier debugging. 28104 * 28105 * For more information on precompiling templates see 28106 * [lodash's custom builds documentation](https://lodash.com/custom-builds). 28107 * 28108 * For more information on Chrome extension sandboxes see 28109 * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). 28110 * 28111 * @static 28112 * @since 0.1.0 28113 * @memberOf _ 28114 * @category String 28115 * @param {string} [string=''] The template string. 28116 * @param {Object} [options={}] The options object. 28117 * @param {RegExp} [options.escape=_.templateSettings.escape] 28118 * The HTML "escape" delimiter. 28119 * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] 28120 * The "evaluate" delimiter. 28121 * @param {Object} [options.imports=_.templateSettings.imports] 28122 * An object to import into the template as free variables. 28123 * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] 28124 * The "interpolate" delimiter. 28125 * @param {string} [options.sourceURL='lodash.templateSources[n]'] 28126 * The sourceURL of the compiled template. 28127 * @param {string} [options.variable='obj'] 28128 * The data object variable name. 28129 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 28130 * @returns {Function} Returns the compiled template function. 28131 * @example 28132 * 28133 * // Use the "interpolate" delimiter to create a compiled template. 28134 * var compiled = _.template('hello <%= user %>!'); 28135 * compiled({ 'user': 'fred' }); 28136 * // => 'hello fred!' 28137 * 28138 * // Use the HTML "escape" delimiter to escape data property values. 28139 * var compiled = _.template('<b><%- value %></b>'); 28140 * compiled({ 'value': '<script>' }); 28141 * // => '<b><script></b>' 28142 * 28143 * // Use the "evaluate" delimiter to execute JavaScript and generate HTML. 28144 * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>'); 28145 * compiled({ 'users': ['fred', 'barney'] }); 28146 * // => '<li>fred</li><li>barney</li>' 28147 * 28148 * // Use the internal `print` function in "evaluate" delimiters. 28149 * var compiled = _.template('<% print("hello " + user); %>!'); 28150 * compiled({ 'user': 'barney' }); 28151 * // => 'hello barney!' 28152 * 28153 * // Use the ES template literal delimiter as an "interpolate" delimiter. 28154 * // Disable support by replacing the "interpolate" delimiter. 28155 * var compiled = _.template('hello ${ user }!'); 28156 * compiled({ 'user': 'pebbles' }); 28157 * // => 'hello pebbles!' 28158 * 28159 * // Use backslashes to treat delimiters as plain text. 28160 * var compiled = _.template('<%= "\\<%- value %\\>" %>'); 28161 * compiled({ 'value': 'ignored' }); 28162 * // => '<%- value %>' 28163 * 28164 * // Use the `imports` option to import `jQuery` as `jq`. 28165 * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>'; 28166 * var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); 28167 * compiled({ 'users': ['fred', 'barney'] }); 28168 * // => '<li>fred</li><li>barney</li>' 28169 * 28170 * // Use the `sourceURL` option to specify a custom sourceURL for the template. 28171 * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' }); 28172 * compiled(data); 28173 * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector. 28174 * 28175 * // Use the `variable` option to ensure a with-statement isn't used in the compiled template. 28176 * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' }); 28177 * compiled.source; 28178 * // => function(data) { 28179 * // var __t, __p = ''; 28180 * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!'; 28181 * // return __p; 28182 * // } 28183 * 28184 * // Use custom template delimiters. 28185 * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; 28186 * var compiled = _.template('hello {{ user }}!'); 28187 * compiled({ 'user': 'mustache' }); 28188 * // => 'hello mustache!' 28189 * 28190 * // Use the `source` property to inline compiled templates for meaningful 28191 * // line numbers in error messages and stack traces. 28192 * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\ 28193 * var JST = {\ 28194 * "main": ' + _.template(mainText).source + '\ 28195 * };\ 28196 * '); 28197 */ 28198 function template(string, options, guard) { 28199 // Based on John Resig's `tmpl` implementation 28200 // (http://ejohn.org/blog/javascript-micro-templating/) 28201 // and Laura Doktorova's doT.js (https://github.com/olado/doT). 28202 var settings = lodash.templateSettings; 28203 28204 if (guard && isIterateeCall(string, options, guard)) { 28205 options = undefined; 28206 } 28207 string = toString(string); 28208 options = assignInWith({}, options, settings, customDefaultsAssignIn); 28209 28210 var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), 28211 importsKeys = keys(imports), 28212 importsValues = baseValues(imports, importsKeys); 28213 28214 var isEscaping, 28215 isEvaluating, 28216 index = 0, 28217 interpolate = options.interpolate || reNoMatch, 28218 source = "__p += '"; 28219 28220 // Compile the regexp to match each delimiter. 28221 var reDelimiters = RegExp( 28222 (options.escape || reNoMatch).source + '|' + 28223 interpolate.source + '|' + 28224 (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + 28225 (options.evaluate || reNoMatch).source + '|$' 28226 , 'g'); 28227 28228 // Use a sourceURL for easier debugging. 28229 // The sourceURL gets injected into the source that's eval-ed, so be careful 28230 // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in 28231 // and escape the comment, thus injecting code that gets evaled. 28232 var sourceURL = '//# sourceURL=' + 28233 (hasOwnProperty.call(options, 'sourceURL') 28234 ? (options.sourceURL + '').replace(/\s/g, ' ') 28235 : ('lodash.templateSources[' + (++templateCounter) + ']') 28236 ) + '\n'; 28237 28238 string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { 28239 interpolateValue || (interpolateValue = esTemplateValue); 28240 28241 // Escape characters that can't be included in string literals. 28242 source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); 28243 28244 // Replace delimiters with snippets. 28245 if (escapeValue) { 28246 isEscaping = true; 28247 source += "' +\n__e(" + escapeValue + ") +\n'"; 28248 } 28249 if (evaluateValue) { 28250 isEvaluating = true; 28251 source += "';\n" + evaluateValue + ";\n__p += '"; 28252 } 28253 if (interpolateValue) { 28254 source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; 28255 } 28256 index = offset + match.length; 28257 28258 // The JS engine embedded in Adobe products needs `match` returned in 28259 // order to produce the correct `offset` value. 28260 return match; 28261 }); 28262 28263 source += "';\n"; 28264 28265 // If `variable` is not specified wrap a with-statement around the generated 28266 // code to add the data object to the top of the scope chain. 28267 var variable = hasOwnProperty.call(options, 'variable') && options.variable; 28268 if (!variable) { 28269 source = 'with (obj) {\n' + source + '\n}\n'; 28270 } 28271 // Throw an error if a forbidden character was found in `variable`, to prevent 28272 // potential command injection attacks. 28273 else if (reForbiddenIdentifierChars.test(variable)) { 28274 throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT); 28275 } 28276 28277 // Cleanup code by stripping empty strings. 28278 source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source) 28279 .replace(reEmptyStringMiddle, '$1') 28280 .replace(reEmptyStringTrailing, '$1;'); 28281 28282 // Frame code as the function body. 28283 source = 'function(' + (variable || 'obj') + ') {\n' + 28284 (variable 28285 ? '' 28286 : 'obj || (obj = {});\n' 28287 ) + 28288 "var __t, __p = ''" + 28289 (isEscaping 28290 ? ', __e = _.escape' 28291 : '' 28292 ) + 28293 (isEvaluating 28294 ? ', __j = Array.prototype.join;\n' + 28295 "function print() { __p += __j.call(arguments, '') }\n" 28296 : ';\n' 28297 ) + 28298 source + 28299 'return __p\n}'; 28300 28301 var result = attempt(function() { 28302 return Function(importsKeys, sourceURL + 'return ' + source) 28303 .apply(undefined, importsValues); 28304 }); 28305 28306 // Provide the compiled function's source by its `toString` method or 28307 // the `source` property as a convenience for inlining compiled templates. 28308 result.source = source; 28309 if (isError(result)) { 28310 throw result; 28311 } 28312 return result; 28313 } 28314 28315 /** 28316 * Converts `string`, as a whole, to lower case just like 28317 * [String#toLowerCase](https://mdn.io/toLowerCase). 28318 * 28319 * @static 28320 * @memberOf _ 28321 * @since 4.0.0 28322 * @category String 28323 * @param {string} [string=''] The string to convert. 28324 * @returns {string} Returns the lower cased string. 28325 * @example 28326 * 28327 * _.toLower('--Foo-Bar--'); 28328 * // => '--foo-bar--' 28329 * 28330 * _.toLower('fooBar'); 28331 * // => 'foobar' 28332 * 28333 * _.toLower('__FOO_BAR__'); 28334 * // => '__foo_bar__' 28335 */ 28336 function toLower(value) { 28337 return toString(value).toLowerCase(); 28338 } 28339 28340 /** 28341 * Converts `string`, as a whole, to upper case just like 28342 * [String#toUpperCase](https://mdn.io/toUpperCase). 28343 * 28344 * @static 28345 * @memberOf _ 28346 * @since 4.0.0 28347 * @category String 28348 * @param {string} [string=''] The string to convert. 28349 * @returns {string} Returns the upper cased string. 28350 * @example 28351 * 28352 * _.toUpper('--foo-bar--'); 28353 * // => '--FOO-BAR--' 28354 * 28355 * _.toUpper('fooBar'); 28356 * // => 'FOOBAR' 28357 * 28358 * _.toUpper('__foo_bar__'); 28359 * // => '__FOO_BAR__' 28360 */ 28361 function toUpper(value) { 28362 return toString(value).toUpperCase(); 28363 } 28364 28365 /** 28366 * Removes leading and trailing whitespace or specified characters from `string`. 28367 * 28368 * @static 28369 * @memberOf _ 28370 * @since 3.0.0 28371 * @category String 28372 * @param {string} [string=''] The string to trim. 28373 * @param {string} [chars=whitespace] The characters to trim. 28374 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 28375 * @returns {string} Returns the trimmed string. 28376 * @example 28377 * 28378 * _.trim(' abc '); 28379 * // => 'abc' 28380 * 28381 * _.trim('-_-abc-_-', '_-'); 28382 * // => 'abc' 28383 * 28384 * _.map([' foo ', ' bar '], _.trim); 28385 * // => ['foo', 'bar'] 28386 */ 28387 function trim(string, chars, guard) { 28388 string = toString(string); 28389 if (string && (guard || chars === undefined)) { 28390 return baseTrim(string); 28391 } 28392 if (!string || !(chars = baseToString(chars))) { 28393 return string; 28394 } 28395 var strSymbols = stringToArray(string), 28396 chrSymbols = stringToArray(chars), 28397 start = charsStartIndex(strSymbols, chrSymbols), 28398 end = charsEndIndex(strSymbols, chrSymbols) + 1; 28399 28400 return castSlice(strSymbols, start, end).join(''); 28401 } 28402 28403 /** 28404 * Removes trailing whitespace or specified characters from `string`. 28405 * 28406 * @static 28407 * @memberOf _ 28408 * @since 4.0.0 28409 * @category String 28410 * @param {string} [string=''] The string to trim. 28411 * @param {string} [chars=whitespace] The characters to trim. 28412 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 28413 * @returns {string} Returns the trimmed string. 28414 * @example 28415 * 28416 * _.trimEnd(' abc '); 28417 * // => ' abc' 28418 * 28419 * _.trimEnd('-_-abc-_-', '_-'); 28420 * // => '-_-abc' 28421 */ 28422 function trimEnd(string, chars, guard) { 28423 string = toString(string); 28424 if (string && (guard || chars === undefined)) { 28425 return string.slice(0, trimmedEndIndex(string) + 1); 28426 } 28427 if (!string || !(chars = baseToString(chars))) { 28428 return string; 28429 } 28430 var strSymbols = stringToArray(string), 28431 end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; 28432 28433 return castSlice(strSymbols, 0, end).join(''); 28434 } 28435 28436 /** 28437 * Removes leading whitespace or specified characters from `string`. 28438 * 28439 * @static 28440 * @memberOf _ 28441 * @since 4.0.0 28442 * @category String 28443 * @param {string} [string=''] The string to trim. 28444 * @param {string} [chars=whitespace] The characters to trim. 28445 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 28446 * @returns {string} Returns the trimmed string. 28447 * @example 28448 * 28449 * _.trimStart(' abc '); 28450 * // => 'abc ' 28451 * 28452 * _.trimStart('-_-abc-_-', '_-'); 28453 * // => 'abc-_-' 28454 */ 28455 function trimStart(string, chars, guard) { 28456 string = toString(string); 28457 if (string && (guard || chars === undefined)) { 28458 return string.replace(reTrimStart, ''); 28459 } 28460 if (!string || !(chars = baseToString(chars))) { 28461 return string; 28462 } 28463 var strSymbols = stringToArray(string), 28464 start = charsStartIndex(strSymbols, stringToArray(chars)); 28465 28466 return castSlice(strSymbols, start).join(''); 28467 } 28468 28469 /** 28470 * Truncates `string` if it's longer than the given maximum string length. 28471 * The last characters of the truncated string are replaced with the omission 28472 * string which defaults to "...". 28473 * 28474 * @static 28475 * @memberOf _ 28476 * @since 4.0.0 28477 * @category String 28478 * @param {string} [string=''] The string to truncate. 28479 * @param {Object} [options={}] The options object. 28480 * @param {number} [options.length=30] The maximum string length. 28481 * @param {string} [options.omission='...'] The string to indicate text is omitted. 28482 * @param {RegExp|string} [options.separator] The separator pattern to truncate to. 28483 * @returns {string} Returns the truncated string. 28484 * @example 28485 * 28486 * _.truncate('hi-diddly-ho there, neighborino'); 28487 * // => 'hi-diddly-ho there, neighbo...' 28488 * 28489 * _.truncate('hi-diddly-ho there, neighborino', { 28490 * 'length': 24, 28491 * 'separator': ' ' 28492 * }); 28493 * // => 'hi-diddly-ho there,...' 28494 * 28495 * _.truncate('hi-diddly-ho there, neighborino', { 28496 * 'length': 24, 28497 * 'separator': /,? +/ 28498 * }); 28499 * // => 'hi-diddly-ho there...' 28500 * 28501 * _.truncate('hi-diddly-ho there, neighborino', { 28502 * 'omission': ' [...]' 28503 * }); 28504 * // => 'hi-diddly-ho there, neig [...]' 28505 */ 28506 function truncate(string, options) { 28507 var length = DEFAULT_TRUNC_LENGTH, 28508 omission = DEFAULT_TRUNC_OMISSION; 28509 28510 if (isObject(options)) { 28511 var separator = 'separator' in options ? options.separator : separator; 28512 length = 'length' in options ? toInteger(options.length) : length; 28513 omission = 'omission' in options ? baseToString(options.omission) : omission; 28514 } 28515 string = toString(string); 28516 28517 var strLength = string.length; 28518 if (hasUnicode(string)) { 28519 var strSymbols = stringToArray(string); 28520 strLength = strSymbols.length; 28521 } 28522 if (length >= strLength) { 28523 return string; 28524 } 28525 var end = length - stringSize(omission); 28526 if (end < 1) { 28527 return omission; 28528 } 28529 var result = strSymbols 28530 ? castSlice(strSymbols, 0, end).join('') 28531 : string.slice(0, end); 28532 28533 if (separator === undefined) { 28534 return result + omission; 28535 } 28536 if (strSymbols) { 28537 end += (result.length - end); 28538 } 28539 if (isRegExp(separator)) { 28540 if (string.slice(end).search(separator)) { 28541 var match, 28542 substring = result; 28543 28544 if (!separator.global) { 28545 separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g'); 28546 } 28547 separator.lastIndex = 0; 28548 while ((match = separator.exec(substring))) { 28549 var newEnd = match.index; 28550 } 28551 result = result.slice(0, newEnd === undefined ? end : newEnd); 28552 } 28553 } else if (string.indexOf(baseToString(separator), end) != end) { 28554 var index = result.lastIndexOf(separator); 28555 if (index > -1) { 28556 result = result.slice(0, index); 28557 } 28558 } 28559 return result + omission; 28560 } 28561 28562 /** 28563 * The inverse of `_.escape`; this method converts the HTML entities 28564 * `&`, `<`, `>`, `"`, and `'` in `string` to 28565 * their corresponding characters. 28566 * 28567 * **Note:** No other HTML entities are unescaped. To unescape additional 28568 * HTML entities use a third-party library like [_he_](https://mths.be/he). 28569 * 28570 * @static 28571 * @memberOf _ 28572 * @since 0.6.0 28573 * @category String 28574 * @param {string} [string=''] The string to unescape. 28575 * @returns {string} Returns the unescaped string. 28576 * @example 28577 * 28578 * _.unescape('fred, barney, & pebbles'); 28579 * // => 'fred, barney, & pebbles' 28580 */ 28581 function unescape(string) { 28582 string = toString(string); 28583 return (string && reHasEscapedHtml.test(string)) 28584 ? string.replace(reEscapedHtml, unescapeHtmlChar) 28585 : string; 28586 } 28587 28588 /** 28589 * Converts `string`, as space separated words, to upper case. 28590 * 28591 * @static 28592 * @memberOf _ 28593 * @since 4.0.0 28594 * @category String 28595 * @param {string} [string=''] The string to convert. 28596 * @returns {string} Returns the upper cased string. 28597 * @example 28598 * 28599 * _.upperCase('--foo-bar'); 28600 * // => 'FOO BAR' 28601 * 28602 * _.upperCase('fooBar'); 28603 * // => 'FOO BAR' 28604 * 28605 * _.upperCase('__foo_bar__'); 28606 * // => 'FOO BAR' 28607 */ 28608 var upperCase = createCompounder(function(result, word, index) { 28609 return result + (index ? ' ' : '') + word.toUpperCase(); 28610 }); 28611 28612 /** 28613 * Converts the first character of `string` to upper case. 28614 * 28615 * @static 28616 * @memberOf _ 28617 * @since 4.0.0 28618 * @category String 28619 * @param {string} [string=''] The string to convert. 28620 * @returns {string} Returns the converted string. 28621 * @example 28622 * 28623 * _.upperFirst('fred'); 28624 * // => 'Fred' 28625 * 28626 * _.upperFirst('FRED'); 28627 * // => 'FRED' 28628 */ 28629 var upperFirst = createCaseFirst('toUpperCase'); 28630 28631 /** 28632 * Splits `string` into an array of its words. 28633 * 28634 * @static 28635 * @memberOf _ 28636 * @since 3.0.0 28637 * @category String 28638 * @param {string} [string=''] The string to inspect. 28639 * @param {RegExp|string} [pattern] The pattern to match words. 28640 * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. 28641 * @returns {Array} Returns the words of `string`. 28642 * @example 28643 * 28644 * _.words('fred, barney, & pebbles'); 28645 * // => ['fred', 'barney', 'pebbles'] 28646 * 28647 * _.words('fred, barney, & pebbles', /[^, ]+/g); 28648 * // => ['fred', 'barney', '&', 'pebbles'] 28649 */ 28650 function words(string, pattern, guard) { 28651 string = toString(string); 28652 pattern = guard ? undefined : pattern; 28653 28654 if (pattern === undefined) { 28655 return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); 28656 } 28657 return string.match(pattern) || []; 28658 } 28659 28660 /*------------------------------------------------------------------------*/ 28661 28662 /** 28663 * Attempts to invoke `func`, returning either the result or the caught error 28664 * object. Any additional arguments are provided to `func` when it's invoked. 28665 * 28666 * @static 28667 * @memberOf _ 28668 * @since 3.0.0 28669 * @category Util 28670 * @param {Function} func The function to attempt. 28671 * @param {...*} [args] The arguments to invoke `func` with. 28672 * @returns {*} Returns the `func` result or error object. 28673 * @example 28674 * 28675 * // Avoid throwing errors for invalid selectors. 28676 * var elements = _.attempt(function(selector) { 28677 * return document.querySelectorAll(selector); 28678 * }, '>_>'); 28679 * 28680 * if (_.isError(elements)) { 28681 * elements = []; 28682 * } 28683 */ 28684 var attempt = baseRest(function(func, args) { 28685 try { 28686 return apply(func, undefined, args); 28687 } catch (e) { 28688 return isError(e) ? e : new Error(e); 28689 } 28690 }); 28691 28692 /** 28693 * Binds methods of an object to the object itself, overwriting the existing 28694 * method. 28695 * 28696 * **Note:** This method doesn't set the "length" property of bound functions. 28697 * 28698 * @static 28699 * @since 0.1.0 28700 * @memberOf _ 28701 * @category Util 28702 * @param {Object} object The object to bind and assign the bound methods to. 28703 * @param {...(string|string[])} methodNames The object method names to bind. 28704 * @returns {Object} Returns `object`. 28705 * @example 28706 * 28707 * var view = { 28708 * 'label': 'docs', 28709 * 'click': function() { 28710 * console.log('clicked ' + this.label); 28711 * } 28712 * }; 28713 * 28714 * _.bindAll(view, ['click']); 28715 * jQuery(element).on('click', view.click); 28716 * // => Logs 'clicked docs' when clicked. 28717 */ 28718 var bindAll = flatRest(function(object, methodNames) { 28719 arrayEach(methodNames, function(key) { 28720 key = toKey(key); 28721 baseAssignValue(object, key, bind(object[key], object)); 28722 }); 28723 return object; 28724 }); 28725 28726 /** 28727 * Creates a function that iterates over `pairs` and invokes the corresponding 28728 * function of the first predicate to return truthy. The predicate-function 28729 * pairs are invoked with the `this` binding and arguments of the created 28730 * function. 28731 * 28732 * @static 28733 * @memberOf _ 28734 * @since 4.0.0 28735 * @category Util 28736 * @param {Array} pairs The predicate-function pairs. 28737 * @returns {Function} Returns the new composite function. 28738 * @example 28739 * 28740 * var func = _.cond([ 28741 * [_.matches({ 'a': 1 }), _.constant('matches A')], 28742 * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')], 28743 * [_.stubTrue, _.constant('no match')] 28744 * ]); 28745 * 28746 * func({ 'a': 1, 'b': 2 }); 28747 * // => 'matches A' 28748 * 28749 * func({ 'a': 0, 'b': 1 }); 28750 * // => 'matches B' 28751 * 28752 * func({ 'a': '1', 'b': '2' }); 28753 * // => 'no match' 28754 */ 28755 function cond(pairs) { 28756 var length = pairs == null ? 0 : pairs.length, 28757 toIteratee = getIteratee(); 28758 28759 pairs = !length ? [] : arrayMap(pairs, function(pair) { 28760 if (typeof pair[1] != 'function') { 28761 throw new TypeError(FUNC_ERROR_TEXT); 28762 } 28763 return [toIteratee(pair[0]), pair[1]]; 28764 }); 28765 28766 return baseRest(function(args) { 28767 var index = -1; 28768 while (++index < length) { 28769 var pair = pairs[index];
vendor: 10,296 bytes, lines 28770-29102
28770 if (apply(pair[0], this, args)) { 28771 return apply(pair[1], this, args); 28772 } 28773 } 28774 }); 28775 } 28776 28777 /** 28778 * Creates a function that invokes the predicate properties of `source` with 28779 * the corresponding property values of a given object, returning `true` if 28780 * all predicates return truthy, else `false`. 28781 * 28782 * **Note:** The created function is equivalent to `_.conformsTo` with 28783 * `source` partially applied. 28784 * 28785 * @static 28786 * @memberOf _ 28787 * @since 4.0.0 28788 * @category Util 28789 * @param {Object} source The object of property predicates to conform to. 28790 * @returns {Function} Returns the new spec function. 28791 * @example 28792 * 28793 * var objects = [ 28794 * { 'a': 2, 'b': 1 }, 28795 * { 'a': 1, 'b': 2 } 28796 * ]; 28797 * 28798 * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } })); 28799 * // => [{ 'a': 1, 'b': 2 }] 28800 */ 28801 function conforms(source) { 28802 return baseConforms(baseClone(source, CLONE_DEEP_FLAG)); 28803 } 28804 28805 /** 28806 * Creates a function that returns `value`. 28807 * 28808 * @static 28809 * @memberOf _ 28810 * @since 2.4.0 28811 * @category Util 28812 * @param {*} value The value to return from the new function. 28813 * @returns {Function} Returns the new constant function. 28814 * @example 28815 * 28816 * var objects = _.times(2, _.constant({ 'a': 1 })); 28817 * 28818 * console.log(objects); 28819 * // => [{ 'a': 1 }, { 'a': 1 }] 28820 * 28821 * console.log(objects[0] === objects[1]); 28822 * // => true 28823 */ 28824 function constant(value) { 28825 return function() { 28826 return value; 28827 }; 28828 } 28829 28830 /** 28831 * Checks `value` to determine whether a default value should be returned in 28832 * its place. The `defaultValue` is returned if `value` is `NaN`, `null`, 28833 * or `undefined`. 28834 * 28835 * @static 28836 * @memberOf _ 28837 * @since 4.14.0 28838 * @category Util 28839 * @param {*} value The value to check. 28840 * @param {*} defaultValue The default value. 28841 * @returns {*} Returns the resolved value. 28842 * @example 28843 * 28844 * _.defaultTo(1, 10); 28845 * // => 1 28846 * 28847 * _.defaultTo(undefined, 10); 28848 * // => 10 28849 */ 28850 function defaultTo(value, defaultValue) { 28851 return (value == null || value !== value) ? defaultValue : value; 28852 } 28853 28854 /** 28855 * Creates a function that returns the result of invoking the given functions 28856 * with the `this` binding of the created function, where each successive 28857 * invocation is supplied the return value of the previous. 28858 * 28859 * @static 28860 * @memberOf _ 28861 * @since 3.0.0 28862 * @category Util 28863 * @param {...(Function|Function[])} [funcs] The functions to invoke. 28864 * @returns {Function} Returns the new composite function. 28865 * @see _.flowRight 28866 * @example 28867 * 28868 * function square(n) { 28869 * return n * n; 28870 * } 28871 * 28872 * var addSquare = _.flow([_.add, square]); 28873 * addSquare(1, 2); 28874 * // => 9 28875 */ 28876 var flow = createFlow(); 28877 28878 /** 28879 * This method is like `_.flow` except that it creates a function that 28880 * invokes the given functions from right to left. 28881 * 28882 * @static 28883 * @since 3.0.0 28884 * @memberOf _ 28885 * @category Util 28886 * @param {...(Function|Function[])} [funcs] The functions to invoke. 28887 * @returns {Function} Returns the new composite function. 28888 * @see _.flow 28889 * @example 28890 * 28891 * function square(n) { 28892 * return n * n; 28893 * } 28894 * 28895 * var addSquare = _.flowRight([square, _.add]); 28896 * addSquare(1, 2); 28897 * // => 9 28898 */ 28899 var flowRight = createFlow(true); 28900 28901 /** 28902 * This method returns the first argument it receives. 28903 * 28904 * @static 28905 * @since 0.1.0 28906 * @memberOf _ 28907 * @category Util 28908 * @param {*} value Any value. 28909 * @returns {*} Returns `value`. 28910 * @example 28911 * 28912 * var object = { 'a': 1 }; 28913 * 28914 * console.log(_.identity(object) === object); 28915 * // => true 28916 */ 28917 function identity(value) { 28918 return value; 28919 } 28920 28921 /** 28922 * Creates a function that invokes `func` with the arguments of the created 28923 * function. If `func` is a property name, the created function returns the 28924 * property value for a given element. If `func` is an array or object, the 28925 * created function returns `true` for elements that contain the equivalent 28926 * source properties, otherwise it returns `false`. 28927 * 28928 * @static 28929 * @since 4.0.0 28930 * @memberOf _ 28931 * @category Util 28932 * @param {*} [func=_.identity] The value to convert to a callback. 28933 * @returns {Function} Returns the callback. 28934 * @example 28935 * 28936 * var users = [ 28937 * { 'user': 'barney', 'age': 36, 'active': true }, 28938 * { 'user': 'fred', 'age': 40, 'active': false } 28939 * ]; 28940 * 28941 * // The `_.matches` iteratee shorthand. 28942 * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); 28943 * // => [{ 'user': 'barney', 'age': 36, 'active': true }] 28944 * 28945 * // The `_.matchesProperty` iteratee shorthand. 28946 * _.filter(users, _.iteratee(['user', 'fred'])); 28947 * // => [{ 'user': 'fred', 'age': 40 }] 28948 * 28949 * // The `_.property` iteratee shorthand. 28950 * _.map(users, _.iteratee('user')); 28951 * // => ['barney', 'fred'] 28952 * 28953 * // Create custom iteratee shorthands. 28954 * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { 28955 * return !_.isRegExp(func) ? iteratee(func) : function(string) { 28956 * return func.test(string); 28957 * }; 28958 * }); 28959 * 28960 * _.filter(['abc', 'def'], /ef/); 28961 * // => ['def'] 28962 */ 28963 function iteratee(func) { 28964 return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); 28965 } 28966 28967 /** 28968 * Creates a function that performs a partial deep comparison between a given 28969 * object and `source`, returning `true` if the given object has equivalent 28970 * property values, else `false`. 28971 * 28972 * **Note:** The created function is equivalent to `_.isMatch` with `source` 28973 * partially applied. 28974 * 28975 * Partial comparisons will match empty array and empty object `source` 28976 * values against any array or object value, respectively. See `_.isEqual` 28977 * for a list of supported value comparisons. 28978 * 28979 * **Note:** Multiple values can be checked by combining several matchers 28980 * using `_.overSome` 28981 * 28982 * @static 28983 * @memberOf _ 28984 * @since 3.0.0 28985 * @category Util 28986 * @param {Object} source The object of property values to match. 28987 * @returns {Function} Returns the new spec function. 28988 * @example 28989 * 28990 * var objects = [ 28991 * { 'a': 1, 'b': 2, 'c': 3 }, 28992 * { 'a': 4, 'b': 5, 'c': 6 } 28993 * ]; 28994 * 28995 * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); 28996 * // => [{ 'a': 4, 'b': 5, 'c': 6 }] 28997 * 28998 * // Checking for several possible values 28999 * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })])); 29000 * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] 29001 */ 29002 function matches(source) { 29003 return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); 29004 } 29005 29006 /** 29007 * Creates a function that performs a partial deep comparison between the 29008 * value at `path` of a given object to `srcValue`, returning `true` if the 29009 * object value is equivalent, else `false`. 29010 * 29011 * **Note:** Partial comparisons will match empty array and empty object 29012 * `srcValue` values against any array or object value, respectively. See 29013 * `_.isEqual` for a list of supported value comparisons. 29014 * 29015 * **Note:** Multiple values can be checked by combining several matchers 29016 * using `_.overSome` 29017 * 29018 * @static 29019 * @memberOf _ 29020 * @since 3.2.0 29021 * @category Util 29022 * @param {Array|string} path The path of the property to get. 29023 * @param {*} srcValue The value to match. 29024 * @returns {Function} Returns the new spec function. 29025 * @example 29026 * 29027 * var objects = [ 29028 * { 'a': 1, 'b': 2, 'c': 3 }, 29029 * { 'a': 4, 'b': 5, 'c': 6 } 29030 * ]; 29031 * 29032 * _.find(objects, _.matchesProperty('a', 4)); 29033 * // => { 'a': 4, 'b': 5, 'c': 6 } 29034 * 29035 * // Checking for several possible values 29036 * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)])); 29037 * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }] 29038 */ 29039 function matchesProperty(path, srcValue) { 29040 return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG)); 29041 } 29042 29043 /** 29044 * Creates a function that invokes the method at `path` of a given object. 29045 * Any additional arguments are provided to the invoked method. 29046 * 29047 * @static 29048 * @memberOf _ 29049 * @since 3.7.0 29050 * @category Util 29051 * @param {Array|string} path The path of the method to invoke. 29052 * @param {...*} [args] The arguments to invoke the method with. 29053 * @returns {Function} Returns the new invoker function. 29054 * @example 29055 * 29056 * var objects = [ 29057 * { 'a': { 'b': _.constant(2) } }, 29058 * { 'a': { 'b': _.constant(1) } } 29059 * ]; 29060 * 29061 * _.map(objects, _.method('a.b')); 29062 * // => [2, 1] 29063 * 29064 * _.map(objects, _.method(['a', 'b'])); 29065 * // => [2, 1] 29066 */ 29067 var method = baseRest(function(path, args) { 29068 return function(object) { 29069 return baseInvoke(object, path, args); 29070 }; 29071 }); 29072 29073 /** 29074 * The opposite of `_.method`; this method creates a function that invokes 29075 * the method at a given path of `object`. Any additional arguments are 29076 * provided to the invoked method. 29077 * 29078 * @static 29079 * @memberOf _ 29080 * @since 3.7.0 29081 * @category Util 29082 * @param {Object} object The object to query. 29083 * @param {...*} [args] The arguments to invoke the method with. 29084 * @returns {Function} Returns the new invoker function. 29085 * @example 29086 * 29087 * var array = _.times(3, _.constant), 29088 * object = { 'a': array, 'b': array, 'c': array }; 29089 * 29090 * _.map(['a[2]', 'c[0]'], _.methodOf(object)); 29091 * // => [2, 0] 29092 * 29093 * _.map([['a', '2'], ['c', '0']], _.methodOf(object)); 29094 * // => [2, 0] 29095 */ 29096 var methodOf = baseRest(function(object, args) { 29097 return function(path) { 29098 return baseInvoke(object, path, args); 29099 }; 29100 }); 29101 29102 /**
vendor: 10,734 bytes, lines 29103-29490
29103 * Adds all own enumerable string keyed function properties of a source 29104 * object to the destination object. If `object` is a function, then methods 29105 * are added to its prototype as well. 29106 * 29107 * **Note:** Use `_.runInContext` to create a pristine `lodash` function to 29108 * avoid conflicts caused by modifying the original. 29109 * 29110 * @static 29111 * @since 0.1.0 29112 * @memberOf _ 29113 * @category Util 29114 * @param {Function|Object} [object=lodash] The destination object. 29115 * @param {Object} source The object of functions to add. 29116 * @param {Object} [options={}] The options object. 29117 * @param {boolean} [options.chain=true] Specify whether mixins are chainable. 29118 * @returns {Function|Object} Returns `object`. 29119 * @example 29120 * 29121 * function vowels(string) { 29122 * return _.filter(string, function(v) { 29123 * return /[aeiou]/i.test(v); 29124 * }); 29125 * } 29126 * 29127 * _.mixin({ 'vowels': vowels }); 29128 * _.vowels('fred'); 29129 * // => ['e'] 29130 * 29131 * _('fred').vowels().value(); 29132 * // => ['e'] 29133 * 29134 * _.mixin({ 'vowels': vowels }, { 'chain': false }); 29135 * _('fred').vowels(); 29136 * // => ['e'] 29137 */ 29138 function mixin(object, source, options) { 29139 var props = keys(source), 29140 methodNames = baseFunctions(source, props); 29141 29142 if (options == null && 29143 !(isObject(source) && (methodNames.length || !props.length))) { 29144 options = source; 29145 source = object; 29146 object = this; 29147 methodNames = baseFunctions(source, keys(source)); 29148 } 29149 var chain = !(isObject(options) && 'chain' in options) || !!options.chain, 29150 isFunc = isFunction(object); 29151 29152 arrayEach(methodNames, function(methodName) { 29153 var func = source[methodName]; 29154 object[methodName] = func; 29155 if (isFunc) { 29156 object.prototype[methodName] = function() { 29157 var chainAll = this.__chain__; 29158 if (chain || chainAll) { 29159 var result = object(this.__wrapped__), 29160 actions = result.__actions__ = copyArray(this.__actions__); 29161 29162 actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); 29163 result.__chain__ = chainAll; 29164 return result; 29165 } 29166 return func.apply(object, arrayPush([this.value()], arguments)); 29167 }; 29168 } 29169 }); 29170 29171 return object; 29172 } 29173 29174 /** 29175 * Reverts the `_` variable to its previous value and returns a reference to 29176 * the `lodash` function. 29177 * 29178 * @static 29179 * @since 0.1.0 29180 * @memberOf _ 29181 * @category Util 29182 * @returns {Function} Returns the `lodash` function. 29183 * @example 29184 * 29185 * var lodash = _.noConflict(); 29186 */ 29187 function noConflict() { 29188 if (root._ === this) { 29189 root._ = oldDash; 29190 } 29191 return this; 29192 } 29193 29194 /** 29195 * This method returns `undefined`. 29196 * 29197 * @static 29198 * @memberOf _ 29199 * @since 2.3.0 29200 * @category Util 29201 * @example 29202 * 29203 * _.times(2, _.noop); 29204 * // => [undefined, undefined] 29205 */ 29206 function noop() { 29207 // No operation performed. 29208 } 29209 29210 /** 29211 * Creates a function that gets the argument at index `n`. If `n` is negative, 29212 * the nth argument from the end is returned. 29213 * 29214 * @static 29215 * @memberOf _ 29216 * @since 4.0.0 29217 * @category Util 29218 * @param {number} [n=0] The index of the argument to return. 29219 * @returns {Function} Returns the new pass-thru function. 29220 * @example 29221 * 29222 * var func = _.nthArg(1); 29223 * func('a', 'b', 'c', 'd'); 29224 * // => 'b' 29225 * 29226 * var func = _.nthArg(-2); 29227 * func('a', 'b', 'c', 'd'); 29228 * // => 'c' 29229 */ 29230 function nthArg(n) { 29231 n = toInteger(n); 29232 return baseRest(function(args) { 29233 return baseNth(args, n); 29234 }); 29235 } 29236 29237 /** 29238 * Creates a function that invokes `iteratees` with the arguments it receives 29239 * and returns their results. 29240 * 29241 * @static 29242 * @memberOf _ 29243 * @since 4.0.0 29244 * @category Util 29245 * @param {...(Function|Function[])} [iteratees=[_.identity]] 29246 * The iteratees to invoke. 29247 * @returns {Function} Returns the new function. 29248 * @example 29249 * 29250 * var func = _.over([Math.max, Math.min]); 29251 * 29252 * func(1, 2, 3, 4); 29253 * // => [4, 1] 29254 */ 29255 var over = createOver(arrayMap); 29256 29257 /** 29258 * Creates a function that checks if **all** of the `predicates` return 29259 * truthy when invoked with the arguments it receives. 29260 * 29261 * Following shorthands are possible for providing predicates. 29262 * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate. 29263 * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them. 29264 * 29265 * @static 29266 * @memberOf _ 29267 * @since 4.0.0 29268 * @category Util 29269 * @param {...(Function|Function[])} [predicates=[_.identity]] 29270 * The predicates to check. 29271 * @returns {Function} Returns the new function. 29272 * @example 29273 * 29274 * var func = _.overEvery([Boolean, isFinite]); 29275 * 29276 * func('1'); 29277 * // => true 29278 * 29279 * func(null); 29280 * // => false 29281 * 29282 * func(NaN); 29283 * // => false 29284 */ 29285 var overEvery = createOver(arrayEvery); 29286 29287 /** 29288 * Creates a function that checks if **any** of the `predicates` return 29289 * truthy when invoked with the arguments it receives. 29290 * 29291 * Following shorthands are possible for providing predicates. 29292 * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate. 29293 * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them. 29294 * 29295 * @static 29296 * @memberOf _ 29297 * @since 4.0.0 29298 * @category Util 29299 * @param {...(Function|Function[])} [predicates=[_.identity]] 29300 * The predicates to check. 29301 * @returns {Function} Returns the new function. 29302 * @example 29303 * 29304 * var func = _.overSome([Boolean, isFinite]); 29305 * 29306 * func('1'); 29307 * // => true 29308 * 29309 * func(null); 29310 * // => true 29311 * 29312 * func(NaN); 29313 * // => false 29314 * 29315 * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }]) 29316 * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]]) 29317 */ 29318 var overSome = createOver(arraySome); 29319 29320 /** 29321 * Creates a function that returns the value at `path` of a given object. 29322 * 29323 * @static 29324 * @memberOf _ 29325 * @since 2.4.0 29326 * @category Util 29327 * @param {Array|string} path The path of the property to get. 29328 * @returns {Function} Returns the new accessor function. 29329 * @example 29330 * 29331 * var objects = [ 29332 * { 'a': { 'b': 2 } }, 29333 * { 'a': { 'b': 1 } } 29334 * ]; 29335 * 29336 * _.map(objects, _.property('a.b')); 29337 * // => [2, 1] 29338 * 29339 * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); 29340 * // => [1, 2] 29341 */ 29342 function property(path) { 29343 return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); 29344 } 29345 29346 /** 29347 * The opposite of `_.property`; this method creates a function that returns 29348 * the value at a given path of `object`. 29349 * 29350 * @static 29351 * @memberOf _ 29352 * @since 3.0.0 29353 * @category Util 29354 * @param {Object} object The object to query. 29355 * @returns {Function} Returns the new accessor function. 29356 * @example 29357 * 29358 * var array = [0, 1, 2], 29359 * object = { 'a': array, 'b': array, 'c': array }; 29360 * 29361 * _.map(['a[2]', 'c[0]'], _.propertyOf(object)); 29362 * // => [2, 0] 29363 * 29364 * _.map([['a', '2'], ['c', '0']], _.propertyOf(object)); 29365 * // => [2, 0] 29366 */ 29367 function propertyOf(object) { 29368 return function(path) { 29369 return object == null ? undefined : baseGet(object, path); 29370 }; 29371 } 29372 29373 /** 29374 * Creates an array of numbers (positive and/or negative) progressing from 29375 * `start` up to, but not including, `end`. A step of `-1` is used if a negative 29376 * `start` is specified without an `end` or `step`. If `end` is not specified, 29377 * it's set to `start` with `start` then set to `0`. 29378 * 29379 * **Note:** JavaScript follows the IEEE-754 standard for resolving 29380 * floating-point values which can produce unexpected results. 29381 * 29382 * @static 29383 * @since 0.1.0 29384 * @memberOf _ 29385 * @category Util 29386 * @param {number} [start=0] The start of the range. 29387 * @param {number} end The end of the range. 29388 * @param {number} [step=1] The value to increment or decrement by. 29389 * @returns {Array} Returns the range of numbers. 29390 * @see _.inRange, _.rangeRight 29391 * @example 29392 * 29393 * _.range(4); 29394 * // => [0, 1, 2, 3] 29395 * 29396 * _.range(-4); 29397 * // => [0, -1, -2, -3] 29398 * 29399 * _.range(1, 5); 29400 * // => [1, 2, 3, 4] 29401 * 29402 * _.range(0, 20, 5); 29403 * // => [0, 5, 10, 15] 29404 * 29405 * _.range(0, -4, -1); 29406 * // => [0, -1, -2, -3] 29407 * 29408 * _.range(1, 4, 0); 29409 * // => [1, 1, 1] 29410 * 29411 * _.range(0); 29412 * // => [] 29413 */ 29414 var range = createRange(); 29415 29416 /** 29417 * This method is like `_.range` except that it populates values in 29418 * descending order. 29419 * 29420 * @static 29421 * @memberOf _ 29422 * @since 4.0.0 29423 * @category Util 29424 * @param {number} [start=0] The start of the range. 29425 * @param {number} end The end of the range. 29426 * @param {number} [step=1] The value to increment or decrement by. 29427 * @returns {Array} Returns the range of numbers. 29428 * @see _.inRange, _.range 29429 * @example 29430 * 29431 * _.rangeRight(4); 29432 * // => [3, 2, 1, 0] 29433 * 29434 * _.rangeRight(-4); 29435 * // => [-3, -2, -1, 0] 29436 * 29437 * _.rangeRight(1, 5); 29438 * // => [4, 3, 2, 1] 29439 * 29440 * _.rangeRight(0, 20, 5); 29441 * // => [15, 10, 5, 0] 29442 * 29443 * _.rangeRight(0, -4, -1); 29444 * // => [-3, -2, -1, 0] 29445 * 29446 * _.rangeRight(1, 4, 0); 29447 * // => [1, 1, 1] 29448 * 29449 * _.rangeRight(0); 29450 * // => [] 29451 */ 29452 var rangeRight = createRange(true); 29453 29454 /** 29455 * This method returns a new empty array. 29456 * 29457 * @static 29458 * @memberOf _ 29459 * @since 4.13.0 29460 * @category Util 29461 * @returns {Array} Returns the new empty array. 29462 * @example 29463 * 29464 * var arrays = _.times(2, _.stubArray); 29465 * 29466 * console.log(arrays); 29467 * // => [[], []] 29468 * 29469 * console.log(arrays[0] === arrays[1]); 29470 * // => false 29471 */ 29472 function stubArray() { 29473 return []; 29474 } 29475 29476 /** 29477 * This method returns `false`. 29478 * 29479 * @static 29480 * @memberOf _ 29481 * @since 4.13.0 29482 * @category Util 29483 * @returns {boolean} Returns `false`. 29484 * @example 29485 * 29486 * _.times(2, _.stubFalse); 29487 * // => [false, false] 29488 */ 29489 function stubFalse() { 29490 return false;
vendor: 1,044 bytes, lines 29491-29544
29491 } 29492 29493 /** 29494 * This method returns a new empty object. 29495 * 29496 * @static 29497 * @memberOf _ 29498 * @since 4.13.0 29499 * @category Util 29500 * @returns {Object} Returns the new empty object. 29501 * @example 29502 * 29503 * var objects = _.times(2, _.stubObject); 29504 * 29505 * console.log(objects); 29506 * // => [{}, {}] 29507 * 29508 * console.log(objects[0] === objects[1]); 29509 * // => false 29510 */ 29511 function stubObject() { 29512 return {}; 29513 } 29514 29515 /** 29516 * This method returns an empty string. 29517 * 29518 * @static 29519 * @memberOf _ 29520 * @since 4.13.0 29521 * @category Util 29522 * @returns {string} Returns the empty string. 29523 * @example 29524 * 29525 * _.times(2, _.stubString); 29526 * // => ['', ''] 29527 */ 29528 function stubString() { 29529 return ''; 29530 } 29531 29532 /** 29533 * This method returns `true`. 29534 * 29535 * @static 29536 * @memberOf _ 29537 * @since 4.13.0 29538 * @category Util 29539 * @returns {boolean} Returns `true`. 29540 * @example 29541 * 29542 * _.times(2, _.stubTrue); 29543 * // => [true, true] 29544 */
vendor: 9,081 bytes, lines 29545-29888
29545 function stubTrue() { 29546 return true; 29547 } 29548 29549 /** 29550 * Invokes the iteratee `n` times, returning an array of the results of 29551 * each invocation. The iteratee is invoked with one argument; (index). 29552 * 29553 * @static 29554 * @since 0.1.0 29555 * @memberOf _ 29556 * @category Util 29557 * @param {number} n The number of times to invoke `iteratee`. 29558 * @param {Function} [iteratee=_.identity] The function invoked per iteration. 29559 * @returns {Array} Returns the array of results. 29560 * @example 29561 * 29562 * _.times(3, String); 29563 * // => ['0', '1', '2'] 29564 * 29565 * _.times(4, _.constant(0)); 29566 * // => [0, 0, 0, 0] 29567 */ 29568 function times(n, iteratee) { 29569 n = toInteger(n); 29570 if (n < 1 || n > MAX_SAFE_INTEGER) { 29571 return []; 29572 } 29573 var index = MAX_ARRAY_LENGTH, 29574 length = nativeMin(n, MAX_ARRAY_LENGTH); 29575 29576 iteratee = getIteratee(iteratee); 29577 n -= MAX_ARRAY_LENGTH; 29578 29579 var result = baseTimes(length, iteratee); 29580 while (++index < n) { 29581 iteratee(index); 29582 } 29583 return result; 29584 } 29585 29586 /** 29587 * Converts `value` to a property path array. 29588 * 29589 * @static 29590 * @memberOf _ 29591 * @since 4.0.0 29592 * @category Util 29593 * @param {*} value The value to convert. 29594 * @returns {Array} Returns the new property path array. 29595 * @example 29596 * 29597 * _.toPath('a.b.c'); 29598 * // => ['a', 'b', 'c'] 29599 * 29600 * _.toPath('a[0].b.c'); 29601 * // => ['a', '0', 'b', 'c'] 29602 */ 29603 function toPath(value) { 29604 if (isArray(value)) { 29605 return arrayMap(value, toKey); 29606 } 29607 return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); 29608 } 29609 29610 /** 29611 * Generates a unique ID. If `prefix` is given, the ID is appended to it. 29612 * 29613 * @static 29614 * @since 0.1.0 29615 * @memberOf _ 29616 * @category Util 29617 * @param {string} [prefix=''] The value to prefix the ID with. 29618 * @returns {string} Returns the unique ID. 29619 * @example 29620 * 29621 * _.uniqueId('contact_'); 29622 * // => 'contact_104' 29623 * 29624 * _.uniqueId(); 29625 * // => '105' 29626 */ 29627 function uniqueId(prefix) { 29628 var id = ++idCounter; 29629 return toString(prefix) + id; 29630 } 29631 29632 /*------------------------------------------------------------------------*/ 29633 29634 /** 29635 * Adds two numbers. 29636 * 29637 * @static 29638 * @memberOf _ 29639 * @since 3.4.0 29640 * @category Math 29641 * @param {number} augend The first number in an addition. 29642 * @param {number} addend The second number in an addition. 29643 * @returns {number} Returns the total. 29644 * @example 29645 * 29646 * _.add(6, 4); 29647 * // => 10 29648 */ 29649 var add = createMathOperation(function(augend, addend) { 29650 return augend + addend; 29651 }, 0); 29652 29653 /** 29654 * Computes `number` rounded up to `precision`. 29655 * 29656 * @static 29657 * @memberOf _ 29658 * @since 3.10.0 29659 * @category Math 29660 * @param {number} number The number to round up. 29661 * @param {number} [precision=0] The precision to round up to. 29662 * @returns {number} Returns the rounded up number. 29663 * @example 29664 * 29665 * _.ceil(4.006); 29666 * // => 5 29667 * 29668 * _.ceil(6.004, 2); 29669 * // => 6.01 29670 * 29671 * _.ceil(6040, -2); 29672 * // => 6100 29673 */ 29674 var ceil = createRound('ceil'); 29675 29676 /** 29677 * Divide two numbers. 29678 * 29679 * @static 29680 * @memberOf _ 29681 * @since 4.7.0 29682 * @category Math 29683 * @param {number} dividend The first number in a division. 29684 * @param {number} divisor The second number in a division. 29685 * @returns {number} Returns the quotient. 29686 * @example 29687 * 29688 * _.divide(6, 4); 29689 * // => 1.5 29690 */ 29691 var divide = createMathOperation(function(dividend, divisor) { 29692 return dividend / divisor; 29693 }, 1); 29694 29695 /** 29696 * Computes `number` rounded down to `precision`. 29697 * 29698 * @static 29699 * @memberOf _ 29700 * @since 3.10.0 29701 * @category Math 29702 * @param {number} number The number to round down. 29703 * @param {number} [precision=0] The precision to round down to. 29704 * @returns {number} Returns the rounded down number. 29705 * @example 29706 * 29707 * _.floor(4.006); 29708 * // => 4 29709 * 29710 * _.floor(0.046, 2); 29711 * // => 0.04 29712 * 29713 * _.floor(4060, -2); 29714 * // => 4000 29715 */ 29716 var floor = createRound('floor'); 29717 29718 /** 29719 * Computes the maximum value of `array`. If `array` is empty or falsey, 29720 * `undefined` is returned. 29721 * 29722 * @static 29723 * @since 0.1.0 29724 * @memberOf _ 29725 * @category Math 29726 * @param {Array} array The array to iterate over. 29727 * @returns {*} Returns the maximum value. 29728 * @example 29729 * 29730 * _.max([4, 2, 8, 6]); 29731 * // => 8 29732 * 29733 * _.max([]); 29734 * // => undefined 29735 */ 29736 function max(array) { 29737 return (array && array.length) 29738 ? baseExtremum(array, identity, baseGt) 29739 : undefined; 29740 } 29741 29742 /** 29743 * This method is like `_.max` except that it accepts `iteratee` which is 29744 * invoked for each element in `array` to generate the criterion by which 29745 * the value is ranked. The iteratee is invoked with one argument: (value). 29746 * 29747 * @static 29748 * @memberOf _ 29749 * @since 4.0.0 29750 * @category Math 29751 * @param {Array} array The array to iterate over. 29752 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 29753 * @returns {*} Returns the maximum value. 29754 * @example 29755 * 29756 * var objects = [{ 'n': 1 }, { 'n': 2 }]; 29757 * 29758 * _.maxBy(objects, function(o) { return o.n; }); 29759 * // => { 'n': 2 } 29760 * 29761 * // The `_.property` iteratee shorthand. 29762 * _.maxBy(objects, 'n'); 29763 * // => { 'n': 2 } 29764 */ 29765 function maxBy(array, iteratee) { 29766 return (array && array.length) 29767 ? baseExtremum(array, getIteratee(iteratee, 2), baseGt) 29768 : undefined; 29769 } 29770 29771 /** 29772 * Computes the mean of the values in `array`. 29773 * 29774 * @static 29775 * @memberOf _ 29776 * @since 4.0.0 29777 * @category Math 29778 * @param {Array} array The array to iterate over. 29779 * @returns {number} Returns the mean. 29780 * @example 29781 * 29782 * _.mean([4, 2, 8, 6]); 29783 * // => 5 29784 */ 29785 function mean(array) { 29786 return baseMean(array, identity); 29787 } 29788 29789 /** 29790 * This method is like `_.mean` except that it accepts `iteratee` which is 29791 * invoked for each element in `array` to generate the value to be averaged. 29792 * The iteratee is invoked with one argument: (value). 29793 * 29794 * @static 29795 * @memberOf _ 29796 * @since 4.7.0 29797 * @category Math 29798 * @param {Array} array The array to iterate over. 29799 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 29800 * @returns {number} Returns the mean. 29801 * @example 29802 * 29803 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; 29804 * 29805 * _.meanBy(objects, function(o) { return o.n; }); 29806 * // => 5 29807 * 29808 * // The `_.property` iteratee shorthand. 29809 * _.meanBy(objects, 'n'); 29810 * // => 5 29811 */ 29812 function meanBy(array, iteratee) { 29813 return baseMean(array, getIteratee(iteratee, 2)); 29814 } 29815 29816 /** 29817 * Computes the minimum value of `array`. If `array` is empty or falsey, 29818 * `undefined` is returned. 29819 * 29820 * @static 29821 * @since 0.1.0 29822 * @memberOf _ 29823 * @category Math 29824 * @param {Array} array The array to iterate over. 29825 * @returns {*} Returns the minimum value. 29826 * @example 29827 * 29828 * _.min([4, 2, 8, 6]); 29829 * // => 2 29830 * 29831 * _.min([]); 29832 * // => undefined 29833 */ 29834 function min(array) { 29835 return (array && array.length) 29836 ? baseExtremum(array, identity, baseLt) 29837 : undefined; 29838 } 29839 29840 /** 29841 * This method is like `_.min` except that it accepts `iteratee` which is 29842 * invoked for each element in `array` to generate the criterion by which 29843 * the value is ranked. The iteratee is invoked with one argument: (value). 29844 * 29845 * @static 29846 * @memberOf _ 29847 * @since 4.0.0 29848 * @category Math 29849 * @param {Array} array The array to iterate over. 29850 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 29851 * @returns {*} Returns the minimum value. 29852 * @example 29853 * 29854 * var objects = [{ 'n': 1 }, { 'n': 2 }]; 29855 * 29856 * _.minBy(objects, function(o) { return o.n; }); 29857 * // => { 'n': 1 } 29858 * 29859 * // The `_.property` iteratee shorthand. 29860 * _.minBy(objects, 'n'); 29861 * // => { 'n': 1 } 29862 */ 29863 function minBy(array, iteratee) { 29864 return (array && array.length) 29865 ? baseExtremum(array, getIteratee(iteratee, 2), baseLt) 29866 : undefined; 29867 } 29868 29869 /** 29870 * Multiply two numbers. 29871 * 29872 * @static 29873 * @memberOf _ 29874 * @since 4.7.0 29875 * @category Math 29876 * @param {number} multiplier The first number in a multiplication. 29877 * @param {number} multiplicand The second number in a multiplication. 29878 * @returns {number} Returns the product. 29879 * @example 29880 * 29881 * _.multiply(6, 4); 29882 * // => 24 29883 */ 29884 var multiply = createMathOperation(function(multiplier, multiplicand) { 29885 return multiplier * multiplicand; 29886 }, 1); 29887 29888 /**
vendor: 13,137 bytes, lines 29889-30327
29889 * Computes `number` rounded to `precision`. 29890 * 29891 * @static 29892 * @memberOf _ 29893 * @since 3.10.0 29894 * @category Math 29895 * @param {number} number The number to round. 29896 * @param {number} [precision=0] The precision to round to. 29897 * @returns {number} Returns the rounded number. 29898 * @example 29899 * 29900 * _.round(4.006); 29901 * // => 4 29902 * 29903 * _.round(4.006, 2); 29904 * // => 4.01 29905 * 29906 * _.round(4060, -2); 29907 * // => 4100 29908 */ 29909 var round = createRound('round'); 29910 29911 /** 29912 * Subtract two numbers. 29913 * 29914 * @static 29915 * @memberOf _ 29916 * @since 4.0.0 29917 * @category Math 29918 * @param {number} minuend The first number in a subtraction. 29919 * @param {number} subtrahend The second number in a subtraction. 29920 * @returns {number} Returns the difference. 29921 * @example 29922 * 29923 * _.subtract(6, 4); 29924 * // => 2 29925 */ 29926 var subtract = createMathOperation(function(minuend, subtrahend) { 29927 return minuend - subtrahend; 29928 }, 0); 29929 29930 /** 29931 * Computes the sum of the values in `array`. 29932 * 29933 * @static 29934 * @memberOf _ 29935 * @since 3.4.0 29936 * @category Math 29937 * @param {Array} array The array to iterate over. 29938 * @returns {number} Returns the sum. 29939 * @example 29940 * 29941 * _.sum([4, 2, 8, 6]); 29942 * // => 20 29943 */ 29944 function sum(array) { 29945 return (array && array.length) 29946 ? baseSum(array, identity) 29947 : 0; 29948 } 29949 29950 /** 29951 * This method is like `_.sum` except that it accepts `iteratee` which is 29952 * invoked for each element in `array` to generate the value to be summed. 29953 * The iteratee is invoked with one argument: (value). 29954 * 29955 * @static 29956 * @memberOf _ 29957 * @since 4.0.0 29958 * @category Math 29959 * @param {Array} array The array to iterate over. 29960 * @param {Function} [iteratee=_.identity] The iteratee invoked per element. 29961 * @returns {number} Returns the sum. 29962 * @example 29963 * 29964 * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }]; 29965 * 29966 * _.sumBy(objects, function(o) { return o.n; }); 29967 * // => 20 29968 * 29969 * // The `_.property` iteratee shorthand. 29970 * _.sumBy(objects, 'n'); 29971 * // => 20 29972 */ 29973 function sumBy(array, iteratee) { 29974 return (array && array.length) 29975 ? baseSum(array, getIteratee(iteratee, 2)) 29976 : 0; 29977 } 29978 29979 /*------------------------------------------------------------------------*/ 29980 29981 // Add methods that return wrapped values in chain sequences. 29982 lodash.after = after; 29983 lodash.ary = ary; 29984 lodash.assign = assign; 29985 lodash.assignIn = assignIn; 29986 lodash.assignInWith = assignInWith; 29987 lodash.assignWith = assignWith; 29988 lodash.at = at; 29989 lodash.before = before; 29990 lodash.bind = bind; 29991 lodash.bindAll = bindAll; 29992 lodash.bindKey = bindKey; 29993 lodash.castArray = castArray; 29994 lodash.chain = chain; 29995 lodash.chunk = chunk; 29996 lodash.compact = compact; 29997 lodash.concat = concat; 29998 lodash.cond = cond; 29999 lodash.conforms = conforms; 30000 lodash.constant = constant; 30001 lodash.countBy = countBy; 30002 lodash.create = create; 30003 lodash.curry = curry; 30004 lodash.curryRight = curryRight; 30005 lodash.debounce = debounce; 30006 lodash.defaults = defaults; 30007 lodash.defaultsDeep = defaultsDeep; 30008 lodash.defer = defer; 30009 lodash.delay = delay; 30010 lodash.difference = difference; 30011 lodash.differenceBy = differenceBy; 30012 lodash.differenceWith = differenceWith; 30013 lodash.drop = drop; 30014 lodash.dropRight = dropRight; 30015 lodash.dropRightWhile = dropRightWhile; 30016 lodash.dropWhile = dropWhile; 30017 lodash.fill = fill; 30018 lodash.filter = filter; 30019 lodash.flatMap = flatMap; 30020 lodash.flatMapDeep = flatMapDeep; 30021 lodash.flatMapDepth = flatMapDepth; 30022 lodash.flatten = flatten; 30023 lodash.flattenDeep = flattenDeep; 30024 lodash.flattenDepth = flattenDepth; 30025 lodash.flip = flip; 30026 lodash.flow = flow; 30027 lodash.flowRight = flowRight; 30028 lodash.fromPairs = fromPairs; 30029 lodash.functions = functions; 30030 lodash.functionsIn = functionsIn; 30031 lodash.groupBy = groupBy; 30032 lodash.initial = initial; 30033 lodash.intersection = intersection; 30034 lodash.intersectionBy = intersectionBy; 30035 lodash.intersectionWith = intersectionWith; 30036 lodash.invert = invert; 30037 lodash.invertBy = invertBy; 30038 lodash.invokeMap = invokeMap; 30039 lodash.iteratee = iteratee; 30040 lodash.keyBy = keyBy; 30041 lodash.keys = keys; 30042 lodash.keysIn = keysIn; 30043 lodash.map = map; 30044 lodash.mapKeys = mapKeys; 30045 lodash.mapValues = mapValues; 30046 lodash.matches = matches; 30047 lodash.matchesProperty = matchesProperty; 30048 lodash.memoize = memoize; 30049 lodash.merge = merge; 30050 lodash.mergeWith = mergeWith; 30051 lodash.method = method; 30052 lodash.methodOf = methodOf; 30053 lodash.mixin = mixin; 30054 lodash.negate = negate; 30055 lodash.nthArg = nthArg; 30056 lodash.omit = omit; 30057 lodash.omitBy = omitBy; 30058 lodash.once = once; 30059 lodash.orderBy = orderBy; 30060 lodash.over = over; 30061 lodash.overArgs = overArgs; 30062 lodash.overEvery = overEvery; 30063 lodash.overSome = overSome; 30064 lodash.partial = partial; 30065 lodash.partialRight = partialRight; 30066 lodash.partition = partition; 30067 lodash.pick = pick; 30068 lodash.pickBy = pickBy; 30069 lodash.property = property; 30070 lodash.propertyOf = propertyOf; 30071 lodash.pull = pull; 30072 lodash.pullAll = pullAll; 30073 lodash.pullAllBy = pullAllBy; 30074 lodash.pullAllWith = pullAllWith; 30075 lodash.pullAt = pullAt; 30076 lodash.range = range; 30077 lodash.rangeRight = rangeRight; 30078 lodash.rearg = rearg; 30079 lodash.reject = reject; 30080 lodash.remove = remove; 30081 lodash.rest = rest; 30082 lodash.reverse = reverse; 30083 lodash.sampleSize = sampleSize; 30084 lodash.set = set; 30085 lodash.setWith = setWith; 30086 lodash.shuffle = shuffle; 30087 lodash.slice = slice; 30088 lodash.sortBy = sortBy; 30089 lodash.sortedUniq = sortedUniq; 30090 lodash.sortedUniqBy = sortedUniqBy; 30091 lodash.split = split; 30092 lodash.spread = spread; 30093 lodash.tail = tail; 30094 lodash.take = take; 30095 lodash.takeRight = takeRight; 30096 lodash.takeRightWhile = takeRightWhile; 30097 lodash.takeWhile = takeWhile; 30098 lodash.tap = tap; 30099 lodash.throttle = throttle; 30100 lodash.thru = thru; 30101 lodash.toArray = toArray; 30102 lodash.toPairs = toPairs; 30103 lodash.toPairsIn = toPairsIn; 30104 lodash.toPath = toPath; 30105 lodash.toPlainObject = toPlainObject; 30106 lodash.transform = transform; 30107 lodash.unary = unary; 30108 lodash.union = union; 30109 lodash.unionBy = unionBy; 30110 lodash.unionWith = unionWith; 30111 lodash.uniq = uniq; 30112 lodash.uniqBy = uniqBy; 30113 lodash.uniqWith = uniqWith; 30114 lodash.unset = unset; 30115 lodash.unzip = unzip; 30116 lodash.unzipWith = unzipWith; 30117 lodash.update = update; 30118 lodash.updateWith = updateWith; 30119 lodash.values = values; 30120 lodash.valuesIn = valuesIn; 30121 lodash.without = without; 30122 lodash.words = words; 30123 lodash.wrap = wrap; 30124 lodash.xor = xor; 30125 lodash.xorBy = xorBy; 30126 lodash.xorWith = xorWith; 30127 lodash.zip = zip; 30128 lodash.zipObject = zipObject; 30129 lodash.zipObjectDeep = zipObjectDeep; 30130 lodash.zipWith = zipWith; 30131 30132 // Add aliases. 30133 lodash.entries = toPairs; 30134 lodash.entriesIn = toPairsIn; 30135 lodash.extend = assignIn; 30136 lodash.extendWith = assignInWith; 30137 30138 // Add methods to `lodash.prototype`. 30139 mixin(lodash, lodash); 30140 30141 /*------------------------------------------------------------------------*/ 30142 30143 // Add methods that return unwrapped values in chain sequences. 30144 lodash.add = add; 30145 lodash.attempt = attempt; 30146 lodash.camelCase = camelCase; 30147 lodash.capitalize = capitalize; 30148 lodash.ceil = ceil; 30149 lodash.clamp = clamp; 30150 lodash.clone = clone; 30151 lodash.cloneDeep = cloneDeep; 30152 lodash.cloneDeepWith = cloneDeepWith; 30153 lodash.cloneWith = cloneWith; 30154 lodash.conformsTo = conformsTo; 30155 lodash.deburr = deburr; 30156 lodash.defaultTo = defaultTo; 30157 lodash.divide = divide; 30158 lodash.endsWith = endsWith; 30159 lodash.eq = eq; 30160 lodash.escape = escape; 30161 lodash.escapeRegExp = escapeRegExp; 30162 lodash.every = every; 30163 lodash.find = find; 30164 lodash.findIndex = findIndex; 30165 lodash.findKey = findKey; 30166 lodash.findLast = findLast; 30167 lodash.findLastIndex = findLastIndex; 30168 lodash.findLastKey = findLastKey; 30169 lodash.floor = floor; 30170 lodash.forEach = forEach; 30171 lodash.forEachRight = forEachRight; 30172 lodash.forIn = forIn; 30173 lodash.forInRight = forInRight; 30174 lodash.forOwn = forOwn; 30175 lodash.forOwnRight = forOwnRight; 30176 lodash.get = get; 30177 lodash.gt = gt; 30178 lodash.gte = gte; 30179 lodash.has = has; 30180 lodash.hasIn = hasIn; 30181 lodash.head = head; 30182 lodash.identity = identity; 30183 lodash.includes = includes; 30184 lodash.indexOf = indexOf; 30185 lodash.inRange = inRange; 30186 lodash.invoke = invoke; 30187 lodash.isArguments = isArguments; 30188 lodash.isArray = isArray; 30189 lodash.isArrayBuffer = isArrayBuffer; 30190 lodash.isArrayLike = isArrayLike; 30191 lodash.isArrayLikeObject = isArrayLikeObject; 30192 lodash.isBoolean = isBoolean; 30193 lodash.isBuffer = isBuffer; 30194 lodash.isDate = isDate; 30195 lodash.isElement = isElement; 30196 lodash.isEmpty = isEmpty; 30197 lodash.isEqual = isEqual; 30198 lodash.isEqualWith = isEqualWith; 30199 lodash.isError = isError; 30200 lodash.isFinite = isFinite; 30201 lodash.isFunction = isFunction; 30202 lodash.isInteger = isInteger; 30203 lodash.isLength = isLength; 30204 lodash.isMap = isMap; 30205 lodash.isMatch = isMatch; 30206 lodash.isMatchWith = isMatchWith; 30207 lodash.isNaN = isNaN; 30208 lodash.isNative = isNative; 30209 lodash.isNil = isNil; 30210 lodash.isNull = isNull; 30211 lodash.isNumber = isNumber; 30212 lodash.isObject = isObject; 30213 lodash.isObjectLike = isObjectLike; 30214 lodash.isPlainObject = isPlainObject; 30215 lodash.isRegExp = isRegExp; 30216 lodash.isSafeInteger = isSafeInteger; 30217 lodash.isSet = isSet; 30218 lodash.isString = isString; 30219 lodash.isSymbol = isSymbol; 30220 lodash.isTypedArray = isTypedArray; 30221 lodash.isUndefined = isUndefined; 30222 lodash.isWeakMap = isWeakMap; 30223 lodash.isWeakSet = isWeakSet; 30224 lodash.join = join; 30225 lodash.kebabCase = kebabCase; 30226 lodash.last = last; 30227 lodash.lastIndexOf = lastIndexOf; 30228 lodash.lowerCase = lowerCase; 30229 lodash.lowerFirst = lowerFirst; 30230 lodash.lt = lt; 30231 lodash.lte = lte; 30232 lodash.max = max; 30233 lodash.maxBy = maxBy; 30234 lodash.mean = mean; 30235 lodash.meanBy = meanBy; 30236 lodash.min = min; 30237 lodash.minBy = minBy; 30238 lodash.stubArray = stubArray; 30239 lodash.stubFalse = stubFalse; 30240 lodash.stubObject = stubObject; 30241 lodash.stubString = stubString; 30242 lodash.stubTrue = stubTrue; 30243 lodash.multiply = multiply; 30244 lodash.nth = nth; 30245 lodash.noConflict = noConflict; 30246 lodash.noop = noop; 30247 lodash.now = now; 30248 lodash.pad = pad; 30249 lodash.padEnd = padEnd; 30250 lodash.padStart = padStart; 30251 lodash.parseInt = parseInt; 30252 lodash.random = random; 30253 lodash.reduce = reduce; 30254 lodash.reduceRight = reduceRight; 30255 lodash.repeat = repeat; 30256 lodash.replace = replace; 30257 lodash.result = result; 30258 lodash.round = round; 30259 lodash.runInContext = runInContext; 30260 lodash.sample = sample; 30261 lodash.size = size; 30262 lodash.snakeCase = snakeCase; 30263 lodash.some = some; 30264 lodash.sortedIndex = sortedIndex; 30265 lodash.sortedIndexBy = sortedIndexBy; 30266 lodash.sortedIndexOf = sortedIndexOf; 30267 lodash.sortedLastIndex = sortedLastIndex; 30268 lodash.sortedLastIndexBy = sortedLastIndexBy; 30269 lodash.sortedLastIndexOf = sortedLastIndexOf; 30270 lodash.startCase = startCase; 30271 lodash.startsWith = startsWith; 30272 lodash.subtract = subtract; 30273 lodash.sum = sum; 30274 lodash.sumBy = sumBy; 30275 lodash.template = template; 30276 lodash.times = times; 30277 lodash.toFinite = toFinite; 30278 lodash.toInteger = toInteger; 30279 lodash.toLength = toLength; 30280 lodash.toLower = toLower; 30281 lodash.toNumber = toNumber; 30282 lodash.toSafeInteger = toSafeInteger; 30283 lodash.toString = toString; 30284 lodash.toUpper = toUpper; 30285 lodash.trim = trim; 30286 lodash.trimEnd = trimEnd; 30287 lodash.trimStart = trimStart; 30288 lodash.truncate = truncate; 30289 lodash.unescape = unescape; 30290 lodash.uniqueId = uniqueId; 30291 lodash.upperCase = upperCase; 30292 lodash.upperFirst = upperFirst; 30293 30294 // Add aliases. 30295 lodash.each = forEach; 30296 lodash.eachRight = forEachRight; 30297 lodash.first = head; 30298 30299 mixin(lodash, (function() { 30300 var source = {}; 30301 baseForOwn(lodash, function(func, methodName) { 30302 if (!hasOwnProperty.call(lodash.prototype, methodName)) { 30303 source[methodName] = func; 30304 } 30305 }); 30306 return source; 30307 }()), { 'chain': false }); 30308 30309 /*------------------------------------------------------------------------*/ 30310 30311 /** 30312 * The semantic version number. 30313 * 30314 * @static 30315 * @memberOf _ 30316 * @type {string} 30317 */ 30318 lodash.VERSION = VERSION; 30319 30320 // Assign default placeholders. 30321 arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) { 30322 lodash[methodName].placeholder = lodash; 30323 }); 30324 30325 // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. 30326 arrayEach(['drop', 'take'], function(methodName, index) { 30327 LazyWrapper.prototype[methodName] = function(n) {
vendor: 7,434 bytes, lines 30328-30545
30328 n = n === undefined ? 1 : nativeMax(toInteger(n), 0); 30329 30330 var result = (this.__filtered__ && !index) 30331 ? new LazyWrapper(this) 30332 : this.clone(); 30333 30334 if (result.__filtered__) { 30335 result.__takeCount__ = nativeMin(n, result.__takeCount__); 30336 } else { 30337 result.__views__.push({ 30338 'size': nativeMin(n, MAX_ARRAY_LENGTH), 30339 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') 30340 }); 30341 } 30342 return result; 30343 }; 30344 30345 LazyWrapper.prototype[methodName + 'Right'] = function(n) { 30346 return this.reverse()[methodName](n).reverse(); 30347 }; 30348 }); 30349 30350 // Add `LazyWrapper` methods that accept an `iteratee` value. 30351 arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) { 30352 var type = index + 1, 30353 isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; 30354 30355 LazyWrapper.prototype[methodName] = function(iteratee) { 30356 var result = this.clone(); 30357 result.__iteratees__.push({ 30358 'iteratee': getIteratee(iteratee, 3), 30359 'type': type 30360 }); 30361 result.__filtered__ = result.__filtered__ || isFilter; 30362 return result; 30363 }; 30364 }); 30365 30366 // Add `LazyWrapper` methods for `_.head` and `_.last`. 30367 arrayEach(['head', 'last'], function(methodName, index) { 30368 var takeName = 'take' + (index ? 'Right' : ''); 30369 30370 LazyWrapper.prototype[methodName] = function() { 30371 return this[takeName](1).value()[0]; 30372 }; 30373 }); 30374 30375 // Add `LazyWrapper` methods for `_.initial` and `_.tail`. 30376 arrayEach(['initial', 'tail'], function(methodName, index) { 30377 var dropName = 'drop' + (index ? '' : 'Right'); 30378 30379 LazyWrapper.prototype[methodName] = function() { 30380 return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); 30381 }; 30382 }); 30383 30384 LazyWrapper.prototype.compact = function() { 30385 return this.filter(identity); 30386 }; 30387 30388 LazyWrapper.prototype.find = function(predicate) { 30389 return this.filter(predicate).head(); 30390 }; 30391 30392 LazyWrapper.prototype.findLast = function(predicate) { 30393 return this.reverse().find(predicate); 30394 }; 30395 30396 LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { 30397 if (typeof path == 'function') { 30398 return new LazyWrapper(this); 30399 } 30400 return this.map(function(value) { 30401 return baseInvoke(value, path, args); 30402 }); 30403 }); 30404 30405 LazyWrapper.prototype.reject = function(predicate) { 30406 return this.filter(negate(getIteratee(predicate))); 30407 }; 30408 30409 LazyWrapper.prototype.slice = function(start, end) { 30410 start = toInteger(start); 30411 30412 var result = this; 30413 if (result.__filtered__ && (start > 0 || end < 0)) { 30414 return new LazyWrapper(result); 30415 } 30416 if (start < 0) { 30417 result = result.takeRight(-start); 30418 } else if (start) { 30419 result = result.drop(start); 30420 } 30421 if (end !== undefined) { 30422 end = toInteger(end); 30423 result = end < 0 ? result.dropRight(-end) : result.take(end - start); 30424 } 30425 return result; 30426 }; 30427 30428 LazyWrapper.prototype.takeRightWhile = function(predicate) { 30429 return this.reverse().takeWhile(predicate).reverse(); 30430 }; 30431 30432 LazyWrapper.prototype.toArray = function() { 30433 return this.take(MAX_ARRAY_LENGTH); 30434 }; 30435 30436 // Add `LazyWrapper` methods to `lodash.prototype`. 30437 baseForOwn(LazyWrapper.prototype, function(func, methodName) { 30438 var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), 30439 isTaker = /^(?:head|last)$/.test(methodName), 30440 lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName], 30441 retUnwrapped = isTaker || /^find/.test(methodName); 30442 30443 if (!lodashFunc) { 30444 return; 30445 } 30446 lodash.prototype[methodName] = function() { 30447 var value = this.__wrapped__, 30448 args = isTaker ? [1] : arguments, 30449 isLazy = value instanceof LazyWrapper, 30450 iteratee = args[0], 30451 useLazy = isLazy || isArray(value); 30452 30453 var interceptor = function(value) { 30454 var result = lodashFunc.apply(lodash, arrayPush([value], args)); 30455 return (isTaker && chainAll) ? result[0] : result; 30456 }; 30457 30458 if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { 30459 // Avoid lazy use if the iteratee has a "length" value other than `1`. 30460 isLazy = useLazy = false; 30461 } 30462 var chainAll = this.__chain__, 30463 isHybrid = !!this.__actions__.length, 30464 isUnwrapped = retUnwrapped && !chainAll, 30465 onlyLazy = isLazy && !isHybrid; 30466 30467 if (!retUnwrapped && useLazy) { 30468 value = onlyLazy ? value : new LazyWrapper(this); 30469 var result = func.apply(value, args); 30470 result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); 30471 return new LodashWrapper(result, chainAll); 30472 } 30473 if (isUnwrapped && onlyLazy) { 30474 return func.apply(this, args); 30475 } 30476 result = this.thru(interceptor); 30477 return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result; 30478 }; 30479 }); 30480 30481 // Add `Array` methods to `lodash.prototype`. 30482 arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { 30483 var func = arrayProto[methodName], 30484 chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', 30485 retUnwrapped = /^(?:pop|shift)$/.test(methodName); 30486 30487 lodash.prototype[methodName] = function() { 30488 var args = arguments; 30489 if (retUnwrapped && !this.__chain__) { 30490 var value = this.value(); 30491 return func.apply(isArray(value) ? value : [], args); 30492 } 30493 return this[chainName](function(value) { 30494 return func.apply(isArray(value) ? value : [], args); 30495 }); 30496 }; 30497 }); 30498 30499 // Map minified method names to their real names. 30500 baseForOwn(LazyWrapper.prototype, function(func, methodName) { 30501 var lodashFunc = lodash[methodName]; 30502 if (lodashFunc) { 30503 var key = lodashFunc.name + ''; 30504 if (!hasOwnProperty.call(realNames, key)) { 30505 realNames[key] = []; 30506 } 30507 realNames[key].push({ 'name': methodName, 'func': lodashFunc }); 30508 } 30509 }); 30510 30511 realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{ 30512 'name': 'wrapper', 30513 'func': undefined 30514 }]; 30515 30516 // Add methods to `LazyWrapper`. 30517 LazyWrapper.prototype.clone = lazyClone; 30518 LazyWrapper.prototype.reverse = lazyReverse; 30519 LazyWrapper.prototype.value = lazyValue; 30520 30521 // Add chain sequence methods to the `lodash` wrapper. 30522 lodash.prototype.at = wrapperAt; 30523 lodash.prototype.chain = wrapperChain; 30524 lodash.prototype.commit = wrapperCommit; 30525 lodash.prototype.next = wrapperNext; 30526 lodash.prototype.plant = wrapperPlant; 30527 lodash.prototype.reverse = wrapperReverse; 30528 lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; 30529 30530 // Add lazy aliases. 30531 lodash.prototype.first = lodash.prototype.head; 30532 30533 if (symIterator) { 30534 lodash.prototype[symIterator] = wrapperToIterator; 30535 } 30536 return lodash; 30537 }); 30538 30539 /*--------------------------------------------------------------------------*/ 30540 30541 // Export lodash. 30542 var _ = runInContext(); 30543 30544 // Some AMD build optimizers, like r.js, check for condition patterns like: 30545 if (t
30545ypeof define == 'function' && typeof define.amd == 'object' && define.amd) { 30546 // Expose Lodash on the global object to prevent errors when Lodash is 30547 // loaded by a script tag in the presence of an AMD loader. 30548 // See http://requirejs.org/docs/errors.html#mismatch for more details. 30549 // Use `_.noConflict` to remove Lodash from the global object. 30550 root._ = _; 30551 30552 // Define as an anonymous module so, through path mapping, it can be 30553 // referenced as the "underscore" module. 30554 define(function() { 30555 return _; 30556 }); 30557 } 30558 // Check for `exports` after `define` in case a build optimizer adds it. 30559 else if (freeModule) { 30560 // Export for Node.js. 30561 (freeModule.exports = _)._ = _; 30562 // Export for CommonJS support. 30563 freeExports._ = _; 30564 } 30565 else { 30566 // Export to the global object. 30567 root._ = _; 30568 } 30569}.call(this)); 30570 30571}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) 30572},{}],29:[function(require,module,exports){ 30573/*! VelocityJS.org (1.4.0). (C) 2014 Julian Shapiro. MIT @license: en.wikipedia.org/wiki/MIT_License */ 30574 30575/************************* 30576 Velocity jQuery Shim 30577 *************************/ 30578
vendor: 193,527 bytes, lines 30579-35118
30579/*! VelocityJS.org jQuery Shim (1.0.1). (C) 2014 The jQuery Foundation. MIT @license: en.wikipedia.org/wiki/MIT_License. */ 30580 30581/* This file contains the jQuery functions that Velocity relies on, thereby removing Velocity's dependency on a full copy of jQuery, and allowing it to work in any environment. */ 30582/* These shimmed functions are only used if jQuery isn't present. If both this shim and jQuery are loaded, Velocity defaults to jQuery proper. */ 30583/* Browser support: Using this shim instead of jQuery proper removes support for IE8. */ 30584 30585(function(window) { 30586 "use strict"; 30587 /*************** 30588 Setup 30589 ***************/ 30590 30591 /* If jQuery is already loaded, there's no point in loading this shim. */ 30592 if (window.jQuery) { 30593 return; 30594 } 30595 30596 /* jQuery base. */ 30597 var $ = function(selector, context) { 30598 return new $.fn.init(selector, context); 30599 }; 30600 30601 /******************** 30602 Private Methods 30603 ********************/ 30604 30605 /* jQuery */ 30606 $.isWindow = function(obj) { 30607 /* jshint eqeqeq: false */ 30608 return obj && obj === obj.window; 30609 }; 30610 30611 /* jQuery */ 30612 $.type = function(obj) { 30613 if (!obj) { 30614 return obj + ""; 30615 } 30616 30617 return typeof obj === "object" || typeof obj === "function" ? 30618 class2type[toString.call(obj)] || "object" : 30619 typeof obj; 30620 }; 30621 30622 /* jQuery */ 30623 $.isArray = Array.isArray || function(obj) { 30624 return $.type(obj) === "array"; 30625 }; 30626 30627 /* jQuery */ 30628 function isArraylike(obj) { 30629 var length = obj.length, 30630 type = $.type(obj); 30631 30632 if (type === "function" || $.isWindow(obj)) { 30633 return false; 30634 } 30635 30636 if (obj.nodeType === 1 && length) { 30637 return true; 30638 } 30639 30640 return type === "array" || length === 0 || typeof length === "number" && length > 0 && (length - 1) in obj; 30641 } 30642 30643 /*************** 30644 $ Methods 30645 ***************/ 30646 30647 /* jQuery: Support removed for IE<9. */ 30648 $.isPlainObject = function(obj) { 30649 var key; 30650 30651 if (!obj || $.type(obj) !== "object" || obj.nodeType || $.isWindow(obj)) { 30652 return false; 30653 } 30654 30655 try { 30656 if (obj.constructor && 30657 !hasOwn.call(obj, "constructor") && 30658 !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) { 30659 return false; 30660 } 30661 } catch (e) { 30662 return false; 30663 } 30664 30665 for (key in obj) { 30666 } 30667 30668 return key === undefined || hasOwn.call(obj, key); 30669 }; 30670 30671 /* jQuery */ 30672 $.each = function(obj, callback, args) { 30673 var value, 30674 i = 0, 30675 length = obj.length, 30676 isArray = isArraylike(obj); 30677 30678 if (args) { 30679 if (isArray) { 30680 for (; i < length; i++) { 30681 value = callback.apply(obj[i], args); 30682 30683 if (value === false) { 30684 break; 30685 } 30686 } 30687 } else { 30688 for (i in obj) { 30689 if (!obj.hasOwnProperty(i)) { 30690 continue; 30691 } 30692 value = callback.apply(obj[i], args); 30693 30694 if (value === false) { 30695 break; 30696 } 30697 } 30698 } 30699 30700 } else { 30701 if (isArray) { 30702 for (; i < length; i++) { 30703 value = callback.call(obj[i], i, obj[i]); 30704 30705 if (value === false) { 30706 break; 30707 } 30708 } 30709 } else { 30710 for (i in obj) { 30711 if (!obj.hasOwnProperty(i)) { 30712 continue; 30713 } 30714 value = callback.call(obj[i], i, obj[i]); 30715 30716 if (value === false) { 30717 break; 30718 } 30719 } 30720 } 30721 } 30722 30723 return obj; 30724 }; 30725 30726 /* Custom */ 30727 $.data = function(node, key, value) { 30728 /* $.getData() */ 30729 if (value === undefined) { 30730 var getId = node[$.expando], 30731 store = getId && cache[getId]; 30732 30733 if (key === undefined) { 30734 return store; 30735 } else if (store) { 30736 if (key in store) { 30737 return store[key]; 30738 } 30739 } 30740 /* $.setData() */ 30741 } else if (key !== undefined) { 30742 var setId = node[$.expando] || (node[$.expando] = ++$.uuid); 30743 30744 cache[setId] = cache[setId] || {}; 30745 cache[setId][key] = value; 30746 30747 return value; 30748 } 30749 }; 30750 30751 /* Custom */ 30752 $.removeData = function(node, keys) { 30753 var id = node[$.expando], 30754 store = id && cache[id]; 30755 30756 if (store) { 30757 // Cleanup the entire store if no keys are provided. 30758 if (!keys) { 30759 delete cache[id]; 30760 } else { 30761 $.each(keys, function(_, key) { 30762 delete store[key]; 30763 }); 30764 } 30765 } 30766 }; 30767 30768 /* jQuery */ 30769 $.extend = function() { 30770 var src, copyIsArray, copy, name, options, clone, 30771 target = arguments[0] || {}, 30772 i = 1, 30773 length = arguments.length, 30774 deep = false; 30775 30776 if (typeof target === "boolean") { 30777 deep = target; 30778 30779 target = arguments[i] || {}; 30780 i++; 30781 } 30782 30783 if (typeof target !== "object" && $.type(target) !== "function") { 30784 target = {}; 30785 } 30786 30787 if (i === length) { 30788 target = this; 30789 i--; 30790 } 30791 30792 for (; i < length; i++) { 30793 if ((options = arguments[i])) { 30794 for (name in options) { 30795 if (!options.hasOwnProperty(name)) { 30796 continue; 30797 } 30798 src = target[name]; 30799 copy = options[name]; 30800 30801 if (target === copy) { 30802 continue; 30803 } 30804 30805 if (deep && copy && ($.isPlainObject(copy) || (copyIsArray = $.isArray(copy)))) { 30806 if (copyIsArray) { 30807 copyIsArray = false; 30808 clone = src && $.isArray(src) ? src : []; 30809 30810 } else { 30811 clone = src && $.isPlainObject(src) ? src : {}; 30812 } 30813 30814 target[name] = $.extend(deep, clone, copy); 30815 30816 } else if (copy !== undefined) { 30817 target[name] = copy; 30818 } 30819 } 30820 } 30821 } 30822 30823 return target; 30824 }; 30825 30826 /* jQuery 1.4.3 */ 30827 $.queue = function(elem, type, data) { 30828 function $makeArray(arr, results) { 30829 var ret = results || []; 30830 30831 if (arr) { 30832 if (isArraylike(Object(arr))) { 30833 /* $.merge */ 30834 (function(first, second) { 30835 var len = +second.length, 30836 j = 0, 30837 i = first.length; 30838 30839 while (j < len) { 30840 first[i++] = second[j++]; 30841 } 30842 30843 if (len !== len) { 30844 while (second[j] !== undefined) { 30845 first[i++] = second[j++]; 30846 } 30847 } 30848 30849 first.length = i; 30850 30851 return first; 30852 })(ret, typeof arr === "string" ? [arr] : arr); 30853 } else { 30854 [].push.call(ret, arr); 30855 } 30856 } 30857 30858 return ret; 30859 } 30860 30861 if (!elem) { 30862 return; 30863 } 30864 30865 type = (type || "fx") + "queue"; 30866 30867 var q = $.data(elem, type); 30868 30869 if (!data) { 30870 return q || []; 30871 } 30872 30873 if (!q || $.isArray(data)) { 30874 q = $.data(elem, type, $makeArray(data)); 30875 } else { 30876 q.push(data); 30877 } 30878 30879 return q; 30880 }; 30881 30882 /* jQuery 1.4.3 */ 30883 $.dequeue = function(elems, type) { 30884 /* Custom: Embed element iteration. */ 30885 $.each(elems.nodeType ? [elems] : elems, function(i, elem) { 30886 type = type || "fx"; 30887 30888 var queue = $.queue(elem, type), 30889 fn = queue.shift(); 30890 30891 if (fn === "inprogress") { 30892 fn = queue.shift(); 30893 } 30894 30895 if (fn) { 30896 if (type === "fx") { 30897 queue.unshift("inprogress"); 30898 } 30899 30900 fn.call(elem, function() { 30901 $.dequeue(elem, type); 30902 }); 30903 } 30904 }); 30905 }; 30906 30907 /****************** 30908 $.fn Methods 30909 ******************/ 30910 30911 /* jQuery */ 30912 $.fn = $.prototype = { 30913 init: function(selector) { 30914 /* Just return the element wrapped inside an array; don't proceed with the actual jQuery node wrapping process. */ 30915 if (selector.nodeType) { 30916 this[0] = selector; 30917 30918 return this; 30919 } else { 30920 throw new Error("Not a DOM node."); 30921 } 30922 }, 30923 offset: function() { 30924 /* jQuery altered code: Dropped disconnected DOM node checking. */ 30925 var box = this[0].getBoundingClientRect ? this[0].getBoundingClientRect() : {top: 0, left: 0}; 30926 30927 return { 30928 top: box.top + (window.pageYOffset || document.scrollTop || 0) - (document.clientTop || 0), 30929 left: box.left + (window.pageXOffset || document.scrollLeft || 0) - (document.clientLeft || 0) 30930 }; 30931 }, 30932 position: function() { 30933 /* jQuery */ 30934 function offsetParentFn(elem) { 30935 var offsetParent = elem.offsetParent; 30936 30937 while (offsetParent && offsetParent.nodeName.toLowerCase() !== "html" && offsetParent.style && offsetParent.style.position === "static") { 30938 offsetParent = offsetParent.offsetParent; 30939 } 30940 30941 return offsetParent || document; 30942 } 30943 30944 /* Zepto */ 30945 var elem = this[0], 30946 offsetParent = offsetParentFn(elem), 30947 offset = this.offset(), 30948 parentOffset = /^(?:body|html)$/i.test(offsetParent.nodeName) ? {top: 0, left: 0} : $(offsetParent).offset(); 30949 30950 offset.top -= parseFloat(elem.style.marginTop) || 0; 30951 offset.left -= parseFloat(elem.style.marginLeft) || 0; 30952 30953 if (offsetParent.style) { 30954 parentOffset.top += parseFloat(offsetParent.style.borderTopWidth) || 0; 30955 parentOffset.left += parseFloat(offsetParent.style.borderLeftWidth) || 0; 30956 } 30957 30958 return { 30959 top: offset.top - parentOffset.top, 30960 left: offset.left - parentOffset.left 30961 }; 30962 } 30963 }; 30964 30965 /********************** 30966 Private Variables 30967 **********************/ 30968 30969 /* For $.data() */ 30970 var cache = {}; 30971 $.expando = "velocity" + (new Date().getTime()); 30972 $.uuid = 0; 30973 30974 /* For $.queue() */ 30975 var class2type = {}, 30976 hasOwn = class2type.hasOwnProperty, 30977 toString = class2type.toString; 30978 30979 var types = "Boolean Number String Function Array Date RegExp Object Error".split(" "); 30980 for (var i = 0; i < types.length; i++) { 30981 class2type["[object " + types[i] + "]"] = types[i].toLowerCase(); 30982 } 30983 30984 /* Makes $(node) possible, without having to call init. */ 30985 $.fn.init.prototype = $.fn; 30986 30987 /* Globalize Velocity onto the window, and assign its Utilities property. */ 30988 window.Velocity = {Utilities: $}; 30989})(window); 30990 30991/****************** 30992 Velocity.js 30993 ******************/ 30994 30995(function(factory) { 30996 "use strict"; 30997 /* CommonJS module. */ 30998 if (typeof module === "object" && typeof module.exports === "object") { 30999 module.exports = factory(); 31000 /* AMD module. */ 31001 } else if (typeof define === "function" && define.amd) { 31002 define(factory); 31003 /* Browser globals. */ 31004 } else { 31005 factory(); 31006 } 31007}(function() { 31008 "use strict"; 31009 return function(global, window, document, undefined) { 31010 31011 /*************** 31012 Summary 31013 ***************/ 31014 31015 /* 31016 - CSS: CSS stack that works independently from the rest of Velocity. 31017 - animate(): Core animation method that iterates over the targeted elements and queues the incoming call onto each element individually. 31018 - Pre-Queueing: Prepare the element for animation by instantiating its data cache and processing the call's options. 31019 - Queueing: The logic that runs once the call has reached its point of execution in the element's $.queue() stack. 31020 Most logic is placed here to avoid risking it becoming stale (if the element's properties have changed). 31021 - Pushing: Consolidation of the tween data followed by its push onto the global in-progress calls container. 31022 - tick(): The single requestAnimationFrame loop responsible for tweening all in-progress calls. 31023 - completeCall(): Handles the cleanup process for each Velocity call. 31024 */ 31025 31026 /********************* 31027 Helper Functions 31028 *********************/ 31029 31030 /* IE detection. Gist: https://gist.github.com/julianshapiro/9098609 */ 31031 var IE = (function() { 31032 if (document.documentMode) { 31033 return document.documentMode; 31034 } else { 31035 for (var i = 7; i > 4; i--) { 31036 var div = document.createElement("div"); 31037 31038 div.innerHTML = "<!--[if IE " + i + "]><span></span><![endif]-->"; 31039 31040 if (div.getElementsByTagName("span").length) { 31041 div = null; 31042 31043 return i; 31044 } 31045 } 31046 } 31047 31048 return undefined; 31049 })(); 31050 31051 /* rAF shim. Gist: https://gist.github.com/julianshapiro/9497513 */ 31052 var rAFShim = (function() { 31053 var timeLast = 0; 31054 31055 return window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || function(callback) { 31056 var timeCurrent = (new Date()).getTime(), 31057 timeDelta; 31058 31059 /* Dynamically set delay on a per-tick basis to match 60fps. */ 31060 /* Technique by Erik Moller. MIT license: https://gist.github.com/paulirish/1579671 */ 31061 timeDelta = Math.max(0, 16 - (timeCurrent - timeLast)); 31062 timeLast = timeCurrent + timeDelta; 31063 31064 return setTimeout(function() { 31065 callback(timeCurrent + timeDelta); 31066 }, timeDelta); 31067 }; 31068 })(); 31069 31070 var performance = (function() { 31071 var perf = window.performance || {}; 31072 31073 if (!perf.hasOwnProperty("now")) { 31074 var nowOffset = perf.timing && perf.timing.domComplete ? perf.timing.domComplete : (new Date()).getTime(); 31075 31076 perf.now = function() { 31077 return (new Date()).getTime() - nowOffset; 31078 }; 31079 } 31080 return perf; 31081 })(); 31082 31083 /* Array compacting. Copyright Lo-Dash. MIT License: https://github.com/lodash/lodash/blob/master/LICENSE.txt */ 31084 function compactSparseArray(array) { 31085 var index = -1, 31086 length = array ? array.length : 0, 31087 result = []; 31088 31089 while (++index < length) { 31090 var value = array[index]; 31091 31092 if (value) { 31093 result.push(value); 31094 } 31095 } 31096 31097 return result; 31098 } 31099 31100 function sanitizeElements(elements) { 31101 /* Unwrap jQuery/Zepto objects. */ 31102 if (Type.isWrapped(elements)) { 31103 elements = [].slice.call(elements); 31104 /* Wrap a single element in an array so that $.each() can iterate with the element instead of its node's children. */ 31105 } else if (Type.isNode(elements)) { 31106 elements = [elements]; 31107 } 31108 31109 return elements; 31110 } 31111 31112 var Type = { 31113 isNumber: function(variable) { 31114 return (typeof variable === "number"); 31115 }, 31116 isString: function(variable) { 31117 return (typeof variable === "string"); 31118 }, 31119 isArray: Array.isArray || function(variable) { 31120 return Object.prototype.toString.call(variable) === "[object Array]"; 31121 }, 31122 isFunction: function(variable) { 31123 return Object.prototype.toString.call(variable) === "[object Function]"; 31124 }, 31125 isNode: function(variable) { 31126 return variable && variable.nodeType; 31127 }, 31128 /* Copyright Martin Bohm. MIT License: https://gist.github.com/Tomalak/818a78a226a0738eaade */ 31129 isNodeList: function(variable) { 31130 return typeof variable === "object" && 31131 /^\[object (HTMLCollection|NodeList|Object)\]$/.test(Object.prototype.toString.call(variable)) && 31132 variable.length !== undefined && 31133 (variable.length === 0 || (typeof variable[0] === "object" && variable[0].nodeType > 0)); 31134 }, 31135 /* Determine if variable is an array-like wrapped jQuery, Zepto or similar element. */ 31136 isWrapped: function(variable) { 31137 return variable && (Type.isArray(variable) || (Type.isNumber(variable.length) && !Type.isString(variable) && !Type.isFunction(variable))); 31138 }, 31139 isSVG: function(variable) { 31140 return window.SVGElement && (variable instanceof window.SVGElement); 31141 }, 31142 isEmptyObject: function(variable) { 31143 for (var name in variable) { 31144 if (variable.hasOwnProperty(name)) { 31145 return false; 31146 } 31147 } 31148 31149 return true; 31150 } 31151 }; 31152 31153 /***************** 31154 Dependencies 31155 *****************/ 31156 31157 var $, 31158 isJQuery = false; 31159 31160 if (global.fn && global.fn.jquery) { 31161 $ = global; 31162 isJQuery = true; 31163 } else { 31164 $ = window.Velocity.Utilities; 31165 } 31166 31167 if (IE <= 8 && !isJQuery) { 31168 throw new Error("Velocity: IE8 and below require jQuery to be loaded before Velocity."); 31169 } else if (IE <= 7) { 31170 /* Revert to jQuery's $.animate(), and lose Velocity's extra features. */ 31171 jQuery.fn.velocity = jQuery.fn.animate; 31172 31173 /* Now that $.fn.velocity is aliased, abort this Velocity declaration. */ 31174 return; 31175 } 31176 31177 /***************** 31178 Constants 31179 *****************/ 31180 31181 var DURATION_DEFAULT = 400, 31182 EASING_DEFAULT = "swing"; 31183 31184 /************* 31185 State 31186 *************/ 31187 31188 var Velocity = { 31189 /* Container for page-wide Velocity state data. */ 31190 State: { 31191 /* Detect mobile devices to determine if mobileHA should be turned on. */ 31192 isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent), 31193 /* The mobileHA option's behavior changes on older Android devices (Gingerbread, versions 2.3.3-2.3.7). */ 31194 isAndroid: /Android/i.test(navigator.userAgent), 31195 isGingerbread: /Android 2\.3\.[3-7]/i.test(navigator.userAgent), 31196 isChrome: window.chrome, 31197 isFirefox: /Firefox/i.test(navigator.userAgent), 31198 /* Create a cached element for re-use when checking for CSS property prefixes. */ 31199 prefixElement: document.createElement("div"), 31200 /* Cache every prefix match to avoid repeating lookups. */ 31201 prefixMatches: {}, 31202 /* Cache the anchor used for animating window scrolling. */ 31203 scrollAnchor: null, 31204 /* Cache the browser-specific property names associated with the scroll anchor. */ 31205 scrollPropertyLeft: null, 31206 scrollPropertyTop: null, 31207 /* Keep track of whether our RAF tick is running. */ 31208 isTicking: false, 31209 /* Container for every in-progress call to Velocity. */ 31210 calls: [], 31211 delayedElements: { 31212 count: 0 31213 } 31214 }, 31215 /* Velocity's custom CSS stack. Made global for unit testing. */ 31216 CSS: {/* Defined below. */}, 31217 /* A shim of the jQuery utility functions used by Velocity -- provided by Velocity's optional jQuery shim. */ 31218 Utilities: $, 31219 /* Container for the user's custom animation redirects that are referenced by name in place of the properties map argument. */ 31220 Redirects: {/* Manually registered by the user. */}, 31221 Easings: {/* Defined below. */}, 31222 /* Attempt to use ES6 Promises by default. Users can override this with a third-party promises library. */ 31223 Promise: window.Promise, 31224 /* Velocity option defaults, which can be overriden by the user. */ 31225 defaults: { 31226 queue: "", 31227 duration: DURATION_DEFAULT, 31228 easing: EASING_DEFAULT, 31229 begin: undefined, 31230 complete: undefined, 31231 progress: undefined, 31232 display: undefined, 31233 visibility: undefined, 31234 loop: false, 31235 delay: false, 31236 mobileHA: true, 31237 /* Advanced: Set to false to prevent property values from being cached between consecutive Velocity-initiated chain calls. */ 31238 _cacheValues: true, 31239 /* Advanced: Set to false if the promise should always resolve on empty element lists. */ 31240 promiseRejectEmpty: true 31241 }, 31242 /* A design goal of Velocity is to cache data wherever possible in order to avoid DOM requerying. Accordingly, each element has a data cache. */ 31243 init: function(element) { 31244 $.data(element, "velocity", { 31245 /* Store whether this is an SVG element, since its properties are retrieved and updated differently than standard HTML elements. */ 31246 isSVG: Type.isSVG(element), 31247 /* Keep track of whether the element is currently being animated by Velocity. 31248 This is used to ensure that property values are not transferred between non-consecutive (stale) calls. */ 31249 isAnimating: false, 31250 /* A reference to the element's live computedStyle object. Learn more here: https://developer.mozilla.org/en/docs/Web/API/window.getComputedStyle */ 31251 computedStyle: null, 31252 /* Tween data is cached for each animation on the element so that data can be passed across calls -- 31253 in particular, end values are used as subsequent start values in consecutive Velocity calls. */ 31254 tweensContainer: null, 31255 /* The full root property values of each CSS hook being animated on this element are cached so that: 31256 1) Concurrently-animating hooks sharing the same root can have their root values' merged into one while tweening. 31257 2) Post-hook-injection root values can be transferred over to consecutively chained Velocity calls as starting root values. */ 31258 rootPropertyValueCache: {}, 31259 /* A cache for transform updates, which must be manually flushed via CSS.flushTransformCache(). */ 31260 transformCache: {} 31261 }); 31262 }, 31263 /* A parallel to jQuery's $.css(), used for getting/setting Velocity's hooked CSS properties. */ 31264 hook: null, /* Defined below. */ 31265 /* Velocity-wide animation time remapping for testing purposes. */ 31266 mock: false, 31267 version: {major: 1, minor: 4, patch: 0}, 31268 /* Set to 1 or 2 (most verbose) to output debug info to console. */ 31269 debug: false, 31270 /* Use rAF high resolution timestamp when available */ 31271 timestamp: true, 31272 /* Pause all animations */ 31273 pauseAll: function(queueName) { 31274 var currentTime = (new Date()).getTime(); 31275 31276 $.each(Velocity.State.calls, function(i, activeCall) { 31277 31278 if (activeCall) { 31279 31280 /* If we have a queueName and this call is not on that queue, skip */ 31281 if (queueName !== undefined && ((activeCall[2].queue !== queueName) || (activeCall[2].queue === false))) { 31282 return true; 31283 } 31284 31285 /* Set call to paused */ 31286 activeCall[5] = { 31287 resume: false 31288 }; 31289 } 31290 }); 31291 31292 /* Pause timers on any currently delayed calls */ 31293 $.each(Velocity.State.delayedElements, function(k, element) { 31294 if (!element) { 31295 return; 31296 } 31297 pauseDelayOnElement(element, currentTime); 31298 }); 31299 }, 31300 /* Resume all animations */ 31301 resumeAll: function(queueName) { 31302 var currentTime = (new Date()).getTime(); 31303 31304 $.each(Velocity.State.calls, function(i, activeCall) { 31305 31306 if (activeCall) { 31307 31308 /* If we have a queueName and this call is not on that queue, skip */ 31309 if (queueName !== undefined && ((activeCall[2].queue !== queueName) || (activeCall[2].queue === false))) { 31310 return true; 31311 } 31312 31313 /* Set call to resumed if it was paused */ 31314 if (activeCall[5]) { 31315 activeCall[5].resume = true; 31316 } 31317 } 31318 }); 31319 /* Resume timers on any currently delayed calls */ 31320 $.each(Velocity.State.delayedElements, function(k, element) { 31321 if (!element) { 31322 return; 31323 } 31324 resumeDelayOnElement(element, currentTime); 31325 }); 31326 } 31327 }; 31328 31329 /* Retrieve the appropriate scroll anchor and property name for the browser: https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY */ 31330 if (window.pageYOffset !== undefined) { 31331 Velocity.State.scrollAnchor = window; 31332 Velocity.State.scrollPropertyLeft = "pageXOffset"; 31333 Velocity.State.scrollPropertyTop = "pageYOffset"; 31334 } else { 31335 Velocity.State.scrollAnchor = document.documentElement || document.body.parentNode || document.body; 31336 Velocity.State.scrollPropertyLeft = "scrollLeft"; 31337 Velocity.State.scrollPropertyTop = "scrollTop"; 31338 } 31339 31340 /* Shorthand alias for jQuery's $.data() utility. */ 31341 function Data(element) { 31342 /* Hardcode a reference to the plugin name. */ 31343 var response = $.data(element, "velocity"); 31344 31345 /* jQuery <=1.4.2 returns null instead of undefined when no match is found. We normalize this behavior. */ 31346 return response === null ? undefined : response; 31347 } 31348 31349 /************** 31350 Delay Timer 31351 **************/ 31352 31353 function pauseDelayOnElement(element, currentTime) { 31354 /* Check for any delay timers, and pause the set timeouts (while preserving time data) 31355 to be resumed when the "resume" command is issued */ 31356 var data = Data(element); 31357 if (data && data.delayTimer && !data.delayPaused) { 31358 data.delayRemaining = data.delay - currentTime + data.delayBegin; 31359 data.delayPaused = true; 31360 clearTimeout(data.delayTimer.setTimeout); 31361 } 31362 } 31363 31364 function resumeDelayOnElement(element, currentTime) { 31365 /* Check for any paused timers and resume */ 31366 var data = Data(element); 31367 if (data && data.delayTimer && data.delayPaused) { 31368 /* If the element was mid-delay, re initiate the timeout with the remaining delay */ 31369 data.delayPaused = false; 31370 data.delayTimer.setTimeout = setTimeout(data.delayTimer.next, data.delayRemaining); 31371 } 31372 } 31373 31374 31375 31376 /************** 31377 Easing 31378 **************/ 31379 31380 /* Step easing generator. */ 31381 function generateStep(steps) { 31382 return function(p) { 31383 return Math.round(p * steps) * (1 / steps); 31384 }; 31385 } 31386 31387 /* Bezier curve function generator. Copyright Gaetan Renaudeau. MIT License: http://en.wikipedia.org/wiki/MIT_License */ 31388 function generateBezier(mX1, mY1, mX2, mY2) { 31389 var NEWTON_ITERATIONS = 4, 31390 NEWTON_MIN_SLOPE = 0.001, 31391 SUBDIVISION_PRECISION = 0.0000001, 31392 SUBDIVISION_MAX_ITERATIONS = 10, 31393 kSplineTableSize = 11, 31394 kSampleStepSize = 1.0 / (kSplineTableSize - 1.0), 31395 float32ArraySupported = "Float32Array" in window; 31396 31397 /* Must contain four arguments. */ 31398 if (arguments.length !== 4) { 31399 return false; 31400 } 31401 31402 /* Arguments must be numbers. */ 31403 for (var i = 0; i < 4; ++i) { 31404 if (typeof arguments[i] !== "number" || isNaN(arguments[i]) || !isFinite(arguments[i])) { 31405 return false; 31406 } 31407 } 31408 31409 /* X values must be in the [0, 1] range. */ 31410 mX1 = Math.min(mX1, 1); 31411 mX2 = Math.min(mX2, 1); 31412 mX1 = Math.max(mX1, 0); 31413 mX2 = Math.max(mX2, 0); 31414 31415 var mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); 31416 31417 function A(aA1, aA2) { 31418 return 1.0 - 3.0 * aA2 + 3.0 * aA1; 31419 } 31420 function B(aA1, aA2) { 31421 return 3.0 * aA2 - 6.0 * aA1; 31422 } 31423 function C(aA1) { 31424 return 3.0 * aA1; 31425 } 31426 31427 function calcBezier(aT, aA1, aA2) { 31428 return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; 31429 } 31430 31431 function getSlope(aT, aA1, aA2) { 31432 return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); 31433 } 31434 31435 function newtonRaphsonIterate(aX, aGuessT) { 31436 for (var i = 0; i < NEWTON_ITERATIONS; ++i) { 31437 var currentSlope = getSlope(aGuessT, mX1, mX2); 31438 31439 if (currentSlope === 0.0) { 31440 return aGuessT; 31441 } 31442 31443 var currentX = calcBezier(aGuessT, mX1, mX2) - aX; 31444 aGuessT -= currentX / currentSlope; 31445 } 31446 31447 return aGuessT; 31448 } 31449 31450 function calcSampleValues() { 31451 for (var i = 0; i < kSplineTableSize; ++i) { 31452 mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2); 31453 } 31454 } 31455 31456 function binarySubdivide(aX, aA, aB) { 31457 var currentX, currentT, i = 0; 31458 31459 do { 31460 currentT = aA + (aB - aA) / 2.0; 31461 currentX = calcBezier(currentT, mX1, mX2) - aX; 31462 if (currentX > 0.0) { 31463 aB = currentT; 31464 } else { 31465 aA = currentT; 31466 } 31467 } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); 31468 31469 return currentT; 31470 } 31471 31472 function getTForX(aX) { 31473 var intervalStart = 0.0, 31474 currentSample = 1, 31475 lastSample = kSplineTableSize - 1; 31476 31477 for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) { 31478 intervalStart += kSampleStepSize; 31479 } 31480 31481 --currentSample; 31482 31483 var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]), 31484 guessForT = intervalStart + dist * kSampleStepSize, 31485 initialSlope = getSlope(guessForT, mX1, mX2); 31486 31487 if (initialSlope >= NEWTON_MIN_SLOPE) { 31488 return newtonRaphsonIterate(aX, guessForT); 31489 } else if (initialSlope === 0.0) { 31490 return guessForT; 31491 } else { 31492 return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize); 31493 } 31494 } 31495 31496 var _precomputed = false; 31497 31498 function precompute() { 31499 _precomputed = true; 31500 if (mX1 !== mY1 || mX2 !== mY2) { 31501 calcSampleValues(); 31502 } 31503 } 31504 31505 var f = function(aX) { 31506 if (!_precomputed) { 31507 precompute(); 31508 } 31509 if (mX1 === mY1 && mX2 === mY2) { 31510 return aX; 31511 } 31512 if (aX === 0) { 31513 return 0; 31514 } 31515 if (aX === 1) { 31516 return 1; 31517 } 31518 31519 return calcBezier(getTForX(aX), mY1, mY2); 31520 }; 31521 31522 f.getControlPoints = function() { 31523 return [{x: mX1, y: mY1}, {x: mX2, y: mY2}]; 31524 }; 31525 31526 var str = "generateBezier(" + [mX1, mY1, mX2, mY2] + ")"; 31527 f.toString = function() { 31528 return str; 31529 }; 31530 31531 return f; 31532 } 31533 31534 /* Runge-Kutta spring physics function generator. Adapted from Framer.js, copyright Koen Bok. MIT License: http://en.wikipedia.org/wiki/MIT_License */ 31535 /* Given a tension, friction, and duration, a simulation at 60FPS will first run without a defined duration in order to calculate the full path. A second pass 31536 then adjusts the time delta -- using the relation between actual time and duration -- to calculate the path for the duration-constrained animation. */ 31537 var generateSpringRK4 = (function() { 31538 function springAccelerationForState(state) { 31539 return (-state.tension * state.x) - (state.friction * state.v); 31540 } 31541 31542 function springEvaluateStateWithDerivative(initialState, dt, derivative) { 31543 var state = { 31544 x: initialState.x + derivative.dx * dt, 31545 v: initialState.v + derivative.dv * dt, 31546 tension: initialState.tension, 31547 friction: initialState.friction 31548 }; 31549 31550 return {dx: state.v, dv: springAccelerationForState(state)}; 31551 } 31552 31553 function springIntegrateState(state, dt) { 31554 var a = { 31555 dx: state.v, 31556 dv: springAccelerationForState(state) 31557 }, 31558 b = springEvaluateStateWithDerivative(state, dt * 0.5, a), 31559 c = springEvaluateStateWithDerivative(state, dt * 0.5, b), 31560 d = springEvaluateStateWithDerivative(state, dt, c), 31561 dxdt = 1.0 / 6.0 * (a.dx + 2.0 * (b.dx + c.dx) + d.dx), 31562 dvdt = 1.0 / 6.0 * (a.dv + 2.0 * (b.dv + c.dv) + d.dv); 31563 31564 state.x = state.x + dxdt * dt; 31565 state.v = state.v + dvdt * dt; 31566 31567 return state; 31568 } 31569 31570 return function springRK4Factory(tension, friction, duration) { 31571 31572 var initState = { 31573 x: -1, 31574 v: 0, 31575 tension: null, 31576 friction: null 31577 }, 31578 path = [0], 31579 time_lapsed = 0, 31580 tolerance = 1 / 10000, 31581 DT = 16 / 1000, 31582 have_duration, dt, last_state; 31583 31584 tension = parseFloat(tension) || 500; 31585 friction = parseFloat(friction) || 20; 31586 duration = duration || null; 31587 31588 initState.tension = tension; 31589 initState.friction = friction; 31590 31591 have_duration = duration !== null; 31592 31593 /* Calculate the actual time it takes for this animation to complete with the provided conditions. */ 31594 if (have_duration) { 31595 /* Run the simulation without a duration. */ 31596 time_lapsed = springRK4Factory(tension, friction); 31597 /* Compute the adjusted time delta. */ 31598 dt = time_lapsed / duration * DT; 31599 } else { 31600 dt = DT; 31601 } 31602 31603 while (true) { 31604 /* Next/step function .*/ 31605 last_state = springIntegrateState(last_state || initState, dt); 31606 /* Store the position. */ 31607 path.push(1 + last_state.x); 31608 time_lapsed += 16; 31609 /* If the change threshold is reached, break. */ 31610 if (!(Math.abs(last_state.x) > tolerance && Math.abs(last_state.v) > tolerance)) { 31611 break; 31612 } 31613 } 31614 31615 /* If duration is not defined, return the actual time required for completing this animation. Otherwise, return a closure that holds the 31616 computed path and returns a snapshot of the position according to a given percentComplete. */ 31617 return !have_duration ? time_lapsed : function(percentComplete) { 31618 return path[ (percentComplete * (path.length - 1)) | 0 ]; 31619 }; 31620 }; 31621 }()); 31622 31623 /* jQuery easings. */ 31624 Velocity.Easings = { 31625 linear: function(p) { 31626 return p; 31627 }, 31628 swing: function(p) { 31629 return 0.5 - Math.cos(p * Math.PI) / 2; 31630 }, 31631 /* Bonus "spring" easing, which is a less exaggerated version of easeInOutElastic. */ 31632 spring: function(p) { 31633 return 1 - (Math.cos(p * 4.5 * Math.PI) * Math.exp(-p * 6)); 31634 } 31635 }; 31636 31637 /* CSS3 and Robert Penner easings. */ 31638 $.each( 31639 [ 31640 ["ease", [0.25, 0.1, 0.25, 1.0]], 31641 ["ease-in", [0.42, 0.0, 1.00, 1.0]], 31642 ["ease-out", [0.00, 0.0, 0.58, 1.0]], 31643 ["ease-in-out", [0.42, 0.0, 0.58, 1.0]], 31644 ["easeInSine", [0.47, 0, 0.745, 0.715]], 31645 ["easeOutSine", [0.39, 0.575, 0.565, 1]], 31646 ["easeInOutSine", [0.445, 0.05, 0.55, 0.95]], 31647 ["easeInQuad", [0.55, 0.085, 0.68, 0.53]], 31648 ["easeOutQuad", [0.25, 0.46, 0.45, 0.94]], 31649 ["easeInOutQuad", [0.455, 0.03, 0.515, 0.955]], 31650 ["easeInCubic", [0.55, 0.055, 0.675, 0.19]], 31651 ["easeOutCubic", [0.215, 0.61, 0.355, 1]], 31652 ["easeInOutCubic", [0.645, 0.045, 0.355, 1]], 31653 ["easeInQuart", [0.895, 0.03, 0.685, 0.22]], 31654 ["easeOutQuart", [0.165, 0.84, 0.44, 1]], 31655 ["easeInOutQuart", [0.77, 0, 0.175, 1]], 31656 ["easeInQuint", [0.755, 0.05, 0.855, 0.06]], 31657 ["easeOutQuint", [0.23, 1, 0.32, 1]], 31658 ["easeInOutQuint", [0.86, 0, 0.07, 1]], 31659 ["easeInExpo", [0.95, 0.05, 0.795, 0.035]], 31660 ["easeOutExpo", [0.19, 1, 0.22, 1]], 31661 ["easeInOutExpo", [1, 0, 0, 1]], 31662 ["easeInCirc", [0.6, 0.04, 0.98, 0.335]], 31663 ["easeOutCirc", [0.075, 0.82, 0.165, 1]], 31664 ["easeInOutCirc", [0.785, 0.135, 0.15, 0.86]] 31665 ], function(i, easingArray) { 31666 Velocity.Easings[easingArray[0]] = generateBezier.apply(null, easingArray[1]); 31667 }); 31668 31669 /* Determine the appropriate easing type given an easing input. */ 31670 function getEasing(value, duration) { 31671 var easing = value; 31672 31673 /* The easing option can either be a string that references a pre-registered easing, 31674 or it can be a two-/four-item array of integers to be converted into a bezier/spring function. */ 31675 if (Type.isString(value)) { 31676 /* Ensure that the easing has been assigned to jQuery's Velocity.Easings object. */ 31677 if (!Velocity.Easings[value]) { 31678 easing = false; 31679 } 31680 } else if (Type.isArray(value) && value.length === 1) { 31681 easing = generateStep.apply(null, value); 31682 } else if (Type.isArray(value) && value.length === 2) { 31683 /* springRK4 must be passed the animation's duration. */ 31684 /* Note: If the springRK4 array contains non-numbers, generateSpringRK4() returns an easing 31685 function generated with default tension and friction values. */ 31686 easing = generateSpringRK4.apply(null, value.concat([duration])); 31687 } else if (Type.isArray(value) && value.length === 4) { 31688 /* Note: If the bezier array contains non-numbers, generateBezier() returns false. */ 31689 easing = generateBezier.apply(null, value); 31690 } else { 31691 easing = false; 31692 } 31693 31694 /* Revert to the Velocity-wide default easing type, or fall back to "swing" (which is also jQuery's default) 31695 if the Velocity-wide default has been incorrectly modified. */ 31696 if (easing === false) { 31697 if (Velocity.Easings[Velocity.defaults.easing]) { 31698 easing = Velocity.defaults.easing; 31699 } else { 31700 easing = EASING_DEFAULT; 31701 } 31702 } 31703 31704 return easing; 31705 } 31706 31707 /***************** 31708 CSS Stack 31709 *****************/ 31710 31711 /* The CSS object is a highly condensed and performant CSS stack that fully replaces jQuery's. 31712 It handles the validation, getting, and setting of both standard CSS properties and CSS property hooks. */ 31713 /* Note: A "CSS" shorthand is aliased so that our code is easier to read. */ 31714 var CSS = Velocity.CSS = { 31715 /************* 31716 RegEx 31717 *************/ 31718 31719 RegEx: { 31720 isHex: /^#([A-f\d]{3}){1,2}$/i, 31721 /* Unwrap a property value's surrounding text, e.g. "rgba(4, 3, 2, 1)" ==> "4, 3, 2, 1" and "rect(4px 3px 2px 1px)" ==> "4px 3px 2px 1px". */ 31722 valueUnwrap: /^[A-z]+\((.*)\)$/i, 31723 wrappedValueAlreadyExtracted: /[0-9.]+ [0-9.]+ [0-9.]+( [0-9.]+)?/, 31724 /* Split a multi-value property into an array of subvalues, e.g. "rgba(4, 3, 2, 1) 4px 3px 2px 1px" ==> [ "rgba(4, 3, 2, 1)", "4px", "3px", "2px", "1px" ]. */ 31725 valueSplit: /([A-z]+\(.+\))|(([A-z0-9#-.]+?)(?=\s|$))/ig 31726 }, 31727 /************ 31728 Lists 31729 ************/ 31730 31731 Lists: { 31732 colors: ["fill", "stroke", "stopColor", "color", "backgroundColor", "borderColor", "borderTopColor", "borderRightColor", "borderBottomColor", "borderLeftColor", "outlineColor"], 31733 transformsBase: ["translateX", "translateY", "scale", "scaleX", "scaleY", "skewX", "skewY", "rotateZ"], 31734 transforms3D: ["transformPerspective", "translateZ", "scaleZ", "rotateX", "rotateY"], 31735 units: [ 31736 "%", // relative 31737 "em", "ex", "ch", "rem", // font relative 31738 "vw", "vh", "vmin", "vmax", // viewport relative 31739 "cm", "mm", "Q", "in", "pc", "pt", "px", // absolute lengths 31740 "deg", "grad", "rad", "turn", // angles 31741 "s", "ms" // time 31742 ], 31743 colorNames: { 31744 "aliceblue": "240,248,255", 31745 "antiquewhite": "250,235,215", 31746 "aquamarine": "127,255,212", 31747 "aqua": "0,255,255", 31748 "azure": "240,255,255", 31749 "beige": "245,245,220", 31750 "bisque": "255,228,196", 31751 "black": "0,0,0", 31752 "blanchedalmond": "255,235,205", 31753 "blueviolet": "138,43,226", 31754 "blue": "0,0,255", 31755 "brown": "165,42,42", 31756 "burlywood": "222,184,135", 31757 "cadetblue": "95,158,160", 31758 "chartreuse": "127,255,0", 31759 "chocolate": "210,105,30", 31760 "coral": "255,127,80", 31761 "cornflowerblue": "100,149,237", 31762 "cornsilk": "255,248,220", 31763 "crimson": "220,20,60", 31764 "cyan": "0,255,255", 31765 "darkblue": "0,0,139", 31766 "darkcyan": "0,139,139", 31767 "darkgoldenrod": "184,134,11", 31768 "darkgray": "169,169,169", 31769 "darkgrey": "169,169,169", 31770 "darkgreen": "0,100,0", 31771 "darkkhaki": "189,183,107", 31772 "darkmagenta": "139,0,139", 31773 "darkolivegreen": "85,107,47", 31774 "darkorange": "255,140,0", 31775 "darkorchid": "153,50,204", 31776 "darkred": "139,0,0", 31777 "darksalmon": "233,150,122", 31778 "darkseagreen": "143,188,143", 31779 "darkslateblue": "72,61,139", 31780 "darkslategray": "47,79,79", 31781 "darkturquoise": "0,206,209", 31782 "darkviolet": "148,0,211", 31783 "deeppink": "255,20,147", 31784 "deepskyblue": "0,191,255", 31785 "dimgray": "105,105,105", 31786 "dimgrey": "105,105,105", 31787 "dodgerblue": "30,144,255", 31788 "firebrick": "178,34,34", 31789 "floralwhite": "255,250,240", 31790 "forestgreen": "34,139,34", 31791 "fuchsia": "255,0,255", 31792 "gainsboro": "220,220,220", 31793 "ghostwhite": "248,248,255", 31794 "gold": "255,215,0", 31795 "goldenrod": "218,165,32", 31796 "gray": "128,128,128", 31797 "grey": "128,128,128", 31798 "greenyellow": "173,255,47", 31799 "green": "0,128,0", 31800 "honeydew": "240,255,240", 31801 "hotpink": "255,105,180", 31802 "indianred": "205,92,92", 31803 "indigo": "75,0,130", 31804 "ivory": "255,255,240", 31805 "khaki": "240,230,140", 31806 "lavenderblush": "255,240,245", 31807 "lavender": "230,230,250", 31808 "lawngreen": "124,252,0", 31809 "lemonchiffon": "255,250,205", 31810 "lightblue": "173,216,230", 31811 "lightcoral": "240,128,128", 31812 "lightcyan": "224,255,255", 31813 "lightgoldenrodyellow": "250,250,210", 31814 "lightgray": "211,211,211", 31815 "lightgrey": "211,211,211", 31816 "lightgreen": "144,238,144", 31817 "lightpink": "255,182,193", 31818 "lightsalmon": "255,160,122", 31819 "lightseagreen": "32,178,170", 31820 "lightskyblue": "135,206,250", 31821 "lightslategray": "119,136,153", 31822 "lightsteelblue": "176,196,222", 31823 "lightyellow": "255,255,224", 31824 "limegreen": "50,205,50", 31825 "lime": "0,255,0", 31826 "linen": "250,240,230", 31827 "magenta": "255,0,255", 31828 "maroon": "128,0,0", 31829 "mediumaquamarine": "102,205,170", 31830 "mediumblue": "0,0,205", 31831 "mediumorchid": "186,85,211", 31832 "mediumpurple": "147,112,219", 31833 "mediumseagreen": "60,179,113", 31834 "mediumslateblue": "123,104,238", 31835 "mediumspringgreen": "0,250,154", 31836 "mediumturquoise": "72,209,204", 31837 "mediumvioletred": "199,21,133", 31838 "midnightblue": "25,25,112", 31839 "mintcream": "245,255,250", 31840 "mistyrose": "255,228,225", 31841 "moccasin": "255,228,181", 31842 "navajowhite": "255,222,173", 31843 "navy": "0,0,128", 31844 "oldlace": "253,245,230", 31845 "olivedrab": "107,142,35", 31846 "olive": "128,128,0", 31847 "orangered": "255,69,0", 31848 "orange": "255,165,0", 31849 "orchid": "218,112,214", 31850 "palegoldenrod": "238,232,170", 31851 "palegreen": "152,251,152", 31852 "paleturquoise": "175,238,238", 31853 "palevioletred": "219,112,147", 31854 "papayawhip": "255,239,213", 31855 "peachpuff": "255,218,185", 31856 "peru": "205,133,63", 31857 "pink": "255,192,203", 31858 "plum": "221,160,221", 31859 "powderblue": "176,224,230", 31860 "purple": "128,0,128", 31861 "red": "255,0,0", 31862 "rosybrown": "188,143,143", 31863 "royalblue": "65,105,225", 31864 "saddlebrown": "139,69,19", 31865 "salmon": "250,128,114", 31866 "sandybrown": "244,164,96", 31867 "seagreen": "46,139,87", 31868 "seashell": "255,245,238", 31869 "sienna": "160,82,45", 31870 "silver": "192,192,192", 31871 "skyblue": "135,206,235", 31872 "slateblue": "106,90,205", 31873 "slategray": "112,128,144", 31874 "snow": "255,250,250", 31875 "springgreen": "0,255,127", 31876 "steelblue": "70,130,180", 31877 "tan": "210,180,140", 31878 "teal": "0,128,128", 31879 "thistle": "216,191,216", 31880 "tomato": "255,99,71", 31881 "turquoise": "64,224,208", 31882 "violet": "238,130,238", 31883 "wheat": "245,222,179", 31884 "whitesmoke": "245,245,245", 31885 "white": "255,255,255", 31886 "yellowgreen": "154,205,50", 31887 "yellow": "255,255,0" 31888 } 31889 }, 31890 /************ 31891 Hooks 31892 ************/ 31893 31894 /* Hooks allow a subproperty (e.g. "boxShadowBlur") of a compound-value CSS property 31895 (e.g. "boxShadow: X Y Blur Spread Color") to be animated as if it were a discrete property. */ 31896 /* Note: Beyond enabling fine-grained property animation, hooking is necessary since Velocity only 31897 tweens properties with single numeric values; unlike CSS transitions, Velocity does not interpolate compound-values. */ 31898 Hooks: { 31899 /******************** 31900 Registration 31901 ********************/ 31902 31903 /* Templates are a concise way of indicating which subproperties must be individually registered for each compound-value CSS property. */ 31904 /* Each template consists of the compound-value's base name, its constituent subproperty names, and those subproperties' default values. */ 31905 templates: { 31906 "textShadow": ["Color X Y Blur", "black 0px 0px 0px"], 31907 "boxShadow": ["Color X Y Blur Spread", "black 0px 0px 0px 0px"], 31908 "clip": ["Top Right Bottom Left", "0px 0px 0px 0px"], 31909 "backgroundPosition": ["X Y", "0% 0%"], 31910 "transformOrigin": ["X Y Z", "50% 50% 0px"], 31911 "perspectiveOrigin": ["X Y", "50% 50%"] 31912 }, 31913 /* A "registered" hook is one that has been converted from its template form into a live, 31914 tweenable property. It contains data to associate it with its root property. */ 31915 registered: { 31916 /* Note: A registered hook looks like this ==> textShadowBlur: [ "textShadow", 3 ], 31917 which consists of the subproperty's name, the associated root property's name, 31918 and the subproperty's position in the root's value. */ 31919 }, 31920 /* Convert the templates into individual hooks then append them to the registered object above. */ 31921 register: function() { 31922 /* Color hooks registration: Colors are defaulted to white -- as opposed to black -- since colors that are 31923 currently set to "transparent" default to their respective template below when color-animated, 31924 and white is typically a closer match to transparent than black is. An exception is made for text ("color"), 31925 which is almost always set closer to black than white. */ 31926 for (var i = 0; i < CSS.Lists.colors.length; i++) { 31927 var rgbComponents = (CSS.Lists.colors[i] === "color") ? "0 0 0 1" : "255 255 255 1"; 31928 CSS.Hooks.templates[CSS.Lists.colors[i]] = ["Red Green Blue Alpha", rgbComponents]; 31929 } 31930 31931 var rootProperty, 31932 hookTemplate, 31933 hookNames; 31934 31935 /* In IE, color values inside compound-value properties are positioned at the end the value instead of at the beginning. 31936 Thus, we re-arrange the templates accordingly. */ 31937 if (IE) { 31938 for (rootProperty in CSS.Hooks.templates) { 31939 if (!CSS.Hooks.templates.hasOwnProperty(rootProperty)) { 31940 continue; 31941 } 31942 hookTemplate = CSS.Hooks.templates[rootProperty]; 31943 hookNames = hookTemplate[0].split(" "); 31944 31945 var defaultValues = hookTemplate[1].match(CSS.RegEx.valueSplit); 31946 31947 if (hookNames[0] === "Color") { 31948 /* Reposition both the hook's name and its default value to the end of their respective strings. */ 31949 hookNames.push(hookNames.shift()); 31950 defaultValues.push(defaultValues.shift()); 31951 31952 /* Replace the existing template for the hook's root property. */ 31953 CSS.Hooks.templates[rootProperty] = [hookNames.join(" "), defaultValues.join(" ")]; 31954 } 31955 } 31956 } 31957 31958 /* Hook registration. */ 31959 for (rootProperty in CSS.Hooks.templates) { 31960 if (!CSS.Hooks.templates.hasOwnProperty(rootProperty)) { 31961 continue; 31962 } 31963 hookTemplate = CSS.Hooks.templates[rootProperty]; 31964 hookNames = hookTemplate[0].split(" "); 31965 31966 for (var j in hookNames) { 31967 if (!hookNames.hasOwnProperty(j)) { 31968 continue; 31969 } 31970 var fullHookName = rootProperty + hookNames[j], 31971 hookPosition = j; 31972 31973 /* For each hook, register its full name (e.g. textShadowBlur) with its root property (e.g. textShadow) 31974 and the hook's position in its template's default value string. */ 31975 CSS.Hooks.registered[fullHookName] = [rootProperty, hookPosition]; 31976 } 31977 } 31978 }, 31979 /***************************** 31980 Injection and Extraction 31981 *****************************/ 31982 31983 /* Look up the root property associated with the hook (e.g. return "textShadow" for "textShadowBlur"). */ 31984 /* Since a hook cannot be set directly (the browser won't recognize it), style updating for hooks is routed through the hook's root property. */ 31985 getRoot: function(property) { 31986 var hookData = CSS.Hooks.registered[property]; 31987 31988 if (hookData) { 31989 return hookData[0]; 31990 } else { 31991 /* If there was no hook match, return the property name untouched. */ 31992 return property; 31993 } 31994 }, 31995 getUnit: function(str, start) { 31996 var unit = (str.substr(start || 0, 5).match(/^[a-z%]+/) || [])[0] || ""; 31997 31998 if (unit && CSS.Lists.units.indexOf(unit) >= 0) { 31999 return unit; 32000 } 32001 return ""; 32002 }, 32003 fixColors: function(str) { 32004 return str.replace(/(rgba?\(\s*)?(\b[a-z]+\b)/g, function($0, $1, $2) { 32005 if (CSS.Lists.colorNames.hasOwnProperty($2)) { 32006 return ($1 ? $1 : "rgba(") + CSS.Lists.colorNames[$2] + ($1 ? "" : ",1)"); 32007 } 32008 return $1 + $2; 32009 }); 32010 }, 32011 /* Convert any rootPropertyValue, null or otherwise, into a space-delimited list of hook values so that 32012 the targeted hook can be injected or extracted at its standard position. */ 32013 cleanRootPropertyValue: function(rootProperty, rootPropertyValue) { 32014 /* If the rootPropertyValue is wrapped with "rgb()", "clip()", etc., remove the wrapping to normalize the value before manipulation. */ 32015 if (CSS.RegEx.valueUnwrap.test(rootPropertyValue)) { 32016 rootPropertyValue = rootPropertyValue.match(CSS.RegEx.valueUnwrap)[1]; 32017 } 32018 32019 /* If rootPropertyValue is a CSS null-value (from which there's inherently no hook value to extract), 32020 default to the root's default value as defined in CSS.Hooks.templates. */ 32021 /* Note: CSS null-values include "none", "auto", and "transparent". They must be converted into their 32022 zero-values (e.g. textShadow: "none" ==> textShadow: "0px 0px 0px black") for hook manipulation to proceed. */ 32023 if (CSS.Values.isCSSNullValue(rootPropertyValue)) { 32024 rootPropertyValue = CSS.Hooks.templates[rootProperty][1]; 32025 } 32026 32027 return rootPropertyValue; 32028 }, 32029 /* Extracted the hook's value from its root property's value. This is used to get the starting value of an animating hook. */ 32030 extractValue: function(fullHookName, rootPropertyValue) { 32031 var hookData = CSS.Hooks.registered[fullHookName]; 32032 32033 if (hookData) { 32034 var hookRoot = hookData[0], 32035 hookPosition = hookData[1]; 32036 32037 rootPropertyValue = CSS.Hooks.cleanRootPropertyValue(hookRoot, rootPropertyValue); 32038 32039 /* Split rootPropertyValue into its constituent hook values then grab the desired hook at its standard position. */ 32040 return rootPropertyValue.toString().match(CSS.RegEx.valueSplit)[hookPosition]; 32041 } else { 32042 /* If the provided fullHookName isn't a registered hook, return the rootPropertyValue that was passed in. */ 32043 return rootPropertyValue; 32044 } 32045 }, 32046 /* Inject the hook's value into its root property's value. This is used to piece back together the root property 32047 once Velocity has updated one of its individually hooked values through tweening. */ 32048 injectValue: function(fullHookName, hookValue, rootPropertyValue) { 32049 var hookData = CSS.Hooks.registered[fullHookName]; 32050 32051 if (hookData) { 32052 var hookRoot = hookData[0], 32053 hookPosition = hookData[1], 32054 rootPropertyValueParts, 32055 rootPropertyValueUpdated; 32056 32057 rootPropertyValue = CSS.Hooks.cleanRootPropertyValue(hookRoot, rootPropertyValue); 32058 32059 /* Split rootPropertyValue into its individual hook values, replace the targeted value with hookValue, 32060 then reconstruct the rootPropertyValue string. */ 32061 rootPropertyValueParts = rootPropertyValue.toString().match(CSS.RegEx.valueSplit); 32062 rootPropertyValueParts[hookPosition] = hookValue; 32063 rootPropertyValueUpdated = rootPropertyValueParts.join(" "); 32064 32065 return rootPropertyValueUpdated; 32066 } else { 32067 /* If the provided fullHookName isn't a registered hook, return the rootPropertyValue that was passed in. */ 32068 return rootPropertyValue; 32069 } 32070 } 32071 }, 32072 /******************* 32073 Normalizations 32074 *******************/ 32075 32076 /* Normalizations standardize CSS property manipulation by pollyfilling browser-specific implementations (e.g. opacity) 32077 and reformatting special properties (e.g. clip, rgba) to look like standard ones. */ 32078 Normalizations: { 32079 /* Normalizations are passed a normalization target (either the property's name, its extracted value, or its injected value), 32080 the targeted element (which may need to be queried), and the targeted property value. */ 32081 registered: { 32082 clip: function(type, element, propertyValue) { 32083 switch (type) { 32084 case "name": 32085 return "clip"; 32086 /* Clip needs to be unwrapped and stripped of its commas during extraction. */ 32087 case "extract": 32088 var extracted; 32089 32090 /* If Velocity also extracted this value, skip extraction. */ 32091 if (CSS.RegEx.wrappedValueAlreadyExtracted.test(propertyValue)) { 32092 extracted = propertyValue; 32093 } else { 32094 /* Remove the "rect()" wrapper. */ 32095 extracted = propertyValue.toString().match(CSS.RegEx.valueUnwrap); 32096 32097 /* Strip off commas. */ 32098 extracted = extracted ? extracted[1].replace(/,(\s+)?/g, " ") : propertyValue; 32099 } 32100 32101 return extracted; 32102 /* Clip needs to be re-wrapped during injection. */ 32103 case "inject": 32104 return "rect(" + propertyValue + ")"; 32105 } 32106 }, 32107 blur: function(type, element, propertyValue) { 32108 switch (type) { 32109 case "name": 32110 return Velocity.State.isFirefox ? "filter" : "-webkit-filter"; 32111 case "extract": 32112 var extracted = parseFloat(propertyValue); 32113 32114 /* If extracted is NaN, meaning the value isn't already extracted. */ 32115 if (!(extracted || extracted === 0)) { 32116 var blurComponent = propertyValue.toString().match(/blur\(([0-9]+[A-z]+)\)/i); 32117 32118 /* If the filter string had a blur component, return just the blur value and unit type. */ 32119 if (blurComponent) { 32120 extracted = blurComponent[1]; 32121 /* If the component doesn't exist, default blur to 0. */ 32122 } else { 32123 extracted = 0; 32124 } 32125 } 32126 32127 return extracted; 32128 /* Blur needs to be re-wrapped during injection. */ 32129 case "inject": 32130 /* For the blur effect to be fully de-applied, it needs to be set to "none" instead of 0. */ 32131 if (!parseFloat(propertyValue)) { 32132 return "none"; 32133 } else { 32134 return "blur(" + propertyValue + ")"; 32135 } 32136 } 32137 }, 32138 /* <=IE8 do not support the standard opacity property. They use filter:alpha(opacity=INT) instead. */ 32139 opacity: function(type, element, propertyValue) { 32140 if (IE <= 8) { 32141 switch (type) { 32142 case "name": 32143 return "filter"; 32144 case "extract": 32145 /* <=IE8 return a "filter" value of "alpha(opacity=\d{1,3})". 32146 Extract the value and convert it to a decimal value to match the standard CSS opacity property's formatting. */ 32147 var extracted = propertyValue.toString().match(/alpha\(opacity=(.*)\)/i); 32148 32149 if (extracted) { 32150 /* Convert to decimal value. */ 32151 propertyValue = extracted[1] / 100; 32152 } else { 32153 /* When extracting opacity, default to 1 since a null value means opacity hasn't been set. */ 32154 propertyValue = 1; 32155 } 32156 32157 return propertyValue; 32158 case "inject": 32159 /* Opacified elements are required to have their zoom property set to a non-zero value. */ 32160 element.style.zoom = 1; 32161 32162 /* Setting the filter property on elements with certain font property combinations can result in a 32163 highly unappealing ultra-bolding effect. There's no way to remedy this throughout a tween, but dropping the 32164 value altogether (when opacity hits 1) at leasts ensures that the glitch is gone post-tweening. */ 32165 if (parseFloat(propertyValue) >= 1) { 32166 return ""; 32167 } else { 32168 /* As per the filter property's spec, convert the decimal value to a whole number and wrap the value. */ 32169 return "alpha(opacity=" + parseInt(parseFloat(propertyValue) * 100, 10) + ")"; 32170 } 32171 } 32172 /* With all other browsers, normalization is not required; return the same values that were passed in. */ 32173 } else { 32174 switch (type) { 32175 case "name": 32176 return "opacity"; 32177 case "extract": 32178 return propertyValue; 32179 case "inject": 32180 return propertyValue; 32181 } 32182 } 32183 } 32184 }, 32185 /***************************** 32186 Batched Registrations 32187 *****************************/ 32188 32189 /* Note: Batched normalizations extend the CSS.Normalizations.registered object. */ 32190 register: function() { 32191 32192 /***************** 32193 Transforms 32194 *****************/ 32195 32196 /* Transforms are the subproperties contained by the CSS "transform" property. Transforms must undergo normalization 32197 so that they can be referenced in a properties map by their individual names. */ 32198 /* Note: When transforms are "set", they are actually assigned to a per-element transformCache. When all transform 32199 setting is complete complete, CSS.flushTransformCache() must be manually called to flush the values to the DOM. 32200 Transform setting is batched in this way to improve performance: the transform style only needs to be updated 32201 once when multiple transform subproperties are being animated simultaneously. */ 32202 /* Note: IE9 and Android Gingerbread have support for 2D -- but not 3D -- transforms. Since animating unsupported 32203 transform properties results in the browser ignoring the *entire* transform string, we prevent these 3D values 32204 from being normalized for these browsers so that tweening skips these properties altogether 32205 (since it will ignore them as being unsupported by the browser.) */ 32206 if ((!IE || IE > 9) && !Velocity.State.isGingerbread) { 32207 /* Note: Since the standalone CSS "perspective" property and the CSS transform "perspective" subproperty 32208 share the same name, the latter is given a unique token within Velocity: "transformPerspective". */ 32209 CSS.Lists.transformsBase = CSS.Lists.transformsBase.concat(CSS.Lists.transforms3D); 32210 } 32211 32212 for (var i = 0; i < CSS.Lists.transformsBase.length; i++) { 32213 /* Wrap the dynamically generated normalization function in a new scope so that transformName's value is 32214 paired with its respective function. (Otherwise, all functions would take the final for loop's transformName.) */ 32215 (function() { 32216 var transformName = CSS.Lists.transformsBase[i]; 32217 32218 CSS.Normalizations.registered[transformName] = function(type, element, propertyValue) { 32219 switch (type) { 32220 /* The normalized property name is the parent "transform" property -- the property that is actually set in CSS. */ 32221 case "name": 32222 return "transform"; 32223 /* Transform values are cached onto a per-element transformCache object. */ 32224 case "extract": 32225 /* If this transform has yet to be assigned a value, return its null value. */ 32226 if (Data(element) === undefined || Data(element).transformCache[transformName] === undefined) { 32227 /* Scale CSS.Lists.transformsBase default to 1 whereas all other transform properties default to 0. */ 32228 return /^scale/i.test(transformName) ? 1 : 0; 32229 /* When transform values are set, they are wrapped in parentheses as per the CSS spec. 32230 Thus, when extracting their values (for tween calculations), we strip off the parentheses. */ 32231 } 32232 return Data(element).transformCache[transformName].replace(/[()]/g, ""); 32233 case "inject": 32234 var invalid = false; 32235 32236 /* If an individual transform property contains an unsupported unit type, the browser ignores the *entire* transform property. 32237 Thus, protect users from themselves by skipping setting for transform values supplied with invalid unit types. */ 32238 /* Switch on the base transform type; ignore the axis by removing the last letter from the transform's name. */ 32239 switch (transformName.substr(0, transformName.length - 1)) { 32240 /* Whitelist unit types for each transform. */ 32241 case "translate": 32242 invalid = !/(%|px|em|rem|vw|vh|\d)$/i.test(propertyValue); 32243 break; 32244 /* Since an axis-free "scale" property is supported as well, a little hack is used here to detect it by chopping off its last letter. */ 32245 case "scal": 32246 case "scale": 32247 /* Chrome on Android has a bug in which scaled elements blur if their initial scale 32248 value is below 1 (which can happen with forcefeeding). Thus, we detect a yet-unset scale property 32249 and ensure that its first value is always 1. More info: http://stackoverflow.com/questions/10417890/css3-animations-with-transform-causes-blurred-elements-on-webkit/10417962#10417962 */ 32250 if (Velocity.State.isAndroid && Data(element).transformCache[transformName] === undefined && propertyValue < 1) { 32251 propertyValue = 1; 32252 } 32253 32254 invalid = !/(\d)$/i.test(propertyValue); 32255 break; 32256 case "skew": 32257 invalid = !/(deg|\d)$/i.test(propertyValue); 32258 break; 32259 case "rotate": 32260 invalid = !/(deg|\d)$/i.test(propertyValue); 32261 break; 32262 } 32263 32264 if (!invalid) { 32265 /* As per the CSS spec, wrap the value in parentheses. */ 32266 Data(element).transformCache[transformName] = "(" + propertyValue + ")"; 32267 } 32268 32269 /* Although the value is set on the transformCache object, return the newly-updated value for the calling code to process as normal. */ 32270 return Data(element).transformCache[transformName]; 32271 } 32272 }; 32273 })(); 32274 } 32275 32276 /************* 32277 Colors 32278 *************/ 32279 32280 /* Since Velocity only animates a single numeric value per property, color animation is achieved by hooking the individual RGBA components of CSS color properties. 32281 Accordingly, color values must be normalized (e.g. "#ff0000", "red", and "rgb(255, 0, 0)" ==> "255 0 0 1") so that their components can be injected/extracted by CSS.Hooks logic. */ 32282 for (var j = 0; j < CSS.Lists.colors.length; j++) { 32283 /* Wrap the dynamically generated normalization function in a new scope so that colorName's value is paired with its respective function. 32284 (Otherwise, all functions would take the final for loop's colorName.) */ 32285 (function() { 32286 var colorName = CSS.Lists.colors[j]; 32287 32288 /* Note: In IE<=8, which support rgb but not rgba, color properties are reverted to rgb by stripping off the alpha component. */ 32289 CSS.Normalizations.registered[colorName] = function(type, element, propertyValue) { 32290 switch (type) { 32291 case "name": 32292 return colorName; 32293 /* Convert all color values into the rgb format. (Old IE can return hex values and color names instead of rgb/rgba.) */ 32294 case "extract": 32295 var extracted; 32296 32297 /* If the color is already in its hookable form (e.g. "255 255 255 1") due to having been previously extracted, skip extraction. */ 32298 if (CSS.RegEx.wrappedValueAlreadyExtracted.test(propertyValue)) { 32299 extracted = propertyValue; 32300 } else { 32301 var converted, 32302 colorNames = { 32303 black: "rgb(0, 0, 0)", 32304 blue: "rgb(0, 0, 255)", 32305 gray: "rgb(128, 128, 128)", 32306 green: "rgb(0, 128, 0)", 32307 red: "rgb(255, 0, 0)", 32308 white: "rgb(255, 255, 255)" 32309 }; 32310 32311 /* Convert color names to rgb. */ 32312 if (/^[A-z]+$/i.test(propertyValue)) { 32313 if (colorNames[propertyValue] !== undefined) { 32314 converted = colorNames[propertyValue]; 32315 } else { 32316 /* If an unmatched color name is provided, default to black. */ 32317 converted = colorNames.black; 32318 } 32319 /* Convert hex values to rgb. */ 32320 } else if (CSS.RegEx.isHex.test(propertyValue)) { 32321 converted = "rgb(" + CSS.Values.hexToRgb(propertyValue).join(" ") + ")"; 32322 /* If the provided color doesn't match any of the accepted color formats, default to black. */ 32323 } else if (!(/^rgba?\(/i.test(propertyValue))) { 32324 converted = colorNames.black; 32325 } 32326 32327 /* Remove the surrounding "rgb/rgba()" string then replace commas with spaces and strip 32328 repeated spaces (in case the value included spaces to begin with). */ 32329 extracted = (converted || propertyValue).toString().match(CSS.RegEx.valueUnwrap)[1].replace(/,(\s+)?/g, " "); 32330 } 32331 32332 /* So long as this isn't <=IE8, add a fourth (alpha) component if it's missing and default it to 1 (visible). */ 32333 if ((!IE || IE > 8) && extracted.split(" ").length === 3) { 32334 extracted += " 1"; 32335 } 32336 32337 return extracted; 32338 case "inject": 32339 /* If we have a pattern then it might already have the right values */ 32340 if (/^rgb/.test(propertyValue)) { 32341 return propertyValue; 32342 } 32343 32344 /* If this is IE<=8 and an alpha component exists, strip it off. */ 32345 if (IE <= 8) { 32346 if (propertyValue.split(" ").length === 4) { 32347 propertyValue = propertyValue.split(/\s+/).slice(0, 3).join(" "); 32348 } 32349 /* Otherwise, add a fourth (alpha) component if it's missing and default it to 1 (visible). */ 32350 } else if (propertyValue.split(" ").length === 3) { 32351 propertyValue += " 1"; 32352 } 32353 32354 /* Re-insert the browser-appropriate wrapper("rgb/rgba()"), insert commas, and strip off decimal units 32355 on all values but the fourth (R, G, and B only accept whole numbers). */ 32356 return (IE <= 8 ? "rgb" : "rgba") + "(" + propertyValue.replace(/\s+/g, ",").replace(/\.(\d)+(?=,)/g, "") + ")"; 32357 } 32358 }; 32359 })(); 32360 } 32361 32362 /************** 32363 Dimensions 32364 **************/ 32365 function augmentDimension(name, element, wantInner) { 32366 var isBorderBox = CSS.getPropertyValue(element, "boxSizing").toString().toLowerCase() === "border-box"; 32367 32368 if (isBorderBox === (wantInner || false)) { 32369 /* in box-sizing mode, the CSS width / height accessors already give the outerWidth / outerHeight. */ 32370 var i, 32371 value, 32372 augment = 0, 32373 sides = name === "width" ? ["Left", "Right"] : ["Top", "Bottom"], 32374 fields = ["padding" + sides[0], "padding" + sides[1], "border" + sides[0] + "Width", "border" + sides[1] + "Width"]; 32375 32376 for (i = 0; i < fields.length; i++) { 32377 value = parseFloat(CSS.getPropertyValue(element, fields[i])); 32378 if (!isNaN(value)) { 32379 augment += value; 32380 } 32381 } 32382 return wantInner ? -augment : augment; 32383 } 32384 return 0; 32385 } 32386 function getDimension(name, wantInner) { 32387 return function(type, element, propertyValue) { 32388 switch (type) { 32389 case "name": 32390 return name; 32391 case "extract": 32392 return parseFloat(propertyValue) + augmentDimension(name, element, wantInner); 32393 case "inject": 32394 return (parseFloat(propertyValue) - augmentDimension(name, element, wantInner)) + "px"; 32395 } 32396 }; 32397 } 32398 CSS.Normalizations.registered.innerWidth = getDimension("width", true); 32399 CSS.Normalizations.registered.innerHeight = getDimension("height", true); 32400 CSS.Normalizations.registered.outerWidth = getDimension("width"); 32401 CSS.Normalizations.registered.outerHeight = getDimension("height"); 32402 } 32403 }, 32404 /************************ 32405 CSS Property Names 32406 ************************/ 32407 32408 Names: { 32409 /* Camelcase a property name into its JavaScript notation (e.g. "background-color" ==> "backgroundColor"). 32410 Camelcasing is used to normalize property names between and across calls. */ 32411 camelCase: function(property) { 32412 return property.replace(/-(\w)/g, function(match, subMatch) { 32413 return subMatch.toUpperCase(); 32414 }); 32415 }, 32416 /* For SVG elements, some properties (namely, dimensional ones) are GET/SET via the element's HTML attributes (instead of via CSS styles). */ 32417 SVGAttribute: function(property) { 32418 var SVGAttributes = "width|height|x|y|cx|cy|r|rx|ry|x1|x2|y1|y2"; 32419 32420 /* Certain browsers require an SVG transform to be applied as an attribute. (Otherwise, application via CSS is preferable due to 3D support.) */ 32421 if (IE || (Velocity.State.isAndroid && !Velocity.State.isChrome)) { 32422 SVGAttributes += "|transform"; 32423 } 32424 32425 return new RegExp("^(" + SVGAttributes + ")$", "i").test(property); 32426 }, 32427 /* Determine whether a property should be set with a vendor prefix. */ 32428 /* If a prefixed version of the property exists, return it. Otherwise, return the original property name. 32429 If the property is not at all supported by the browser, return a false flag. */ 32430 prefixCheck: function(property) { 32431 /* If this property has already been checked, return the cached value. */ 32432 if (Velocity.State.prefixMatches[property]) { 32433 return [Velocity.State.prefixMatches[property], true]; 32434 } else { 32435 var vendors = ["", "Webkit", "Moz", "ms", "O"]; 32436 32437 for (var i = 0, vendorsLength = vendors.length; i < vendorsLength; i++) { 32438 var propertyPrefixed; 32439 32440 if (i === 0) { 32441 propertyPrefixed = property; 32442 } else { 32443 /* Capitalize the first letter of the property to conform to JavaScript vendor prefix notation (e.g. webkitFilter). */ 32444 propertyPrefixed = vendors[i] + property.replace(/^\w/, function(match) { 32445 return match.toUpperCase(); 32446 }); 32447 } 32448 32449 /* Check if the browser supports this property as prefixed. */ 32450 if (Type.isString(Velocity.State.prefixElement.style[propertyPrefixed])) { 32451 /* Cache the match. */ 32452 Velocity.State.prefixMatches[property] = propertyPrefixed; 32453 32454 return [propertyPrefixed, true]; 32455 } 32456 } 32457 32458 /* If the browser doesn't support this property in any form, include a false flag so that the caller can decide how to proceed. */ 32459 return [property, false]; 32460 } 32461 } 32462 }, 32463 /************************ 32464 CSS Property Values 32465 ************************/ 32466 32467 Values: { 32468 /* Hex to RGB conversion. Copyright Tim Down: http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb */ 32469 hexToRgb: function(hex) { 32470 var shortformRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i, 32471 longformRegex = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i, 32472 rgbParts; 32473 32474 hex = hex.replace(shortformRegex, function(m, r, g, b) { 32475 return r + r + g + g + b + b; 32476 }); 32477 32478 rgbParts = longformRegex.exec(hex); 32479 32480 return rgbParts ? [parseInt(rgbParts[1], 16), parseInt(rgbParts[2], 16), parseInt(rgbParts[3], 16)] : [0, 0, 0]; 32481 }, 32482 isCSSNullValue: function(value) { 32483 /* The browser defaults CSS values that have not been set to either 0 or one of several possible null-value strings. 32484 Thus, we check for both falsiness and these special strings. */ 32485 /* Null-value checking is performed to default the special strings to 0 (for the sake of tweening) or their hook 32486 templates as defined as CSS.Hooks (for the sake of hook injection/extraction). */ 32487 /* Note: Chrome returns "rgba(0, 0, 0, 0)" for an undefined color whereas IE returns "transparent". */ 32488 return (!value || /^(none|auto|transparent|(rgba\(0, ?0, ?0, ?0\)))$/i.test(value)); 32489 }, 32490 /* Retrieve a property's default unit type. Used for assigning a unit type when one is not supplied by the user. */ 32491 getUnitType: function(property) { 32492 if (/^(rotate|skew)/i.test(property)) { 32493 return "deg"; 32494 } else if (/(^(scale|scaleX|scaleY|scaleZ|alpha|flexGrow|flexHeight|zIndex|fontWeight)$)|((opacity|red|green|blue|alpha)$)/i.test(property)) { 32495 /* The above properties are unitless. */ 32496 return ""; 32497 } else { 32498 /* Default to px for all other properties. */ 32499 return "px"; 32500 } 32501 }, 32502 /* HTML elements default to an associated display type when they're not set to display:none. */ 32503 /* Note: This function is used for correctly setting the non-"none" display value in certain Velocity redirects, such as fadeIn/Out. */ 32504 getDisplayType: function(element) { 32505 var tagName = element && element.tagName.toString().toLowerCase(); 32506 32507 if (/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|var|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i.test(tagName)) { 32508 return "inline"; 32509 } else if (/^(li)$/i.test(tagName)) { 32510 return "list-item"; 32511 } else if (/^(tr)$/i.test(tagName)) { 32512 return "table-row"; 32513 } else if (/^(table)$/i.test(tagName)) { 32514 return "table"; 32515 } else if (/^(tbody)$/i.test(tagName)) { 32516 return "table-row-group"; 32517 /* Default to "block" when no match is found. */ 32518 } else { 32519 return "block"; 32520 } 32521 }, 32522 /* The class add/remove functions are used to temporarily apply a "velocity-animating" class to elements while they're animating. */ 32523 addClass: function(element, className) { 32524 if (element) { 32525 if (element.classList) { 32526 element.classList.add(className); 32527 } else if (Type.isString(element.className)) { 32528 // Element.className is around 15% faster then set/getAttribute 32529 element.className += (element.className.length ? " " : "") + className; 32530 } else { 32531 // Work around for IE strict mode animating SVG - and anything else that doesn't behave correctly - the same way jQuery does it 32532 var currentClass = element.getAttribute(IE <= 7 ? "className" : "class") || ""; 32533 32534 element.setAttribute("class", currentClass + (currentClass ? " " : "") + className); 32535 } 32536 } 32537 }, 32538 removeClass: function(element, className) { 32539 if (element) { 32540 if (element.classList) { 32541 element.classList.remove(className); 32542 } else if (Type.isString(element.className)) { 32543 // Element.className is around 15% faster then set/getAttribute 32544 // TODO: Need some jsperf tests on performance - can we get rid of the regex and maybe use split / array manipulation? 32545 element.className = element.className.toString().replace(new RegExp("(^|\\s)" + className.split(" ").join("|") + "(\\s|$)", "gi"), " "); 32546 } else { 32547 // Work around for IE strict mode animating SVG - and anything else that doesn't behave correctly - the same way jQuery does it 32548 var currentClass = element.getAttribute(IE <= 7 ? "className" : "class") || ""; 32549 32550 element.setAttribute("class", currentClass.replace(new RegExp("(^|\s)" + className.split(" ").join("|") + "(\s|$)", "gi"), " ")); 32551 } 32552 } 32553 } 32554 }, 32555 /**************************** 32556 Style Getting & Setting 32557 ****************************/ 32558 32559 /* The singular getPropertyValue, which routes the logic for all normalizations, hooks, and standard CSS properties. */ 32560 getPropertyValue: function(element, property, rootPropertyValue, forceStyleLookup) { 32561 /* Get an element's computed property value. */ 32562 /* Note: Retrieving the value of a CSS property cannot simply be performed by checking an element's 32563 style attribute (which only reflects user-defined values). Instead, the browser must be queried for a property's 32564 *computed* value. You can read more about getComputedStyle here: https://developer.mozilla.org/en/docs/Web/API/window.getComputedStyle */ 32565 function computePropertyValue(element, property) { 32566 /* When box-sizing isn't set to border-box, height and width style values are incorrectly computed when an 32567 element's scrollbars are visible (which expands the element's dimensions). Thus, we defer to the more accurate 32568 offsetHeight/Width property, which includes the total dimensions for interior, border, padding, and scrollbar. 32569 We subtract border and padding to get the sum of interior + scrollbar. */ 32570 var computedValue = 0; 32571 32572 /* IE<=8 doesn't support window.getComputedStyle, thus we defer to jQuery, which has an extensive array 32573 of hacks to accurately retrieve IE8 property values. Re-implementing that logic here is not worth bloating the 32574 codebase for a dying browser. The performance repercussions of using jQuery here are minimal since 32575 Velocity is optimized to rarely (and sometimes never) query the DOM. Further, the $.css() codepath isn't that slow. */ 32576 if (IE <= 8) { 32577 computedValue = $.css(element, property); /* GET */ 32578 /* All other browsers support getComputedStyle. The returned live object reference is cached onto its 32579 associated element so that it does not need to be refetched upon every GET. */ 32580 } else { 32581 /* Browsers do not return height and width values for elements that are set to display:"none". Thus, we temporarily 32582 toggle display to the element type's default value. */ 32583 var toggleDisplay = false; 32584 32585 if (/^(width|height)$/.test(property) && CSS.getPropertyValue(element, "display") === 0) { 32586 toggleDisplay = true; 32587 CSS.setPropertyValue(element, "display", CSS.Values.getDisplayType(element)); 32588 } 32589 32590 var revertDisplay = function() { 32591 if (toggleDisplay) { 32592 CSS.setPropertyValue(element, "display", "none"); 32593 } 32594 }; 32595 32596 if (!forceStyleLookup) { 32597 if (property === "height" && CSS.getPropertyValue(element, "boxSizing").toString().toLowerCase() !== "border-box") { 32598 var contentBoxHeight = element.offsetHeight - (parseFloat(CSS.getPropertyValue(element, "borderTopWidth")) || 0) - (parseFloat(CSS.getPropertyValue(element, "borderBottomWidth")) || 0) - (parseFloat(CSS.getPropertyValue(element, "paddingTop")) || 0) - (parseFloat(CSS.getPropertyValue(element, "paddingBottom")) || 0); 32599 revertDisplay(); 32600 32601 return contentBoxHeight; 32602 } else if (property === "width" && CSS.getPropertyValue(element, "boxSizing").toString().toLowerCase() !== "border-box") { 32603 var contentBoxWidth = element.offsetWidth - (parseFloat(CSS.getPropertyValue(element, "borderLeftWidth")) || 0) - (parseFloat(CSS.getPropertyValue(element, "borderRightWidth")) || 0) - (parseFloat(CSS.getPropertyValue(element, "paddingLeft")) || 0) - (parseFloat(CSS.getPropertyValue(element, "paddingRight")) || 0); 32604 revertDisplay(); 32605 32606 return contentBoxWidth; 32607 } 32608 } 32609 32610 var computedStyle; 32611 32612 /* For elements that Velocity hasn't been called on directly (e.g. when Velocity queries the DOM on behalf 32613 of a parent of an element its animating), perform a direct getComputedStyle lookup since the object isn't cached. */ 32614 if (Data(element) === undefined) { 32615 computedStyle = window.getComputedStyle(element, null); /* GET */ 32616 /* If the computedStyle object has yet to be cached, do so now. */ 32617 } else if (!Data(element).computedStyle) { 32618 computedStyle = Data(element).computedStyle = window.getComputedStyle(element, null); /* GET */ 32619 /* If computedStyle is cached, use it. */ 32620 } else { 32621 computedStyle = Data(element).computedStyle; 32622 } 32623 32624 /* IE and Firefox do not return a value for the generic borderColor -- they only return individual values for each border side's color. 32625 Also, in all browsers, when border colors aren't all the same, a compound value is returned that Velocity isn't setup to parse. 32626 So, as a polyfill for querying individual border side colors, we just return the top border's color and animate all borders from that value. */ 32627 if (property === "borderColor") { 32628 property = "borderTopColor"; 32629 } 32630 32631 /* IE9 has a bug in which the "filter" property must be accessed from computedStyle using the getPropertyValue method 32632 instead of a direct property lookup. The getPropertyValue method is slower than a direct lookup, which is why we avoid it by default. */ 32633 if (IE === 9 && property === "filter") { 32634 computedValue = computedStyle.getPropertyValue(property); /* GET */ 32635 } else { 32636 computedValue = computedStyle[property]; 32637 } 32638 32639 /* Fall back to the property's style value (if defined) when computedValue returns nothing, 32640 which can happen when the element hasn't been painted. */ 32641 if (computedValue === "" || computedValue === null) { 32642 computedValue = element.style[property]; 32643 } 32644 32645 revertDisplay(); 32646 } 32647 32648 /* For top, right, bottom, and left (TRBL) values that are set to "auto" on elements of "fixed" or "absolute" position, 32649 defer to jQuery for converting "auto" to a numeric value. (For elements with a "static" or "relative" position, "auto" has the same 32650 effect as being set to 0, so no conversion is necessary.) */ 32651 /* An example of why numeric conversion is necessary: When an element with "position:absolute" has an untouched "left" 32652 property, which reverts to "auto", left's value is 0 relative to its parent element, but is often non-zero relative 32653 to its *containing* (not parent) element, which is the nearest "position:relative" ancestor or the viewport (and always the viewport in the case of "position:fixed"). */ 32654 if (computedValue === "auto" && /^(top|right|bottom|left)$/i.test(property)) { 32655 var position = computePropertyValue(element, "position"); /* GET */ 32656 32657 /* For absolute positioning, jQuery's $.position() only returns values for top and left; 32658 right and bottom will have their "auto" value reverted to 0. */ 32659 /* Note: A jQuery object must be created here since jQuery doesn't have a low-level alias for $.position(). 32660 Not a big deal since we're currently in a GET batch anyway. */ 32661 if (position === "fixed" || (position === "absolute" && /top|left/i.test(property))) { 32662 /* Note: jQuery strips the pixel unit from its returned values; we re-add it here to conform with computePropertyValue's behavior. */ 32663 computedValue = $(element).position()[property] + "px"; /* GET */ 32664 } 32665 } 32666 32667 return computedValue; 32668 } 32669 32670 var propertyValue; 32671 32672 /* If this is a hooked property (e.g. "clipLeft" instead of the root property of "clip"), 32673 extract the hook's value from a normalized rootPropertyValue using CSS.Hooks.extractValue(). */ 32674 if (CSS.Hooks.registered[property]) { 32675 var hook = property, 32676 hookRoot = CSS.Hooks.getRoot(hook); 32677 32678 /* If a cached rootPropertyValue wasn't passed in (which Velocity always attempts to do in order to avoid requerying the DOM), 32679 query the DOM for the root property's value. */ 32680 if (rootPropertyValue === undefined) { 32681 /* Since the browser is now being directly queried, use the official post-prefixing property name for this lookup. */ 32682 rootPropertyValue = CSS.getPropertyValue(element, CSS.Names.prefixCheck(hookRoot)[0]); /* GET */ 32683 } 32684 32685 /* If this root has a normalization registered, peform the associated normalization extraction. */ 32686 if (CSS.Normalizations.registered[hookRoot]) { 32687 rootPropertyValue = CSS.Normalizations.registered[hookRoot]("extract", element, rootPropertyValue); 32688 } 32689 32690 /* Extract the hook's value. */ 32691 propertyValue = CSS.Hooks.extractValue(hook, rootPropertyValue); 32692 32693 /* If this is a normalized property (e.g. "opacity" becomes "filter" in <=IE8) or "translateX" becomes "transform"), 32694 normalize the property's name and value, and handle the special case of transforms. */ 32695 /* Note: Normalizing a property is mutually exclusive from hooking a property since hook-extracted values are strictly 32696 numerical and therefore do not require normalization extraction. */ 32697 } else if (CSS.Normalizations.registered[property]) { 32698 var normalizedPropertyName, 32699 normalizedPropertyValue; 32700 32701 normalizedPropertyName = CSS.Normalizations.registered[property]("name", element); 32702 32703 /* Transform values are calculated via normalization extraction (see below), which checks against the element's transformCache. 32704 At no point do transform GETs ever actually query the DOM; initial stylesheet values are never processed. 32705 This is because parsing 3D transform matrices is not always accurate and would bloat our codebase; 32706 thus, normalization extraction defaults initial transform values to their zero-values (e.g. 1 for scaleX and 0 for translateX). */ 32707 if (normalizedPropertyName !== "transform") { 32708 normalizedPropertyValue = computePropertyValue(element, CSS.Names.prefixCheck(normalizedPropertyName)[0]); /* GET */ 32709 32710 /* If the value is a CSS null-value and this property has a hook template, use that zero-value template so that hooks can be extracted from it. */ 32711 if (CSS.Values.isCSSNullValue(normalizedPropertyValue) && CSS.Hooks.templates[property]) { 32712 normalizedPropertyValue = CSS.Hooks.templates[property][1]; 32713 } 32714 } 32715 32716 propertyValue = CSS.Normalizations.registered[property]("extract", element, normalizedPropertyValue); 32717 } 32718 32719 /* If a (numeric) value wasn't produced via hook extraction or normalization, query the DOM. */ 32720 if (!/^[\d-]/.test(propertyValue)) { 32721 /* For SVG elements, dimensional properties (which SVGAttribute() detects) are tweened via 32722 their HTML attribute values instead of their CSS style values. */ 32723 var data = Data(element); 32724 32725 if (data && data.isSVG && CSS.Names.SVGAttribute(property)) { 32726 /* Since the height/width attribute values must be set manually, they don't reflect computed values. 32727 Thus, we use use getBBox() to ensure we always get values for elements with undefined height/width attributes. */ 32728 if (/^(height|width)$/i.test(property)) { 32729 /* Firefox throws an error if .getBBox() is called on an SVG that isn't attached to the DOM. */ 32730 try { 32731 propertyValue = element.getBBox()[property]; 32732 } catch (error) { 32733 propertyValue = 0; 32734 } 32735 /* Otherwise, access the attribute value directly. */ 32736 } else { 32737 propertyValue = element.getAttribute(property); 32738 } 32739 } else { 32740 propertyValue = computePropertyValue(element, CSS.Names.prefixCheck(property)[0]); /* GET */ 32741 } 32742 } 32743 32744 /* Since property lookups are for animation purposes (which entails computing the numeric delta between start and end values), 32745 convert CSS null-values to an integer of value 0. */ 32746 if (CSS.Values.isCSSNullValue(propertyValue)) { 32747 propertyValue = 0; 32748 } 32749 32750 if (Velocity.debug >= 2) { 32751 console.log("Get " + property + ": " + propertyValue); 32752 } 32753 32754 return propertyValue; 32755 }, 32756 /* The singular setPropertyValue, which routes the logic for all normalizations, hooks, and standard CSS properties. */ 32757 setPropertyValue: function(element, property, propertyValue, rootPropertyValue, scrollData) { 32758 var propertyName = property; 32759 32760 /* In order to be subjected to call options and element queueing, scroll animation is routed through Velocity as if it were a standard CSS property. */ 32761 if (property === "scroll") { 32762 /* If a container option is present, scroll the container instead of the browser window. */ 32763 if (scrollData.container) { 32764 scrollData.container["scroll" + scrollData.direction] = propertyValue; 32765 /* Otherwise, Velocity defaults to scrolling the browser window. */ 32766 } else { 32767 if (scrollData.direction === "Left") { 32768 window.scrollTo(propertyValue, scrollData.alternateValue); 32769 } else { 32770 window.scrollTo(scrollData.alternateValue, propertyValue); 32771 } 32772 } 32773 } else { 32774 /* Transforms (translateX, rotateZ, etc.) are applied to a per-element transformCache object, which is manually flushed via flushTransformCache(). 32775 Thus, for now, we merely cache transforms being SET. */ 32776 if (CSS.Normalizations.registered[property] && CSS.Normalizations.registered[property]("name", element) === "transform") { 32777 /* Perform a normalization injection. */ 32778 /* Note: The normalization logic handles the transformCache updating. */ 32779 CSS.Normalizations.registered[property]("inject", element, propertyValue); 32780 32781 propertyName = "transform"; 32782 propertyValue = Data(element).transformCache[property]; 32783 } else { 32784 /* Inject hooks. */ 32785 if (CSS.Hooks.registered[property]) { 32786 var hookName = property, 32787 hookRoot = CSS.Hooks.getRoot(property); 32788 32789 /* If a cached rootPropertyValue was not provided, query the DOM for the hookRoot's current value. */ 32790 rootPropertyValue = rootPropertyValue || CSS.getPropertyValue(element, hookRoot); /* GET */ 32791 32792 propertyValue = CSS.Hooks.injectValue(hookName, propertyValue, rootPropertyValue); 32793 property = hookRoot; 32794 } 32795 32796 /* Normalize names and values. */ 32797 if (CSS.Normalizations.registered[property]) { 32798 propertyValue = CSS.Normalizations.registered[property]("inject", element, propertyValue); 32799 property = CSS.Normalizations.registered[property]("name", element); 32800 } 32801 32802 /* Assign the appropriate vendor prefix before performing an official style update. */ 32803 propertyName = CSS.Names.prefixCheck(property)[0]; 32804 32805 /* A try/catch is used for IE<=8, which throws an error when "invalid" CSS values are set, e.g. a negative width. 32806 Try/catch is avoided for other browsers since it incurs a performance overhead. */ 32807 if (IE <= 8) { 32808 try { 32809 element.style[propertyName] = propertyValue; 32810 } catch (error) { 32811 if (Velocity.debug) { 32812 console.log("Browser does not support [" + propertyValue + "] for [" + propertyName + "]"); 32813 } 32814 } 32815 /* SVG elements have their dimensional properties (width, height, x, y, cx, etc.) applied directly as attributes instead of as styles. */ 32816 /* Note: IE8 does not support SVG elements, so it's okay that we skip it for SVG animation. */ 32817 } else { 32818 var data = Data(element); 32819 32820 if (data && data.isSVG && CSS.Names.SVGAttribute(property)) { 32821 /* Note: For SVG attributes, vendor-prefixed property names are never used. */ 32822 /* Note: Not all CSS properties can be animated via attributes, but the browser won't throw an error for unsupported properties. */ 32823 element.setAttribute(property, propertyValue); 32824 } else { 32825 element.style[propertyName] = propertyValue; 32826 } 32827 } 32828 32829 if (Velocity.debug >= 2) { 32830 console.log("Set " + property + " (" + propertyName + "): " + propertyValue); 32831 } 32832 } 32833 } 32834 32835 /* Return the normalized property name and value in case the caller wants to know how these values were modified before being applied to the DOM. */ 32836 return [propertyName, propertyValue]; 32837 }, 32838 /* To increase performance by batching transform updates into a single SET, transforms are not directly applied to an element until flushTransformCache() is called. */ 32839 /* Note: Velocity applies transform properties in the same order that they are chronogically introduced to the element's CSS styles. */ 32840 flushTransformCache: function(element) { 32841 var transformString = "", 32842 data = Data(element); 32843 32844 /* Certain browsers require that SVG transforms be applied as an attribute. However, the SVG transform attribute takes a modified version of CSS's transform string 32845 (units are dropped and, except for skewX/Y, subproperties are merged into their master property -- e.g. scaleX and scaleY are merged into scale(X Y). */ 32846 if ((IE || (Velocity.State.isAndroid && !Velocity.State.isChrome)) && data && data.isSVG) { 32847 /* Since transform values are stored in their parentheses-wrapped form, we use a helper function to strip out their numeric values. 32848 Further, SVG transform properties only take unitless (representing pixels) values, so it's okay that parseFloat() strips the unit suffixed to the float value. */ 32849 var getTransformFloat = function(transformProperty) { 32850 return parseFloat(CSS.getPropertyValue(element, transformProperty)); 32851 }; 32852 32853 /* Create an object to organize all the transforms that we'll apply to the SVG element. To keep the logic simple, 32854 we process *all* transform properties -- even those that may not be explicitly applied (since they default to their zero-values anyway). */ 32855 var SVGTransforms = { 32856 translate: [getTransformFloat("translateX"), getTransformFloat("translateY")], 32857 skewX: [getTransformFloat("skewX")], skewY: [getTransformFloat("skewY")], 32858 /* If the scale property is set (non-1), use that value for the scaleX and scaleY values 32859 (this behavior mimics the result of animating all these properties at once on HTML elements). */ 32860 scale: getTransformFloat("scale") !== 1 ? [getTransformFloat("scale"), getTransformFloat("scale")] : [getTransformFloat("scaleX"), getTransformFloat("scaleY")], 32861 /* Note: SVG's rotate transform takes three values: rotation degrees followed by the X and Y values 32862 defining the rotation's origin point. We ignore the origin values (default them to 0). */ 32863 rotate: [getTransformFloat("rotateZ"), 0, 0] 32864 }; 32865 32866 /* Iterate through the transform properties in the user-defined property map order. 32867 (This mimics the behavior of non-SVG transform animation.) */ 32868 $.each(Data(element).transformCache, function(transformName) { 32869 /* Except for with skewX/Y, revert the axis-specific transform subproperties to their axis-free master 32870 properties so that they match up with SVG's accepted transform properties. */ 32871 if (/^translate/i.test(transformName)) { 32872 transformName = "translate"; 32873 } else if (/^scale/i.test(transformName)) { 32874 transformName = "scale"; 32875 } else if (/^rotate/i.test(transformName)) { 32876 transformName = "rotate"; 32877 } 32878 32879 /* Check that we haven't yet deleted the property from the SVGTransforms container. */ 32880 if (SVGTransforms[transformName]) { 32881 /* Append the transform property in the SVG-supported transform format. As per the spec, surround the space-delimited values in parentheses. */ 32882 transformString += transformName + "(" + SVGTransforms[transformName].join(" ") + ")" + " "; 32883 32884 /* After processing an SVG transform property, delete it from the SVGTransforms container so we don't 32885 re-insert the same master property if we encounter another one of its axis-specific properties. */ 32886 delete SVGTransforms[transformName]; 32887 } 32888 }); 32889 } else { 32890 var transformValue, 32891 perspective; 32892 32893 /* Transform properties are stored as members of the transformCache object. Concatenate all the members into a string. */ 32894 $.each(Data(element).transformCache, function(transformName) { 32895 transformValue = Data(element).transformCache[transformName]; 32896 32897 /* Transform's perspective subproperty must be set first in order to take effect. Store it temporarily. */ 32898 if (transformName === "transformPerspective") { 32899 perspective = transformValue; 32900 return true; 32901 } 32902 32903 /* IE9 only supports one rotation type, rotateZ, which it refers to as "rotate". */ 32904 if (IE === 9 && transformName === "rotateZ") { 32905 transformName = "rotate"; 32906 } 32907 32908 transformString += transformName + transformValue + " "; 32909 }); 32910 32911 /* If present, set the perspective subproperty first. */ 32912 if (perspective) { 32913 transformString = "perspective" + perspective + " " + transformString; 32914 } 32915 } 32916 32917 CSS.setPropertyValue(element, "transform", transformString); 32918 } 32919 }; 32920 32921 /* Register hooks and normalizations. */ 32922 CSS.Hooks.register(); 32923 CSS.Normalizations.register(); 32924 32925 /* Allow hook setting in the same fashion as jQuery's $.css(). */ 32926 Velocity.hook = function(elements, arg2, arg3) { 32927 var value; 32928 32929 elements = sanitizeElements(elements); 32930 32931 $.each(elements, function(i, element) { 32932 /* Initialize Velocity's per-element data cache if this element hasn't previously been animated. */ 32933 if (Data(element) === undefined) { 32934 Velocity.init(element); 32935 } 32936 32937 /* Get property value. If an element set was passed in, only return the value for the first element. */ 32938 if (arg3 === undefined) { 32939 if (value === undefined) { 32940 value = CSS.getPropertyValue(element, arg2); 32941 } 32942 /* Set property value. */ 32943 } else { 32944 /* sPV returns an array of the normalized propertyName/propertyValue pair used to update the DOM. */ 32945 var adjustedSet = CSS.setPropertyValue(element, arg2, arg3); 32946 32947 /* Transform properties don't automatically set. They have to be flushed to the DOM. */ 32948 if (adjustedSet[0] === "transform") { 32949 Velocity.CSS.flushTransformCache(element); 32950 } 32951 32952 value = adjustedSet; 32953 } 32954 }); 32955 32956 return value; 32957 }; 32958 32959 /***************** 32960 Animation 32961 *****************/ 32962 32963 var animate = function() { 32964 var opts; 32965 32966 /****************** 32967 Call Chain 32968 ******************/ 32969 32970 /* Logic for determining what to return to the call stack when exiting out of Velocity. */ 32971 function getChain() { 32972 /* If we are using the utility function, attempt to return this call's promise. If no promise library was detected, 32973 default to null instead of returning the targeted elements so that utility function's return value is standardized. */ 32974 if (isUtility) { 32975 return promiseData.promise || null; 32976 /* Otherwise, if we're using $.fn, return the jQuery-/Zepto-wrapped element set. */ 32977 } else { 32978 return elementsWrapped; 32979 } 32980 } 32981 32982 /************************* 32983 Arguments Assignment 32984 *************************/ 32985 32986 /* To allow for expressive CoffeeScript code, Velocity supports an alternative syntax in which "elements" (or "e"), "properties" (or "p"), and "options" (or "o") 32987 objects are defined on a container object that's passed in as Velocity's sole argument. */ 32988 /* Note: Some browsers automatically populate arguments with a "properties" object. We detect it by checking for its default "names" property. */ 32989 var syntacticSugar = (arguments[0] && (arguments[0].p || (($.isPlainObject(arguments[0].properties) && !arguments[0].properties.names) || Type.isString(arguments[0].properties)))), 32990 /* Whether Velocity was called via the utility function (as opposed to on a jQuery/Zepto object). */ 32991 isUtility, 32992 /* When Velocity is called via the utility function ($.Velocity()/Velocity()), elements are explicitly 32993 passed in as the first parameter. Thus, argument positioning varies. We normalize them here. */ 32994 elementsWrapped, 32995 argumentIndex; 32996 32997 var elements, 32998 propertiesMap, 32999 options; 33000 33001 /* Detect jQuery/Zepto elements being animated via the $.fn method. */ 33002 if (Type.isWrapped(this)) { 33003 isUtility = false; 33004 33005 argumentIndex = 0; 33006 elements = this; 33007 elementsWrapped = this; 33008 /* Otherwise, raw elements are being animated via the utility function. */ 33009 } else { 33010 isUtility = true; 33011 33012 argumentIndex = 1; 33013 elements = syntacticSugar ? (arguments[0].elements || arguments[0].e) : arguments[0]; 33014 } 33015 33016 /*************** 33017 Promises 33018 ***************/ 33019 33020 var promiseData = { 33021 promise: null, 33022 resolver: null, 33023 rejecter: null 33024 }; 33025 33026 /* If this call was made via the utility function (which is the default method of invocation when jQuery/Zepto are not being used), and if 33027 promise support was detected, create a promise object for this call and store references to its resolver and rejecter methods. The resolve 33028 method is used when a call completes naturally or is prematurely stopped by the user. In both cases, completeCall() handles the associated 33029 call cleanup and promise resolving logic. The reject method is used when an invalid set of arguments is passed into a Velocity call. */ 33030 /* Note: Velocity employs a call-based queueing architecture, which means that stopping an animating element actually stops the full call that 33031 triggered it -- not that one element exclusively. Similarly, there is one promise per call, and all elements targeted by a Velocity call are 33032 grouped together for the purposes of resolving and rejecting a promise. */ 33033 if (isUtility && Velocity.Promise) { 33034 promiseData.promise = new Velocity.Promise(function(resolve, reject) { 33035 promiseData.resolver = resolve; 33036 promiseData.rejecter = reject; 33037 }); 33038 } 33039 33040 if (syntacticSugar) { 33041 propertiesMap = arguments[0].properties || arguments[0].p; 33042 options = arguments[0].options || arguments[0].o; 33043 } else { 33044 propertiesMap = arguments[argumentIndex]; 33045 options = arguments[argumentIndex + 1]; 33046 } 33047 33048 elements = sanitizeElements(elements); 33049 33050 if (!elements) { 33051 if (promiseData.promise) { 33052 if (!propertiesMap || !options || options.promiseRejectEmpty !== false) { 33053 promiseData.rejecter(); 33054 } else { 33055 promiseData.resolver(); 33056 } 33057 } 33058 return; 33059 } 33060 33061 /* The length of the element set (in the form of a nodeList or an array of elements) is defaulted to 1 in case a 33062 single raw DOM element is passed in (which doesn't contain a length property). */ 33063 var elementsLength = elements.length, 33064 elementsIndex = 0; 33065 33066 /*************************** 33067 Argument Overloading 33068 ***************************/ 33069 33070 /* Support is included for jQuery's argument overloading: $.animate(propertyMap [, duration] [, easing] [, complete]). 33071 Overloading is detected by checking for the absence of an object being passed into options. */ 33072 /* Note: The stop/finish/pause/resume actions do not accept animation options, and are therefore excluded from this check. */ 33073 if (!/^(stop|finish|finishAll|pause|resume)$/i.test(propertiesMap) && !$.isPlainObject(options)) { 33074 /* The utility function shifts all arguments one position to the right, so we adjust for that offset. */ 33075 var startingArgumentPosition = argumentIndex + 1; 33076 33077 options = {}; 33078 33079 /* Iterate through all options arguments */ 33080 for (var i = startingArgumentPosition; i < arguments.length; i++) { 33081 /* Treat a number as a duration. Parse it out. */ 33082 /* Note: The following RegEx will return true if passed an array with a number as its first item. 33083 Thus, arrays are skipped from this check. */ 33084 if (!Type.isArray(arguments[i]) && (/^(fast|normal|slow)$/i.test(arguments[i]) || /^\d/.test(arguments[i]))) { 33085 options.duration = arguments[i]; 33086 /* Treat strings and arrays as easings. */ 33087 } else if (Type.isString(arguments[i]) || Type.isArray(arguments[i])) { 33088 options.easing = arguments[i]; 33089 /* Treat a function as a complete callback. */ 33090 } else if (Type.isFunction(arguments[i])) { 33091 options.complete = arguments[i]; 33092 } 33093 } 33094 } 33095 33096 /********************* 33097 Action Detection 33098 *********************/ 33099 33100 /* Velocity's behavior is categorized into "actions": Elements can either be specially scrolled into view, 33101 or they can be started, stopped, paused, resumed, or reversed . If a literal or referenced properties map is passed in as Velocity's 33102 first argument, the associated action is "start". Alternatively, "scroll", "reverse", "pause", "resume" or "stop" can be passed in 33103 instead of a properties map. */ 33104 var action; 33105 33106 switch (propertiesMap) { 33107 case "scroll": 33108 action = "scroll"; 33109 break; 33110 33111 case "reverse": 33112 action = "reverse"; 33113 break; 33114 33115 case "pause": 33116 33117 /******************* 33118 Action: Pause 33119 *******************/ 33120 33121 var currentTime = (new Date()).getTime(); 33122 33123 /* Handle delay timers */ 33124 $.each(elements, function(i, element) { 33125 pauseDelayOnElement(element, currentTime); 33126 }); 33127 33128 /* Pause and Resume are call-wide (not on a per element basis). Thus, calling pause or resume on a 33129 single element will cause any calls that containt tweens for that element to be paused/resumed 33130 as well. */ 33131 33132 /* Iterate through all calls and pause any that contain any of our elements */ 33133 $.each(Velocity.State.calls, function(i, activeCall) { 33134 33135 var found = false; 33136 /* Inactive calls are set to false by the logic inside completeCall(). Skip them. */ 33137 if (activeCall) { 33138 /* Iterate through the active call's targeted elements. */ 33139 $.each(activeCall[1], function(k, activeElement) { 33140 var queueName = (options === undefined) ? "" : options; 33141 33142 if (queueName !== true && (activeCall[2].queue !== queueName) && !(options === undefined && activeCall[2].queue === false)) { 33143 return true; 33144 } 33145 33146 /* Iterate through the calls targeted by the stop command. */ 33147 $.each(elements, function(l, element) { 33148 /* Check that this call was applied to the target element. */ 33149 if (element === activeElement) { 33150 33151 /* Set call to paused */ 33152 activeCall[5] = { 33153 resume: false 33154 }; 33155 33156 /* Once we match an element, we can bounce out to the next call entirely */ 33157 found = true; 33158 return false; 33159 } 33160 }); 33161 33162 /* Proceed to check next call if we have already matched */ 33163 if (found) { 33164 return false; 33165 } 33166 }); 33167 } 33168 33169 }); 33170 33171 /* Since pause creates no new tweens, exit out of Velocity. */ 33172 return getChain(); 33173 33174 case "resume": 33175 33176 /******************* 33177 Action: Resume 33178 *******************/ 33179 33180 /* Handle delay timers */ 33181 $.each(elements, function(i, element) { 33182 resumeDelayOnElement(element, currentTime); 33183 }); 33184 33185 /* Pause and Resume are call-wide (not on a per elemnt basis). Thus, calling pause or resume on a 33186 single element will cause any calls that containt tweens for that element to be paused/resumed 33187 as well. */ 33188 33189 /* Iterate through all calls and pause any that contain any of our elements */ 33190 $.each(Velocity.State.calls, function(i, activeCall) { 33191 var found = false; 33192 /* Inactive calls are set to false by the logic inside completeCall(). Skip them. */ 33193 if (activeCall) { 33194 /* Iterate through the active call's targeted elements. */ 33195 $.each(activeCall[1], function(k, activeElement) { 33196 var queueName = (options === undefined) ? "" : options; 33197 33198 if (queueName !== true && (activeCall[2].queue !== queueName) && !(options === undefined && activeCall[2].queue === false)) { 33199 return true; 33200 } 33201 33202 /* Skip any calls that have never been paused */ 33203 if (!activeCall[5]) { 33204 return true; 33205 } 33206 33207 /* Iterate through the calls targeted by the stop command. */ 33208 $.each(elements, function(l, element) { 33209 /* Check that this call was applied to the target element. */ 33210 if (element === activeElement) { 33211 33212 /* Flag a pause object to be resumed, which will occur during the next tick. In 33213 addition, the pause object will at that time be deleted */ 33214 activeCall[5].resume = true; 33215 33216 /* Once we match an element, we can bounce out to the next call entirely */ 33217 found = true; 33218 return false; 33219 } 33220 }); 33221 33222 /* Proceed to check next call if we have already matched */ 33223 if (found) { 33224 return false; 33225 } 33226 }); 33227 } 33228 33229 }); 33230 33231 /* Since resume creates no new tweens, exit out of Velocity. */ 33232 return getChain(); 33233 33234 case "finish": 33235 case "finishAll": 33236 case "stop": 33237 /******************* 33238 Action: Stop 33239 *******************/ 33240 33241 /* Clear the currently-active delay on each targeted element. */ 33242 $.each(elements, function(i, element) { 33243 if (Data(element) && Data(element).delayTimer) { 33244 /* Stop the timer from triggering its cached next() function. */ 33245 clearTimeout(Data(element).delayTimer.setTimeout); 33246 33247 /* Manually call the next() function so that the subsequent queue items can progress. */ 33248 if (Data(element).delayTimer.next) { 33249 Data(element).delayTimer.next(); 33250 } 33251 33252 delete Data(element).delayTimer; 33253 } 33254 33255 /* If we want to finish everything in the queue, we have to iterate through it 33256 and call each function. This will make them active calls below, which will 33257 cause them to be applied via the duration setting. */ 33258 if (propertiesMap === "finishAll" && (options === true || Type.isString(options))) { 33259 /* Iterate through the items in the element's queue. */ 33260 $.each($.queue(element, Type.isString(options) ? options : ""), function(_, item) { 33261 /* The queue array can contain an "inprogress" string, which we skip. */ 33262 if (Type.isFunction(item)) { 33263 item(); 33264 } 33265 }); 33266 33267 /* Clearing the $.queue() array is achieved by resetting it to []. */ 33268 $.queue(element, Type.isString(options) ? options : "", []); 33269 } 33270 }); 33271 33272 var callsToStop = []; 33273 33274 /* When the stop action is triggered, the elements' currently active call is immediately stopped. The active call might have 33275 been applied to multiple elements, in which case all of the call's elements will be stopped. When an element 33276 is stopped, the next item in its animation queue is immediately triggered. */ 33277 /* An additional argument may be passed in to clear an element's remaining queued calls. Either true (which defaults to the "fx" queue) 33278 or a custom queue string can be passed in. */ 33279 /* Note: The stop command runs prior to Velocity's Queueing phase since its behavior is intended to take effect *immediately*, 33280 regardless of the element's current queue state. */ 33281 33282 /* Iterate through every active call. */ 33283 $.each(Velocity.State.calls, function(i, activeCall) { 33284 /* Inactive calls are set to false by the logic inside completeCall(). Skip them. */ 33285 if (activeCall) { 33286 /* Iterate through the active call's targeted elements. */ 33287 $.each(activeCall[1], function(k, activeElement) { 33288 /* If true was passed in as a secondary argument, clear absolutely all calls on this element. Otherwise, only 33289 clear calls associated with the relevant queue. */ 33290 /* Call stopping logic works as follows: 33291 - options === true --> stop current default queue calls (and queue:false calls), including remaining queued ones. 33292 - options === undefined --> stop current queue:"" call and all queue:false calls. 33293 - options === false --> stop only queue:false calls. 33294 - options === "custom" --> stop current queue:"custom" call, including remaining queued ones (there is no functionality to only clear the currently-running queue:"custom" call). */ 33295 var queueName = (options === undefined) ? "" : options; 33296 33297 if (queueName !== true && (activeCall[2].queue !== queueName) && !(options === undefined && activeCall[2].queue === false)) { 33298 return true; 33299 } 33300 33301 /* Iterate through the calls targeted by the stop command. */ 33302 $.each(elements, function(l, element) { 33303 /* Check that this call was applied to the target element. */ 33304 if (element === activeElement) { 33305 /* Optionally clear the remaining queued calls. If we're doing "finishAll" this won't find anything, 33306 due to the queue-clearing above. */ 33307 if (options === true || Type.isString(options)) { 33308 /* Iterate through the items in the element's queue. */ 33309 $.each($.queue(element, Type.isString(options) ? options : ""), function(_, item) { 33310 /* The queue array can contain an "inprogress" string, which we skip. */ 33311 if (Type.isFunction(item)) { 33312 /* Pass the item's callback a flag indicating that we want to abort from the queue call. 33313 (Specifically, the queue will resolve the call's associated promise then abort.) */ 33314 item(null, true); 33315 } 33316 }); 33317 33318 /* Clearing the $.queue() array is achieved by resetting it to []. */ 33319 $.queue(element, Type.isString(options) ? options : "", []); 33320 } 33321 33322 if (propertiesMap === "stop") { 33323 /* Since "reverse" uses cached start values (the previous call's endValues), these values must be 33324 changed to reflect the final value that the elements were actually tweened to. */ 33325 /* Note: If only queue:false animations are currently running on an element, it won't have a tweensContainer 33326 object. Also, queue:false animations can't be reversed. */ 33327 var data = Data(element); 33328 if (data && data.tweensContainer && queueName !== false) { 33329 $.each(data.tweensContainer, function(m, activeTween) { 33330 activeTween.endValue = activeTween.currentValue; 33331 }); 33332 } 33333 33334 callsToStop.push(i); 33335 } else if (propertiesMap === "finish" || propertiesMap === "finishAll") { 33336 /* To get active tweens to finish immediately, we forcefully shorten their durations to 1ms so that 33337 they finish upon the next rAf tick then proceed with normal call completion logic. */ 33338 activeCall[2].duration = 1; 33339 } 33340 } 33341 }); 33342 }); 33343 } 33344 }); 33345 33346 /* Prematurely call completeCall() on each matched active call. Pass an additional flag for "stop" to indicate 33347 that the complete callback and display:none setting should be skipped since we're completing prematurely. */ 33348 if (propertiesMap === "stop") { 33349 $.each(callsToStop, function(i, j) { 33350 completeCall(j, true); 33351 }); 33352 33353 if (promiseData.promise) { 33354 /* Immediately resolve the promise associated with this stop call since stop runs synchronously. */ 33355 promiseData.resolver(elements); 33356 } 33357 } 33358 33359 /* Since we're stopping, and not proceeding with queueing, exit out of Velocity. */ 33360 return getChain(); 33361 33362 default: 33363 /* Treat a non-empty plain object as a literal properties map. */ 33364 if ($.isPlainObject(propertiesMap) && !Type.isEmptyObject(propertiesMap)) { 33365 action = "start"; 33366 33367 /**************** 33368 Redirects 33369 ****************/ 33370 33371 /* Check if a string matches a registered redirect (see Redirects above). */ 33372 } else if (Type.isString(propertiesMap) && Velocity.Redirects[propertiesMap]) { 33373 opts = $.extend({}, options); 33374 33375 var durationOriginal = opts.duration, 33376 delayOriginal = opts.delay || 0; 33377 33378 /* If the backwards option was passed in, reverse the element set so that elements animate from the last to the first. */ 33379 if (opts.backwards === true) { 33380 elements = $.extend(true, [], elements).reverse(); 33381 } 33382 33383 /* Individually trigger the redirect for each element in the set to prevent users from having to handle iteration logic in their redirect. */ 33384 $.each(elements, function(elementIndex, element) { 33385 /* If the stagger option was passed in, successively delay each element by the stagger value (in ms). Retain the original delay value. */ 33386 if (parseFloat(opts.stagger)) { 33387 opts.delay = delayOriginal + (parseFloat(opts.stagger) * elementIndex); 33388 } else if (Type.isFunction(opts.stagger)) { 33389 opts.delay = delayOriginal + opts.stagger.call(element, elementIndex, elementsLength); 33390 } 33391 33392 /* If the drag option was passed in, successively increase/decrease (depending on the presense of opts.backwards) 33393 the duration of each element's animation, using floors to prevent producing very short durations. */ 33394 if (opts.drag) { 33395 /* Default the duration of UI pack effects (callouts and transitions) to 1000ms instead of the usual default duration of 400ms. */ 33396 opts.duration = parseFloat(durationOriginal) || (/^(callout|transition)/.test(propertiesMap) ? 1000 : DURATION_DEFAULT); 33397 33398 /* For each element, take the greater duration of: A) animation completion percentage relative to the original duration, 33399 B) 75% of the original duration, or C) a 200ms fallback (in case duration is already set to a low value). 33400 The end result is a baseline of 75% of the redirect's duration that increases/decreases as the end of the element set is approached. */ 33401 opts.duration = Math.max(opts.duration * (opts.backwards ? 1 - elementIndex / elementsLength : (elementIndex + 1) / elementsLength), opts.duration * 0.75, 200); 33402 } 33403 33404 /* Pass in the call's opts object so that the redirect can optionally extend it. It defaults to an empty object instead of null to 33405 reduce the opts checking logic required inside the redirect. */ 33406 Velocity.Redirects[propertiesMap].call(element, element, opts || {}, elementIndex, elementsLength, elements, promiseData.promise ? promiseData : undefined); 33407 }); 33408 33409 /* Since the animation logic resides within the redirect's own code, abort the remainder of this call. 33410 (The performance overhead up to this point is virtually non-existant.) */ 33411 /* Note: The jQuery call chain is kept intact by returning the complete element set. */ 33412 return getChain(); 33413 } else { 33414 var abortError = "Velocity: First argument (" + propertiesMap + ") was not a property map, a known action, or a registered redirect. Aborting."; 33415 33416 if (promiseData.promise) { 33417 promiseData.rejecter(new Error(abortError)); 33418 } else { 33419 console.log(abortError); 33420 } 33421 33422 return getChain(); 33423 } 33424 } 33425 33426 /************************** 33427 Call-Wide Variables 33428 **************************/ 33429 33430 /* A container for CSS unit conversion ratios (e.g. %, rem, and em ==> px) that is used to cache ratios across all elements 33431 being animated in a single Velocity call. Calculating unit ratios necessitates DOM querying and updating, and is therefore 33432 avoided (via caching) wherever possible. This container is call-wide instead of page-wide to avoid the risk of using stale 33433 conversion metrics across Velocity animations that are not immediately consecutively chained. */ 33434 var callUnitConversionData = { 33435 lastParent: null, 33436 lastPosition: null, 33437 lastFontSize: null, 33438 lastPercentToPxWidth: null, 33439 lastPercentToPxHeight: null, 33440 lastEmToPx: null, 33441 remToPx: null, 33442 vwToPx: null, 33443 vhToPx: null 33444 }; 33445 33446 /* A container for all the ensuing tween data and metadata associated with this call. This container gets pushed to the page-wide 33447 Velocity.State.calls array that is processed during animation ticking. */ 33448 var call = []; 33449 33450 /************************ 33451 Element Processing 33452 ************************/ 33453 33454 /* Element processing consists of three parts -- data processing that cannot go stale and data processing that *can* go stale (i.e. third-party style modifications): 33455 1) Pre-Queueing: Element-wide variables, including the element's data storage, are instantiated. Call options are prepared. If triggered, the Stop action is executed. 33456 2) Queueing: The logic that runs once this call has reached its point of execution in the element's $.queue() stack. Most logic is placed here to avoid risking it becoming stale. 33457 3) Pushing: Consolidation of the tween data followed by its push onto the global in-progress calls container. 33458 `elementArrayIndex` allows passing index of the element in the original array to value functions. 33459 If `elementsIndex` were used instead the index would be determined by the elements' per-element queue. 33460 */ 33461 function processElement(element, elementArrayIndex) { 33462 33463 /************************* 33464 Part I: Pre-Queueing 33465 *************************/ 33466 33467 /*************************** 33468 Element-Wide Variables 33469 ***************************/ 33470 33471 var /* The runtime opts object is the extension of the current call's options and Velocity's page-wide option defaults. */ 33472 opts = $.extend({}, Velocity.defaults, options), 33473 /* A container for the processed data associated with each property in the propertyMap. 33474 (Each property in the map produces its own "tween".) */ 33475 tweensContainer = {}, 33476 elementUnitConversionData; 33477 33478 /****************** 33479 Element Init 33480 ******************/ 33481 33482 if (Data(element) === undefined) { 33483 Velocity.init(element); 33484 } 33485 33486 /****************** 33487 Option: Delay 33488 ******************/ 33489 33490 /* Since queue:false doesn't respect the item's existing queue, we avoid injecting its delay here (it's set later on). */ 33491 /* Note: Velocity rolls its own delay function since jQuery doesn't have a utility alias for $.fn.delay() 33492 (and thus requires jQuery element creation, which we avoid since its overhead includes DOM querying). */ 33493 if (parseFloat(opts.delay) && opts.queue !== false) { 33494 $.queue(element, opts.queue, function(next) { 33495 /* This is a flag used to indicate to the upcoming completeCall() function that this queue entry was initiated by Velocity. See completeCall() for further details. */ 33496 Velocity.velocityQueueEntryFlag = true; 33497 33498 /* The ensuing queue item (which is assigned to the "next" argument that $.queue() automatically passes in) will be triggered after a setTimeout delay. 33499 The setTimeout is stored so that it can be subjected to clearTimeout() if this animation is prematurely stopped via Velocity's "stop" command, and 33500 delayBegin/delayTime is used to ensure we can "pause" and "resume" a tween that is still mid-delay. */ 33501 33502 /* Temporarily store delayed elements to facilite access for global pause/resume */ 33503 var callIndex = Velocity.State.delayedElements.count++; 33504 Velocity.State.delayedElements[callIndex] = element; 33505 33506 var delayComplete = (function(index) { 33507 return function() { 33508 /* Clear the temporary element */ 33509 Velocity.State.delayedElements[index] = false; 33510 33511 /* Finally, issue the call */ 33512 next(); 33513 }; 33514 })(callIndex); 33515 33516 33517 Data(element).delayBegin = (new Date()).getTime(); 33518 Data(element).delay = parseFloat(opts.delay); 33519 Data(element).delayTimer = { 33520 setTimeout: setTimeout(next, parseFloat(opts.delay)), 33521 next: delayComplete 33522 }; 33523 }); 33524 } 33525 33526 /********************* 33527 Option: Duration 33528 *********************/ 33529 33530 /* Support for jQuery's named durations. */ 33531 switch (opts.duration.toString().toLowerCase()) { 33532 case "fast": 33533 opts.duration = 200; 33534 break; 33535 33536 case "normal": 33537 opts.duration = DURATION_DEFAULT; 33538 break; 33539 33540 case "slow": 33541 opts.duration = 600; 33542 break; 33543 33544 default: 33545 /* Remove the potential "ms" suffix and default to 1 if the user is attempting to set a duration of 0 (in order to produce an immediate style change). */ 33546 opts.duration = parseFloat(opts.duration) || 1; 33547 } 33548 33549 /************************ 33550 Global Option: Mock 33551 ************************/ 33552 33553 if (Velocity.mock !== false) { 33554 /* In mock mode, all animations are forced to 1ms so that they occur immediately upon the next rAF tick. 33555 Alternatively, a multiplier can be passed in to time remap all delays and durations. */ 33556 if (Velocity.mock === true) { 33557 opts.duration = opts.delay = 1; 33558 } else { 33559 opts.duration *= parseFloat(Velocity.mock) || 1; 33560 opts.delay *= parseFloat(Velocity.mock) || 1; 33561 } 33562 } 33563 33564 /******************* 33565 Option: Easing 33566 *******************/ 33567 33568 opts.easing = getEasing(opts.easing, opts.duration); 33569 33570 /********************** 33571 Option: Callbacks 33572 **********************/ 33573 33574 /* Callbacks must functions. Otherwise, default to null. */ 33575 if (opts.begin && !Type.isFunction(opts.begin)) { 33576 opts.begin = null; 33577 } 33578 33579 if (opts.progress && !Type.isFunction(opts.progress)) { 33580 opts.progress = null; 33581 } 33582 33583 if (opts.complete && !Type.isFunction(opts.complete)) { 33584 opts.complete = null; 33585 } 33586 33587 /********************************* 33588 Option: Display & Visibility 33589 *********************************/ 33590 33591 /* Refer to Velocity's documentation (VelocityJS.org/#displayAndVisibility) for a description of the display and visibility options' behavior. */ 33592 /* Note: We strictly check for undefined instead of falsiness because display accepts an empty string value. */ 33593 if (opts.display !== undefined && opts.display !== null) { 33594 opts.display = opts.display.toString().toLowerCase(); 33595 33596 /* Users can pass in a special "auto" value to instruct Velocity to set the element to its default display value. */ 33597 if (opts.display === "auto") { 33598 opts.display = Velocity.CSS.Values.getDisplayType(element); 33599 } 33600 } 33601 33602 if (opts.visibility !== undefined && opts.visibility !== null) { 33603 opts.visibility = opts.visibility.toString().toLowerCase(); 33604 } 33605 33606 /********************** 33607 Option: mobileHA 33608 **********************/ 33609 33610 /* When set to true, and if this is a mobile device, mobileHA automatically enables hardware acceleration (via a null transform hack) 33611 on animating elements. HA is removed from the element at the completion of its animation. */ 33612 /* Note: Android Gingerbread doesn't support HA. If a null transform hack (mobileHA) is in fact set, it will prevent other tranform subproperties from taking effect. */ 33613 /* Note: You can read more about the use of mobileHA in Velocity's documentation: VelocityJS.org/#mobileHA. */ 33614 opts.mobileHA = (opts.mobileHA && Velocity.State.isMobile && !Velocity.State.isGingerbread); 33615 33616 /*********************** 33617 Part II: Queueing 33618 ***********************/ 33619 33620 /* When a set of elements is targeted by a Velocity call, the set is broken up and each element has the current Velocity call individually queued onto it. 33621 In this way, each element's existing queue is respected; some elements may already be animating and accordingly should not have this current Velocity call triggered immediately. */ 33622 /* In each queue, tween data is processed for each animating property then pushed onto the call-wide calls array. When the last element in the set has had its tweens processed, 33623 the call array is pushed to Velocity.State.calls for live processing by the requestAnimationFrame tick. */ 33624 function buildQueue(next) { 33625 var data, lastTweensContainer; 33626 33627 /******************* 33628 Option: Begin 33629 *******************/ 33630 33631 /* The begin callback is fired once per call -- not once per elemenet -- and is passed the full raw DOM element set as both its context and its first argument. */ 33632 if (opts.begin && elementsIndex === 0) { 33633 /* We throw callbacks in a setTimeout so that thrown errors don't halt the execution of Velocity itself. */ 33634 try { 33635 opts.begin.call(elements, elements); 33636 } catch (error) { 33637 setTimeout(function() { 33638 throw error; 33639 }, 1); 33640 } 33641 } 33642 33643 /***************************************** 33644 Tween Data Construction (for Scroll) 33645 *****************************************/ 33646 33647 /* Note: In order to be subjected to chaining and animation options, scroll's tweening is routed through Velocity as if it were a standard CSS property animation. */ 33648 if (action === "scroll") { 33649 /* The scroll action uniquely takes an optional "offset" option -- specified in pixels -- that offsets the targeted scroll position. */ 33650 var scrollDirection = (/^x$/i.test(opts.axis) ? "Left" : "Top"), 33651 scrollOffset = parseFloat(opts.offset) || 0, 33652 scrollPositionCurrent, 33653 scrollPositionCurrentAlternate, 33654 scrollPositionEnd; 33655 33656 /* Scroll also uniquely takes an optional "container" option, which indicates the parent element that should be scrolled -- 33657 as opposed to the browser window itself. This is useful for scrolling toward an element that's inside an overflowing parent element. */ 33658 if (opts.container) { 33659 /* Ensure that either a jQuery object or a raw DOM element was passed in. */ 33660 if (Type.isWrapped(opts.container) || Type.isNode(opts.container)) { 33661 /* Extract the raw DOM element from the jQuery wrapper. */ 33662 opts.container = opts.container[0] || opts.container; 33663 /* Note: Unlike other properties in Velocity, the browser's scroll position is never cached since it so frequently changes 33664 (due to the user's natural interaction with the page). */ 33665 scrollPositionCurrent = opts.container["scroll" + scrollDirection]; /* GET */ 33666 33667 /* $.position() values are relative to the container's currently viewable area (without taking into account the container's true dimensions 33668 -- say, for example, if the container was not overflowing). Thus, the scroll end value is the sum of the child element's position *and* 33669 the scroll container's current scroll position. */ 33670 scrollPositionEnd = (scrollPositionCurrent + $(element).position()[scrollDirection.toLowerCase()]) + scrollOffset; /* GET */ 33671 /* If a value other than a jQuery object or a raw DOM element was passed in, default to null so that this option is ignored. */ 33672 } else { 33673 opts.container = null; 33674 } 33675 } else { 33676 /* If the window itself is being scrolled -- not a containing element -- perform a live scroll position lookup using 33677 the appropriate cached property names (which differ based on browser type). */ 33678 scrollPositionCurrent = Velocity.State.scrollAnchor[Velocity.State["scrollProperty" + scrollDirection]]; /* GET */ 33679 /* When scrolling the browser window, cache the alternate axis's current value since window.scrollTo() doesn't let us change only one value at a time. */ 33680 scrollPositionCurrentAlternate = Velocity.State.scrollAnchor[Velocity.State["scrollProperty" + (scrollDirection === "Left" ? "Top" : "Left")]]; /* GET */ 33681 33682 /* Unlike $.position(), $.offset() values are relative to the browser window's true dimensions -- not merely its currently viewable area -- 33683 and therefore end values do not need to be compounded onto current values. */ 33684 scrollPositionEnd = $(element).offset()[scrollDirection.toLowerCase()] + scrollOffset; /* GET */ 33685 } 33686 33687 /* Since there's only one format that scroll's associated tweensContainer can take, we create it manually. */ 33688 tweensContainer = { 33689 scroll: { 33690 rootPropertyValue: false, 33691 startValue: scrollPositionCurrent, 33692 currentValue: scrollPositionCurrent, 33693 endValue: scrollPositionEnd, 33694 unitType: "", 33695 easing: opts.easing, 33696 scrollData: { 33697 container: opts.container, 33698 direction: scrollDirection, 33699 alternateValue: scrollPositionCurrentAlternate 33700 } 33701 }, 33702 element: element 33703 }; 33704 33705 if (Velocity.debug) { 33706 console.log("tweensContainer (scroll): ", tweensContainer.scroll, element); 33707 } 33708 33709 /****************************************** 33710 Tween Data Construction (for Reverse) 33711 ******************************************/ 33712 33713 /* Reverse acts like a "start" action in that a property map is animated toward. The only difference is 33714 that the property map used for reverse is the inverse of the map used in the previous call. Thus, we manipulate 33715 the previous call to construct our new map: use the previous map's end values as our new map's start values. Copy over all other data. */ 33716 /* Note: Reverse can be directly called via the "reverse" parameter, or it can be indirectly triggered via the loop option. (Loops are composed of multiple reverses.) */ 33717 /* Note: Reverse calls do not need to be consecutively chained onto a currently-animating element in order to operate on cached values; 33718 there is no harm to reverse being called on a potentially stale data cache since reverse's behavior is simply defined 33719 as reverting to the element's values as they were prior to the previous *Velocity* call. */ 33720 } else if (action === "reverse") { 33721 data = Data(element); 33722 33723 /* Abort if there is no prior animation data to reverse to. */ 33724 if (!data) { 33725 return; 33726 } 33727 33728 if (!data.tweensContainer) { 33729 /* Dequeue the element so that this queue entry releases itself immediately, allowing subsequent queue entries to run. */ 33730 $.dequeue(element, opts.queue); 33731 33732 return; 33733 } else { 33734 /********************* 33735 Options Parsing 33736 *********************/ 33737 33738 /* If the element was hidden via the display option in the previous call, 33739 revert display to "auto" prior to reversal so that the element is visible again. */ 33740 if (data.opts.display === "none") { 33741 data.opts.display = "auto"; 33742 } 33743 33744 if (data.opts.visibility === "hidden") { 33745 data.opts.visibility = "visible"; 33746 } 33747 33748 /* If the loop option was set in the previous call, disable it so that "reverse" calls aren't recursively generated. 33749 Further, remove the previous call's callback options; typically, users do not want these to be refired. */ 33750 data.opts.loop = false; 33751 data.opts.begin = null; 33752 data.opts.complete = null; 33753 33754 /* Since we're extending an opts object that has already been extended with the defaults options object, 33755 we remove non-explicitly-defined properties that are auto-assigned values. */ 33756 if (!options.easing) { 33757 delete opts.easing; 33758 } 33759 33760 if (!options.duration) { 33761 delete opts.duration; 33762 } 33763 33764 /* The opts object used for reversal is an extension of the options object optionally passed into this 33765 reverse call plus the options used in the previous Velocity call. */ 33766 opts = $.extend({}, data.opts, opts); 33767 33768 /************************************* 33769 Tweens Container Reconstruction 33770 *************************************/ 33771 33772 /* Create a deepy copy (indicated via the true flag) of the previous call's tweensContainer. */ 33773 lastTweensContainer = $.extend(true, {}, data ? data.tweensContainer : null); 33774 33775 /* Manipulate the previous tweensContainer by replacing its end values and currentValues with its start values. */ 33776 for (var lastTween in lastTweensContainer) { 33777 /* In addition to tween data, tweensContainers contain an element property that we ignore here. */ 33778 if (lastTweensContainer.hasOwnProperty(lastTween) && lastTween !== "element") { 33779 var lastStartValue = lastTweensContainer[lastTween].startValue; 33780 33781 lastTweensContainer[lastTween].startValue = lastTweensContainer[lastTween].currentValue = lastTweensContainer[lastTween].endValue; 33782 lastTweensContainer[lastTween].endValue = lastStartValue; 33783 33784 /* Easing is the only option that embeds into the individual tween data (since it can be defined on a per-property basis). 33785 Accordingly, every property's easing value must be updated when an options object is passed in with a reverse call. 33786 The side effect of this extensibility is that all per-property easing values are forcefully reset to the new value. */ 33787 if (!Type.isEmptyObject(options)) { 33788 lastTweensContainer[lastTween].easing = opts.easing; 33789 } 33790 33791 if (Velocity.debug) { 33792 console.log("reverse tweensContainer (" + lastTween + "): " + JSON.stringify(lastTweensContainer[lastTween]), element); 33793 } 33794 } 33795 } 33796 33797 tweensContainer = lastTweensContainer; 33798 } 33799 33800 /***************************************** 33801 Tween Data Construction (for Start) 33802 *****************************************/ 33803 33804 } else if (action === "start") { 33805 33806 /************************* 33807 Value Transferring 33808 *************************/ 33809 33810 /* If this queue entry follows a previous Velocity-initiated queue entry *and* if this entry was created 33811 while the element was in the process of being animated by Velocity, then this current call is safe to use 33812 the end values from the prior call as its start values. Velocity attempts to perform this value transfer 33813 process whenever possible in order to avoid requerying the DOM. */ 33814 /* If values aren't transferred from a prior call and start values were not forcefed by the user (more on this below), 33815 then the DOM is queried for the element's current values as a last resort. */ 33816 /* Note: Conversely, animation reversal (and looping) *always* perform inter-call value transfers; they never requery the DOM. */ 33817 33818 data = Data(element); 33819 33820 /* The per-element isAnimating flag is used to indicate whether it's safe (i.e. the data isn't stale) 33821 to transfer over end values to use as start values. If it's set to true and there is a previous 33822 Velocity call to pull values from, do so. */ 33823 if (data && data.tweensContainer && data.isAnimating === true) { 33824 lastTweensContainer = data.tweensContainer; 33825 } 33826 33827 /*************************** 33828 Tween Data Calculation 33829 ***************************/ 33830 33831 /* This function parses property data and defaults endValue, easing, and startValue as appropriate. */ 33832 /* Property map values can either take the form of 1) a single value representing the end value, 33833 or 2) an array in the form of [ endValue, [, easing] [, startValue] ]. 33834 The optional third parameter is a forcefed startValue to be used instead of querying the DOM for 33835 the element's current value. Read Velocity's docmentation to learn more about forcefeeding: VelocityJS.org/#forcefeeding */ 33836 var parsePropertyValue = function(valueData, skipResolvingEasing) { 33837 var endValue, easing, startValue; 33838 33839 /* If we have a function as the main argument then resolve it first, in case it returns an array that needs to be split */ 33840 if (Type.isFunction(valueData)) { 33841 valueData = valueData.call(element, elementArrayIndex, elementsLength); 33842 } 33843 33844 /* Handle the array format, which can be structured as one of three potential overloads: 33845 A) [ endValue, easing, startValue ], B) [ endValue, easing ], or C) [ endValue, startValue ] */ 33846 if (Type.isArray(valueData)) { 33847 /* endValue is always the first item in the array. Don't bother validating endValue's value now 33848 since the ensuing property cycling logic does that. */ 33849 endValue = valueData[0]; 33850 33851 /* Two-item array format: If the second item is a number, function, or hex string, treat it as a 33852 start value since easings can only be non-hex strings or arrays. */ 33853 if ((!Type.isArray(valueData[1]) && /^[\d-]/.test(valueData[1])) || Type.isFunction(valueData[1]) || CSS.RegEx.isHex.test(valueData[1])) { 33854 startValue = valueData[1]; 33855 /* Two or three-item array: If the second item is a non-hex string easing name or an array, treat it as an easing. */ 33856 } else if ((Type.isString(valueData[1]) && !CSS.RegEx.isHex.test(valueData[1]) && Velocity.Easings[valueData[1]]) || Type.isArray(valueData[1])) { 33857 easing = skipResolvingEasing ? valueData[1] : getEasing(valueData[1], opts.duration); 33858 33859 /* Don't bother validating startValue's value now since the ensuing property cycling logic inherently does that. */ 33860 startValue = valueData[2]; 33861 } else { 33862 startValue = valueData[1] || valueData[2]; 33863 } 33864 /* Handle the single-value format. */ 33865 } else { 33866 endValue = valueData; 33867 } 33868 33869 /* Default to the call's easing if a per-property easing type was not defined. */ 33870 if (!skipResolvingEasing) { 33871 easing = easing || opts.easing; 33872 } 33873 33874 /* If functions were passed in as values, pass the function the current element as its context, 33875 plus the element's index and the element set's size as arguments. Then, assign the returned value. */ 33876 if (Type.isFunction(endValue)) { 33877 endValue = endValue.call(element, elementArrayIndex, elementsLength); 33878 } 33879 33880 if (Type.isFunction(startValue)) { 33881 startValue = startValue.call(element, elementArrayIndex, elementsLength); 33882 } 33883 33884 /* Allow startValue to be left as undefined to indicate to the ensuing code that its value was not forcefed. */ 33885 return [endValue || 0, easing, startValue]; 33886 }; 33887 33888 var fixPropertyValue = function(property, valueData) { 33889 /* In case this property is a hook, there are circumstances where we will intend to work on the hook's root property and not the hooked subproperty. */ 33890 var rootProperty = CSS.Hooks.getRoot(property), 33891 rootPropertyValue = false, 33892 /* Parse out endValue, easing, and startValue from the property's data. */ 33893 endValue = valueData[0], 33894 easing = valueData[1], 33895 startValue = valueData[2], 33896 pattern; 33897 33898 /************************** 33899 Start Value Sourcing 33900 **************************/ 33901 33902 /* Other than for the dummy tween property, properties that are not supported by the browser (and do not have an associated normalization) will 33903 inherently produce no style changes when set, so they are skipped in order to decrease animation tick overhead. 33904 Property support is determined via prefixCheck(), which returns a false flag when no supported is detected. */ 33905 /* Note: Since SVG elements have some of their properties directly applied as HTML attributes, 33906 there is no way to check for their explicit browser support, and so we skip skip this check for them. */ 33907 if ((!data || !data.isSVG) && rootProperty !== "tween" && CSS.Names.prefixCheck(rootProperty)[1] === false && CSS.Normalizations.registered[rootProperty] === undefined) { 33908 if (Velocity.debug) { 33909 console.log("Skipping [" + rootProperty + "] due to a lack of browser support."); 33910 } 33911 return; 33912 } 33913 33914 /* If the display option is being set to a non-"none" (e.g. "block") and opacity (filter on IE<=8) is being 33915 animated to an endValue of non-zero, the user's intention is to fade in from invisible, thus we forcefeed opacity 33916 a startValue of 0 if its startValue hasn't already been sourced by value transferring or prior forcefeeding. */ 33917 if (((opts.display !== undefined && opts.display !== null && opts.display !== "none") || (opts.visibility !== undefined && opts.visibility !== "hidden")) && /opacity|filter/.test(property) && !startValue && endValue !== 0) { 33918 startValue = 0; 33919 } 33920 33921 /* If values have been transferred from the previous Velocity call, extract the endValue and rootPropertyValue 33922 for all of the current call's properties that were *also* animated in the previous call. */ 33923 /* Note: Value transferring can optionally be disabled by the user via the _cacheValues option. */ 33924 if (opts._cacheValues && lastTweensContainer && lastTweensContainer[property]) { 33925 if (startValue === undefined) { 33926 startValue = lastTweensContainer[property].endValue + lastTweensContainer[property].unitType; 33927 } 33928 33929 /* The previous call's rootPropertyValue is extracted from the element's data cache since that's the 33930 instance of rootPropertyValue that gets freshly updated by the tweening process, whereas the rootPropertyValue 33931 attached to the incoming lastTweensContainer is equal to the root property's value prior to any tweening. */ 33932 rootPropertyValue = data.rootPropertyValueCache[rootProperty]; 33933 /* If values were not transferred from a previous Velocity call, query the DOM as needed. */ 33934 } else { 33935 /* Handle hooked properties. */ 33936 if (CSS.Hooks.registered[property]) { 33937 if (startValue === undefined) { 33938 rootPropertyValue = CSS.getPropertyValue(element, rootProperty); /* GET */ 33939 /* Note: The following getPropertyValue() call does not actually trigger a DOM query; 33940 getPropertyValue() will extract the hook from rootPropertyValue. */ 33941 startValue = CSS.getPropertyValue(element, property, rootPropertyValue); 33942 /* If startValue is already defined via forcefeeding, do not query the DOM for the root property's value; 33943 just grab rootProperty's zero-value template from CSS.Hooks. This overwrites the element's actual 33944 root property value (if one is set), but this is acceptable since the primary reason users forcefeed is 33945 to avoid DOM queries, and thus we likewise avoid querying the DOM for the root property's value. */ 33946 } else { 33947 /* Grab this hook's zero-value template, e.g. "0px 0px 0px black". */ 33948 rootPropertyValue = CSS.Hooks.templates[rootProperty][1]; 33949 } 33950 /* Handle non-hooked properties that haven't already been defined via forcefeeding. */ 33951 } else if (startValue === undefined) { 33952 startValue = CSS.getPropertyValue(element, property); /* GET */ 33953 } 33954 } 33955 33956 /************************** 33957 Value Data Extraction 33958 **************************/ 33959 33960 var separatedValue, 33961 endValueUnitType, 33962 startValueUnitType, 33963 operator = false; 33964 33965 /* Separates a property value into its numeric value and its unit type. */ 33966 var separateValue = function(property, value) { 33967 var unitType, 33968 numericValue; 33969 33970 numericValue = (value || "0") 33971 .toString() 33972 .toLowerCase() 33973 /* Match the unit type at the end of the value. */ 33974 .replace(/[%A-z]+$/, function(match) { 33975 /* Grab the unit type. */ 33976 unitType = match; 33977 33978 /* Strip the unit type off of value. */ 33979 return ""; 33980 }); 33981 33982 /* If no unit type was supplied, assign one that is appropriate for this property (e.g. "deg" for rotateZ or "px" for width). */ 33983 if (!unitType) { 33984 unitType = CSS.Values.getUnitType(property); 33985 } 33986 33987 return [numericValue, unitType]; 33988 }; 33989 33990 if (startValue !== endValue && Type.isString(startValue) && Type.isString(endValue)) { 33991 pattern = ""; 33992 var iStart = 0, // index in startValue 33993 iEnd = 0, // index in endValue 33994 aStart = [], // array of startValue numbers 33995 aEnd = [], // array of endValue numbers 33996 inCalc = 0, // Keep track of being inside a "calc()" so we don't duplicate it 33997 inRGB = 0, // Keep track of being inside an RGB as we can't use fractional values 33998 inRGBA = 0; // Keep track of being inside an RGBA as we must pass fractional for the alpha channel 33999 34000 startValue = CSS.Hooks.fixColors(startValue); 34001 endValue = CSS.Hooks.fixColors(endValue); 34002 while (iStart < startValue.length && iEnd < endValue.length) { 34003 var cStart = startValue[iStart], 34004 cEnd = endValue[iEnd]; 34005 34006 if (/[\d\.]/.test(cStart) && /[\d\.]/.test(cEnd)) { 34007 var tStart = cStart, // temporary character buffer 34008 tEnd = cEnd, // temporary character buffer 34009 dotStart = ".", // Make sure we can only ever match a single dot in a decimal 34010 dotEnd = "."; // Make sure we can only ever match a single dot in a decimal 34011 34012 while (++iStart < startValue.length) { 34013 cStart = startValue[iStart]; 34014 if (cStart === dotStart) { 34015 dotStart = ".."; // Can never match two characters 34016 } else if (!/\d/.test(cStart)) { 34017 break; 34018 } 34019 tStart += cStart; 34020 } 34021 while (++iEnd < endValue.length) { 34022 cEnd = endValue[iEnd]; 34023 if (cEnd === dotEnd) { 34024 dotEnd = ".."; // Can never match two characters 34025 } else if (!/\d/.test(cEnd)) { 34026 break; 34027 } 34028 tEnd += cEnd; 34029 } 34030 var uStart = CSS.Hooks.getUnit(startValue, iStart), // temporary unit type 34031 uEnd = CSS.Hooks.getUnit(endValue, iEnd); // temporary unit type 34032 34033 iStart += uStart.length; 34034 iEnd += uEnd.length; 34035 if (uStart === uEnd) { 34036 // Same units 34037 if (tStart === tEnd) { 34038 // Same numbers, so just copy over 34039 pattern += tStart + uStart; 34040 } else { 34041 // Different numbers, so store them 34042 pattern += "{" + aStart.length + (inRGB ? "!" : "") + "}" + uStart; 34043 aStart.push(parseFloat(tStart)); 34044 aEnd.push(parseFloat(tEnd)); 34045 } 34046 } else { 34047 // Different units, so put into a "calc(from + to)" and animate each side to/from zero 34048 var nStart = parseFloat(tStart), 34049 nEnd = parseFloat(tEnd); 34050 34051 pattern += (inCalc < 5 ? "calc" : "") + "(" 34052 + (nStart ? "{" + aStart.length + (inRGB ? "!" : "") + "}" : "0") + uStart 34053 + " + " 34054 + (nEnd ? "{" + (aStart.length + 1) + (inRGB ? "!" : "") + "}" : "0") + uEnd 34055 + ")"; 34056 if (nStart) { 34057 aStart.push(parseFloat(tStart)); 34058 aStart.push(parseFloat(0)); 34059 } 34060 if (nEnd) { 34061 aEnd.push(parseFloat(0)); 34062 aEnd.push(parseFloat(tEnd)); 34063 } 34064 } 34065 } else if (cStart === cEnd) { 34066 pattern += cStart; 34067 iStart++; 34068 iEnd++; 34069 // Keep track of being inside a calc() 34070 if (inCalc === 0 && cStart === "c" 34071 || inCalc === 1 && cStart === "a" 34072 || inCalc === 2 && cStart === "l" 34073 || inCalc === 3 && cStart === "c" 34074 || inCalc >= 4 && cStart === "(" 34075 ) { 34076 inCalc++; 34077 } else if ((inCalc && inCalc < 5) 34078 || inCalc >= 4 && cStart === ")" && --inCalc < 5) { 34079 inCalc = 0; 34080 } 34081 // Keep track of being inside an rgb() / rgba() 34082 if (inRGB === 0 && cStart === "r" 34083 || inRGB === 1 && cStart === "g" 34084 || inRGB === 2 && cStart === "b" 34085 || inRGB === 3 && cStart === "a" 34086 || inRGB >= 3 && cStart === "(" 34087 ) { 34088 if (inRGB === 3 && cStart === "a") { 34089 inRGBA = 1; 34090 } 34091 inRGB++; 34092 } else if (inRGBA && cStart === ",") { 34093 if (++inRGBA > 3) { 34094 inRGB = inRGBA = 0; 34095 } 34096 } else if ((inRGBA && inRGB < (inRGBA ? 5 : 4)) 34097 || inRGB >= (inRGBA ? 4 : 3) && cStart === ")" && --inRGB < (inRGBA ? 5 : 4)) { 34098 inRGB = inRGBA = 0; 34099 } 34100 } else { 34101 inCalc = 0; 34102 // TODO: changing units, fixing colours 34103 break; 34104 } 34105 } 34106 if (iStart !== startValue.length || iEnd !== endValue.length) { 34107 if (Velocity.debug) { 34108 console.error("Trying to pattern match mis-matched strings [\"" + endValue + "\", \"" + startValue + "\"]"); 34109 } 34110 pattern = undefined; 34111 } 34112 if (pattern) { 34113 if (aStart.length) { 34114 if (Velocity.debug) { 34115 console.log("Pattern found \"" + pattern + "\" -> ", aStart, aEnd, "[" + startValue + "," + endValue + "]"); 34116 } 34117 startValue = aStart; 34118 endValue = aEnd; 34119 endValueUnitType = startValueUnitType = ""; 34120 } else { 34121 pattern = undefined; 34122 } 34123 } 34124 } 34125 34126 if (!pattern) { 34127 /* Separate startValue. */ 34128 separatedValue = separateValue(property, startValue); 34129 startValue = separatedValue[0]; 34130 startValueUnitType = separatedValue[1]; 34131 34132 /* Separate endValue, and extract a value operator (e.g. "+=", "-=") if one exists. */ 34133 separatedValue = separateValue(property, endValue); 34134 endValue = separatedValue[0].replace(/^([+-\/*])=/, function(match, subMatch) { 34135 operator = subMatch; 34136 34137 /* Strip the operator off of the value. */ 34138 return ""; 34139 }); 34140 endValueUnitType = separatedValue[1]; 34141 34142 /* Parse float values from endValue and startValue. Default to 0 if NaN is returned. */ 34143 startValue = parseFloat(startValue) || 0; 34144 endValue = parseFloat(endValue) || 0; 34145 34146 /*************************************** 34147 Property-Specific Value Conversion 34148 ***************************************/ 34149 34150 /* Custom support for properties that don't actually accept the % unit type, but where pollyfilling is trivial and relatively foolproof. */ 34151 if (endValueUnitType === "%") { 34152 /* A %-value fontSize/lineHeight is relative to the parent's fontSize (as opposed to the parent's dimensions), 34153 which is identical to the em unit's behavior, so we piggyback off of that. */ 34154 if (/^(fontSize|lineHeight)$/.test(property)) { 34155 /* Convert % into an em decimal value. */ 34156 endValue = endValue / 100; 34157 endValueUnitType = "em"; 34158 /* For scaleX and scaleY, convert the value into its decimal format and strip off the unit type. */ 34159 } else if (/^scale/.test(property)) { 34160 endValue = endValue / 100; 34161 endValueUnitType = ""; 34162 /* For RGB components, take the defined percentage of 255 and strip off the unit type. */ 34163 } else if (/(Red|Green|Blue)$/i.test(property)) { 34164 endValue = (endValue / 100) * 255; 34165 endValueUnitType = ""; 34166 } 34167 } 34168 } 34169 34170 /*************************** 34171 Unit Ratio Calculation 34172 ***************************/ 34173 34174 /* When queried, the browser returns (most) CSS property values in pixels. Therefore, if an endValue with a unit type of 34175 %, em, or rem is animated toward, startValue must be converted from pixels into the same unit type as endValue in order 34176 for value manipulation logic (increment/decrement) to proceed. Further, if the startValue was forcefed or transferred 34177 from a previous call, startValue may also not be in pixels. Unit conversion logic therefore consists of two steps: 34178 1) Calculating the ratio of %/em/rem/vh/vw relative to pixels 34179 2) Converting startValue into the same unit of measurement as endValue based on these ratios. */ 34180 /* Unit conversion ratios are calculated by inserting a sibling node next to the target node, copying over its position property, 34181 setting values with the target unit type then comparing the returned pixel value. */ 34182 /* Note: Even if only one of these unit types is being animated, all unit ratios are calculated at once since the overhead 34183 of batching the SETs and GETs together upfront outweights the potential overhead 34184 of layout thrashing caused by re-querying for uncalculated ratios for subsequently-processed properties. */ 34185 /* Todo: Shift this logic into the calls' first tick instance so that it's synced with RAF. */ 34186 var calculateUnitRatios = function() { 34187 34188 /************************ 34189 Same Ratio Checks 34190 ************************/ 34191 34192 /* The properties below are used to determine whether the element differs sufficiently from this call's 34193 previously iterated element to also differ in its unit conversion ratios. If the properties match up with those 34194 of the prior element, the prior element's conversion ratios are used. Like most optimizations in Velocity, 34195 this is done to minimize DOM querying. */ 34196 var sameRatioIndicators = { 34197 myParent: element.parentNode || document.body, /* GET */ 34198 position: CSS.getPropertyValue(element, "position"), /* GET */ 34199 fontSize: CSS.getPropertyValue(element, "fontSize") /* GET */ 34200 }, 34201 /* Determine if the same % ratio can be used. % is based on the element's position value and its parent's width and height dimensions. */ 34202 samePercentRatio = ((sameRatioIndicators.position === callUnitConversionData.lastPosition) && (sameRatioIndicators.myParent === callUnitConversionData.lastParent)), 34203 /* Determine if the same em ratio can be used. em is relative to the element's fontSize. */ 34204 sameEmRatio = (sameRatioIndicators.fontSize === callUnitConversionData.lastFontSize); 34205 34206 /* Store these ratio indicators call-wide for the next element to compare against. */ 34207 callUnitConversionData.lastParent = sameRatioIndicators.myParent; 34208 callUnitConversionData.lastPosition = sameRatioIndicators.position; 34209 callUnitConversionData.lastFontSize = sameRatioIndicators.fontSize; 34210 34211 /*************************** 34212 Element-Specific Units 34213 ***************************/ 34214 34215 /* Note: IE8 rounds to the nearest pixel when returning CSS values, thus we perform conversions using a measurement 34216 of 100 (instead of 1) to give our ratios a precision of at least 2 decimal values. */ 34217 var measurement = 100, 34218 unitRatios = {}; 34219 34220 if (!sameEmRatio || !samePercentRatio) { 34221 var dummy = data && data.isSVG ? document.createElementNS("http://www.w3.org/2000/svg", "rect") : document.createElement("div"); 34222 34223 Velocity.init(dummy); 34224 sameRatioIndicators.myParent.appendChild(dummy); 34225 34226 /* To accurately and consistently calculate conversion ratios, the element's cascaded overflow and box-sizing are stripped. 34227 Similarly, since width/height can be artificially constrained by their min-/max- equivalents, these are controlled for as well. */ 34228 /* Note: Overflow must be also be controlled for per-axis since the overflow property overwrites its per-axis values. */ 34229 $.each(["overflow", "overflowX", "overflowY"], function(i, property) { 34230 Velocity.CSS.setPropertyValue(dummy, property, "hidden"); 34231 }); 34232 Velocity.CSS.setPropertyValue(dummy, "position", sameRatioIndicators.position); 34233 Velocity.CSS.setPropertyValue(dummy, "fontSize", sameRatioIndicators.fontSize); 34234 Velocity.CSS.setPropertyValue(dummy, "boxSizing", "content-box"); 34235 34236 /* width and height act as our proxy properties for measuring the horizontal and vertical % ratios. */ 34237 $.each(["minWidth", "maxWidth", "width", "minHeight", "maxHeight", "height"], function(i, property) { 34238 Velocity.CSS.setPropertyValue(dummy, property, measurement + "%"); 34239 }); 34240 /* paddingLeft arbitrarily acts as our proxy property for the em ratio. */ 34241 Velocity.CSS.setPropertyValue(dummy, "paddingLeft", measurement + "em"); 34242 34243 /* Divide the returned value by the measurement to get the ratio between 1% and 1px. Default to 1 since working with 0 can produce Infinite. */ 34244 unitRatios.percentToPxWidth = callUnitConversionData.lastPercentToPxWidth = (parseFloat(CSS.getPropertyValue(dummy, "width", null, true)) || 1) / measurement; /* GET */ 34245 unitRatios.percentToPxHeight = callUnitConversionData.lastPercentToPxHeight = (parseFloat(CSS.getPropertyValue(dummy, "height", null, true)) || 1) / measurement; /* GET */ 34246 unitRatios.emToPx = callUnitConversionData.lastEmToPx = (parseFloat(CSS.getPropertyValue(dummy, "paddingLeft")) || 1) / measurement; /* GET */ 34247 34248 sameRatioIndicators.myParent.removeChild(dummy); 34249 } else { 34250 unitRatios.emToPx = callUnitConversionData.lastEmToPx; 34251 unitRatios.percentToPxWidth = callUnitConversionData.lastPercentToPxWidth; 34252 unitRatios.percentToPxHeight = callUnitConversionData.lastPercentToPxHeight; 34253 } 34254 34255 /*************************** 34256 Element-Agnostic Units 34257 ***************************/ 34258 34259 /* Whereas % and em ratios are determined on a per-element basis, the rem unit only needs to be checked 34260 once per call since it's exclusively dependant upon document.body's fontSize. If this is the first time 34261 that calculateUnitRatios() is being run during this call, remToPx will still be set to its default value of null, 34262 so we calculate it now. */ 34263 if (callUnitConversionData.remToPx === null) { 34264 /* Default to browsers' default fontSize of 16px in the case of 0. */ 34265 callUnitConversionData.remToPx = parseFloat(CSS.getPropertyValue(document.body, "fontSize")) || 16; /* GET */ 34266 } 34267 34268 /* Similarly, viewport units are %-relative to the window's inner dimensions. */ 34269 if (callUnitConversionData.vwToPx === null) { 34270 callUnitConversionData.vwToPx = parseFloat(window.innerWidth) / 100; /* GET */ 34271 callUnitConversionData.vhToPx = parseFloat(window.innerHeight) / 100; /* GET */ 34272 } 34273 34274 unitRatios.remToPx = callUnitConversionData.remToPx; 34275 unitRatios.vwToPx = callUnitConversionData.vwToPx; 34276 unitRatios.vhToPx = callUnitConversionData.vhToPx; 34277 34278 if (Velocity.debug >= 1) { 34279 console.log("Unit ratios: " + JSON.stringify(unitRatios), element); 34280 } 34281 return unitRatios; 34282 }; 34283 34284 /******************** 34285 Unit Conversion 34286 ********************/ 34287 34288 /* The * and / operators, which are not passed in with an associated unit, inherently use startValue's unit. Skip value and unit conversion. */ 34289 if (/[\/*]/.test(operator)) { 34290 endValueUnitType = startValueUnitType; 34291 /* If startValue and endValue differ in unit type, convert startValue into the same unit type as endValue so that if endValueUnitType 34292 is a relative unit (%, em, rem), the values set during tweening will continue to be accurately relative even if the metrics they depend 34293 on are dynamically changing during the course of the animation. Conversely, if we always normalized into px and used px for setting values, the px ratio 34294 would become stale if the original unit being animated toward was relative and the underlying metrics change during the animation. */ 34295 /* Since 0 is 0 in any unit type, no conversion is necessary when startValue is 0 -- we just start at 0 with endValueUnitType. */ 34296 } else if ((startValueUnitType !== endValueUnitType) && startValue !== 0) { 34297 /* Unit conversion is also skipped when endValue is 0, but *startValueUnitType* must be used for tween values to remain accurate. */ 34298 /* Note: Skipping unit conversion here means that if endValueUnitType was originally a relative unit, the animation won't relatively 34299 match the underlying metrics if they change, but this is acceptable since we're animating toward invisibility instead of toward visibility, 34300 which remains past the point of the animation's completion. */ 34301 if (endValue === 0) { 34302 endValueUnitType = startValueUnitType; 34303 } else { 34304 /* By this point, we cannot avoid unit conversion (it's undesirable since it causes layout thrashing). 34305 If we haven't already, we trigger calculateUnitRatios(), which runs once per element per call. */ 34306 elementUnitConversionData = elementUnitConversionData || calculateUnitRatios(); 34307 34308 /* The following RegEx matches CSS properties that have their % values measured relative to the x-axis. */ 34309 /* Note: W3C spec mandates that all of margin and padding's properties (even top and bottom) are %-relative to the *width* of the parent element. */ 34310 var axis = (/margin|padding|left|right|width|text|word|letter/i.test(property) || /X$/.test(property) || property === "x") ? "x" : "y"; 34311 34312 /* In order to avoid generating n^2 bespoke conversion functions, unit conversion is a two-step process: 34313 1) Convert startValue into pixels. 2) Convert this new pixel value into endValue's unit type. */ 34314 switch (startValueUnitType) { 34315 case "%": 34316 /* Note: translateX and translateY are the only properties that are %-relative to an element's own dimensions -- not its parent's dimensions. 34317 Velocity does not include a special conversion process to account for this behavior. Therefore, animating translateX/Y from a % value 34318 to a non-% value will produce an incorrect start value. Fortunately, this sort of cross-unit conversion is rarely done by users in practice. */ 34319 startValue *= (axis === "x" ? elementUnitConversionData.percentToPxWidth : elementUnitConversionData.percentToPxHeight); 34320 break; 34321 34322 case "px": 34323 /* px acts as our midpoint in the unit conversion process; do nothing. */ 34324 break; 34325 34326 default: 34327 startValue *= elementUnitConversionData[startValueUnitType + "ToPx"]; 34328 } 34329 34330 /* Invert the px ratios to convert into to the target unit. */ 34331 switch (endValueUnitType) { 34332 case "%": 34333 startValue *= 1 / (axis === "x" ? elementUnitConversionData.percentToPxWidth : elementUnitConversionData.percentToPxHeight); 34334 break; 34335 34336 case "px": 34337 /* startValue is already in px, do nothing; we're done. */ 34338 break; 34339 34340 default: 34341 startValue *= 1 / elementUnitConversionData[endValueUnitType + "ToPx"]; 34342 } 34343 } 34344 } 34345 34346 /********************* 34347 Relative Values 34348 *********************/ 34349 34350 /* Operator logic must be performed last since it requires unit-normalized start and end values. */ 34351 /* Note: Relative *percent values* do not behave how most people think; while one would expect "+=50%" 34352 to increase the property 1.5x its current value, it in fact increases the percent units in absolute terms: 34353 50 points is added on top of the current % value. */ 34354 switch (operator) { 34355 case "+": 34356 endValue = startValue + endValue; 34357 break; 34358 34359 case "-": 34360 endValue = startValue - endValue; 34361 break; 34362 34363 case "*": 34364 endValue = startValue * endValue; 34365 break; 34366 34367 case "/": 34368 endValue = startValue / endValue; 34369 break; 34370 } 34371 34372 /************************** 34373 tweensContainer Push 34374 **************************/ 34375 34376 /* Construct the per-property tween object, and push it to the element's tweensContainer. */ 34377 tweensContainer[property] = { 34378 rootPropertyValue: rootPropertyValue, 34379 startValue: startValue, 34380 currentValue: startValue, 34381 endValue: endValue, 34382 unitType: endValueUnitType, 34383 easing: easing 34384 }; 34385 if (pattern) { 34386 tweensContainer[property].pattern = pattern; 34387 } 34388 34389 if (Velocity.debug) { 34390 console.log("tweensContainer (" + property + "): " + JSON.stringify(tweensContainer[property]), element); 34391 } 34392 }; 34393 34394 /* Create a tween out of each property, and append its associated data to tweensContainer. */ 34395 for (var property in propertiesMap) { 34396 34397 if (!propertiesMap.hasOwnProperty(property)) { 34398 continue; 34399 } 34400 /* The original property name's format must be used for the parsePropertyValue() lookup, 34401 but we then use its camelCase styling to normalize it for manipulation. */ 34402 var propertyName = CSS.Names.camelCase(property), 34403 valueData = parsePropertyValue(propertiesMap[property]); 34404 34405 /* Find shorthand color properties that have been passed a hex string. */ 34406 /* Would be quicker to use CSS.Lists.colors.includes() if possible */ 34407 if (CSS.Lists.colors.indexOf(propertyName) >= 0) { 34408 /* Parse the value data for each shorthand. */ 34409 var endValue = valueData[0], 34410 easing = valueData[1], 34411 startValue = valueData[2]; 34412 34413 if (CSS.RegEx.isHex.test(endValue)) { 34414 /* Convert the hex strings into their RGB component arrays. */ 34415 var colorComponents = ["Red", "Green", "Blue"], 34416 endValueRGB = CSS.Values.hexToRgb(endValue), 34417 startValueRGB = startValue ? CSS.Values.hexToRgb(startValue) : undefined; 34418 34419 /* Inject the RGB component tweens into propertiesMap. */ 34420 for (var i = 0; i < colorComponents.length; i++) { 34421 var dataArray = [endValueRGB[i]]; 34422 34423 if (easing) { 34424 dataArray.push(easing); 34425 } 34426 34427 if (startValueRGB !== undefined) { 34428 dataArray.push(startValueRGB[i]); 34429 } 34430 34431 fixPropertyValue(propertyName + colorComponents[i], dataArray); 34432 } 34433 /* If we have replaced a shortcut color value then don't update the standard property name */ 34434 continue; 34435 } 34436 } 34437 fixPropertyValue(propertyName, valueData); 34438 } 34439 34440 /* Along with its property data, store a reference to the element itself onto tweensContainer. */ 34441 tweensContainer.element = element; 34442 } 34443 34444 /***************** 34445 Call Push 34446 *****************/ 34447 34448 /* Note: tweensContainer can be empty if all of the properties in this call's property map were skipped due to not 34449 being supported by the browser. The element property is used for checking that the tweensContainer has been appended to. */ 34450 if (tweensContainer.element) { 34451 /* Apply the "velocity-animating" indicator class. */ 34452 CSS.Values.addClass(element, "velocity-animating"); 34453 34454 /* The call array houses the tweensContainers for each element being animated in the current call. */ 34455 call.push(tweensContainer); 34456 34457 data = Data(element); 34458 34459 if (data) { 34460 /* Store the tweensContainer and options if we're working on the default effects queue, so that they can be used by the reverse command. */ 34461 if (opts.queue === "") { 34462 34463 data.tweensContainer = tweensContainer; 34464 data.opts = opts; 34465 } 34466 34467 /* Switch on the element's animating flag. */ 34468 data.isAnimating = true; 34469 } 34470 34471 /* Once the final element in this call's element set has been processed, push the call array onto 34472 Velocity.State.calls for the animation tick to immediately begin processing. */ 34473 if (elementsIndex === elementsLength - 1) { 34474 /* Add the current call plus its associated metadata (the element set and the call's options) onto the global call container. 34475 Anything on this call container is subjected to tick() processing. */ 34476 Velocity.State.calls.push([call, elements, opts, null, promiseData.resolver, null, 0]); 34477 34478 /* If the animation tick isn't running, start it. (Velocity shuts it off when there are no active calls to process.) */ 34479 if (Velocity.State.isTicking === false) { 34480 Velocity.State.isTicking = true; 34481 34482 /* Start the tick loop. */ 34483 tick(); 34484 } 34485 } else { 34486 elementsIndex++; 34487 } 34488 } 34489 } 34490 34491 /* When the queue option is set to false, the call skips the element's queue and fires immediately. */ 34492 if (opts.queue === false) { 34493 /* Since this buildQueue call doesn't respect the element's existing queue (which is where a delay option would have been appended), 34494 we manually inject the delay property here with an explicit setTimeout. */ 34495 if (opts.delay) { 34496 34497 /* Temporarily store delayed elements to facilitate access for global pause/resume */ 34498 var callIndex = Velocity.State.delayedElements.count++; 34499 Velocity.State.delayedElements[callIndex] = element; 34500 34501 var delayComplete = (function(index) { 34502 return function() { 34503 /* Clear the temporary element */ 34504 Velocity.State.delayedElements[index] = false; 34505 34506 /* Finally, issue the call */ 34507 buildQueue(); 34508 }; 34509 })(callIndex); 34510 34511 Data(element).delayBegin = (new Date()).getTime(); 34512 Data(element).delay = parseFloat(opts.delay); 34513 Data(element).delayTimer = { 34514 setTimeout: setTimeout(buildQueue, parseFloat(opts.delay)), 34515 next: delayComplete 34516 }; 34517 } else { 34518 buildQueue(); 34519 } 34520 /* Otherwise, the call undergoes element queueing as normal. */ 34521 /* Note: To interoperate with jQuery, Velocity uses jQuery's own $.queue() stack for queuing logic. */ 34522 } else { 34523 $.queue(element, opts.queue, function(next, clearQueue) { 34524 /* If the clearQueue flag was passed in by the stop command, resolve this call's promise. (Promises can only be resolved once, 34525 so it's fine if this is repeatedly triggered for each element in the associated call.) */ 34526 if (clearQueue === true) { 34527 if (promiseData.promise) { 34528 promiseData.resolver(elements); 34529 } 34530 34531 /* Do not continue with animation queueing. */ 34532 return true; 34533 } 34534 34535 /* This flag indicates to the upcoming completeCall() function that this queue entry was initiated by Velocity. 34536 See completeCall() for further details. */ 34537 Velocity.velocityQueueEntryFlag = true; 34538 34539 buildQueue(next); 34540 }); 34541 } 34542 34543 /********************* 34544 Auto-Dequeuing 34545 *********************/ 34546 34547 /* As per jQuery's $.queue() behavior, to fire the first non-custom-queue entry on an element, the element 34548 must be dequeued if its queue stack consists *solely* of the current call. (This can be determined by checking 34549 for the "inprogress" item that jQuery prepends to active queue stack arrays.) Regardless, whenever the element's 34550 queue is further appended with additional items -- including $.delay()'s or even $.animate() calls, the queue's 34551 first entry is automatically fired. This behavior contrasts that of custom queues, which never auto-fire. */ 34552 /* Note: When an element set is being subjected to a non-parallel Velocity call, the animation will not begin until 34553 each one of the elements in the set has reached the end of its individually pre-existing queue chain. */ 34554 /* Note: Unfortunately, most people don't fully grasp jQuery's powerful, yet quirky, $.queue() function. 34555 Lean more here: http://stackoverflow.com/questions/1058158/can-somebody-explain-jquery-queue-to-me */ 34556 if ((opts.queue === "" || opts.queue === "fx") && $.queue(element)[0] !== "inprogress") { 34557 $.dequeue(element); 34558 } 34559 } 34560 34561 /************************** 34562 Element Set Iteration 34563 **************************/ 34564 34565 /* If the "nodeType" property exists on the elements variable, we're animating a single element. 34566 Place it in an array so that $.each() can iterate over it. */ 34567 $.each(elements, function(i, element) { 34568 /* Ensure each element in a set has a nodeType (is a real element) to avoid throwing errors. */ 34569 if (Type.isNode(element)) { 34570 processElement(element, i); 34571 } 34572 }); 34573 34574 /****************** 34575 Option: Loop 34576 ******************/ 34577 34578 /* The loop option accepts an integer indicating how many times the element should loop between the values in the 34579 current call's properties map and the element's property values prior to this call. */ 34580 /* Note: The loop option's logic is performed here -- after element processing -- because the current call needs 34581 to undergo its queue insertion prior to the loop option generating its series of constituent "reverse" calls, 34582 which chain after the current call. Two reverse calls (two "alternations") constitute one loop. */ 34583 opts = $.extend({}, Velocity.defaults, options); 34584 opts.loop = parseInt(opts.loop, 10); 34585 var reverseCallsCount = (opts.loop * 2) - 1; 34586 34587 if (opts.loop) { 34588 /* Double the loop count to convert it into its appropriate number of "reverse" calls. 34589 Subtract 1 from the resulting value since the current call is included in the total alternation count. */ 34590 for (var x = 0; x < reverseCallsCount; x++) { 34591 /* Since the logic for the reverse action occurs inside Queueing and therefore this call's options object 34592 isn't parsed until then as well, the current call's delay option must be explicitly passed into the reverse 34593 call so that the delay logic that occurs inside *Pre-Queueing* can process it. */ 34594 var reverseOptions = { 34595 delay: opts.delay, 34596 progress: opts.progress 34597 }; 34598 34599 /* If a complete callback was passed into this call, transfer it to the loop redirect's final "reverse" call 34600 so that it's triggered when the entire redirect is complete (and not when the very first animation is complete). */ 34601 if (x === reverseCallsCount - 1) { 34602 reverseOptions.display = opts.display; 34603 reverseOptions.visibility = opts.visibility; 34604 reverseOptions.complete = opts.complete; 34605 } 34606 34607 animate(elements, "reverse", reverseOptions); 34608 } 34609 } 34610 34611 /*************** 34612 Chaining 34613 ***************/ 34614 34615 /* Return the elements back to the call chain, with wrapped elements taking precedence in case Velocity was called via the $.fn. extension. */ 34616 return getChain(); 34617 }; 34618 34619 /* Turn Velocity into the animation function, extended with the pre-existing Velocity object. */ 34620 Velocity = $.extend(animate, Velocity); 34621 /* For legacy support, also expose the literal animate method. */ 34622 Velocity.animate = animate; 34623 34624 /************** 34625 Timing 34626 **************/ 34627 34628 /* Ticker function. */ 34629 var ticker = window.requestAnimationFrame || rAFShim; 34630 34631 /* Inactive browser tabs pause rAF, which results in all active animations immediately sprinting to their completion states when the tab refocuses. 34632 To get around this, we dynamically switch rAF to setTimeout (which the browser *doesn't* pause) when the tab loses focus. We skip this for mobile 34633 devices to avoid wasting battery power on inactive tabs. */ 34634 /* Note: Tab focus detection doesn't work on older versions of IE, but that's okay since they don't support rAF to begin with. */ 34635 if (!Velocity.State.isMobile && document.hidden !== undefined) { 34636 var updateTicker = function() { 34637 /* Reassign the rAF function (which the global tick() function uses) based on the tab's focus state. */ 34638 if (document.hidden) { 34639 ticker = function(callback) { 34640 /* The tick function needs a truthy first argument in order to pass its internal timestamp check. */ 34641 return setTimeout(function() { 34642 callback(true); 34643 }, 16); 34644 }; 34645 34646 /* The rAF loop has been paused by the browser, so we manually restart the tick. */ 34647 tick(); 34648 } else { 34649 ticker = window.requestAnimationFrame || rAFShim; 34650 } 34651 }; 34652 34653 /* Page could be sitting in the background at this time (i.e. opened as new tab) so making sure we use correct ticker from the start */ 34654 updateTicker(); 34655 34656 /* And then run check again every time visibility changes */ 34657 document.addEventListener("visibilitychange", updateTicker); 34658 } 34659 34660 /************ 34661 Tick 34662 ************/ 34663 34664 /* Note: All calls to Velocity are pushed to the Velocity.State.calls array, which is fully iterated through upon each tick. */ 34665 function tick(timestamp) { 34666 /* An empty timestamp argument indicates that this is the first tick occurence since ticking was turned on. 34667 We leverage this metadata to fully ignore the first tick pass since RAF's initial pass is fired whenever 34668 the browser's next tick sync time occurs, which results in the first elements subjected to Velocity 34669 calls being animated out of sync with any elements animated immediately thereafter. In short, we ignore 34670 the first RAF tick pass so that elements being immediately consecutively animated -- instead of simultaneously animated 34671 by the same Velocity call -- are properly batched into the same initial RAF tick and consequently remain in sync thereafter. */ 34672 if (timestamp) { 34673 /* We normally use RAF's high resolution timestamp but as it can be significantly offset when the browser is 34674 under high stress we give the option for choppiness over allowing the browser to drop huge chunks of frames. 34675 We use performance.now() and shim it if it doesn't exist for when the tab is hidden. */ 34676 var timeCurrent = Velocity.timestamp && timestamp !== true ? timestamp : performance.now(); 34677 34678 /******************** 34679 Call Iteration 34680 ********************/ 34681 34682 var callsLength = Velocity.State.calls.length; 34683 34684 /* To speed up iterating over this array, it is compacted (falsey items -- calls that have completed -- are removed) 34685 when its length has ballooned to a point that can impact tick performance. This only becomes necessary when animation 34686 has been continuous with many elements over a long period of time; whenever all active calls are completed, completeCall() clears Velocity.State.calls. */ 34687 if (callsLength > 10000) { 34688 Velocity.State.calls = compactSparseArray(Velocity.State.calls); 34689 callsLength = Velocity.State.calls.length; 34690 } 34691 34692 /* Iterate through each active call. */ 34693 for (var i = 0; i < callsLength; i++) { 34694 /* When a Velocity call is completed, its Velocity.State.calls entry is set to false. Continue on to the next call. */ 34695 if (!Velocity.State.calls[i]) { 34696 continue; 34697 } 34698 34699 /************************ 34700 Call-Wide Variables 34701 ************************/ 34702 34703 var callContainer = Velocity.State.calls[i], 34704 call = callContainer[0], 34705 opts = callContainer[2], 34706 timeStart = callContainer[3], 34707 firstTick = !!timeStart, 34708 tweenDummyValue = null, 34709 pauseObject = callContainer[5], 34710 millisecondsEllapsed = callContainer[6]; 34711 34712 34713 34714 /* If timeStart is undefined, then this is the first time that this call has been processed by tick(). 34715 We assign timeStart now so that its value is as close to the real animation start time as possible. 34716 (Conversely, had timeStart been defined when this call was added to Velocity.State.calls, the delay 34717 between that time and now would cause the first few frames of the tween to be skipped since 34718 percentComplete is calculated relative to timeStart.) */ 34719 /* Further, subtract 16ms (the approximate resolution of RAF) from the current time value so that the 34720 first tick iteration isn't wasted by animating at 0% tween completion, which would produce the 34721 same style value as the element's current value. */ 34722 if (!timeStart) { 34723 timeStart = Velocity.State.calls[i][3] = timeCurrent - 16; 34724 } 34725 34726 /* If a pause object is present, skip processing unless it has been set to resume */ 34727 if (pauseObject) { 34728 if (pauseObject.resume === true) { 34729 /* Update the time start to accomodate the paused completion amount */ 34730 timeStart = callContainer[3] = Math.round(timeCurrent - millisecondsEllapsed - 16); 34731 34732 /* Remove pause object after processing */ 34733 callContainer[5] = null; 34734 } else { 34735 continue; 34736 } 34737 } 34738 34739 millisecondsEllapsed = callContainer[6] = timeCurrent - timeStart; 34740 34741 /* The tween's completion percentage is relative to the tween's start time, not the tween's start value 34742 (which would result in unpredictable tween durations since JavaScript's timers are not particularly accurate). 34743 Accordingly, we ensure that percentComplete does not exceed 1. */ 34744 var percentComplete = Math.min((millisecondsEllapsed) / opts.duration, 1); 34745 34746 /********************** 34747 Element Iteration 34748 **********************/ 34749 34750 /* For every call, iterate through each of the elements in its set. */ 34751 for (var j = 0, callLength = call.length; j < callLength; j++) { 34752 var tweensContainer = call[j], 34753 element = tweensContainer.element; 34754 34755 /* Check to see if this element has been deleted midway through the animation by checking for the 34756 continued existence of its data cache. If it's gone, or the element is currently paused, skip animating this element. */ 34757 if (!Data(element)) { 34758 continue; 34759 } 34760 34761 var transformPropertyExists = false; 34762 34763 /********************************** 34764 Display & Visibility Toggling 34765 **********************************/ 34766 34767 /* If the display option is set to non-"none", set it upfront so that the element can become visible before tweening begins. 34768 (Otherwise, display's "none" value is set in completeCall() once the animation has completed.) */ 34769 if (opts.display !== undefined && opts.display !== null && opts.display !== "none") { 34770 if (opts.display === "flex") { 34771 var flexValues = ["-webkit-box", "-moz-box", "-ms-flexbox", "-webkit-flex"]; 34772 34773 $.each(flexValues, function(i, flexValue) { 34774 CSS.setPropertyValue(element, "display", flexValue); 34775 }); 34776 } 34777 34778 CSS.setPropertyValue(element, "display", opts.display); 34779 } 34780 34781 /* Same goes with the visibility option, but its "none" equivalent is "hidden". */ 34782 if (opts.visibility !== undefined && opts.visibility !== "hidden") { 34783 CSS.setPropertyValue(element, "visibility", opts.visibility); 34784 } 34785 34786 /************************ 34787 Property Iteration 34788 ************************/ 34789 34790 /* For every element, iterate through each property. */ 34791 for (var property in tweensContainer) { 34792 /* Note: In addition to property tween data, tweensContainer contains a reference to its associated element. */ 34793 if (tweensContainer.hasOwnProperty(property) && property !== "element") { 34794 var tween = tweensContainer[property], 34795 currentValue, 34796 /* Easing can either be a pre-genereated function or a string that references a pre-registered easing 34797 on the Velocity.Easings object. In either case, return the appropriate easing *function*. */ 34798 easing = Type.isString(tween.easing) ? Velocity.Easings[tween.easing] : tween.easing; 34799 34800 /****************************** 34801 Current Value Calculation 34802 ******************************/ 34803 34804 if (Type.isString(tween.pattern)) { 34805 var patternReplace = percentComplete === 1 ? 34806 function($0, index, round) { 34807 var result = tween.endValue[index]; 34808 34809 return round ? Math.round(result) : result; 34810 } : 34811 function($0, index, round) { 34812 var startValue = tween.startValue[index], 34813 tweenDelta = tween.endValue[index] - startValue, 34814 result = startValue + (tweenDelta * easing(percentComplete, opts, tweenDelta)); 34815 34816 return round ? Math.round(result) : result; 34817 }; 34818 34819 currentValue = tween.pattern.replace(/{(\d+)(!)?}/g, patternReplace); 34820 } else if (percentComplete === 1) { 34821 /* If this is the last tick pass (if we've reached 100% completion for this tween), 34822 ensure that currentValue is explicitly set to its target endValue so that it's not subjected to any rounding. */ 34823 currentValue = tween.endValue; 34824 } else { 34825 /* Otherwise, calculate currentValue based on the current delta from startValue. */ 34826 var tweenDelta = tween.endValue - tween.startValue; 34827 34828 currentValue = tween.startValue + (tweenDelta * easing(percentComplete, opts, tweenDelta)); 34829 /* If no value change is occurring, don't proceed with DOM updating. */ 34830 } 34831 if (!firstTick && (currentValue === tween.currentValue)) { 34832 continue; 34833 } 34834 34835 tween.currentValue = currentValue; 34836 34837 /* If we're tweening a fake 'tween' property in order to log transition values, update the one-per-call variable so that 34838 it can be passed into the progress callback. */ 34839 if (property === "tween") { 34840 tweenDummyValue = currentValue; 34841 } else { 34842 /****************** 34843 Hooks: Part I 34844 ******************/ 34845 var hookRoot; 34846 34847 /* For hooked properties, the newly-updated rootPropertyValueCache is cached onto the element so that it can be used 34848 for subsequent hooks in this call that are associated with the same root property. If we didn't cache the updated 34849 rootPropertyValue, each subsequent update to the root property in this tick pass would reset the previous hook's 34850 updates to rootPropertyValue prior to injection. A nice performance byproduct of rootPropertyValue caching is that 34851 subsequently chained animations using the same hookRoot but a different hook can use this cached rootPropertyValue. */ 34852 if (CSS.Hooks.registered[property]) { 34853 hookRoot = CSS.Hooks.getRoot(property); 34854 34855 var rootPropertyValueCache = Data(element).rootPropertyValueCache[hookRoot]; 34856 34857 if (rootPropertyValueCache) { 34858 tween.rootPropertyValue = rootPropertyValueCache; 34859 } 34860 } 34861 34862 /***************** 34863 DOM Update 34864 *****************/ 34865 34866 /* setPropertyValue() returns an array of the property name and property value post any normalization that may have been performed. */ 34867 /* Note: To solve an IE<=8 positioning bug, the unit type is dropped when setting a property value of 0. */ 34868 var adjustedSetData = CSS.setPropertyValue(element, /* SET */ 34869 property, 34870 tween.currentValue + (IE < 9 && parseFloat(currentValue) === 0 ? "" : tween.unitType), 34871 tween.rootPropertyValue, 34872 tween.scrollData); 34873 34874 /******************* 34875 Hooks: Part II 34876 *******************/ 34877 34878 /* Now that we have the hook's updated rootPropertyValue (the post-processed value provided by adjustedSetData), cache it onto the element. */ 34879 if (CSS.Hooks.registered[property]) { 34880 /* Since adjustedSetData contains normalized data ready for DOM updating, the rootPropertyValue needs to be re-extracted from its normalized form. ?? */ 34881 if (CSS.Normalizations.registered[hookRoot]) { 34882 Data(element).rootPropertyValueCache[hookRoot] = CSS.Normalizations.registered[hookRoot]("extract", null, adjustedSetData[1]); 34883 } else { 34884 Data(element).rootPropertyValueCache[hookRoot] = adjustedSetData[1]; 34885 } 34886 } 34887 34888 /*************** 34889 Transforms 34890 ***************/ 34891 34892 /* Flag whether a transform property is being animated so that flushTransformCache() can be triggered once this tick pass is complete. */ 34893 if (adjustedSetData[0] === "transform") { 34894 transformPropertyExists = true; 34895 } 34896 34897 } 34898 } 34899 } 34900 34901 /**************** 34902 mobileHA 34903 ****************/ 34904 34905 /* If mobileHA is enabled, set the translate3d transform to null to force hardware acceleration. 34906 It's safe to override this property since Velocity doesn't actually support its animation (hooks are used in its place). */ 34907 if (opts.mobileHA) { 34908 /* Don't set the null transform hack if we've already done so. */ 34909 if (Data(element).transformCache.translate3d === undefined) { 34910 /* All entries on the transformCache object are later concatenated into a single transform string via flushTransformCache(). */ 34911 Data(element).transformCache.translate3d = "(0px, 0px, 0px)"; 34912 34913 transformPropertyExists = true; 34914 } 34915 } 34916 34917 if (transformPropertyExists) { 34918 CSS.flushTransformCache(element); 34919 } 34920 } 34921 34922 /* The non-"none" display value is only applied to an element once -- when its associated call is first ticked through. 34923 Accordingly, it's set to false so that it isn't re-processed by this call in the next tick. */ 34924 if (opts.display !== undefined && opts.display !== "none") { 34925 Velocity.State.calls[i][2].display = false; 34926 } 34927 if (opts.visibility !== undefined && opts.visibility !== "hidden") { 34928 Velocity.State.calls[i][2].visibility = false; 34929 } 34930 34931 /* Pass the elements and the timing data (percentComplete, msRemaining, timeStart, tweenDummyValue) into the progress callback. */ 34932 if (opts.progress) { 34933 opts.progress.call(callContainer[1], 34934 callContainer[1], 34935 percentComplete, 34936 Math.max(0, (timeStart + opts.duration) - timeCurrent), 34937 timeStart, 34938 tweenDummyValue); 34939 } 34940 34941 /* If this call has finished tweening, pass its index to completeCall() to handle call cleanup. */ 34942 if (percentComplete === 1) { 34943 completeCall(i); 34944 } 34945 } 34946 } 34947 34948 /* Note: completeCall() sets the isTicking flag to false when the last call on Velocity.State.calls has completed. */ 34949 if (Velocity.State.isTicking) { 34950 ticker(tick); 34951 } 34952 } 34953 34954 /********************** 34955 Call Completion 34956 **********************/ 34957 34958 /* Note: Unlike tick(), which processes all active calls at once, call completion is handled on a per-call basis. */ 34959 function completeCall(callIndex, isStopped) { 34960 /* Ensure the call exists. */ 34961 if (!Velocity.State.calls[callIndex]) { 34962 return false; 34963 } 34964 34965 /* Pull the metadata from the call. */ 34966 var call = Velocity.State.calls[callIndex][0], 34967 elements = Velocity.State.calls[callIndex][1], 34968 opts = Velocity.State.calls[callIndex][2], 34969 resolver = Velocity.State.calls[callIndex][4]; 34970 34971 var remainingCallsExist = false; 34972 34973 /************************* 34974 Element Finalization 34975 *************************/ 34976 34977 for (var i = 0, callLength = call.length; i < callLength; i++) { 34978 var element = call[i].element; 34979 34980 /* If the user set display to "none" (intending to hide the element), set it now that the animation has completed. */ 34981 /* Note: display:none isn't set when calls are manually stopped (via Velocity("stop"). */ 34982 /* Note: Display gets ignored with "reverse" calls and infinite loops, since this behavior would be undesirable. */ 34983 if (!isStopped && !opts.loop) { 34984 if (opts.display === "none") { 34985 CSS.setPropertyValue(element, "display", opts.display); 34986 } 34987 34988 if (opts.visibility === "hidden") { 34989 CSS.setPropertyValue(element, "visibility", opts.visibility); 34990 } 34991 } 34992 34993 /* If the element's queue is empty (if only the "inprogress" item is left at position 0) or if its queue is about to run 34994 a non-Velocity-initiated entry, turn off the isAnimating flag. A non-Velocity-initiatied queue entry's logic might alter 34995 an element's CSS values and thereby cause Velocity's cached value data to go stale. To detect if a queue entry was initiated by Velocity, 34996 we check for the existence of our special Velocity.queueEntryFlag declaration, which minifiers won't rename since the flag 34997 is assigned to jQuery's global $ object and thus exists out of Velocity's own scope. */ 34998 var data = Data(element); 34999 35000 if (opts.loop !== true && ($.queue(element)[1] === undefined || !/\.velocityQueueEntryFlag/i.test($.queue(element)[1]))) { 35001 /* The element may have been deleted. Ensure that its data cache still exists before acting on it. */ 35002 if (data) { 35003 data.isAnimating = false; 35004 /* Clear the element's rootPropertyValueCache, which will become stale. */ 35005 data.rootPropertyValueCache = {}; 35006 35007 var transformHAPropertyExists = false; 35008 /* If any 3D transform subproperty is at its default value (regardless of unit type), remove it. */ 35009 $.each(CSS.Lists.transforms3D, function(i, transformName) { 35010 var defaultValue = /^scale/.test(transformName) ? 1 : 0, 35011 currentValue = data.transformCache[transformName]; 35012 35013 if (data.transformCache[transformName] !== undefined && new RegExp("^\\(" + defaultValue + "[^.]").test(currentValue)) { 35014 transformHAPropertyExists = true; 35015 35016 delete data.transformCache[transformName]; 35017 } 35018 }); 35019 35020 /* Mobile devices have hardware acceleration removed at the end of the animation in order to avoid hogging the GPU's memory. */ 35021 if (opts.mobileHA) { 35022 transformHAPropertyExists = true; 35023 delete data.transformCache.translate3d; 35024 } 35025 35026 /* Flush the subproperty removals to the DOM. */ 35027 if (transformHAPropertyExists) { 35028 CSS.flushTransformCache(element); 35029 } 35030 35031 /* Remove the "velocity-animating" indicator class. */ 35032 CSS.Values.removeClass(element, "velocity-animating"); 35033 } 35034 } 35035 35036 /********************* 35037 Option: Complete 35038 *********************/ 35039 35040 /* Complete is fired once per call (not once per element) and is passed the full raw DOM element set as both its context and its first argument. */ 35041 /* Note: Callbacks aren't fired when calls are manually stopped (via Velocity("stop"). */ 35042 if (!isStopped && opts.complete && !opts.loop && (i === callLength - 1)) { 35043 /* We throw callbacks in a setTimeout so that thrown errors don't halt the execution of Velocity itself. */ 35044 try { 35045 opts.complete.call(elements, elements); 35046 } catch (error) { 35047 setTimeout(function() { 35048 throw error; 35049 }, 1); 35050 } 35051 } 35052 35053 /********************** 35054 Promise Resolving 35055 **********************/ 35056 35057 /* Note: Infinite loops don't return promises. */ 35058 if (resolver && opts.loop !== true) { 35059 resolver(elements); 35060 } 35061 35062 /**************************** 35063 Option: Loop (Infinite) 35064 ****************************/ 35065 35066 if (data && opts.loop === true && !isStopped) { 35067 /* If a rotateX/Y/Z property is being animated by 360 deg with loop:true, swap tween start/end values to enable 35068 continuous iterative rotation looping. (Otherise, the element would just rotate back and forth.) */ 35069 $.each(data.tweensContainer, function(propertyName, tweenContainer) { 35070 if (/^rotate/.test(propertyName) && ((parseFloat(tweenContainer.startValue) - parseFloat(tweenContainer.endValue)) % 360 === 0)) { 35071 var oldStartValue = tweenContainer.startValue; 35072 35073 tweenContainer.startValue = tweenContainer.endValue; 35074 tweenContainer.endValue = oldStartValue; 35075 } 35076 35077 if (/^backgroundPosition/.test(propertyName) && parseFloat(tweenContainer.endValue) === 100 && tweenContainer.unitType === "%") { 35078 tweenContainer.endValue = 0; 35079 tweenContainer.startValue = 100; 35080 } 35081 }); 35082 35083 Velocity(element, "reverse", {loop: true, delay: opts.delay}); 35084 } 35085 35086 /*************** 35087 Dequeueing 35088 ***************/ 35089 35090 /* Fire the next call in the queue so long as this call's queue wasn't set to false (to trigger a parallel animation), 35091 which would have already caused the next call to fire. Note: Even if the end of the animation queue has been reached, 35092 $.dequeue() must still be called in order to completely clear jQuery's animation queue. */ 35093 if (opts.queue !== false) { 35094 $.dequeue(element, opts.queue); 35095 } 35096 } 35097 35098 /************************ 35099 Calls Array Cleanup 35100 ************************/ 35101 35102 /* Since this call is complete, set it to false so that the rAF tick skips it. This array is later compacted via compactSparseArray(). 35103 (For performance reasons, the call is set to false instead of being deleted from the array: http://www.html5rocks.com/en/tutorials/speed/v8/) */ 35104 Velocity.State.calls[callIndex] = false; 35105 35106 /* Iterate through the calls array to determine if this was the final in-progress animation. 35107 If so, set a flag to end ticking and clear the calls array. */ 35108 for (var j = 0, callsLength = Velocity.State.calls.length; j < callsLength; j++) { 35109 if (Velocity.State.calls[j] !== false) { 35110 remainingCallsExist = true; 35111 35112 break; 35113 } 35114 } 35115 35116 if (remainingCallsExist === false) { 35117 /* tick() will detect this flag upon its next iteration and subsequently turn itself off. */ 35118 Velocity.State.isTicking = false;
35119 35120 /* Clear the calls array so that its length is reset. */ 35121 delete Velocity.State.calls; 35122 Velocity.State.calls = []; 35123 } 35124 } 35125 35126 /****************** 35127 Frameworks 35128 ******************/ 35129 35130 /* Both jQuery and Zepto allow their $.fn object to be extended to allow wrapped elements to be subjected to plugin calls. 35131 If either framework is loaded, register a "velocity" extension pointing to Velocity's core animate() method. Velocity 35132 also registers itself onto a global container (window.jQuery || window.Zepto || window) so that certain features are 35133 accessible beyond just a per-element scope. This master object contains an .animate() method, which is later assigned to $.fn 35134 (if jQuery or Zepto are present). Accordingly, Velocity can both act on wrapped DOM elements and stand alone for targeting raw DOM elements. */ 35135 global.Velocity = Velocity; 35136 35137 if (global !== window) { 35138 /* Assign the element function to Velocity's core animate() method. */ 35139 global.fn.velocity = animate; 35140 /* Assign the object function's defaults to Velocity's global defaults object. */ 35141 global.fn.velocity.defaults = Velocity.defaults; 35142 } 35143 35144 /*********************** 35145 Packaged Redirects 35146 ***********************/ 35147 35148 /* slideUp, slideDown */ 35149 $.each(["Down", "Up"], function(i, direction) { 35150 Velocity.Redirects["slide" + direction] = function(element, options, elementsIndex, elementsSize, elements, promiseData) { 35151 var opts = $.extend({}, options), 35152 begin = opts.begin, 35153 complete = opts.complete, 35154 inlineValues = {}, 35155 computedValues = {height: "", marginTop: "", marginBottom: "", paddingTop: "", paddingBottom: ""}; 35156 35157 if (opts.display === undefined) { 35158 /* Show the element before slideDown begins and hide the element after slideUp completes. */ 35159 /* Note: Inline elements cannot have dimensions animated, so they're reverted to inline-block. */ 35160 opts.display = (direction === "Down" ? (Velocity.CSS.Values.getDisplayType(element) === "inline" ? "inline-block" : "block") : "none"); 35161 } 35162 35163 opts.begin = function() { 35164 /* If the user passed in a begin callback, fire it now. */ 35165 if (elementsIndex === 0 && begin) { 35166 begin.call(elements, elements); 35167 } 35168 35169 /* Cache the elements' original vertical dimensional property values so that we can animate back to them. */ 35170 for (var property in computedValues) { 35171 if (!computedValues.hasOwnProperty(property)) { 35172 continue; 35173 } 35174 inlineValues[property] = element.style[property]; 35175 35176 /* For slideDown, use forcefeeding to animate all vertical properties from 0. For slideUp, 35177 use forcefeeding to start from computed values and animate down to 0. */ 35178 var propertyValue = CSS.getPropertyValue(element, property); 35179 computedValues[property] = (direction === "Down") ? [propertyValue, 0] : [0, propertyValue]; 35180 } 35181 35182 /* Force vertical overflow content to clip so that sliding works as expected. */ 35183 inlineValues.overflow = element.style.overflow; 35184 element.style.overflow = "hidden"; 35185 }; 35186 35187 opts.complete = function() { 35188 /* Reset element to its pre-slide inline values once its slide animation is complete. */ 35189 for (var property in inlineValues) { 35190 if (inlineValues.hasOwnProperty(property)) { 35191 element.style[property] = inlineValues[property]; 35192 } 35193 } 35194 35195 /* If the user passed in a complete callback, fire it now. */ 35196 if (elementsIndex === elementsSize - 1) { 35197 if (complete) { 35198 complete.call(elements, elements); 35199 } 35200 if (promiseData) { 35201 promiseData.resolver(elements); 35202 } 35203 } 35204 }; 35205 35206 Velocity(element, computedValues, opts); 35207 }; 35208 }); 35209 35210 /* fadeIn, fadeOut */ 35211 $.each(["In", "Out"], function(i, direction) { 35212 Velocity.Redirects["fade" + direction] = function(element, options, elementsIndex, elementsSize, elements, promiseData) { 35213 var opts = $.extend({}, options), 35214 complete = opts.complete, 35215 propertiesMap = {opacity: (direction === "In") ? 1 : 0}; 35216 35217 /* Since redirects are triggered individually for each element in the animated set, avoid repeatedly triggering 35218 callbacks by firing them only when the final element has been reached. */ 35219 if (elementsIndex !== 0) { 35220 opts.begin = null; 35221 } 35222 if (elementsIndex !== elementsSize - 1) { 35223 opts.complete = null; 35224 } else { 35225 opts.complete = function() { 35226 if (complete) { 35227 complete.call(elements, elements); 35228 } 35229 if (promiseData) { 35230 promiseData.resolver(elements); 35231 } 35232 }; 35233 } 35234 35235 /* If a display was passed in, use it. Otherwise, default to "none" for fadeOut or the element-specific default for fadeIn. */ 35236 /* Note: We allow users to pass in "null" to skip display setting altogether. */ 35237 if (opts.display === undefined) { 35238 opts.display = (direction === "In" ? "auto" : "none"); 35239 } 35240 35241 Velocity(this, propertiesMap, opts); 35242 }; 35243 }); 35244 35245 return Velocity; 35246 }((window.jQuery || window.Zepto || window), window, (window ? window.document : undefined)); 35247})); 35248 35249/****************** 35250 Known Issues 35251 ******************/ 35252 35253/* The CSS spec mandates that the translateX/Y/Z transforms are %-relative to the element itself -- not its parent. 35254 Velocity, however, doesn't make this distinction. Thus, converting to or from the % unit with these subproperties 35255 will produce an inaccurate conversion value. The same issue exists with the cx/cy attributes of SVG circles and ellipses. */ 35256 35257},{}],30:[function(require,module,exports){ 35258/* 35259 * vidim v1.0.1 35260 * 2018-08-24T13:55:53.385Z 35261 * https://github.com/OriginalEXE/vidim 35262 * 35263 * Made by Ante Sepic 35264 */ 35265(function (global, factory) { 35266 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 35267 typeof define === 'function' && define.amd ? define(factory) : 35268 (global.vidim = factory()); 35269}(this, (function () { 'use strict'; 35270 35271function createCommonjsModule(fn, module) { 35272 return module = { exports: {} }, fn(module, module.exports), module.exports; 35273} 35274 35275var componentEmitter = createCommonjsModule(function (module) { 35276/** 35277 * Expose `Emitter`. 35278 */ 35279 35280{ 35281 module.exports = Emitter; 35282} 35283 35284/** 35285 * Initialize a new `Emitter`. 35286 * 35287 * @api public 35288 */ 35289 35290function Emitter(obj) { 35291 if (obj) return mixin(obj); 35292} 35293 35294/** 35295 * Mixin the emitter properties. 35296 * 35297 * @param {Object} obj 35298 * @return {Object} 35299 * @api private 35300 */ 35301 35302function mixin(obj) { 35303 for (var key in Emitter.prototype) { 35304 obj[key] = Emitter.prototype[key]; 35305 } 35306 return obj;
35307} 35308 35309/** 35310 * Listen on the given `event` with `fn`. 35311 * 35312 * @param {String} event 35313 * @param {Function} fn 35314 * @return {Emitter} 35315 * @api public 35316 */ 35317 35318Emitter.prototype.on = 35319Emitter.prototype.addEventListener = function(event, fn){ 35320 this._callbacks = this._callbacks || {}; 35321 (this._callbacks['$' + event] = this._callbacks['$' + event] || []) 35322 .push(fn); 35323 return this; 35324}; 35325 35326/** 35327 * Adds an `event` listener that will be invoked a single 35328 * time then automatically removed. 35329 * 35330 * @param {String} event 35331 * @param {Function} fn 35332 * @return {Emitter} 35333 * @api public 35334 */ 35335 35336Emitter.prototype.once = function(event, fn){ 35337 function on() { 35338 this.off(event, on); 35339 fn.apply(this, arguments); 35340 } 35341 35342 on.fn = fn; 35343 this.on(event, on); 35344 return this; 35345}; 35346 35347/** 35348 * Remove the given callback for `event` or all 35349 * registered callbacks. 35350 * 35351 * @param {String} event 35352 * @param {Function} fn 35353 * @return {Emitter} 35354 * @api public 35355 */ 35356 35357Emitter.prototype.off = 35358Emitter.prototype.removeListener = 35359Emitter.prototype.removeAllListeners = 35360Emitter.prototype.removeEventListener = function(event, fn){ 35361 this._callbacks = this._callbacks || {}; 35362 35363 // all 35364 if (0 == arguments.length) { 35365 this._callbacks = {}; 35366 return this; 35367 } 35368 35369 // specific event 35370 var callbacks = this._callbacks['$' + event]; 35371 if (!callbacks) return this; 35372 35373 // remove all handlers 35374 if (1 == arguments.length) { 35375 delete this._callbacks['$' + event]; 35376 return this; 35377 } 35378 35379 // remove specific handler 35380 var cb; 35381 for (var i = 0; i < callbacks.length; i++) { 35382 cb = callbacks[i]; 35383 if (cb === fn || cb.fn === fn) { 35384 callbacks.splice(i, 1); 35385 break; 35386 } 35387 } 35388 return this; 35389}; 35390 35391/** 35392 * Emit `event` with the given args. 35393 * 35394 * @param {String} event 35395 * @param {Mixed} ... 35396 * @return {Emitter} 35397 */ 35398 35399Emitter.prototype.emit = function(event){ 35400 this._callbacks = this._callbacks || {}; 35401 var args = [].slice.call(arguments, 1) 35402 , callbacks = this._callbacks['$' + event]; 35403 35404 if (callbacks) { 35405 callbacks = callbacks.slice(0); 35406 for (var i = 0, len = callbacks.length; i < len; ++i) { 35407 callbacks[i].apply(this, args); 35408 } 35409 } 35410 35411 return this; 35412}; 35413 35414/** 35415 * Return array of callbacks for `event`. 35416 * 35417 * @param {String} event 35418 * @return {Array} 35419 * @api public 35420 */ 35421 35422Emitter.prototype.listeners = function(event){ 35423 this._callbacks = this._callbacks || {}; 35424 return this._callbacks['$' + event] || []; 35425}; 35426 35427/** 35428 * Check if this emitter has `event` handlers. 35429 * 35430 * @param {String} event 35431 * @return {Boolean} 35432 * @api public 35433 */ 35434 35435Emitter.prototype.hasListeners = function(event){ 35436 return !! this.listeners(event).length; 35437}; 35438}); 35439 35440// Simple utility function for setting default values 35441function setDefaults(object, defaults) { 35442 35443 var defaultsKeys = Object.keys(defaults); 35444 35445 defaultsKeys.forEach(function (key) { 35446 35447 if (!object.hasOwnProperty(key)) { 35448 35449 object[key] = defaults[key]; 35450 } 35451 }); 35452} 35453 35454// Utility function for when we need to accept the DOM element 35455function getElement(query) { 35456 var parent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document; 35457 35458 35459 if ('string' === typeof query) { 35460 35461 return parent.querySelector(query); 35462 } 35463 35464 return query; 35465} 35466 35467// Thanks underscore.js :) 35468function throttle(func, wait) { 35469 var timeout, context, args, result; 35470 var previous = 0; 35471 35472 var later = function later() { 35473 previous = Date.now(); 35474 timeout = null; 35475 result = func.apply(context, args); 35476 if (!timeout) context = args = null; 35477 }; 35478 35479 var throttled = function throttled() { 35480 var now = Date.now(); 35481 if (!previous) previous = now; 35482 var remaining = wait - (now - previous); 35483 context = this; 35484 args = arguments; 35485 if (remaining <= 0 || remaining > wait) { 35486 if (timeout) { 35487 clearTimeout(timeout); 35488 timeout = null; 35489 } 35490 previous = now; 35491 result = func.apply(context, args); 35492 if (!timeout) context = args = null; 35493 } else if (!timeout) { 35494 timeout = setTimeout(later, remaining); 35495 } 35496 return result; 35497 }; 35498 35499 throttled.cancel = function () { 35500 clearTimeout(timeout); 35501 previous = 0; 35502 timeout = context = args = null; 35503 }; 35504 35505 return throttled; 35506} 35507 35508// Fires once the DOM is ready 35509function ready(fn) { 35510 35511 if (document.readyState != 'loading') { 35512 35513 fn(); 35514 } else { 35515 35516 document.addEventListener('DOMContentLoaded', fn); 35517 } 35518} 35519 35520var utility = Object.freeze({ 35521 setDefaults: setDefaults, 35522 getElement: getElement, 35523 throttle: throttle, 35524 ready: ready 35525}); 35526 35527var html5Provider = function (vidim) { 35528 35529 /** 35530 * Defaults specific to this provider 35531 * @type {Object} 35532 */ 35533 var defaults = { 35534 preload: 'auto' 35535 }; 35536 35537 /** 35538 * Provider definition object 35539 * @type {Object} 35540 */ 35541 var vidimHTML5Provider = { 35542 35543 /** 35544 * Initial provider setup 35545 */ 35546 _initializeProvider: function _initializeProvider() { 35547 35548 setDefaults(this._options, defaults); 35549 35550 this._constructPlayer(); 35551 this._dispatch(); 35552 this._listen(); 35553 }, 35554 35555 /** 35556 * Sets up the actual player 35557 */ 35558 _constructPlayer: function _constructPlayer() { 35559 35560 this.el = document.createElement('video'); 35561 35562 this.el.setAttribute('playsinline', ''); 35563 35564 if (this._options.loop) { 35565 35566 this.el.setAttribute('loop', ''); 35567 } 35568 35569 if (this._options.autoplay) { 35570 35571 this.el.setAttribute('autoplay', ''); 35572 } 35573 35574 if (this._options.preload) { 35575 35576 this.el.setAttribute('preload', this._options.preload); 35577 } 35578 35579 if (this._options.muted) { 35580 35581 this.el.muted = true; 35582 } 35583 35584 this.el.style.position = 'absolute'; 35585 this.el.style.left = '50%'; 35586 this.el.style.top = '50%'; 35587 this.el.style.transform = 'translate(-50%, -50%)'; 35588 this.el.style.webkitTransform = 'translate(-50%, -50%)'; 35589 this.el.style.msTransform = 'translate(-50%, -50%)'; 35590 this.el.style.oTransform = 'translate(-50%, -50%)'; 35591 this.el.style.mozTransform = 'translate(-50%, -50%)'; 35592 this.el.style.minWidth = 'calc( 100% + 2px )'; 35593 this.el.style.minHeight = 'calc( 100% + 2px )'; 35594 this.el.style.opacity = '0'; 35595 35596 var src = this._options.src; 35597 35598 if (src.length && 'string' !== typeof src) { 35599 35600 for (var i = 0; i < src.length; i++) { 35601 35602 var source = document.createElement('source'); 35603 35604 source.setAttribute('type', src[i].type); 35605 source.setAttribute('src', src[i].src); 35606 35607 this.el.appendChild(source); 35608 } 35609 } 35610 35611 this.wrapper.appendChild(this.el); 35612 35613 if (this._options.startAt) { 35614 35615 this.el.currentTime = this._options.startAt; 35616 } 35617 35618 if ('function' === typeof this._options.onReady) { 35619 35620 this._options.onReady(this); 35621 } 35622
35623 this.emit('ready'); 35624 35625 this._constructOverlay(); 35626 35627 this.resize(); 35628 }, 35629 35630 /** 35631 * Dispatches normalized events 35632 */ 35633 _dispatch: function _dispatch() { 35634 var _this = this; 35635 35636 this.el.addEventListener('play', function () { 35637 35638 _this.emit('play', _this); 35639 }, false); 35640 35641 this.el.addEventListener('pause', function () { 35642 35643 _this.emit('pause', _this); 35644 }, false); 35645 35646 this.el.addEventListener('ended', function () { 35647 35648 _this.emit('end', _this); 35649 }, false); 35650 35651 this.el.addEventListener('canplay', function () { 35652 35653 _this.emit('canplay', _this); 35654 }, false); 35655 35656 this.el.addEventListener('canplaythrough', function () { 35657 35658 _this.emit('canplaythrough', _this); 35659 }, false); 35660 }, 35661 35662 /** 35663 * Any event listeners that are important to this provider 35664 */ 35665 _listen: function _listen() { 35666 var _this2 = this; 35667 35668 // Make sure we show the player once playback starts 35669 this.on('play', function () { 35670 35671 _this2.el.style.opacity = '1'; 35672 }); 35673 35674 // If the poster is hidden initially, set it once the play event happens 35675 if (!this._options.showPosterBeforePlay) { 35676 35677 this.once('play', function () { 35678 35679 _this2.wrapper.style.backgroundImage = 'url(\'' + _this2._options.poster + '\')'; 35680 }); 35681 } 35682 35683 // Show poster on playback end 35684 if (this._options.showPosterOnEnd) { 35685 35686 this.on('end', function () { 35687 35688 _this2.el.style.opacity = '0'; 35689 }); 35690 } 35691 35692 // Show poster on playback pause 35693 if (this._options.showPosterOnPause) { 35694 35695 this.on('pause', function () { 35696 35697 _this2.el.style.opacity = '0'; 35698 }); 35699 } 35700 }, 35701 35702 /** 35703 * Starts the video playback 35704 */ 35705 play: function play() { 35706 35707 this.el.play(); 35708 35709 return this; 35710 }, 35711 35712 /** 35713 * Pauses the video playback 35714 */ 35715 pause: function pause() { 35716 35717 this.el.pause(); 35718 35719 return this; 35720 }, 35721 35722 /** 35723 * Sets the player volume 35724 * @param {Number} [volume=100] Min = 0, Max = 100 35725 */ 35726 setVolume: function setVolume() { 35727 var volume = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100; 35728 35729 35730 this.el.volume = parseFloat(volume / 100); 35731 35732 return this; 35733 }, 35734 35735 /** 35736 * Gets the player volume 35737 * @returns {Number} Current player volume 35738 */ 35739 getVolume: function getVolume() { 35740 35741 return this.el.volume * 100; 35742 }, 35743 35744 /** 35745 * Mutes the player 35746 */ 35747 mute: function mute() { 35748 35749 this.el.muted = true; 35750 35751 return this; 35752 }, 35753 35754 /** 35755 * Unmutes the server 35756 */ 35757 unMute: function unMute() { 35758 35759 this.el.muted = false; 35760 35761 return this; 35762 }, 35763 35764 /** 35765 * Sets the time player should seek to 35766 * @param {Number} [time=0] Amount of seconds in the video to seek to 35767 */ 35768 setTime: function setTime() { 35769 var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; 35770 35771 35772 this.el.currentTime = time; 35773 35774 return this; 35775 }, 35776 35777 /** 35778 * Gets the time video playback is currently at 35779 * @returns {Number} Number of seconds from start to the current position 35780 */ 35781 getTime: function getTime() { 35782 35783 return this.el.currentTime; 35784 }, 35785 35786 /** 35787 * Gets video duration in seconds 35788 * @returns {Number} Length of the video in seconds 35789 */ 35790 getDuration: function getDuration() { 35791 35792 return this.el.duration; 35793 }, 35794 35795 /** 35796 * Hides the media and shows the poster behind it 35797 */ 35798 showPoster: function showPoster() { 35799 35800 this.pause().el.style.opacity = '0'; 35801 }, 35802 35803 /** 35804 * Changes the source of the current video 35805 * @param {Object} src Hash of video types and sources 35806 */ 35807 changeSource: function changeSource(src) { 35808 var newPoster = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 35809 35810 35811 this.el.innerHTML = ''; 35812 35813 if (src.length && 'string' !== typeof src) { 35814 35815 for (var i = 0; i < src.length; i++) { 35816 35817 var source = document.createElement('source'); 35818 35819 source.setAttribute('type', src[i].type); 35820 source.setAttribute('src', src[i].src); 35821 35822 this.el.appendChild(source); 35823 } 35824 } 35825 35826 this.el.load && this.el.load(); 35827 35828 if (this._options.startAt) { 35829 35830 this.el.currentTime = this._options.startAt; 35831 } 35832 35833 if (newPoster) { 35834 35835 var oldPoster = this._options.poster; 35836 35837 if (-1 !== this.wrapper.style.backgroundImage.indexOf(oldPoster)) { 35838 35839 this.wrapper.style.backgroundImage = 'url(\'' + newPoster + '\')'; 35840 } 35841 35842 this._options.poster = newPoster; 35843 } 35844 }, 35845 35846 /** 35847 * Destroys and unloads the player 35848 */ 35849 destroy: function destroy() { 35850
35851 this.emit('destroy'); 35852 35853 this.el.pause && this.el.pause(); 35854 this.el.src = ''; 35855 this.el.load && this.el.load(); 35856 35857 // We wrap this next part in try...catch in case the element is already 35858 // gone for some reason 35859 try { 35860 this.wrapper.parentNode.removeChild(this.wrapper); 35861 } catch (e) { 35862 35863 // do nothing here 35864 35865 } 35866 35867 vidim.deleteInstance(this.vidimID); 35868 35869 delete this.container.vidimID; 35870 35871 this.off(); 35872 }, 35873 35874 /** 35875 * Resizes the player to provide the best viewing experience 35876 */ 35877 resize: function resize() { 35878 35879 if (!this.el) { 35880 35881 return; 35882 } 35883 35884 var containerHeight = this.container.offsetHeight, 35885 containerWidth = this.container.offsetWidth; 35886 35887 if ('BODY' === this.container.nodeName) { 35888 35889 containerWidth = window.innerWidth; 35890 containerHeight = window.innerHeight; 35891 } 35892 35893 if (1 < this._options.ratio && containerWidth / containerHeight < this._options.ratio || 1 > this._options.ratio && containerHeight / containerWidth < this._options.ratio) { 35894 35895 this.el.style.maxHeight = 'calc( 100% + 2px )'; 35896 this.el.style.maxWidth = ''; 35897 } else { 35898 35899 this.el.style.maxHeight = ''; 35900 this.el.style.maxWidth = 'calc( 100% + 2px )'; 35901 } 35902 35903 this.emit('resize'); 35904 } 35905 }; 35906 35907 vidim.registerProvider('HTML5', vidimHTML5Provider); 35908}; 35909 35910/* global YT:false */ 35911 35912/** 35913 * Will be set to true once YouTube API is ready 35914 * @type {Boolean} 35915 */ 35916var isAPIReady = false; 35917 35918var YouTubeProvider = function (vidim) { 35919 35920 /** 35921 * Defaults specific to this provider 35922 * @type {Object} 35923 */ 35924 var defaults = { 35925 quality: 'hd1080' 35926 }; 35927 35928 /** 35929 * Provider definition object 35930 * @type {Object} 35931 */ 35932 var vidimYouTubeProvider = { 35933 35934 /** 35935 * Initial provider setup 35936 */ 35937 _initializeProvider: function _initializeProvider() { 35938 var _this = this; 35939 35940 if (isAPIReady) { 35941 35942 setDefaults(this._options, defaults); 35943 35944 this._constructPlayer(); 35945 this._listen(); 35946 } else { 35947 35948 window.addEventListener('vidimYouTubeAPIReady', function () { 35949 35950 setDefaults(_this._options, defaults); 35951 35952 _this._constructPlayer(); 35953 _this._listen(); 35954 }, false); 35955 } 35956 }, 35957 35958 /** 35959 * Sets up the actual player 35960 */ 35961 _constructPlayer: function _constructPlayer() { 35962 var _this2 = this; 35963 35964 // Check if YouTube ID was given, and if not, try to extract it from url 35965 if (11 === this._options.src.length) { 35966 35967 this.videoID = this._options.src; 35968 } else { 35969 35970 var regex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/; 35971 35972 var videoMatch = this._options.src.match(regex); 35973 35974 if (!videoMatch || 11 !== videoMatch[2].length) { 35975 35976 return new Error('Provided source is not a valid YouTube url'); 35977 } 35978 35979 this.videoID = videoMatch[2]; 35980 } 35981 35982 // Create a temporary dom element that will be replaced by the 35983 // YouTube iframe 35984 var toBeReplaced = document.createElement('div'); 35985 35986 this.wrapper.appendChild(toBeReplaced); 35987 35988 var playerParams = { 35989 videoId: this.videoID, 35990 playerVars: { 35991 allowfullscreen: false, 35992 controls: 0, 35993 enablejsapi: 1, 35994 disablekb: 1, 35995 fs: 0, 35996 iv_load_policy: 3, 35997 modestbranding: 1, 35998 origin: typeof window.location.origin !== 'undefined' ? window.location.origin : window.location.protocol + '//' + window.location.hostname + (window.location.port ? ':' + window.location.port : ''), 35999 playsinline: 1, 36000 rel: 0, 36001 showinfo: 0, 36002 start: this._options.startAt, 36003 autoplay: +this._options.autoplay 36004 }, 36005 events: { 36006 'onReady': function onReady() { 36007 36008 if (_this2._options.muted) { 36009 36010 _this2.mute(); 36011 } 36012 36013 _this2.player.setPlaybackQuality(_this2._options.quality); 36014 36015 if ('function' === typeof _this2._options.onReady) { 36016 36017 _this2._options.onReady(_this2); 36018 } 36019 36020 _this2.emit('ready'); 36021 36022 if (_this2._options.loop) { 36023 36024 var loopInterval = void 0; 36025 36026 _this2.on('play', function () { 36027 36028 loopInterval = setInterval(function () { 36029 36030 if (_this2.getTime() === 0 || _this2.getTime() + 0.15 > _this2.getDuration()) { 36031 36032 _this2.setTime(0); 36033 _this2.play(); 36034 } 36035 }, 100); 36036 }); 36037 36038 _this2.on('pause', function () { 36039 36040 clearInterval(loopInterval); 36041 }); 36042 36043 _this2.on('destroy', function () { 36044 36045 clearInterval(loopInterval); 36046 }); 36047 } 36048 }, 36049 'onStateChange': function onStateChange(e) { 36050 36051 switch (e.data) { 36052 36053 case 0: 36054 _this2.emit('end', _this2); 36055 break; 36056 36057 case 1: 36058 _this2.emit('play', _this2); 36059 break; 36060 36061 case 2: 36062 _this2.emit('pause', _this2); 36063 break; 36064 36065 case 3: 36066 _this2.emit('buffering', _this2); 36067 break; 36068 36069 } 36070 } 36071 } 36072 }; 36073 36074 if (this._options.loop) { 36075 36076 playerParams.playerVars.playlist = this.videoID; 36077 playerParams.playerVars.loop = 1; 36078 } 36079 36080 this.player = new YT.Player(toBeReplaced, playerParams); 36081 36082 this.el = this.player.getIframe(); 36083 36084 this.el.style.position = 'absolute'; 36085 this.el.style.left = '50%'; 36086 this.el.style.top = '50%'; 36087 this.el.style.transform = 'translate(-50%, -50%)'; 36088 this.el.style.webkitTransform = 'translate(-50%, -50%)'; 36089 this.el.style.msTransform = 'translate(-50%, -50%)'; 36090 this.el.style.oTransform = 'translate(-50%, -50%)'; 36091 this.el.style.mozTransform = 'translate(-50%, -50%)'; 36092 this.el.style.minWidth = 'calc( 100% + 2px )'; 36093 this.el.style.minHeight = 'calc( 100% + 2px )'; 36094 this.el.style.opacity = '0'; 36095 36096 this._constructOverlay(); 36097 36098 this.resize(); 36099 }, 36100 36101 /** 36102 * Any event listeners that are important to this provider 36103 */ 36104 _listen: function _listen() { 36105 var _this3 = this; 36106 36107 // Make sure we show the player once playback starts 36108 this.on('play', function () { 36109 36110 _this3.el.style.opacity = '1'; 36111 }); 36112 36113 // If the poster is hidden initially, set it once the play event happens 36114 if (!this._options.showPosterBeforePlay) { 36115 36116 this.once('play', function () { 36117 36118 _this3.wrapper.style.backgroundImage = 'url(\'' + _this3._options.poster + '\')'; 36119 }); 36120 } 36121 36122 // Show poster on playback end 36123 if (this._options.showPosterOnEnd) { 36124 36125 this.on('end', function () { 36126 36127 _this3.el.style.opacity = '0'; 36128 }); 36129 } else { 36130 36131 // We don't want to display YouTube play button over our video, 36132 // this is a hacky way to stop that from happening 36133 this.on('end', function () { 36134 36135 _this3.player.seekTo(_this3.player.getDuration()); 36136 _this3.player.playVideo(); 36137 _this3.player.pauseVideo(); 36138 }); 36139 } 36140 36141 // Show poster on playback pause 36142 if (this._options.showPosterOnPause) { 36143 36144 this.on('pause', function () { 36145 36146 _this3.el.style.opacity = '0'; 36147 }); 36148 } 36149 }, 36150 36151 /** 36152 * Starts the video playback 36153 */ 36154 play: function play() { 36155 36156 this.player.playVideo(); 36157 36158 return this; 36159 }, 36160 36161 /** 36162 * Pauses the video playback 36163 */ 36164 pause: function pause() { 36165 36166 this.player.pauseVideo(); 36167 36168 return this; 36169 }, 36170 36171 /** 36172 * Sets the player volume 36173 * @param {Number} [volume=100] Min = 0, Max = 100 36174 */ 36175 setVolume: function setVolume() { 36176 var volume = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 100; 36177 36178 36179 this.player.setVolume(volume); 36180 36181 return this; 36182 }, 36183 36184 /** 36185 * Gets the player volume 36186 * @returns {Number} Current player volume 36187 */ 36188 getVolume: function getVolume() { 36189 36190 return this.getVolume(); 36191 }, 36192 36193 /** 36194 * Mutes the player 36195 */ 36196 mute: function mute() { 36197 36198 this.player.mute(); 36199 36200 return this; 36201 }, 36202 36203 /** 36204 * Unmutes the server 36205 */
36206 unMute: function unMute() { 36207 36208 this.player.unMute(); 36209 36210 return this; 36211 }, 36212 36213 /** 36214 * Sets the time player should seek to 36215 * @param {Number} [time=0] Amount of seconds in the video to seek to 36216 */ 36217 setTime: function setTime() { 36218 var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; 36219 36220 36221 this.player.seekTo(time, true); 36222 36223 return this; 36224 }, 36225 36226 /** 36227 * Gets the time video playback is currently at 36228 * @returns {Number} Number of seconds from start to the current position 36229 */ 36230 getTime: function getTime() { 36231 36232 return this.player.getCurrentTime(); 36233 }, 36234 36235 /** 36236 * Gets video duration in seconds 36237 * @returns {Number} Length of the video in seconds 36238 */ 36239 getDuration: function getDuration() { 36240 36241 return this.player.getDuration(); 36242 }, 36243 36244 /** 36245 * Hides the media and shows the poster behind it 36246 */ 36247 showPoster: function showPoster() { 36248 36249 this.pause().el.style.opacity = '0'; 36250 }, 36251 36252 /** 36253 * Changes the source of the current video 36254 * @param {Object} src Hash of video types and sources 36255 */ 36256 changeSource: function changeSource(src) { 36257 var newPoster = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 36258 36259 36260 if (11 === src.length) { 36261 36262 this.videoID = src; 36263 } else { 36264 36265 var regex = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|\&v=|\?v=)([^#\&\?]*).*/; 36266 36267 var videoMatch = src.match(regex); 36268 36269 if (!videoMatch || 11 !== videoMatch[2].length) { 36270 36271 return new Error('Provided source is not a valid YouTube url'); 36272 } 36273 36274 this.videoID = videoMatch[2]; 36275 } 36276 36277 this.player.loadPlaylist(this.videoID, 0, this._options.startAt, this._options.quality); 36278 36279 this.player.setLoop(this._options.loop); 36280 36281 if (newPoster) { 36282 36283 var oldPoster = this._options.poster; 36284 36285 if (-1 !== this.wrapper.style.backgroundImage.indexOf(oldPoster)) { 36286 36287 this.wrapper.style.backgroundImage = 'url(\'' + newPoster + '\')'; 36288 } 36289 36290 this._options.poster = newPoster; 36291 } 36292 }, 36293 36294 /** 36295 * Destroys and unloads the player 36296 */ 36297 destroy: function destroy() { 36298 36299 this.emit('destroy'); 36300 36301 this.player.destroy(); 36302 36303 // We wrap this next part in try...catch in case the element is already 36304 // gone for some reason 36305 try { 36306 this.wrapper.parentNode.removeChild(this.wrapper); 36307 } catch (e) { 36308 36309 // do nothing here 36310 36311 } 36312 36313 vidim.deleteInstance(this.vidimID); 36314 36315 delete this.container.vidimID; 36316 36317 this.off(); 36318 }, 36319 36320 /** 36321 * Resizes the player to provide the best viewing experience 36322 */ 36323 resize: function resize() { 36324 36325 if (!this.el) { 36326 36327 return; 36328 } 36329 36330 var containerHeight = this.container.offsetHeight, 36331 containerWidth = this.container.offsetWidth; 36332 36333 if ('BODY' === this.container.nodeName) { 36334 36335 containerWidth = window.innerWidth; 36336 containerHeight = window.innerHeight; 36337 } 36338 36339 if (1 < this._options.ratio && containerWidth / containerHeight < this._options.ratio || 1 > this._options.ratio && containerHeight / containerWidth < this._options.ratio) { 36340 36341 this.el.style.maxHeight = 'calc( 100% + 2px )'; 36342 this.el.style.maxWidth = ''; 36343 36344 this.el.style.height = ''; 36345 this.el.style.width = this.el.offsetHeight * this._options.ratio + 200 + 'px'; 36346 } else { 36347 36348 this.el.style.maxHeight = ''; 36349 this.el.style.maxWidth = 'calc( 100% + 2px )'; 36350 36351 this.el.style.height = this.el.offsetWidth / this._options.ratio + 'px'; 36352 this.el.style.width = ''; 36353 36354 if (this.el.offsetHeight < this.wrapper.offsetHeight + 140) { 36355 36356 this.el.style.height = this.el.offsetWidth / this._options.ratio + 140 + 'px'; 36357 } 36358 } 36359 36360 this.emit('resize'); 36361 } 36362 }; 36363 36364 vidim.registerProvider('YouTube', vidimYouTubeProvider); 36365}; 36366 36367// Load the YouTube API 36368var tag = document.createElement('script'); 36369 36370tag.src = 'https://www.youtube.com/iframe_api'; 36371 36372document.querySelector('body').appendChild(tag); 36373 36374// Create our custom event 36375var event = document.createEvent('Event'); 36376 36377event.initEvent('vidimYouTubeAPIReady', true, true); 36378
36379// Finaly, make sure we trigger that event once the API is ready 36380if ('undefined' === typeof window.onYouTubeIframeAPIReady) { 36381 36382 window.onYouTubeIframeAPIReady = function () { 36383 36384 window.vidimYouTubeAPIReady = true; 36385 36386 isAPIReady = true; 36387 36388 window.dispatchEvent(event); 36389 }; 36390} else { 36391 36392 var oldOnYouTubeIframeAPIReady = window.onYouTubeIframeAPIReady; 36393 36394 window.onYouTubeIframeAPIReady = function () { 36395 36396 oldOnYouTubeIframeAPIReady(); 36397 36398 window.vidimYouTubeAPIReady = true; 36399 36400 isAPIReady = true; 36401 36402 window.dispatchEvent(event); 36403 }; 36404} 36405 36406var index = ((function factory(global) { 36407 36408 if ('undefined' === typeof global.document) { 36409 36410 return; 36411 } 36412 36413 /** 36414 * Instance ID counter 36415 * @type {Number} 36416 */ 36417 var ID = 0; 36418 36419 /** 36420 * Hashmap of instances 36421 * @type {Object} 36422 */ 36423 var instances = {}; 36424 36425 /** 36426 * Default options 36427 * @type {Object} 36428 */ 36429 var defaults = { 36430 wrapperClass: '', 36431 overlayClass: '', 36432 src: false, 36433 type: 'HTML5', 36434 ratio: 1.7778, 36435 autoplay: true, 36436 loop: true, 36437 poster: '', 36438 showPosterBeforePlay: true, 36439 showPosterOnEnd: false, 36440 showPosterOnPause: false, 36441 zIndex: 0, 36442 autoResize: true, 36443 muted: true, 36444 startAt: 0, 36445 onReady: false 36446 }; 36447 36448 /** 36449 * Stores a list of option keys that the user provided, used for setting more 36450 * sensible defaults 36451 * @type {Array} 36452 */ 36453 var optionsProvided = []; 36454 36455 /** 36456 * Hashmap of providers 36457 * @type {Object} 36458 */ 36459 var providers = {}; 36460 36461 /** 36462 * Register a provider for handling media embeds 36463 * @param {String} type Short identifier for the media type handled 36464 * @param {Function|Object} Object or a function that returns object 36465 */ 36466 function registerProvider(type, provider) { 36467 36468 if ('function' === typeof provider) { 36469 36470 providers[type] = provider.call(global, defaults); 36471 } else { 36472 36473 providers[type] = provider; 36474 } 36475 } 36476 36477 /** 36478 * Get instance by its ID 36479 * @param {integer} id Instance ID 36480 * @returns {null|Object} null or instance if found 36481 */ 36482 function getInstanceFromID(id) { 36483 36484 if (!instances[id]) { 36485 36486 return null; 36487 } 36488 36489 return instances[id]; 36490 } 36491 36492 /** 36493 * Get instance from the container element 36494 * @param {Object|string} element DOM element or a query string 36495 * @returns {null|Object} null or instance if found 36496 */ 36497 function getInstanceFromElement(element) { 36498 36499 element = getElement(element); 36500 36501 if ('undefined' === typeof element.vidimID || !instances[element.vidimID]) { 36502 36503 return null; 36504 } 36505 36506 return instances[element.vidimID]; 36507 } 36508 36509 /** 36510 * Destroys all active instances 36511 */ 36512 function destroyAllInstances() { 36513 36514 for (var key in instances) { 36515 36516 instances[key].hasOwnProperty('destroy') && instances[key].destroy(); 36517 } 36518 36519 instances = {}; 36520 } 36521 36522 /** 36523 * Delete instance from the instances hash 36524 * NOTE: this will not destroy the instance, only remove it from the 36525 * instances hash. Call the destroy() method on the instance itself if you 36526 * want to destroy it 36527 * @param {string} id Instance ID 36528 */ 36529 function deleteInstance(id) { 36530 36531 delete instances[id]; 36532 } 36533 36534 // API method for scanning the DOM and initializing vide instances from 36535 // data-vide attribute 36536 36537 /** 36538 * Scan the DOM for elements that have data-vidim attribute and initialize 36539 * new vidim instance based on that attribute 36540 */ 36541 function scanDOM() { 36542 36543 var vidimElements = document.querySelectorAll('[data-vidim]'); 36544 36545 if (!vidimElements.length) { 36546 36547 return; 36548 } 36549 36550 for (var i = 0; i < vidimElements.length; i++) { 36551 36552 var element = vidimElements[i]; 36553 var options = element.getAttribute('data-vidim'); 36554 36555 if ('undefined' !== typeof element.vidimID) { 36556 36557 // this element already has an instance of vidim 36558 continue; 36559 } 36560 36561 try { 36562 36563 // The things we do to avoid eval... 36564 var regex = /({|,)(?:\s*)(?:')?([A-Za-z_$\.][A-Za-z0-9_ \-\.$]*)(?:')?(?:\s*):/g; 36565 36566 var fixedOptions = options.replace(regex, '$1"$2":').replace(/:\s?'/g, ':"').replace(/'\s?}/g, '"}').replace(/',"/g, '","'); 36567 36568 var parsedOptions = JSON.parse(fixedOptions); 36569 36570 new vidim(element, parsedOptions); 36571 } catch (e) { 36572 36573 // do nothing 36574 36575 } 36576 } 36577 } 36578 36579 /** 36580 * Used for instantiating new instances 36581 * @param {Object|string} element DOM element or a query string 36582 * @param {Object} [options={}] Options hash 36583 */ 36584 function vidim(element) { 36585 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 36586 36587
36588 Object.keys(options).forEach(function (key) { 36589 36590 optionsProvided.push(key); 36591 }); 36592 36593 // Set defaults 36594 setDefaults(options, defaults); 36595 36596 if (options.src && !providers[options.type]) { 36597 36598 return new Error('No provider can handle type: \'' + options.type + '\''); 36599 } 36600 36601 if ('string' === typeof options.ratio) { 36602 36603 if ('4/3' === options.ratio) { 36604 36605 options.ratio = 4 / 3; 36606 } else { 36607 36608 options.ratio = 16 / 9; 36609 } 36610 } 36611 36612 this._options = options; 36613 this.container = getElement(element); 36614 36615 if (!this.container) { 36616 36617 return new Error('Could not find the container: ' + element); 36618 } 36619 36620 // Set more sensitive defaults 36621 if (-1 === optionsProvided.indexOf('zIndex') && 'BODY' === this.container.nodeName) { 36622 36623 this._options.zIndex = -1; 36624 } 36625 36626 this._initialize(); 36627 } 36628 36629 var prototype = vidim.prototype; 36630 36631 /** 36632 * Initializes the instance and does the work common to all providers 36633 */ 36634 prototype._initialize = function () { 36635 36636 // Assign a unique ID to this instance, and make sure we store it on the 36637 // container for convenience 36638 this.vidimID = ID++; 36639 this.container.vidimID = this.vidimID; 36640 36641 instances[this.vidimID] = this; 36642 36643 // Add emitter interface to our instance 36644 componentEmitter(this); 36645 36646 // Check if poster was provided but the source was not, 36647 // in that case we fake a simple provider interface that only displays a 36648 // poster 36649 if (!this._options.src && this._options.poster) { 36650 36651 this._constructWrapper(); 36652 36653 this.destroy = function () { 36654 36655 this.emit('destroy'); 36656 36657 // We wrap this next part in try...catch in case the element is already 36658 // gone for some reason 36659 try { 36660 this.wrapper.parentNode.removeChild(this.wrapper); 36661 } catch (e) { 36662 36663 // do nothing here 36664 36665 } 36666 36667 vidim.deleteInstance(this.vidimID); 36668 36669 delete this.container.vidimID; 36670 36671 this.off(); 36672 }; 36673 36674 return; 36675 } 36676 36677 var provider = providers[this._options.type]; 36678 36679 for (var key in provider) { 36680 36681 this[key] = provider[key]; 36682 } 36683 36684 if ('function' !== typeof this._initializeProvider) { 36685 36686 return new Error('Provider is missing method: _initializeProvider'); 36687 } 36688 36689 this._constructWrapper(); 36690 this._initializeProvider(); 36691 36692 if (this._options.autoResize) { 36693 36694 window.addEventListener('resize', throttle(this.resize, 200).bind(this), false); 36695 } 36696 36697 this.resize(); 36698 }; 36699 36700 /** 36701 * Generates a wrapper that is used for holding the media 36702 */ 36703 prototype._constructWrapper = function () { 36704 36705 var containerStyle = getComputedStyle(this.container, null); 36706 36707 if ('static' === containerStyle.getPropertyValue('position')) { 36708 36709 this.container.style.position = 'relative'; 36710 } 36711 36712 this.wrapper = document.createElement('div'); 36713 36714 if ('BODY' === this.container.nodeName) { 36715 36716 this.wrapper.style.position = 'fixed'; 36717 } else { 36718 36719 this.wrapper.style.position = 'absolute'; 36720 } 36721 36722 if (this._options.wrapperClass) { 36723 36724 if ('function' === typeof this._options.wrapperClass) { 36725 36726 this.wrapper.classList.add(this._options.wrapperClass.call(this)); 36727 } else { 36728 36729 this.wrapper.classList.add(this._options.wrapperClass); 36730 } 36731 } 36732 36733 this.wrapper.style.left = 0; 36734 this.wrapper.style.top = 0; 36735 this.wrapper.style.height = '100%'; 36736 this.wrapper.style.width = '100%'; 36737 this.wrapper.style.overflow = 'hidden'; 36738 this.wrapper.style.zIndex = parseInt(this._options.zIndex, 10); 36739 36740 if (this._options.poster) { 36741 36742 this.wrapper.style.backgroundSize = 'cover'; 36743 this.wrapper.style.backgroundPosition = 'center center'; 36744 this.wrapper.style.backgroundRepear = 'no-repeat'; 36745 36746 if (this._options.showPosterBeforePlay) { 36747 36748 this.wrapper.style.backgroundImage = 'url(\'' + this._options.poster + '\')'; 36749 } 36750 } 36751 36752 this.container.insertBefore(this.wrapper, this.container.firstChild); 36753 }; 36754 36755 /** 36756 * Generates an overlay that is placed above the media to prevent interaction 36757 */ 36758 prototype._constructOverlay = function () { 36759
36760 this.overlay = document.createElement('div'); 36761 36762 this.overlay.style.position = 'absolute'; 36763 36764 if (this._options.overlayClass) { 36765 36766 if ('function' === typeof this._options.overlayClass) { 36767 36768 this.overlay.classList.add(this._options.overlayClass.call(this)); 36769 } else { 36770 36771 this.overlay.classList.add(this._options.overlayClass); 36772 } 36773 } 36774 36775 this.overlay.style.left = 0; 36776 this.overlay.style.top = 0; 36777 this.overlay.style.height = '100%'; 36778 this.overlay.style.width = '100%'; 36779 36780 this.wrapper.appendChild(this.overlay); 36781 }; 36782 36783 // Provide method for retrieving vidim instance by its id 36784 vidim.getInstanceFromID = getInstanceFromID; 36785 36786 // Provide method for retrieving vidim instance from the container element 36787 vidim.getInstanceFromElement = getInstanceFromElement; 36788 36789 // Provide method for registering new providers 36790 vidim.registerProvider = registerProvider; 36791 36792 // Provide method for destroying all instances 36793 vidim.destroyAllInstances = destroyAllInstances; 36794 36795 // Provide method for deleting the instance from instances hash 36796 vidim.deleteInstance = deleteInstance; 36797 36798 // Export our utils functions as well so providers can make use of them 36799 vidim.utility = utility; 36800 36801 // Provide method for scanning the DOM and initializing vidim from attribute 36802 vidim.scanDOM = scanDOM; 36803 36804 // Initialize providers 36805 html5Provider(vidim); 36806 YouTubeProvider(vidim); 36807 36808 // Parse the DOM an auto initialize based on the [data-vidim] attribute 36809 ready(scanDOM); 36810 36811 return vidim; 36812}))('undefined' !== typeof window ? window : undefined); 36813 36814return index; 36815 36816}))); 36817 36818},{}]},{},[6]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.