1(function($) { 2 function __(string) { 3 return WFLS_ADMIN_TRANSLATIONS[string] || string; 4 } 5 window['WFLS'] = { 6 panelIsOpen: false, 7 basePageName: '', 8 panelQueue: [], 9 pendingChanges: {}, 10 userIsActivating: false, 11 12 //Screen sizes 13 SCREEN_XS: 'xs', 14 SCREEN_SM: 'sm', 15 SCREEN_MD: 'md', 16 SCREEN_LG: 'lg', 17 18 init: function() { 19 this.basePageName = document.title; 20 21 var tabs = $('.wfls-page-tabs').find('.wfls-tab a'); 22 if (tabs.length > 0) { 23 tabs.click(function() { 24 $('.wfls-page-tabs').find('.wfls-tab').removeClass('wfls-active'); 25 $('.wfls-tab-content').removeClass('wfls-active'); 26 27 var tab = $(this).closest('.wfls-tab'); 28 tab.addClass('wfls-active'); 29 var content = $('#' + tab.data('target')); 30 content.addClass('wfls-active'); 31 document.title = tab.data('pageTitle') + " \u2039 " + WFLS.basePageName; 32 $(window).trigger('wfls-tab-change', [tab.data('target')]); 33 }); 34 if (window.location.hash) { 35 var hashes = WFLS.parseHashes(); 36 var hash = hashes[hashes.length - 1]; 37 for (var i = 0; i < tabs.length; i++) { 38 if (hash == $(tabs[i]).closest('.wfls-tab').data('target')) { 39 $(tabs[i]).trigger('click'); 40 } 41 } 42 } 43 else { 44 $(tabs[0]).trigger('click'); 45 } 46 $(window).on('hashchange', function () { 47 var hashes = WFLS.parseHashes(); 48 var hash = hashes[hashes.length - 1]; 49 for (var i = 0; i < tabs.length; i++) { 50 if (hash == $(tabs[i]).closest('.wfls-tab').data('target')) { 51 $(tabs[i]).trigger('click'); 52 } 53 } 54 }); 55 } 56 }, 57 58 /** 59 * Sends a WP AJAX call, automatically adding our nonce. 60 * 61 * @param string action 62 * @param string|array|object payload 63 * @param function successCallback 64 * @param function failureCallback 65 */ 66 ajax: function(action, payload, successCallback, failureCallback) { 67 if (typeof(payload) == 'string') { 68 if (payload.length > 0) { 69 payload += '&'; 70 } 71 payload += 'action=' + action + '&nonce=' + WFLSVars.nonce; 72 } 73 else if (typeof(payload) == 'object' && payload instanceof Array) { 74 // jQuery serialized form data 75 payload.push({ 76 name: 'action', 77 value: action 78 }); 79 payload.push({ 80 name: 'nonce', 81 value: WFLSVars.nonce 82 }); 83 } 84 else if (typeof(payload) == 'object') { 85 payload['action'] = action; 86 payload['nonce'] = WFLSVars.nonce; 87 } 88 89 90 $.ajax({ 91 type: 'POST', 92 url: WFLSVars.ajaxurl, 93 dataType: "json", 94 data: payload, 95 success: function(json) { 96 typeof successCallback == 'function' && successCallback(json); 97 }, 98 error: function() { 99 typeof failureCallback == 'function' && failureCallback(); 100 } 101 }); 102 }, 103 104 escapeHTML: function(str) { 105 return String(str) 106 .replace(/&/g, '&') 107 .replace(/</g, '<') 108 .replace(/>/g, '>') 109 .replace(/"/g, '"') 110 .replace(/'/g, '''); 111 }, 112 113 base64UrlToUint8Array: function(base64url) { 114 var padding = '='.repeat((4 - (base64url.length % 4)) % 4); 115 var base64 = (base64url + padding).replace(/-/g, '+').replace(/_/g, '/'); 116 var raw = window.atob(base64); 117 var bytes = new Uint8Array(raw.length); 118 for (var i = 0; i < raw.length; i++) { 119 bytes[i] = raw.charCodeAt(i); 120 } 121 return bytes; 122 }, 123 124 arrayBufferToBase64Url: function(buffer) { 125 var bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer); 126 var binary = ''; 127 for (var i = 0; i < bytes.length; i++) { 128 binary += String.fromCharCode(bytes[i]); 129 } 130 return window.btoa(binary).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, ''); 131 }, 132 133 publicKeyOptionsFromJSON: function(options) { 134 var parsed = $.extend(true, {}, options); 135 parsed.challenge = WFLS.base64UrlToUint8Array(parsed.challenge); 136 parsed.user.id = WFLS.base64UrlToUint8Array(parsed.user.id); 137 if (parsed.excludeCredentials && parsed.excludeCredentials.length) { 138 for (var i = 0; i < parsed.excludeCredentials.length; i++) { 139 parsed.excludeCredentials[i].id = WFLS.base64UrlToUint8Array(parsed.excludeCredentials[i].id); 140 } 141 } 142 return parsed; 143 }, 144 145 credentialToJSON: function(credential) { 146 var transports = []; 147 var clientExtensionResults = {}; 148 if (credential.response && typeof credential.response.getTransports === 'function') { 149 transports = credential.response.getTransports(); 150 } 151 if (typeof credential.getClientExtensionResults === 'function') { 152 clientExtensionResults = credential.getClientExtensionResults() || {}; 153 } 154 return { 155 id: credential.id, 156 type: credential.type, 157 rawId: WFLS.arrayBufferToBase64Url(credential.rawId), 158 clientExtensionResults: clientExtensionResults, 159 response: { 160 clientDataJSON: WFLS.arrayBufferToBase64Url(credential.response.clientDataJSON), 161 attestationObject: WFLS.arrayBufferToBase64Url(credential.response.attestationObject), 162 transports: transports 163 } 164 }; 165 }, 166 167 /** 168 * Closes the current standalone modal dialog. Supports being used directly as an event handler. 169 * 170 * @param event (optional) 171 */ 172 closeStandaloneModal: function(event) { 173 event && event.preventDefault(); 174 event && event.stopPropagation(); 175 WFLS.currentDialog && WFLS.currentDialog.dialog('close'); 176 }, 177 178 /** 179 * Displays a modal dialog with fixed HTML content using built-in WP functionality. This is intended for 180 * use by content that may not have the Vue runtime available. 181 * 182 * @param html 183 * @param settings 184 */ 185 standaloneModalHTML: function(html, settings) { 186 if (!settings) { settings = {}; } 187 WFLS.currentDialog && WFLS.currentDialog.dialog('close'); 188 WFLS.currentDialog = $('<div>', { html: html }).dialog({ 189 modal: true, 190 width: settings.width ? settings.width : (WFLS.screenSize(500) ? 300 : 400), 191 resizable: false, 192 draggable: false, 193 zIndex: 9998, 194 close: function () { 195 $(this).dialog('destroy').remove(); 196 WFLS.currentDialog = false;
197 typeof settings.onClose === 'function' && settings.onClose(); 198 }, 199 open: function () { 200 var dialog = $(this); 201 var widget = dialog.dialog('widget'); 202 var instance = dialog.dialog('instance'); 203 204 widget.attr('id', 'wfls-standalone-modal').css('z-index', 9999); 205 instance && instance.overlay && instance.overlay.attr('id', 'wfls-standalone-modal-overlay'); 206 207 typeof settings.onOpen === 'function' && settings.onOpen(this); 208 } 209 }); 210 }, 211 212 standaloneModal: function(heading, body, settings) { 213 if (!settings) { settings = {}; } 214 var html = 215 '<div class="wfls-modal">' + 216 '<div class="wfls-modal-header">' + 217 '<div class="wfls-modal-header-content">' + 218 '<div class="wfls-modal-title">' + 219 '<strong>' + (typeof heading === 'object' ? heading.html : WFLS.escapeHTML(heading)) + '</strong>' + 220 '</div>' + 221 '</div>' + 222 '<div class="wfls-modal-header-action"></div>' + 223 '</div>' + 224 '<div class="wfls-modal-content">' + 225 (typeof body === 'object' ? body.html : WFLS.escapeHTML(body)) + 226 '</div>' + 227 '<div class="wfls-modal-footer">' + 228 '<ul class="wfls-flex-horizontal wfls-flex-align-right wfls-full-width">' + 229 '<li class="wfls-padding-add-left-small"><a href="#" class="wfls-btn wfls-btn-primary wfls-btn-callout-subtle wfls-generic-close-btn">' + __('Close') + '</a></li>' + 230 '</ul>' + 231 '</div>' + 232 '</div>'; 233 234 var originalOpen = settings.onOpen; 235 settings.onOpen = function(dialog) { 236 $(dialog).find('.wfls-generic-close-btn').on('click', WFLS.closeStandaloneModal); 237 typeof originalOpen === 'function' && originalOpen(dialog); 238 } 239 WFLS.standaloneModalHTML(html, settings) 240 }, 241 242 /** 243 * Parses and returns the hash portion of a URL, working around user agents that URL-encode the # character. 244 * 245 * @returns {Array} 246 */ 247 parseHashes: function() { 248 var hashes = window.location.hash.replace('%23', '#'); 249 var splitHashes = hashes.split('#'); 250 var result = []; 251 for (var i = 0; i < splitHashes.length; i++) { 252 if (splitHashes[i].length > 0) { 253 result.push(splitHashes[i]); 254 } 255 } 256 return result; 257 }, 258 259 /** 260 * Returns whether or not the screen size is within the size given. This may be a numerical value 261 * or one of the WFLS_SCREEN_ constants. 262 * 263 * @param size 264 * @returns {boolean} 265 */ 266 screenSize: function(size) { 267 switch (size) { 268 case WFLS.SCREEN_XS: 269 return window.matchMedia("only screen and (max-width: 767px)").matches; 270 case WFLS.SCREEN_SM: 271 return window.matchMedia("only screen and (max-width: 991px)").matches; 272 case WFLS.SCREEN_MD: 273 return window.matchMedia("only screen and (max-width: 1199px)").matches; 274 case WFLS.SCREEN_LG: 275 return window.matchMedia("only screen and (max-width: 32767px)").matches; 276 } 277 278 var parsed = parseInt(size); 279 if (isNaN(parsed)) { 280 return false; 281 } 282 return window.matchMedia("only screen and (max-width: " + parsed + "px)").matches; 283 }, 284 }; 285 286 $(function() { 287 WFLS.init(); 288 }); 289 290 $.fn.crossfade = function(incoming, duration, complete) { 291 duration = duration || 400; 292 complete = complete || function() { }; 293 294 return this.each(function() { 295 $(this).fadeOut(duration, function() { 296 $(incoming).fadeIn(duration, complete); 297 }); 298 }); 299 }; 300})(jQuery); 301 302/*! @source https://github.com/eligrey/FileSaver.js/blob/master/dist/FileSaver.min.js */ 303(function(a,b){if("function"==typeof define&&define.amd)define([],b);else if("undefined"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){"use strict";function b(a,b){return"undefined"==typeof b?b={autoBom:!1}:"object"!=typeof b&&(console.warn("Deprecated: Expected third argument to be a object"),b={autoBom:!b}),b.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(a.type)?new Blob(["\uFEFF",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open("GET",a),d.responseType="blob",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error("could not download file")},d.send()}function d(a){var b=new XMLHttpRequest;b.open("HEAD",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent("click"))}catch(c){var b=document.createEvent("MouseEvents");
vendor: 1,788 bytes, line 303
303b.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f="object"==typeof window&&window.window===window?window:"object"==typeof self&&self.self===self?self:"object"==typeof global&&global.global===global?global:void 0,a=/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||("object"!=typeof window||window!==f?function(){}:"download"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement("a");g=g||b.name||"download",j.download=g,j.rel="noopener","string"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target="_blank")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:"msSaveOrOpenBlob"in navigator?function(f,g,h){if(g=g||f.name||"download","string"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement("a");i.href=f,i.target="_blank",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open("","_blank"),g&&(g.document.title=g.document.body.innerText="downloading..."),"string"==typeof b)return c(b,d,e);var h="application/octet-stream"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\/[\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&"undefined"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,"data:attachment/file;"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,"undefined"!=typeof module&&(module.exports=g)});
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.