Warning: Cannot modify header information - headers already sent by (output started at /var/www/jonas-eriksen.dk/pic/private/index.php:1) in /var/www/jonas-eriksen.dk/pic/private/index.php on line 215
wp-backbone.min.js000064400000005737152335011310010062 0ustar00/*! This file is auto-generated */ window.wp=window.wp||{},function(e){wp.Backbone={},wp.Backbone.Subviews=function(e,t){this.view=e,this._views=_.isArray(t)?{"":t}:t||{}},wp.Backbone.Subviews.extend=Backbone.Model.extend,_.extend(wp.Backbone.Subviews.prototype,{all:function(){return _.flatten(_.values(this._views))},get:function(e){return this._views[e=e||""]},first:function(e){e=this.get(e);return e&&e.length?e[0]:null},set:function(i,e,t){var n,s;return _.isString(i)||(t=e,e=i,i=""),t=t||{},s=e=_.isArray(e)?e:[e],(n=this.get(i))&&(t.add?_.isUndefined(t.at)?s=n.concat(e):(s=n).splice.apply(s,[t.at,0].concat(e)):(_.each(s,function(e){e.__detach=!0}),_.each(n,function(e){e.__detach?e.$el.detach():e.remove()}),_.each(s,function(e){delete e.__detach}))),this._views[i]=s,_.each(e,function(e){var t=e.Views||wp.Backbone.Subviews,t=e.views=e.views||new t(e);t.parent=this.view,t.selector=i},this),t.silent||this._attach(i,e,_.extend({ready:this._isReady()},t)),this},add:function(e,t,i){return _.isString(e)||(i=t,t=e,e=""),this.set(e,t,_.extend({add:!0},i))},unset:function(e,t,i){var n;return _.isString(e)||(i=t,t=e,e=""),t=t||[],(n=this.get(e))&&(t=_.isArray(t)?t:[t],this._views[e]=t.length?_.difference(n,t):[]),i&&i.silent||_.invoke(t,"remove"),this},detach:function(){return e(_.pluck(this.all(),"el")).detach(),this},render:function(){var i={ready:this._isReady()};return _.each(this._views,function(e,t){this._attach(t,e,i)},this),this.rendered=!0,this},remove:function(e){return e&&e.silent||(this.parent&&this.parent.views&&this.parent.views.unset(this.selector,this.view,{silent:!0}),delete this.parent,delete this.selector),_.invoke(this.all(),"remove"),this._views=[],this},replace:function(e,t){return e.html(t),this},insert:function(e,t,i){var n,i=i&&i.at;return _.isNumber(i)&&(n=e.children()).length>i?n.eq(i).before(t):e.append(t),this},ready:function(){this.view.trigger("ready"),_.chain(this.all()).map(function(e){return e.views}).flatten().where({attached:!0}).invoke("ready")},_attach:function(e,t,i){var n,e=e?this.view.$(e):this.view.$el;return e.length&&(n=_.chain(t).pluck("views").flatten().value(),_.each(n,function(e){e.rendered||(e.view.render(),e.rendered=!0)},this),this[i.add?"insert":"replace"](e,_.pluck(t,"el"),i),_.each(n,function(e){e.attached=!0,i.ready&&e.ready()},this)),this},_isReady:function(){for(var e=this.view.el;e;){if(e===document.body)return!0;e=e.parentNode}return!1}}),wp.Backbone.View=Backbone.View.extend({Subviews:wp.Backbone.Subviews,constructor:function(e){this.views=new this.Subviews(this,this.views),this.on("ready",this.ready,this),this.options=e||{},Backbone.View.apply(this,arguments)},remove:function(){var e=Backbone.View.prototype.remove.apply(this,arguments);return this.views&&this.views.remove(),e},render:function(){var e;return this.prepare&&(e=this.prepare()),this.views.detach(),this.template&&(this.trigger("prepare",e=e||{}),this.$el.html(this.template(e))),this.views.render(),this},prepare:function(){return this.options},ready:function(){}})}(jQuery);quicktags.js000064400000054111152335011310007071 0ustar00 /* * Quicktags * * This is the HTML editor in WordPress. It can be attached to any textarea and will * append a toolbar above it. This script is self-contained (does not require external libraries). * * Run quicktags(settings) to initialize it, where settings is an object containing up to 3 properties: * settings = { * id : 'my_id', the HTML ID of the textarea, required * buttons: '' Comma separated list of the names of the default buttons to show. Optional. * Current list of default button names: 'strong,em,link,block,del,ins,img,ul,ol,li,code,more,close'; * } * * The settings can also be a string quicktags_id. * * quicktags_id string The ID of the textarea that will be the editor canvas * buttons string Comma separated list of the default buttons names that will be shown in that instance. * * @output wp-includes/js/quicktags.js */ // New edit toolbar used with permission // by Alex King // http://www.alexking.org/ /* global adminpage, wpActiveEditor, quicktagsL10n, wpLink, prompt, edButtons */ window.edButtons = []; /* jshint ignore:start */ /** * Back-compat * * Define all former global functions so plugins that hack quicktags.js directly don't cause fatal errors. */ window.edAddTag = function(){}; window.edCheckOpenTags = function(){}; window.edCloseAllTags = function(){}; window.edInsertImage = function(){}; window.edInsertLink = function(){}; window.edInsertTag = function(){}; window.edLink = function(){}; window.edQuickLink = function(){}; window.edRemoveTag = function(){}; window.edShowButton = function(){}; window.edShowLinks = function(){}; window.edSpell = function(){}; window.edToolbar = function(){}; /* jshint ignore:end */ (function(){ // Private stuff is prefixed with an underscore. var _domReady = function(func) { var t, i, DOMContentLoaded, _tryReady; if ( typeof jQuery !== 'undefined' ) { jQuery( func ); } else { t = _domReady; t.funcs = []; t.ready = function() { if ( ! t.isReady ) { t.isReady = true; for ( i = 0; i < t.funcs.length; i++ ) { t.funcs[i](); } } }; if ( t.isReady ) { func(); } else { t.funcs.push(func); } if ( ! t.eventAttached ) { if ( document.addEventListener ) { DOMContentLoaded = function(){document.removeEventListener('DOMContentLoaded', DOMContentLoaded, false);t.ready();}; document.addEventListener('DOMContentLoaded', DOMContentLoaded, false); window.addEventListener('load', t.ready, false); } else if ( document.attachEvent ) { DOMContentLoaded = function(){if (document.readyState === 'complete'){ document.detachEvent('onreadystatechange', DOMContentLoaded);t.ready();}}; document.attachEvent('onreadystatechange', DOMContentLoaded); window.attachEvent('onload', t.ready); _tryReady = function() { try { document.documentElement.doScroll('left'); } catch(e) { setTimeout(_tryReady, 50); return; } t.ready(); }; _tryReady(); } t.eventAttached = true; } } }, _datetime = (function() { var now = new Date(), zeroise; zeroise = function(number) { var str = number.toString(); if ( str.length < 2 ) { str = '0' + str; } return str; }; return now.getUTCFullYear() + '-' + zeroise( now.getUTCMonth() + 1 ) + '-' + zeroise( now.getUTCDate() ) + 'T' + zeroise( now.getUTCHours() ) + ':' + zeroise( now.getUTCMinutes() ) + ':' + zeroise( now.getUTCSeconds() ) + '+00:00'; })(); var qt = window.QTags = function(settings) { if ( typeof(settings) === 'string' ) { settings = {id: settings}; } else if ( typeof(settings) !== 'object' ) { return false; } var t = this, id = settings.id, canvas = document.getElementById(id), name = 'qt_' + id, tb, onclick, toolbar_id, wrap, setActiveEditor; if ( !id || !canvas ) { return false; } t.name = name; t.id = id; t.canvas = canvas; t.settings = settings; if ( id === 'content' && typeof(adminpage) === 'string' && ( adminpage === 'post-new-php' || adminpage === 'post-php' ) ) { // Back compat hack :-( window.edCanvas = canvas; toolbar_id = 'ed_toolbar'; } else { toolbar_id = name + '_toolbar'; } tb = document.getElementById( toolbar_id ); if ( ! tb ) { tb = document.createElement('div'); tb.id = toolbar_id; tb.className = 'quicktags-toolbar'; } canvas.parentNode.insertBefore(tb, canvas); t.toolbar = tb; // Listen for click events. onclick = function(e) { e = e || window.event; var target = e.target || e.srcElement, visible = target.clientWidth || target.offsetWidth, i; // Don't call the callback on pressing the accesskey when the button is not visible. if ( !visible ) { return; } // As long as it has the class ed_button, execute the callback. if ( / ed_button /.test(' ' + target.className + ' ') ) { // We have to reassign canvas here. t.canvas = canvas = document.getElementById(id); i = target.id.replace(name + '_', ''); if ( t.theButtons[i] ) { t.theButtons[i].callback.call(t.theButtons[i], target, canvas, t); } } }; setActiveEditor = function() { window.wpActiveEditor = id; }; wrap = document.getElementById( 'wp-' + id + '-wrap' ); if ( tb.addEventListener ) { tb.addEventListener( 'click', onclick, false ); if ( wrap ) { wrap.addEventListener( 'click', setActiveEditor, false ); } } else if ( tb.attachEvent ) { tb.attachEvent( 'onclick', onclick ); if ( wrap ) { wrap.attachEvent( 'onclick', setActiveEditor ); } } t.getButton = function(id) { return t.theButtons[id]; }; t.getButtonElement = function(id) { return document.getElementById(name + '_' + id); }; t.init = function() { _domReady( function(){ qt._buttonsInit( id ); } ); }; t.remove = function() { delete qt.instances[id]; if ( tb && tb.parentNode ) { tb.parentNode.removeChild( tb ); } }; qt.instances[id] = t; t.init(); }; function _escape( text ) { text = text || ''; text = text.replace( /&([^#])(?![a-z1-4]{1,8};)/gi, '&$1' ); return text.replace( //g, '>' ).replace( /"/g, '"' ).replace( /'/g, ''' ); } qt.instances = {}; qt.getInstance = function(id) { return qt.instances[id]; }; qt._buttonsInit = function( id ) { var t = this; function _init( instanceId ) { var canvas, name, settings, theButtons, html, ed, id, i, use, defaults = ',strong,em,link,block,del,ins,img,ul,ol,li,code,more,close,'; ed = t.instances[instanceId]; canvas = ed.canvas; name = ed.name; settings = ed.settings; html = ''; theButtons = {}; use = ''; // Set buttons. if ( settings.buttons ) { use = ','+settings.buttons+','; } for ( i in edButtons ) { if ( ! edButtons[i] ) { continue; } id = edButtons[i].id; if ( use && defaults.indexOf( ',' + id + ',' ) !== -1 && use.indexOf( ',' + id + ',' ) === -1 ) { continue; } if ( ! edButtons[i].instance || edButtons[i].instance === instanceId ) { theButtons[id] = edButtons[i]; if ( edButtons[i].html ) { html += edButtons[i].html( name + '_' ); } } } if ( use && use.indexOf(',dfw,') !== -1 ) { theButtons.dfw = new qt.DFWButton(); html += theButtons.dfw.html( name + '_' ); } if ( 'rtl' === document.getElementsByTagName( 'html' )[0].dir ) { theButtons.textdirection = new qt.TextDirectionButton(); html += theButtons.textdirection.html( name + '_' ); } ed.toolbar.innerHTML = html; ed.theButtons = theButtons; if ( typeof jQuery !== 'undefined' ) { jQuery( document ).triggerHandler( 'quicktags-init', [ ed ] ); } } if ( id ) { _init( id ); } else { for ( id in t.instances ) { _init( id ); } } t.buttonsInitDone = true; }; /** * Main API function for adding a button to Quicktags * * Adds qt.Button or qt.TagButton depending on the args. The first three args are always required. * To be able to add button(s) to Quicktags, your script should be enqueued as dependent * on "quicktags" and outputted in the footer. If you are echoing JS directly from PHP, * use add_action( 'admin_print_footer_scripts', 'output_my_js', 100 ) or add_action( 'wp_footer', 'output_my_js', 100 ) * * Minimum required to add a button that calls an external function: * QTags.addButton( 'my_id', 'my button', my_callback ); * function my_callback() { alert('yeah!'); } * * Minimum required to add a button that inserts a tag: * QTags.addButton( 'my_id', 'my button', '', '' ); * QTags.addButton( 'my_id2', 'my button', '
' ); * * @param string id Required. Button HTML ID * @param string display Required. Button's value="..." * @param string|function arg1 Required. Either a starting tag to be inserted like "" or a callback that is executed when the button is clicked. * @param string arg2 Optional. Ending tag like "" * @param string access_key Deprecated Not used * @param string title Optional. Button's title="..." * @param int priority Optional. Number representing the desired position of the button in the toolbar. 1 - 9 = first, 11 - 19 = second, 21 - 29 = third, etc. * @param string instance Optional. Limit the button to a specific instance of Quicktags, add to all instances if not present. * @param attr object Optional. Used to pass additional attributes. Currently supports `ariaLabel` and `ariaLabelClose` (for "close tag" state) * @return mixed null or the button object that is needed for back-compat. */ qt.addButton = function( id, display, arg1, arg2, access_key, title, priority, instance, attr ) { var btn; if ( !id || !display ) { return; } priority = priority || 0; arg2 = arg2 || ''; attr = attr || {}; if ( typeof(arg1) === 'function' ) { btn = new qt.Button( id, display, access_key, title, instance, attr ); btn.callback = arg1; } else if ( typeof(arg1) === 'string' ) { btn = new qt.TagButton( id, display, arg1, arg2, access_key, title, instance, attr ); } else { return; } if ( priority === -1 ) { // Back-compat. return btn; } if ( priority > 0 ) { while ( typeof(edButtons[priority]) !== 'undefined' ) { priority++; } edButtons[priority] = btn; } else { edButtons[edButtons.length] = btn; } if ( this.buttonsInitDone ) { this._buttonsInit(); // Add the button HTML to all instances toolbars if addButton() was called too late. } }; qt.insertContent = function(content) { var sel, startPos, endPos, scrollTop, text, canvas = document.getElementById(wpActiveEditor), event; if ( !canvas ) { return false; } if ( document.selection ) { // IE. canvas.focus(); sel = document.selection.createRange(); sel.text = content; canvas.focus(); } else if ( canvas.selectionStart || canvas.selectionStart === 0 ) { // FF, WebKit, Opera. text = canvas.value; startPos = canvas.selectionStart; endPos = canvas.selectionEnd; scrollTop = canvas.scrollTop; canvas.value = text.substring(0, startPos) + content + text.substring(endPos, text.length); canvas.selectionStart = startPos + content.length; canvas.selectionEnd = startPos + content.length; canvas.scrollTop = scrollTop; canvas.focus(); } else { canvas.value += content; canvas.focus(); } if ( document.createEvent ) { event = document.createEvent( 'HTMLEvents' ); event.initEvent( 'change', false, true ); canvas.dispatchEvent( event ); } else if ( canvas.fireEvent ) { canvas.fireEvent( 'onchange' ); } return true; }; // A plain, dumb button. qt.Button = function( id, display, access, title, instance, attr ) { this.id = id; this.display = display; this.access = ''; this.title = title || ''; this.instance = instance || ''; this.attr = attr || {}; }; qt.Button.prototype.html = function(idPrefix) { var active, on, wp, title = this.title ? ' title="' + _escape( this.title ) + '"' : '', ariaLabel = this.attr && this.attr.ariaLabel ? ' aria-label="' + _escape( this.attr.ariaLabel ) + '"' : '', val = this.display ? ' value="' + _escape( this.display ) + '"' : '', id = this.id ? ' id="' + _escape( idPrefix + this.id ) + '"' : '', dfw = ( wp = window.wp ) && wp.editor && wp.editor.dfw; if ( this.id === 'fullscreen' ) { return ''; } else if ( this.id === 'dfw' ) { active = dfw && dfw.isActive() ? '' : ' disabled="disabled"'; on = dfw && dfw.isOn() ? ' active' : ''; return ''; } return ''; }; qt.Button.prototype.callback = function(){}; // A button that inserts HTML tag. qt.TagButton = function( id, display, tagStart, tagEnd, access, title, instance, attr ) { var t = this; qt.Button.call( t, id, display, access, title, instance, attr ); t.tagStart = tagStart; t.tagEnd = tagEnd; }; qt.TagButton.prototype = new qt.Button(); qt.TagButton.prototype.openTag = function( element, ed ) { if ( ! ed.openTags ) { ed.openTags = []; } if ( this.tagEnd ) { ed.openTags.push( this.id ); element.value = '/' + element.value; if ( this.attr.ariaLabelClose ) { element.setAttribute( 'aria-label', this.attr.ariaLabelClose ); } } }; qt.TagButton.prototype.closeTag = function( element, ed ) { var i = this.isOpen(ed); if ( i !== false ) { ed.openTags.splice( i, 1 ); } element.value = this.display; if ( this.attr.ariaLabel ) { element.setAttribute( 'aria-label', this.attr.ariaLabel ); } }; // Whether a tag is open or not. Returns false if not open, or current open depth of the tag. qt.TagButton.prototype.isOpen = function (ed) { var t = this, i = 0, ret = false; if ( ed.openTags ) { while ( ret === false && i < ed.openTags.length ) { ret = ed.openTags[i] === t.id ? i : false; i ++; } } else { ret = false; } return ret; }; qt.TagButton.prototype.callback = function(element, canvas, ed) { var t = this, startPos, endPos, cursorPos, scrollTop, v = canvas.value, l, r, i, sel, endTag = v ? t.tagEnd : '', event; if ( document.selection ) { // IE. canvas.focus(); sel = document.selection.createRange(); if ( sel.text.length > 0 ) { if ( !t.tagEnd ) { sel.text = sel.text + t.tagStart; } else { sel.text = t.tagStart + sel.text + endTag; } } else { if ( !t.tagEnd ) { sel.text = t.tagStart; } else if ( t.isOpen(ed) === false ) { sel.text = t.tagStart; t.openTag(element, ed); } else { sel.text = endTag; t.closeTag(element, ed); } } canvas.focus(); } else if ( canvas.selectionStart || canvas.selectionStart === 0 ) { // FF, WebKit, Opera. startPos = canvas.selectionStart; endPos = canvas.selectionEnd; if ( startPos < endPos && v.charAt( endPos - 1 ) === '\n' ) { endPos -= 1; } cursorPos = endPos; scrollTop = canvas.scrollTop; l = v.substring(0, startPos); // Left of the selection. r = v.substring(endPos, v.length); // Right of the selection. i = v.substring(startPos, endPos); // Inside the selection. if ( startPos !== endPos ) { if ( !t.tagEnd ) { canvas.value = l + i + t.tagStart + r; // Insert self-closing tags after the selection. cursorPos += t.tagStart.length; } else { canvas.value = l + t.tagStart + i + endTag + r; cursorPos += t.tagStart.length + endTag.length; } } else { if ( !t.tagEnd ) { canvas.value = l + t.tagStart + r; cursorPos = startPos + t.tagStart.length; } else if ( t.isOpen(ed) === false ) { canvas.value = l + t.tagStart + r; t.openTag(element, ed); cursorPos = startPos + t.tagStart.length; } else { canvas.value = l + endTag + r; cursorPos = startPos + endTag.length; t.closeTag(element, ed); } } canvas.selectionStart = cursorPos; canvas.selectionEnd = cursorPos; canvas.scrollTop = scrollTop; canvas.focus(); } else { // Other browsers? if ( !endTag ) { canvas.value += t.tagStart; } else if ( t.isOpen(ed) !== false ) { canvas.value += t.tagStart; t.openTag(element, ed); } else { canvas.value += endTag; t.closeTag(element, ed); } canvas.focus(); } if ( document.createEvent ) { event = document.createEvent( 'HTMLEvents' ); event.initEvent( 'change', false, true ); canvas.dispatchEvent( event ); } else if ( canvas.fireEvent ) { canvas.fireEvent( 'onchange' ); } }; // Removed. qt.SpellButton = function() {}; // The close tags button. qt.CloseButton = function() { qt.Button.call( this, 'close', quicktagsL10n.closeTags, '', quicktagsL10n.closeAllOpenTags ); }; qt.CloseButton.prototype = new qt.Button(); qt._close = function(e, c, ed) { var button, element, tbo = ed.openTags; if ( tbo ) { while ( tbo.length > 0 ) { button = ed.getButton(tbo[tbo.length - 1]); element = document.getElementById(ed.name + '_' + button.id); if ( e ) { button.callback.call(button, element, c, ed); } else { button.closeTag(element, ed); } } } }; qt.CloseButton.prototype.callback = qt._close; qt.closeAllTags = function( editor_id ) { var ed = this.getInstance( editor_id ); if ( ed ) { qt._close( '', ed.canvas, ed ); } }; // The link button. qt.LinkButton = function() { var attr = { ariaLabel: quicktagsL10n.link }; qt.TagButton.call( this, 'link', 'link', '', '', '', '', '', attr ); }; qt.LinkButton.prototype = new qt.TagButton(); qt.LinkButton.prototype.callback = function(e, c, ed, defaultValue) { var URL, t = this; if ( typeof wpLink !== 'undefined' ) { wpLink.open( ed.id ); return; } if ( ! defaultValue ) { defaultValue = 'http://'; } if ( t.isOpen(ed) === false ) { URL = prompt( quicktagsL10n.enterURL, defaultValue ); if ( URL ) { t.tagStart = ''; qt.TagButton.prototype.callback.call(t, e, c, ed); } } else { qt.TagButton.prototype.callback.call(t, e, c, ed); } }; // The img button. qt.ImgButton = function() { var attr = { ariaLabel: quicktagsL10n.image }; qt.TagButton.call( this, 'img', 'img', '', '', '', '', '', attr ); }; qt.ImgButton.prototype = new qt.TagButton(); qt.ImgButton.prototype.callback = function(e, c, ed, defaultValue) { if ( ! defaultValue ) { defaultValue = 'http://'; } var src = prompt(quicktagsL10n.enterImageURL, defaultValue), alt; if ( src ) { alt = prompt(quicktagsL10n.enterImageDescription, ''); this.tagStart = '' + alt + ''; qt.TagButton.prototype.callback.call(this, e, c, ed); } }; qt.DFWButton = function() { qt.Button.call( this, 'dfw', '', 'f', quicktagsL10n.dfw ); }; qt.DFWButton.prototype = new qt.Button(); qt.DFWButton.prototype.callback = function() { var wp; if ( ! ( wp = window.wp ) || ! wp.editor || ! wp.editor.dfw ) { return; } window.wp.editor.dfw.toggle(); }; qt.TextDirectionButton = function() { qt.Button.call( this, 'textdirection', quicktagsL10n.textdirection, '', quicktagsL10n.toggleTextdirection ); }; qt.TextDirectionButton.prototype = new qt.Button(); qt.TextDirectionButton.prototype.callback = function(e, c) { var isRTL = ( 'rtl' === document.getElementsByTagName('html')[0].dir ), currentDirection = c.style.direction; if ( ! currentDirection ) { currentDirection = ( isRTL ) ? 'rtl' : 'ltr'; } c.style.direction = ( 'rtl' === currentDirection ) ? 'ltr' : 'rtl'; c.focus(); }; // Ensure backward compatibility. edButtons[10] = new qt.TagButton( 'strong', 'b', '', '', '', '', '', { ariaLabel: quicktagsL10n.strong, ariaLabelClose: quicktagsL10n.strongClose } ); edButtons[20] = new qt.TagButton( 'em', 'i', '', '', '', '', '', { ariaLabel: quicktagsL10n.em, ariaLabelClose: quicktagsL10n.emClose } ); edButtons[30] = new qt.LinkButton(); // Special case. edButtons[40] = new qt.TagButton( 'block', 'b-quote', '\n\n
', '
\n\n', '', '', '', { ariaLabel: quicktagsL10n.blockquote, ariaLabelClose: quicktagsL10n.blockquoteClose } ); edButtons[50] = new qt.TagButton( 'del', 'del', '', '', '', '', '', { ariaLabel: quicktagsL10n.del, ariaLabelClose: quicktagsL10n.delClose } ); edButtons[60] = new qt.TagButton( 'ins', 'ins', '', '', '', '', '', { ariaLabel: quicktagsL10n.ins, ariaLabelClose: quicktagsL10n.insClose } ); edButtons[70] = new qt.ImgButton(); // Special case. edButtons[80] = new qt.TagButton( 'ul', 'ul', '\n\n', '', '', '', { ariaLabel: quicktagsL10n.ul, ariaLabelClose: quicktagsL10n.ulClose } ); edButtons[90] = new qt.TagButton( 'ol', 'ol', '
    \n', '
\n\n', '', '', '', { ariaLabel: quicktagsL10n.ol, ariaLabelClose: quicktagsL10n.olClose } ); edButtons[100] = new qt.TagButton( 'li', 'li', '\t
  • ', '
  • \n', '', '', '', { ariaLabel: quicktagsL10n.li, ariaLabelClose: quicktagsL10n.liClose } ); edButtons[110] = new qt.TagButton( 'code', 'code', '', '', '', '', '', { ariaLabel: quicktagsL10n.code, ariaLabelClose: quicktagsL10n.codeClose } ); edButtons[120] = new qt.TagButton( 'more', 'more', '\n\n', '', '', '', '', { ariaLabel: quicktagsL10n.more } ); edButtons[140] = new qt.CloseButton(); })(); /** * Initialize new instance of the Quicktags editor */ window.quicktags = function(settings) { return new window.QTags(settings); }; /** * Inserts content at the caret in the active editor (textarea) * * Added for back compatibility * @see QTags.insertContent() */ window.edInsertContent = function(bah, txt) { return window.QTags.insertContent(txt); }; /** * Adds a button to all instances of the editor * * Added for back compatibility, use QTags.addButton() as it gives more flexibility like type of button, button placement, etc. * @see QTags.addButton() */ window.edButton = function(id, display, tagStart, tagEnd, access) { return window.QTags.addButton( id, display, tagStart, tagEnd, access, '', -1 ); }; customize-base.min.js000064400000017254152335011310010621 0ustar00/*! This file is auto-generated */ window.wp=window.wp||{},function(t,a){var o={},s=Array.prototype.slice,r=function(){},n=function(t,e,n){var i=e&&e.hasOwnProperty("constructor")?e.constructor:function(){return t.apply(this,arguments)};return a.extend(i,t),r.prototype=t.prototype,i.prototype=new r,e&&a.extend(i.prototype,e),n&&a.extend(i,n),(i.prototype.constructor=i).__super__=t.prototype,i};o.Class=function(t,e,n){var i,s=arguments;return t&&e&&o.Class.applicator===t&&(s=e,a.extend(this,n||{})),(i=this).instance&&(i=function(){return i.instance.apply(i,arguments)},a.extend(i,this)),i.initialize.apply(i,s),i},o.Class.extend=function(t,e){t=n(this,t,e);return t.extend=this.extend,t},o.Class.applicator={},o.Class.prototype.initialize=function(){},o.Class.prototype.extended=function(t){for(var e=this;void 0!==e.constructor;){if(e.constructor===t)return!0;if(void 0===e.constructor.__super__)return!1;e=e.constructor.__super__}return!1},o.Events={trigger:function(t){return this.topics&&this.topics[t]&&this.topics[t].fireWith(this,s.call(arguments,1)),this},bind:function(t){return this.topics=this.topics||{},this.topics[t]=this.topics[t]||a.Callbacks(),this.topics[t].add.apply(this.topics[t],s.call(arguments,1)),this},unbind:function(t){return this.topics&&this.topics[t]&&this.topics[t].remove.apply(this.topics[t],s.call(arguments,1)),this}},o.Value=o.Class.extend({initialize:function(t,e){this._value=t,this.callbacks=a.Callbacks(),this._dirty=!1,a.extend(this,e||{}),this.set=this.set.bind(this)},instance:function(){return arguments.length?this.set.apply(this,arguments):this.get()},get:function(){return this._value},set:function(t){var e=this._value;return t=this._setter.apply(this,arguments),null===(t=this.validate(t))||_.isEqual(e,t)||(this._value=t,this._dirty=!0,this.callbacks.fireWith(this,[t,e])),this},_setter:function(t){return t},setter:function(t){var e=this.get();return this._setter=t,this._value=null,this.set(e),this},resetSetter:function(){return this._setter=this.constructor.prototype._setter,this.set(this.get()),this},validate:function(t){return t},bind:function(){return this.callbacks.add.apply(this.callbacks,arguments),this},unbind:function(){return this.callbacks.remove.apply(this.callbacks,arguments),this},link:function(){var t=this.set;return a.each(arguments,function(){this.bind(t)}),this},unlink:function(){var t=this.set;return a.each(arguments,function(){this.unbind(t)}),this},sync:function(){var t=this;return a.each(arguments,function(){t.link(this),this.link(t)}),this},unsync:function(){var t=this;return a.each(arguments,function(){t.unlink(this),this.unlink(t)}),this}}),o.Values=o.Class.extend({defaultConstructor:o.Value,initialize:function(t){a.extend(this,t||{}),this._value={},this._deferreds={}},instance:function(t){return 1===arguments.length?this.value(t):this.when.apply(this,arguments)},value:function(t){return this._value[t]},has:function(t){return void 0!==this._value[t]},add:function(t,e){var n,i,s=this;if("string"==typeof t)n=t,i=e;else{if("string"!=typeof t.id)throw new Error("Unknown key");n=t.id,i=t}return s.has(n)?s.value(n):((s._value[n]=i).parent=s,i.extended(o.Value)&&i.bind(s._change),s.trigger("add",i),s._deferreds[n]&&s._deferreds[n].resolve(),s._value[n])},create:function(t){return this.add(t,new this.defaultConstructor(o.Class.applicator,s.call(arguments,1)))},each:function(n,i){i=void 0===i?this:i,a.each(this._value,function(t,e){n.call(i,e,t)})},remove:function(t){var e=this.value(t);e&&(this.trigger("remove",e),e.extended(o.Value)&&e.unbind(this._change),delete e.parent),delete this._value[t],delete this._deferreds[t],e&&this.trigger("removed",e)},when:function(){var e=this,n=s.call(arguments),i=a.Deferred();return"function"==typeof n[n.length-1]&&i.done(n.pop()),a.when.apply(a,a.map(n,function(t){if(!e.has(t))return e._deferreds[t]=e._deferreds[t]||a.Deferred()})).done(function(){var t=a.map(n,function(t){return e(t)});t.length!==n.length?e.when.apply(e,n).done(function(){i.resolveWith(e,t)}):i.resolveWith(e,t)}),i.promise()},_change:function(){this.parent.trigger("change",this)}}),a.extend(o.Values.prototype,o.Events),o.ensure=function(t){return"string"==typeof t?a(t):t},o.Element=o.Value.extend({initialize:function(t,e){var n,i,s=this,r=o.Element.synchronizer.html;this.element=o.ensure(t),this.events="",this.element.is("input, select, textarea")&&(t=this.element.prop("type"),this.events+=" change input",r=o.Element.synchronizer.val,this.element.is("input"))&&o.Element.synchronizer[t]&&(r=o.Element.synchronizer[t]),o.Value.prototype.initialize.call(this,null,a.extend(e||{},r)),this._value=this.get(),n=this.update,i=this.refresh,this.update=function(t){t!==i.call(s)&&n.apply(this,arguments)},this.refresh=function(){s.set(i.call(s))},this.bind(this.update),this.element.on(this.events,this.refresh)},find:function(t){return a(t,this.element)},refresh:function(){},update:function(){}}),o.Element.synchronizer={},a.each(["html","val"],function(t,e){o.Element.synchronizer[e]={update:function(t){this.element[e](t)},refresh:function(){return this.element[e]()}}}),o.Element.synchronizer.checkbox={update:function(t){this.element.prop("checked",t)},refresh:function(){return this.element.prop("checked")}},o.Element.synchronizer.radio={update:function(t){this.element.filter(function(){return this.value===t}).prop("checked",!0)},refresh:function(){return this.element.filter(":checked").val()}},a.support.postMessage=!!window.postMessage,o.Messenger=o.Class.extend({add:function(t,e,n){return this[t]=new o.Value(e,n)},initialize:function(t,e){var n=window.parent===window?null:window.parent;a.extend(this,e||{}),this.add("channel",t.channel),this.add("url",t.url||""),this.add("origin",this.url()).link(this.url).setter(function(t){var e=document.createElement("a");return e.href=t,e.protocol+"//"+e.host.replace(/:(80|443)$/,"")}),this.add("targetWindow",null),this.targetWindow.set=function(t){var e=this._value;return t=this._setter.apply(this,arguments),null!==(t=this.validate(t))&&e!==t&&(this._value=t,this._dirty=!0,this.callbacks.fireWith(this,[t,e])),this},this.targetWindow(t.targetWindow||n),this.receive=this.receive.bind(this),this.receive.guid=a.guid++,a(window).on("message",this.receive)},destroy:function(){a(window).off("message",this.receive)},receive:function(t){t=t.originalEvent,this.targetWindow&&this.targetWindow()&&(this.origin()&&t.origin!==this.origin()||"string"==typeof t.data&&"{"===t.data[0]&&(t=JSON.parse(t.data))&&t.id&&void 0!==t.data&&((t.channel||this.channel())&&this.channel()!==t.channel||this.trigger(t.id,t.data)))},send:function(t,e){e=void 0===e?null:e,this.url()&&this.targetWindow()&&(t={id:t,data:e},this.channel()&&(t.channel=this.channel()),this.targetWindow().postMessage(JSON.stringify(t),this.origin()))}}),a.extend(o.Messenger.prototype,o.Events),o.Notification=o.Class.extend({template:null,templateId:"customize-notification",containerClasses:"",initialize:function(t,e){this.code=t,delete(t=_.extend({message:null,type:"error",fromServer:!1,data:null,setting:null,template:null,dismissible:!1,containerClasses:""},e)).code,_.extend(this,t)},render:function(){var e,t,n=this;return n.template||(n.template=wp.template(n.templateId)),t=_.extend({},n,{alt:n.parent&&n.parent.alt}),e=a(n.template(t)),n.dismissible&&e.find(".notice-dismiss").on("click keydown",function(t){"keydown"===t.type&&13!==t.which||(n.parent?n.parent.remove(n.code):e.remove())}),e}}),(o=a.extend(new o.Values,o)).get=function(){var n={};return this.each(function(t,e){n[e]=t.get()}),n},o.utils={},o.utils.parseQueryString=function(t){var n={};return _.each(t.split("&"),function(t){var e,t=t.split("=",2);t[0]&&(e=(e=decodeURIComponent(t[0].replace(/\+/g," "))).replace(/ /g,"_"),t=_.isUndefined(t[1])?null:decodeURIComponent(t[1].replace(/\+/g," ")),n[e]=t)}),n},t.customize=o}(wp,jQuery);tw-sack.js000064400000011551152335011310006450 0ustar00/* Simple AJAX Code-Kit (SACK) v1.6.1 */ /* 2005 Gregory Wild-Smith */ /* www.twilightuniverse.com */ /* Software licenced under a modified X11 licence, see documentation or authors website for more details */ function sack(file) { this.xmlhttp = null; this.resetData = function() { this.method = "POST"; this.queryStringSeparator = "?"; this.argumentSeparator = "&"; this.URLString = ""; this.encodeURIString = true; this.execute = false; this.element = null; this.elementObj = null; this.requestFile = file; this.vars = new Object(); this.responseStatus = new Array(2); }; this.resetFunctions = function() { this.onLoading = function() { }; this.onLoaded = function() { }; this.onInteractive = function() { }; this.onCompletion = function() { }; this.onError = function() { }; this.onFail = function() { }; }; this.reset = function() { this.resetFunctions(); this.resetData(); }; this.createAJAX = function() { try { this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e1) { try { this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { this.xmlhttp = null; } } if (! this.xmlhttp) { if (typeof XMLHttpRequest != "undefined") { this.xmlhttp = new XMLHttpRequest(); } else { this.failed = true; } } }; this.setVar = function(name, value){ this.vars[name] = Array(value, false); }; this.encVar = function(name, value, returnvars) { if (true == returnvars) { return Array(encodeURIComponent(name), encodeURIComponent(value)); } else { this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true); } } this.processURLString = function(string, encode) { encoded = encodeURIComponent(this.argumentSeparator); regexp = new RegExp(this.argumentSeparator + "|" + encoded); varArray = string.split(regexp); for (i = 0; i < varArray.length; i++){ urlVars = varArray[i].split("="); if (true == encode){ this.encVar(urlVars[0], urlVars[1]); } else { this.setVar(urlVars[0], urlVars[1]); } } } this.createURLString = function(urlstring) { if (this.encodeURIString && this.URLString.length) { this.processURLString(this.URLString, true); } if (urlstring) { if (this.URLString.length) { this.URLString += this.argumentSeparator + urlstring; } else { this.URLString = urlstring; } } // prevents caching of URLString this.setVar("rndval", new Date().getTime()); urlstringtemp = new Array(); for (key in this.vars) { if (false == this.vars[key][1] && true == this.encodeURIString) { encoded = this.encVar(key, this.vars[key][0], true); delete this.vars[key]; this.vars[encoded[0]] = Array(encoded[1], true); key = encoded[0]; } urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0]; } if (urlstring){ this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator); } else { this.URLString += urlstringtemp.join(this.argumentSeparator); } } this.runResponse = function() { eval(this.response); } this.runAJAX = function(urlstring) { if (this.failed) { this.onFail(); } else { this.createURLString(urlstring); if (this.element) { this.elementObj = document.getElementById(this.element); } if (this.xmlhttp) { var self = this; if (this.method == "GET") { totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString; this.xmlhttp.open(this.method, totalurlstring, true); } else { this.xmlhttp.open(this.method, this.requestFile, true); try { this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded") } catch (e) { } } this.xmlhttp.onreadystatechange = function() { switch (self.xmlhttp.readyState) { case 1: self.onLoading(); break; case 2: self.onLoaded(); break; case 3: self.onInteractive(); break; case 4: self.response = self.xmlhttp.responseText; self.responseXML = self.xmlhttp.responseXML; self.responseStatus[0] = self.xmlhttp.status; self.responseStatus[1] = self.xmlhttp.statusText; if (self.execute) { self.runResponse(); } if (self.elementObj) { elemNodeName = self.elementObj.nodeName; elemNodeName.toLowerCase(); if (elemNodeName == "input" || elemNodeName == "select" || elemNodeName == "option" || elemNodeName == "textarea") { self.elementObj.value = self.response; } else { self.elementObj.innerHTML = self.response; } } if (self.responseStatus[0] == "200") { self.onCompletion(); } else { self.onError(); } self.URLString = ""; break; } }; this.xmlhttp.send(this.URLString); } } }; this.reset(); this.createAJAX(); } wp-emoji-loader.js000064400000033271152335011310010075 0ustar00/** * @output wp-includes/js/wp-emoji-loader.js */ /** * Emoji Settings as exported in PHP via _print_emoji_detection_script(). * @typedef WPEmojiSettings * @type {object} * @property {?object} source * @property {?string} source.concatemoji * @property {?string} source.twemoji * @property {?string} source.wpemoji * @property {?boolean} DOMReady * @property {?Function} readyCallback */ /** * Support tests. * @typedef SupportTests * @type {object} * @property {?boolean} flag * @property {?boolean} emoji */ /** * IIFE to detect emoji support and load Twemoji if needed. * * @param {Window} window * @param {Document} document * @param {WPEmojiSettings} settings */ ( function wpEmojiLoader( window, document, settings ) { if ( typeof Promise === 'undefined' ) { return; } var sessionStorageKey = 'wpEmojiSettingsSupports'; var tests = [ 'flag', 'emoji' ]; /** * Checks whether the browser supports offloading to a Worker. * * @since 6.3.0 * * @private * * @returns {boolean} */ function supportsWorkerOffloading() { return ( typeof Worker !== 'undefined' && typeof OffscreenCanvas !== 'undefined' && typeof URL !== 'undefined' && URL.createObjectURL && typeof Blob !== 'undefined' ); } /** * @typedef SessionSupportTests * @type {object} * @property {number} timestamp * @property {SupportTests} supportTests */ /** * Get support tests from session. * * @since 6.3.0 * * @private * * @returns {?SupportTests} Support tests, or null if not set or older than 1 week. */ function getSessionSupportTests() { try { /** @type {SessionSupportTests} */ var item = JSON.parse( sessionStorage.getItem( sessionStorageKey ) ); if ( typeof item === 'object' && typeof item.timestamp === 'number' && new Date().valueOf() < item.timestamp + 604800 && // Note: Number is a week in seconds. typeof item.supportTests === 'object' ) { return item.supportTests; } } catch ( e ) {} return null; } /** * Persist the supports in session storage. * * @since 6.3.0 * * @private * * @param {SupportTests} supportTests Support tests. */ function setSessionSupportTests( supportTests ) { try { /** @type {SessionSupportTests} */ var item = { supportTests: supportTests, timestamp: new Date().valueOf() }; sessionStorage.setItem( sessionStorageKey, JSON.stringify( item ) ); } catch ( e ) {} } /** * Checks if two sets of Emoji characters render the same visually. * * This is used to determine if the browser is rendering an emoji with multiple data points * correctly. set1 is the emoji in the correct form, using a zero-width joiner. set2 is the emoji * in the incorrect form, using a zero-width space. If the two sets render the same, then the browser * does not support the emoji correctly. * * This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing * scope. Everything must be passed by parameters. * * @since 4.9.0 * * @private * * @param {CanvasRenderingContext2D} context 2D Context. * @param {string} set1 Set of Emoji to test. * @param {string} set2 Set of Emoji to test. * * @return {boolean} True if the two sets render the same. */ function emojiSetsRenderIdentically( context, set1, set2 ) { // Cleanup from previous test. context.clearRect( 0, 0, context.canvas.width, context.canvas.height ); context.fillText( set1, 0, 0 ); var rendered1 = new Uint32Array( context.getImageData( 0, 0, context.canvas.width, context.canvas.height ).data ); // Cleanup from previous test. context.clearRect( 0, 0, context.canvas.width, context.canvas.height ); context.fillText( set2, 0, 0 ); var rendered2 = new Uint32Array( context.getImageData( 0, 0, context.canvas.width, context.canvas.height ).data ); return rendered1.every( function ( rendered2Data, index ) { return rendered2Data === rendered2[ index ]; } ); } /** * Checks if the center point of a single emoji is empty. * * This is used to determine if the browser is rendering an emoji with a single data point * correctly. The center point of an incorrectly rendered emoji will be empty. A correctly * rendered emoji will have a non-zero value at the center point. * * This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing * scope. Everything must be passed by parameters. * * @since 6.8.2 * * @private * * @param {CanvasRenderingContext2D} context 2D Context. * @param {string} emoji Emoji to test. * * @return {boolean} True if the center point is empty. */ function emojiRendersEmptyCenterPoint( context, emoji ) { // Cleanup from previous test. context.clearRect( 0, 0, context.canvas.width, context.canvas.height ); context.fillText( emoji, 0, 0 ); // Test if the center point (16, 16) is empty (0,0,0,0). var centerPoint = context.getImageData(16, 16, 1, 1); for ( var i = 0; i < centerPoint.data.length; i++ ) { if ( centerPoint.data[ i ] !== 0 ) { // Stop checking the moment it's known not to be empty. return false; } } return true; } /** * Determines if the browser properly renders Emoji that Twemoji can supplement. * * This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing * scope. Everything must be passed by parameters. * * @since 4.2.0 * * @private * * @param {CanvasRenderingContext2D} context 2D Context. * @param {string} type Whether to test for support of "flag" or "emoji". * @param {Function} emojiSetsRenderIdentically Reference to emojiSetsRenderIdentically function, needed due to minification. * @param {Function} emojiRendersEmptyCenterPoint Reference to emojiRendersEmptyCenterPoint function, needed due to minification. * * @return {boolean} True if the browser can render emoji, false if it cannot. */ function browserSupportsEmoji( context, type, emojiSetsRenderIdentically, emojiRendersEmptyCenterPoint ) { var isIdentical; switch ( type ) { case 'flag': /* * Test for Transgender flag compatibility. Added in Unicode 13. * * To test for support, we try to render it, and compare the rendering to how it would look if * the browser doesn't render it correctly (white flag emoji + transgender symbol). */ isIdentical = emojiSetsRenderIdentically( context, '\uD83C\uDFF3\uFE0F\u200D\u26A7\uFE0F', // as a zero-width joiner sequence '\uD83C\uDFF3\uFE0F\u200B\u26A7\uFE0F' // separated by a zero-width space ); if ( isIdentical ) { return false; } /* * Test for Sark flag compatibility. This is the least supported of the letter locale flags, * so gives us an easy test for full support. * * To test for support, we try to render it, and compare the rendering to how it would look if * the browser doesn't render it correctly ([C] + [Q]). */ isIdentical = emojiSetsRenderIdentically( context, '\uD83C\uDDE8\uD83C\uDDF6', // as the sequence of two code points '\uD83C\uDDE8\u200B\uD83C\uDDF6' // as the two code points separated by a zero-width space ); if ( isIdentical ) { return false; } /* * Test for English flag compatibility. England is a country in the United Kingdom, it * does not have a two letter locale code but rather a five letter sub-division code. * * To test for support, we try to render it, and compare the rendering to how it would look if * the browser doesn't render it correctly (black flag emoji + [G] + [B] + [E] + [N] + [G]). */ isIdentical = emojiSetsRenderIdentically( context, // as the flag sequence '\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67\uDB40\uDC7F', // with each code point separated by a zero-width space '\uD83C\uDFF4\u200B\uDB40\uDC67\u200B\uDB40\uDC62\u200B\uDB40\uDC65\u200B\uDB40\uDC6E\u200B\uDB40\uDC67\u200B\uDB40\uDC7F' ); return ! isIdentical; case 'emoji': /* * Does Emoji 16.0 cause the browser to go splat? * * To test for Emoji 16.0 support, try to render a new emoji: Splatter. * * The splatter emoji is a single code point emoji. Testing for browser support * required testing the center point of the emoji to see if it is empty. * * 0xD83E 0xDEDF (\uD83E\uDEDF) == 🫟 Splatter. * * When updating this test, please ensure that the emoji is either a single code point * or switch to using the emojiSetsRenderIdentically function and testing with a zero-width * joiner vs a zero-width space. */ var notSupported = emojiRendersEmptyCenterPoint( context, '\uD83E\uDEDF' ); return ! notSupported; } return false; } /** * Checks emoji support tests. * * This function may be serialized to run in a Worker. Therefore, it cannot refer to variables from the containing * scope. Everything must be passed by parameters. * * @since 6.3.0 * * @private * * @param {string[]} tests Tests. * @param {Function} browserSupportsEmoji Reference to browserSupportsEmoji function, needed due to minification. * @param {Function} emojiSetsRenderIdentically Reference to emojiSetsRenderIdentically function, needed due to minification. * @param {Function} emojiRendersEmptyCenterPoint Reference to emojiRendersEmptyCenterPoint function, needed due to minification. * * @return {SupportTests} Support tests. */ function testEmojiSupports( tests, browserSupportsEmoji, emojiSetsRenderIdentically, emojiRendersEmptyCenterPoint ) { var canvas; if ( typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope ) { canvas = new OffscreenCanvas( 300, 150 ); // Dimensions are default for HTMLCanvasElement. } else { canvas = document.createElement( 'canvas' ); } var context = canvas.getContext( '2d', { willReadFrequently: true } ); /* * Chrome on OS X added native emoji rendering in M41. Unfortunately, * it doesn't work when the font is bolder than 500 weight. So, we * check for bold rendering support to avoid invisible emoji in Chrome. */ context.textBaseline = 'top'; context.font = '600 32px Arial'; var supports = {}; tests.forEach( function ( test ) { supports[ test ] = browserSupportsEmoji( context, test, emojiSetsRenderIdentically, emojiRendersEmptyCenterPoint ); } ); return supports; } /** * Adds a script to the head of the document. * * @ignore * * @since 4.2.0 * * @param {string} src The url where the script is located. * * @return {void} */ function addScript( src ) { var script = document.createElement( 'script' ); script.src = src; script.defer = true; document.head.appendChild( script ); } settings.supports = { everything: true, everythingExceptFlag: true }; // Create a promise for DOMContentLoaded since the worker logic may finish after the event has fired. var domReadyPromise = new Promise( function ( resolve ) { document.addEventListener( 'DOMContentLoaded', resolve, { once: true } ); } ); // Obtain the emoji support from the browser, asynchronously when possible. new Promise( function ( resolve ) { var supportTests = getSessionSupportTests(); if ( supportTests ) { resolve( supportTests ); return; } if ( supportsWorkerOffloading() ) { try { // Note that the functions are being passed as arguments due to minification. var workerScript = 'postMessage(' + testEmojiSupports.toString() + '(' + [ JSON.stringify( tests ), browserSupportsEmoji.toString(), emojiSetsRenderIdentically.toString(), emojiRendersEmptyCenterPoint.toString() ].join( ',' ) + '));'; var blob = new Blob( [ workerScript ], { type: 'text/javascript' } ); var worker = new Worker( URL.createObjectURL( blob ), { name: 'wpTestEmojiSupports' } ); worker.onmessage = function ( event ) { supportTests = event.data; setSessionSupportTests( supportTests ); worker.terminate(); resolve( supportTests ); }; return; } catch ( e ) {} } supportTests = testEmojiSupports( tests, browserSupportsEmoji, emojiSetsRenderIdentically, emojiRendersEmptyCenterPoint ); setSessionSupportTests( supportTests ); resolve( supportTests ); } ) // Once the browser emoji support has been obtained from the session, finalize the settings. .then( function ( supportTests ) { /* * Tests the browser support for flag emojis and other emojis, and adjusts the * support settings accordingly. */ for ( var test in supportTests ) { settings.supports[ test ] = supportTests[ test ]; settings.supports.everything = settings.supports.everything && settings.supports[ test ]; if ( 'flag' !== test ) { settings.supports.everythingExceptFlag = settings.supports.everythingExceptFlag && settings.supports[ test ]; } } settings.supports.everythingExceptFlag = settings.supports.everythingExceptFlag && ! settings.supports.flag; // Sets DOMReady to false and assigns a ready function to settings. settings.DOMReady = false; settings.readyCallback = function () { settings.DOMReady = true; }; } ) .then( function () { return domReadyPromise; } ) .then( function () { // When the browser can not render everything we need to load a polyfill. if ( ! settings.supports.everything ) { settings.readyCallback(); var src = settings.source || {}; if ( src.concatemoji ) { addScript( src.concatemoji ); } else if ( src.wpemoji && src.twemoji ) { addScript( src.twemoji ); addScript( src.wpemoji ); } } } ); } )( window, document, window._wpemojiSettings ); clipboard.js000064400000064267152335011310007052 0ustar00/*! * clipboard.js v2.0.11 * https://clipboardjs.com/ * * Licensed MIT © Zeno Rocha */ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["ClipboardJS"] = factory(); else root["ClipboardJS"] = factory(); })(this, function() { return /******/ (function() { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 686: /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; // EXPORTS __webpack_require__.d(__webpack_exports__, { "default": function() { return /* binding */ clipboard; } }); // EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js var tiny_emitter = __webpack_require__(279); var tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter); // EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js var listen = __webpack_require__(370); var listen_default = /*#__PURE__*/__webpack_require__.n(listen); // EXTERNAL MODULE: ./node_modules/select/src/select.js var src_select = __webpack_require__(817); var select_default = /*#__PURE__*/__webpack_require__.n(src_select); ;// CONCATENATED MODULE: ./src/common/command.js /** * Executes a given operation type. * @param {String} type * @return {Boolean} */ function command(type) { try { return document.execCommand(type); } catch (err) { return false; } } ;// CONCATENATED MODULE: ./src/actions/cut.js /** * Cut action wrapper. * @param {String|HTMLElement} target * @return {String} */ var ClipboardActionCut = function ClipboardActionCut(target) { var selectedText = select_default()(target); command('cut'); return selectedText; }; /* harmony default export */ var actions_cut = (ClipboardActionCut); ;// CONCATENATED MODULE: ./src/common/create-fake-element.js /** * Creates a fake textarea element with a value. * @param {String} value * @return {HTMLElement} */ function createFakeElement(value) { var isRTL = document.documentElement.getAttribute('dir') === 'rtl'; var fakeElement = document.createElement('textarea'); // Prevent zooming on iOS fakeElement.style.fontSize = '12pt'; // Reset box model fakeElement.style.border = '0'; fakeElement.style.padding = '0'; fakeElement.style.margin = '0'; // Move element out of screen horizontally fakeElement.style.position = 'absolute'; fakeElement.style[isRTL ? 'right' : 'left'] = '-9999px'; // Move element to the same position vertically var yPosition = window.pageYOffset || document.documentElement.scrollTop; fakeElement.style.top = "".concat(yPosition, "px"); fakeElement.setAttribute('readonly', ''); fakeElement.value = value; return fakeElement; } ;// CONCATENATED MODULE: ./src/actions/copy.js /** * Create fake copy action wrapper using a fake element. * @param {String} target * @param {Object} options * @return {String} */ var fakeCopyAction = function fakeCopyAction(value, options) { var fakeElement = createFakeElement(value); options.container.appendChild(fakeElement); var selectedText = select_default()(fakeElement); command('copy'); fakeElement.remove(); return selectedText; }; /** * Copy action wrapper. * @param {String|HTMLElement} target * @param {Object} options * @return {String} */ var ClipboardActionCopy = function ClipboardActionCopy(target) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { container: document.body }; var selectedText = ''; if (typeof target === 'string') { selectedText = fakeCopyAction(target, options); } else if (target instanceof HTMLInputElement && !['text', 'search', 'url', 'tel', 'password'].includes(target === null || target === void 0 ? void 0 : target.type)) { // If input type doesn't support `setSelectionRange`. Simulate it. https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange selectedText = fakeCopyAction(target.value, options); } else { selectedText = select_default()(target); command('copy'); } return selectedText; }; /* harmony default export */ var actions_copy = (ClipboardActionCopy); ;// CONCATENATED MODULE: ./src/actions/default.js function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } /** * Inner function which performs selection from either `text` or `target` * properties and then executes copy or cut operations. * @param {Object} options */ var ClipboardActionDefault = function ClipboardActionDefault() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; // Defines base properties passed from constructor. var _options$action = options.action, action = _options$action === void 0 ? 'copy' : _options$action, container = options.container, target = options.target, text = options.text; // Sets the `action` to be performed which can be either 'copy' or 'cut'. if (action !== 'copy' && action !== 'cut') { throw new Error('Invalid "action" value, use either "copy" or "cut"'); } // Sets the `target` property using an element that will be have its content copied. if (target !== undefined) { if (target && _typeof(target) === 'object' && target.nodeType === 1) { if (action === 'copy' && target.hasAttribute('disabled')) { throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute'); } if (action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) { throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes'); } } else { throw new Error('Invalid "target" value, use a valid Element'); } } // Define selection strategy based on `text` property. if (text) { return actions_copy(text, { container: container }); } // Defines which selection strategy based on `target` property. if (target) { return action === 'cut' ? actions_cut(target) : actions_copy(target, { container: container }); } }; /* harmony default export */ var actions_default = (ClipboardActionDefault); ;// CONCATENATED MODULE: ./src/clipboard.js function clipboard_typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { clipboard_typeof = function _typeof(obj) { return typeof obj; }; } else { clipboard_typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return clipboard_typeof(obj); } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; } function _possibleConstructorReturn(self, call) { if (call && (clipboard_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } } function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } /** * Helper function to retrieve attribute value. * @param {String} suffix * @param {Element} element */ function getAttributeValue(suffix, element) { var attribute = "data-clipboard-".concat(suffix); if (!element.hasAttribute(attribute)) { return; } return element.getAttribute(attribute); } /** * Base class which takes one or more elements, adds event listeners to them, * and instantiates a new `ClipboardAction` on each click. */ var Clipboard = /*#__PURE__*/function (_Emitter) { _inherits(Clipboard, _Emitter); var _super = _createSuper(Clipboard); /** * @param {String|HTMLElement|HTMLCollection|NodeList} trigger * @param {Object} options */ function Clipboard(trigger, options) { var _this; _classCallCheck(this, Clipboard); _this = _super.call(this); _this.resolveOptions(options); _this.listenClick(trigger); return _this; } /** * Defines if attributes would be resolved using internal setter functions * or custom functions that were passed in the constructor. * @param {Object} options */ _createClass(Clipboard, [{ key: "resolveOptions", value: function resolveOptions() { var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; this.action = typeof options.action === 'function' ? options.action : this.defaultAction; this.target = typeof options.target === 'function' ? options.target : this.defaultTarget; this.text = typeof options.text === 'function' ? options.text : this.defaultText; this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body; } /** * Adds a click event listener to the passed trigger. * @param {String|HTMLElement|HTMLCollection|NodeList} trigger */ }, { key: "listenClick", value: function listenClick(trigger) { var _this2 = this; this.listener = listen_default()(trigger, 'click', function (e) { return _this2.onClick(e); }); } /** * Defines a new `ClipboardAction` on each click event. * @param {Event} e */ }, { key: "onClick", value: function onClick(e) { var trigger = e.delegateTarget || e.currentTarget; var action = this.action(trigger) || 'copy'; var text = actions_default({ action: action, container: this.container, target: this.target(trigger), text: this.text(trigger) }); // Fires an event based on the copy operation result. this.emit(text ? 'success' : 'error', { action: action, text: text, trigger: trigger, clearSelection: function clearSelection() { if (trigger) { trigger.focus(); } window.getSelection().removeAllRanges(); } }); } /** * Default `action` lookup function. * @param {Element} trigger */ }, { key: "defaultAction", value: function defaultAction(trigger) { return getAttributeValue('action', trigger); } /** * Default `target` lookup function. * @param {Element} trigger */ }, { key: "defaultTarget", value: function defaultTarget(trigger) { var selector = getAttributeValue('target', trigger); if (selector) { return document.querySelector(selector); } } /** * Allow fire programmatically a copy action * @param {String|HTMLElement} target * @param {Object} options * @returns Text copied. */ }, { key: "defaultText", /** * Default `text` lookup function. * @param {Element} trigger */ value: function defaultText(trigger) { return getAttributeValue('text', trigger); } /** * Destroy lifecycle. */ }, { key: "destroy", value: function destroy() { this.listener.destroy(); } }], [{ key: "copy", value: function copy(target) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : { container: document.body }; return actions_copy(target, options); } /** * Allow fire programmatically a cut action * @param {String|HTMLElement} target * @returns Text cutted. */ }, { key: "cut", value: function cut(target) { return actions_cut(target); } /** * Returns the support of the given action, or all actions if no action is * given. * @param {String} [action] */ }, { key: "isSupported", value: function isSupported() { var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut']; var actions = typeof action === 'string' ? [action] : action; var support = !!document.queryCommandSupported; actions.forEach(function (action) { support = support && !!document.queryCommandSupported(action); }); return support; } }]); return Clipboard; }((tiny_emitter_default())); /* harmony default export */ var clipboard = (Clipboard); /***/ }), /***/ 828: /***/ (function(module) { var DOCUMENT_NODE_TYPE = 9; /** * A polyfill for Element.matches() */ if (typeof Element !== 'undefined' && !Element.prototype.matches) { var proto = Element.prototype; proto.matches = proto.matchesSelector || proto.mozMatchesSelector || proto.msMatchesSelector || proto.oMatchesSelector || proto.webkitMatchesSelector; } /** * Finds the closest parent that matches a selector. * * @param {Element} element * @param {String} selector * @return {Function} */ function closest (element, selector) { while (element && element.nodeType !== DOCUMENT_NODE_TYPE) { if (typeof element.matches === 'function' && element.matches(selector)) { return element; } element = element.parentNode; } } module.exports = closest; /***/ }), /***/ 438: /***/ (function(module, __unused_webpack_exports, __webpack_require__) { var closest = __webpack_require__(828); /** * Delegates event to a selector. * * @param {Element} element * @param {String} selector * @param {String} type * @param {Function} callback * @param {Boolean} useCapture * @return {Object} */ function _delegate(element, selector, type, callback, useCapture) { var listenerFn = listener.apply(this, arguments); element.addEventListener(type, listenerFn, useCapture); return { destroy: function() { element.removeEventListener(type, listenerFn, useCapture); } } } /** * Delegates event to a selector. * * @param {Element|String|Array} [elements] * @param {String} selector * @param {String} type * @param {Function} callback * @param {Boolean} useCapture * @return {Object} */ function delegate(elements, selector, type, callback, useCapture) { // Handle the regular Element usage if (typeof elements.addEventListener === 'function') { return _delegate.apply(null, arguments); } // Handle Element-less usage, it defaults to global delegation if (typeof type === 'function') { // Use `document` as the first parameter, then apply arguments // This is a short way to .unshift `arguments` without running into deoptimizations return _delegate.bind(null, document).apply(null, arguments); } // Handle Selector-based usage if (typeof elements === 'string') { elements = document.querySelectorAll(elements); } // Handle Array-like based usage return Array.prototype.map.call(elements, function (element) { return _delegate(element, selector, type, callback, useCapture); }); } /** * Finds closest match and invokes callback. * * @param {Element} element * @param {String} selector * @param {String} type * @param {Function} callback * @return {Function} */ function listener(element, selector, type, callback) { return function(e) { e.delegateTarget = closest(e.target, selector); if (e.delegateTarget) { callback.call(element, e); } } } module.exports = delegate; /***/ }), /***/ 879: /***/ (function(__unused_webpack_module, exports) { /** * Check if argument is a HTML element. * * @param {Object} value * @return {Boolean} */ exports.node = function(value) { return value !== undefined && value instanceof HTMLElement && value.nodeType === 1; }; /** * Check if argument is a list of HTML elements. * * @param {Object} value * @return {Boolean} */ exports.nodeList = function(value) { var type = Object.prototype.toString.call(value); return value !== undefined && (type === '[object NodeList]' || type === '[object HTMLCollection]') && ('length' in value) && (value.length === 0 || exports.node(value[0])); }; /** * Check if argument is a string. * * @param {Object} value * @return {Boolean} */ exports.string = function(value) { return typeof value === 'string' || value instanceof String; }; /** * Check if argument is a function. * * @param {Object} value * @return {Boolean} */ exports.fn = function(value) { var type = Object.prototype.toString.call(value); return type === '[object Function]'; }; /***/ }), /***/ 370: /***/ (function(module, __unused_webpack_exports, __webpack_require__) { var is = __webpack_require__(879); var delegate = __webpack_require__(438); /** * Validates all params and calls the right * listener function based on its target type. * * @param {String|HTMLElement|HTMLCollection|NodeList} target * @param {String} type * @param {Function} callback * @return {Object} */ function listen(target, type, callback) { if (!target && !type && !callback) { throw new Error('Missing required arguments'); } if (!is.string(type)) { throw new TypeError('Second argument must be a String'); } if (!is.fn(callback)) { throw new TypeError('Third argument must be a Function'); } if (is.node(target)) { return listenNode(target, type, callback); } else if (is.nodeList(target)) { return listenNodeList(target, type, callback); } else if (is.string(target)) { return listenSelector(target, type, callback); } else { throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList'); } } /** * Adds an event listener to a HTML element * and returns a remove listener function. * * @param {HTMLElement} node * @param {String} type * @param {Function} callback * @return {Object} */ function listenNode(node, type, callback) { node.addEventListener(type, callback); return { destroy: function() { node.removeEventListener(type, callback); } } } /** * Add an event listener to a list of HTML elements * and returns a remove listener function. * * @param {NodeList|HTMLCollection} nodeList * @param {String} type * @param {Function} callback * @return {Object} */ function listenNodeList(nodeList, type, callback) { Array.prototype.forEach.call(nodeList, function(node) { node.addEventListener(type, callback); }); return { destroy: function() { Array.prototype.forEach.call(nodeList, function(node) { node.removeEventListener(type, callback); }); } } } /** * Add an event listener to a selector * and returns a remove listener function. * * @param {String} selector * @param {String} type * @param {Function} callback * @return {Object} */ function listenSelector(selector, type, callback) { return delegate(document.body, selector, type, callback); } module.exports = listen; /***/ }), /***/ 817: /***/ (function(module) { function select(element) { var selectedText; if (element.nodeName === 'SELECT') { element.focus(); selectedText = element.value; } else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') { var isReadOnly = element.hasAttribute('readonly'); if (!isReadOnly) { element.setAttribute('readonly', ''); } element.select(); element.setSelectionRange(0, element.value.length); if (!isReadOnly) { element.removeAttribute('readonly'); } selectedText = element.value; } else { if (element.hasAttribute('contenteditable')) { element.focus(); } var selection = window.getSelection(); var range = document.createRange(); range.selectNodeContents(element); selection.removeAllRanges(); selection.addRange(range); selectedText = selection.toString(); } return selectedText; } module.exports = select; /***/ }), /***/ 279: /***/ (function(module) { function E () { // Keep this empty so it's easier to inherit from // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3) } E.prototype = { on: function (name, callback, ctx) { var e = this.e || (this.e = {}); (e[name] || (e[name] = [])).push({ fn: callback, ctx: ctx }); return this; }, once: function (name, callback, ctx) { var self = this; function listener () { self.off(name, listener); callback.apply(ctx, arguments); }; listener._ = callback return this.on(name, listener, ctx); }, emit: function (name) { var data = [].slice.call(arguments, 1); var evtArr = ((this.e || (this.e = {}))[name] || []).slice(); var i = 0; var len = evtArr.length; for (i; i < len; i++) { evtArr[i].fn.apply(evtArr[i].ctx, data); } return this; }, off: function (name, callback) { var e = this.e || (this.e = {}); var evts = e[name]; var liveEvents = []; if (evts && callback) { for (var i = 0, len = evts.length; i < len; i++) { if (evts[i].fn !== callback && evts[i].fn._ !== callback) liveEvents.push(evts[i]); } } // Remove event from queue to prevent memory leak // Suggested by https://github.com/lazd // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910 (liveEvents.length) ? e[name] = liveEvents : delete e[name]; return this; } }; module.exports = E; module.exports.TinyEmitter = E; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ if(__webpack_module_cache__[moduleId]) { /******/ return __webpack_module_cache__[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /******/ /* webpack/runtime/compat get default export */ /******/ !function() { /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function() { return module['default']; } : /******/ function() { return module; }; /******/ __webpack_require__.d(getter, { a: getter }); /******/ return getter; /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/define property getters */ /******/ !function() { /******/ // define getter functions for harmony exports /******/ __webpack_require__.d = function(exports, definition) { /******/ for(var key in definition) { /******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { /******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); /******/ } /******/ } /******/ }; /******/ }(); /******/ /******/ /* webpack/runtime/hasOwnProperty shorthand */ /******/ !function() { /******/ __webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); } /******/ }(); /******/ /************************************************************************/ /******/ // module exports must be returned from runtime so entry inlining is disabled /******/ // startup /******/ // Load entry module and return exports /******/ return __webpack_require__(686); /******/ })() .default; });customize-preview-nav-menus.min.js000064400000011651152335011310013272 0ustar00/*! This file is auto-generated */ wp.customize.navMenusPreview=wp.customize.MenusCustomizerPreview=function(a,c,l){"use strict";var t={data:{navMenuInstanceArgs:{}}};return"undefined"!=typeof _wpCustomizePreviewNavMenusExports&&c.extend(t.data,_wpCustomizePreviewNavMenusExports),t.init=function(){var n=this,t=!1;l.preview.bind("sync",function(){t=!0}),l.selectiveRefresh&&(l.each(function(e){n.bindSettingListener(e)}),l.bind("add",function(e){e.get()&&!e.get()._invalid&&n.bindSettingListener(e,{fire:t})}),l.bind("remove",function(e){n.unbindSettingListener(e)}),l.selectiveRefresh.bind("render-partials-response",function(e){e.nav_menu_instance_args&&c.extend(n.data.navMenuInstanceArgs,e.nav_menu_instance_args)})),l.preview.bind("active",function(){n.highlightControls()})},l.selectiveRefresh&&(t.NavMenuInstancePartial=l.selectiveRefresh.Partial.extend({initialize:function(e,n){var t=this,a=e.match(/^nav_menu_instance\[([0-9a-f]{32})]$/);if(!a)throw new Error("Illegal id for nav_menu_instance partial. The key corresponds with the args HMAC.");if(a=a[1],(n=n||{}).params=c.extend({selector:'[data-customize-partial-id="'+e+'"]',navMenuArgs:n.constructingContainerContext||{},containerInclusive:!0},n.params||{}),l.selectiveRefresh.Partial.prototype.initialize.call(t,e,n),!c.isObject(t.params.navMenuArgs))throw new Error("Missing navMenuArgs");if(t.params.navMenuArgs.args_hmac!==a)throw new Error("args_hmac mismatch with id")},isRelatedSetting:function(e,n,t){var a,i,r,s,o,u=this;if(c.isString(e)&&(e=l(e)),(i=/^nav_menu_item\[/.test(e.id))&&c.isObject(n)&&c.isObject(t)&&(r=c.clone(n),s=c.clone(t),delete r.type_label,delete s.type_label,"https"===l.preview.scheme.get()&&((o=document.createElement("a")).href=r.url,o.protocol="https:",r.url=o.href,o.href=s.url,o.protocol="https:",s.url=o.href),n.title&&(delete s.original_title,delete r.original_title),c.isEqual(s,r)))return!1;if(u.params.navMenuArgs.theme_location){if("nav_menu_locations["+u.params.navMenuArgs.theme_location+"]"===e.id)return!0;a=l("nav_menu_locations["+u.params.navMenuArgs.theme_location+"]")}return!!(o=!(o=u.params.navMenuArgs.menu)&&a?a():o)&&("nav_menu["+o+"]"===e.id||i&&(n&&n.nav_menu_term_id===o||t&&t.nav_menu_term_id===o))},refresh:function(){var e,n=this,t=a.Deferred();return c.isNumber(n.params.navMenuArgs.menu)?e=n.params.navMenuArgs.menu:n.params.navMenuArgs.theme_location&&l.has("nav_menu_locations["+n.params.navMenuArgs.theme_location+"]")&&(e=l("nav_menu_locations["+n.params.navMenuArgs.theme_location+"]").get()),e?l.selectiveRefresh.Partial.prototype.refresh.call(n):(n.fallback(),t.reject(),t.promise())},renderContent:function(e){var n=e.container;""===e.addedContent&&e.partial.fallback(),l.selectiveRefresh.Partial.prototype.renderContent.call(this,e)&&a(document).trigger("customize-preview-menu-refreshed",[{instanceNumber:null,wpNavArgs:e.context,wpNavMenuArgs:e.context,oldContainer:n,newContainer:e.container}])}}),l.selectiveRefresh.partialConstructor.nav_menu_instance=t.NavMenuInstancePartial,t.handleUnplacedNavMenuInstances=function(e){var n=c.filter(c.values(t.data.navMenuInstanceArgs),function(e){return!l.selectiveRefresh.partial.has("nav_menu_instance["+e.args_hmac+"]")});return!!c.findWhere(n,e)&&(l.selectiveRefresh.requestFullRefresh(),!0)},t.bindSettingListener=function(e,n){var t;return n=n||{},(t=e.id.match(/^nav_menu\[(-?\d+)]$/))?(e._navMenuId=parseInt(t[1],10),e.bind(this.onChangeNavMenuSetting),n.fire&&this.onChangeNavMenuSetting.call(e,e(),!1),!0):(t=e.id.match(/^nav_menu_item\[(-?\d+)]$/))?(e._navMenuItemId=parseInt(t[1],10),e.bind(this.onChangeNavMenuItemSetting),n.fire&&this.onChangeNavMenuItemSetting.call(e,e(),!1),!0):!!(t=e.id.match(/^nav_menu_locations\[(.+?)]/))&&(e._navMenuThemeLocation=t[1],e.bind(this.onChangeNavMenuLocationsSetting),n.fire&&this.onChangeNavMenuLocationsSetting.call(e,e(),!1),!0)},t.unbindSettingListener=function(e){e.unbind(this.onChangeNavMenuSetting),e.unbind(this.onChangeNavMenuItemSetting),e.unbind(this.onChangeNavMenuLocationsSetting)},t.onChangeNavMenuSetting=function(){var n=this;t.handleUnplacedNavMenuInstances({menu:n._navMenuId}),l.each(function(e){e._navMenuThemeLocation&&n._navMenuId===e()&&t.handleUnplacedNavMenuInstances({theme_location:e._navMenuThemeLocation})})},t.onChangeNavMenuItemSetting=function(e,n){e=l("nav_menu["+String((e||n).nav_menu_term_id)+"]");e&&t.onChangeNavMenuSetting.call(e)},t.onChangeNavMenuLocationsSetting=function(){t.handleUnplacedNavMenuInstances({theme_location:this._navMenuThemeLocation}),!c.findWhere(c.values(t.data.navMenuInstanceArgs),{theme_location:this._navMenuThemeLocation})&&l.selectiveRefresh.requestFullRefresh()}),t.highlightControls=function(){l.settings.channel&&a(document).on("click",".menu-item",function(e){var n;e.shiftKey&&(n=a(this).attr("class").match(/(?:^|\s)menu-item-(-?\d+)(?:\s|$)/))&&(e.preventDefault(),e.stopPropagation(),l.preview.send("focus-nav-menu-item-control",parseInt(n[1],10)))})},l.bind("preview-ready",function(){t.init()}),t}(jQuery,_,wp.customize);customize-selective-refresh.js000064400000101067152335011310012540 0ustar00/** * @output wp-includes/js/customize-selective-refresh.js */ /* global jQuery, JSON, _customizePartialRefreshExports, console */ /** @namespace wp.customize.selectiveRefresh */ wp.customize.selectiveRefresh = ( function( $, api ) { 'use strict'; var self, Partial, Placement; self = { ready: $.Deferred(), editShortcutVisibility: new api.Value(), data: { partials: {}, renderQueryVar: '', l10n: { shiftClickToEdit: '' } }, currentRequest: null }; _.extend( self, api.Events ); /** * A Customizer Partial. * * A partial provides a rendering of one or more settings according to a template. * * @memberOf wp.customize.selectiveRefresh * * @see PHP class WP_Customize_Partial. * * @class * @augments wp.customize.Class * @since 4.5.0 */ Partial = self.Partial = api.Class.extend(/** @lends wp.customize.SelectiveRefresh.Partial.prototype */{ id: null, /** * Default params. * * @since 4.9.0 * @var {object} */ defaults: { selector: null, primarySetting: null, containerInclusive: false, fallbackRefresh: true // Note this needs to be false in a front-end editing context. }, /** * Constructor. * * @since 4.5.0 * * @param {string} id - Unique identifier for the partial instance. * @param {Object} options - Options hash for the partial instance. * @param {string} options.type - Type of partial (e.g. nav_menu, widget, etc) * @param {string} options.selector - jQuery selector to find the container element in the page. * @param {Array} options.settings - The IDs for the settings the partial relates to. * @param {string} options.primarySetting - The ID for the primary setting the partial renders. * @param {boolean} options.fallbackRefresh - Whether to refresh the entire preview in case of a partial refresh failure. * @param {Object} [options.params] - Deprecated wrapper for the above properties. */ initialize: function( id, options ) { var partial = this; options = options || {}; partial.id = id; partial.params = _.extend( { settings: [] }, partial.defaults, options.params || options ); partial.deferred = {}; partial.deferred.ready = $.Deferred(); partial.deferred.ready.done( function() { partial.ready(); } ); }, /** * Set up the partial. * * @since 4.5.0 */ ready: function() { var partial = this; _.each( partial.placements(), function( placement ) { $( placement.container ).attr( 'title', self.data.l10n.shiftClickToEdit ); partial.createEditShortcutForPlacement( placement ); } ); $( document ).on( 'click', partial.params.selector, function( e ) { if ( ! e.shiftKey ) { return; } e.preventDefault(); _.each( partial.placements(), function( placement ) { if ( $( placement.container ).is( e.currentTarget ) ) { partial.showControl(); } } ); } ); }, /** * Create and show the edit shortcut for a given partial placement container. * * @since 4.7.0 * @access public * * @param {Placement} placement The placement container element. * @return {void} */ createEditShortcutForPlacement: function( placement ) { var partial = this, $shortcut, $placementContainer, illegalAncestorSelector, illegalContainerSelector; if ( ! placement.container ) { return; } $placementContainer = $( placement.container ); illegalAncestorSelector = 'head'; illegalContainerSelector = 'area, audio, base, bdi, bdo, br, button, canvas, col, colgroup, command, datalist, embed, head, hr, html, iframe, img, input, keygen, label, link, map, math, menu, meta, noscript, object, optgroup, option, param, progress, rp, rt, ruby, script, select, source, style, svg, table, tbody, textarea, tfoot, thead, title, tr, track, video, wbr'; if ( ! $placementContainer.length || $placementContainer.is( illegalContainerSelector ) || $placementContainer.closest( illegalAncestorSelector ).length ) { return; } $shortcut = partial.createEditShortcut(); $shortcut.on( 'click', function( event ) { event.preventDefault(); event.stopPropagation(); partial.showControl(); } ); partial.addEditShortcutToPlacement( placement, $shortcut ); }, /** * Add an edit shortcut to the placement container. * * @since 4.7.0 * @access public * * @param {Placement} placement The placement for the partial. * @param {jQuery} $editShortcut The shortcut element as a jQuery object. * @return {void} */ addEditShortcutToPlacement: function( placement, $editShortcut ) { var $placementContainer = $( placement.container ); $placementContainer.prepend( $editShortcut ); if ( ! $placementContainer.is( ':visible' ) || 'none' === $placementContainer.css( 'display' ) ) { $editShortcut.addClass( 'customize-partial-edit-shortcut-hidden' ); } }, /** * Return the unique class name for the edit shortcut button for this partial. * * @since 4.7.0 * @access public * * @return {string} Partial ID converted into a class name for use in shortcut. */ getEditShortcutClassName: function() { var partial = this, cleanId; cleanId = partial.id.replace( /]/g, '' ).replace( /\[/g, '-' ); return 'customize-partial-edit-shortcut-' + cleanId; }, /** * Return the appropriate translated string for the edit shortcut button. * * @since 4.7.0 * @access public * * @return {string} Tooltip for edit shortcut. */ getEditShortcutTitle: function() { var partial = this, l10n = self.data.l10n; switch ( partial.getType() ) { case 'widget': return l10n.clickEditWidget; case 'blogname': return l10n.clickEditTitle; case 'blogdescription': return l10n.clickEditTitle; case 'nav_menu': return l10n.clickEditMenu; default: return l10n.clickEditMisc; } }, /** * Return the type of this partial * * Will use `params.type` if set, but otherwise will try to infer type from settingId. * * @since 4.7.0 * @access public * * @return {string} Type of partial derived from type param or the related setting ID. */ getType: function() { var partial = this, settingId; settingId = partial.params.primarySetting || _.first( partial.settings() ) || 'unknown'; if ( partial.params.type ) { return partial.params.type; } if ( settingId.match( /^nav_menu_instance\[/ ) ) { return 'nav_menu'; } if ( settingId.match( /^widget_.+\[\d+]$/ ) ) { return 'widget'; } return settingId; }, /** * Create an edit shortcut button for this partial. * * @since 4.7.0 * @access public * * @return {jQuery} The edit shortcut button element. */ createEditShortcut: function() { var partial = this, shortcutTitle, $buttonContainer, $button, $image; shortcutTitle = partial.getEditShortcutTitle(); $buttonContainer = $( '', { 'class': 'customize-partial-edit-shortcut ' + partial.getEditShortcutClassName() } ); $button = $( '
    ',o.addControlElement(t,"fullscreen"),t.addEventListener("click",function(){m.HAS_TRUE_NATIVE_FULLSCREEN&&m.IS_FULLSCREEN||n.isFullScreen?n.exitFullScreen():n.enterFullScreen()}),n.fullscreenBtn=t,o.options.keyActions.push({keys:[70],action:function(e,t,n,o){o.ctrlKey||void 0!==e.enterFullScreen&&(e.isFullScreen?e.exitFullScreen():e.enterFullScreen())}}),o.exitFullscreenCallback=function(e){var t=e.which||e.keyCode||0;o.options.enableKeyboard&&27===t&&(m.HAS_TRUE_NATIVE_FULLSCREEN&&m.IS_FULLSCREEN||o.isFullScreen)&&n.exitFullScreen()},o.globalBind("keydown",o.exitFullscreenCallback),o.normalHeight=0,o.normalWidth=0,m.HAS_TRUE_NATIVE_FULLSCREEN){n.globalBind(m.FULLSCREEN_EVENT_NAME,function(){n.isFullScreen&&(m.isFullScreen()?(n.isNativeFullScreen=!0,n.setControlsSize()):(n.isNativeFullScreen=!1,n.exitFullScreen()))})}}},cleanfullscreen:function(e){e.exitFullScreen(),e.globalUnbind("keydown",e.exitFullscreenCallback)},detectFullscreenMode:function(){var e=null!==this.media.rendererName&&/(native|html5)/i.test(this.media.rendererName),t="";return m.HAS_TRUE_NATIVE_FULLSCREEN&&e?t="native-native":m.HAS_TRUE_NATIVE_FULLSCREEN&&!e?t="plugin-native":this.usePluginFullScreen&&m.SUPPORT_POINTER_EVENTS&&(t="plugin-click"),this.fullscreenMode=t},enterFullScreen:function(){var o=this,e=null!==o.media.rendererName&&/(html5|native)/i.test(o.media.rendererName),t=getComputedStyle(o.getElement(o.container));if(o.isVideo)if(!1===o.options.useFakeFullscreen&&(m.IS_IOS||m.IS_SAFARI)&&m.HAS_IOS_FULLSCREEN&&"function"==typeof o.media.originalNode.webkitEnterFullscreen&&o.media.originalNode.canPlayType((0,g.getTypeFromFile)(o.media.getSrc())))o.media.originalNode.webkitEnterFullscreen();else{if((0,v.addClass)(p.default.documentElement,o.options.classPrefix+"fullscreen"),(0,v.addClass)(o.getElement(o.container),o.options.classPrefix+"container-fullscreen"),o.normalHeight=parseFloat(t.height),o.normalWidth=parseFloat(t.width),"native-native"!==o.fullscreenMode&&"plugin-native"!==o.fullscreenMode||(m.requestFullScreen(o.getElement(o.container)),o.isInIframe&&setTimeout(function e(){if(o.isNativeFullScreen){var t=f.default.innerWidth||p.default.documentElement.clientWidth||p.default.body.clientWidth,n=screen.width;.002*n',l.addEventListener("click",function(){i.paused?i.play():i.pause()});var d=l.querySelector("button");function u(e){"play"===e?((0,m.removeClass)(l,i.options.classPrefix+"play"),(0,m.removeClass)(l,i.options.classPrefix+"replay"),(0,m.addClass)(l,i.options.classPrefix+"pause"),d.setAttribute("title",s),d.setAttribute("aria-label",s)):((0,m.removeClass)(l,i.options.classPrefix+"pause"),(0,m.removeClass)(l,i.options.classPrefix+"replay"),(0,m.addClass)(l,i.options.classPrefix+"play"),d.setAttribute("title",a),d.setAttribute("aria-label",a))}i.addControlElement(l,"playpause"),u("pse"),o.addEventListener("loadedmetadata",function(){-1===o.rendererName.indexOf("flash")&&u("pse")}),o.addEventListener("play",function(){u("play")}),o.addEventListener("playing",function(){u("play")}),o.addEventListener("pause",function(){u("pse")}),o.addEventListener("ended",function(){e.options.loop||((0,m.removeClass)(l,i.options.classPrefix+"pause"),(0,m.removeClass)(l,i.options.classPrefix+"play"),(0,m.addClass)(l,i.options.classPrefix+"replay"),d.setAttribute("title",a),d.setAttribute("aria-label",a))})}})},{16:16,2:2,26:26,27:27,5:5}],11:[function(e,t,n){"use strict";var p=r(e(2)),o=e(16),i=r(o),m=r(e(5)),y=e(25),E=e(30),b=e(26);function r(e){return e&&e.__esModule?e:{default:e}}Object.assign(o.config,{enableProgressTooltip:!0,useSmoothHover:!0,forceLive:!1}),Object.assign(i.default.prototype,{buildprogress:function(h,s,e,d){var u=0,v=!1,c=!1,g=this,t=h.options.autoRewind,n=h.options.enableProgressTooltip?'00:00':"",o=p.default.createElement("div");o.className=g.options.classPrefix+"time-rail",o.innerHTML=''+n+"",g.addControlElement(o,"progress"),g.options.keyActions.push({keys:[37,227],action:function(e){if(!isNaN(e.duration)&&0o+n.left&&(d=o+n.left),a=(l=d-n.left)/o,g.newTime=a*g.getDuration(),v&&null!==g.getCurrentTime()&&g.newTime.toFixed(4)!==g.getCurrentTime().toFixed(4)&&(g.setCurrentRailHandle(g.newTime),g.updateCurrent(g.newTime)),!y.IS_IOS&&!y.IS_ANDROID){if(l<0&&(l=0),g.options.useSmoothHover&&null!==r&&void 0!==window[r]){var u=new window[r](getComputedStyle(g.handle)[i]).m41,c=l/parseFloat(getComputedStyle(g.total).width)-u/parseFloat(getComputedStyle(g.total).width);g.hovered.style.left=u+"px",g.setTransformStyle(g.hovered,"scaleX("+c+")"),g.hovered.setAttribute("pos",l),0<=c?(0,b.removeClass)(g.hovered,"negative"):(0,b.addClass)(g.hovered,"negative")}if(g.timefloat){var f=g.timefloat.offsetWidth/2,p=mejs.Utils.offset(g.getElement(g.container)),m=getComputedStyle(g.timefloat);s=d-p.left=g.getElement(g.container).offsetWidth-f?g.total.offsetWidth-f:l,(0,b.hasClass)(g.getElement(g.container),g.options.classPrefix+"long-video")&&(s+=parseFloat(m.marginLeft)/2+g.timefloat.offsetWidth/2),g.timefloat.style.left=s+"px",g.timefloatcurrent.innerHTML=(0,E.secondsToTimeCode)(g.newTime,h.options.alwaysShowHours,h.options.showTimecodeFrameCount,h.options.framesPerSecond,h.options.secondsDecimalLength,h.options.timeFormat),g.timefloat.style.display="block"}}}else y.IS_IOS||y.IS_ANDROID||!g.timefloat||(s=g.timefloat.offsetWidth+o>=g.getElement(g.container).offsetWidth?g.timefloat.offsetWidth/2:0,g.timefloat.style.left=s+"px",g.timefloat.style.left=s+"px",g.timefloat.style.display="block")},f=function(){1e3<=new Date-u&&g.play()};g.slider.addEventListener("focus",function(){h.options.autoRewind=!1}),g.slider.addEventListener("blur",function(){h.options.autoRewind=t}),g.slider.addEventListener("keydown",function(e){if(1e3<=new Date-u&&(c=g.paused),g.options.enableKeyboard&&g.options.keyActions.length){var t=e.which||e.keyCode||0,n=g.getDuration(),o=h.options.defaultSeekForwardInterval(d),i=h.options.defaultSeekBackwardInterval(d),r=g.getCurrentTime(),a=g.getElement(g.container).querySelector("."+g.options.classPrefix+"volume-slider");if(38===t||40===t){a&&(a.style.display="block"),g.isVideo&&(g.showControls(),g.startControlsTimer());var s=38===t?Math.min(g.volume+.1,1):Math.max(g.volume-.1,0),l=s<=0;return g.setVolume(s),void g.setMuted(l)}switch(a&&(a.style.display="none"),t){case 37:g.getDuration()!==1/0&&(r-=i);break;case 39:g.getDuration()!==1/0&&(r+=o);break;case 36:r=0;break;case 35:r=n;break;case 13:case 32:return void(y.IS_FIREFOX&&(g.paused?g.play():g.pause()));default:return}r=r<0||isNaN(r)?0:n<=r?n:Math.floor(r),u=new Date,c||h.pause(),setTimeout(function(){g.setCurrentTime(r)},0),r | "}),Object.assign(i.default.prototype,{buildcurrent:function(e,t,n,o){var i=this,r=a.default.createElement("div");r.className=i.options.classPrefix+"time",r.setAttribute("role","timer"),r.setAttribute("aria-live","off"),r.innerHTML=''+(0,s.secondsToTimeCode)(0,e.options.alwaysShowHours,e.options.showTimecodeFrameCount,e.options.framesPerSecond,e.options.secondsDecimalLength,e.options.timeFormat)+"",i.addControlElement(r,"current"),e.updateCurrent(),i.updateTimeCallback=function(){i.controlsAreVisible&&e.updateCurrent()},o.addEventListener("timeupdate",i.updateTimeCallback)},cleancurrent:function(e,t,n,o){o.removeEventListener("timeupdate",e.updateTimeCallback)},buildduration:function(e,t,n,o){var i=this;if(t.lastChild.querySelector("."+i.options.classPrefix+"currenttime"))t.querySelector("."+i.options.classPrefix+"time").innerHTML+=i.options.timeAndDurationSeparator+''+(0,s.secondsToTimeCode)(i.options.duration,i.options.alwaysShowHours,i.options.showTimecodeFrameCount,i.options.framesPerSecond,i.options.secondsDecimalLength,i.options.timeFormat)+"";else{t.querySelector("."+i.options.classPrefix+"currenttime")&&(0,l.addClass)(t.querySelector("."+i.options.classPrefix+"currenttime").parentNode,i.options.classPrefix+"currenttime-container");var r=a.default.createElement("div");r.className=i.options.classPrefix+"time "+i.options.classPrefix+"duration-container",r.innerHTML=''+(0,s.secondsToTimeCode)(i.options.duration,i.options.alwaysShowHours,i.options.showTimecodeFrameCount,i.options.framesPerSecond,i.options.secondsDecimalLength,i.options.timeFormat)+"",i.addControlElement(r,"duration")}i.updateDurationCallback=function(){i.controlsAreVisible&&e.updateDuration()},o.addEventListener("timeupdate",i.updateDurationCallback)},cleanduration:function(e,t,n,o){o.removeEventListener("timeupdate",e.updateDurationCallback)},updateCurrent:function(){var e=this,t=e.getCurrentTime();isNaN(t)&&(t=0);var n=(0,s.secondsToTimeCode)(t,e.options.alwaysShowHours,e.options.showTimecodeFrameCount,e.options.framesPerSecond,e.options.secondsDecimalLength,e.options.timeFormat);5',o.captions.style.display="none",t.insertBefore(o.captions,t.firstChild),o.captionsText=o.captions.querySelector("."+i.options.classPrefix+"captions-text"),o.captionsButton=L.default.createElement("div"),o.captionsButton.className=i.options.classPrefix+"button "+i.options.classPrefix+"captions-button",o.captionsButton.innerHTML='
    ",i.addControlElement(o.captionsButton,"tracks"),o.captionsButton.querySelector("."+i.options.classPrefix+"captions-selector-input").disabled=!1,o.chaptersButton=L.default.createElement("div"),o.chaptersButton.className=i.options.classPrefix+"button "+i.options.classPrefix+"chapters-button",o.chaptersButton.innerHTML='
      ';for(var u=0,c=0;c"},checkForTracks:function(){var e=this,t=!1;if(e.options.hideCaptionsButtonWhenEmpty){for(var n=0,o=e.tracks.length;n";for(var o=r.chaptersButton.querySelectorAll('input[type="radio"]'),i=r.chaptersButton.querySelectorAll("."+r.options.classPrefix+"chapters-selector-label"),a=0,s=o.length;a>1].start,a=e[i].stop,r<=t&&t ((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/,parse:function(e){for(var t=e.split(/\r?\n/),n=[],o=void 0,i=void 0,r=void 0,a=0,s=t.length;a$1"),n.push({identifier:r,start:0===(0,m.convertSMPTEtoSeconds)(o[1])?.2:(0,m.convertSMPTEtoSeconds)(o[1]),stop:(0,m.convertSMPTEtoSeconds)(o[3]),text:i,settings:o[5]})}r=""}return n}},dfxp:{parse:function(e){var t=L.default.adoptNode((new DOMParser).parseFromString(e,"application/xml").documentElement).querySelector("div"),n=t.querySelectorAll("p"),o=L.default.getElementById(t.getAttribute("style")),i=[],r=void 0;if(o){o.removeAttribute("id");var a=o.attributes;if(a.length){r={};for(var s=0,l=a.length;s$1"),i.push(f)}return i}}}},{16:16,2:2,26:26,27:27,30:30,5:5,7:7}],14:[function(e,t,n){"use strict";var x=r(e(2)),o=e(16),i=r(o),w=r(e(5)),P=e(25),T=e(27),C=e(26);function r(e){return e&&e.__esModule?e:{default:e}}Object.assign(o.config,{muteText:null,unmuteText:null,allyVolumeControlText:null,hideVolumeOnTouchDevices:!0,audioVolume:"horizontal",videoVolume:"vertical",startVolume:.8}),Object.assign(i.default.prototype,{buildvolume:function(e,t,n,o){if(!P.IS_ANDROID&&!P.IS_IOS||!this.options.hideVolumeOnTouchDevices){var a=this,s=a.isVideo?a.options.videoVolume:a.options.audioVolume,r=(0,T.isString)(a.options.muteText)?a.options.muteText:w.default.t("mejs.mute"),l=(0,T.isString)(a.options.unmuteText)?a.options.unmuteText:w.default.t("mejs.unmute"),i=(0,T.isString)(a.options.allyVolumeControlText)?a.options.allyVolumeControlText:w.default.t("mejs.volume-help-text"),d=x.default.createElement("div");if(d.className=a.options.classPrefix+"button "+a.options.classPrefix+"volume-button "+a.options.classPrefix+"mute",d.innerHTML="horizontal"===s?'':''+i+'
      ',a.addControlElement(d,"volume"),a.options.keyActions.push({keys:[38],action:function(e){var t=e.getElement(e.container).querySelector("."+a.options.classPrefix+"volume-slider");t&&t.matches(":focus")&&(t.style.display="block"),e.isVideo&&(e.showControls(),e.startControlsTimer());var n=Math.min(e.volume+.1,1);e.setVolume(n),0'+i+'
      ',d.parentNode.insertBefore(u,d.nextSibling)}var c=!1,f=!1,p=!1,m="vertical"===s?a.getElement(a.container).querySelector("."+a.options.classPrefix+"volume-slider"):a.getElement(a.container).querySelector("."+a.options.classPrefix+"horizontal-volume-slider"),h="vertical"===s?a.getElement(a.container).querySelector("."+a.options.classPrefix+"volume-total"):a.getElement(a.container).querySelector("."+a.options.classPrefix+"horizontal-volume-total"),v="vertical"===s?a.getElement(a.container).querySelector("."+a.options.classPrefix+"volume-current"):a.getElement(a.container).querySelector("."+a.options.classPrefix+"horizontal-volume-current"),g="vertical"===s?a.getElement(a.container).querySelector("."+a.options.classPrefix+"volume-handle"):a.getElement(a.container).querySelector("."+a.options.classPrefix+"horizontal-volume-handle"),y=function(e){if(null!==e&&!isNaN(e)&&void 0!==e){if(e=Math.max(0,e),0===(e=Math.min(e,1))){(0,C.removeClass)(d,a.options.classPrefix+"mute"),(0,C.addClass)(d,a.options.classPrefix+"unmute");var t=d.firstElementChild;t.setAttribute("title",l),t.setAttribute("aria-label",l)}else{(0,C.removeClass)(d,a.options.classPrefix+"unmute"),(0,C.addClass)(d,a.options.classPrefix+"mute");var n=d.firstElementChild;n.setAttribute("title",r),n.setAttribute("aria-label",r)}var o=100*e+"%",i=getComputedStyle(g);"vertical"===s?(v.style.bottom=0,v.style.height=o,g.style.bottom=o,g.style.marginBottom=-parseFloat(i.height)/2+"px"):(v.style.left=0,v.style.width=o,g.style.left=o,g.style.marginLeft=-parseFloat(i.width)/2+"px")}},E=function(e){var t=(0,C.offset)(h),n=getComputedStyle(h);p=!0;var o=null;if("vertical"===s){var i=parseFloat(n.height);if(o=(i-(e.pageY-t.top))/i,0===t.top||0===t.left)return}else{var r=parseFloat(n.width);o=(e.pageX-t.left)/r}o=Math.max(0,o),o=Math.min(o,1),y(o),a.setMuted(0===o),a.setVolume(o),e.preventDefault(),e.stopPropagation()},b=function(){a.muted?(y(0),(0,C.removeClass)(d,a.options.classPrefix+"mute"),(0,C.addClass)(d,a.options.classPrefix+"unmute")):(y(o.volume),(0,C.removeClass)(d,a.options.classPrefix+"unmute"),(0,C.addClass)(d,a.options.classPrefix+"mute"))};e.getElement(e.container).addEventListener("keydown",function(e){!!e.target.closest("."+a.options.classPrefix+"container")||"vertical"!==s||(m.style.display="none")}),d.addEventListener("mouseenter",function(e){e.target===d&&(m.style.display="block",f=!0,e.preventDefault(),e.stopPropagation())}),d.addEventListener("focusin",function(){m.style.display="block",f=!0}),d.addEventListener("focusout",function(e){e.relatedTarget&&(!e.relatedTarget||e.relatedTarget.matches("."+a.options.classPrefix+"volume-slider"))||"vertical"!==s||(m.style.display="none")}),d.addEventListener("mouseleave",function(){f=!1,c||"vertical"!==s||(m.style.display="none")}),d.addEventListener("focusout",function(){f=!1}),d.addEventListener("keydown",function(e){if(a.options.enableKeyboard&&a.options.keyActions.length){var t=e.which||e.keyCode||0,n=o.volume;switch(t){case 38:n=Math.min(n+.1,1);break;case 40:n=Math.max(0,n-.1);break;default:return!0}c=!1,y(n),o.setVolume(n),e.preventDefault(),e.stopPropagation()}}),d.querySelector("button").addEventListener("click",function(){o.setMuted(!o.muted);var e=(0,T.createEvent)("volumechange",o);o.dispatchEvent(e)}),m.addEventListener("dragstart",function(){return!1}),m.addEventListener("mouseover",function(){f=!0}),m.addEventListener("focusin",function(){m.style.display="block",f=!0}),m.addEventListener("focusout",function(){f=!1,c||"vertical"!==s||(m.style.display="none")}),m.addEventListener("mousedown",function(e){E(e),a.globalBind("mousemove.vol",function(e){var t=e.target;c&&(t===m||t.closest("vertical"===s?"."+a.options.classPrefix+"volume-slider":"."+a.options.classPrefix+"horizontal-volume-slider"))&&E(e)}),a.globalBind("mouseup.vol",function(){c=!1,f||"vertical"!==s||(m.style.display="none")}),c=!0,e.preventDefault(),e.stopPropagation()}),o.addEventListener("volumechange",function(e){var t;c||b(),t=Math.floor(100*o.volume),m.setAttribute("aria-valuenow",t),m.setAttribute("aria-valuetext",t+"%")});var S=!1;o.addEventListener("rendererready",function(){p||setTimeout(function(){S=!0,(0===e.options.startVolume||o.originalNode.muted)&&o.setMuted(!0),o.setVolume(e.options.startVolume),a.setControlsSize()},250)}),o.addEventListener("loadedmetadata",function(){setTimeout(function(){p||S||((0===e.options.startVolume||o.originalNode.muted)&&o.setMuted(!0),0===e.options.startVolume&&(e.options.startVolume=0),o.setVolume(e.options.startVolume),a.setControlsSize()),S=!1},250)}),(0===e.options.startVolume||o.originalNode.muted)&&(o.setMuted(!0),0===e.options.startVolume&&(e.options.startVolume=0),b()),a.getElement(a.container).addEventListener("controlsresize",function(){b()})}}})},{16:16,2:2,25:25,26:26,27:27,5:5}],15:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});n.EN={"mejs.plural-form":1,"mejs.download-file":"Download File","mejs.install-flash":"You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https://get.adobe.com/flashplayer/","mejs.fullscreen":"Fullscreen","mejs.play":"Play","mejs.pause":"Pause","mejs.time-slider":"Time Slider","mejs.time-help-text":"Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.","mejs.live-broadcast":"Live Broadcast","mejs.volume-help-text":"Use Up/Down Arrow keys to increase or decrease volume.","mejs.unmute":"Unmute","mejs.mute":"Mute","mejs.volume-slider":"Volume Slider","mejs.video-player":"Video Player","mejs.audio-player":"Audio Player","mejs.captions-subtitles":"Captions/Subtitles","mejs.captions-chapters":"Chapters","mejs.none":"None","mejs.afrikaans":"Afrikaans","mejs.albanian":"Albanian","mejs.arabic":"Arabic","mejs.belarusian":"Belarusian","mejs.bulgarian":"Bulgarian","mejs.catalan":"Catalan","mejs.chinese":"Chinese","mejs.chinese-simplified":"Chinese (Simplified)","mejs.chinese-traditional":"Chinese (Traditional)","mejs.croatian":"Croatian","mejs.czech":"Czech","mejs.danish":"Danish","mejs.dutch":"Dutch","mejs.english":"English","mejs.estonian":"Estonian","mejs.filipino":"Filipino","mejs.finnish":"Finnish","mejs.french":"French","mejs.galician":"Galician","mejs.german":"German","mejs.greek":"Greek","mejs.haitian-creole":"Haitian Creole","mejs.hebrew":"Hebrew","mejs.hindi":"Hindi","mejs.hungarian":"Hungarian","mejs.icelandic":"Icelandic","mejs.indonesian":"Indonesian","mejs.irish":"Irish","mejs.italian":"Italian","mejs.japanese":"Japanese","mejs.korean":"Korean","mejs.latvian":"Latvian","mejs.lithuanian":"Lithuanian","mejs.macedonian":"Macedonian","mejs.malay":"Malay","mejs.maltese":"Maltese","mejs.norwegian":"Norwegian","mejs.persian":"Persian","mejs.polish":"Polish","mejs.portuguese":"Portuguese","mejs.romanian":"Romanian","mejs.russian":"Russian","mejs.serbian":"Serbian","mejs.slovak":"Slovak","mejs.slovenian":"Slovenian","mejs.spanish":"Spanish","mejs.swahili":"Swahili","mejs.swedish":"Swedish","mejs.tagalog":"Tagalog","mejs.thai":"Thai","mejs.turkish":"Turkish","mejs.ukrainian":"Ukrainian","mejs.vietnamese":"Vietnamese","mejs.welsh":"Welsh","mejs.yiddish":"Yiddish"}},{}],16:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.config=void 0;var a="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},o=function(){function o(e,t){for(var n=0;n
      ',n.getElement(n.container).addEventListener("focus",function(e){if(!n.controlsAreVisible&&!n.hasFocus&&n.controlsEnabled){n.showControls(!0);var t=(0,m.isNodeAfter)(e.relatedTarget,n.getElement(n.container))?"."+n.options.classPrefix+"controls ."+n.options.classPrefix+"button:last-child > button":"."+n.options.classPrefix+"playpause-button > button";n.getElement(n.container).querySelector(t).focus()}}),n.node.parentNode.insertBefore(n.getElement(n.container),n.node),n.options.features.length||n.options.useDefaultControls||(n.getElement(n.container).style.background="transparent",n.getElement(n.container).querySelector("."+n.options.classPrefix+"controls").style.display="none"),n.isVideo&&"fill"===n.options.stretching&&!P.hasClass(n.getElement(n.container).parentNode,n.options.classPrefix+"fill-container")){n.outerContainer=n.media.parentNode;var r=x.default.createElement("div");r.className=n.options.classPrefix+"fill-container",n.getElement(n.container).parentNode.insertBefore(r,n.getElement(n.container)),r.appendChild(n.getElement(n.container))}w.IS_ANDROID&&P.addClass(n.getElement(n.container),n.options.classPrefix+"android"),w.IS_IOS&&P.addClass(n.getElement(n.container),n.options.classPrefix+"ios"),w.IS_IPAD&&P.addClass(n.getElement(n.container),n.options.classPrefix+"ipad"),w.IS_IPHONE&&P.addClass(n.getElement(n.container),n.options.classPrefix+"iphone"),P.addClass(n.getElement(n.container),n.isVideo?n.options.classPrefix+"video":n.options.classPrefix+"audio"),n.getElement(n.container).querySelector("."+n.options.classPrefix+"mediaelement").appendChild(n.node),(n.media.player=n).controls=n.getElement(n.container).querySelector("."+n.options.classPrefix+"controls"),n.layers=n.getElement(n.container).querySelector("."+n.options.classPrefix+"layers");var a=n.isVideo?"video":"audio",s=a.substring(0,1).toUpperCase()+a.substring(1);0=n.width?n.width/n.height:n.height/n.width,n.setPlayerSize(n.width,n.height),e.pluginWidth=n.width,e.pluginHeight=n.height}if(f.default.MepDefaults=e,new d.default(n.media,e,n.mediaFiles),void 0!==n.getElement(n.container)&&n.options.features.length&&n.controlsAreVisible&&!n.options.hideVideoControlsOnLoad){var l=(0,m.createEvent)("controlsshown",n.getElement(n.container));n.getElement(n.container).dispatchEvent(l)}}},{key:"showControls",value:function(e){var i=this;if(e=void 0===e||e,!i.controlsAreVisible&&i.isVideo){if(e)!function(){P.fadeIn(i.getElement(i.controls),200,function(){P.removeClass(i.getElement(i.controls),i.options.classPrefix+"offscreen");var e=(0,m.createEvent)("controlsshown",i.getElement(i.container));i.getElement(i.container).dispatchEvent(e)});for(var n=i.getElement(i.container).querySelectorAll("."+i.options.classPrefix+"control"),e=function(e,t){P.fadeIn(n[e],200,function(){P.removeClass(n[e],i.options.classPrefix+"offscreen")})},t=0,o=n.length;t'),e.message&&(a="

      "+e.message+"

      "),e.urls)for(var d=0,u=e.urls.length;d'+f.default.i18n.t("mejs.download-file")+": "+c.src+""}}a&&o.getElement(o.layers).querySelector("."+o.options.classPrefix+"overlay-error")&&(r.innerHTML=a,o.getElement(o.layers).querySelector("."+o.options.classPrefix+"overlay-error").innerHTML=""+s+r.outerHTML,o.getElement(o.layers).querySelector("."+o.options.classPrefix+"overlay-error").parentNode.style.display="block"),o.controlsEnabled&&o.disableControls()}},{key:"setPlayerSize",value:function(e,t){var n=this;if(!n.options.setDimensions)return!1;switch(void 0!==e&&(n.width=e),void 0!==t&&(n.height=t),n.options.stretching){case"fill":n.isVideo?n.setFillMode():n.setDimensions(n.width,n.height);break;case"responsive":n.setResponsiveMode();break;case"none":n.setDimensions(n.width,n.height);break;default:!0===n.hasFluidMode()?n.setResponsiveMode():n.setDimensions(n.width,n.height)}}},{key:"hasFluidMode",value:function(){var e=this;return-1!==e.height.toString().indexOf("%")||e.node&&e.node.style.maxWidth&&"none"!==e.node.style.maxWidth&&e.node.style.maxWidth!==e.width||e.node&&e.node.currentStyle&&"100%"===e.node.currentStyle.maxWidth}},{key:"setResponsiveMode",value:function(){var o=this,e=function(){for(var t=void 0,n=o.getElement(o.container);n;){try{if(w.IS_FIREFOX&&"html"===n.tagName.toLowerCase()&&S.default.self!==S.default.top&&null!==S.default.frameElement)return S.default.frameElement;t=n.parentElement}catch(e){t=n.parentElement}if(t&&P.visible(t))return t;n=t}return null}(),t=e?getComputedStyle(e,null):getComputedStyle(x.default.body,null),n=o.isVideo?o.node.videoWidth&&0=o.width?o.node.videoWidth/o.node.videoHeight:o.node.videoHeight/o.node.videoWidth:o.initialAspectRatio,(isNaN(e)||e<.01||100=o.width?parseFloat(l/r,10):parseFloat(l*r,10):i,isNaN(s)&&(s=a),0img");a&&(a.style.display="");for(var s=e.getElement(e.container).querySelectorAll("object, embed, iframe, video"),l=e.height,d=e.width,u=i,c=l*i/d,f=d*r/l,p=r,m=i',n.appendChild(r),a.style.display="none",a.className=i.options.classPrefix+"overlay "+i.options.classPrefix+"layer",a.innerHTML='
      ',n.appendChild(a),s.className=i.options.classPrefix+"overlay "+i.options.classPrefix+"layer "+i.options.classPrefix+"overlay-play",s.innerHTML='
      ',s.addEventListener("click",function(){if(i.options.clickToPlayPause){var e=i.getElement(i.container).querySelector("."+i.options.classPrefix+"overlay-button"),t=e.getAttribute("aria-pressed");i.paused?i.play():i.pause(),e.setAttribute("aria-pressed",!!t),i.getElement(i.container).focus()}}),s.addEventListener("keydown",function(e){var t=e.keyCode||e.which||0;if(13===t||w.IS_FIREFOX&&32===t){var n=(0,m.createEvent)("click",s);return s.dispatchEvent(n),!1}}),n.appendChild(s),null!==i.media.rendererName&&(/(youtube|facebook)/i.test(i.media.rendererName)&&!(i.media.originalNode.getAttribute("poster")||t.options.poster||"function"==typeof i.media.renderer.getPosterUrl&&i.media.renderer.getPosterUrl())||w.IS_STOCK_ANDROID||i.media.originalNode.getAttribute("autoplay"))&&(s.style.display="none");var l=!1;o.addEventListener("play",function(){s.style.display="none",r.style.display="none",a.style.display="none",l=!1}),o.addEventListener("playing",function(){s.style.display="none",r.style.display="none",a.style.display="none",l=!1}),o.addEventListener("seeking",function(){s.style.display="none",r.style.display="",l=!1}),o.addEventListener("seeked",function(){s.style.display=i.paused&&!w.IS_STOCK_ANDROID?"":"none",r.style.display="none",l=!1}),o.addEventListener("pause",function(){r.style.display="none",w.IS_STOCK_ANDROID||l||(s.style.display=""),l=!1}),o.addEventListener("waiting",function(){r.style.display="",l=!1}),o.addEventListener("loadeddata",function(){r.style.display="",w.IS_ANDROID&&(o.canplayTimeout=setTimeout(function(){if(x.default.createEvent){var e=x.default.createEvent("HTMLEvents");return e.initEvent("canplay",!0,!0),o.dispatchEvent(e)}},300)),l=!1}),o.addEventListener("canplay",function(){r.style.display="none",clearTimeout(o.canplayTimeout),l=!1}),o.addEventListener("error",function(e){i._handleError(e,i.media,i.node),r.style.display="none",s.style.display="none",l=!0}),o.addEventListener("loadedmetadata",function(){i.controlsEnabled||i.enableControls()}),o.addEventListener("keydown",function(e){i.onkeydown(t,o,e),l=!1})}}},{key:"buildkeyboard",value:function(o,e,t,i){var r=this;r.getElement(r.container).addEventListener("keydown",function(){r.keyboardAction=!0}),r.globalKeydownCallback=function(e){var t=x.default.activeElement.closest("."+r.options.classPrefix+"container"),n=r.media.closest("."+r.options.classPrefix+"container");return r.hasFocus=!(!t||!n||t.id!==n.id),r.onkeydown(o,i,e)},r.globalClickCallback=function(e){r.hasFocus=!!e.target.closest("."+r.options.classPrefix+"container")},r.globalBind("keydown",r.globalKeydownCallback),r.globalBind("click",r.globalClickCallback)}},{key:"onkeydown",value:function(e,t,n){if(e.hasFocus&&e.options.enableKeyboard)for(var o=0,i=e.options.keyActions.length;oimg");(e&&l.node.setAttribute("poster",e.src),delete l.node.autoplay,l.node.setAttribute("src",""),""!==l.media.canPlayType((0,p.getTypeFromFile)(u))&&l.node.setAttribute("src",u),d&&-1t[0]||n[0]===t[0]&&n[1]>t[1]||n[0]===t[0]&&n[1]===t[1]&&n[2]>=t[2]},addPlugin:function(e,t,n,o,i){r.plugins[e]=r.detectPlugin(t,n,o,i)},detectPlugin:function(e,t,n,o){var i=[0,0,0],r=void 0,a=void 0;if(null!==F.NAV.plugins&&void 0!==F.NAV.plugins&&"object"===d(F.NAV.plugins[e])){if((r=F.NAV.plugins[e].description)&&(void 0===F.NAV.mimeTypes||!F.NAV.mimeTypes[t]||F.NAV.mimeTypes[t].enabledPlugin))for(var s=0,l=(i=r.replace(e,"").replace(/^\s+/,"").replace(/\sr/gi,".").split(".")).length;s
      '+N.default.t("mejs.install-flash")+"
      "}else x=['id="__'+r.id+'"','name="__'+r.id+'"','play="true"','loop="false"','quality="high"','bgcolor="#000000"','wmode="transparent"','allowScriptAccess="'+r.options.shimScriptAccess+'"','allowFullScreen="true"','type="application/x-shockwave-flash"','pluginspage="//www.macromedia.com/go/getflashplayer"','src="'+r.options.pluginPath+r.options.filename+'"','flashvars="'+y.join("&")+'"'],E?(x.push('width="'+S+'"'),x.push('height="'+b+'"')):x.push('style="position: fixed; left: -9999em; top: -9999em;"'),r.flashWrapper.innerHTML="";if(r.flashNode=r.flashWrapper.lastChild,r.hide=function(){o=!1,E&&(r.flashNode.style.display="none")},r.show=function(){o=!0,E&&(r.flashNode.style.display="")},r.setSize=function(e,t){r.flashNode.style.width=e+"px",r.flashNode.style.height=t+"px",null!==r.flashApi&&"function"==typeof r.flashApi.fire_setSize&&r.flashApi.fire_setSize(e,t)},r.destroy=function(){r.flashNode.remove()},n&&0":">",'"':"""};return e.replace(/[&<>"]/g,function(e){return t[e]})}function s(o,i){var r=this,a=arguments,s=2x',t.firstChild.href}function d(e){var t=1' ); this.tracks.each(function (model) { if ( ! self.data.images ) { model.set( 'image', false ); } model.set( 'artists', self.data.artists ); model.set( 'index', self.data.tracknumbers ? i : false ); tracklist.append( self.itemTemplate( model.toJSON() ) ); i += 1; }); this.$el.append( tracklist ); this.$( '.wp-playlist-item' ).eq(0).addClass( this.playingClass ); }, events : { 'click .wp-playlist-item' : 'clickTrack', 'click .wp-playlist-next' : 'next', 'click .wp-playlist-prev' : 'prev' }, clickTrack : function (e) { e.preventDefault(); this.index = this.$( '.wp-playlist-item' ).index( e.currentTarget ); this.setCurrent(); }, ended : function () { if ( this.index + 1 < this.tracks.length ) { this.next(); } else { this.index = 0; this.setCurrent(); } }, next : function () { this.index = this.index + 1 >= this.tracks.length ? 0 : this.index + 1; this.setCurrent(); }, prev : function () { this.index = this.index - 1 < 0 ? this.tracks.length - 1 : this.index - 1; this.setCurrent(); }, loadCurrent : function () { var last = this.playerNode.attr( 'src' ) && this.playerNode.attr( 'src' ).split('.').pop(), current = this.current.get( 'src' ).split('.').pop(); this.mejs && this.mejs.pause(); if ( last !== current ) { this.setPlayer( true ); } else { this.playerNode.attr( 'src', this.current.get( 'src' ) ); this.playCurrentSrc(); } }, setCurrent : function () { this.current = this.tracks.at( this.index ); if ( this.data.tracklist ) { this.$( '.wp-playlist-item' ) .removeClass( this.playingClass ) .eq( this.index ) .addClass( this.playingClass ); } this.loadCurrent(); } }); /** * Initialize media playlists in the document. * * Only initializes new playlists not previously-initialized. * * @since 4.9.3 * @return {void} */ function initialize() { $( '.wp-playlist:not(:has(.mejs-container))' ).each( function() { new WPPlaylistView( { el: this } ); } ); } /** * Expose the API publicly on window.wp.playlist. * * @namespace wp.playlist * @since 4.9.3 * @type {object} */ window.wp.playlist = { initialize: initialize }; $( document ).ready( initialize ); window.WPPlaylistView = WPPlaylistView; }(jQuery, _, Backbone)); mediaelement/wp-playlist.min.js000064400000006565152335011310012610 0ustar00!function(r,e,i){"use strict";window.wp=window.wp||{};var t=i.View.extend({initialize:function(t){this.index=0,this.settings={},this.data=t.metadata||r.parseJSON(this.$("script.wp-playlist-script").html()),this.playerNode=this.$(this.data.type),this.tracks=new i.Collection(this.data.tracks),this.current=this.tracks.first(),"audio"===this.data.type&&(this.currentTemplate=wp.template("wp-playlist-current-item"),this.currentNode=this.$(".wp-playlist-current-item")),this.renderCurrent(),this.data.tracklist&&(this.itemTemplate=wp.template("wp-playlist-item"),this.playingClass="wp-playlist-playing",this.renderTracks()),this.playerNode.attr("src",this.current.get("src")),e.bindAll(this,"bindPlayer","bindResetPlayer","setPlayer","ended","clickTrack"),e.isUndefined(window._wpmejsSettings)||(this.settings=e.clone(_wpmejsSettings)),this.settings.success=this.bindPlayer,this.setPlayer()},bindPlayer:function(t){this.mejs=t,this.mejs.addEventListener("ended",this.ended)},bindResetPlayer:function(t){this.bindPlayer(t),this.playCurrentSrc()},setPlayer:function(t){this.player&&(this.player.pause(),this.player.remove(),this.playerNode=this.$(this.data.type)),t&&(this.playerNode.attr("src",this.current.get("src")),this.settings.success=this.bindResetPlayer),this.player=new MediaElementPlayer(this.playerNode.get(0),this.settings)},playCurrentSrc:function(){this.renderCurrent(),this.mejs.setSrc(this.playerNode.attr("src")),this.mejs.load(),this.mejs.play()},renderCurrent:function(){var t;"video"===this.data.type?(this.data.images&&this.current.get("image")&&-1===this.current.get("image").src.indexOf("wp-includes/images/media/video.svg")&&this.playerNode.attr("poster",this.current.get("image").src),(t=this.current.get("dimensions"))&&t.resized&&this.playerNode.attr(t.resized)):(this.data.images||this.current.set("image",!1),this.currentNode.html(this.currentTemplate(this.current.toJSON())))},renderTracks:function(){var e=this,i=1,s=r('
      ');this.tracks.each(function(t){e.data.images||t.set("image",!1),t.set("artists",e.data.artists),t.set("index",!!e.data.tracknumbers&&i),s.append(e.itemTemplate(t.toJSON())),i+=1}),this.$el.append(s),this.$(".wp-playlist-item").eq(0).addClass(this.playingClass)},events:{"click .wp-playlist-item":"clickTrack","click .wp-playlist-next":"next","click .wp-playlist-prev":"prev"},clickTrack:function(t){t.preventDefault(),this.index=this.$(".wp-playlist-item").index(t.currentTarget),this.setCurrent()},ended:function(){this.index+1=this.tracks.length?0:this.index+1,this.setCurrent()},prev:function(){this.index=this.index-1<0?this.tracks.length-1:this.index-1,this.setCurrent()},loadCurrent:function(){var t=this.playerNode.attr("src")&&this.playerNode.attr("src").split(".").pop(),e=this.current.get("src").split(".").pop();this.mejs&&this.mejs.pause(),t!==e?this.setPlayer(!0):(this.playerNode.attr("src",this.current.get("src")),this.playCurrentSrc())},setCurrent:function(){this.current=this.tracks.at(this.index),this.data.tracklist&&this.$(".wp-playlist-item").removeClass(this.playingClass).eq(this.index).addClass(this.playingClass),this.loadCurrent()}});function s(){r(".wp-playlist:not(:has(.mejs-container))").each(function(){new t({el:this})})}window.wp.playlist={initialize:s},r(document).ready(s),window.WPPlaylistView=t}(jQuery,_,Backbone);mediaelement/mediaelement-migrate.js000064400000005431152335011310013607 0ustar00/* global console, MediaElementPlayer, mejs */ (function ( window, $ ) { // Reintegrate `plugins` since they don't exist in MEJS anymore; it won't affect anything in the player if (mejs.plugins === undefined) { mejs.plugins = {}; mejs.plugins.silverlight = []; mejs.plugins.silverlight.push({ types: [] }); } // Inclusion of old `HtmlMediaElementShim` if it doesn't exist mejs.HtmlMediaElementShim = mejs.HtmlMediaElementShim || { getTypeFromFile: mejs.Utils.getTypeFromFile }; // Add missing global variables for backward compatibility if (mejs.MediaFeatures === undefined) { mejs.MediaFeatures = mejs.Features; } if (mejs.Utility === undefined) { mejs.Utility = mejs.Utils; } /** * Create missing variables and have default `classPrefix` overridden to avoid issues. * * `media` is now a fake wrapper needed to simplify manipulation of various media types, * so in order to access the `video` or `audio` tag, use `media.originalNode` or `player.node`; * `player.container` used to be jQuery but now is a HTML element, and many elements inside * the player rely on it being a HTML now, so its conversion is difficult; however, a * `player.$container` new variable has been added to be used as jQuery object */ var init = MediaElementPlayer.prototype.init; MediaElementPlayer.prototype.init = function () { this.options.classPrefix = 'mejs-'; this.$media = this.$node = $( this.node ); init.call( this ); }; var ready = MediaElementPlayer.prototype._meReady; MediaElementPlayer.prototype._meReady = function () { this.container = $( this.container) ; this.controls = $( this.controls ); this.layers = $( this.layers ); ready.apply( this, arguments ); }; // Override method so certain elements can be called with jQuery MediaElementPlayer.prototype.getElement = function ( el ) { return $ !== undefined && el instanceof $ ? el[0] : el; }; // Add jQuery ONLY to most of custom features' arguments for backward compatibility; default features rely 100% // on the arguments being HTML elements to work properly MediaElementPlayer.prototype.buildfeatures = function ( player, controls, layers, media ) { var defaultFeatures = [ 'playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen' ]; for (var i = 0, total = this.options.features.length; i < total; i++) { var feature = this.options.features[i]; if (this['build' + feature]) { try { // Use jQuery for non-default features if (defaultFeatures.indexOf(feature) === -1) { this['build' + feature]( player, $(controls), $(layers), media ); } else { this['build' + feature]( player, controls, layers, media ); } } catch (e) { console.error( 'error building ' + feature, e ); } } } }; })( window, jQuery ); mediaelement/mediaelement.min.js000064400000205326152335011310012750 0ustar00/*! * MediaElement.js * http://www.mediaelementjs.com/ * * Wrapper that mimics native HTML5 MediaElement (audio and video) * using a variety of technologies (pure JavaScript, Flash, iframe) * * Copyright 2010-2017, John Dyer (http://j.hn/) * License: MIT * */ !function i(o,l,s){function d(n,e){if(!l[n]){if(!o[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(u)return u(n,!0);var r=new Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND",r}var a=l[n]={exports:{}};o[n][0].call(a.exports,function(e){var t=o[n][1][e];return d(t||e)},a,a.exports,i,o,l,s)}return l[n].exports}for(var u="function"==typeof require&&require,e=0;et[0]||n[0]===t[0]&&n[1]>t[1]||n[0]===t[0]&&n[1]===t[1]&&n[2]>=t[2]},addPlugin:function(e,t,n,r,a){i.plugins[e]=i.detectPlugin(t,n,r,a)},detectPlugin:function(e,t,n,r){var a=[0,0,0],i=void 0,o=void 0;if(null!==O.NAV.plugins&&void 0!==O.NAV.plugins&&"object"===d(O.NAV.plugins[e])){if((i=O.NAV.plugins[e].description)&&(void 0===O.NAV.mimeTypes||!O.NAV.mimeTypes[t]||O.NAV.mimeTypes[t].enabledPlugin))for(var l=0,s=(a=i.replace(e,"").replace(/^\s+/,"").replace(/\sr/gi,".").split(".")).length;l
      '+P.default.t("mejs.install-flash")+"
      "}else _=['id="__'+i.id+'"','name="__'+i.id+'"','play="true"','loop="false"','quality="high"','bgcolor="#000000"','wmode="transparent"','allowScriptAccess="'+i.options.shimScriptAccess+'"','allowFullScreen="true"','type="application/x-shockwave-flash"','pluginspage="//www.macromedia.com/go/getflashplayer"','src="'+i.options.pluginPath+i.options.filename+'"','flashvars="'+y.join("&")+'"'],E?(_.push('width="'+w+'"'),_.push('height="'+b+'"')):_.push('style="position: fixed; left: -9999em; top: -9999em;"'),i.flashWrapper.innerHTML="";if(i.flashNode=i.flashWrapper.lastChild,i.hide=function(){r=!1,E&&(i.flashNode.style.display="none")},i.show=function(){r=!0,E&&(i.flashNode.style.display="")},i.setSize=function(e,t){i.flashNode.style.width=e+"px",i.flashNode.style.height=t+"px",null!==i.flashApi&&"function"==typeof i.flashApi.fire_setSize&&i.flashApi.fire_setSize(e,t)},i.destroy=function(){i.flashNode.remove()},n&&0":">",'"':"""};return e.replace(/[&<>"]/g,function(e){return t[e]})}function l(r,a){var i=this,o=arguments,l=2x',t.firstChild.href}function d(e){var t=1 1 && arguments[1] !== undefined ? arguments[1] : null; if (typeof message === 'string' && message.length) { var str = void 0, pluralForm = void 0; var language = i18n.language(); var _plural = function _plural(input, number, form) { if ((typeof input === 'undefined' ? 'undefined' : _typeof(input)) !== 'object' || typeof number !== 'number' || typeof form !== 'number') { return input; } var _pluralForms = function () { return [function () { return arguments.length <= 1 ? undefined : arguments[1]; }, function () { return (arguments.length <= 0 ? undefined : arguments[0]) === 1 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2]; }, function () { return (arguments.length <= 0 ? undefined : arguments[0]) === 0 || (arguments.length <= 0 ? undefined : arguments[0]) === 1 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2]; }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 !== 11) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) !== 0) { return arguments.length <= 2 ? undefined : arguments[2]; } else { return arguments.length <= 3 ? undefined : arguments[3]; } }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) === 1 || (arguments.length <= 0 ? undefined : arguments[0]) === 11) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2 || (arguments.length <= 0 ? undefined : arguments[0]) === 12) { return arguments.length <= 2 ? undefined : arguments[2]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) > 2 && (arguments.length <= 0 ? undefined : arguments[0]) < 20) { return arguments.length <= 3 ? undefined : arguments[3]; } else { return arguments.length <= 4 ? undefined : arguments[4]; } }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) === 0 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 > 0 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 < 20) { return arguments.length <= 2 ? undefined : arguments[2]; } else { return arguments.length <= 3 ? undefined : arguments[3]; } }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 !== 11) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 >= 2 && ((arguments.length <= 0 ? undefined : arguments[0]) % 100 < 10 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 20)) { return arguments.length <= 2 ? undefined : arguments[2]; } else { return [3]; } }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 !== 11) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 >= 2 && (arguments.length <= 0 ? undefined : arguments[0]) % 10 <= 4 && ((arguments.length <= 0 ? undefined : arguments[0]) % 100 < 10 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 20)) { return arguments.length <= 2 ? undefined : arguments[2]; } else { return arguments.length <= 3 ? undefined : arguments[3]; } }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) >= 2 && (arguments.length <= 0 ? undefined : arguments[0]) <= 4) { return arguments.length <= 2 ? undefined : arguments[2]; } else { return arguments.length <= 3 ? undefined : arguments[3]; } }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 >= 2 && (arguments.length <= 0 ? undefined : arguments[0]) % 10 <= 4 && ((arguments.length <= 0 ? undefined : arguments[0]) % 100 < 10 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 20)) { return arguments.length <= 2 ? undefined : arguments[2]; } else { return arguments.length <= 3 ? undefined : arguments[3]; } }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 === 1) { return arguments.length <= 2 ? undefined : arguments[2]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 === 2) { return arguments.length <= 3 ? undefined : arguments[3]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 === 3 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 === 4) { return arguments.length <= 4 ? undefined : arguments[4]; } else { return arguments.length <= 1 ? undefined : arguments[1]; } }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2) { return arguments.length <= 2 ? undefined : arguments[2]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) > 2 && (arguments.length <= 0 ? undefined : arguments[0]) < 7) { return arguments.length <= 3 ? undefined : arguments[3]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) > 6 && (arguments.length <= 0 ? undefined : arguments[0]) < 11) { return arguments.length <= 4 ? undefined : arguments[4]; } else { return arguments.length <= 5 ? undefined : arguments[5]; } }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) === 0) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) { return arguments.length <= 2 ? undefined : arguments[2]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2) { return arguments.length <= 3 ? undefined : arguments[3]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 3 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 <= 10) { return arguments.length <= 4 ? undefined : arguments[4]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 11) { return arguments.length <= 5 ? undefined : arguments[5]; } else { return arguments.length <= 6 ? undefined : arguments[6]; } }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) === 0 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 > 1 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 < 11) { return arguments.length <= 2 ? undefined : arguments[2]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) % 100 > 10 && (arguments.length <= 0 ? undefined : arguments[0]) % 100 < 20) { return arguments.length <= 3 ? undefined : arguments[3]; } else { return arguments.length <= 4 ? undefined : arguments[4]; } }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 === 2) { return arguments.length <= 2 ? undefined : arguments[2]; } else { return arguments.length <= 3 ? undefined : arguments[3]; } }, function () { return (arguments.length <= 0 ? undefined : arguments[0]) !== 11 && (arguments.length <= 0 ? undefined : arguments[0]) % 10 === 1 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2]; }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) % 10 >= 2 && (arguments.length <= 0 ? undefined : arguments[0]) % 10 <= 4 && ((arguments.length <= 0 ? undefined : arguments[0]) % 100 < 10 || (arguments.length <= 0 ? undefined : arguments[0]) % 100 >= 20)) { return arguments.length <= 2 ? undefined : arguments[2]; } else { return arguments.length <= 3 ? undefined : arguments[3]; } }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2) { return arguments.length <= 2 ? undefined : arguments[2]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) !== 8 && (arguments.length <= 0 ? undefined : arguments[0]) !== 11) { return arguments.length <= 3 ? undefined : arguments[3]; } else { return arguments.length <= 4 ? undefined : arguments[4]; } }, function () { return (arguments.length <= 0 ? undefined : arguments[0]) === 0 ? arguments.length <= 1 ? undefined : arguments[1] : arguments.length <= 2 ? undefined : arguments[2]; }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) === 2) { return arguments.length <= 2 ? undefined : arguments[2]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) === 3) { return arguments.length <= 3 ? undefined : arguments[3]; } else { return arguments.length <= 4 ? undefined : arguments[4]; } }, function () { if ((arguments.length <= 0 ? undefined : arguments[0]) === 0) { return arguments.length <= 1 ? undefined : arguments[1]; } else if ((arguments.length <= 0 ? undefined : arguments[0]) === 1) { return arguments.length <= 2 ? undefined : arguments[2]; } else { return arguments.length <= 3 ? undefined : arguments[3]; } }]; }(); return _pluralForms[form].apply(null, [number].concat(input)); }; if (i18n[language] !== undefined) { str = i18n[language][message]; if (pluralParam !== null && typeof pluralParam === 'number') { pluralForm = i18n[language]['mejs.plural-form']; str = _plural.apply(null, [str, pluralParam, pluralForm]); } } if (!str && i18n.en) { str = i18n.en[message]; if (pluralParam !== null && typeof pluralParam === 'number') { pluralForm = i18n.en['mejs.plural-form']; str = _plural.apply(null, [str, pluralParam, pluralForm]); } } str = str || message; if (pluralParam !== null && typeof pluralParam === 'number') { str = str.replace('%1', pluralParam); } return (0, _general.escapeHTML)(str); } return message; }; _mejs2.default.i18n = i18n; if (typeof mejsL10n !== 'undefined') { _mejs2.default.i18n.language(mejsL10n.language, mejsL10n.strings); } exports.default = i18n; },{"15":15,"27":27,"7":7}],6:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); var _general = _dereq_(27); var _media2 = _dereq_(28); var _renderer = _dereq_(8); var _constants = _dereq_(25); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var MediaElement = function MediaElement(idOrNode, options, sources) { var _this = this; _classCallCheck(this, MediaElement); var t = this; sources = Array.isArray(sources) ? sources : null; t.defaults = { renderers: [], fakeNodeName: 'mediaelementwrapper', pluginPath: 'build/', shimScriptAccess: 'sameDomain' }; options = Object.assign(t.defaults, options); t.mediaElement = _document2.default.createElement(options.fakeNodeName); var id = idOrNode, error = false; if (typeof idOrNode === 'string') { t.mediaElement.originalNode = _document2.default.getElementById(idOrNode); } else { t.mediaElement.originalNode = idOrNode; id = idOrNode.id; } if (t.mediaElement.originalNode === undefined || t.mediaElement.originalNode === null) { return null; } t.mediaElement.options = options; id = id || 'mejs_' + Math.random().toString().slice(2); t.mediaElement.originalNode.setAttribute('id', id + '_from_mejs'); var tagName = t.mediaElement.originalNode.tagName.toLowerCase(); if (['video', 'audio'].indexOf(tagName) > -1 && !t.mediaElement.originalNode.getAttribute('preload')) { t.mediaElement.originalNode.setAttribute('preload', 'none'); } t.mediaElement.originalNode.parentNode.insertBefore(t.mediaElement, t.mediaElement.originalNode); t.mediaElement.appendChild(t.mediaElement.originalNode); var processURL = function processURL(url, type) { if (_window2.default.location.protocol === 'https:' && url.indexOf('http:') === 0 && _constants.IS_IOS && _mejs2.default.html5media.mediaTypes.indexOf(type) > -1) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (this.readyState === 4 && this.status === 200) { var _url = _window2.default.URL || _window2.default.webkitURL, blobUrl = _url.createObjectURL(this.response); t.mediaElement.originalNode.setAttribute('src', blobUrl); return blobUrl; } return url; }; xhr.open('GET', url); xhr.responseType = 'blob'; xhr.send(); } return url; }; var mediaFiles = void 0; if (sources !== null) { mediaFiles = sources; } else if (t.mediaElement.originalNode !== null) { mediaFiles = []; switch (t.mediaElement.originalNode.nodeName.toLowerCase()) { case 'iframe': mediaFiles.push({ type: '', src: t.mediaElement.originalNode.getAttribute('src') }); break; case 'audio': case 'video': var _sources = t.mediaElement.originalNode.children.length, nodeSource = t.mediaElement.originalNode.getAttribute('src'); if (nodeSource) { var node = t.mediaElement.originalNode, type = (0, _media2.formatType)(nodeSource, node.getAttribute('type')); mediaFiles.push({ type: type, src: processURL(nodeSource, type) }); } for (var i = 0; i < _sources; i++) { var n = t.mediaElement.originalNode.children[i]; if (n.tagName.toLowerCase() === 'source') { var src = n.getAttribute('src'), _type = (0, _media2.formatType)(src, n.getAttribute('type')); mediaFiles.push({ type: _type, src: processURL(src, _type) }); } } break; } } t.mediaElement.id = id; t.mediaElement.renderers = {}; t.mediaElement.events = {}; t.mediaElement.promises = []; t.mediaElement.renderer = null; t.mediaElement.rendererName = null; t.mediaElement.changeRenderer = function (rendererName, mediaFiles) { var t = _this, media = Object.keys(mediaFiles[0]).length > 2 ? mediaFiles[0] : mediaFiles[0].src; if (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null && t.mediaElement.renderer.name === rendererName) { t.mediaElement.renderer.pause(); if (t.mediaElement.renderer.stop) { t.mediaElement.renderer.stop(); } t.mediaElement.renderer.show(); t.mediaElement.renderer.setSrc(media); return true; } if (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null) { t.mediaElement.renderer.pause(); if (t.mediaElement.renderer.stop) { t.mediaElement.renderer.stop(); } t.mediaElement.renderer.hide(); } var newRenderer = t.mediaElement.renderers[rendererName], newRendererType = null; if (newRenderer !== undefined && newRenderer !== null) { newRenderer.show(); newRenderer.setSrc(media); t.mediaElement.renderer = newRenderer; t.mediaElement.rendererName = rendererName; return true; } var rendererArray = t.mediaElement.options.renderers.length ? t.mediaElement.options.renderers : _renderer.renderer.order; for (var _i = 0, total = rendererArray.length; _i < total; _i++) { var index = rendererArray[_i]; if (index === rendererName) { var rendererList = _renderer.renderer.renderers; newRendererType = rendererList[index]; var renderOptions = Object.assign(newRendererType.options, t.mediaElement.options); newRenderer = newRendererType.create(t.mediaElement, renderOptions, mediaFiles); newRenderer.name = rendererName; t.mediaElement.renderers[newRendererType.name] = newRenderer; t.mediaElement.renderer = newRenderer; t.mediaElement.rendererName = rendererName; newRenderer.show(); return true; } } return false; }; t.mediaElement.setSize = function (width, height) { if (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null) { t.mediaElement.renderer.setSize(width, height); } }; t.mediaElement.generateError = function (message, urlList) { message = message || ''; urlList = Array.isArray(urlList) ? urlList : []; var event = (0, _general.createEvent)('error', t.mediaElement); event.message = message; event.urls = urlList; t.mediaElement.dispatchEvent(event); error = true; }; var props = _mejs2.default.html5media.properties, methods = _mejs2.default.html5media.methods, addProperty = function addProperty(obj, name, onGet, onSet) { var oldValue = obj[name]; var getFn = function getFn() { return onGet.apply(obj, [oldValue]); }, setFn = function setFn(newValue) { oldValue = onSet.apply(obj, [newValue]); return oldValue; }; Object.defineProperty(obj, name, { get: getFn, set: setFn }); }, assignGettersSetters = function assignGettersSetters(propName) { if (propName !== 'src') { var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1), getFn = function getFn() { return t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null && typeof t.mediaElement.renderer['get' + capName] === 'function' ? t.mediaElement.renderer['get' + capName]() : null; }, setFn = function setFn(value) { if (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null && typeof t.mediaElement.renderer['set' + capName] === 'function') { t.mediaElement.renderer['set' + capName](value); } }; addProperty(t.mediaElement, propName, getFn, setFn); t.mediaElement['get' + capName] = getFn; t.mediaElement['set' + capName] = setFn; } }, getSrc = function getSrc() { return t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null ? t.mediaElement.renderer.getSrc() : null; }, setSrc = function setSrc(value) { var mediaFiles = []; if (typeof value === 'string') { mediaFiles.push({ src: value, type: value ? (0, _media2.getTypeFromFile)(value) : '' }); } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src !== undefined) { var _src = (0, _media2.absolutizeUrl)(value.src), _type2 = value.type, media = Object.assign(value, { src: _src, type: (_type2 === '' || _type2 === null || _type2 === undefined) && _src ? (0, _media2.getTypeFromFile)(_src) : _type2 }); mediaFiles.push(media); } else if (Array.isArray(value)) { for (var _i2 = 0, total = value.length; _i2 < total; _i2++) { var _src2 = (0, _media2.absolutizeUrl)(value[_i2].src), _type3 = value[_i2].type, _media = Object.assign(value[_i2], { src: _src2, type: (_type3 === '' || _type3 === null || _type3 === undefined) && _src2 ? (0, _media2.getTypeFromFile)(_src2) : _type3 }); mediaFiles.push(_media); } } var renderInfo = _renderer.renderer.select(mediaFiles, t.mediaElement.options.renderers.length ? t.mediaElement.options.renderers : []), event = void 0; if (!t.mediaElement.paused && !(t.mediaElement.src == null || t.mediaElement.src === '')) { t.mediaElement.pause(); event = (0, _general.createEvent)('pause', t.mediaElement); t.mediaElement.dispatchEvent(event); } t.mediaElement.originalNode.src = mediaFiles[0].src || ''; if (renderInfo === null && mediaFiles[0].src) { t.mediaElement.generateError('No renderer found', mediaFiles); return; } var shouldChangeRenderer = !(mediaFiles[0].src == null || mediaFiles[0].src === ''); return shouldChangeRenderer ? t.mediaElement.changeRenderer(renderInfo.rendererName, mediaFiles) : null; }, triggerAction = function triggerAction(methodName, args) { try { if (methodName === 'play' && (t.mediaElement.rendererName === 'native_dash' || t.mediaElement.rendererName === 'native_hls' || t.mediaElement.rendererName === 'vimeo_iframe')) { var response = t.mediaElement.renderer[methodName](args); if (response && typeof response.then === 'function') { response.catch(function () { if (t.mediaElement.paused) { setTimeout(function () { var tmpResponse = t.mediaElement.renderer.play(); if (tmpResponse !== undefined) { tmpResponse.catch(function () { if (!t.mediaElement.renderer.paused) { t.mediaElement.renderer.pause(); } }); } }, 150); } }); } } else { t.mediaElement.renderer[methodName](args); } } catch (e) { t.mediaElement.generateError(e, mediaFiles); } }, assignMethods = function assignMethods(methodName) { t.mediaElement[methodName] = function () { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } if (t.mediaElement.renderer !== undefined && t.mediaElement.renderer !== null && typeof t.mediaElement.renderer[methodName] === 'function') { if (t.mediaElement.promises.length) { Promise.all(t.mediaElement.promises).then(function () { triggerAction(methodName, args); }).catch(function (e) { t.mediaElement.generateError(e, mediaFiles); }); } else { triggerAction(methodName, args); } } return null; }; }; addProperty(t.mediaElement, 'src', getSrc, setSrc); t.mediaElement.getSrc = getSrc; t.mediaElement.setSrc = setSrc; for (var _i3 = 0, total = props.length; _i3 < total; _i3++) { assignGettersSetters(props[_i3]); } for (var _i4 = 0, _total = methods.length; _i4 < _total; _i4++) { assignMethods(methods[_i4]); } t.mediaElement.addEventListener = function (eventName, callback) { t.mediaElement.events[eventName] = t.mediaElement.events[eventName] || []; t.mediaElement.events[eventName].push(callback); }; t.mediaElement.removeEventListener = function (eventName, callback) { if (!eventName) { t.mediaElement.events = {}; return true; } var callbacks = t.mediaElement.events[eventName]; if (!callbacks) { return true; } if (!callback) { t.mediaElement.events[eventName] = []; return true; } for (var _i5 = 0; _i5 < callbacks.length; _i5++) { if (callbacks[_i5] === callback) { t.mediaElement.events[eventName].splice(_i5, 1); return true; } } return false; }; t.mediaElement.dispatchEvent = function (event) { var callbacks = t.mediaElement.events[event.type]; if (callbacks) { for (var _i6 = 0; _i6 < callbacks.length; _i6++) { callbacks[_i6].apply(null, [event]); } } }; t.mediaElement.destroy = function () { var mediaElement = t.mediaElement.originalNode.cloneNode(true); var wrapper = t.mediaElement.parentElement; mediaElement.removeAttribute('id'); mediaElement.remove(); t.mediaElement.remove(); wrapper.appendChild(mediaElement); }; if (mediaFiles.length) { t.mediaElement.src = mediaFiles; } if (t.mediaElement.promises.length) { Promise.all(t.mediaElement.promises).then(function () { if (t.mediaElement.options.success) { t.mediaElement.options.success(t.mediaElement, t.mediaElement.originalNode); } }).catch(function () { if (error && t.mediaElement.options.error) { t.mediaElement.options.error(t.mediaElement, t.mediaElement.originalNode); } }); } else { if (t.mediaElement.options.success) { t.mediaElement.options.success(t.mediaElement, t.mediaElement.originalNode); } if (error && t.mediaElement.options.error) { t.mediaElement.options.error(t.mediaElement, t.mediaElement.originalNode); } } return t.mediaElement; }; _window2.default.MediaElement = MediaElement; _mejs2.default.MediaElement = MediaElement; exports.default = MediaElement; },{"2":2,"25":25,"27":27,"28":28,"3":3,"7":7,"8":8}],7:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var mejs = {}; mejs.version = '4.2.17'; mejs.html5media = { properties: ['volume', 'src', 'currentTime', 'muted', 'duration', 'paused', 'ended', 'buffered', 'error', 'networkState', 'readyState', 'seeking', 'seekable', 'currentSrc', 'preload', 'bufferedBytes', 'bufferedTime', 'initialTime', 'startOffsetTime', 'defaultPlaybackRate', 'playbackRate', 'played', 'autoplay', 'loop', 'controls'], readOnlyProperties: ['duration', 'paused', 'ended', 'buffered', 'error', 'networkState', 'readyState', 'seeking', 'seekable'], methods: ['load', 'play', 'pause', 'canPlayType'], events: ['loadstart', 'durationchange', 'loadedmetadata', 'loadeddata', 'progress', 'canplay', 'canplaythrough', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'play', 'playing', 'pause', 'waiting', 'seeking', 'seeked', 'timeupdate', 'ended', 'ratechange', 'volumechange'], mediaTypes: ['audio/mp3', 'audio/ogg', 'audio/oga', 'audio/wav', 'audio/x-wav', 'audio/wave', 'audio/x-pn-wav', 'audio/mpeg', 'audio/mp4', 'video/mp4', 'video/webm', 'video/ogg', 'video/ogv'] }; _window2.default.mejs = mejs; exports.default = mejs; },{"3":3}],8:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.renderer = undefined; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Renderer = function () { function Renderer() { _classCallCheck(this, Renderer); this.renderers = {}; this.order = []; } _createClass(Renderer, [{ key: 'add', value: function add(renderer) { if (renderer.name === undefined) { throw new TypeError('renderer must contain at least `name` property'); } this.renderers[renderer.name] = renderer; this.order.push(renderer.name); } }, { key: 'select', value: function select(mediaFiles) { var renderers = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var renderersLength = renderers.length; renderers = renderers.length ? renderers : this.order; if (!renderersLength) { var rendererIndicator = [/^(html5|native)/i, /^flash/i, /iframe$/i], rendererRanking = function rendererRanking(renderer) { for (var i = 0, total = rendererIndicator.length; i < total; i++) { if (rendererIndicator[i].test(renderer)) { return i; } } return rendererIndicator.length; }; renderers.sort(function (a, b) { return rendererRanking(a) - rendererRanking(b); }); } for (var i = 0, total = renderers.length; i < total; i++) { var key = renderers[i], _renderer = this.renderers[key]; if (_renderer !== null && _renderer !== undefined) { for (var j = 0, jl = mediaFiles.length; j < jl; j++) { if (typeof _renderer.canPlayType === 'function' && typeof mediaFiles[j].type === 'string' && _renderer.canPlayType(mediaFiles[j].type)) { return { rendererName: _renderer.name, src: mediaFiles[j].src }; } } } } return null; } }, { key: 'order', set: function set(order) { if (!Array.isArray(order)) { throw new TypeError('order must be an array of strings.'); } this._order = order; }, get: function get() { return this._order; } }, { key: 'renderers', set: function set(renderers) { if (renderers !== null && (typeof renderers === 'undefined' ? 'undefined' : _typeof(renderers)) !== 'object') { throw new TypeError('renderers must be an array of objects.'); } this._renderers = renderers; }, get: function get() { return this._renderers; } }]); return Renderer; }(); var renderer = exports.renderer = new Renderer(); _mejs2.default.Renderers = renderer; },{"7":7}],9:[function(_dereq_,module,exports){ 'use strict'; var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _i18n = _dereq_(5); var _i18n2 = _interopRequireDefault(_i18n); var _player = _dereq_(16); var _player2 = _interopRequireDefault(_player); var _constants = _dereq_(25); var Features = _interopRequireWildcard(_constants); var _general = _dereq_(27); var _dom = _dereq_(26); var _media = _dereq_(28); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } Object.assign(_player.config, { usePluginFullScreen: true, fullscreenText: null, useFakeFullscreen: false }); Object.assign(_player2.default.prototype, { isFullScreen: false, isNativeFullScreen: false, isInIframe: false, isPluginClickThroughCreated: false, fullscreenMode: '', containerSizeTimeout: null, buildfullscreen: function buildfullscreen(player) { if (!player.isVideo) { return; } player.isInIframe = _window2.default.location !== _window2.default.parent.location; player.detectFullscreenMode(); var t = this, fullscreenTitle = (0, _general.isString)(t.options.fullscreenText) ? t.options.fullscreenText : _i18n2.default.t('mejs.fullscreen'), fullscreenBtn = _document2.default.createElement('div'); fullscreenBtn.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'fullscreen-button'; fullscreenBtn.innerHTML = ''; t.addControlElement(fullscreenBtn, 'fullscreen'); fullscreenBtn.addEventListener('click', function () { var isFullScreen = Features.HAS_TRUE_NATIVE_FULLSCREEN && Features.IS_FULLSCREEN || player.isFullScreen; if (isFullScreen) { player.exitFullScreen(); } else { player.enterFullScreen(); } }); player.fullscreenBtn = fullscreenBtn; t.options.keyActions.push({ keys: [70], action: function action(player, media, key, event) { if (!event.ctrlKey) { if (typeof player.enterFullScreen !== 'undefined') { if (player.isFullScreen) { player.exitFullScreen(); } else { player.enterFullScreen(); } } } } }); t.exitFullscreenCallback = function (e) { var key = e.which || e.keyCode || 0; if (t.options.enableKeyboard && key === 27 && (Features.HAS_TRUE_NATIVE_FULLSCREEN && Features.IS_FULLSCREEN || t.isFullScreen)) { player.exitFullScreen(); } }; t.globalBind('keydown', t.exitFullscreenCallback); t.normalHeight = 0; t.normalWidth = 0; if (Features.HAS_TRUE_NATIVE_FULLSCREEN) { var fullscreenChanged = function fullscreenChanged() { if (player.isFullScreen) { if (Features.isFullScreen()) { player.isNativeFullScreen = true; player.setControlsSize(); } else { player.isNativeFullScreen = false; player.exitFullScreen(); } } }; player.globalBind(Features.FULLSCREEN_EVENT_NAME, fullscreenChanged); } }, cleanfullscreen: function cleanfullscreen(player) { player.exitFullScreen(); player.globalUnbind('keydown', player.exitFullscreenCallback); }, detectFullscreenMode: function detectFullscreenMode() { var t = this, isNative = t.media.rendererName !== null && /(native|html5)/i.test(t.media.rendererName); var mode = ''; if (Features.HAS_TRUE_NATIVE_FULLSCREEN && isNative) { mode = 'native-native'; } else if (Features.HAS_TRUE_NATIVE_FULLSCREEN && !isNative) { mode = 'plugin-native'; } else if (t.usePluginFullScreen && Features.SUPPORT_POINTER_EVENTS) { mode = 'plugin-click'; } t.fullscreenMode = mode; return mode; }, enterFullScreen: function enterFullScreen() { var t = this, isNative = t.media.rendererName !== null && /(html5|native)/i.test(t.media.rendererName), containerStyles = getComputedStyle(t.getElement(t.container)); if (!t.isVideo) { return; } if (t.options.useFakeFullscreen === false && (Features.IS_IOS || Features.IS_SAFARI) && Features.HAS_IOS_FULLSCREEN && typeof t.media.originalNode.webkitEnterFullscreen === 'function' && t.media.originalNode.canPlayType((0, _media.getTypeFromFile)(t.media.getSrc()))) { t.media.originalNode.webkitEnterFullscreen(); return; } (0, _dom.addClass)(_document2.default.documentElement, t.options.classPrefix + 'fullscreen'); (0, _dom.addClass)(t.getElement(t.container), t.options.classPrefix + 'container-fullscreen'); t.normalHeight = parseFloat(containerStyles.height); t.normalWidth = parseFloat(containerStyles.width); if (t.fullscreenMode === 'native-native' || t.fullscreenMode === 'plugin-native') { Features.requestFullScreen(t.getElement(t.container)); if (t.isInIframe) { setTimeout(function checkFullscreen() { if (t.isNativeFullScreen) { var percentErrorMargin = 0.002, windowWidth = _window2.default.innerWidth || _document2.default.documentElement.clientWidth || _document2.default.body.clientWidth, screenWidth = screen.width, absDiff = Math.abs(screenWidth - windowWidth), marginError = screenWidth * percentErrorMargin; if (absDiff > marginError) { t.exitFullScreen(); } else { setTimeout(checkFullscreen, 500); } } }, 1000); } } t.getElement(t.container).style.width = '100%'; t.getElement(t.container).style.height = '100%'; t.containerSizeTimeout = setTimeout(function () { t.getElement(t.container).style.width = '100%'; t.getElement(t.container).style.height = '100%'; t.setControlsSize(); }, 500); if (isNative) { t.node.style.width = '100%'; t.node.style.height = '100%'; } else { var elements = t.getElement(t.container).querySelectorAll('embed, object, video'), _total = elements.length; for (var i = 0; i < _total; i++) { elements[i].style.width = '100%'; elements[i].style.height = '100%'; } } if (t.options.setDimensions && typeof t.media.setSize === 'function') { t.media.setSize(screen.width, screen.height); } var layers = t.getElement(t.layers).children, total = layers.length; for (var _i = 0; _i < total; _i++) { layers[_i].style.width = '100%'; layers[_i].style.height = '100%'; } if (t.fullscreenBtn) { (0, _dom.removeClass)(t.fullscreenBtn, t.options.classPrefix + 'fullscreen'); (0, _dom.addClass)(t.fullscreenBtn, t.options.classPrefix + 'unfullscreen'); } t.setControlsSize(); t.isFullScreen = true; var zoomFactor = Math.min(screen.width / t.width, screen.height / t.height), captionText = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-text'); if (captionText) { captionText.style.fontSize = zoomFactor * 100 + '%'; captionText.style.lineHeight = 'normal'; t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-position').style.bottom = (screen.height - t.normalHeight) / 2 - t.getElement(t.controls).offsetHeight / 2 + zoomFactor + 15 + 'px'; } var event = (0, _general.createEvent)('enteredfullscreen', t.getElement(t.container)); t.getElement(t.container).dispatchEvent(event); }, exitFullScreen: function exitFullScreen() { var t = this, isNative = t.media.rendererName !== null && /(native|html5)/i.test(t.media.rendererName); if (!t.isVideo) { return; } clearTimeout(t.containerSizeTimeout); if (Features.HAS_TRUE_NATIVE_FULLSCREEN && (Features.IS_FULLSCREEN || t.isFullScreen)) { Features.cancelFullScreen(); } (0, _dom.removeClass)(_document2.default.documentElement, t.options.classPrefix + 'fullscreen'); (0, _dom.removeClass)(t.getElement(t.container), t.options.classPrefix + 'container-fullscreen'); if (t.options.setDimensions) { t.getElement(t.container).style.width = t.normalWidth + 'px'; t.getElement(t.container).style.height = t.normalHeight + 'px'; if (isNative) { t.node.style.width = t.normalWidth + 'px'; t.node.style.height = t.normalHeight + 'px'; } else { var elements = t.getElement(t.container).querySelectorAll('embed, object, video'), _total2 = elements.length; for (var i = 0; i < _total2; i++) { elements[i].style.width = t.normalWidth + 'px'; elements[i].style.height = t.normalHeight + 'px'; } } if (typeof t.media.setSize === 'function') { t.media.setSize(t.normalWidth, t.normalHeight); } var layers = t.getElement(t.layers).children, total = layers.length; for (var _i2 = 0; _i2 < total; _i2++) { layers[_i2].style.width = t.normalWidth + 'px'; layers[_i2].style.height = t.normalHeight + 'px'; } } if (t.fullscreenBtn) { (0, _dom.removeClass)(t.fullscreenBtn, t.options.classPrefix + 'unfullscreen'); (0, _dom.addClass)(t.fullscreenBtn, t.options.classPrefix + 'fullscreen'); } t.setControlsSize(); t.isFullScreen = false; var captionText = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-text'); if (captionText) { captionText.style.fontSize = ''; captionText.style.lineHeight = ''; t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'captions-position').style.bottom = ''; } var event = (0, _general.createEvent)('exitedfullscreen', t.getElement(t.container)); t.getElement(t.container).dispatchEvent(event); } }); },{"16":16,"2":2,"25":25,"26":26,"27":27,"28":28,"3":3,"5":5}],10:[function(_dereq_,module,exports){ 'use strict'; var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _player = _dereq_(16); var _player2 = _interopRequireDefault(_player); var _i18n = _dereq_(5); var _i18n2 = _interopRequireDefault(_i18n); var _general = _dereq_(27); var _dom = _dereq_(26); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } Object.assign(_player.config, { playText: null, pauseText: null }); Object.assign(_player2.default.prototype, { buildplaypause: function buildplaypause(player, controls, layers, media) { var t = this, op = t.options, playTitle = (0, _general.isString)(op.playText) ? op.playText : _i18n2.default.t('mejs.play'), pauseTitle = (0, _general.isString)(op.pauseText) ? op.pauseText : _i18n2.default.t('mejs.pause'), play = _document2.default.createElement('div'); play.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'playpause-button ' + t.options.classPrefix + 'play'; play.innerHTML = ''; play.addEventListener('click', function () { if (t.paused) { t.play(); } else { t.pause(); } }); var playBtn = play.querySelector('button'); t.addControlElement(play, 'playpause'); function togglePlayPause(which) { if ('play' === which) { (0, _dom.removeClass)(play, t.options.classPrefix + 'play'); (0, _dom.removeClass)(play, t.options.classPrefix + 'replay'); (0, _dom.addClass)(play, t.options.classPrefix + 'pause'); playBtn.setAttribute('title', pauseTitle); playBtn.setAttribute('aria-label', pauseTitle); } else { (0, _dom.removeClass)(play, t.options.classPrefix + 'pause'); (0, _dom.removeClass)(play, t.options.classPrefix + 'replay'); (0, _dom.addClass)(play, t.options.classPrefix + 'play'); playBtn.setAttribute('title', playTitle); playBtn.setAttribute('aria-label', playTitle); } } togglePlayPause('pse'); media.addEventListener('loadedmetadata', function () { if (media.rendererName.indexOf('flash') === -1) { togglePlayPause('pse'); } }); media.addEventListener('play', function () { togglePlayPause('play'); }); media.addEventListener('playing', function () { togglePlayPause('play'); }); media.addEventListener('pause', function () { togglePlayPause('pse'); }); media.addEventListener('ended', function () { if (!player.options.loop) { (0, _dom.removeClass)(play, t.options.classPrefix + 'pause'); (0, _dom.removeClass)(play, t.options.classPrefix + 'play'); (0, _dom.addClass)(play, t.options.classPrefix + 'replay'); playBtn.setAttribute('title', playTitle); playBtn.setAttribute('aria-label', playTitle); } }); } }); },{"16":16,"2":2,"26":26,"27":27,"5":5}],11:[function(_dereq_,module,exports){ 'use strict'; var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _player = _dereq_(16); var _player2 = _interopRequireDefault(_player); var _i18n = _dereq_(5); var _i18n2 = _interopRequireDefault(_i18n); var _constants = _dereq_(25); var _time = _dereq_(30); var _dom = _dereq_(26); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } Object.assign(_player.config, { enableProgressTooltip: true, useSmoothHover: true, forceLive: false }); Object.assign(_player2.default.prototype, { buildprogress: function buildprogress(player, controls, layers, media) { var lastKeyPressTime = 0, mouseIsDown = false, startedPaused = false; var t = this, autoRewindInitial = player.options.autoRewind, tooltip = player.options.enableProgressTooltip ? '' + ('00:00') + ('') + '' : '', rail = _document2.default.createElement('div'); rail.className = t.options.classPrefix + 'time-rail'; rail.innerHTML = '' + ('') + ('') + ('') + ('') + ('') + ('' + tooltip) + ''; t.addControlElement(rail, 'progress'); t.options.keyActions.push({ keys: [37, 227], action: function action(player) { if (!isNaN(player.duration) && player.duration > 0) { if (player.isVideo) { player.showControls(); player.startControlsTimer(); } var timeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'time-total'); if (timeSlider) { timeSlider.focus(); } var newTime = Math.max(player.currentTime - player.options.defaultSeekBackwardInterval(player), 0); if (!player.paused) { player.pause(); } setTimeout(function () { player.setCurrentTime(newTime); }, 0); setTimeout(function () { player.play(); }, 0); } } }, { keys: [39, 228], action: function action(player) { if (!isNaN(player.duration) && player.duration > 0) { if (player.isVideo) { player.showControls(); player.startControlsTimer(); } var timeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'time-total'); if (timeSlider) { timeSlider.focus(); } var newTime = Math.min(player.currentTime + player.options.defaultSeekForwardInterval(player), player.duration); if (!player.paused) { player.pause(); } setTimeout(function () { player.setCurrentTime(newTime); }, 0); setTimeout(function () { player.play(); }, 0); } } }); t.rail = controls.querySelector('.' + t.options.classPrefix + 'time-rail'); t.total = controls.querySelector('.' + t.options.classPrefix + 'time-total'); t.loaded = controls.querySelector('.' + t.options.classPrefix + 'time-loaded'); t.current = controls.querySelector('.' + t.options.classPrefix + 'time-current'); t.handle = controls.querySelector('.' + t.options.classPrefix + 'time-handle'); t.timefloat = controls.querySelector('.' + t.options.classPrefix + 'time-float'); t.timefloatcurrent = controls.querySelector('.' + t.options.classPrefix + 'time-float-current'); t.slider = controls.querySelector('.' + t.options.classPrefix + 'time-slider'); t.hovered = controls.querySelector('.' + t.options.classPrefix + 'time-hovered'); t.buffer = controls.querySelector('.' + t.options.classPrefix + 'time-buffering'); t.newTime = 0; t.forcedHandlePause = false; t.setTransformStyle = function (element, value) { element.style.transform = value; element.style.webkitTransform = value; element.style.MozTransform = value; element.style.msTransform = value; element.style.OTransform = value; }; t.buffer.style.display = 'none'; var handleMouseMove = function handleMouseMove(e) { var totalStyles = getComputedStyle(t.total), offsetStyles = (0, _dom.offset)(t.total), width = t.total.offsetWidth, transform = function () { if (totalStyles.webkitTransform !== undefined) { return 'webkitTransform'; } else if (totalStyles.mozTransform !== undefined) { return 'mozTransform '; } else if (totalStyles.oTransform !== undefined) { return 'oTransform'; } else if (totalStyles.msTransform !== undefined) { return 'msTransform'; } else { return 'transform'; } }(), cssMatrix = function () { if ('WebKitCSSMatrix' in window) { return 'WebKitCSSMatrix'; } else if ('MSCSSMatrix' in window) { return 'MSCSSMatrix'; } else if ('CSSMatrix' in window) { return 'CSSMatrix'; } }(); var percentage = 0, leftPos = 0, pos = 0, x = void 0; if (e.originalEvent && e.originalEvent.changedTouches) { x = e.originalEvent.changedTouches[0].pageX; } else if (e.changedTouches) { x = e.changedTouches[0].pageX; } else { x = e.pageX; } if (t.getDuration()) { if (x < offsetStyles.left) { x = offsetStyles.left; } else if (x > width + offsetStyles.left) { x = width + offsetStyles.left; } pos = x - offsetStyles.left; percentage = pos / width; t.newTime = percentage * t.getDuration(); if (mouseIsDown && t.getCurrentTime() !== null && t.newTime.toFixed(4) !== t.getCurrentTime().toFixed(4)) { t.setCurrentRailHandle(t.newTime); t.updateCurrent(t.newTime); } if (!_constants.IS_IOS && !_constants.IS_ANDROID) { if (pos < 0) { pos = 0; } if (t.options.useSmoothHover && cssMatrix !== null && typeof window[cssMatrix] !== 'undefined') { var matrix = new window[cssMatrix](getComputedStyle(t.handle)[transform]), handleLocation = matrix.m41, hoverScaleX = pos / parseFloat(getComputedStyle(t.total).width) - handleLocation / parseFloat(getComputedStyle(t.total).width); t.hovered.style.left = handleLocation + 'px'; t.setTransformStyle(t.hovered, 'scaleX(' + hoverScaleX + ')'); t.hovered.setAttribute('pos', pos); if (hoverScaleX >= 0) { (0, _dom.removeClass)(t.hovered, 'negative'); } else { (0, _dom.addClass)(t.hovered, 'negative'); } } if (t.timefloat) { var half = t.timefloat.offsetWidth / 2, offsetContainer = mejs.Utils.offset(t.getElement(t.container)), tooltipStyles = getComputedStyle(t.timefloat); if (x - offsetContainer.left < t.timefloat.offsetWidth) { leftPos = half; } else if (x - offsetContainer.left >= t.getElement(t.container).offsetWidth - half) { leftPos = t.total.offsetWidth - half; } else { leftPos = pos; } if ((0, _dom.hasClass)(t.getElement(t.container), t.options.classPrefix + 'long-video')) { leftPos += parseFloat(tooltipStyles.marginLeft) / 2 + t.timefloat.offsetWidth / 2; } t.timefloat.style.left = leftPos + 'px'; t.timefloatcurrent.innerHTML = (0, _time.secondsToTimeCode)(t.newTime, player.options.alwaysShowHours, player.options.showTimecodeFrameCount, player.options.framesPerSecond, player.options.secondsDecimalLength, player.options.timeFormat); t.timefloat.style.display = 'block'; } } } else if (!_constants.IS_IOS && !_constants.IS_ANDROID && t.timefloat) { leftPos = t.timefloat.offsetWidth + width >= t.getElement(t.container).offsetWidth ? t.timefloat.offsetWidth / 2 : 0; t.timefloat.style.left = leftPos + 'px'; t.timefloat.style.left = leftPos + 'px'; t.timefloat.style.display = 'block'; } }, updateSlider = function updateSlider() { var seconds = t.getCurrentTime(), timeSliderText = _i18n2.default.t('mejs.time-slider'), time = (0, _time.secondsToTimeCode)(seconds, player.options.alwaysShowHours, player.options.showTimecodeFrameCount, player.options.framesPerSecond, player.options.secondsDecimalLength, player.options.timeFormat), duration = t.getDuration(); t.slider.setAttribute('role', 'slider'); t.slider.tabIndex = 0; if (media.paused) { t.slider.setAttribute('aria-label', timeSliderText); t.slider.setAttribute('aria-valuemin', 0); t.slider.setAttribute('aria-valuemax', isNaN(duration) ? 0 : duration); t.slider.setAttribute('aria-valuenow', seconds); t.slider.setAttribute('aria-valuetext', time); } else { t.slider.removeAttribute('aria-label'); t.slider.removeAttribute('aria-valuemin'); t.slider.removeAttribute('aria-valuemax'); t.slider.removeAttribute('aria-valuenow'); t.slider.removeAttribute('aria-valuetext'); } }, restartPlayer = function restartPlayer() { if (new Date() - lastKeyPressTime >= 1000) { t.play(); } }, handleMouseup = function handleMouseup() { if (mouseIsDown && t.getCurrentTime() !== null && t.newTime.toFixed(4) !== t.getCurrentTime().toFixed(4)) { t.setCurrentTime(t.newTime); t.setCurrentRailHandle(t.newTime); t.updateCurrent(t.newTime); } if (t.forcedHandlePause) { t.slider.focus(); t.play(); } t.forcedHandlePause = false; }; t.slider.addEventListener('focus', function () { player.options.autoRewind = false; }); t.slider.addEventListener('blur', function () { player.options.autoRewind = autoRewindInitial; }); t.slider.addEventListener('keydown', function (e) { if (new Date() - lastKeyPressTime >= 1000) { startedPaused = t.paused; } if (t.options.enableKeyboard && t.options.keyActions.length) { var keyCode = e.which || e.keyCode || 0, duration = t.getDuration(), seekForward = player.options.defaultSeekForwardInterval(media), seekBackward = player.options.defaultSeekBackwardInterval(media); var seekTime = t.getCurrentTime(); var volume = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-slider'); if (keyCode === 38 || keyCode === 40) { if (volume) { volume.style.display = 'block'; } if (t.isVideo) { t.showControls(); t.startControlsTimer(); } var newVolume = keyCode === 38 ? Math.min(t.volume + 0.1, 1) : Math.max(t.volume - 0.1, 0), mutePlayer = newVolume <= 0; t.setVolume(newVolume); t.setMuted(mutePlayer); return; } else { if (volume) { volume.style.display = 'none'; } } switch (keyCode) { case 37: if (t.getDuration() !== Infinity) { seekTime -= seekBackward; } break; case 39: if (t.getDuration() !== Infinity) { seekTime += seekForward; } break; case 36: seekTime = 0; break; case 35: seekTime = duration; break; case 13: case 32: if (_constants.IS_FIREFOX) { if (t.paused) { t.play(); } else { t.pause(); } } return; default: return; } seekTime = seekTime < 0 || isNaN(seekTime) ? 0 : seekTime >= duration ? duration : Math.floor(seekTime); lastKeyPressTime = new Date(); if (!startedPaused) { player.pause(); } setTimeout(function () { t.setCurrentTime(seekTime); }, 0); if (seekTime < t.getDuration() && !startedPaused) { setTimeout(restartPlayer, 1100); } player.showControls(); e.preventDefault(); e.stopPropagation(); } }); var events = ['mousedown', 'touchstart']; t.slider.addEventListener('dragstart', function () { return false; }); for (var i = 0, total = events.length; i < total; i++) { t.slider.addEventListener(events[i], function (e) { t.forcedHandlePause = false; if (t.getDuration() !== Infinity) { if (e.which === 1 || e.which === 0) { if (!t.paused) { t.pause(); t.forcedHandlePause = true; } mouseIsDown = true; handleMouseMove(e); var endEvents = ['mouseup', 'touchend']; for (var j = 0, totalEvents = endEvents.length; j < totalEvents; j++) { t.getElement(t.container).addEventListener(endEvents[j], function (event) { var target = event.target; if (target === t.slider || target.closest('.' + t.options.classPrefix + 'time-slider')) { handleMouseMove(event); } }); } t.globalBind('mouseup.dur touchend.dur', function () { handleMouseup(); mouseIsDown = false; if (t.timefloat) { t.timefloat.style.display = 'none'; } }); } } }, _constants.SUPPORT_PASSIVE_EVENT && events[i] === 'touchstart' ? { passive: true } : false); } t.slider.addEventListener('mouseenter', function (e) { if (e.target === t.slider && t.getDuration() !== Infinity) { t.getElement(t.container).addEventListener('mousemove', function (event) { var target = event.target; if (target === t.slider || target.closest('.' + t.options.classPrefix + 'time-slider')) { handleMouseMove(event); } }); if (t.timefloat && !_constants.IS_IOS && !_constants.IS_ANDROID) { t.timefloat.style.display = 'block'; } if (t.hovered && !_constants.IS_IOS && !_constants.IS_ANDROID && t.options.useSmoothHover) { (0, _dom.removeClass)(t.hovered, 'no-hover'); } } }); t.slider.addEventListener('mouseleave', function () { if (t.getDuration() !== Infinity) { if (!mouseIsDown) { if (t.timefloat) { t.timefloat.style.display = 'none'; } if (t.hovered && t.options.useSmoothHover) { (0, _dom.addClass)(t.hovered, 'no-hover'); } } } }); t.broadcastCallback = function (e) { var broadcast = controls.querySelector('.' + t.options.classPrefix + 'broadcast'); if (!t.options.forceLive && t.getDuration() !== Infinity) { if (broadcast) { t.slider.style.display = ''; broadcast.remove(); } player.setProgressRail(e); if (!t.forcedHandlePause) { player.setCurrentRail(e); } updateSlider(); } else if (!broadcast && t.options.forceLive) { var label = _document2.default.createElement('span'); label.className = t.options.classPrefix + 'broadcast'; label.innerText = _i18n2.default.t('mejs.live-broadcast'); t.slider.style.display = 'none'; t.rail.appendChild(label); } }; media.addEventListener('progress', t.broadcastCallback); media.addEventListener('timeupdate', t.broadcastCallback); media.addEventListener('play', function () { t.buffer.style.display = 'none'; }); media.addEventListener('playing', function () { t.buffer.style.display = 'none'; }); media.addEventListener('seeking', function () { t.buffer.style.display = ''; }); media.addEventListener('seeked', function () { t.buffer.style.display = 'none'; }); media.addEventListener('pause', function () { t.buffer.style.display = 'none'; }); media.addEventListener('waiting', function () { t.buffer.style.display = ''; }); media.addEventListener('loadeddata', function () { t.buffer.style.display = ''; }); media.addEventListener('canplay', function () { t.buffer.style.display = 'none'; }); media.addEventListener('error', function () { t.buffer.style.display = 'none'; }); t.getElement(t.container).addEventListener('controlsresize', function (e) { if (t.getDuration() !== Infinity) { player.setProgressRail(e); if (!t.forcedHandlePause) { player.setCurrentRail(e); } } }); }, cleanprogress: function cleanprogress(player, controls, layers, media) { media.removeEventListener('progress', player.broadcastCallback); media.removeEventListener('timeupdate', player.broadcastCallback); if (player.rail) { player.rail.remove(); } }, setProgressRail: function setProgressRail(e) { var t = this, target = e !== undefined ? e.detail.target || e.target : t.media; var percent = null; if (target && target.buffered && target.buffered.length > 0 && target.buffered.end && t.getDuration()) { percent = target.buffered.end(target.buffered.length - 1) / t.getDuration(); } else if (target && target.bytesTotal !== undefined && target.bytesTotal > 0 && target.bufferedBytes !== undefined) { percent = target.bufferedBytes / target.bytesTotal; } else if (e && e.lengthComputable && e.total !== 0) { percent = e.loaded / e.total; } if (percent !== null) { percent = Math.min(1, Math.max(0, percent)); if (t.loaded) { t.setTransformStyle(t.loaded, 'scaleX(' + percent + ')'); } } }, setCurrentRailHandle: function setCurrentRailHandle(fakeTime) { var t = this; t.setCurrentRailMain(t, fakeTime); }, setCurrentRail: function setCurrentRail() { var t = this; t.setCurrentRailMain(t); }, setCurrentRailMain: function setCurrentRailMain(t, fakeTime) { if (t.getCurrentTime() !== undefined && t.getDuration()) { var nTime = typeof fakeTime === 'undefined' ? t.getCurrentTime() : fakeTime; if (t.total && t.handle) { var tW = parseFloat(getComputedStyle(t.total).width); var newWidth = Math.round(tW * nTime / t.getDuration()), handlePos = newWidth - Math.round(t.handle.offsetWidth / 2); handlePos = handlePos < 0 ? 0 : handlePos; t.setTransformStyle(t.current, 'scaleX(' + newWidth / tW + ')'); t.setTransformStyle(t.handle, 'translateX(' + handlePos + 'px)'); if (t.options.useSmoothHover && !(0, _dom.hasClass)(t.hovered, 'no-hover')) { var pos = parseInt(t.hovered.getAttribute('pos'), 10); pos = isNaN(pos) ? 0 : pos; var hoverScaleX = pos / tW - handlePos / tW; t.hovered.style.left = handlePos + 'px'; t.setTransformStyle(t.hovered, 'scaleX(' + hoverScaleX + ')'); if (hoverScaleX >= 0) { (0, _dom.removeClass)(t.hovered, 'negative'); } else { (0, _dom.addClass)(t.hovered, 'negative'); } } } } } }); },{"16":16,"2":2,"25":25,"26":26,"30":30,"5":5}],12:[function(_dereq_,module,exports){ 'use strict'; var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _player = _dereq_(16); var _player2 = _interopRequireDefault(_player); var _time = _dereq_(30); var _dom = _dereq_(26); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } Object.assign(_player.config, { duration: 0, timeAndDurationSeparator: ' | ' }); Object.assign(_player2.default.prototype, { buildcurrent: function buildcurrent(player, controls, layers, media) { var t = this, time = _document2.default.createElement('div'); time.className = t.options.classPrefix + 'time'; time.setAttribute('role', 'timer'); time.setAttribute('aria-live', 'off'); time.innerHTML = '' + (0, _time.secondsToTimeCode)(0, player.options.alwaysShowHours, player.options.showTimecodeFrameCount, player.options.framesPerSecond, player.options.secondsDecimalLength, player.options.timeFormat) + ''; t.addControlElement(time, 'current'); player.updateCurrent(); t.updateTimeCallback = function () { if (t.controlsAreVisible) { player.updateCurrent(); } }; media.addEventListener('timeupdate', t.updateTimeCallback); }, cleancurrent: function cleancurrent(player, controls, layers, media) { media.removeEventListener('timeupdate', player.updateTimeCallback); }, buildduration: function buildduration(player, controls, layers, media) { var t = this, currTime = controls.lastChild.querySelector('.' + t.options.classPrefix + 'currenttime'); if (currTime) { controls.querySelector('.' + t.options.classPrefix + 'time').innerHTML += t.options.timeAndDurationSeparator + '' + ((0, _time.secondsToTimeCode)(t.options.duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat) + ''); } else { if (controls.querySelector('.' + t.options.classPrefix + 'currenttime')) { (0, _dom.addClass)(controls.querySelector('.' + t.options.classPrefix + 'currenttime').parentNode, t.options.classPrefix + 'currenttime-container'); } var duration = _document2.default.createElement('div'); duration.className = t.options.classPrefix + 'time ' + t.options.classPrefix + 'duration-container'; duration.innerHTML = '' + ((0, _time.secondsToTimeCode)(t.options.duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat) + ''); t.addControlElement(duration, 'duration'); } t.updateDurationCallback = function () { if (t.controlsAreVisible) { player.updateDuration(); } }; media.addEventListener('timeupdate', t.updateDurationCallback); }, cleanduration: function cleanduration(player, controls, layers, media) { media.removeEventListener('timeupdate', player.updateDurationCallback); }, updateCurrent: function updateCurrent() { var t = this; var currentTime = t.getCurrentTime(); if (isNaN(currentTime)) { currentTime = 0; } var timecode = (0, _time.secondsToTimeCode)(currentTime, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat); if (timecode.length > 5) { (0, _dom.addClass)(t.getElement(t.container), t.options.classPrefix + 'long-video'); } else { (0, _dom.removeClass)(t.getElement(t.container), t.options.classPrefix + 'long-video'); } if (t.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'currenttime')) { t.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'currenttime').innerText = timecode; } }, updateDuration: function updateDuration() { var t = this; var duration = t.getDuration(); if (t.media !== undefined && (isNaN(duration) || duration === Infinity || duration < 0)) { t.media.duration = t.options.duration = duration = 0; } if (t.options.duration > 0) { duration = t.options.duration; } var timecode = (0, _time.secondsToTimeCode)(duration, t.options.alwaysShowHours, t.options.showTimecodeFrameCount, t.options.framesPerSecond, t.options.secondsDecimalLength, t.options.timeFormat); if (timecode.length > 5) { (0, _dom.addClass)(t.getElement(t.container), t.options.classPrefix + 'long-video'); } else { (0, _dom.removeClass)(t.getElement(t.container), t.options.classPrefix + 'long-video'); } if (t.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'duration') && duration > 0) { t.getElement(t.controls).querySelector('.' + t.options.classPrefix + 'duration').innerHTML = timecode; } } }); },{"16":16,"2":2,"26":26,"30":30}],13:[function(_dereq_,module,exports){ 'use strict'; var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); var _i18n = _dereq_(5); var _i18n2 = _interopRequireDefault(_i18n); var _player = _dereq_(16); var _player2 = _interopRequireDefault(_player); var _time = _dereq_(30); var _general = _dereq_(27); var _dom = _dereq_(26); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } Object.assign(_player.config, { startLanguage: '', tracksText: null, chaptersText: null, tracksAriaLive: false, hideCaptionsButtonWhenEmpty: true, toggleCaptionsButtonWhenOnlyOne: false, slidesSelector: '' }); Object.assign(_player2.default.prototype, { hasChapters: false, buildtracks: function buildtracks(player, controls, layers, media) { this.findTracks(); if (!player.tracks.length && (!player.trackFiles || !player.trackFiles.length === 0)) { return; } var t = this, attr = t.options.tracksAriaLive ? ' role="log" aria-live="assertive" aria-atomic="false"' : '', tracksTitle = (0, _general.isString)(t.options.tracksText) ? t.options.tracksText : _i18n2.default.t('mejs.captions-subtitles'), chaptersTitle = (0, _general.isString)(t.options.chaptersText) ? t.options.chaptersText : _i18n2.default.t('mejs.captions-chapters'), total = player.trackFiles === null ? player.tracks.length : player.trackFiles.length; if (t.domNode.textTracks) { for (var i = t.domNode.textTracks.length - 1; i >= 0; i--) { t.domNode.textTracks[i].mode = 'hidden'; } } t.cleartracks(player); player.captions = _document2.default.createElement('div'); player.captions.className = t.options.classPrefix + 'captions-layer ' + t.options.classPrefix + 'layer'; player.captions.innerHTML = '
      ' + ('') + '
      '; player.captions.style.display = 'none'; layers.insertBefore(player.captions, layers.firstChild); player.captionsText = player.captions.querySelector('.' + t.options.classPrefix + 'captions-text'); player.captionsButton = _document2.default.createElement('div'); player.captionsButton.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'captions-button'; player.captionsButton.innerHTML = '' + ('
      ') + ('
        ') + ('
      • ') + ('' + ('') + '
      • ' + '
      ' + '
      '; t.addControlElement(player.captionsButton, 'tracks'); player.captionsButton.querySelector('.' + t.options.classPrefix + 'captions-selector-input').disabled = false; player.chaptersButton = _document2.default.createElement('div'); player.chaptersButton.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'chapters-button'; player.chaptersButton.innerHTML = '' + ('
      ') + ('
        ') + '
        '; var subtitleCount = 0; for (var _i = 0; _i < total; _i++) { var kind = player.tracks[_i].kind, src = player.tracks[_i].src; if (src.trim()) { if (kind === 'subtitles' || kind === 'captions') { subtitleCount++; } else if (kind === 'chapters' && !controls.querySelector('.' + t.options.classPrefix + 'chapter-selector')) { player.captionsButton.parentNode.insertBefore(player.chaptersButton, player.captionsButton); } } } player.trackToLoad = -1; player.selectedTrack = null; player.isLoadingTrack = false; for (var _i2 = 0; _i2 < total; _i2++) { var _kind = player.tracks[_i2].kind; if (player.tracks[_i2].src.trim() && (_kind === 'subtitles' || _kind === 'captions')) { player.addTrackButton(player.tracks[_i2].trackId, player.tracks[_i2].srclang, player.tracks[_i2].label); } } player.loadNextTrack(); var inEvents = ['mouseenter', 'focusin'], outEvents = ['mouseleave', 'focusout']; if (t.options.toggleCaptionsButtonWhenOnlyOne && subtitleCount === 1) { player.captionsButton.addEventListener('click', function (e) { var trackId = 'none'; if (player.selectedTrack === null) { trackId = player.tracks[0].trackId; } var keyboard = e.keyCode || e.which; player.setTrack(trackId, typeof keyboard !== 'undefined'); }); } else { var labels = player.captionsButton.querySelectorAll('.' + t.options.classPrefix + 'captions-selector-label'), captions = player.captionsButton.querySelectorAll('input[type=radio]'); for (var _i3 = 0, _total = inEvents.length; _i3 < _total; _i3++) { player.captionsButton.addEventListener(inEvents[_i3], function () { (0, _dom.removeClass)(this.querySelector('.' + t.options.classPrefix + 'captions-selector'), t.options.classPrefix + 'offscreen'); }); } for (var _i4 = 0, _total2 = outEvents.length; _i4 < _total2; _i4++) { player.captionsButton.addEventListener(outEvents[_i4], function () { (0, _dom.addClass)(this.querySelector('.' + t.options.classPrefix + 'captions-selector'), t.options.classPrefix + 'offscreen'); }); } for (var _i5 = 0, _total3 = captions.length; _i5 < _total3; _i5++) { captions[_i5].addEventListener('click', function (e) { var keyboard = e.keyCode || e.which; player.setTrack(this.value, typeof keyboard !== 'undefined'); }); } for (var _i6 = 0, _total4 = labels.length; _i6 < _total4; _i6++) { labels[_i6].addEventListener('click', function (e) { var radio = (0, _dom.siblings)(this, function (el) { return el.tagName === 'INPUT'; })[0], event = (0, _general.createEvent)('click', radio); radio.dispatchEvent(event); e.preventDefault(); }); } player.captionsButton.addEventListener('keydown', function (e) { e.stopPropagation(); }); } for (var _i7 = 0, _total5 = inEvents.length; _i7 < _total5; _i7++) { player.chaptersButton.addEventListener(inEvents[_i7], function () { if (this.querySelector('.' + t.options.classPrefix + 'chapters-selector-list').children.length) { (0, _dom.removeClass)(this.querySelector('.' + t.options.classPrefix + 'chapters-selector'), t.options.classPrefix + 'offscreen'); } }); } for (var _i8 = 0, _total6 = outEvents.length; _i8 < _total6; _i8++) { player.chaptersButton.addEventListener(outEvents[_i8], function () { (0, _dom.addClass)(this.querySelector('.' + t.options.classPrefix + 'chapters-selector'), t.options.classPrefix + 'offscreen'); }); } player.chaptersButton.addEventListener('keydown', function (e) { e.stopPropagation(); }); if (!player.options.alwaysShowControls) { player.getElement(player.container).addEventListener('controlsshown', function () { (0, _dom.addClass)(player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'captions-position'), t.options.classPrefix + 'captions-position-hover'); }); player.getElement(player.container).addEventListener('controlshidden', function () { if (!media.paused) { (0, _dom.removeClass)(player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'captions-position'), t.options.classPrefix + 'captions-position-hover'); } }); } else { (0, _dom.addClass)(player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'captions-position'), t.options.classPrefix + 'captions-position-hover'); } media.addEventListener('timeupdate', function () { player.displayCaptions(); }); if (player.options.slidesSelector !== '') { player.slidesContainer = _document2.default.querySelectorAll(player.options.slidesSelector); media.addEventListener('timeupdate', function () { player.displaySlides(); }); } }, cleartracks: function cleartracks(player) { if (player) { if (player.captions) { player.captions.remove(); } if (player.chapters) { player.chapters.remove(); } if (player.captionsText) { player.captionsText.remove(); } if (player.captionsButton) { player.captionsButton.remove(); } if (player.chaptersButton) { player.chaptersButton.remove(); } } }, rebuildtracks: function rebuildtracks() { var t = this; t.findTracks(); t.buildtracks(t, t.getElement(t.controls), t.getElement(t.layers), t.media); }, findTracks: function findTracks() { var t = this, tracktags = t.trackFiles === null ? t.node.querySelectorAll('track') : t.trackFiles, total = tracktags.length; t.tracks = []; for (var i = 0; i < total; i++) { var track = tracktags[i], srclang = track.getAttribute('srclang').toLowerCase() || '', trackId = t.id + '_track_' + i + '_' + track.getAttribute('kind') + '_' + srclang; t.tracks.push({ trackId: trackId, srclang: srclang, src: track.getAttribute('src'), kind: track.getAttribute('kind'), label: track.getAttribute('label') || '', entries: [], isLoaded: false }); } }, setTrack: function setTrack(trackId, setByKeyboard) { var t = this, radios = t.captionsButton.querySelectorAll('input[type="radio"]'), captions = t.captionsButton.querySelectorAll('.' + t.options.classPrefix + 'captions-selected'), track = t.captionsButton.querySelector('input[value="' + trackId + '"]'); for (var i = 0, total = radios.length; i < total; i++) { radios[i].checked = false; } for (var _i9 = 0, _total7 = captions.length; _i9 < _total7; _i9++) { (0, _dom.removeClass)(captions[_i9], t.options.classPrefix + 'captions-selected'); } track.checked = true; var labels = (0, _dom.siblings)(track, function (el) { return (0, _dom.hasClass)(el, t.options.classPrefix + 'captions-selector-label'); }); for (var _i10 = 0, _total8 = labels.length; _i10 < _total8; _i10++) { (0, _dom.addClass)(labels[_i10], t.options.classPrefix + 'captions-selected'); } if (trackId === 'none') { t.selectedTrack = null; (0, _dom.removeClass)(t.captionsButton, t.options.classPrefix + 'captions-enabled'); } else { for (var _i11 = 0, _total9 = t.tracks.length; _i11 < _total9; _i11++) { var _track = t.tracks[_i11]; if (_track.trackId === trackId) { if (t.selectedTrack === null) { (0, _dom.addClass)(t.captionsButton, t.options.classPrefix + 'captions-enabled'); } t.selectedTrack = _track; t.captions.setAttribute('lang', t.selectedTrack.srclang); t.displayCaptions(); break; } } } var event = (0, _general.createEvent)('captionschange', t.media); event.detail.caption = t.selectedTrack; t.media.dispatchEvent(event); if (!setByKeyboard) { setTimeout(function () { t.getElement(t.container).focus(); }, 500); } }, loadNextTrack: function loadNextTrack() { var t = this; t.trackToLoad++; if (t.trackToLoad < t.tracks.length) { t.isLoadingTrack = true; t.loadTrack(t.trackToLoad); } else { t.isLoadingTrack = false; t.checkForTracks(); } }, loadTrack: function loadTrack(index) { var t = this, track = t.tracks[index]; if (track !== undefined && (track.src !== undefined || track.src !== "")) { (0, _dom.ajax)(track.src, 'text', function (d) { track.entries = typeof d === 'string' && /' + ('') + ('') + ''; }, checkForTracks: function checkForTracks() { var t = this; var hasSubtitles = false; if (t.options.hideCaptionsButtonWhenEmpty) { for (var i = 0, total = t.tracks.length; i < total; i++) { var kind = t.tracks[i].kind; if ((kind === 'subtitles' || kind === 'captions') && t.tracks[i].isLoaded) { hasSubtitles = true; break; } } t.captionsButton.style.display = hasSubtitles ? '' : 'none'; t.setControlsSize(); } }, displayCaptions: function displayCaptions() { if (this.tracks === undefined) { return; } var t = this, track = t.selectedTrack, sanitize = function sanitize(html) { var div = _document2.default.createElement('div'); div.innerHTML = html; var scripts = div.getElementsByTagName('script'); var i = scripts.length; while (i--) { scripts[i].remove(); } var allElements = div.getElementsByTagName('*'); for (var _i12 = 0, n = allElements.length; _i12 < n; _i12++) { var attributesObj = allElements[_i12].attributes, attributes = Array.prototype.slice.call(attributesObj); for (var j = 0, total = attributes.length; j < total; j++) { if (attributes[j].name.startsWith('on') || attributes[j].value.startsWith('javascript')) { allElements[_i12].remove(); } else if (attributes[j].name === 'style') { allElements[_i12].removeAttribute(attributes[j].name); } } } return div.innerHTML; }; if (track !== null && track.isLoaded) { var i = t.searchTrackPosition(track.entries, t.media.currentTime); if (i > -1) { var text = track.entries[i].text; if (typeof t.options.captionTextPreprocessor === 'function') text = t.options.captionTextPreprocessor(text); t.captionsText.innerHTML = sanitize(text); t.captionsText.className = t.options.classPrefix + 'captions-text ' + (track.entries[i].identifier || ''); t.captions.style.display = ''; t.captions.style.height = '0px'; return; } t.captions.style.display = 'none'; } else { t.captions.style.display = 'none'; } }, setupSlides: function setupSlides(track) { var t = this; t.slides = track; t.slides.entries.imgs = [t.slides.entries.length]; t.showSlide(0); }, showSlide: function showSlide(index) { var _this = this; var t = this; if (t.tracks === undefined || t.slidesContainer === undefined) { return; } var url = t.slides.entries[index].text; var img = t.slides.entries[index].imgs; if (img === undefined || img.fadeIn === undefined) { var image = _document2.default.createElement('img'); image.src = url; image.addEventListener('load', function () { var self = _this, visible = (0, _dom.siblings)(self, function (el) { return visible(el); }); self.style.display = 'none'; t.slidesContainer.innerHTML += self.innerHTML; (0, _dom.fadeIn)(t.slidesContainer.querySelector(image)); for (var i = 0, total = visible.length; i < total; i++) { (0, _dom.fadeOut)(visible[i], 400); } }); t.slides.entries[index].imgs = img = image; } else if (!(0, _dom.visible)(img)) { var _visible = (0, _dom.siblings)(self, function (el) { return _visible(el); }); (0, _dom.fadeIn)(t.slidesContainer.querySelector(img)); for (var i = 0, total = _visible.length; i < total; i++) { (0, _dom.fadeOut)(_visible[i]); } } }, displaySlides: function displaySlides() { var t = this; if (this.slides === undefined) { return; } var slides = t.slides, i = t.searchTrackPosition(slides.entries, t.media.currentTime); if (i > -1) { t.showSlide(i); } }, drawChapters: function drawChapters(chapters) { var t = this, total = chapters.entries.length; if (!total) { return; } t.chaptersButton.querySelector('ul').innerHTML = ''; for (var i = 0; i < total; i++) { t.chaptersButton.querySelector('ul').innerHTML += '
      • ' + ('') + ('') + '
      • '; } var radios = t.chaptersButton.querySelectorAll('input[type="radio"]'), labels = t.chaptersButton.querySelectorAll('.' + t.options.classPrefix + 'chapters-selector-label'); for (var _i13 = 0, _total10 = radios.length; _i13 < _total10; _i13++) { radios[_i13].disabled = false; radios[_i13].checked = false; radios[_i13].addEventListener('click', function (e) { var self = this, listItems = t.chaptersButton.querySelectorAll('li'), label = (0, _dom.siblings)(self, function (el) { return (0, _dom.hasClass)(el, t.options.classPrefix + 'chapters-selector-label'); })[0]; self.checked = true; self.parentNode.setAttribute('aria-checked', true); (0, _dom.addClass)(label, t.options.classPrefix + 'chapters-selected'); (0, _dom.removeClass)(t.chaptersButton.querySelector('.' + t.options.classPrefix + 'chapters-selected'), t.options.classPrefix + 'chapters-selected'); for (var _i14 = 0, _total11 = listItems.length; _i14 < _total11; _i14++) { listItems[_i14].setAttribute('aria-checked', false); } var keyboard = e.keyCode || e.which; if (typeof keyboard === 'undefined') { setTimeout(function () { t.getElement(t.container).focus(); }, 500); } t.media.setCurrentTime(parseFloat(self.value)); if (t.media.paused) { t.media.play(); } }); } for (var _i15 = 0, _total12 = labels.length; _i15 < _total12; _i15++) { labels[_i15].addEventListener('click', function (e) { var radio = (0, _dom.siblings)(this, function (el) { return el.tagName === 'INPUT'; })[0], event = (0, _general.createEvent)('click', radio); radio.dispatchEvent(event); e.preventDefault(); }); } }, searchTrackPosition: function searchTrackPosition(tracks, currentTime) { var lo = 0, hi = tracks.length - 1, mid = void 0, start = void 0, stop = void 0; while (lo <= hi) { mid = lo + hi >> 1; start = tracks[mid].start; stop = tracks[mid].stop; if (currentTime >= start && currentTime < stop) { return mid; } else if (start < currentTime) { lo = mid + 1; } else if (start > currentTime) { hi = mid - 1; } } return -1; } }); _mejs2.default.language = { codes: { af: 'mejs.afrikaans', sq: 'mejs.albanian', ar: 'mejs.arabic', be: 'mejs.belarusian', bg: 'mejs.bulgarian', ca: 'mejs.catalan', zh: 'mejs.chinese', 'zh-cn': 'mejs.chinese-simplified', 'zh-tw': 'mejs.chines-traditional', hr: 'mejs.croatian', cs: 'mejs.czech', da: 'mejs.danish', nl: 'mejs.dutch', en: 'mejs.english', et: 'mejs.estonian', fl: 'mejs.filipino', fi: 'mejs.finnish', fr: 'mejs.french', gl: 'mejs.galician', de: 'mejs.german', el: 'mejs.greek', ht: 'mejs.haitian-creole', iw: 'mejs.hebrew', hi: 'mejs.hindi', hu: 'mejs.hungarian', is: 'mejs.icelandic', id: 'mejs.indonesian', ga: 'mejs.irish', it: 'mejs.italian', ja: 'mejs.japanese', ko: 'mejs.korean', lv: 'mejs.latvian', lt: 'mejs.lithuanian', mk: 'mejs.macedonian', ms: 'mejs.malay', mt: 'mejs.maltese', no: 'mejs.norwegian', fa: 'mejs.persian', pl: 'mejs.polish', pt: 'mejs.portuguese', ro: 'mejs.romanian', ru: 'mejs.russian', sr: 'mejs.serbian', sk: 'mejs.slovak', sl: 'mejs.slovenian', es: 'mejs.spanish', sw: 'mejs.swahili', sv: 'mejs.swedish', tl: 'mejs.tagalog', th: 'mejs.thai', tr: 'mejs.turkish', uk: 'mejs.ukrainian', vi: 'mejs.vietnamese', cy: 'mejs.welsh', yi: 'mejs.yiddish' } }; _mejs2.default.TrackFormatParser = { webvtt: { pattern: /^((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{1,3})?) --\> ((?:[0-9]{1,2}:)?[0-9]{2}:[0-9]{2}([,.][0-9]{3})?)(.*)$/, parse: function parse(trackText) { var lines = trackText.split(/\r?\n/), entries = []; var timecode = void 0, text = void 0, identifier = void 0; for (var i = 0, total = lines.length; i < total; i++) { timecode = this.pattern.exec(lines[i]); if (timecode && i < lines.length) { if (i - 1 >= 0 && lines[i - 1] !== '') { identifier = lines[i - 1]; } i++; text = lines[i]; i++; while (lines[i] !== '' && i < lines.length) { text = text + '\n' + lines[i]; i++; } text = text === null ? '' : text.trim().replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig, "$1"); entries.push({ identifier: identifier, start: (0, _time.convertSMPTEtoSeconds)(timecode[1]) === 0 ? 0.200 : (0, _time.convertSMPTEtoSeconds)(timecode[1]), stop: (0, _time.convertSMPTEtoSeconds)(timecode[3]), text: text, settings: timecode[5] }); } identifier = ''; } return entries; } }, dfxp: { parse: function parse(trackText) { var trackElem = _document2.default.adoptNode(new DOMParser().parseFromString(trackText, 'application/xml').documentElement), container = trackElem.querySelector('div'), lines = container.querySelectorAll('p'), styleNode = _document2.default.getElementById(container.getAttribute('style')), entries = []; var styles = void 0; if (styleNode) { styleNode.removeAttribute('id'); var attributes = styleNode.attributes; if (attributes.length) { styles = {}; for (var i = 0, total = attributes.length; i < total; i++) { styles[attributes[i].name.split(":")[1]] = attributes[i].value; } } } for (var _i16 = 0, _total13 = lines.length; _i16 < _total13; _i16++) { var style = void 0, _temp = { start: null, stop: null, style: null, text: null }; if (lines[_i16].getAttribute('begin')) { _temp.start = (0, _time.convertSMPTEtoSeconds)(lines[_i16].getAttribute('begin')); } if (!_temp.start && lines[_i16 - 1].getAttribute('end')) { _temp.start = (0, _time.convertSMPTEtoSeconds)(lines[_i16 - 1].getAttribute('end')); } if (lines[_i16].getAttribute('end')) { _temp.stop = (0, _time.convertSMPTEtoSeconds)(lines[_i16].getAttribute('end')); } if (!_temp.stop && lines[_i16 + 1].getAttribute('begin')) { _temp.stop = (0, _time.convertSMPTEtoSeconds)(lines[_i16 + 1].getAttribute('begin')); } if (styles) { style = ''; for (var _style in styles) { style += _style + ': ' + styles[_style] + ';'; } } if (style) { _temp.style = style; } if (_temp.start === 0) { _temp.start = 0.200; } _temp.text = lines[_i16].innerHTML.trim().replace(/(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_| !:, .; ]*[-A-Z0-9+&@#\/%=~_|])/ig, "$1"); entries.push(_temp); } return entries; } } }; },{"16":16,"2":2,"26":26,"27":27,"30":30,"5":5,"7":7}],14:[function(_dereq_,module,exports){ 'use strict'; var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _player = _dereq_(16); var _player2 = _interopRequireDefault(_player); var _i18n = _dereq_(5); var _i18n2 = _interopRequireDefault(_i18n); var _constants = _dereq_(25); var _general = _dereq_(27); var _dom = _dereq_(26); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } Object.assign(_player.config, { muteText: null, unmuteText: null, allyVolumeControlText: null, hideVolumeOnTouchDevices: true, audioVolume: 'horizontal', videoVolume: 'vertical', startVolume: 0.8 }); Object.assign(_player2.default.prototype, { buildvolume: function buildvolume(player, controls, layers, media) { if ((_constants.IS_ANDROID || _constants.IS_IOS) && this.options.hideVolumeOnTouchDevices) { return; } var t = this, mode = t.isVideo ? t.options.videoVolume : t.options.audioVolume, muteText = (0, _general.isString)(t.options.muteText) ? t.options.muteText : _i18n2.default.t('mejs.mute'), unmuteText = (0, _general.isString)(t.options.unmuteText) ? t.options.unmuteText : _i18n2.default.t('mejs.unmute'), volumeControlText = (0, _general.isString)(t.options.allyVolumeControlText) ? t.options.allyVolumeControlText : _i18n2.default.t('mejs.volume-help-text'), mute = _document2.default.createElement('div'); mute.className = t.options.classPrefix + 'button ' + t.options.classPrefix + 'volume-button ' + t.options.classPrefix + 'mute'; mute.innerHTML = mode === 'horizontal' ? '' : '' + ('' + ('' + volumeControlText + '') + ('
        ') + ('
        ') + ('
        ') + '
        ' + '
        '; t.addControlElement(mute, 'volume'); t.options.keyActions.push({ keys: [38], action: function action(player) { var volumeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'volume-slider'); if (volumeSlider && volumeSlider.matches(':focus')) { volumeSlider.style.display = 'block'; } if (player.isVideo) { player.showControls(); player.startControlsTimer(); } var newVolume = Math.min(player.volume + 0.1, 1); player.setVolume(newVolume); if (newVolume > 0) { player.setMuted(false); } } }, { keys: [40], action: function action(player) { var volumeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'volume-slider'); if (volumeSlider) { volumeSlider.style.display = 'block'; } if (player.isVideo) { player.showControls(); player.startControlsTimer(); } var newVolume = Math.max(player.volume - 0.1, 0); player.setVolume(newVolume); if (newVolume <= 0.1) { player.setMuted(true); } } }, { keys: [77], action: function action(player) { var volumeSlider = player.getElement(player.container).querySelector('.' + t.options.classPrefix + 'volume-slider'); if (volumeSlider) { volumeSlider.style.display = 'block'; } if (player.isVideo) { player.showControls(); player.startControlsTimer(); } if (player.media.muted) { player.setMuted(false); } else { player.setMuted(true); } } }); if (mode === 'horizontal') { var anchor = _document2.default.createElement('a'); anchor.className = t.options.classPrefix + 'horizontal-volume-slider'; anchor.href = 'javascript:void(0);'; anchor.setAttribute('aria-label', _i18n2.default.t('mejs.volume-slider')); anchor.setAttribute('aria-valuemin', 0); anchor.setAttribute('aria-valuemax', 100); anchor.setAttribute('aria-valuenow', 100); anchor.setAttribute('role', 'slider'); anchor.innerHTML += '' + volumeControlText + '' + ('
        ') + ('
        ') + ('
        ') + '
        '; mute.parentNode.insertBefore(anchor, mute.nextSibling); } var mouseIsDown = false, mouseIsOver = false, modified = false, updateVolumeSlider = function updateVolumeSlider() { var volume = Math.floor(media.volume * 100); volumeSlider.setAttribute('aria-valuenow', volume); volumeSlider.setAttribute('aria-valuetext', volume + '%'); }; var volumeSlider = mode === 'vertical' ? t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-slider') : t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'horizontal-volume-slider'), volumeTotal = mode === 'vertical' ? t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-total') : t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'horizontal-volume-total'), volumeCurrent = mode === 'vertical' ? t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-current') : t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'horizontal-volume-current'), volumeHandle = mode === 'vertical' ? t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'volume-handle') : t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'horizontal-volume-handle'), positionVolumeHandle = function positionVolumeHandle(volume) { if (volume === null || isNaN(volume) || volume === undefined) { return; } volume = Math.max(0, volume); volume = Math.min(volume, 1); if (volume === 0) { (0, _dom.removeClass)(mute, t.options.classPrefix + 'mute'); (0, _dom.addClass)(mute, t.options.classPrefix + 'unmute'); var button = mute.firstElementChild; button.setAttribute('title', unmuteText); button.setAttribute('aria-label', unmuteText); } else { (0, _dom.removeClass)(mute, t.options.classPrefix + 'unmute'); (0, _dom.addClass)(mute, t.options.classPrefix + 'mute'); var _button = mute.firstElementChild; _button.setAttribute('title', muteText); _button.setAttribute('aria-label', muteText); } var volumePercentage = volume * 100 + '%', volumeStyles = getComputedStyle(volumeHandle); if (mode === 'vertical') { volumeCurrent.style.bottom = 0; volumeCurrent.style.height = volumePercentage; volumeHandle.style.bottom = volumePercentage; volumeHandle.style.marginBottom = -parseFloat(volumeStyles.height) / 2 + 'px'; } else { volumeCurrent.style.left = 0; volumeCurrent.style.width = volumePercentage; volumeHandle.style.left = volumePercentage; volumeHandle.style.marginLeft = -parseFloat(volumeStyles.width) / 2 + 'px'; } }, handleVolumeMove = function handleVolumeMove(e) { var totalOffset = (0, _dom.offset)(volumeTotal), volumeStyles = getComputedStyle(volumeTotal); modified = true; var volume = null; if (mode === 'vertical') { var railHeight = parseFloat(volumeStyles.height), newY = e.pageY - totalOffset.top; volume = (railHeight - newY) / railHeight; if (totalOffset.top === 0 || totalOffset.left === 0) { return; } } else { var railWidth = parseFloat(volumeStyles.width), newX = e.pageX - totalOffset.left; volume = newX / railWidth; } volume = Math.max(0, volume); volume = Math.min(volume, 1); positionVolumeHandle(volume); t.setMuted(volume === 0); t.setVolume(volume); e.preventDefault(); e.stopPropagation(); }, toggleMute = function toggleMute() { if (t.muted) { positionVolumeHandle(0); (0, _dom.removeClass)(mute, t.options.classPrefix + 'mute'); (0, _dom.addClass)(mute, t.options.classPrefix + 'unmute'); } else { positionVolumeHandle(media.volume); (0, _dom.removeClass)(mute, t.options.classPrefix + 'unmute'); (0, _dom.addClass)(mute, t.options.classPrefix + 'mute'); } }; player.getElement(player.container).addEventListener('keydown', function (e) { var hasFocus = !!e.target.closest('.' + t.options.classPrefix + 'container'); if (!hasFocus && mode === 'vertical') { volumeSlider.style.display = 'none'; } }); mute.addEventListener('mouseenter', function (e) { if (e.target === mute) { volumeSlider.style.display = 'block'; mouseIsOver = true; e.preventDefault(); e.stopPropagation(); } }); mute.addEventListener('focusin', function () { volumeSlider.style.display = 'block'; mouseIsOver = true; }); mute.addEventListener('focusout', function (e) { if ((!e.relatedTarget || e.relatedTarget && !e.relatedTarget.matches('.' + t.options.classPrefix + 'volume-slider')) && mode === 'vertical') { volumeSlider.style.display = 'none'; } }); mute.addEventListener('mouseleave', function () { mouseIsOver = false; if (!mouseIsDown && mode === 'vertical') { volumeSlider.style.display = 'none'; } }); mute.addEventListener('focusout', function () { mouseIsOver = false; }); mute.addEventListener('keydown', function (e) { if (t.options.enableKeyboard && t.options.keyActions.length) { var keyCode = e.which || e.keyCode || 0, volume = media.volume; switch (keyCode) { case 38: volume = Math.min(volume + 0.1, 1); break; case 40: volume = Math.max(0, volume - 0.1); break; default: return true; } mouseIsDown = false; positionVolumeHandle(volume); media.setVolume(volume); e.preventDefault(); e.stopPropagation(); } }); mute.querySelector('button').addEventListener('click', function () { media.setMuted(!media.muted); var event = (0, _general.createEvent)('volumechange', media); media.dispatchEvent(event); }); volumeSlider.addEventListener('dragstart', function () { return false; }); volumeSlider.addEventListener('mouseover', function () { mouseIsOver = true; }); volumeSlider.addEventListener('focusin', function () { volumeSlider.style.display = 'block'; mouseIsOver = true; }); volumeSlider.addEventListener('focusout', function () { mouseIsOver = false; if (!mouseIsDown && mode === 'vertical') { volumeSlider.style.display = 'none'; } }); volumeSlider.addEventListener('mousedown', function (e) { handleVolumeMove(e); t.globalBind('mousemove.vol', function (event) { var target = event.target; if (mouseIsDown && (target === volumeSlider || target.closest(mode === 'vertical' ? '.' + t.options.classPrefix + 'volume-slider' : '.' + t.options.classPrefix + 'horizontal-volume-slider'))) { handleVolumeMove(event); } }); t.globalBind('mouseup.vol', function () { mouseIsDown = false; if (!mouseIsOver && mode === 'vertical') { volumeSlider.style.display = 'none'; } }); mouseIsDown = true; e.preventDefault(); e.stopPropagation(); }); media.addEventListener('volumechange', function (e) { if (!mouseIsDown) { toggleMute(); } updateVolumeSlider(e); }); var rendered = false; media.addEventListener('rendererready', function () { if (!modified) { setTimeout(function () { rendered = true; if (player.options.startVolume === 0 || media.originalNode.muted) { media.setMuted(true); } media.setVolume(player.options.startVolume); t.setControlsSize(); }, 250); } }); media.addEventListener('loadedmetadata', function () { setTimeout(function () { if (!modified && !rendered) { if (player.options.startVolume === 0 || media.originalNode.muted) { media.setMuted(true); } if (player.options.startVolume === 0) { player.options.startVolume = 0; } media.setVolume(player.options.startVolume); t.setControlsSize(); } rendered = false; }, 250); }); if (player.options.startVolume === 0 || media.originalNode.muted) { media.setMuted(true); if (player.options.startVolume === 0) { player.options.startVolume = 0; } toggleMute(); } t.getElement(t.container).addEventListener('controlsresize', function () { toggleMute(); }); } }); },{"16":16,"2":2,"25":25,"26":26,"27":27,"5":5}],15:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var EN = exports.EN = { 'mejs.plural-form': 1, 'mejs.download-file': 'Download File', 'mejs.install-flash': 'You are using a browser that does not have Flash player enabled or installed. Please turn on your Flash player plugin or download the latest version from https://get.adobe.com/flashplayer/', 'mejs.fullscreen': 'Fullscreen', 'mejs.play': 'Play', 'mejs.pause': 'Pause', 'mejs.time-slider': 'Time Slider', 'mejs.time-help-text': 'Use Left/Right Arrow keys to advance one second, Up/Down arrows to advance ten seconds.', 'mejs.live-broadcast': 'Live Broadcast', 'mejs.volume-help-text': 'Use Up/Down Arrow keys to increase or decrease volume.', 'mejs.unmute': 'Unmute', 'mejs.mute': 'Mute', 'mejs.volume-slider': 'Volume Slider', 'mejs.video-player': 'Video Player', 'mejs.audio-player': 'Audio Player', 'mejs.captions-subtitles': 'Captions/Subtitles', 'mejs.captions-chapters': 'Chapters', 'mejs.none': 'None', 'mejs.afrikaans': 'Afrikaans', 'mejs.albanian': 'Albanian', 'mejs.arabic': 'Arabic', 'mejs.belarusian': 'Belarusian', 'mejs.bulgarian': 'Bulgarian', 'mejs.catalan': 'Catalan', 'mejs.chinese': 'Chinese', 'mejs.chinese-simplified': 'Chinese (Simplified)', 'mejs.chinese-traditional': 'Chinese (Traditional)', 'mejs.croatian': 'Croatian', 'mejs.czech': 'Czech', 'mejs.danish': 'Danish', 'mejs.dutch': 'Dutch', 'mejs.english': 'English', 'mejs.estonian': 'Estonian', 'mejs.filipino': 'Filipino', 'mejs.finnish': 'Finnish', 'mejs.french': 'French', 'mejs.galician': 'Galician', 'mejs.german': 'German', 'mejs.greek': 'Greek', 'mejs.haitian-creole': 'Haitian Creole', 'mejs.hebrew': 'Hebrew', 'mejs.hindi': 'Hindi', 'mejs.hungarian': 'Hungarian', 'mejs.icelandic': 'Icelandic', 'mejs.indonesian': 'Indonesian', 'mejs.irish': 'Irish', 'mejs.italian': 'Italian', 'mejs.japanese': 'Japanese', 'mejs.korean': 'Korean', 'mejs.latvian': 'Latvian', 'mejs.lithuanian': 'Lithuanian', 'mejs.macedonian': 'Macedonian', 'mejs.malay': 'Malay', 'mejs.maltese': 'Maltese', 'mejs.norwegian': 'Norwegian', 'mejs.persian': 'Persian', 'mejs.polish': 'Polish', 'mejs.portuguese': 'Portuguese', 'mejs.romanian': 'Romanian', 'mejs.russian': 'Russian', 'mejs.serbian': 'Serbian', 'mejs.slovak': 'Slovak', 'mejs.slovenian': 'Slovenian', 'mejs.spanish': 'Spanish', 'mejs.swahili': 'Swahili', 'mejs.swedish': 'Swedish', 'mejs.tagalog': 'Tagalog', 'mejs.thai': 'Thai', 'mejs.turkish': 'Turkish', 'mejs.ukrainian': 'Ukrainian', 'mejs.vietnamese': 'Vietnamese', 'mejs.welsh': 'Welsh', 'mejs.yiddish': 'Yiddish' }; },{}],16:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.config = undefined; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); var _mediaelement = _dereq_(6); var _mediaelement2 = _interopRequireDefault(_mediaelement); var _default = _dereq_(17); var _default2 = _interopRequireDefault(_default); var _i18n = _dereq_(5); var _i18n2 = _interopRequireDefault(_i18n); var _constants = _dereq_(25); var _general = _dereq_(27); var _time = _dereq_(30); var _media = _dereq_(28); var _dom = _dereq_(26); var dom = _interopRequireWildcard(_dom); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } _mejs2.default.mepIndex = 0; _mejs2.default.players = {}; var config = exports.config = { poster: '', showPosterWhenEnded: false, showPosterWhenPaused: false, defaultVideoWidth: 480, defaultVideoHeight: 270, videoWidth: -1, videoHeight: -1, defaultAudioWidth: 400, defaultAudioHeight: 40, defaultSeekBackwardInterval: function defaultSeekBackwardInterval(media) { return media.getDuration() * 0.05; }, defaultSeekForwardInterval: function defaultSeekForwardInterval(media) { return media.getDuration() * 0.05; }, setDimensions: true, audioWidth: -1, audioHeight: -1, loop: false, autoRewind: true, enableAutosize: true, timeFormat: '', alwaysShowHours: false, showTimecodeFrameCount: false, framesPerSecond: 25, alwaysShowControls: false, hideVideoControlsOnLoad: false, hideVideoControlsOnPause: false, clickToPlayPause: true, controlsTimeoutDefault: 1500, controlsTimeoutMouseEnter: 2500, controlsTimeoutMouseLeave: 1000, iPadUseNativeControls: false, iPhoneUseNativeControls: false, AndroidUseNativeControls: false, features: ['playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen'], useDefaultControls: false, isVideo: true, stretching: 'auto', classPrefix: 'mejs__', enableKeyboard: true, pauseOtherPlayers: true, secondsDecimalLength: 0, customError: null, keyActions: [{ keys: [32, 179], action: function action(player) { if (!_constants.IS_FIREFOX) { if (player.paused || player.ended) { player.play(); } else { player.pause(); } } } }] }; _mejs2.default.MepDefaults = config; var MediaElementPlayer = function () { function MediaElementPlayer(node, o) { _classCallCheck(this, MediaElementPlayer); var t = this, element = typeof node === 'string' ? _document2.default.getElementById(node) : node; if (!(t instanceof MediaElementPlayer)) { return new MediaElementPlayer(element, o); } t.node = t.media = element; if (!t.node) { return; } if (t.media.player) { return t.media.player; } t.hasFocus = false; t.controlsAreVisible = true; t.controlsEnabled = true; t.controlsTimer = null; t.currentMediaTime = 0; t.proxy = null; if (o === undefined) { var options = t.node.getAttribute('data-mejsoptions'); o = options ? JSON.parse(options) : {}; } t.options = Object.assign({}, config, o); if (t.options.loop && !t.media.getAttribute('loop')) { t.media.loop = true; t.node.loop = true; } else if (t.media.loop) { t.options.loop = true; } if (!t.options.timeFormat) { t.options.timeFormat = 'mm:ss'; if (t.options.alwaysShowHours) { t.options.timeFormat = 'hh:mm:ss'; } if (t.options.showTimecodeFrameCount) { t.options.timeFormat += ':ff'; } } (0, _time.calculateTimeFormat)(0, t.options, t.options.framesPerSecond || 25); t.id = 'mep_' + _mejs2.default.mepIndex++; _mejs2.default.players[t.id] = t; t.init(); return t; } _createClass(MediaElementPlayer, [{ key: 'getElement', value: function getElement(element) { return element; } }, { key: 'init', value: function init() { var t = this, playerOptions = Object.assign({}, t.options, { success: function success(media, domNode) { t._meReady(media, domNode); }, error: function error(e) { t._handleError(e); } }), tagName = t.node.tagName.toLowerCase(); t.isDynamic = tagName !== 'audio' && tagName !== 'video' && tagName !== 'iframe'; t.isVideo = t.isDynamic ? t.options.isVideo : tagName !== 'audio' && t.options.isVideo; t.mediaFiles = null; t.trackFiles = null; if (_constants.IS_IPAD && t.options.iPadUseNativeControls || _constants.IS_IPHONE && t.options.iPhoneUseNativeControls) { t.node.setAttribute('controls', true); if (_constants.IS_IPAD && t.node.getAttribute('autoplay')) { t.play(); } } else if ((t.isVideo || !t.isVideo && (t.options.features.length || t.options.useDefaultControls)) && !(_constants.IS_ANDROID && t.options.AndroidUseNativeControls)) { t.node.removeAttribute('controls'); var videoPlayerTitle = t.isVideo ? _i18n2.default.t('mejs.video-player') : _i18n2.default.t('mejs.audio-player'); var offscreen = _document2.default.createElement('span'); offscreen.className = t.options.classPrefix + 'offscreen'; offscreen.innerText = videoPlayerTitle; t.media.parentNode.insertBefore(offscreen, t.media); t.container = _document2.default.createElement('div'); t.getElement(t.container).id = t.id; t.getElement(t.container).className = t.options.classPrefix + 'container ' + t.options.classPrefix + 'container-keyboard-inactive ' + t.media.className; t.getElement(t.container).tabIndex = 0; t.getElement(t.container).setAttribute('role', 'application'); t.getElement(t.container).setAttribute('aria-label', videoPlayerTitle); t.getElement(t.container).innerHTML = '
        ' + ('
        ') + ('
        ') + ('
        ') + '
        '; t.getElement(t.container).addEventListener('focus', function (e) { if (!t.controlsAreVisible && !t.hasFocus && t.controlsEnabled) { t.showControls(true); var btnSelector = (0, _general.isNodeAfter)(e.relatedTarget, t.getElement(t.container)) ? '.' + t.options.classPrefix + 'controls .' + t.options.classPrefix + 'button:last-child > button' : '.' + t.options.classPrefix + 'playpause-button > button', button = t.getElement(t.container).querySelector(btnSelector); button.focus(); } }); t.node.parentNode.insertBefore(t.getElement(t.container), t.node); if (!t.options.features.length && !t.options.useDefaultControls) { t.getElement(t.container).style.background = 'transparent'; t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'controls').style.display = 'none'; } if (t.isVideo && t.options.stretching === 'fill' && !dom.hasClass(t.getElement(t.container).parentNode, t.options.classPrefix + 'fill-container')) { t.outerContainer = t.media.parentNode; var wrapper = _document2.default.createElement('div'); wrapper.className = t.options.classPrefix + 'fill-container'; t.getElement(t.container).parentNode.insertBefore(wrapper, t.getElement(t.container)); wrapper.appendChild(t.getElement(t.container)); } if (_constants.IS_ANDROID) { dom.addClass(t.getElement(t.container), t.options.classPrefix + 'android'); } if (_constants.IS_IOS) { dom.addClass(t.getElement(t.container), t.options.classPrefix + 'ios'); } if (_constants.IS_IPAD) { dom.addClass(t.getElement(t.container), t.options.classPrefix + 'ipad'); } if (_constants.IS_IPHONE) { dom.addClass(t.getElement(t.container), t.options.classPrefix + 'iphone'); } dom.addClass(t.getElement(t.container), t.isVideo ? t.options.classPrefix + 'video' : t.options.classPrefix + 'audio'); t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'mediaelement').appendChild(t.node); t.media.player = t; t.controls = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'controls'); t.layers = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'layers'); var tagType = t.isVideo ? 'video' : 'audio', capsTagName = tagType.substring(0, 1).toUpperCase() + tagType.substring(1); if (t.options[tagType + 'Width'] > 0 || t.options[tagType + 'Width'].toString().indexOf('%') > -1) { t.width = t.options[tagType + 'Width']; } else if (t.node.style.width !== '' && t.node.style.width !== null) { t.width = t.node.style.width; } else if (t.node.getAttribute('width')) { t.width = t.node.getAttribute('width'); } else { t.width = t.options['default' + capsTagName + 'Width']; } if (t.options[tagType + 'Height'] > 0 || t.options[tagType + 'Height'].toString().indexOf('%') > -1) { t.height = t.options[tagType + 'Height']; } else if (t.node.style.height !== '' && t.node.style.height !== null) { t.height = t.node.style.height; } else if (t.node.getAttribute('height')) { t.height = t.node.getAttribute('height'); } else { t.height = t.options['default' + capsTagName + 'Height']; } t.initialAspectRatio = t.height >= t.width ? t.width / t.height : t.height / t.width; t.setPlayerSize(t.width, t.height); playerOptions.pluginWidth = t.width; playerOptions.pluginHeight = t.height; } else if (!t.isVideo && !t.options.features.length && !t.options.useDefaultControls) { t.node.style.display = 'none'; } _mejs2.default.MepDefaults = playerOptions; new _mediaelement2.default(t.media, playerOptions, t.mediaFiles); if (t.getElement(t.container) !== undefined && t.options.features.length && t.controlsAreVisible && !t.options.hideVideoControlsOnLoad) { var event = (0, _general.createEvent)('controlsshown', t.getElement(t.container)); t.getElement(t.container).dispatchEvent(event); } } }, { key: 'showControls', value: function showControls(doAnimation) { var t = this; doAnimation = doAnimation === undefined || doAnimation; if (t.controlsAreVisible || !t.isVideo) { return; } if (doAnimation) { (function () { dom.fadeIn(t.getElement(t.controls), 200, function () { dom.removeClass(t.getElement(t.controls), t.options.classPrefix + 'offscreen'); var event = (0, _general.createEvent)('controlsshown', t.getElement(t.container)); t.getElement(t.container).dispatchEvent(event); }); var controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control'); var _loop = function _loop(i, total) { dom.fadeIn(controls[i], 200, function () { dom.removeClass(controls[i], t.options.classPrefix + 'offscreen'); }); }; for (var i = 0, total = controls.length; i < total; i++) { _loop(i, total); } })(); } else { dom.removeClass(t.getElement(t.controls), t.options.classPrefix + 'offscreen'); t.getElement(t.controls).style.display = ''; t.getElement(t.controls).style.opacity = 1; var controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control'); for (var i = 0, total = controls.length; i < total; i++) { dom.removeClass(controls[i], t.options.classPrefix + 'offscreen'); controls[i].style.display = ''; } var event = (0, _general.createEvent)('controlsshown', t.getElement(t.container)); t.getElement(t.container).dispatchEvent(event); } t.controlsAreVisible = true; t.setControlsSize(); } }, { key: 'hideControls', value: function hideControls(doAnimation, forceHide) { var t = this; doAnimation = doAnimation === undefined || doAnimation; if (forceHide !== true && (!t.controlsAreVisible || t.options.alwaysShowControls || t.paused && t.readyState === 4 && (!t.options.hideVideoControlsOnLoad && t.currentTime <= 0 || !t.options.hideVideoControlsOnPause && t.currentTime > 0) || t.isVideo && !t.options.hideVideoControlsOnLoad && !t.readyState || t.ended)) { return; } if (doAnimation) { (function () { dom.fadeOut(t.getElement(t.controls), 200, function () { dom.addClass(t.getElement(t.controls), t.options.classPrefix + 'offscreen'); t.getElement(t.controls).style.display = ''; var event = (0, _general.createEvent)('controlshidden', t.getElement(t.container)); t.getElement(t.container).dispatchEvent(event); }); var controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control'); var _loop2 = function _loop2(i, total) { dom.fadeOut(controls[i], 200, function () { dom.addClass(controls[i], t.options.classPrefix + 'offscreen'); controls[i].style.display = ''; }); }; for (var i = 0, total = controls.length; i < total; i++) { _loop2(i, total); } })(); } else { dom.addClass(t.getElement(t.controls), t.options.classPrefix + 'offscreen'); t.getElement(t.controls).style.display = ''; t.getElement(t.controls).style.opacity = 0; var controls = t.getElement(t.container).querySelectorAll('.' + t.options.classPrefix + 'control'); for (var i = 0, total = controls.length; i < total; i++) { dom.addClass(controls[i], t.options.classPrefix + 'offscreen'); controls[i].style.display = ''; } var event = (0, _general.createEvent)('controlshidden', t.getElement(t.container)); t.getElement(t.container).dispatchEvent(event); } t.controlsAreVisible = false; } }, { key: 'startControlsTimer', value: function startControlsTimer(timeout) { var t = this; timeout = typeof timeout !== 'undefined' ? timeout : t.options.controlsTimeoutDefault; t.killControlsTimer('start'); t.controlsTimer = setTimeout(function () { t.hideControls(); t.killControlsTimer('hide'); }, timeout); } }, { key: 'killControlsTimer', value: function killControlsTimer() { var t = this; if (t.controlsTimer !== null) { clearTimeout(t.controlsTimer); delete t.controlsTimer; t.controlsTimer = null; } } }, { key: 'disableControls', value: function disableControls() { var t = this; t.killControlsTimer(); t.controlsEnabled = false; t.hideControls(false, true); } }, { key: 'enableControls', value: function enableControls() { var t = this; t.controlsEnabled = true; t.showControls(false); } }, { key: '_setDefaultPlayer', value: function _setDefaultPlayer() { var t = this; if (t.proxy) { t.proxy.pause(); } t.proxy = new _default2.default(t); t.media.addEventListener('loadedmetadata', function () { if (t.getCurrentTime() > 0 && t.currentMediaTime > 0) { t.setCurrentTime(t.currentMediaTime); if (!_constants.IS_IOS && !_constants.IS_ANDROID) { t.play(); } } }); } }, { key: '_meReady', value: function _meReady(media, domNode) { var t = this, autoplayAttr = domNode.getAttribute('autoplay'), autoplay = !(autoplayAttr === undefined || autoplayAttr === null || autoplayAttr === 'false'), isNative = media.rendererName !== null && /(native|html5)/i.test(media.rendererName); if (t.getElement(t.controls)) { t.enableControls(); } if (t.getElement(t.container) && t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-play')) { t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-play').style.display = ''; } if (t.created) { return; } t.created = true; t.media = media; t.domNode = domNode; if (!(_constants.IS_ANDROID && t.options.AndroidUseNativeControls) && !(_constants.IS_IPAD && t.options.iPadUseNativeControls) && !(_constants.IS_IPHONE && t.options.iPhoneUseNativeControls)) { if (!t.isVideo && !t.options.features.length && !t.options.useDefaultControls) { if (autoplay && isNative) { t.play(); } if (t.options.success) { if (typeof t.options.success === 'string') { _window2.default[t.options.success](t.media, t.domNode, t); } else { t.options.success(t.media, t.domNode, t); } } return; } t.featurePosition = {}; t._setDefaultPlayer(); t.buildposter(t, t.getElement(t.controls), t.getElement(t.layers), t.media); t.buildkeyboard(t, t.getElement(t.controls), t.getElement(t.layers), t.media); t.buildoverlays(t, t.getElement(t.controls), t.getElement(t.layers), t.media); if (t.options.useDefaultControls) { var defaultControls = ['playpause', 'current', 'progress', 'duration', 'tracks', 'volume', 'fullscreen']; t.options.features = defaultControls.concat(t.options.features.filter(function (item) { return defaultControls.indexOf(item) === -1; })); } t.buildfeatures(t, t.getElement(t.controls), t.getElement(t.layers), t.media); var event = (0, _general.createEvent)('controlsready', t.getElement(t.container)); t.getElement(t.container).dispatchEvent(event); t.setPlayerSize(t.width, t.height); t.setControlsSize(); if (t.isVideo) { t.clickToPlayPauseCallback = function () { if (t.options.clickToPlayPause) { var button = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-button'), pressed = button.getAttribute('aria-pressed'); if (t.paused && pressed) { t.pause(); } else if (t.paused) { t.play(); } else { t.pause(); } button.setAttribute('aria-pressed', !pressed); t.getElement(t.container).focus(); } }; t.createIframeLayer(); t.media.addEventListener('click', t.clickToPlayPauseCallback); if ((_constants.IS_ANDROID || _constants.IS_IOS) && !t.options.alwaysShowControls) { t.node.addEventListener('touchstart', function () { if (t.controlsAreVisible) { t.hideControls(false); } else { if (t.controlsEnabled) { t.showControls(false); } } }, _constants.SUPPORT_PASSIVE_EVENT ? { passive: true } : false); } else { t.getElement(t.container).addEventListener('mouseenter', function () { if (t.controlsEnabled) { if (!t.options.alwaysShowControls) { t.killControlsTimer('enter'); t.showControls(); t.startControlsTimer(t.options.controlsTimeoutMouseEnter); } } }); t.getElement(t.container).addEventListener('mousemove', function () { if (t.controlsEnabled) { if (!t.controlsAreVisible) { t.showControls(); } if (!t.options.alwaysShowControls) { t.startControlsTimer(t.options.controlsTimeoutMouseEnter); } } }); t.getElement(t.container).addEventListener('mouseleave', function () { if (t.controlsEnabled) { if (!t.paused && !t.options.alwaysShowControls) { t.startControlsTimer(t.options.controlsTimeoutMouseLeave); } } }); } if (t.options.hideVideoControlsOnLoad) { t.hideControls(false); } if (t.options.enableAutosize) { t.media.addEventListener('loadedmetadata', function (e) { var target = e !== undefined ? e.detail.target || e.target : t.media; if (t.options.videoHeight <= 0 && !t.domNode.getAttribute('height') && !t.domNode.style.height && target !== null && !isNaN(target.videoHeight)) { t.setPlayerSize(target.videoWidth, target.videoHeight); t.setControlsSize(); t.media.setSize(target.videoWidth, target.videoHeight); } }); } } t.media.addEventListener('play', function () { t.hasFocus = true; for (var playerIndex in _mejs2.default.players) { if (_mejs2.default.players.hasOwnProperty(playerIndex)) { var p = _mejs2.default.players[playerIndex]; if (p.id !== t.id && t.options.pauseOtherPlayers && !p.paused && !p.ended && p.options.ignorePauseOtherPlayersOption !== true) { p.pause(); p.hasFocus = false; } } } if (!(_constants.IS_ANDROID || _constants.IS_IOS) && !t.options.alwaysShowControls && t.isVideo) { t.hideControls(); } }); t.media.addEventListener('ended', function () { if (t.options.autoRewind) { try { t.setCurrentTime(0); setTimeout(function () { var loadingElement = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-loading'); if (loadingElement && loadingElement.parentNode) { loadingElement.parentNode.style.display = 'none'; } }, 20); } catch (exp) { } } if (typeof t.media.renderer.stop === 'function') { t.media.renderer.stop(); } else { t.pause(); } if (t.setProgressRail) { t.setProgressRail(); } if (t.setCurrentRail) { t.setCurrentRail(); } if (t.options.loop) { t.play(); } else if (!t.options.alwaysShowControls && t.controlsEnabled) { t.showControls(); } }); t.media.addEventListener('loadedmetadata', function () { (0, _time.calculateTimeFormat)(t.getDuration(), t.options, t.options.framesPerSecond || 25); if (t.updateDuration) { t.updateDuration(); } if (t.updateCurrent) { t.updateCurrent(); } if (!t.isFullScreen) { t.setPlayerSize(t.width, t.height); t.setControlsSize(); } }); var duration = null; t.media.addEventListener('timeupdate', function () { if (!isNaN(t.getDuration()) && duration !== t.getDuration()) { duration = t.getDuration(); (0, _time.calculateTimeFormat)(duration, t.options, t.options.framesPerSecond || 25); if (t.updateDuration) { t.updateDuration(); } if (t.updateCurrent) { t.updateCurrent(); } t.setControlsSize(); } }); t.getElement(t.container).addEventListener('click', function (e) { dom.addClass(e.currentTarget, t.options.classPrefix + 'container-keyboard-inactive'); }); t.getElement(t.container).addEventListener('focusin', function (e) { dom.removeClass(e.currentTarget, t.options.classPrefix + 'container-keyboard-inactive'); if (t.isVideo && !_constants.IS_ANDROID && !_constants.IS_IOS && t.controlsEnabled && !t.options.alwaysShowControls) { t.killControlsTimer('enter'); t.showControls(); t.startControlsTimer(t.options.controlsTimeoutMouseEnter); } }); t.getElement(t.container).addEventListener('focusout', function (e) { setTimeout(function () { if (e.relatedTarget) { if (t.keyboardAction && !e.relatedTarget.closest('.' + t.options.classPrefix + 'container')) { t.keyboardAction = false; if (t.isVideo && !t.options.alwaysShowControls && !t.paused) { t.startControlsTimer(t.options.controlsTimeoutMouseLeave); } } } }, 0); }); setTimeout(function () { t.setPlayerSize(t.width, t.height); t.setControlsSize(); }, 0); t.globalResizeCallback = function () { if (!(t.isFullScreen || _constants.HAS_TRUE_NATIVE_FULLSCREEN && _document2.default.webkitIsFullScreen)) { t.setPlayerSize(t.width, t.height); } t.setControlsSize(); }; t.globalBind('resize', t.globalResizeCallback); } if (autoplay && isNative) { t.play(); } if (t.options.success) { if (typeof t.options.success === 'string') { _window2.default[t.options.success](t.media, t.domNode, t); } else { t.options.success(t.media, t.domNode, t); } } } }, { key: '_handleError', value: function _handleError(e, media, node) { var t = this, play = t.getElement(t.layers).querySelector('.' + t.options.classPrefix + 'overlay-play'); if (play) { play.style.display = 'none'; } if (t.options.error) { t.options.error(e, media, node); } if (t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'cannotplay')) { t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'cannotplay').remove(); } var errorContainer = _document2.default.createElement('div'); errorContainer.className = t.options.classPrefix + 'cannotplay'; errorContainer.style.width = '100%'; errorContainer.style.height = '100%'; var errorContent = typeof t.options.customError === 'function' ? t.options.customError(t.media, t.media.originalNode) : t.options.customError, imgError = ''; if (!errorContent) { var poster = t.media.originalNode.getAttribute('poster'); if (poster) { imgError = '' + _mejs2.default.i18n.t('mejs.download-file') + ''; } if (e.message) { errorContent = '

        ' + e.message + '

        '; } if (e.urls) { for (var i = 0, total = e.urls.length; i < total; i++) { var url = e.urls[i]; errorContent += '' + _mejs2.default.i18n.t('mejs.download-file') + ': ' + url.src + ''; } } } if (errorContent && t.getElement(t.layers).querySelector('.' + t.options.classPrefix + 'overlay-error')) { errorContainer.innerHTML = errorContent; t.getElement(t.layers).querySelector('.' + t.options.classPrefix + 'overlay-error').innerHTML = '' + imgError + errorContainer.outerHTML; t.getElement(t.layers).querySelector('.' + t.options.classPrefix + 'overlay-error').parentNode.style.display = 'block'; } if (t.controlsEnabled) { t.disableControls(); } } }, { key: 'setPlayerSize', value: function setPlayerSize(width, height) { var t = this; if (!t.options.setDimensions) { return false; } if (typeof width !== 'undefined') { t.width = width; } if (typeof height !== 'undefined') { t.height = height; } switch (t.options.stretching) { case 'fill': if (t.isVideo) { t.setFillMode(); } else { t.setDimensions(t.width, t.height); } break; case 'responsive': t.setResponsiveMode(); break; case 'none': t.setDimensions(t.width, t.height); break; default: if (t.hasFluidMode() === true) { t.setResponsiveMode(); } else { t.setDimensions(t.width, t.height); } break; } } }, { key: 'hasFluidMode', value: function hasFluidMode() { var t = this; return t.height.toString().indexOf('%') !== -1 || t.node && t.node.style.maxWidth && t.node.style.maxWidth !== 'none' && t.node.style.maxWidth !== t.width || t.node && t.node.currentStyle && t.node.currentStyle.maxWidth === '100%'; } }, { key: 'setResponsiveMode', value: function setResponsiveMode() { var t = this, parent = function () { var parentEl = void 0, el = t.getElement(t.container); while (el) { try { if (_constants.IS_FIREFOX && el.tagName.toLowerCase() === 'html' && _window2.default.self !== _window2.default.top && _window2.default.frameElement !== null) { return _window2.default.frameElement; } else { parentEl = el.parentElement; } } catch (e) { parentEl = el.parentElement; } if (parentEl && dom.visible(parentEl)) { return parentEl; } el = parentEl; } return null; }(), parentStyles = parent ? getComputedStyle(parent, null) : getComputedStyle(_document2.default.body, null), nativeWidth = function () { if (t.isVideo) { if (t.node.videoWidth && t.node.videoWidth > 0) { return t.node.videoWidth; } else if (t.node.getAttribute('width')) { return t.node.getAttribute('width'); } else { return t.options.defaultVideoWidth; } } else { return t.options.defaultAudioWidth; } }(), nativeHeight = function () { if (t.isVideo) { if (t.node.videoHeight && t.node.videoHeight > 0) { return t.node.videoHeight; } else if (t.node.getAttribute('height')) { return t.node.getAttribute('height'); } else { return t.options.defaultVideoHeight; } } else { return t.options.defaultAudioHeight; } }(), aspectRatio = function () { if (!t.options.enableAutosize) { return t.initialAspectRatio; } var ratio = 1; if (!t.isVideo) { return ratio; } if (t.node.videoWidth && t.node.videoWidth > 0 && t.node.videoHeight && t.node.videoHeight > 0) { ratio = t.height >= t.width ? t.node.videoWidth / t.node.videoHeight : t.node.videoHeight / t.node.videoWidth; } else { ratio = t.initialAspectRatio; } if (isNaN(ratio) || ratio < 0.01 || ratio > 100) { ratio = 1; } return ratio; }(), parentHeight = parseFloat(parentStyles.height); var newHeight = void 0, parentWidth = parseFloat(parentStyles.width); if (t.isVideo) { if (t.height === '100%') { newHeight = parseFloat(parentWidth * nativeHeight / nativeWidth, 10); } else { newHeight = t.height >= t.width ? parseFloat(parentWidth / aspectRatio, 10) : parseFloat(parentWidth * aspectRatio, 10); } } else { newHeight = nativeHeight; } if (isNaN(newHeight)) { newHeight = parentHeight; } if (t.getElement(t.container).parentNode.length > 0 && t.getElement(t.container).parentNode.tagName.toLowerCase() === 'body') { parentWidth = _window2.default.innerWidth || _document2.default.documentElement.clientWidth || _document2.default.body.clientWidth; newHeight = _window2.default.innerHeight || _document2.default.documentElement.clientHeight || _document2.default.body.clientHeight; } if (newHeight && parentWidth) { t.getElement(t.container).style.width = parentWidth + 'px'; t.getElement(t.container).style.height = newHeight + 'px'; t.node.style.width = '100%'; t.node.style.height = '100%'; if (t.isVideo && t.media.setSize) { t.media.setSize(parentWidth, newHeight); } var layerChildren = t.getElement(t.layers).children; for (var i = 0, total = layerChildren.length; i < total; i++) { layerChildren[i].style.width = '100%'; layerChildren[i].style.height = '100%'; } } } }, { key: 'setFillMode', value: function setFillMode() { var t = this; var isIframe = _window2.default.self !== _window2.default.top && _window2.default.frameElement !== null; var parent = function () { var parentEl = void 0, el = t.getElement(t.container); while (el) { try { if (_constants.IS_FIREFOX && el.tagName.toLowerCase() === 'html' && _window2.default.self !== _window2.default.top && _window2.default.frameElement !== null) { return _window2.default.frameElement; } else { parentEl = el.parentElement; } } catch (e) { parentEl = el.parentElement; } if (parentEl && dom.visible(parentEl)) { return parentEl; } el = parentEl; } return null; }(); var parentStyles = parent ? getComputedStyle(parent, null) : getComputedStyle(_document2.default.body, null); if (t.node.style.height !== 'none' && t.node.style.height !== t.height) { t.node.style.height = 'auto'; } if (t.node.style.maxWidth !== 'none' && t.node.style.maxWidth !== t.width) { t.node.style.maxWidth = 'none'; } if (t.node.style.maxHeight !== 'none' && t.node.style.maxHeight !== t.height) { t.node.style.maxHeight = 'none'; } if (t.node.currentStyle) { if (t.node.currentStyle.height === '100%') { t.node.currentStyle.height = 'auto'; } if (t.node.currentStyle.maxWidth === '100%') { t.node.currentStyle.maxWidth = 'none'; } if (t.node.currentStyle.maxHeight === '100%') { t.node.currentStyle.maxHeight = 'none'; } } if (!isIframe && !parseFloat(parentStyles.width)) { parent.style.width = t.media.offsetWidth + 'px'; } if (!isIframe && !parseFloat(parentStyles.height)) { parent.style.height = t.media.offsetHeight + 'px'; } parentStyles = getComputedStyle(parent); var parentWidth = parseFloat(parentStyles.width), parentHeight = parseFloat(parentStyles.height); t.setDimensions('100%', '100%'); var poster = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'poster>img'); if (poster) { poster.style.display = ''; } var targetElement = t.getElement(t.container).querySelectorAll('object, embed, iframe, video'), initHeight = t.height, initWidth = t.width, scaleX1 = parentWidth, scaleY1 = initHeight * parentWidth / initWidth, scaleX2 = initWidth * parentHeight / initHeight, scaleY2 = parentHeight, bScaleOnWidth = scaleX2 > parentWidth === false, finalWidth = bScaleOnWidth ? Math.floor(scaleX1) : Math.floor(scaleX2), finalHeight = bScaleOnWidth ? Math.floor(scaleY1) : Math.floor(scaleY2), width = bScaleOnWidth ? parentWidth + 'px' : finalWidth + 'px', height = bScaleOnWidth ? finalHeight + 'px' : parentHeight + 'px'; for (var i = 0, total = targetElement.length; i < total; i++) { targetElement[i].style.height = height; targetElement[i].style.width = width; if (t.media.setSize) { t.media.setSize(width, height); } targetElement[i].style.marginLeft = Math.floor((parentWidth - finalWidth) / 2) + 'px'; targetElement[i].style.marginTop = 0; } } }, { key: 'setDimensions', value: function setDimensions(width, height) { var t = this; width = (0, _general.isString)(width) && width.indexOf('%') > -1 ? width : parseFloat(width) + 'px'; height = (0, _general.isString)(height) && height.indexOf('%') > -1 ? height : parseFloat(height) + 'px'; t.getElement(t.container).style.width = width; t.getElement(t.container).style.height = height; var layers = t.getElement(t.layers).children; for (var i = 0, total = layers.length; i < total; i++) { layers[i].style.width = width; layers[i].style.height = height; } } }, { key: 'setControlsSize', value: function setControlsSize() { var t = this; if (!dom.visible(t.getElement(t.container))) { return; } if (t.rail && dom.visible(t.rail)) { var totalStyles = t.total ? getComputedStyle(t.total, null) : null, totalMargin = totalStyles ? parseFloat(totalStyles.marginLeft) + parseFloat(totalStyles.marginRight) : 0, railStyles = getComputedStyle(t.rail), railMargin = parseFloat(railStyles.marginLeft) + parseFloat(railStyles.marginRight); var siblingsWidth = 0; var siblings = dom.siblings(t.rail, function (el) { return el !== t.rail; }), total = siblings.length; for (var i = 0; i < total; i++) { siblingsWidth += siblings[i].offsetWidth; } siblingsWidth += totalMargin + (totalMargin === 0 ? railMargin * 2 : railMargin) + 1; t.getElement(t.container).style.minWidth = siblingsWidth + 'px'; var event = (0, _general.createEvent)('controlsresize', t.getElement(t.container)); t.getElement(t.container).dispatchEvent(event); } else { var children = t.getElement(t.controls).children; var minWidth = 0; for (var _i = 0, _total = children.length; _i < _total; _i++) { minWidth += children[_i].offsetWidth; } t.getElement(t.container).style.minWidth = minWidth + 'px'; } } }, { key: 'addControlElement', value: function addControlElement(element, key) { var t = this; if (t.featurePosition[key] !== undefined) { var child = t.getElement(t.controls).children[t.featurePosition[key] - 1]; child.parentNode.insertBefore(element, child.nextSibling); } else { t.getElement(t.controls).appendChild(element); var children = t.getElement(t.controls).children; for (var i = 0, total = children.length; i < total; i++) { if (element === children[i]) { t.featurePosition[key] = i; break; } } } } }, { key: 'createIframeLayer', value: function createIframeLayer() { var t = this; if (t.isVideo && t.media.rendererName !== null && t.media.rendererName.indexOf('iframe') > -1 && !_document2.default.getElementById(t.media.id + '-iframe-overlay')) { var layer = _document2.default.createElement('div'), target = _document2.default.getElementById(t.media.id + '_' + t.media.rendererName); layer.id = t.media.id + '-iframe-overlay'; layer.className = t.options.classPrefix + 'iframe-overlay'; layer.addEventListener('click', function (e) { if (t.options.clickToPlayPause) { if (t.paused) { t.play(); } else { t.pause(); } e.preventDefault(); e.stopPropagation(); } }); target.parentNode.insertBefore(layer, target); } } }, { key: 'resetSize', value: function resetSize() { var t = this; setTimeout(function () { t.setPlayerSize(t.width, t.height); t.setControlsSize(); }, 50); } }, { key: 'setPoster', value: function setPoster(url) { var t = this; if (t.getElement(t.container)) { var posterDiv = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'poster'); if (!posterDiv) { posterDiv = _document2.default.createElement('div'); posterDiv.className = t.options.classPrefix + 'poster ' + t.options.classPrefix + 'layer'; t.getElement(t.layers).appendChild(posterDiv); } var posterImg = posterDiv.querySelector('img'); if (!posterImg && url) { posterImg = _document2.default.createElement('img'); posterImg.className = t.options.classPrefix + 'poster-img'; posterImg.width = '100%'; posterImg.height = '100%'; posterDiv.style.display = ''; posterDiv.appendChild(posterImg); } if (url) { posterImg.setAttribute('src', url); posterDiv.style.backgroundImage = 'url("' + url + '")'; posterDiv.style.display = ''; } else if (posterImg) { posterDiv.style.backgroundImage = 'none'; posterDiv.style.display = 'none'; posterImg.remove(); } else { posterDiv.style.display = 'none'; } } else if (_constants.IS_IPAD && t.options.iPadUseNativeControls || _constants.IS_IPHONE && t.options.iPhoneUseNativeControls || _constants.IS_ANDROID && t.options.AndroidUseNativeControls) { t.media.originalNode.poster = url; } } }, { key: 'changeSkin', value: function changeSkin(className) { var t = this; t.getElement(t.container).className = t.options.classPrefix + 'container ' + className; t.setPlayerSize(t.width, t.height); t.setControlsSize(); } }, { key: 'globalBind', value: function globalBind(events, callback) { var t = this, doc = t.node ? t.node.ownerDocument : _document2.default; events = (0, _general.splitEvents)(events, t.id); if (events.d) { var eventList = events.d.split(' '); for (var i = 0, total = eventList.length; i < total; i++) { eventList[i].split('.').reduce(function (part, e) { doc.addEventListener(e, callback, false); return e; }, ''); } } if (events.w) { var _eventList = events.w.split(' '); for (var _i2 = 0, _total2 = _eventList.length; _i2 < _total2; _i2++) { _eventList[_i2].split('.').reduce(function (part, e) { _window2.default.addEventListener(e, callback, false); return e; }, ''); } } } }, { key: 'globalUnbind', value: function globalUnbind(events, callback) { var t = this, doc = t.node ? t.node.ownerDocument : _document2.default; events = (0, _general.splitEvents)(events, t.id); if (events.d) { var eventList = events.d.split(' '); for (var i = 0, total = eventList.length; i < total; i++) { eventList[i].split('.').reduce(function (part, e) { doc.removeEventListener(e, callback, false); return e; }, ''); } } if (events.w) { var _eventList2 = events.w.split(' '); for (var _i3 = 0, _total3 = _eventList2.length; _i3 < _total3; _i3++) { _eventList2[_i3].split('.').reduce(function (part, e) { _window2.default.removeEventListener(e, callback, false); return e; }, ''); } } } }, { key: 'buildfeatures', value: function buildfeatures(player, controls, layers, media) { var t = this; for (var i = 0, total = t.options.features.length; i < total; i++) { var feature = t.options.features[i]; if (t['build' + feature]) { try { t['build' + feature](player, controls, layers, media); } catch (e) { console.error('error building ' + feature, e); } } } } }, { key: 'buildposter', value: function buildposter(player, controls, layers, media) { var t = this, poster = _document2.default.createElement('div'); poster.className = t.options.classPrefix + 'poster ' + t.options.classPrefix + 'layer'; layers.appendChild(poster); var posterUrl = media.originalNode.getAttribute('poster'); if (player.options.poster !== '') { if (posterUrl && _constants.IS_IOS) { media.originalNode.removeAttribute('poster'); } posterUrl = player.options.poster; } if (posterUrl) { t.setPoster(posterUrl); } else if (t.media.renderer !== null && typeof t.media.renderer.getPosterUrl === 'function') { t.setPoster(t.media.renderer.getPosterUrl()); } else { poster.style.display = 'none'; } media.addEventListener('play', function () { poster.style.display = 'none'; }); media.addEventListener('playing', function () { poster.style.display = 'none'; }); if (player.options.showPosterWhenEnded && player.options.autoRewind) { media.addEventListener('ended', function () { poster.style.display = ''; }); } media.addEventListener('error', function () { poster.style.display = 'none'; }); if (player.options.showPosterWhenPaused) { media.addEventListener('pause', function () { if (!player.ended) { poster.style.display = ''; } }); } } }, { key: 'buildoverlays', value: function buildoverlays(player, controls, layers, media) { if (!player.isVideo) { return; } var t = this, loading = _document2.default.createElement('div'), error = _document2.default.createElement('div'), bigPlay = _document2.default.createElement('div'); loading.style.display = 'none'; loading.className = t.options.classPrefix + 'overlay ' + t.options.classPrefix + 'layer'; loading.innerHTML = '
        ' + ('') + '
        '; layers.appendChild(loading); error.style.display = 'none'; error.className = t.options.classPrefix + 'overlay ' + t.options.classPrefix + 'layer'; error.innerHTML = '
        '; layers.appendChild(error); bigPlay.className = t.options.classPrefix + 'overlay ' + t.options.classPrefix + 'layer ' + t.options.classPrefix + 'overlay-play'; bigPlay.innerHTML = '
        '); bigPlay.addEventListener('click', function () { if (t.options.clickToPlayPause) { var button = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'overlay-button'), pressed = button.getAttribute('aria-pressed'); if (t.paused) { t.play(); } else { t.pause(); } button.setAttribute('aria-pressed', !!pressed); t.getElement(t.container).focus(); } }); bigPlay.addEventListener('keydown', function (e) { var keyPressed = e.keyCode || e.which || 0; if (keyPressed === 13 || _constants.IS_FIREFOX && keyPressed === 32) { var event = (0, _general.createEvent)('click', bigPlay); bigPlay.dispatchEvent(event); return false; } }); layers.appendChild(bigPlay); if (t.media.rendererName !== null && (/(youtube|facebook)/i.test(t.media.rendererName) && !(t.media.originalNode.getAttribute('poster') || player.options.poster || typeof t.media.renderer.getPosterUrl === 'function' && t.media.renderer.getPosterUrl()) || _constants.IS_STOCK_ANDROID || t.media.originalNode.getAttribute('autoplay'))) { bigPlay.style.display = 'none'; } var hasError = false; media.addEventListener('play', function () { bigPlay.style.display = 'none'; loading.style.display = 'none'; error.style.display = 'none'; hasError = false; }); media.addEventListener('playing', function () { bigPlay.style.display = 'none'; loading.style.display = 'none'; error.style.display = 'none'; hasError = false; }); media.addEventListener('seeking', function () { bigPlay.style.display = 'none'; loading.style.display = ''; hasError = false; }); media.addEventListener('seeked', function () { bigPlay.style.display = t.paused && !_constants.IS_STOCK_ANDROID ? '' : 'none'; loading.style.display = 'none'; hasError = false; }); media.addEventListener('pause', function () { loading.style.display = 'none'; if (!_constants.IS_STOCK_ANDROID && !hasError) { bigPlay.style.display = ''; } hasError = false; }); media.addEventListener('waiting', function () { loading.style.display = ''; hasError = false; }); media.addEventListener('loadeddata', function () { loading.style.display = ''; if (_constants.IS_ANDROID) { media.canplayTimeout = setTimeout(function () { if (_document2.default.createEvent) { var evt = _document2.default.createEvent('HTMLEvents'); evt.initEvent('canplay', true, true); return media.dispatchEvent(evt); } }, 300); } hasError = false; }); media.addEventListener('canplay', function () { loading.style.display = 'none'; clearTimeout(media.canplayTimeout); hasError = false; }); media.addEventListener('error', function (e) { t._handleError(e, t.media, t.node); loading.style.display = 'none'; bigPlay.style.display = 'none'; hasError = true; }); media.addEventListener('loadedmetadata', function () { if (!t.controlsEnabled) { t.enableControls(); } }); media.addEventListener('keydown', function (e) { t.onkeydown(player, media, e); hasError = false; }); } }, { key: 'buildkeyboard', value: function buildkeyboard(player, controls, layers, media) { var t = this; t.getElement(t.container).addEventListener('keydown', function () { t.keyboardAction = true; }); t.globalKeydownCallback = function (event) { var container = _document2.default.activeElement.closest('.' + t.options.classPrefix + 'container'), target = t.media.closest('.' + t.options.classPrefix + 'container'); t.hasFocus = !!(container && target && container.id === target.id); return t.onkeydown(player, media, event); }; t.globalClickCallback = function (event) { t.hasFocus = !!event.target.closest('.' + t.options.classPrefix + 'container'); }; t.globalBind('keydown', t.globalKeydownCallback); t.globalBind('click', t.globalClickCallback); } }, { key: 'onkeydown', value: function onkeydown(player, media, e) { if (player.hasFocus && player.options.enableKeyboard) { for (var i = 0, total = player.options.keyActions.length; i < total; i++) { var keyAction = player.options.keyActions[i]; for (var j = 0, jl = keyAction.keys.length; j < jl; j++) { if (e.keyCode === keyAction.keys[j]) { keyAction.action(player, media, e.keyCode, e); e.preventDefault(); e.stopPropagation(); return; } } } } return true; } }, { key: 'play', value: function play() { this.proxy.play(); } }, { key: 'pause', value: function pause() { this.proxy.pause(); } }, { key: 'load', value: function load() { this.proxy.load(); } }, { key: 'setCurrentTime', value: function setCurrentTime(time) { this.proxy.setCurrentTime(time); } }, { key: 'getCurrentTime', value: function getCurrentTime() { return this.proxy.currentTime; } }, { key: 'getDuration', value: function getDuration() { return this.proxy.duration; } }, { key: 'setVolume', value: function setVolume(volume) { this.proxy.volume = volume; } }, { key: 'getVolume', value: function getVolume() { return this.proxy.getVolume(); } }, { key: 'setMuted', value: function setMuted(value) { this.proxy.setMuted(value); } }, { key: 'setSrc', value: function setSrc(src) { if (!this.controlsEnabled) { this.enableControls(); } this.proxy.setSrc(src); } }, { key: 'getSrc', value: function getSrc() { return this.proxy.getSrc(); } }, { key: 'canPlayType', value: function canPlayType(type) { return this.proxy.canPlayType(type); } }, { key: 'remove', value: function remove() { var t = this, rendererName = t.media.rendererName, src = t.media.originalNode.src; for (var featureIndex in t.options.features) { var feature = t.options.features[featureIndex]; if (t['clean' + feature]) { try { t['clean' + feature](t, t.getElement(t.layers), t.getElement(t.controls), t.media); } catch (e) { console.error('error cleaning ' + feature, e); } } } var nativeWidth = t.node.getAttribute('width'), nativeHeight = t.node.getAttribute('height'); if (nativeWidth) { if (nativeWidth.indexOf('%') === -1) { nativeWidth = nativeWidth + 'px'; } } else { nativeWidth = 'auto'; } if (nativeHeight) { if (nativeHeight.indexOf('%') === -1) { nativeHeight = nativeHeight + 'px'; } } else { nativeHeight = 'auto'; } t.node.style.width = nativeWidth; t.node.style.height = nativeHeight; t.setPlayerSize(0, 0); if (!t.isDynamic) { (function () { t.node.setAttribute('controls', true); t.node.setAttribute('id', t.node.getAttribute('id').replace('_' + rendererName, '').replace('_from_mejs', '')); var poster = t.getElement(t.container).querySelector('.' + t.options.classPrefix + 'poster>img'); if (poster) { t.node.setAttribute('poster', poster.src); } delete t.node.autoplay; t.node.setAttribute('src', ''); if (t.media.canPlayType((0, _media.getTypeFromFile)(src)) !== '') { t.node.setAttribute('src', src); } if (rendererName && rendererName.indexOf('iframe') > -1) { var layer = _document2.default.getElementById(t.media.id + '-iframe-overlay'); layer.remove(); } var node = t.node.cloneNode(); node.style.display = ''; t.getElement(t.container).parentNode.insertBefore(node, t.getElement(t.container)); t.node.remove(); if (t.mediaFiles) { for (var i = 0, total = t.mediaFiles.length; i < total; i++) { var source = _document2.default.createElement('source'); source.setAttribute('src', t.mediaFiles[i].src); source.setAttribute('type', t.mediaFiles[i].type); node.appendChild(source); } } if (t.trackFiles) { var _loop3 = function _loop3(_i4, _total4) { var track = t.trackFiles[_i4]; var newTrack = _document2.default.createElement('track'); newTrack.kind = track.kind; newTrack.label = track.label; newTrack.srclang = track.srclang; newTrack.src = track.src; node.appendChild(newTrack); newTrack.addEventListener('load', function () { this.mode = 'showing'; node.textTracks[_i4].mode = 'showing'; }); }; for (var _i4 = 0, _total4 = t.trackFiles.length; _i4 < _total4; _i4++) { _loop3(_i4, _total4); } } delete t.node; delete t.mediaFiles; delete t.trackFiles; })(); } else { t.getElement(t.container).parentNode.insertBefore(t.node, t.getElement(t.container)); } if (t.media.renderer && typeof t.media.renderer.destroy === 'function') { t.media.renderer.destroy(); } delete _mejs2.default.players[t.id]; if (_typeof(t.getElement(t.container)) === 'object') { var offscreen = t.getElement(t.container).parentNode.querySelector('.' + t.options.classPrefix + 'offscreen'); if (offscreen) { offscreen.remove(); } t.getElement(t.container).remove(); } t.globalUnbind('resize', t.globalResizeCallback); t.globalUnbind('keydown', t.globalKeydownCallback); t.globalUnbind('click', t.globalClickCallback); delete t.media.player; } }, { key: 'paused', get: function get() { return this.proxy.paused; } }, { key: 'muted', get: function get() { return this.proxy.muted; }, set: function set(muted) { this.setMuted(muted); } }, { key: 'ended', get: function get() { return this.proxy.ended; } }, { key: 'readyState', get: function get() { return this.proxy.readyState; } }, { key: 'currentTime', set: function set(time) { this.setCurrentTime(time); }, get: function get() { return this.getCurrentTime(); } }, { key: 'duration', get: function get() { return this.getDuration(); } }, { key: 'volume', set: function set(volume) { this.setVolume(volume); }, get: function get() { return this.getVolume(); } }, { key: 'src', set: function set(src) { this.setSrc(src); }, get: function get() { return this.getSrc(); } }]); return MediaElementPlayer; }(); _window2.default.MediaElementPlayer = MediaElementPlayer; _mejs2.default.MediaElementPlayer = MediaElementPlayer; exports.default = MediaElementPlayer; },{"17":17,"2":2,"25":25,"26":26,"27":27,"28":28,"3":3,"30":30,"5":5,"6":6,"7":7}],17:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var DefaultPlayer = function () { function DefaultPlayer(player) { _classCallCheck(this, DefaultPlayer); this.media = player.media; this.isVideo = player.isVideo; this.classPrefix = player.options.classPrefix; this.createIframeLayer = function () { return player.createIframeLayer(); }; this.setPoster = function (url) { return player.setPoster(url); }; return this; } _createClass(DefaultPlayer, [{ key: 'play', value: function play() { this.media.play(); } }, { key: 'pause', value: function pause() { this.media.pause(); } }, { key: 'load', value: function load() { var t = this; if (!t.isLoaded) { t.media.load(); } t.isLoaded = true; } }, { key: 'setCurrentTime', value: function setCurrentTime(time) { this.media.setCurrentTime(time); } }, { key: 'getCurrentTime', value: function getCurrentTime() { return this.media.currentTime; } }, { key: 'getDuration', value: function getDuration() { var duration = this.media.getDuration(); if (duration === Infinity && this.media.seekable && this.media.seekable.length) { duration = this.media.seekable.end(0); } return duration; } }, { key: 'setVolume', value: function setVolume(volume) { this.media.setVolume(volume); } }, { key: 'getVolume', value: function getVolume() { return this.media.getVolume(); } }, { key: 'setMuted', value: function setMuted(value) { this.media.setMuted(value); } }, { key: 'setSrc', value: function setSrc(src) { var t = this, layer = document.getElementById(t.media.id + '-iframe-overlay'); if (layer) { layer.remove(); } t.media.setSrc(src); t.createIframeLayer(); if (t.media.renderer !== null && typeof t.media.renderer.getPosterUrl === 'function') { t.setPoster(t.media.renderer.getPosterUrl()); } } }, { key: 'getSrc', value: function getSrc() { return this.media.getSrc(); } }, { key: 'canPlayType', value: function canPlayType(type) { return this.media.canPlayType(type); } }, { key: 'paused', get: function get() { return this.media.paused; } }, { key: 'muted', set: function set(muted) { this.setMuted(muted); }, get: function get() { return this.media.muted; } }, { key: 'ended', get: function get() { return this.media.ended; } }, { key: 'readyState', get: function get() { return this.media.readyState; } }, { key: 'currentTime', set: function set(time) { this.setCurrentTime(time); }, get: function get() { return this.getCurrentTime(); } }, { key: 'duration', get: function get() { return this.getDuration(); } }, { key: 'remainingTime', get: function get() { return this.getDuration() - this.currentTime(); } }, { key: 'volume', set: function set(volume) { this.setVolume(volume); }, get: function get() { return this.getVolume(); } }, { key: 'src', set: function set(src) { this.setSrc(src); }, get: function get() { return this.getSrc(); } }]); return DefaultPlayer; }(); exports.default = DefaultPlayer; _window2.default.DefaultPlayer = DefaultPlayer; },{"3":3}],18:[function(_dereq_,module,exports){ 'use strict'; var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); var _player = _dereq_(16); var _player2 = _interopRequireDefault(_player); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } if (typeof jQuery !== 'undefined') { _mejs2.default.$ = jQuery; } else if (typeof Zepto !== 'undefined') { _mejs2.default.$ = Zepto; } else if (typeof ender !== 'undefined') { _mejs2.default.$ = ender; } (function ($) { if (typeof $ !== 'undefined') { $.fn.mediaelementplayer = function (options) { if (options === false) { this.each(function () { var player = $(this).data('mediaelementplayer'); if (player) { player.remove(); } $(this).removeData('mediaelementplayer'); }); } else { this.each(function () { $(this).data('mediaelementplayer', new _player2.default(this, options)); }); } return this; }; $(document).ready(function () { $('.' + _mejs2.default.MepDefaults.classPrefix + 'player').mediaelementplayer(); }); } })(_mejs2.default.$); },{"16":16,"3":3,"7":7}],19:[function(_dereq_,module,exports){ 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); var _renderer = _dereq_(8); var _general = _dereq_(27); var _media = _dereq_(28); var _constants = _dereq_(25); var _dom = _dereq_(26); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var NativeDash = { promise: null, load: function load(settings) { if (typeof dashjs !== 'undefined') { NativeDash.promise = new Promise(function (resolve) { resolve(); }).then(function () { NativeDash._createPlayer(settings); }); } else { settings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdn.dashjs.org/latest/dash.all.min.js'; NativeDash.promise = NativeDash.promise || (0, _dom.loadScript)(settings.options.path); NativeDash.promise.then(function () { NativeDash._createPlayer(settings); }); } return NativeDash.promise; }, _createPlayer: function _createPlayer(settings) { var player = dashjs.MediaPlayer().create(); _window2.default['__ready__' + settings.id](player); return player; } }; var DashNativeRenderer = { name: 'native_dash', options: { prefix: 'native_dash', dash: { path: 'https://cdn.dashjs.org/latest/dash.all.min.js', debug: false, drm: {}, robustnessLevel: '' } }, canPlayType: function canPlayType(type) { return _constants.HAS_MSE && ['application/dash+xml'].indexOf(type.toLowerCase()) > -1; }, create: function create(mediaElement, options, mediaFiles) { var originalNode = mediaElement.originalNode, id = mediaElement.id + '_' + options.prefix, autoplay = originalNode.autoplay, children = originalNode.children; var node = null, dashPlayer = null; originalNode.removeAttribute('type'); for (var i = 0, total = children.length; i < total; i++) { children[i].removeAttribute('type'); } node = originalNode.cloneNode(true); options = Object.assign(options, mediaElement.options); var props = _mejs2.default.html5media.properties, events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) { return e !== 'error'; }), attachNativeEvents = function attachNativeEvents(e) { var event = (0, _general.createEvent)(e.type, mediaElement); mediaElement.dispatchEvent(event); }, assignGettersSetters = function assignGettersSetters(propName) { var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1); node['get' + capName] = function () { return dashPlayer !== null ? node[propName] : null; }; node['set' + capName] = function (value) { if (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) { if (propName === 'src') { var source = (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src ? value.src : value; node[propName] = source; if (dashPlayer !== null) { dashPlayer.reset(); for (var _i = 0, _total = events.length; _i < _total; _i++) { node.removeEventListener(events[_i], attachNativeEvents); } dashPlayer = NativeDash._createPlayer({ options: options.dash, id: id }); if (value && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && _typeof(value.drm) === 'object') { dashPlayer.setProtectionData(value.drm); if ((0, _general.isString)(options.dash.robustnessLevel) && options.dash.robustnessLevel) { dashPlayer.getProtectionController().setRobustnessLevel(options.dash.robustnessLevel); } } dashPlayer.attachSource(source); if (autoplay) { dashPlayer.play(); } } } else { node[propName] = value; } } }; }; for (var _i2 = 0, _total2 = props.length; _i2 < _total2; _i2++) { assignGettersSetters(props[_i2]); } _window2.default['__ready__' + id] = function (_dashPlayer) { mediaElement.dashPlayer = dashPlayer = _dashPlayer; var dashEvents = dashjs.MediaPlayer.events, assignEvents = function assignEvents(eventName) { if (eventName === 'loadedmetadata') { dashPlayer.initialize(); dashPlayer.attachView(node); dashPlayer.setAutoPlay(false); if (_typeof(options.dash.drm) === 'object' && !_mejs2.default.Utils.isObjectEmpty(options.dash.drm)) { dashPlayer.setProtectionData(options.dash.drm); if ((0, _general.isString)(options.dash.robustnessLevel) && options.dash.robustnessLevel) { dashPlayer.getProtectionController().setRobustnessLevel(options.dash.robustnessLevel); } } dashPlayer.attachSource(node.getSrc()); } node.addEventListener(eventName, attachNativeEvents); }; for (var _i3 = 0, _total3 = events.length; _i3 < _total3; _i3++) { assignEvents(events[_i3]); } var assignMdashEvents = function assignMdashEvents(e) { if (e.type.toLowerCase() === 'error') { mediaElement.generateError(e.message, node.src); console.error(e); } else { var _event = (0, _general.createEvent)(e.type, mediaElement); _event.data = e; mediaElement.dispatchEvent(_event); } }; for (var eventType in dashEvents) { if (dashEvents.hasOwnProperty(eventType)) { dashPlayer.on(dashEvents[eventType], function (e) { return assignMdashEvents(e); }); } } }; if (mediaFiles && mediaFiles.length > 0) { for (var _i4 = 0, _total4 = mediaFiles.length; _i4 < _total4; _i4++) { if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i4].type)) { node.setAttribute('src', mediaFiles[_i4].src); if (typeof mediaFiles[_i4].drm !== 'undefined') { options.dash.drm = mediaFiles[_i4].drm; } break; } } } node.setAttribute('id', id); originalNode.parentNode.insertBefore(node, originalNode); originalNode.autoplay = false; originalNode.style.display = 'none'; node.setSize = function (width, height) { node.style.width = width + 'px'; node.style.height = height + 'px'; return node; }; node.hide = function () { node.pause(); node.style.display = 'none'; return node; }; node.show = function () { node.style.display = ''; return node; }; node.destroy = function () { if (dashPlayer !== null) { dashPlayer.reset(); } }; var event = (0, _general.createEvent)('rendererready', node); mediaElement.dispatchEvent(event); mediaElement.promises.push(NativeDash.load({ options: options.dash, id: id })); return node; } }; _media.typeChecks.push(function (url) { return ~url.toLowerCase().indexOf('.mpd') ? 'application/dash+xml' : null; }); _renderer.renderer.add(DashNativeRenderer); },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],20:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.PluginDetector = undefined; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); var _i18n = _dereq_(5); var _i18n2 = _interopRequireDefault(_i18n); var _renderer = _dereq_(8); var _general = _dereq_(27); var _constants = _dereq_(25); var _media = _dereq_(28); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var PluginDetector = exports.PluginDetector = { plugins: [], hasPluginVersion: function hasPluginVersion(plugin, v) { var pv = PluginDetector.plugins[plugin]; v[1] = v[1] || 0; v[2] = v[2] || 0; return pv[0] > v[0] || pv[0] === v[0] && pv[1] > v[1] || pv[0] === v[0] && pv[1] === v[1] && pv[2] >= v[2]; }, addPlugin: function addPlugin(p, pluginName, mimeType, activeX, axDetect) { PluginDetector.plugins[p] = PluginDetector.detectPlugin(pluginName, mimeType, activeX, axDetect); }, detectPlugin: function detectPlugin(pluginName, mimeType, activeX, axDetect) { var version = [0, 0, 0], description = void 0, ax = void 0; if (_constants.NAV.plugins !== null && _constants.NAV.plugins !== undefined && _typeof(_constants.NAV.plugins[pluginName]) === 'object') { description = _constants.NAV.plugins[pluginName].description; if (description && !(typeof _constants.NAV.mimeTypes !== 'undefined' && _constants.NAV.mimeTypes[mimeType] && !_constants.NAV.mimeTypes[mimeType].enabledPlugin)) { version = description.replace(pluginName, '').replace(/^\s+/, '').replace(/\sr/gi, '.').split('.'); for (var i = 0, total = version.length; i < total; i++) { version[i] = parseInt(version[i].match(/\d+/), 10); } } } else if (_window2.default.ActiveXObject !== undefined) { try { ax = new ActiveXObject(activeX); if (ax) { version = axDetect(ax); } } catch (e) { } } return version; } }; PluginDetector.addPlugin('flash', 'Shockwave Flash', 'application/x-shockwave-flash', 'ShockwaveFlash.ShockwaveFlash', function (ax) { var version = [], d = ax.GetVariable("$version"); if (d) { d = d.split(" ")[1].split(","); version = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)]; } return version; }); var FlashMediaElementRenderer = { create: function create(mediaElement, options, mediaFiles) { var flash = {}; var isActive = false; flash.options = options; flash.id = mediaElement.id + '_' + flash.options.prefix; flash.mediaElement = mediaElement; flash.flashState = {}; flash.flashApi = null; flash.flashApiStack = []; var props = _mejs2.default.html5media.properties, assignGettersSetters = function assignGettersSetters(propName) { flash.flashState[propName] = null; var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1); flash['get' + capName] = function () { if (flash.flashApi !== null) { if (typeof flash.flashApi['get_' + propName] === 'function') { var value = flash.flashApi['get_' + propName](); if (propName === 'buffered') { return { start: function start() { return 0; }, end: function end() { return value; }, length: 1 }; } return value; } else { return null; } } else { return null; } }; flash['set' + capName] = function (value) { if (propName === 'src') { value = (0, _media.absolutizeUrl)(value); } if (flash.flashApi !== null && flash.flashApi['set_' + propName] !== undefined) { try { flash.flashApi['set_' + propName](value); } catch (e) { } } else { flash.flashApiStack.push({ type: 'set', propName: propName, value: value }); } }; }; for (var i = 0, total = props.length; i < total; i++) { assignGettersSetters(props[i]); } var methods = _mejs2.default.html5media.methods, assignMethods = function assignMethods(methodName) { flash[methodName] = function () { if (isActive) { if (flash.flashApi !== null) { if (flash.flashApi['fire_' + methodName]) { try { flash.flashApi['fire_' + methodName](); } catch (e) { } } else { } } else { flash.flashApiStack.push({ type: 'call', methodName: methodName }); } } }; }; methods.push('stop'); for (var _i = 0, _total = methods.length; _i < _total; _i++) { assignMethods(methods[_i]); } var initEvents = ['rendererready']; for (var _i2 = 0, _total2 = initEvents.length; _i2 < _total2; _i2++) { var event = (0, _general.createEvent)(initEvents[_i2], flash); mediaElement.dispatchEvent(event); } _window2.default['__ready__' + flash.id] = function () { flash.flashReady = true; flash.flashApi = _document2.default.getElementById('__' + flash.id); if (flash.flashApiStack.length) { for (var _i3 = 0, _total3 = flash.flashApiStack.length; _i3 < _total3; _i3++) { var stackItem = flash.flashApiStack[_i3]; if (stackItem.type === 'set') { var propName = stackItem.propName, capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1); flash['set' + capName](stackItem.value); } else if (stackItem.type === 'call') { flash[stackItem.methodName](); } } } }; _window2.default['__event__' + flash.id] = function (eventName, message) { var event = (0, _general.createEvent)(eventName, flash); if (message) { try { event.data = JSON.parse(message); event.details.data = JSON.parse(message); } catch (e) { event.message = message; } } flash.mediaElement.dispatchEvent(event); }; flash.flashWrapper = _document2.default.createElement('div'); if (['always', 'sameDomain'].indexOf(flash.options.shimScriptAccess) === -1) { flash.options.shimScriptAccess = 'sameDomain'; } var autoplay = mediaElement.originalNode.autoplay, flashVars = ['uid=' + flash.id, 'autoplay=' + autoplay, 'allowScriptAccess=' + flash.options.shimScriptAccess, 'preload=' + (mediaElement.originalNode.getAttribute('preload') || '')], isVideo = mediaElement.originalNode !== null && mediaElement.originalNode.tagName.toLowerCase() === 'video', flashHeight = isVideo ? mediaElement.originalNode.height : 1, flashWidth = isVideo ? mediaElement.originalNode.width : 1; if (mediaElement.originalNode.getAttribute('src')) { flashVars.push('src=' + mediaElement.originalNode.getAttribute('src')); } if (flash.options.enablePseudoStreaming === true) { flashVars.push('pseudostreamstart=' + flash.options.pseudoStreamingStartQueryParam); flashVars.push('pseudostreamtype=' + flash.options.pseudoStreamingType); } if (flash.options.streamDelimiter) { flashVars.push('streamdelimiter=' + encodeURIComponent(flash.options.streamDelimiter)); } if (flash.options.proxyType) { flashVars.push('proxytype=' + flash.options.proxyType); } mediaElement.appendChild(flash.flashWrapper); mediaElement.originalNode.style.display = 'none'; var settings = []; if (_constants.IS_IE || _constants.IS_EDGE) { var specialIEContainer = _document2.default.createElement('div'); flash.flashWrapper.appendChild(specialIEContainer); if (_constants.IS_EDGE) { settings = ['type="application/x-shockwave-flash"', 'data="' + flash.options.pluginPath + flash.options.filename + '"', 'id="__' + flash.id + '"', 'width="' + flashWidth + '"', 'height="' + flashHeight + '\'"']; } else { settings = ['classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"', 'codebase="//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab"', 'id="__' + flash.id + '"', 'width="' + flashWidth + '"', 'height="' + flashHeight + '"']; } if (!isVideo) { settings.push('style="clip: rect(0 0 0 0); position: absolute;"'); } specialIEContainer.outerHTML = '' + ('') + ('') + '' + '' + '' + ('') + '' + ('
        ' + _i18n2.default.t('mejs.install-flash') + '
        ') + '
        '; } else { settings = ['id="__' + flash.id + '"', 'name="__' + flash.id + '"', 'play="true"', 'loop="false"', 'quality="high"', 'bgcolor="#000000"', 'wmode="transparent"', 'allowScriptAccess="' + flash.options.shimScriptAccess + '"', 'allowFullScreen="true"', 'type="application/x-shockwave-flash"', 'pluginspage="//www.macromedia.com/go/getflashplayer"', 'src="' + flash.options.pluginPath + flash.options.filename + '"', 'flashvars="' + flashVars.join('&') + '"']; if (isVideo) { settings.push('width="' + flashWidth + '"'); settings.push('height="' + flashHeight + '"'); } else { settings.push('style="position: fixed; left: -9999em; top: -9999em;"'); } flash.flashWrapper.innerHTML = ''; } flash.flashNode = flash.flashWrapper.lastChild; flash.hide = function () { isActive = false; if (isVideo) { flash.flashNode.style.display = 'none'; } }; flash.show = function () { isActive = true; if (isVideo) { flash.flashNode.style.display = ''; } }; flash.setSize = function (width, height) { flash.flashNode.style.width = width + 'px'; flash.flashNode.style.height = height + 'px'; if (flash.flashApi !== null && typeof flash.flashApi.fire_setSize === 'function') { flash.flashApi.fire_setSize(width, height); } }; flash.destroy = function () { flash.flashNode.remove(); }; if (mediaFiles && mediaFiles.length > 0) { for (var _i4 = 0, _total4 = mediaFiles.length; _i4 < _total4; _i4++) { if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i4].type)) { flash.setSrc(mediaFiles[_i4].src); break; } } } return flash; } }; var hasFlash = PluginDetector.hasPluginVersion('flash', [10, 0, 0]); if (hasFlash) { _media.typeChecks.push(function (url) { url = url.toLowerCase(); if (url.startsWith('rtmp')) { if (~url.indexOf('.mp3')) { return 'audio/rtmp'; } else { return 'video/rtmp'; } } else if (/\.og(a|g)/i.test(url)) { return 'audio/ogg'; } else if (~url.indexOf('.m3u8')) { return 'application/x-mpegURL'; } else if (~url.indexOf('.mpd')) { return 'application/dash+xml'; } else if (~url.indexOf('.flv')) { return 'video/flv'; } else { return null; } }); var FlashMediaElementVideoRenderer = { name: 'flash_video', options: { prefix: 'flash_video', filename: 'mediaelement-flash-video.swf', enablePseudoStreaming: false, pseudoStreamingStartQueryParam: 'start', pseudoStreamingType: 'byte', proxyType: '', streamDelimiter: '' }, canPlayType: function canPlayType(type) { return ~['video/mp4', 'video/rtmp', 'audio/rtmp', 'rtmp/mp4', 'audio/mp4', 'video/flv', 'video/x-flv'].indexOf(type.toLowerCase()); }, create: FlashMediaElementRenderer.create }; _renderer.renderer.add(FlashMediaElementVideoRenderer); var FlashMediaElementHlsVideoRenderer = { name: 'flash_hls', options: { prefix: 'flash_hls', filename: 'mediaelement-flash-video-hls.swf' }, canPlayType: function canPlayType(type) { return ~['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type.toLowerCase()); }, create: FlashMediaElementRenderer.create }; _renderer.renderer.add(FlashMediaElementHlsVideoRenderer); var FlashMediaElementMdashVideoRenderer = { name: 'flash_dash', options: { prefix: 'flash_dash', filename: 'mediaelement-flash-video-mdash.swf' }, canPlayType: function canPlayType(type) { return ~['application/dash+xml'].indexOf(type.toLowerCase()); }, create: FlashMediaElementRenderer.create }; _renderer.renderer.add(FlashMediaElementMdashVideoRenderer); var FlashMediaElementAudioRenderer = { name: 'flash_audio', options: { prefix: 'flash_audio', filename: 'mediaelement-flash-audio.swf' }, canPlayType: function canPlayType(type) { return ~['audio/mp3'].indexOf(type.toLowerCase()); }, create: FlashMediaElementRenderer.create }; _renderer.renderer.add(FlashMediaElementAudioRenderer); var FlashMediaElementAudioOggRenderer = { name: 'flash_audio_ogg', options: { prefix: 'flash_audio_ogg', filename: 'mediaelement-flash-audio-ogg.swf' }, canPlayType: function canPlayType(type) { return ~['audio/ogg', 'audio/oga', 'audio/ogv'].indexOf(type.toLowerCase()); }, create: FlashMediaElementRenderer.create }; _renderer.renderer.add(FlashMediaElementAudioOggRenderer); } },{"2":2,"25":25,"27":27,"28":28,"3":3,"5":5,"7":7,"8":8}],21:[function(_dereq_,module,exports){ 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); var _renderer = _dereq_(8); var _general = _dereq_(27); var _constants = _dereq_(25); var _media = _dereq_(28); var _dom = _dereq_(26); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var NativeFlv = { promise: null, load: function load(settings) { if (typeof flvjs !== 'undefined') { NativeFlv.promise = new Promise(function (resolve) { resolve(); }).then(function () { NativeFlv._createPlayer(settings); }); } else { settings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdn.jsdelivr.net/npm/flv.js@latest'; NativeFlv.promise = NativeFlv.promise || (0, _dom.loadScript)(settings.options.path); NativeFlv.promise.then(function () { NativeFlv._createPlayer(settings); }); } return NativeFlv.promise; }, _createPlayer: function _createPlayer(settings) { flvjs.LoggingControl.enableDebug = settings.options.debug; flvjs.LoggingControl.enableVerbose = settings.options.debug; var player = flvjs.createPlayer(settings.options, settings.configs); _window2.default['__ready__' + settings.id](player); return player; } }; var FlvNativeRenderer = { name: 'native_flv', options: { prefix: 'native_flv', flv: { path: 'https://cdn.jsdelivr.net/npm/flv.js@latest', cors: true, debug: false } }, canPlayType: function canPlayType(type) { return _constants.HAS_MSE && ['video/x-flv', 'video/flv'].indexOf(type.toLowerCase()) > -1; }, create: function create(mediaElement, options, mediaFiles) { var originalNode = mediaElement.originalNode, id = mediaElement.id + '_' + options.prefix; var node = null, flvPlayer = null; node = originalNode.cloneNode(true); options = Object.assign(options, mediaElement.options); var props = _mejs2.default.html5media.properties, events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) { return e !== 'error'; }), attachNativeEvents = function attachNativeEvents(e) { var event = (0, _general.createEvent)(e.type, mediaElement); mediaElement.dispatchEvent(event); }, assignGettersSetters = function assignGettersSetters(propName) { var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1); node['get' + capName] = function () { return flvPlayer !== null ? node[propName] : null; }; node['set' + capName] = function (value) { if (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) { if (propName === 'src') { node[propName] = (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src ? value.src : value; if (flvPlayer !== null) { var _flvOptions = {}; _flvOptions.type = 'flv'; _flvOptions.url = value; _flvOptions.cors = options.flv.cors; _flvOptions.debug = options.flv.debug; _flvOptions.path = options.flv.path; var _flvConfigs = options.flv.configs; flvPlayer.destroy(); for (var i = 0, total = events.length; i < total; i++) { node.removeEventListener(events[i], attachNativeEvents); } flvPlayer = NativeFlv._createPlayer({ options: _flvOptions, configs: _flvConfigs, id: id }); flvPlayer.attachMediaElement(node); flvPlayer.load(); } } else { node[propName] = value; } } }; }; for (var i = 0, total = props.length; i < total; i++) { assignGettersSetters(props[i]); } _window2.default['__ready__' + id] = function (_flvPlayer) { mediaElement.flvPlayer = flvPlayer = _flvPlayer; var flvEvents = flvjs.Events, assignEvents = function assignEvents(eventName) { if (eventName === 'loadedmetadata') { flvPlayer.unload(); flvPlayer.detachMediaElement(); flvPlayer.attachMediaElement(node); flvPlayer.load(); } node.addEventListener(eventName, attachNativeEvents); }; for (var _i = 0, _total = events.length; _i < _total; _i++) { assignEvents(events[_i]); } var assignFlvEvents = function assignFlvEvents(name, data) { if (name === 'error') { var message = data[0] + ': ' + data[1] + ' ' + data[2].msg; mediaElement.generateError(message, node.src); } else { var _event = (0, _general.createEvent)(name, mediaElement); _event.data = data; mediaElement.dispatchEvent(_event); } }; var _loop = function _loop(eventType) { if (flvEvents.hasOwnProperty(eventType)) { flvPlayer.on(flvEvents[eventType], function () { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return assignFlvEvents(flvEvents[eventType], args); }); } }; for (var eventType in flvEvents) { _loop(eventType); } }; if (mediaFiles && mediaFiles.length > 0) { for (var _i2 = 0, _total2 = mediaFiles.length; _i2 < _total2; _i2++) { if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[_i2].type)) { node.setAttribute('src', mediaFiles[_i2].src); break; } } } node.setAttribute('id', id); originalNode.parentNode.insertBefore(node, originalNode); originalNode.autoplay = false; originalNode.style.display = 'none'; var flvOptions = {}; flvOptions.type = 'flv'; flvOptions.url = node.src; flvOptions.cors = options.flv.cors; flvOptions.debug = options.flv.debug; flvOptions.path = options.flv.path; var flvConfigs = options.flv.configs; node.setSize = function (width, height) { node.style.width = width + 'px'; node.style.height = height + 'px'; return node; }; node.hide = function () { if (flvPlayer !== null) { flvPlayer.pause(); } node.style.display = 'none'; return node; }; node.show = function () { node.style.display = ''; return node; }; node.destroy = function () { if (flvPlayer !== null) { flvPlayer.destroy(); } }; var event = (0, _general.createEvent)('rendererready', node); mediaElement.dispatchEvent(event); mediaElement.promises.push(NativeFlv.load({ options: flvOptions, configs: flvConfigs, id: id })); return node; } }; _media.typeChecks.push(function (url) { return ~url.toLowerCase().indexOf('.flv') ? 'video/flv' : null; }); _renderer.renderer.add(FlvNativeRenderer); },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],22:[function(_dereq_,module,exports){ 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); var _renderer = _dereq_(8); var _general = _dereq_(27); var _constants = _dereq_(25); var _media = _dereq_(28); var _dom = _dereq_(26); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var NativeHls = { promise: null, load: function load(settings) { if (typeof Hls !== 'undefined') { NativeHls.promise = new Promise(function (resolve) { resolve(); }).then(function () { NativeHls._createPlayer(settings); }); } else { settings.options.path = typeof settings.options.path === 'string' ? settings.options.path : 'https://cdn.jsdelivr.net/npm/hls.js@latest'; NativeHls.promise = NativeHls.promise || (0, _dom.loadScript)(settings.options.path); NativeHls.promise.then(function () { NativeHls._createPlayer(settings); }); } return NativeHls.promise; }, _createPlayer: function _createPlayer(settings) { var player = new Hls(settings.options); _window2.default['__ready__' + settings.id](player); return player; } }; var HlsNativeRenderer = { name: 'native_hls', options: { prefix: 'native_hls', hls: { path: 'https://cdn.jsdelivr.net/npm/hls.js@latest', autoStartLoad: false, debug: false } }, canPlayType: function canPlayType(type) { return _constants.HAS_MSE && ['application/x-mpegurl', 'application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type.toLowerCase()) > -1; }, create: function create(mediaElement, options, mediaFiles) { var originalNode = mediaElement.originalNode, id = mediaElement.id + '_' + options.prefix, preload = originalNode.getAttribute('preload'), autoplay = originalNode.autoplay; var hlsPlayer = null, node = null, index = 0, total = mediaFiles.length; node = originalNode.cloneNode(true); options = Object.assign(options, mediaElement.options); options.hls.autoStartLoad = preload && preload !== 'none' || autoplay; var props = _mejs2.default.html5media.properties, events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) { return e !== 'error'; }), attachNativeEvents = function attachNativeEvents(e) { var event = (0, _general.createEvent)(e.type, mediaElement); mediaElement.dispatchEvent(event); }, assignGettersSetters = function assignGettersSetters(propName) { var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1); node['get' + capName] = function () { return hlsPlayer !== null ? node[propName] : null; }; node['set' + capName] = function (value) { if (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) { if (propName === 'src') { node[propName] = (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.src ? value.src : value; if (hlsPlayer !== null) { hlsPlayer.destroy(); for (var i = 0, _total = events.length; i < _total; i++) { node.removeEventListener(events[i], attachNativeEvents); } hlsPlayer = NativeHls._createPlayer({ options: options.hls, id: id }); hlsPlayer.loadSource(value); hlsPlayer.attachMedia(node); } } else { node[propName] = value; } } }; }; for (var i = 0, _total2 = props.length; i < _total2; i++) { assignGettersSetters(props[i]); } _window2.default['__ready__' + id] = function (_hlsPlayer) { mediaElement.hlsPlayer = hlsPlayer = _hlsPlayer; var hlsEvents = Hls.Events, assignEvents = function assignEvents(eventName) { if (eventName === 'loadedmetadata') { var url = mediaElement.originalNode.src; hlsPlayer.detachMedia(); hlsPlayer.loadSource(url); hlsPlayer.attachMedia(node); } node.addEventListener(eventName, attachNativeEvents); }; for (var _i = 0, _total3 = events.length; _i < _total3; _i++) { assignEvents(events[_i]); } var recoverDecodingErrorDate = void 0, recoverSwapAudioCodecDate = void 0; var assignHlsEvents = function assignHlsEvents(name, data) { if (name === 'hlsError') { console.warn(data); data = data[1]; if (data.fatal) { switch (data.type) { case 'mediaError': var now = new Date().getTime(); if (!recoverDecodingErrorDate || now - recoverDecodingErrorDate > 3000) { recoverDecodingErrorDate = new Date().getTime(); hlsPlayer.recoverMediaError(); } else if (!recoverSwapAudioCodecDate || now - recoverSwapAudioCodecDate > 3000) { recoverSwapAudioCodecDate = new Date().getTime(); console.warn('Attempting to swap Audio Codec and recover from media error'); hlsPlayer.swapAudioCodec(); hlsPlayer.recoverMediaError(); } else { var message = 'Cannot recover, last media error recovery failed'; mediaElement.generateError(message, node.src); console.error(message); } break; case 'networkError': if (data.details === 'manifestLoadError') { if (index < total && mediaFiles[index + 1] !== undefined) { node.setSrc(mediaFiles[index++].src); node.load(); node.play(); } else { var _message = 'Network error'; mediaElement.generateError(_message, mediaFiles); console.error(_message); } } else { var _message2 = 'Network error'; mediaElement.generateError(_message2, mediaFiles); console.error(_message2); } break; default: hlsPlayer.destroy(); break; } return; } } var event = (0, _general.createEvent)(name, mediaElement); event.data = data; mediaElement.dispatchEvent(event); }; var _loop = function _loop(eventType) { if (hlsEvents.hasOwnProperty(eventType)) { hlsPlayer.on(hlsEvents[eventType], function () { for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return assignHlsEvents(hlsEvents[eventType], args); }); } }; for (var eventType in hlsEvents) { _loop(eventType); } }; if (total > 0) { for (; index < total; index++) { if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[index].type)) { node.setAttribute('src', mediaFiles[index].src); break; } } } if (preload !== 'auto' && !autoplay) { node.addEventListener('play', function () { if (hlsPlayer !== null) { hlsPlayer.startLoad(); } }); node.addEventListener('pause', function () { if (hlsPlayer !== null) { hlsPlayer.stopLoad(); } }); } node.setAttribute('id', id); originalNode.parentNode.insertBefore(node, originalNode); originalNode.autoplay = false; originalNode.style.display = 'none'; node.setSize = function (width, height) { node.style.width = width + 'px'; node.style.height = height + 'px'; return node; }; node.hide = function () { node.pause(); node.style.display = 'none'; return node; }; node.show = function () { node.style.display = ''; return node; }; node.destroy = function () { if (hlsPlayer !== null) { hlsPlayer.stopLoad(); hlsPlayer.destroy(); } }; var event = (0, _general.createEvent)('rendererready', node); mediaElement.dispatchEvent(event); mediaElement.promises.push(NativeHls.load({ options: options.hls, id: id })); return node; } }; _media.typeChecks.push(function (url) { return ~url.toLowerCase().indexOf('.m3u8') ? 'application/x-mpegURL' : null; }); _renderer.renderer.add(HlsNativeRenderer); },{"25":25,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],23:[function(_dereq_,module,exports){ 'use strict'; var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); var _renderer = _dereq_(8); var _general = _dereq_(27); var _constants = _dereq_(25); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var HtmlMediaElement = { name: 'html5', options: { prefix: 'html5' }, canPlayType: function canPlayType(type) { var mediaElement = _document2.default.createElement('video'); if (_constants.IS_ANDROID && /\/mp(3|4)$/i.test(type) || ~['application/x-mpegurl', 'vnd.apple.mpegurl', 'audio/mpegurl', 'audio/hls', 'video/hls'].indexOf(type.toLowerCase()) && _constants.SUPPORTS_NATIVE_HLS) { return 'yes'; } else if (mediaElement.canPlayType) { return mediaElement.canPlayType(type.toLowerCase()).replace(/no/, ''); } else { return ''; } }, create: function create(mediaElement, options, mediaFiles) { var id = mediaElement.id + '_' + options.prefix; var isActive = false; var node = null; if (mediaElement.originalNode === undefined || mediaElement.originalNode === null) { node = _document2.default.createElement('audio'); mediaElement.appendChild(node); } else { node = mediaElement.originalNode; } node.setAttribute('id', id); var props = _mejs2.default.html5media.properties, assignGettersSetters = function assignGettersSetters(propName) { var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1); node['get' + capName] = function () { return node[propName]; }; node['set' + capName] = function (value) { if (_mejs2.default.html5media.readOnlyProperties.indexOf(propName) === -1) { node[propName] = value; } }; }; for (var i = 0, _total = props.length; i < _total; i++) { assignGettersSetters(props[i]); } var events = _mejs2.default.html5media.events.concat(['click', 'mouseover', 'mouseout']).filter(function (e) { return e !== 'error'; }), assignEvents = function assignEvents(eventName) { node.addEventListener(eventName, function (e) { if (isActive) { var _event = (0, _general.createEvent)(e.type, e.target); mediaElement.dispatchEvent(_event); } }); }; for (var _i = 0, _total2 = events.length; _i < _total2; _i++) { assignEvents(events[_i]); } node.setSize = function (width, height) { node.style.width = width + 'px'; node.style.height = height + 'px'; return node; }; node.hide = function () { isActive = false; node.style.display = 'none'; return node; }; node.show = function () { isActive = true; node.style.display = ''; return node; }; var index = 0, total = mediaFiles.length; if (total > 0) { for (; index < total; index++) { if (_renderer.renderer.renderers[options.prefix].canPlayType(mediaFiles[index].type)) { node.setAttribute('src', mediaFiles[index].src); break; } } } node.addEventListener('error', function (e) { if (e && e.target && e.target.error && e.target.error.code === 4 && isActive) { if (index < total && mediaFiles[index + 1] !== undefined) { node.src = mediaFiles[index++].src; node.load(); node.play(); } else { mediaElement.generateError('Media error: Format(s) not supported or source(s) not found', mediaFiles); } } }); var event = (0, _general.createEvent)('rendererready', node); mediaElement.dispatchEvent(event); return node; } }; _window2.default.HtmlMediaElement = _mejs2.default.HtmlMediaElement = HtmlMediaElement; _renderer.renderer.add(HtmlMediaElement); },{"2":2,"25":25,"27":27,"3":3,"7":7,"8":8}],24:[function(_dereq_,module,exports){ 'use strict'; var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); var _renderer = _dereq_(8); var _general = _dereq_(27); var _media = _dereq_(28); var _dom = _dereq_(26); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var YouTubeApi = { isIframeStarted: false, isIframeLoaded: false, iframeQueue: [], enqueueIframe: function enqueueIframe(settings) { YouTubeApi.isLoaded = typeof YT !== 'undefined' && YT.loaded; if (YouTubeApi.isLoaded) { YouTubeApi.createIframe(settings); } else { YouTubeApi.loadIframeApi(); YouTubeApi.iframeQueue.push(settings); } }, loadIframeApi: function loadIframeApi() { if (!YouTubeApi.isIframeStarted) { (0, _dom.loadScript)('https://www.youtube.com/player_api'); YouTubeApi.isIframeStarted = true; } }, iFrameReady: function iFrameReady() { YouTubeApi.isLoaded = true; YouTubeApi.isIframeLoaded = true; while (YouTubeApi.iframeQueue.length > 0) { var settings = YouTubeApi.iframeQueue.pop(); YouTubeApi.createIframe(settings); } }, createIframe: function createIframe(settings) { return new YT.Player(settings.containerId, settings); }, getYouTubeId: function getYouTubeId(url) { var youTubeId = ''; if (url.indexOf('?') > 0) { youTubeId = YouTubeApi.getYouTubeIdFromParam(url); if (youTubeId === '') { youTubeId = YouTubeApi.getYouTubeIdFromUrl(url); } } else { youTubeId = YouTubeApi.getYouTubeIdFromUrl(url); } var id = youTubeId.substring(youTubeId.lastIndexOf('/') + 1); youTubeId = id.split('?'); return youTubeId[0]; }, getYouTubeIdFromParam: function getYouTubeIdFromParam(url) { if (url === undefined || url === null || !url.trim().length) { return null; } var parts = url.split('?'), parameters = parts[1].split('&'); var youTubeId = ''; for (var i = 0, total = parameters.length; i < total; i++) { var paramParts = parameters[i].split('='); if (paramParts[0] === 'v') { youTubeId = paramParts[1]; break; } } return youTubeId; }, getYouTubeIdFromUrl: function getYouTubeIdFromUrl(url) { if (url === undefined || url === null || !url.trim().length) { return null; } var parts = url.split('?'); url = parts[0]; return url.substring(url.lastIndexOf('/') + 1); }, getYouTubeNoCookieUrl: function getYouTubeNoCookieUrl(url) { if (url === undefined || url === null || !url.trim().length || url.indexOf('//www.youtube') === -1) { return url; } var parts = url.split('/'); parts[2] = parts[2].replace('.com', '-nocookie.com'); return parts.join('/'); } }; var YouTubeIframeRenderer = { name: 'youtube_iframe', options: { prefix: 'youtube_iframe', youtube: { autoplay: 0, controls: 0, disablekb: 1, end: 0, loop: 0, modestbranding: 0, playsinline: 0, rel: 0, showinfo: 0, start: 0, iv_load_policy: 3, nocookie: false, imageQuality: null } }, canPlayType: function canPlayType(type) { return ~['video/youtube', 'video/x-youtube'].indexOf(type.toLowerCase()); }, create: function create(mediaElement, options, mediaFiles) { var youtube = {}, apiStack = [], readyState = 4; var youTubeApi = null, paused = true, ended = false, youTubeIframe = null, volume = 1; youtube.options = options; youtube.id = mediaElement.id + '_' + options.prefix; youtube.mediaElement = mediaElement; var props = _mejs2.default.html5media.properties, assignGettersSetters = function assignGettersSetters(propName) { var capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1); youtube['get' + capName] = function () { if (youTubeApi !== null) { var value = null; switch (propName) { case 'currentTime': return youTubeApi.getCurrentTime(); case 'duration': return youTubeApi.getDuration(); case 'volume': volume = youTubeApi.getVolume() / 100; return volume; case 'playbackRate': return youTubeApi.getPlaybackRate(); case 'paused': return paused; case 'ended': return ended; case 'muted': return youTubeApi.isMuted(); case 'buffered': var percentLoaded = youTubeApi.getVideoLoadedFraction(), duration = youTubeApi.getDuration(); return { start: function start() { return 0; }, end: function end() { return percentLoaded * duration; }, length: 1 }; case 'src': return youTubeApi.getVideoUrl(); case 'readyState': return readyState; } return value; } else { return null; } }; youtube['set' + capName] = function (value) { if (youTubeApi !== null) { switch (propName) { case 'src': var url = typeof value === 'string' ? value : value[0].src, _videoId = YouTubeApi.getYouTubeId(url); if (mediaElement.originalNode.autoplay) { youTubeApi.loadVideoById(_videoId); } else { youTubeApi.cueVideoById(_videoId); } break; case 'currentTime': youTubeApi.seekTo(value); break; case 'muted': if (value) { youTubeApi.mute(); } else { youTubeApi.unMute(); } setTimeout(function () { var event = (0, _general.createEvent)('volumechange', youtube); mediaElement.dispatchEvent(event); }, 50); break; case 'volume': volume = value; youTubeApi.setVolume(value * 100); setTimeout(function () { var event = (0, _general.createEvent)('volumechange', youtube); mediaElement.dispatchEvent(event); }, 50); break; case 'playbackRate': youTubeApi.setPlaybackRate(value); setTimeout(function () { var event = (0, _general.createEvent)('ratechange', youtube); mediaElement.dispatchEvent(event); }, 50); break; case 'readyState': var event = (0, _general.createEvent)('canplay', youtube); mediaElement.dispatchEvent(event); break; default: break; } } else { apiStack.push({ type: 'set', propName: propName, value: value }); } }; }; for (var i = 0, total = props.length; i < total; i++) { assignGettersSetters(props[i]); } var methods = _mejs2.default.html5media.methods, assignMethods = function assignMethods(methodName) { youtube[methodName] = function () { if (youTubeApi !== null) { switch (methodName) { case 'play': paused = false; return youTubeApi.playVideo(); case 'pause': paused = true; return youTubeApi.pauseVideo(); case 'load': return null; } } else { apiStack.push({ type: 'call', methodName: methodName }); } }; }; for (var _i = 0, _total = methods.length; _i < _total; _i++) { assignMethods(methods[_i]); } var errorHandler = function errorHandler(error) { var message = ''; switch (error.data) { case 2: message = 'The request contains an invalid parameter value. Verify that video ID has 11 characters and that contains no invalid characters, such as exclamation points or asterisks.'; break; case 5: message = 'The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.'; break; case 100: message = 'The video requested was not found. Either video has been removed or has been marked as private.'; break; case 101: case 105: message = 'The owner of the requested video does not allow it to be played in embedded players.'; break; default: message = 'Unknown error.'; break; } mediaElement.generateError('Code ' + error.data + ': ' + message, mediaFiles); }; var youtubeContainer = _document2.default.createElement('div'); youtubeContainer.id = youtube.id; if (youtube.options.youtube.nocookie) { mediaElement.originalNode.src = YouTubeApi.getYouTubeNoCookieUrl(mediaFiles[0].src); } mediaElement.originalNode.parentNode.insertBefore(youtubeContainer, mediaElement.originalNode); mediaElement.originalNode.style.display = 'none'; var isAudio = mediaElement.originalNode.tagName.toLowerCase() === 'audio', height = isAudio ? '1' : mediaElement.originalNode.height, width = isAudio ? '1' : mediaElement.originalNode.width, videoId = YouTubeApi.getYouTubeId(mediaFiles[0].src), youtubeSettings = { id: youtube.id, containerId: youtubeContainer.id, videoId: videoId, height: height, width: width, host: youtube.options.youtube && youtube.options.youtube.nocookie ? 'https://www.youtube-nocookie.com' : undefined, playerVars: Object.assign({ controls: 0, rel: 0, disablekb: 1, showinfo: 0, modestbranding: 0, html5: 1, iv_load_policy: 3 }, youtube.options.youtube), origin: _window2.default.location.host, events: { onReady: function onReady(e) { mediaElement.youTubeApi = youTubeApi = e.target; mediaElement.youTubeState = { paused: true, ended: false }; if (apiStack.length) { for (var _i2 = 0, _total2 = apiStack.length; _i2 < _total2; _i2++) { var stackItem = apiStack[_i2]; if (stackItem.type === 'set') { var propName = stackItem.propName, capName = '' + propName.substring(0, 1).toUpperCase() + propName.substring(1); youtube['set' + capName](stackItem.value); } else if (stackItem.type === 'call') { youtube[stackItem.methodName](); } } } youTubeIframe = youTubeApi.getIframe(); if (mediaElement.originalNode.muted) { youTubeApi.mute(); } var events = ['mouseover', 'mouseout'], assignEvents = function assignEvents(e) { var newEvent = (0, _general.createEvent)(e.type, youtube); mediaElement.dispatchEvent(newEvent); }; for (var _i3 = 0, _total3 = events.length; _i3 < _total3; _i3++) { youTubeIframe.addEventListener(events[_i3], assignEvents, false); } var initEvents = ['rendererready', 'loadedmetadata', 'loadeddata', 'canplay']; for (var _i4 = 0, _total4 = initEvents.length; _i4 < _total4; _i4++) { var event = (0, _general.createEvent)(initEvents[_i4], youtube); mediaElement.dispatchEvent(event); } }, onStateChange: function onStateChange(e) { var events = []; switch (e.data) { case -1: events = ['loadedmetadata']; paused = true; ended = false; break; case 0: events = ['ended']; paused = false; ended = !youtube.options.youtube.loop; if (!youtube.options.youtube.loop) { youtube.stopInterval(); } break; case 1: events = ['play', 'playing']; paused = false; ended = false; youtube.startInterval(); break; case 2: events = ['pause']; paused = true; ended = false; youtube.stopInterval(); break; case 3: events = ['progress']; ended = false; break; case 5: events = ['loadeddata', 'loadedmetadata', 'canplay']; paused = true; ended = false; break; } for (var _i5 = 0, _total5 = events.length; _i5 < _total5; _i5++) { var event = (0, _general.createEvent)(events[_i5], youtube); mediaElement.dispatchEvent(event); } }, onError: function onError(e) { return errorHandler(e); } } }; if (isAudio || mediaElement.originalNode.hasAttribute('playsinline')) { youtubeSettings.playerVars.playsinline = 1; } if (mediaElement.originalNode.controls) { youtubeSettings.playerVars.controls = 1; } if (mediaElement.originalNode.autoplay) { youtubeSettings.playerVars.autoplay = 1; } if (mediaElement.originalNode.loop) { youtubeSettings.playerVars.loop = 1; } if ((youtubeSettings.playerVars.loop && parseInt(youtubeSettings.playerVars.loop, 10) === 1 || mediaElement.originalNode.src.indexOf('loop=') > -1) && !youtubeSettings.playerVars.playlist && mediaElement.originalNode.src.indexOf('playlist=') === -1) { youtubeSettings.playerVars.playlist = YouTubeApi.getYouTubeId(mediaElement.originalNode.src); } YouTubeApi.enqueueIframe(youtubeSettings); youtube.onEvent = function (eventName, player, _youTubeState) { if (_youTubeState !== null && _youTubeState !== undefined) { mediaElement.youTubeState = _youTubeState; } }; youtube.setSize = function (width, height) { if (youTubeApi !== null) { youTubeApi.setSize(width, height); } }; youtube.hide = function () { youtube.stopInterval(); youtube.pause(); if (youTubeIframe) { youTubeIframe.style.display = 'none'; } }; youtube.show = function () { if (youTubeIframe) { youTubeIframe.style.display = ''; } }; youtube.destroy = function () { youTubeApi.destroy(); }; youtube.interval = null; youtube.startInterval = function () { youtube.interval = setInterval(function () { var event = (0, _general.createEvent)('timeupdate', youtube); mediaElement.dispatchEvent(event); }, 250); }; youtube.stopInterval = function () { if (youtube.interval) { clearInterval(youtube.interval); } }; youtube.getPosterUrl = function () { var quality = options.youtube.imageQuality, resolutions = ['default', 'hqdefault', 'mqdefault', 'sddefault', 'maxresdefault'], id = YouTubeApi.getYouTubeId(mediaElement.originalNode.src); return quality && resolutions.indexOf(quality) > -1 && id ? 'https://img.youtube.com/vi/' + id + '/' + quality + '.jpg' : ''; }; return youtube; } }; _window2.default.onYouTubePlayerAPIReady = function () { YouTubeApi.iFrameReady(); }; _media.typeChecks.push(function (url) { return (/\/\/(www\.youtube|youtu\.?be)/i.test(url) ? 'video/x-youtube' : null ); }); _renderer.renderer.add(YouTubeIframeRenderer); },{"2":2,"26":26,"27":27,"28":28,"3":3,"7":7,"8":8}],25:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.cancelFullScreen = exports.requestFullScreen = exports.isFullScreen = exports.FULLSCREEN_EVENT_NAME = exports.HAS_NATIVE_FULLSCREEN_ENABLED = exports.HAS_TRUE_NATIVE_FULLSCREEN = exports.HAS_IOS_FULLSCREEN = exports.HAS_MS_NATIVE_FULLSCREEN = exports.HAS_MOZ_NATIVE_FULLSCREEN = exports.HAS_WEBKIT_NATIVE_FULLSCREEN = exports.HAS_NATIVE_FULLSCREEN = exports.SUPPORTS_NATIVE_HLS = exports.SUPPORT_PASSIVE_EVENT = exports.SUPPORT_POINTER_EVENTS = exports.HAS_MSE = exports.IS_STOCK_ANDROID = exports.IS_SAFARI = exports.IS_FIREFOX = exports.IS_CHROME = exports.IS_EDGE = exports.IS_IE = exports.IS_ANDROID = exports.IS_IOS = exports.IS_IPOD = exports.IS_IPHONE = exports.IS_IPAD = exports.UA = exports.NAV = undefined; var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var NAV = exports.NAV = _window2.default.navigator; var UA = exports.UA = NAV.userAgent.toLowerCase(); var IS_IPAD = exports.IS_IPAD = /ipad/i.test(UA) && !_window2.default.MSStream; var IS_IPHONE = exports.IS_IPHONE = /iphone/i.test(UA) && !_window2.default.MSStream; var IS_IPOD = exports.IS_IPOD = /ipod/i.test(UA) && !_window2.default.MSStream; var IS_IOS = exports.IS_IOS = /ipad|iphone|ipod/i.test(UA) && !_window2.default.MSStream; var IS_ANDROID = exports.IS_ANDROID = /android/i.test(UA); var IS_IE = exports.IS_IE = /(trident|microsoft)/i.test(NAV.appName); var IS_EDGE = exports.IS_EDGE = 'msLaunchUri' in NAV && !('documentMode' in _document2.default); var IS_CHROME = exports.IS_CHROME = /chrome/i.test(UA); var IS_FIREFOX = exports.IS_FIREFOX = /firefox/i.test(UA); var IS_SAFARI = exports.IS_SAFARI = /safari/i.test(UA) && !IS_CHROME; var IS_STOCK_ANDROID = exports.IS_STOCK_ANDROID = /^mozilla\/\d+\.\d+\s\(linux;\su;/i.test(UA); var HAS_MSE = exports.HAS_MSE = 'MediaSource' in _window2.default; var SUPPORT_POINTER_EVENTS = exports.SUPPORT_POINTER_EVENTS = function () { var element = _document2.default.createElement('x'), documentElement = _document2.default.documentElement, getComputedStyle = _window2.default.getComputedStyle; if (!('pointerEvents' in element.style)) { return false; } element.style.pointerEvents = 'auto'; element.style.pointerEvents = 'x'; documentElement.appendChild(element); var supports = getComputedStyle && (getComputedStyle(element, '') || {}).pointerEvents === 'auto'; element.remove(); return !!supports; }(); var SUPPORT_PASSIVE_EVENT = exports.SUPPORT_PASSIVE_EVENT = function () { var supportsPassive = false; try { var opts = Object.defineProperty({}, 'passive', { get: function get() { supportsPassive = true; } }); _window2.default.addEventListener('test', null, opts); } catch (e) {} return supportsPassive; }(); var html5Elements = ['source', 'track', 'audio', 'video']; var video = void 0; for (var i = 0, total = html5Elements.length; i < total; i++) { video = _document2.default.createElement(html5Elements[i]); } var SUPPORTS_NATIVE_HLS = exports.SUPPORTS_NATIVE_HLS = IS_SAFARI || IS_IE && /edge/i.test(UA); var hasiOSFullScreen = video.webkitEnterFullscreen !== undefined; var hasNativeFullscreen = video.requestFullscreen !== undefined; if (hasiOSFullScreen && /mac os x 10_5/i.test(UA)) { hasNativeFullscreen = false; hasiOSFullScreen = false; } var hasWebkitNativeFullScreen = video.webkitRequestFullScreen !== undefined; var hasMozNativeFullScreen = video.mozRequestFullScreen !== undefined; var hasMsNativeFullScreen = video.msRequestFullscreen !== undefined; var hasTrueNativeFullScreen = hasWebkitNativeFullScreen || hasMozNativeFullScreen || hasMsNativeFullScreen; var nativeFullScreenEnabled = hasTrueNativeFullScreen; var fullScreenEventName = ''; var isFullScreen = void 0, requestFullScreen = void 0, cancelFullScreen = void 0; if (hasMozNativeFullScreen) { nativeFullScreenEnabled = _document2.default.mozFullScreenEnabled; } else if (hasMsNativeFullScreen) { nativeFullScreenEnabled = _document2.default.msFullscreenEnabled; } if (IS_CHROME) { hasiOSFullScreen = false; } if (hasTrueNativeFullScreen) { if (hasWebkitNativeFullScreen) { fullScreenEventName = 'webkitfullscreenchange'; } else if (hasMozNativeFullScreen) { fullScreenEventName = 'fullscreenchange'; } else if (hasMsNativeFullScreen) { fullScreenEventName = 'MSFullscreenChange'; } exports.isFullScreen = isFullScreen = function isFullScreen() { if (hasMozNativeFullScreen) { return _document2.default.mozFullScreen; } else if (hasWebkitNativeFullScreen) { return _document2.default.webkitIsFullScreen; } else if (hasMsNativeFullScreen) { return _document2.default.msFullscreenElement !== null; } }; exports.requestFullScreen = requestFullScreen = function requestFullScreen(el) { if (hasWebkitNativeFullScreen) { el.webkitRequestFullScreen(); } else if (hasMozNativeFullScreen) { el.mozRequestFullScreen(); } else if (hasMsNativeFullScreen) { el.msRequestFullscreen(); } }; exports.cancelFullScreen = cancelFullScreen = function cancelFullScreen() { if (hasWebkitNativeFullScreen) { _document2.default.webkitCancelFullScreen(); } else if (hasMozNativeFullScreen) { _document2.default.mozCancelFullScreen(); } else if (hasMsNativeFullScreen) { _document2.default.msExitFullscreen(); } }; } var HAS_NATIVE_FULLSCREEN = exports.HAS_NATIVE_FULLSCREEN = hasNativeFullscreen; var HAS_WEBKIT_NATIVE_FULLSCREEN = exports.HAS_WEBKIT_NATIVE_FULLSCREEN = hasWebkitNativeFullScreen; var HAS_MOZ_NATIVE_FULLSCREEN = exports.HAS_MOZ_NATIVE_FULLSCREEN = hasMozNativeFullScreen; var HAS_MS_NATIVE_FULLSCREEN = exports.HAS_MS_NATIVE_FULLSCREEN = hasMsNativeFullScreen; var HAS_IOS_FULLSCREEN = exports.HAS_IOS_FULLSCREEN = hasiOSFullScreen; var HAS_TRUE_NATIVE_FULLSCREEN = exports.HAS_TRUE_NATIVE_FULLSCREEN = hasTrueNativeFullScreen; var HAS_NATIVE_FULLSCREEN_ENABLED = exports.HAS_NATIVE_FULLSCREEN_ENABLED = nativeFullScreenEnabled; var FULLSCREEN_EVENT_NAME = exports.FULLSCREEN_EVENT_NAME = fullScreenEventName; exports.isFullScreen = isFullScreen; exports.requestFullScreen = requestFullScreen; exports.cancelFullScreen = cancelFullScreen; _mejs2.default.Features = _mejs2.default.Features || {}; _mejs2.default.Features.isiPad = IS_IPAD; _mejs2.default.Features.isiPod = IS_IPOD; _mejs2.default.Features.isiPhone = IS_IPHONE; _mejs2.default.Features.isiOS = _mejs2.default.Features.isiPhone || _mejs2.default.Features.isiPad; _mejs2.default.Features.isAndroid = IS_ANDROID; _mejs2.default.Features.isIE = IS_IE; _mejs2.default.Features.isEdge = IS_EDGE; _mejs2.default.Features.isChrome = IS_CHROME; _mejs2.default.Features.isFirefox = IS_FIREFOX; _mejs2.default.Features.isSafari = IS_SAFARI; _mejs2.default.Features.isStockAndroid = IS_STOCK_ANDROID; _mejs2.default.Features.hasMSE = HAS_MSE; _mejs2.default.Features.supportsNativeHLS = SUPPORTS_NATIVE_HLS; _mejs2.default.Features.supportsPointerEvents = SUPPORT_POINTER_EVENTS; _mejs2.default.Features.supportsPassiveEvent = SUPPORT_PASSIVE_EVENT; _mejs2.default.Features.hasiOSFullScreen = HAS_IOS_FULLSCREEN; _mejs2.default.Features.hasNativeFullscreen = HAS_NATIVE_FULLSCREEN; _mejs2.default.Features.hasWebkitNativeFullScreen = HAS_WEBKIT_NATIVE_FULLSCREEN; _mejs2.default.Features.hasMozNativeFullScreen = HAS_MOZ_NATIVE_FULLSCREEN; _mejs2.default.Features.hasMsNativeFullScreen = HAS_MS_NATIVE_FULLSCREEN; _mejs2.default.Features.hasTrueNativeFullScreen = HAS_TRUE_NATIVE_FULLSCREEN; _mejs2.default.Features.nativeFullScreenEnabled = HAS_NATIVE_FULLSCREEN_ENABLED; _mejs2.default.Features.fullScreenEventName = FULLSCREEN_EVENT_NAME; _mejs2.default.Features.isFullScreen = isFullScreen; _mejs2.default.Features.requestFullScreen = requestFullScreen; _mejs2.default.Features.cancelFullScreen = cancelFullScreen; },{"2":2,"3":3,"7":7}],26:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.removeClass = exports.addClass = exports.hasClass = undefined; exports.loadScript = loadScript; exports.offset = offset; exports.toggleClass = toggleClass; exports.fadeOut = fadeOut; exports.fadeIn = fadeIn; exports.siblings = siblings; exports.visible = visible; exports.ajax = ajax; var _window = _dereq_(3); var _window2 = _interopRequireDefault(_window); var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function loadScript(url) { return new Promise(function (resolve, reject) { var script = _document2.default.createElement('script'); script.src = url; script.async = true; script.onload = function () { script.remove(); resolve(); }; script.onerror = function () { script.remove(); reject(); }; _document2.default.head.appendChild(script); }); } function offset(el) { var rect = el.getBoundingClientRect(), scrollLeft = _window2.default.pageXOffset || _document2.default.documentElement.scrollLeft, scrollTop = _window2.default.pageYOffset || _document2.default.documentElement.scrollTop; return { top: rect.top + scrollTop, left: rect.left + scrollLeft }; } var hasClassMethod = void 0, addClassMethod = void 0, removeClassMethod = void 0; if ('classList' in _document2.default.documentElement) { hasClassMethod = function hasClassMethod(el, className) { return el.classList !== undefined && el.classList.contains(className); }; addClassMethod = function addClassMethod(el, className) { return el.classList.add(className); }; removeClassMethod = function removeClassMethod(el, className) { return el.classList.remove(className); }; } else { hasClassMethod = function hasClassMethod(el, className) { return new RegExp('\\b' + className + '\\b').test(el.className); }; addClassMethod = function addClassMethod(el, className) { if (!hasClass(el, className)) { el.className += ' ' + className; } }; removeClassMethod = function removeClassMethod(el, className) { el.className = el.className.replace(new RegExp('\\b' + className + '\\b', 'g'), ''); }; } var hasClass = exports.hasClass = hasClassMethod; var addClass = exports.addClass = addClassMethod; var removeClass = exports.removeClass = removeClassMethod; function toggleClass(el, className) { hasClass(el, className) ? removeClass(el, className) : addClass(el, className); } function fadeOut(el) { var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 400; var callback = arguments[2]; if (!el.style.opacity) { el.style.opacity = 1; } var start = null; _window2.default.requestAnimationFrame(function animate(timestamp) { start = start || timestamp; var progress = timestamp - start; var opacity = parseFloat(1 - progress / duration, 2); el.style.opacity = opacity < 0 ? 0 : opacity; if (progress > duration) { if (callback && typeof callback === 'function') { callback(); } } else { _window2.default.requestAnimationFrame(animate); } }); } function fadeIn(el) { var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 400; var callback = arguments[2]; if (!el.style.opacity) { el.style.opacity = 0; } var start = null; _window2.default.requestAnimationFrame(function animate(timestamp) { start = start || timestamp; var progress = timestamp - start; var opacity = parseFloat(progress / duration, 2); el.style.opacity = opacity > 1 ? 1 : opacity; if (progress > duration) { if (callback && typeof callback === 'function') { callback(); } } else { _window2.default.requestAnimationFrame(animate); } }); } function siblings(el, filter) { var siblings = []; el = el.parentNode.firstChild; do { if (!filter || filter(el)) { siblings.push(el); } } while (el = el.nextSibling); return siblings; } function visible(elem) { if (elem.getClientRects !== undefined && elem.getClientRects === 'function') { return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length); } return !!(elem.offsetWidth || elem.offsetHeight); } function ajax(url, dataType, success, error) { var xhr = _window2.default.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'); var type = 'application/x-www-form-urlencoded; charset=UTF-8', completed = false, accept = '*/'.concat('*'); switch (dataType) { case 'text': type = 'text/plain'; break; case 'json': type = 'application/json, text/javascript'; break; case 'html': type = 'text/html'; break; case 'xml': type = 'application/xml, text/xml'; break; } if (type !== 'application/x-www-form-urlencoded') { accept = type + ', */*; q=0.01'; } if (xhr) { xhr.open('GET', url, true); xhr.setRequestHeader('Accept', accept); xhr.onreadystatechange = function () { if (completed) { return; } if (xhr.readyState === 4) { if (xhr.status === 200) { completed = true; var data = void 0; switch (dataType) { case 'json': data = JSON.parse(xhr.responseText); break; case 'xml': data = xhr.responseXML; break; default: data = xhr.responseText; break; } success(data); } else if (typeof error === 'function') { error(xhr.status); } } }; xhr.send(); } } _mejs2.default.Utils = _mejs2.default.Utils || {}; _mejs2.default.Utils.offset = offset; _mejs2.default.Utils.hasClass = hasClass; _mejs2.default.Utils.addClass = addClass; _mejs2.default.Utils.removeClass = removeClass; _mejs2.default.Utils.toggleClass = toggleClass; _mejs2.default.Utils.fadeIn = fadeIn; _mejs2.default.Utils.fadeOut = fadeOut; _mejs2.default.Utils.siblings = siblings; _mejs2.default.Utils.visible = visible; _mejs2.default.Utils.ajax = ajax; _mejs2.default.Utils.loadScript = loadScript; },{"2":2,"3":3,"7":7}],27:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.escapeHTML = escapeHTML; exports.debounce = debounce; exports.isObjectEmpty = isObjectEmpty; exports.splitEvents = splitEvents; exports.createEvent = createEvent; exports.isNodeAfter = isNodeAfter; exports.isString = isString; var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function escapeHTML(input) { if (typeof input !== 'string') { throw new Error('Argument passed must be a string'); } var map = { '&': '&', '<': '<', '>': '>', '"': '"' }; return input.replace(/[&<>"]/g, function (c) { return map[c]; }); } function debounce(func, wait) { var _this = this, _arguments = arguments; var immediate = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; if (typeof func !== 'function') { throw new Error('First argument must be a function'); } if (typeof wait !== 'number') { throw new Error('Second argument must be a numeric value'); } var timeout = void 0; return function () { var context = _this, args = _arguments; var later = function later() { timeout = null; if (!immediate) { func.apply(context, args); } }; var callNow = immediate && !timeout; clearTimeout(timeout); timeout = setTimeout(later, wait); if (callNow) { func.apply(context, args); } }; } function isObjectEmpty(instance) { return Object.getOwnPropertyNames(instance).length <= 0; } function splitEvents(events, id) { var rwindow = /^((after|before)print|(before)?unload|hashchange|message|o(ff|n)line|page(hide|show)|popstate|resize|storage)\b/; var ret = { d: [], w: [] }; (events || '').split(' ').forEach(function (v) { var eventName = '' + v + (id ? '.' + id : ''); if (eventName.startsWith('.')) { ret.d.push(eventName); ret.w.push(eventName); } else { ret[rwindow.test(v) ? 'w' : 'd'].push(eventName); } }); ret.d = ret.d.join(' '); ret.w = ret.w.join(' '); return ret; } function createEvent(eventName, target) { if (typeof eventName !== 'string') { throw new Error('Event name must be a string'); } var eventFrags = eventName.match(/([a-z]+\.([a-z]+))/i), detail = { target: target }; if (eventFrags !== null) { eventName = eventFrags[1]; detail.namespace = eventFrags[2]; } return new window.CustomEvent(eventName, { detail: detail }); } function isNodeAfter(sourceNode, targetNode) { return !!(sourceNode && targetNode && sourceNode.compareDocumentPosition(targetNode) & 2); } function isString(value) { return typeof value === 'string'; } _mejs2.default.Utils = _mejs2.default.Utils || {}; _mejs2.default.Utils.escapeHTML = escapeHTML; _mejs2.default.Utils.debounce = debounce; _mejs2.default.Utils.isObjectEmpty = isObjectEmpty; _mejs2.default.Utils.splitEvents = splitEvents; _mejs2.default.Utils.createEvent = createEvent; _mejs2.default.Utils.isNodeAfter = isNodeAfter; _mejs2.default.Utils.isString = isString; },{"7":7}],28:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.typeChecks = undefined; exports.absolutizeUrl = absolutizeUrl; exports.formatType = formatType; exports.getMimeFromType = getMimeFromType; exports.getTypeFromFile = getTypeFromFile; exports.getExtension = getExtension; exports.normalizeExtension = normalizeExtension; var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); var _general = _dereq_(27); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var typeChecks = exports.typeChecks = []; function absolutizeUrl(url) { if (typeof url !== 'string') { throw new Error('`url` argument must be a string'); } var el = document.createElement('div'); el.innerHTML = 'x'; return el.firstChild.href; } function formatType(url) { var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : ''; return url && !type ? getTypeFromFile(url) : type; } function getMimeFromType(type) { if (typeof type !== 'string') { throw new Error('`type` argument must be a string'); } return type && type.indexOf(';') > -1 ? type.substr(0, type.indexOf(';')) : type; } function getTypeFromFile(url) { if (typeof url !== 'string') { throw new Error('`url` argument must be a string'); } for (var i = 0, total = typeChecks.length; i < total; i++) { var type = typeChecks[i](url); if (type) { return type; } } var ext = getExtension(url), normalizedExt = normalizeExtension(ext); var mime = 'video/mp4'; if (normalizedExt) { if (~['mp4', 'm4v', 'ogg', 'ogv', 'webm', 'flv', 'mpeg'].indexOf(normalizedExt)) { mime = 'video/' + normalizedExt; } else if ('mov' === normalizedExt) { mime = 'video/quicktime'; } else if (~['mp3', 'oga', 'wav', 'mid', 'midi'].indexOf(normalizedExt)) { mime = 'audio/' + normalizedExt; } } return mime; } function getExtension(url) { if (typeof url !== 'string') { throw new Error('`url` argument must be a string'); } var baseUrl = url.split('?')[0], baseName = baseUrl.split('\\').pop().split('/').pop(); return ~baseName.indexOf('.') ? baseName.substring(baseName.lastIndexOf('.') + 1) : ''; } function normalizeExtension(extension) { if (typeof extension !== 'string') { throw new Error('`extension` argument must be a string'); } switch (extension) { case 'mp4': case 'm4v': return 'mp4'; case 'webm': case 'webma': case 'webmv': return 'webm'; case 'ogg': case 'oga': case 'ogv': return 'ogg'; default: return extension; } } _mejs2.default.Utils = _mejs2.default.Utils || {}; _mejs2.default.Utils.typeChecks = typeChecks; _mejs2.default.Utils.absolutizeUrl = absolutizeUrl; _mejs2.default.Utils.formatType = formatType; _mejs2.default.Utils.getMimeFromType = getMimeFromType; _mejs2.default.Utils.getTypeFromFile = getTypeFromFile; _mejs2.default.Utils.getExtension = getExtension; _mejs2.default.Utils.normalizeExtension = normalizeExtension; },{"27":27,"7":7}],29:[function(_dereq_,module,exports){ 'use strict'; var _document = _dereq_(2); var _document2 = _interopRequireDefault(_document); var _promisePolyfill = _dereq_(4); var _promisePolyfill2 = _interopRequireDefault(_promisePolyfill); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } (function (arr) { arr.forEach(function (item) { if (item.hasOwnProperty('remove')) { return; } Object.defineProperty(item, 'remove', { configurable: true, enumerable: true, writable: true, value: function remove() { this.parentNode.removeChild(this); } }); }); })([Element.prototype, CharacterData.prototype, DocumentType.prototype]); (function () { if (typeof window.CustomEvent === 'function') { return false; } function CustomEvent(event, params) { params = params || { bubbles: false, cancelable: false, detail: undefined }; var evt = _document2.default.createEvent('CustomEvent'); evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail); return evt; } CustomEvent.prototype = window.Event.prototype; window.CustomEvent = CustomEvent; })(); if (typeof Object.assign !== 'function') { Object.assign = function (target) { if (target === null || target === undefined) { throw new TypeError('Cannot convert undefined or null to object'); } var to = Object(target); for (var index = 1, total = arguments.length; index < total; index++) { var nextSource = arguments[index]; if (nextSource !== null) { for (var nextKey in nextSource) { if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { to[nextKey] = nextSource[nextKey]; } } } } return to; }; } if (!String.prototype.startsWith) { String.prototype.startsWith = function (searchString, position) { position = position || 0; return this.substr(position, searchString.length) === searchString; }; } if (!Element.prototype.matches) { Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) { var matches = (this.document || this.ownerDocument).querySelectorAll(s), i = matches.length - 1; while (--i >= 0 && matches.item(i) !== this) {} return i > -1; }; } if (window.Element && !Element.prototype.closest) { Element.prototype.closest = function (s) { var matches = (this.document || this.ownerDocument).querySelectorAll(s), i = void 0, el = this; do { i = matches.length; while (--i >= 0 && matches.item(i) !== el) {} } while (i < 0 && (el = el.parentElement)); return el; }; } (function () { var lastTime = 0; var vendors = ['ms', 'moz', 'webkit', 'o']; for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame']; } if (!window.requestAnimationFrame) window.requestAnimationFrame = function (callback) { var currTime = new Date().getTime(); var timeToCall = Math.max(0, 16 - (currTime - lastTime)); var id = window.setTimeout(function () { callback(currTime + timeToCall); }, timeToCall); lastTime = currTime + timeToCall; return id; }; if (!window.cancelAnimationFrame) window.cancelAnimationFrame = function (id) { clearTimeout(id); }; })(); if (/firefox/i.test(navigator.userAgent)) { var getComputedStyle = window.getComputedStyle; window.getComputedStyle = function (el, pseudoEl) { var t = getComputedStyle(el, pseudoEl); return t === null ? { getPropertyValue: function getPropertyValue() {} } : t; }; } if (!window.Promise) { window.Promise = _promisePolyfill2.default; } (function (constructor) { if (constructor && constructor.prototype && constructor.prototype.children === null) { Object.defineProperty(constructor.prototype, 'children', { get: function get() { var i = 0, node = void 0, nodes = this.childNodes, children = []; while (node = nodes[i++]) { if (node.nodeType === 1) { children.push(node); } } return children; } }); } })(window.Node || window.Element); },{"2":2,"4":4}],30:[function(_dereq_,module,exports){ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.isDropFrame = isDropFrame; exports.secondsToTimeCode = secondsToTimeCode; exports.timeCodeToSeconds = timeCodeToSeconds; exports.calculateTimeFormat = calculateTimeFormat; exports.convertSMPTEtoSeconds = convertSMPTEtoSeconds; var _mejs = _dereq_(7); var _mejs2 = _interopRequireDefault(_mejs); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function isDropFrame() { var fps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 25; return !(fps % 1 === 0); } function secondsToTimeCode(time) { var forceHours = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; var showFrameCount = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; var fps = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 25; var secondsDecimalLength = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0; var timeFormat = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 'hh:mm:ss'; time = !time || typeof time !== 'number' || time < 0 ? 0 : time; var dropFrames = Math.round(fps * 0.066666), timeBase = Math.round(fps), framesPer24Hours = Math.round(fps * 3600) * 24, framesPer10Minutes = Math.round(fps * 600), frameSep = isDropFrame(fps) ? ';' : ':', hours = void 0, minutes = void 0, seconds = void 0, frames = void 0, f = Math.round(time * fps); if (isDropFrame(fps)) { if (f < 0) { f = framesPer24Hours + f; } f = f % framesPer24Hours; var d = Math.floor(f / framesPer10Minutes); var m = f % framesPer10Minutes; f = f + dropFrames * 9 * d; if (m > dropFrames) { f = f + dropFrames * Math.floor((m - dropFrames) / Math.round(timeBase * 60 - dropFrames)); } var timeBaseDivision = Math.floor(f / timeBase); hours = Math.floor(Math.floor(timeBaseDivision / 60) / 60); minutes = Math.floor(timeBaseDivision / 60) % 60; if (showFrameCount) { seconds = timeBaseDivision % 60; } else { seconds = Math.floor(f / timeBase % 60).toFixed(secondsDecimalLength); } } else { hours = Math.floor(time / 3600) % 24; minutes = Math.floor(time / 60) % 60; if (showFrameCount) { seconds = Math.floor(time % 60); } else { seconds = Math.floor(time % 60).toFixed(secondsDecimalLength); } } hours = hours <= 0 ? 0 : hours; minutes = minutes <= 0 ? 0 : minutes; seconds = seconds <= 0 ? 0 : seconds; seconds = seconds === 60 ? 0 : seconds; minutes = minutes === 60 ? 0 : minutes; var timeFormatFrags = timeFormat.split(':'); var timeFormatSettings = {}; for (var i = 0, total = timeFormatFrags.length; i < total; ++i) { var unique = ''; for (var j = 0, t = timeFormatFrags[i].length; j < t; j++) { if (unique.indexOf(timeFormatFrags[i][j]) < 0) { unique += timeFormatFrags[i][j]; } } if (~['f', 's', 'm', 'h'].indexOf(unique)) { timeFormatSettings[unique] = timeFormatFrags[i].length; } } var result = forceHours || hours > 0 ? (hours < 10 && timeFormatSettings.h > 1 ? '0' + hours : hours) + ':' : ''; result += (minutes < 10 && timeFormatSettings.m > 1 ? '0' + minutes : minutes) + ':'; result += '' + (seconds < 10 && timeFormatSettings.s > 1 ? '0' + seconds : seconds); if (showFrameCount) { frames = (f % timeBase).toFixed(0); frames = frames <= 0 ? 0 : frames; result += frames < 10 && timeFormatSettings.f ? frameSep + '0' + frames : '' + frameSep + frames; } return result; } function timeCodeToSeconds(time) { var fps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 25; if (typeof time !== 'string') { throw new TypeError('Time must be a string'); } if (time.indexOf(';') > 0) { time = time.replace(';', ':'); } if (!/\d{2}(\:\d{2}){0,3}/i.test(time)) { throw new TypeError('Time code must have the format `00:00:00`'); } var parts = time.split(':'); var output = void 0, hours = 0, minutes = 0, seconds = 0, frames = 0, totalMinutes = 0, dropFrames = Math.round(fps * 0.066666), timeBase = Math.round(fps), hFrames = timeBase * 3600, mFrames = timeBase * 60; switch (parts.length) { default: case 1: seconds = parseInt(parts[0], 10); break; case 2: minutes = parseInt(parts[0], 10); seconds = parseInt(parts[1], 10); break; case 3: hours = parseInt(parts[0], 10); minutes = parseInt(parts[1], 10); seconds = parseInt(parts[2], 10); break; case 4: hours = parseInt(parts[0], 10); minutes = parseInt(parts[1], 10); seconds = parseInt(parts[2], 10); frames = parseInt(parts[3], 10); break; } if (isDropFrame(fps)) { totalMinutes = 60 * hours + minutes; output = hFrames * hours + mFrames * minutes + timeBase * seconds + frames - dropFrames * (totalMinutes - Math.floor(totalMinutes / 10)); } else { output = (hFrames * hours + mFrames * minutes + fps * seconds + frames) / fps; } return parseFloat(output.toFixed(3)); } function calculateTimeFormat(time, options) { var fps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 25; time = !time || typeof time !== 'number' || time < 0 ? 0 : time; var hours = Math.floor(time / 3600) % 24, minutes = Math.floor(time / 60) % 60, seconds = Math.floor(time % 60), frames = Math.floor((time % 1 * fps).toFixed(3)), lis = [[frames, 'f'], [seconds, 's'], [minutes, 'm'], [hours, 'h']]; var format = options.timeFormat, firstTwoPlaces = format[1] === format[0], separatorIndex = firstTwoPlaces ? 2 : 1, separator = format.length < separatorIndex ? format[separatorIndex] : ':', firstChar = format[0], required = false; for (var i = 0, len = lis.length; i < len; i++) { if (~format.indexOf(lis[i][1])) { required = true; } else if (required) { var hasNextValue = false; for (var j = i; j < len; j++) { if (lis[j][0] > 0) { hasNextValue = true; break; } } if (!hasNextValue) { break; } if (!firstTwoPlaces) { format = firstChar + format; } format = lis[i][1] + separator + format; if (firstTwoPlaces) { format = lis[i][1] + format; } firstChar = lis[i][1]; } } options.timeFormat = format; } function convertSMPTEtoSeconds(SMPTE) { if (typeof SMPTE !== 'string') { throw new TypeError('Argument must be a string value'); } SMPTE = SMPTE.replace(',', '.'); var decimalLen = ~SMPTE.indexOf('.') ? SMPTE.split('.')[1].length : 0; var secs = 0, multiplier = 1; SMPTE = SMPTE.split(':').reverse(); for (var i = 0, total = SMPTE.length; i < total; i++) { multiplier = 1; if (i > 0) { multiplier = Math.pow(60, i); } secs += Number(SMPTE[i]) * multiplier; } return Number(secs.toFixed(decimalLen)); } _mejs2.default.Utils = _mejs2.default.Utils || {}; _mejs2.default.Utils.secondsToTimeCode = secondsToTimeCode; _mejs2.default.Utils.timeCodeToSeconds = timeCodeToSeconds; _mejs2.default.Utils.calculateTimeFormat = calculateTimeFormat; _mejs2.default.Utils.convertSMPTEtoSeconds = convertSMPTEtoSeconds; },{"7":7}]},{},[29,6,5,15,23,20,19,21,22,24,16,18,17,9,10,11,12,13,14]); mediaelement/mejs-controls.png000064400000005503152335011310012477 0ustar00PNG  IHDRxTPLTE?;<# LIJhef1-.vst㟝ǃZWX%7^tRNS0P @`phK$y 'H,?Y7,4-?~`2/Z2G%|想v0DzPC9O cК%3|v8ӅY#4e>!`B6Y$aFNт 9>8E (>pBRgr:d>̈R4 LB+vOP*cB }!{͠,3~^H85 0w)B8  "5UbFH3I6 M ]?BI  nt?|_eRu"gG5ujBxy'Ț(}KB0o2WL@| Y c߲B@-!Wv6VMZQJ}+HqE\»?]!3GJH+ZV>"Jcjr0!t5ZXc]b1IJw$VF|id{ah첦ܾ҄_>CV["%_=֠w.+$0#jFV߽0tK!BN'I`FԌ>::kR?zFI`FԌ?\/#3,Tu URj>}%8QHD^'EGݖJNP!/|ݰ ~,140 0 0 0 0 0 0 0Jņ6b-WKtMln,d=;sAnJ %tÓ,`~&s|7 Erǔv2B=uv`Ì2j9m#u$gcGqL&le~f#h Ҏ7M4/-ҎO1`Xv-*lE#4fIDɒfht QrZs(ur$G+WvJvZ҈\АYG#ھ22TGáɴ_?^ 8w8*&NHPK$ԉpi9_we*9!QT%ByبV'r;&O {Y ͛~ΏyVh`uh R3ACJ;f"!),lhePځXVa.w=fdOUO:wH٣`<J1G Yᄐ}}2$GZATǜ rJt*Ͳ ZTdNHB3Bҝ2X /ѷ-kK-xan';s@(ްQ]͞q=c 5}B{ζ?50sdzt{n@קO[܃%.Xy9&ng %pZ"/aq*ؔn7PϢ/M=M}^)O4aѼEG,j qե uue=Ww{=rku :θkk rg,ٽs,i483,ZzwGèСw}S6wB\/W70!"*?;a cḡg)HZo.r' zOQxÑ},1=o->zQXbڴpLQpXoJY0bDQ!^"yֳU4;,?VlD:Y&ma@ lT2l!y|b^%1tDOS0A/iQC<=5% iܒVbӠmA텞n{q0HuӃ!R'@Vz5S'\.g%EFJwisA`#tA=\(A z+\-r@ȁ-b1ʀ*B9~ AU((f2ޡؚ>bkm[[`hG5 )kagᷴkAF8844}F'H9qlfE~[4 =*9rzf${xR LINh J3ze*I>Cy96`L}!f0 caL aKG`E6aD.}U怎ͽ |-i)lA`0,*Z`^~~Keyl|v0QS/bZ&\V,@.jHs<_4Q0pYZlo!Ї%ґ'-}zM9 yqbw+ʼԺR?HIENDB`mediaelement/mediaelementplayer-legacy.min.css000064400000025770152335011310015606 0ustar00.mejs-offscreen{border:0;clip:rect(1px,1px,1px,1px);-webkit-clip-path:inset(50%);clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-wrap:normal}.mejs-container{background:#000;font-family:Helvetica,Arial,serif;position:relative;text-align:left;text-indent:0;vertical-align:top}.mejs-container,.mejs-container *{box-sizing:border-box}.mejs-container video::-webkit-media-controls,.mejs-container video::-webkit-media-controls-panel,.mejs-container video::-webkit-media-controls-panel-container,.mejs-container video::-webkit-media-controls-start-playback-button{-webkit-appearance:none;display:none!important}.mejs-fill-container,.mejs-fill-container .mejs-container{height:100%;width:100%}.mejs-fill-container{background:transparent;margin:0 auto;overflow:hidden;position:relative}.mejs-container:focus{outline:none}.mejs-iframe-overlay{height:100%;position:absolute;width:100%}.mejs-embed,.mejs-embed body{background:#000;height:100%;margin:0;overflow:hidden;padding:0;width:100%}.mejs-fullscreen{overflow:hidden!important}.mejs-container-fullscreen{bottom:0;left:0;overflow:hidden;position:fixed;right:0;top:0;z-index:1000}.mejs-container-fullscreen .mejs-mediaelement,.mejs-container-fullscreen video{height:100%!important;width:100%!important}.mejs-background,.mejs-mediaelement{left:0;position:absolute;top:0}.mejs-mediaelement{height:100%;width:100%;z-index:0}.mejs-poster{background-position:50% 50%;background-repeat:no-repeat;background-size:cover;left:0;position:absolute;top:0;z-index:1}:root .mejs-poster-img{display:none}.mejs-poster-img{border:0;padding:0}.mejs-overlay{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;left:0;position:absolute;top:0}.mejs-layer{z-index:1}.mejs-overlay-play{cursor:pointer}.mejs-overlay-button{background:url(mejs-controls.svg) no-repeat;background-position:0 -39px;height:80px;width:80px}.mejs-overlay:hover>.mejs-overlay-button{background-position:-80px -39px}.mejs-overlay-loading{height:80px;width:80px}.mejs-overlay-loading-bg-img{-webkit-animation:a 1s linear infinite;animation:a 1s linear infinite;background:transparent url(mejs-controls.svg) -160px -40px no-repeat;display:block;height:80px;width:80px;z-index:1}@-webkit-keyframes a{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes a{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.mejs-controls{bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:40px;left:0;list-style-type:none;margin:0;padding:0 10px;position:absolute;width:100%;z-index:3}.mejs-controls:not([style*="display: none"]){background:rgba(255,0,0,.7);background:-webkit-linear-gradient(transparent,rgba(0,0,0,.35));background:linear-gradient(transparent,rgba(0,0,0,.35))}.mejs-button,.mejs-time,.mejs-time-rail{font-size:10px;height:40px;line-height:10px;margin:0;width:32px}.mejs-button>button{background:transparent url(mejs-controls.svg);border:0;cursor:pointer;display:block;font-size:0;height:20px;line-height:0;margin:10px 6px;overflow:hidden;padding:0;position:absolute;text-decoration:none;width:20px}.mejs-button>button:focus{outline:1px dotted #999}.mejs-container-keyboard-inactive [role=slider],.mejs-container-keyboard-inactive [role=slider]:focus,.mejs-container-keyboard-inactive a,.mejs-container-keyboard-inactive a:focus,.mejs-container-keyboard-inactive button,.mejs-container-keyboard-inactive button:focus{outline:0}.mejs-time{box-sizing:content-box;color:#fff;font-size:11px;font-weight:700;height:24px;overflow:hidden;padding:16px 6px 0;text-align:center;width:auto}.mejs-play>button{background-position:0 0}.mejs-pause>button{background-position:-20px 0}.mejs-replay>button{background-position:-160px 0}.mejs-time-rail{direction:ltr;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;height:40px;margin:0 10px;padding-top:10px;position:relative}.mejs-time-buffering,.mejs-time-current,.mejs-time-float,.mejs-time-float-corner,.mejs-time-float-current,.mejs-time-hovered,.mejs-time-loaded,.mejs-time-marker,.mejs-time-total{border-radius:2px;cursor:pointer;display:block;height:10px;position:absolute}.mejs-time-total{background:hsla(0,0%,100%,.3);margin:5px 0 0;width:100%}.mejs-time-buffering{-webkit-animation:b 2s linear infinite;animation:b 2s linear infinite;background:-webkit-linear-gradient(135deg,hsla(0,0%,100%,.4) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.4) 0,hsla(0,0%,100%,.4) 75%,transparent 0,transparent);background:linear-gradient(-45deg,hsla(0,0%,100%,.4) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.4) 0,hsla(0,0%,100%,.4) 75%,transparent 0,transparent);background-size:15px 15px;width:100%}@-webkit-keyframes b{0%{background-position:0 0}to{background-position:30px 0}}@keyframes b{0%{background-position:0 0}to{background-position:30px 0}}.mejs-time-loaded{background:hsla(0,0%,100%,.3)}.mejs-time-current,.mejs-time-handle-content{background:hsla(0,0%,100%,.9)}.mejs-time-hovered{background:hsla(0,0%,100%,.5);z-index:10}.mejs-time-hovered.negative{background:rgba(0,0,0,.2)}.mejs-time-buffering,.mejs-time-current,.mejs-time-hovered,.mejs-time-loaded{left:0;-webkit-transform:scaleX(0);-ms-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:0 0;-ms-transform-origin:0 0;transform-origin:0 0;-webkit-transition:all .15s ease-in;transition:all .15s ease-in;width:100%}.mejs-time-buffering{-webkit-transform:scaleX(1);-ms-transform:scaleX(1);transform:scaleX(1)}.mejs-time-hovered{-webkit-transition:height .1s cubic-bezier(.44,0,1,1);transition:height .1s cubic-bezier(.44,0,1,1)}.mejs-time-hovered.no-hover{-webkit-transform:scaleX(0)!important;-ms-transform:scaleX(0)!important;transform:scaleX(0)!important}.mejs-time-handle,.mejs-time-handle-content{border:4px solid transparent;cursor:pointer;left:0;position:absolute;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);z-index:11}.mejs-time-handle-content{border:4px solid hsla(0,0%,100%,.9);border-radius:50%;height:10px;left:-7px;top:-4px;-webkit-transform:scale(0);-ms-transform:scale(0);transform:scale(0);width:10px}.mejs-time-rail .mejs-time-handle-content:active,.mejs-time-rail .mejs-time-handle-content:focus,.mejs-time-rail:hover .mejs-time-handle-content{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.mejs-time-float{background:#eee;border:1px solid #333;bottom:100%;color:#111;display:none;height:17px;margin-bottom:9px;position:absolute;text-align:center;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);width:36px}.mejs-time-float-current{display:block;left:0;margin:2px;text-align:center;width:30px}.mejs-time-float-corner{border:5px solid #eee;border-color:#eee transparent transparent;border-radius:0;display:block;height:0;left:50%;line-height:0;position:absolute;top:100%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);width:0}.mejs-long-video .mejs-time-float{margin-left:-23px;width:64px}.mejs-long-video .mejs-time-float-current{width:60px}.mejs-broadcast{color:#fff;height:10px;position:absolute;top:15px;width:100%}.mejs-fullscreen-button>button{background-position:-80px 0}.mejs-unfullscreen>button{background-position:-100px 0}.mejs-mute>button{background-position:-60px 0}.mejs-unmute>button{background-position:-40px 0}.mejs-volume-button{position:relative}.mejs-volume-button>.mejs-volume-slider{-webkit-backface-visibility:hidden;background:rgba(50,50,50,.7);border-radius:0;bottom:100%;display:none;height:115px;left:50%;margin:0;position:absolute;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);width:25px;z-index:1}.mejs-volume-button:hover{border-radius:0 0 4px 4px}.mejs-volume-total{background:hsla(0,0%,100%,.5);height:100px;left:50%;margin:0;position:absolute;top:8px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);width:2px}.mejs-volume-current{left:0;margin:0;width:100%}.mejs-volume-current,.mejs-volume-handle{background:hsla(0,0%,100%,.9);position:absolute}.mejs-volume-handle{border-radius:1px;cursor:ns-resize;height:6px;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);width:16px}.mejs-horizontal-volume-slider{display:block;height:36px;position:relative;vertical-align:middle;width:56px}.mejs-horizontal-volume-total{background:rgba(50,50,50,.8);height:8px;top:16px;width:50px}.mejs-horizontal-volume-current,.mejs-horizontal-volume-total{border-radius:2px;font-size:1px;left:0;margin:0;padding:0;position:absolute}.mejs-horizontal-volume-current{background:hsla(0,0%,100%,.8);height:100%;top:0;width:100%}.mejs-horizontal-volume-handle{display:none}.mejs-captions-button,.mejs-chapters-button{position:relative}.mejs-captions-button>button{background-position:-140px 0}.mejs-chapters-button>button{background-position:-180px 0}.mejs-captions-button>.mejs-captions-selector,.mejs-chapters-button>.mejs-chapters-selector{background:rgba(50,50,50,.7);border:1px solid transparent;border-radius:0;bottom:100%;margin-right:-43px;overflow:hidden;padding:0;position:absolute;right:50%;visibility:visible;width:86px}.mejs-chapters-button>.mejs-chapters-selector{margin-right:-55px;width:110px}.mejs-captions-selector-list,.mejs-chapters-selector-list{list-style-type:none!important;margin:0;overflow:hidden;padding:0}.mejs-captions-selector-list-item,.mejs-chapters-selector-list-item{color:#fff;cursor:pointer;display:block;list-style-type:none!important;margin:0 0 6px;overflow:hidden;padding:0}.mejs-captions-selector-list-item:hover,.mejs-chapters-selector-list-item:hover{background-color:#c8c8c8!important;background-color:hsla(0,0%,100%,.4)!important}.mejs-captions-selector-input,.mejs-chapters-selector-input{clear:both;float:left;left:-1000px;margin:3px 3px 0 5px;position:absolute}.mejs-captions-selector-label,.mejs-chapters-selector-label{cursor:pointer;float:left;font-size:10px;line-height:15px;padding:4px 10px 0;width:100%}.mejs-captions-selected,.mejs-chapters-selected{color:#21f8f8}.mejs-captions-translations{font-size:10px;margin:0 0 5px}.mejs-captions-layer{bottom:0;color:#fff;font-size:16px;left:0;line-height:20px;position:absolute;text-align:center}.mejs-captions-layer a{color:#fff;text-decoration:underline}.mejs-captions-layer[lang=ar]{font-size:20px;font-weight:400}.mejs-captions-position{bottom:15px;left:0;position:absolute;width:100%}.mejs-captions-position-hover{bottom:35px}.mejs-captions-text,.mejs-captions-text *{background:hsla(0,0%,8%,.5);box-shadow:5px 0 0 hsla(0,0%,8%,.5),-5px 0 0 hsla(0,0%,8%,.5);padding:0;white-space:pre-wrap}.mejs-container.mejs-hide-cues video::-webkit-media-text-track-container{display:none}.mejs-overlay-error{position:relative}.mejs-overlay-error>img{left:0;max-width:100%;position:absolute;top:0;z-index:-1}.mejs-cannotplay,.mejs-cannotplay a{color:#fff;font-size:.8em}.mejs-cannotplay{position:relative}.mejs-cannotplay a,.mejs-cannotplay p{display:inline-block;padding:0 15px;width:100%}mediaelement/mediaelementplayer.css000064400000037043152335011310013556 0ustar00/* Accessibility: hide screen reader texts (and prefer "top" for RTL languages). Reference: http://blog.rrwd.nl/2015/04/04/the-screen-reader-text-class-why-and-how/ */ .mejs__offscreen { border: 0; clip: rect( 1px, 1px, 1px, 1px ); -webkit-clip-path: inset( 50% ); clip-path: inset( 50% ); height: 1px; margin: -1px; overflow: hidden; padding: 0; position: absolute; width: 1px; word-wrap: normal; } .mejs__container { background: #000; box-sizing: border-box; font-family: 'Helvetica', Arial, serif; position: relative; text-align: left; text-indent: 0; vertical-align: top; } .mejs__container * { box-sizing: border-box; } /* Hide native play button and control bar from iOS to favor plugin button */ .mejs__container video::-webkit-media-controls, .mejs__container video::-webkit-media-controls-panel, .mejs__container video::-webkit-media-controls-panel-container, .mejs__container video::-webkit-media-controls-start-playback-button { -webkit-appearance: none; display: none !important; } .mejs__fill-container, .mejs__fill-container .mejs__container { height: 100%; width: 100%; } .mejs__fill-container { background: transparent; margin: 0 auto; overflow: hidden; position: relative; } .mejs__container:focus { outline: none; } .mejs__iframe-overlay { height: 100%; position: absolute; width: 100%; } .mejs__embed, .mejs__embed body { background: #000; height: 100%; margin: 0; overflow: hidden; padding: 0; width: 100%; } .mejs__fullscreen { overflow: hidden !important; } .mejs__container-fullscreen { bottom: 0; left: 0; overflow: hidden; position: fixed; right: 0; top: 0; z-index: 1000; } .mejs__container-fullscreen .mejs__mediaelement, .mejs__container-fullscreen video { height: 100% !important; width: 100% !important; } /* Start: LAYERS */ .mejs__background { left: 0; position: absolute; top: 0; } .mejs__mediaelement { height: 100%; left: 0; position: absolute; top: 0; width: 100%; z-index: 0; } .mejs__poster { background-position: 50% 50%; background-repeat: no-repeat; background-size: cover; left: 0; position: absolute; top: 0; z-index: 1; } :root .mejs__poster-img { display: none; } .mejs__poster-img { border: 0; padding: 0; } .mejs__overlay { -webkit-box-align: center; -webkit-align-items: center; -ms-flex-align: center; align-items: center; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; -webkit-box-pack: center; -webkit-justify-content: center; -ms-flex-pack: center; justify-content: center; left: 0; position: absolute; top: 0; } .mejs__layer { z-index: 1; } .mejs__overlay-play { cursor: pointer; } .mejs__overlay-button { background: url('mejs-controls.svg') no-repeat; background-position: 0 -39px; height: 80px; width: 80px; } .mejs__overlay:hover > .mejs__overlay-button { background-position: -80px -39px; } .mejs__overlay-loading { height: 80px; width: 80px; } .mejs__overlay-loading-bg-img { -webkit-animation: mejs__loading-spinner 1s linear infinite; animation: mejs__loading-spinner 1s linear infinite; background: transparent url('mejs-controls.svg') -160px -40px no-repeat; display: block; height: 80px; width: 80px; z-index: 1; } @-webkit-keyframes mejs__loading-spinner { 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } @keyframes mejs__loading-spinner { 100% { -webkit-transform: rotate(360deg); transform: rotate(360deg); } } /* End: LAYERS */ /* Start: CONTROL BAR */ .mejs__controls { bottom: 0; display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; display: flex; height: 40px; left: 0; list-style-type: none; margin: 0; padding: 0 10px; position: absolute; width: 100%; z-index: 3; } .mejs__controls:not([style*='display: none']) { background: rgba(255, 0, 0, 0.7); background: -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.35)); background: linear-gradient(transparent, rgba(0, 0, 0, 0.35)); } .mejs__button, .mejs__time, .mejs__time-rail { font-size: 10px; height: 40px; line-height: 10px; margin: 0; width: 32px; } .mejs__button > button { background: transparent url('mejs-controls.svg'); border: 0; cursor: pointer; display: block; font-size: 0; height: 20px; line-height: 0; margin: 10px 6px; overflow: hidden; padding: 0; position: absolute; text-decoration: none; width: 20px; } /* :focus for accessibility */ .mejs__button > button:focus { outline: dotted 1px #999; } .mejs__container-keyboard-inactive a, .mejs__container-keyboard-inactive a:focus, .mejs__container-keyboard-inactive button, .mejs__container-keyboard-inactive button:focus, .mejs__container-keyboard-inactive [role=slider], .mejs__container-keyboard-inactive [role=slider]:focus { outline: 0; } /* End: CONTROL BAR */ /* Start: Time (Current / Duration) */ .mejs__time { box-sizing: content-box; color: #fff; font-size: 11px; font-weight: bold; height: 24px; overflow: hidden; padding: 16px 6px 0; text-align: center; width: auto; } /* End: Time (Current / Duration) */ /* Start: Play/Pause/Stop */ .mejs__play > button { background-position: 0 0; } .mejs__pause > button { background-position: -20px 0; } .mejs__replay > button { background-position: -160px 0; } /* End: Play/Pause/Stop */ /* Start: Progress Bar */ .mejs__time-rail { direction: ltr; -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; flex-grow: 1; height: 40px; margin: 0 10px; padding-top: 10px; position: relative; } .mejs__time-total, .mejs__time-buffering, .mejs__time-loaded, .mejs__time-current, .mejs__time-float, .mejs__time-hovered, .mejs__time-float-current, .mejs__time-float-corner, .mejs__time-marker { border-radius: 2px; cursor: pointer; display: block; height: 10px; position: absolute; } .mejs__time-total { background: rgba(255, 255, 255, 0.3); margin: 5px 0 0; width: 100%; } .mejs__time-buffering { -webkit-animation: buffering-stripes 2s linear infinite; animation: buffering-stripes 2s linear infinite; background: -webkit-linear-gradient(135deg, rgba(255, 255, 255, 0.4) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.4) 75%, transparent 75%, transparent); background: linear-gradient(-45deg, rgba(255, 255, 255, 0.4) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.4) 50%, rgba(255, 255, 255, 0.4) 75%, transparent 75%, transparent); background-size: 15px 15px; width: 100%; } @-webkit-keyframes buffering-stripes { from { background-position: 0 0; } to { background-position: 30px 0; } } @keyframes buffering-stripes { from { background-position: 0 0; } to { background-position: 30px 0; } } .mejs__time-loaded { background: rgba(255, 255, 255, 0.3); } .mejs__time-current, .mejs__time-handle-content { background: rgba(255, 255, 255, 0.9); } .mejs__time-hovered { background: rgba(255, 255, 255, 0.5); z-index: 10; } .mejs__time-hovered.negative { background: rgba(0, 0, 0, 0.2); } .mejs__time-current, .mejs__time-buffering, .mejs__time-loaded, .mejs__time-hovered { left: 0; -webkit-transform: scaleX(0); -ms-transform: scaleX(0); transform: scaleX(0); -webkit-transform-origin: 0 0; -ms-transform-origin: 0 0; transform-origin: 0 0; -webkit-transition: 0.15s ease-in all; transition: 0.15s ease-in all; width: 100%; } .mejs__time-buffering { -webkit-transform: scaleX(1); -ms-transform: scaleX(1); transform: scaleX(1); } .mejs__time-hovered { -webkit-transition: height 0.1s cubic-bezier(0.44, 0, 1, 1); transition: height 0.1s cubic-bezier(0.44, 0, 1, 1); } .mejs__time-hovered.no-hover { -webkit-transform: scaleX(0) !important; -ms-transform: scaleX(0) !important; transform: scaleX(0) !important; } .mejs__time-handle, .mejs__time-handle-content { border: 4px solid transparent; cursor: pointer; left: 0; position: absolute; -webkit-transform: translateX(0); -ms-transform: translateX(0); transform: translateX(0); z-index: 11; } .mejs__time-handle-content { border: 4px solid rgba(255, 255, 255, 0.9); border-radius: 50%; height: 10px; left: -7px; top: -4px; -webkit-transform: scale(0); -ms-transform: scale(0); transform: scale(0); width: 10px; } .mejs__time-rail:hover .mejs__time-handle-content, .mejs__time-rail .mejs__time-handle-content:focus, .mejs__time-rail .mejs__time-handle-content:active { -webkit-transform: scale(1); -ms-transform: scale(1); transform: scale(1); } .mejs__time-float { background: #eee; border: solid 1px #333; bottom: 100%; color: #111; display: none; height: 17px; margin-bottom: 9px; position: absolute; text-align: center; -webkit-transform: translateX(-50%); -ms-transform: translateX(-50%); transform: translateX(-50%); width: 36px; } .mejs__time-float-current { display: block; left: 0; margin: 2px; text-align: center; width: 30px; } .mejs__time-float-corner { border: solid 5px #eee; border-color: #eee transparent transparent; border-radius: 0; display: block; height: 0; left: 50%; line-height: 0; position: absolute; top: 100%; -webkit-transform: translateX(-50%); -ms-transform: translateX(-50%); transform: translateX(-50%); width: 0; } .mejs__long-video .mejs__time-float { margin-left: -23px; width: 64px; } .mejs__long-video .mejs__time-float-current { width: 60px; } .mejs__broadcast { color: #fff; height: 10px; position: absolute; top: 15px; width: 100%; } /* End: Progress Bar */ /* Start: Fullscreen */ .mejs__fullscreen-button > button { background-position: -80px 0; } .mejs__unfullscreen > button { background-position: -100px 0; } /* End: Fullscreen */ /* Start: Mute/Volume */ .mejs__mute > button { background-position: -60px 0; } .mejs__unmute > button { background-position: -40px 0; } .mejs__volume-button { position: relative; } .mejs__volume-button > .mejs__volume-slider { -webkit-backface-visibility: hidden; background: rgba(50, 50, 50, 0.7); border-radius: 0; bottom: 100%; display: none; height: 115px; left: 50%; margin: 0; position: absolute; -webkit-transform: translateX(-50%); -ms-transform: translateX(-50%); transform: translateX(-50%); width: 25px; z-index: 1; } .mejs__volume-button:hover { border-radius: 0 0 4px 4px; } .mejs__volume-total { background: rgba(255, 255, 255, 0.5); height: 100px; left: 50%; margin: 0; position: absolute; top: 8px; -webkit-transform: translateX(-50%); -ms-transform: translateX(-50%); transform: translateX(-50%); width: 2px; } .mejs__volume-current { background: rgba(255, 255, 255, 0.9); left: 0; margin: 0; position: absolute; width: 100%; } .mejs__volume-handle { background: rgba(255, 255, 255, 0.9); border-radius: 1px; cursor: ns-resize; height: 6px; left: 50%; position: absolute; -webkit-transform: translateX(-50%); -ms-transform: translateX(-50%); transform: translateX(-50%); width: 16px; } .mejs__horizontal-volume-slider { display: block; height: 36px; position: relative; vertical-align: middle; width: 56px; } .mejs__horizontal-volume-total { background: rgba(50, 50, 50, 0.8); border-radius: 2px; font-size: 1px; height: 8px; left: 0; margin: 0; padding: 0; position: absolute; top: 16px; width: 50px; } .mejs__horizontal-volume-current { background: rgba(255, 255, 255, 0.8); border-radius: 2px; font-size: 1px; height: 100%; left: 0; margin: 0; padding: 0; position: absolute; top: 0; width: 100%; } .mejs__horizontal-volume-handle { display: none; } /* End: Mute/Volume */ /* Start: Track (Captions and Chapters) */ .mejs__captions-button, .mejs__chapters-button { position: relative; } .mejs__captions-button > button { background-position: -140px 0; } .mejs__chapters-button > button { background-position: -180px 0; } .mejs__captions-button > .mejs__captions-selector, .mejs__chapters-button > .mejs__chapters-selector { background: rgba(50, 50, 50, 0.7); border: solid 1px transparent; border-radius: 0; bottom: 100%; margin-right: -43px; overflow: hidden; padding: 0; position: absolute; right: 50%; visibility: visible; width: 86px; } .mejs__chapters-button > .mejs__chapters-selector { margin-right: -55px; width: 110px; } .mejs__captions-selector-list, .mejs__chapters-selector-list { list-style-type: none !important; margin: 0; overflow: hidden; padding: 0; } .mejs__captions-selector-list-item, .mejs__chapters-selector-list-item { color: #fff; cursor: pointer; display: block; list-style-type: none !important; margin: 0 0 6px; overflow: hidden; padding: 0; } .mejs__captions-selector-list-item:hover, .mejs__chapters-selector-list-item:hover { background-color: rgb(200, 200, 200) !important; background-color: rgba(255, 255, 255, 0.4) !important; } .mejs__captions-selector-input, .mejs__chapters-selector-input { clear: both; float: left; left: -1000px; margin: 3px 3px 0 5px; position: absolute; } .mejs__captions-selector-label, .mejs__chapters-selector-label { cursor: pointer; float: left; font-size: 10px; line-height: 15px; padding: 4px 10px 0; width: 100%; } .mejs__captions-selected, .mejs__chapters-selected { color: rgba(33, 248, 248, 1); } .mejs__captions-translations { font-size: 10px; margin: 0 0 5px; } .mejs__captions-layer { bottom: 0; color: #fff; font-size: 16px; left: 0; line-height: 20px; position: absolute; text-align: center; } .mejs__captions-layer a { color: #fff; text-decoration: underline; } .mejs__captions-layer[lang=ar] { font-size: 20px; font-weight: normal; } .mejs__captions-position { bottom: 15px; left: 0; position: absolute; width: 100%; } .mejs__captions-position-hover { bottom: 35px; } .mejs__captions-text, .mejs__captions-text * { background: rgba(20, 20, 20, 0.5); box-shadow: 5px 0 0 rgba(20, 20, 20, 0.5), -5px 0 0 rgba(20, 20, 20, 0.5); padding: 0; white-space: pre-wrap; } .mejs__container.mejs__hide-cues video::-webkit-media-text-track-container { display: none; } /* End: Track (Captions and Chapters) */ /* Start: Error */ .mejs__overlay-error { position: relative; } .mejs__overlay-error > img { left: 0; max-width: 100%; position: absolute; top: 0; z-index: -1; } .mejs__cannotplay, .mejs__cannotplay a { color: #fff; font-size: 0.8em; } .mejs__cannotplay { position: relative; } .mejs__cannotplay p, .mejs__cannotplay a { display: inline-block; padding: 0 15px; width: 100%; } /* End: Error */wp-util.min.js000064400000002627152335011310007266 0ustar00/*! This file is auto-generated */ window.wp=window.wp||{},function(s){var t="undefined"==typeof _wpUtilSettings?{}:_wpUtilSettings;wp.template=_.memoize(function(e){var n,a={evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^\}]+?)\}\}(?!\})/g,variable:"data"};return function(t){var o=document.querySelector("script#tmpl-"+e);if(o)return(n=n||_.template(s(o).html(),a))(t);throw new Error("Template not found: #tmpl-"+e)}}),wp.ajax={settings:t.ajax||{},post:function(t,e){return wp.ajax.send({data:_.isObject(t)?t:_.extend(e||{},{action:t})})},send:function(a,t){var e,n;return _.isObject(a)?t=a:(t=t||{}).data=_.extend(t.data||{},{action:a}),t=_.defaults(t||{},{type:"POST",url:wp.ajax.settings.url,context:this}),(e=(n=s.Deferred(function(n){t.success&&n.done(t.success),t.error&&n.fail(t.error),delete t.success,delete t.error,n.jqXHR=s.ajax(t).done(function(t){var e;"1"!==t&&1!==t||(t={success:!0}),_.isObject(t)&&!_.isUndefined(t.success)?(e=this,n.done(function(){a&&a.data&&"query-attachments"===a.data.action&&n.jqXHR.hasOwnProperty("getResponseHeader")&&n.jqXHR.getResponseHeader("X-WP-Total")?e.totalAttachments=parseInt(n.jqXHR.getResponseHeader("X-WP-Total"),10):e.totalAttachments=0}),n[t.success?"resolveWith":"rejectWith"](this,[t.data])):n.rejectWith(this,[t])}).fail(function(){n.rejectWith(this,arguments)})})).promise()).abort=function(){return n.jqXHR.abort(),this},e}}}(jQuery);wpdialog.min.js000064400000000431152335011310007462 0ustar00/*! This file is auto-generated */ !function(e){e.widget("wp.wpdialog",e.ui.dialog,{open:function(){this.isOpen()||!1===this._trigger("beforeOpen")||(this._super(),this.element.trigger("focus"),this._trigger("refresh"))}}),e.wp.wpdialog.prototype.options.closeOnEscape=!1}(jQuery);mce-view.min.js000064400000023052152335011310007374 0ustar00/*! This file is auto-generated */ !function(n,a,t,w){"use strict";var l={},o={};a.mce=a.mce||{},a.mce.views={register:function(e,t){l[e]=a.mce.View.extend(_.extend(t,{type:e}))},unregister:function(e){delete l[e]},get:function(e){return l[e]},unbind:function(){_.each(o,function(e){e.unbind()})},setMarkers:function(e,a){var r,t,d=[{content:e}],c=this;return _.each(l,function(s,o){t=d.slice(),d=[],_.each(t,function(e){var t,n,i=e.content;if(e.processed)d.push(e);else{for(;i&&(t=s.prototype.match(i));)t.index&&d.push({content:i.substring(0,t.index)}),t.options.editor=a,n=(r=c.createInstance(o,t.content,t.options)).loader?".":r.text,d.push({content:r.ignore?n:'

        '+n+"

        ",processed:!0}),i=i.slice(t.index+t.content.length);i&&d.push({content:i})}})}),(e=_.pluck(d,"content").join("")).replace(/

        \s*

        ")},createInstance:function(e,t,n,i){var s,e=this.get(e);return-1!==t.indexOf("[")&&-1!==t.indexOf("]")&&(t=t.replace(/\[[^\]]+\]/g,function(e){return e.replace(/[\r\n]/g,"")})),!i&&(s=this.getInstance(t))?s:(i=encodeURIComponent(t),n=_.extend(n||{},{text:t,encodedText:i}),o[i]=new e(n))},getInstance:function(e){return"string"==typeof e?o[encodeURIComponent(e)]:o[w(e).attr("data-wpview-text")]},getText:function(e){return decodeURIComponent(w(e).attr("data-wpview-text")||"")},render:function(t){_.each(o,function(e){e.render(null,t)})},update:function(e,t,n,i){var s=this.getInstance(n);s&&s.update(e,t,n,i)},edit:function(n,i){var s=this.getInstance(i);s&&s.edit&&s.edit(s.text,function(e,t){s.update(e,n,i,t)})},remove:function(e,t){var n=this.getInstance(t);n&&n.remove(e,t)}},a.mce.View=function(e){_.extend(this,e),this.initialize()},a.mce.View.extend=Backbone.View.extend,_.extend(a.mce.View.prototype,{content:null,loader:!0,initialize:function(){},getContent:function(){return this.content},render:function(e,t){null!=e&&(this.content=e),e=this.getContent(),(this.loader||e)&&(t&&this.unbind(),this.replaceMarkers(),e?this.setContent(e,function(e,t){w(t).data("rendered",!0),this.bindNode.call(this,e,t)},!!t&&null):this.setLoader())},bindNode:function(){},unbindNode:function(){},unbind:function(){this.getNodes(function(e,t){this.unbindNode.call(this,e,t)},!0)},getEditors:function(t){_.each(tinymce.editors,function(e){e.plugins.wpview&&t.call(this,e)},this)},getNodes:function(n,i){this.getEditors(function(e){var t=this;w(e.getBody()).find('[data-wpview-text="'+t.encodedText+'"]').filter(function(){var e;return null==i||(e=!0===w(this).data("rendered"),i?e:!e)}).each(function(){n.call(t,e,this,this)})})},getMarkers:function(n){this.getEditors(function(e){var t=this;w(e.getBody()).find('[data-wpview-marker="'+this.encodedText+'"]').each(function(){n.call(t,e,this)})})},replaceMarkers:function(){this.getMarkers(function(e,t){var n,i=t===e.selection.getNode();this.loader||w(t).text()===tinymce.DOM.decode(this.text)?(n=e.$('

        '),e.undoManager.ignore(function(){e.$(t).replaceWith(n)}),i&&setTimeout(function(){e.undoManager.ignore(function(){e.selection.select(n[0]),e.selection.collapse()})})):e.dom.setAttrib(t,"data-wpview-marker",null)})},removeMarkers:function(){this.getMarkers(function(e,t){e.dom.setAttrib(t,"data-wpview-marker",null)})},setContent:function(n,i,e){_.isObject(n)&&(n.sandbox||n.head||-1!==n.body.indexOf("'),e.undoManager.transact(function(){t.innerHTML="",t.appendChild(_.isString(n)?e.dom.createFragment(n):n),e.dom.add(t,"span",{class:"wpview-end"})}),i&&i.call(this,e,t)},e)},setIframes:function(p,f,m,e){var t,g=this;-1!==f.indexOf("[")&&-1!==f.indexOf("]")&&(t=new RegExp("\\[\\/?(?:"+n.mceViewL10n.shortcodes.join("|")+")[^\\]]*?\\]","g"),f=f.replace(t,function(e){return e.replace(//g,">")})),this.getNodes(function(t,e){var n,i,s,o,a,r=t.dom,d="",c=t.getBody().className||"",l=t.getDoc().getElementsByTagName("head")[0];if(tinymce.each(r.$('link[rel="stylesheet"]',l),function(e){e.href&&-1===e.href.indexOf("skins/lightgray/content.min.css")&&-1===e.href.indexOf("skins/wordpress/wp-content.css")&&(d+=r.getOuterHTML(e))}),g.iframeHeight&&r.add(e,"span",{"data-mce-bogus":1,style:{display:"block",width:"100%",height:g.iframeHeight}},"\u200b"),t.undoManager.transact(function(){e.innerHTML="",n=r.add(e,"iframe",{src:tinymce.Env.ie?'javascript:""':"",frameBorder:"0",allowTransparency:"true",scrolling:"no",class:"wpview-sandbox",style:{width:"100%",display:"block"},height:g.iframeHeight}),r.add(e,"span",{class:"mce-shim"}),r.add(e,"span",{class:"wpview-end"})}),n.contentWindow){if(l=n.contentWindow,(i=l.document).open(),i.write(''+p+d+''+f+""),i.close(),g.iframeHeight&&(a=!0,setTimeout(function(){a=!1,u()},3e3)),w(l).on("load",u),s=l.MutationObserver||l.WebKitMutationObserver||l.MozMutationObserver)i.body?h():i.addEventListener("DOMContentLoaded",h,!1);else for(o=1;o<6;o++)setTimeout(u,700*o);m&&m.call(g,t,e)}function u(){var e;a||n.contentWindow&&(e=w(n),g.iframeHeight=w(i.body).height(),e.height()!==g.iframeHeight)&&(e.height(g.iframeHeight),t.nodeChanged())}function h(){new s(_.debounce(u,100)).observe(i.body,{attributes:!0,childList:!0,subtree:!0})}},e)},setLoader:function(e){this.setContent('
        ')},setError:function(e,t){this.setContent('

        '+e+"

        ")},match:function(e){e=t.next(this.type,e);if(e)return{index:e.index,content:e.content,options:{shortcode:e.shortcode}}},update:function(n,i,s,o){_.find(l,function(e,t){e=e.prototype.match(n);if(e)return w(s).data("rendered",!1),i.dom.setAttrib(s,"data-wpview-text",encodeURIComponent(n)),a.mce.views.createInstance(t,n,e.options,o).render(),i.selection.select(s),i.nodeChanged(),i.focus(),!0})},remove:function(e,t){this.unbindNode.call(this,e,t),e.dom.remove(t),e.focus()}})}(window,window.wp,window.wp.shortcode,window.jQuery),function(n,e,s,i){var t,o,a,r,d,c;function l(e){var t={};return n.tinymce?!e||-1===e.indexOf("<")&&-1===e.indexOf(">")?e:(r=r||new n.tinymce.html.Schema(t),d=d||new n.tinymce.html.DomParser(t,r),(c=c||new n.tinymce.html.Serializer(t,r)).serialize(d.parse(e,{forced_root_block:!1}))):e.replace(/<[^>]+>/g,"")}o={state:[],edit:function(e,t){var n=this.type,i=s[n].edit(e);this.pausePlayers&&this.pausePlayers(),_.each(this.state,function(e){i.state(e).on("update",function(e){t(s[n].shortcode(e).string(),"gallery"===n)})}),i.on("close",function(){i.detach()}),i.open()}},t=_.extend({},o,{state:["gallery-edit"],template:s.template("editor-gallery"),initialize:function(){var e=s.gallery.attachments(this.shortcode,s.view.settings.post.id),t=this.shortcode.attrs.named,n=this;e.more().done(function(){e=e.toJSON(),_.each(e,function(e){e.sizes&&(t.size&&e.sizes[t.size]?e.thumbnail=e.sizes[t.size]:e.sizes.thumbnail?e.thumbnail=e.sizes.thumbnail:e.sizes.full&&(e.thumbnail=e.sizes.full))}),n.render(n.template({verifyHTML:l,attachments:e,columns:t.columns?parseInt(t.columns,10):s.galleryDefaults.columns}))}).fail(function(e,t){n.setError(t)})}}),o=_.extend({},o,{action:"parse-media-shortcode",initialize:function(){var t=this,e=null;this.url&&(this.loader=!1,this.shortcode=s.embed.shortcode({url:this.text})),t.editor&&(e=t.editor.getBody().clientWidth),wp.ajax.post(this.action,{post_ID:s.view.settings.post.id,type:this.shortcode.tag,shortcode:this.shortcode.string(),maxwidth:e}).done(function(e){t.render(e)}).fail(function(e){t.url?(t.ignore=!0,t.removeMarkers()):t.setError(e.message||e.statusText,"admin-media")}),this.getEditors(function(e){e.on("wpview-selected",function(){t.pausePlayers()})})},pausePlayers:function(){this.getNodes(function(e,t,n){n=i("iframe.wpview-sandbox",n).get(0);(n=n&&n.contentWindow)&&n.mejs&&_.each(n.mejs.players,function(e){try{e.pause()}catch(e){}})})}}),a=_.extend({},o,{action:"parse-embed",edit:function(e,t){var n=s.embed.edit(e,this.url),i=this;this.pausePlayers(),n.state("embed").props.on("change:url",function(e,t){t&&e.get("url")&&(n.state("embed").metadata=e.toJSON())}),n.state("embed").on("select",function(){var e=n.state("embed").metadata;i.url?t(e.url):t(s.embed.shortcode(e).string())}),n.on("close",function(){n.detach()}),n.open()}}),e.register("gallery",_.extend({},t)),e.register("audio",_.extend({},o,{state:["audio-details"]})),e.register("video",_.extend({},o,{state:["video-details"]})),e.register("playlist",_.extend({},o,{state:["playlist-edit","video-playlist-edit"]})),e.register("embed",_.extend({},a)),e.register("embedURL",_.extend({},a,{match:function(e){e=/(^|

        (?:]+>\s*<\/span>)?)(https?:\/\/[^\s"]+?)((?:]+>\s*<\/span>)?<\/p>\s*|$)/gi.exec(e);if(e)return{index:e.index+e[1].length,content:e[2],options:{url:!0}}}}))}(window,window.wp.mce.views,window.wp.media,window.jQuery);customize-preview-nav-menus.js000064400000035260152335011310012512 0ustar00/** * @output wp-includes/js/customize-preview-nav-menus.js */ /* global _wpCustomizePreviewNavMenusExports */ /** @namespace wp.customize.navMenusPreview */ wp.customize.navMenusPreview = wp.customize.MenusCustomizerPreview = ( function( $, _, wp, api ) { 'use strict'; var self = { data: { navMenuInstanceArgs: {} } }; if ( 'undefined' !== typeof _wpCustomizePreviewNavMenusExports ) { _.extend( self.data, _wpCustomizePreviewNavMenusExports ); } /** * Initialize nav menus preview. */ self.init = function() { var self = this, synced = false; /* * Keep track of whether we synced to determine whether or not bindSettingListener * should also initially fire the listener. This initial firing needs to wait until * after all of the settings have been synced from the pane in order to prevent * an infinite selective fallback-refresh. Note that this sync handler will be * added after the sync handler in customize-preview.js, so it will be triggered * after all of the settings are added. */ api.preview.bind( 'sync', function() { synced = true; } ); if ( api.selectiveRefresh ) { // Listen for changes to settings related to nav menus. api.each( function( setting ) { self.bindSettingListener( setting ); } ); api.bind( 'add', function( setting ) { /* * Handle case where an invalid nav menu item (one for which its associated object has been deleted) * is synced from the controls into the preview. Since invalid nav menu items are filtered out from * being exported to the frontend by the _is_valid_nav_menu_item filter in wp_get_nav_menu_items(), * the customizer controls will have a nav_menu_item setting where the preview will have none, and * this can trigger an infinite fallback refresh when the nav menu item lacks any valid items. */ if ( setting.get() && ! setting.get()._invalid ) { self.bindSettingListener( setting, { fire: synced } ); } } ); api.bind( 'remove', function( setting ) { self.unbindSettingListener( setting ); } ); /* * Ensure that wp_nav_menu() instances nested inside of other partials * will be recognized as being present on the page. */ api.selectiveRefresh.bind( 'render-partials-response', function( response ) { if ( response.nav_menu_instance_args ) { _.extend( self.data.navMenuInstanceArgs, response.nav_menu_instance_args ); } } ); } api.preview.bind( 'active', function() { self.highlightControls(); } ); }; if ( api.selectiveRefresh ) { /** * Partial representing an invocation of wp_nav_menu(). * * @memberOf wp.customize.navMenusPreview * @alias wp.customize.navMenusPreview.NavMenuInstancePartial * * @class * @augments wp.customize.selectiveRefresh.Partial * @since 4.5.0 */ self.NavMenuInstancePartial = api.selectiveRefresh.Partial.extend(/** @lends wp.customize.navMenusPreview.NavMenuInstancePartial.prototype */{ /** * Constructor. * * @since 4.5.0 * @param {string} id - Partial ID. * @param {Object} options * @param {Object} options.params * @param {Object} options.params.navMenuArgs * @param {string} options.params.navMenuArgs.args_hmac * @param {string} [options.params.navMenuArgs.theme_location] * @param {number} [options.params.navMenuArgs.menu] * @param {Object} [options.constructingContainerContext] */ initialize: function( id, options ) { var partial = this, matches, argsHmac; matches = id.match( /^nav_menu_instance\[([0-9a-f]{32})]$/ ); if ( ! matches ) { throw new Error( 'Illegal id for nav_menu_instance partial. The key corresponds with the args HMAC.' ); } argsHmac = matches[1]; options = options || {}; options.params = _.extend( { selector: '[data-customize-partial-id="' + id + '"]', navMenuArgs: options.constructingContainerContext || {}, containerInclusive: true }, options.params || {} ); api.selectiveRefresh.Partial.prototype.initialize.call( partial, id, options ); if ( ! _.isObject( partial.params.navMenuArgs ) ) { throw new Error( 'Missing navMenuArgs' ); } if ( partial.params.navMenuArgs.args_hmac !== argsHmac ) { throw new Error( 'args_hmac mismatch with id' ); } }, /** * Return whether the setting is related to this partial. * * @since 4.5.0 * @param {wp.customize.Value|string} setting - Object or ID. * @param {number|Object|false|null} newValue - New value, or null if the setting was just removed. * @param {number|Object|false|null} oldValue - Old value, or null if the setting was just added. * @return {boolean} */ isRelatedSetting: function( setting, newValue, oldValue ) { var partial = this, navMenuLocationSetting, navMenuId, isNavMenuItemSetting, _newValue, _oldValue, urlParser; if ( _.isString( setting ) ) { setting = api( setting ); } /* * Prevent nav_menu_item changes only containing type_label differences triggering a refresh. * These settings in the preview do not include type_label property, and so if one of these * nav_menu_item settings is dirty, after a refresh the nav menu instance would do a selective * refresh immediately because the setting from the pane would have the type_label whereas * the setting in the preview would not, thus triggering a change event. The following * condition short-circuits this unnecessary selective refresh and also prevents an infinite * loop in the case where a nav_menu_instance partial had done a fallback refresh. * @todo Nav menu item settings should not include a type_label property to begin with. */ isNavMenuItemSetting = /^nav_menu_item\[/.test( setting.id ); if ( isNavMenuItemSetting && _.isObject( newValue ) && _.isObject( oldValue ) ) { _newValue = _.clone( newValue ); _oldValue = _.clone( oldValue ); delete _newValue.type_label; delete _oldValue.type_label; // Normalize URL scheme when parent frame is HTTPS to prevent selective refresh upon initial page load. if ( 'https' === api.preview.scheme.get() ) { urlParser = document.createElement( 'a' ); urlParser.href = _newValue.url; urlParser.protocol = 'https:'; _newValue.url = urlParser.href; urlParser.href = _oldValue.url; urlParser.protocol = 'https:'; _oldValue.url = urlParser.href; } // Prevent original_title differences from causing refreshes if title is present. if ( newValue.title ) { delete _oldValue.original_title; delete _newValue.original_title; } if ( _.isEqual( _oldValue, _newValue ) ) { return false; } } if ( partial.params.navMenuArgs.theme_location ) { if ( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' === setting.id ) { return true; } navMenuLocationSetting = api( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' ); } navMenuId = partial.params.navMenuArgs.menu; if ( ! navMenuId && navMenuLocationSetting ) { navMenuId = navMenuLocationSetting(); } if ( ! navMenuId ) { return false; } return ( ( 'nav_menu[' + navMenuId + ']' === setting.id ) || ( isNavMenuItemSetting && ( ( newValue && newValue.nav_menu_term_id === navMenuId ) || ( oldValue && oldValue.nav_menu_term_id === navMenuId ) ) ) ); }, /** * Make sure that partial fallback behavior is invoked if there is no associated menu. * * @since 4.5.0 * * @return {Promise} */ refresh: function() { var partial = this, menuId, deferred = $.Deferred(); // Make sure the fallback behavior is invoked when the partial is no longer associated with a menu. if ( _.isNumber( partial.params.navMenuArgs.menu ) ) { menuId = partial.params.navMenuArgs.menu; } else if ( partial.params.navMenuArgs.theme_location && api.has( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' ) ) { menuId = api( 'nav_menu_locations[' + partial.params.navMenuArgs.theme_location + ']' ).get(); } if ( ! menuId ) { partial.fallback(); deferred.reject(); return deferred.promise(); } return api.selectiveRefresh.Partial.prototype.refresh.call( partial ); }, /** * Render content. * * @inheritdoc * @param {wp.customize.selectiveRefresh.Placement} placement */ renderContent: function( placement ) { var partial = this, previousContainer = placement.container; // Do fallback behavior to refresh preview if menu is now empty. if ( '' === placement.addedContent ) { placement.partial.fallback(); } if ( api.selectiveRefresh.Partial.prototype.renderContent.call( partial, placement ) ) { // Trigger deprecated event. $( document ).trigger( 'customize-preview-menu-refreshed', [ { instanceNumber: null, // @deprecated wpNavArgs: placement.context, // @deprecated wpNavMenuArgs: placement.context, oldContainer: previousContainer, newContainer: placement.container } ] ); } } }); api.selectiveRefresh.partialConstructor.nav_menu_instance = self.NavMenuInstancePartial; /** * Request full refresh if there are nav menu instances that lack partials which also match the supplied args. * * @param {Object} navMenuInstanceArgs */ self.handleUnplacedNavMenuInstances = function( navMenuInstanceArgs ) { var unplacedNavMenuInstances; unplacedNavMenuInstances = _.filter( _.values( self.data.navMenuInstanceArgs ), function( args ) { return ! api.selectiveRefresh.partial.has( 'nav_menu_instance[' + args.args_hmac + ']' ); } ); if ( _.findWhere( unplacedNavMenuInstances, navMenuInstanceArgs ) ) { api.selectiveRefresh.requestFullRefresh(); return true; } return false; }; /** * Add change listener for a nav_menu[], nav_menu_item[], or nav_menu_locations[] setting. * * @since 4.5.0 * * @param {wp.customize.Value} setting * @param {Object} [options] * @param {boolean} options.fire Whether to invoke the callback after binding. * This is used when a dynamic setting is added. * @return {boolean} Whether the setting was bound. */ self.bindSettingListener = function( setting, options ) { var matches; options = options || {}; matches = setting.id.match( /^nav_menu\[(-?\d+)]$/ ); if ( matches ) { setting._navMenuId = parseInt( matches[1], 10 ); setting.bind( this.onChangeNavMenuSetting ); if ( options.fire ) { this.onChangeNavMenuSetting.call( setting, setting(), false ); } return true; } matches = setting.id.match( /^nav_menu_item\[(-?\d+)]$/ ); if ( matches ) { setting._navMenuItemId = parseInt( matches[1], 10 ); setting.bind( this.onChangeNavMenuItemSetting ); if ( options.fire ) { this.onChangeNavMenuItemSetting.call( setting, setting(), false ); } return true; } matches = setting.id.match( /^nav_menu_locations\[(.+?)]/ ); if ( matches ) { setting._navMenuThemeLocation = matches[1]; setting.bind( this.onChangeNavMenuLocationsSetting ); if ( options.fire ) { this.onChangeNavMenuLocationsSetting.call( setting, setting(), false ); } return true; } return false; }; /** * Remove change listeners for nav_menu[], nav_menu_item[], or nav_menu_locations[] setting. * * @since 4.5.0 * * @param {wp.customize.Value} setting */ self.unbindSettingListener = function( setting ) { setting.unbind( this.onChangeNavMenuSetting ); setting.unbind( this.onChangeNavMenuItemSetting ); setting.unbind( this.onChangeNavMenuLocationsSetting ); }; /** * Handle change for nav_menu[] setting for nav menu instances lacking partials. * * @since 4.5.0 * * @this {wp.customize.Value} */ self.onChangeNavMenuSetting = function() { var setting = this; self.handleUnplacedNavMenuInstances( { menu: setting._navMenuId } ); // Ensure all nav menu instances with a theme_location assigned to this menu are handled. api.each( function( otherSetting ) { if ( ! otherSetting._navMenuThemeLocation ) { return; } if ( setting._navMenuId === otherSetting() ) { self.handleUnplacedNavMenuInstances( { theme_location: otherSetting._navMenuThemeLocation } ); } } ); }; /** * Handle change for nav_menu_item[] setting for nav menu instances lacking partials. * * @since 4.5.0 * * @param {Object} newItem New value for nav_menu_item[] setting. * @param {Object} oldItem Old value for nav_menu_item[] setting. * @this {wp.customize.Value} */ self.onChangeNavMenuItemSetting = function( newItem, oldItem ) { var item = newItem || oldItem, navMenuSetting; navMenuSetting = api( 'nav_menu[' + String( item.nav_menu_term_id ) + ']' ); if ( navMenuSetting ) { self.onChangeNavMenuSetting.call( navMenuSetting ); } }; /** * Handle change for nav_menu_locations[] setting for nav menu instances lacking partials. * * @since 4.5.0 * * @this {wp.customize.Value} */ self.onChangeNavMenuLocationsSetting = function() { var setting = this, hasNavMenuInstance; self.handleUnplacedNavMenuInstances( { theme_location: setting._navMenuThemeLocation } ); // If there are no wp_nav_menu() instances that refer to the theme location, do full refresh. hasNavMenuInstance = !! _.findWhere( _.values( self.data.navMenuInstanceArgs ), { theme_location: setting._navMenuThemeLocation } ); if ( ! hasNavMenuInstance ) { api.selectiveRefresh.requestFullRefresh(); } }; } /** * Connect nav menu items with their corresponding controls in the pane. * * Setup shift-click on nav menu items which are more granular than the nav menu partial itself. * Also this applies even if a nav menu is not partial-refreshable. * * @since 4.5.0 */ self.highlightControls = function() { var selector = '.menu-item'; // Skip adding highlights if not in the customizer preview iframe. if ( ! api.settings.channel ) { return; } // Focus on the menu item control when shift+clicking the menu item. $( document ).on( 'click', selector, function( e ) { var navMenuItemParts; if ( ! e.shiftKey ) { return; } navMenuItemParts = $( this ).attr( 'class' ).match( /(?:^|\s)menu-item-(-?\d+)(?:\s|$)/ ); if ( navMenuItemParts ) { e.preventDefault(); e.stopPropagation(); // Make sure a sub-nav menu item will get focused instead of parent items. api.preview.send( 'focus-nav-menu-item-control', parseInt( navMenuItemParts[1], 10 ) ); } }); }; api.bind( 'preview-ready', function() { self.init(); } ); return self; }( jQuery, _, wp, wp.customize ) ); media-audiovideo.js000064400000060363152335011310010311 0ustar00/******/ (() => { // webpackBootstrap /******/ var __webpack_modules__ = ({ /***/ 175: /***/ ((module) => { var MediaDetails = wp.media.view.MediaFrame.MediaDetails, MediaLibrary = wp.media.controller.MediaLibrary, l10n = wp.media.view.l10n, AudioDetails; /** * wp.media.view.MediaFrame.AudioDetails * * @memberOf wp.media.view.MediaFrame * * @class * @augments wp.media.view.MediaFrame.MediaDetails * @augments wp.media.view.MediaFrame.Select * @augments wp.media.view.MediaFrame * @augments wp.media.view.Frame * @augments wp.media.View * @augments wp.Backbone.View * @augments Backbone.View * @mixes wp.media.controller.StateMachine */ AudioDetails = MediaDetails.extend(/** @lends wp.media.view.MediaFrame.AudioDetails.prototype */{ defaults: { id: 'audio', url: '', menu: 'audio-details', content: 'audio-details', toolbar: 'audio-details', type: 'link', title: l10n.audioDetailsTitle, priority: 120 }, initialize: function( options ) { options.DetailsView = wp.media.view.AudioDetails; options.cancelText = l10n.audioDetailsCancel; options.addText = l10n.audioAddSourceTitle; MediaDetails.prototype.initialize.call( this, options ); }, bindHandlers: function() { MediaDetails.prototype.bindHandlers.apply( this, arguments ); this.on( 'toolbar:render:replace-audio', this.renderReplaceToolbar, this ); this.on( 'toolbar:render:add-audio-source', this.renderAddSourceToolbar, this ); }, createStates: function() { this.states.add([ new wp.media.controller.AudioDetails( { media: this.media } ), new MediaLibrary( { type: 'audio', id: 'replace-audio', title: l10n.audioReplaceTitle, toolbar: 'replace-audio', media: this.media, menu: 'audio-details' } ), new MediaLibrary( { type: 'audio', id: 'add-audio-source', title: l10n.audioAddSourceTitle, toolbar: 'add-audio-source', media: this.media, menu: false } ) ]); } }); module.exports = AudioDetails; /***/ }), /***/ 241: /***/ ((module) => { /** * wp.media.model.PostMedia * * Shared model class for audio and video. Updates the model after * "Add Audio|Video Source" and "Replace Audio|Video" states return * * @memberOf wp.media.model * * @class * @augments Backbone.Model */ var PostMedia = Backbone.Model.extend(/** @lends wp.media.model.PostMedia.prototype */{ initialize: function() { this.attachment = false; }, setSource: function( attachment ) { this.attachment = attachment; this.extension = attachment.get( 'filename' ).split('.').pop(); if ( this.get( 'src' ) && this.extension === this.get( 'src' ).split('.').pop() ) { this.unset( 'src' ); } if ( _.contains( wp.media.view.settings.embedExts, this.extension ) ) { this.set( this.extension, this.attachment.get( 'url' ) ); } else { this.unset( this.extension ); } }, changeAttachment: function( attachment ) { this.setSource( attachment ); this.unset( 'src' ); _.each( _.without( wp.media.view.settings.embedExts, this.extension ), function( ext ) { this.unset( ext ); }, this ); } }); module.exports = PostMedia; /***/ }), /***/ 741: /***/ ((module) => { var Select = wp.media.view.MediaFrame.Select, l10n = wp.media.view.l10n, MediaDetails; /** * wp.media.view.MediaFrame.MediaDetails * * @memberOf wp.media.view.MediaFrame * * @class * @augments wp.media.view.MediaFrame.Select * @augments wp.media.view.MediaFrame * @augments wp.media.view.Frame * @augments wp.media.View * @augments wp.Backbone.View * @augments Backbone.View * @mixes wp.media.controller.StateMachine */ MediaDetails = Select.extend(/** @lends wp.media.view.MediaFrame.MediaDetails.prototype */{ defaults: { id: 'media', url: '', menu: 'media-details', content: 'media-details', toolbar: 'media-details', type: 'link', priority: 120 }, initialize: function( options ) { this.DetailsView = options.DetailsView; this.cancelText = options.cancelText; this.addText = options.addText; this.media = new wp.media.model.PostMedia( options.metadata ); this.options.selection = new wp.media.model.Selection( this.media.attachment, { multiple: false } ); Select.prototype.initialize.apply( this, arguments ); }, bindHandlers: function() { var menu = this.defaults.menu; Select.prototype.bindHandlers.apply( this, arguments ); this.on( 'menu:create:' + menu, this.createMenu, this ); this.on( 'content:render:' + menu, this.renderDetailsContent, this ); this.on( 'menu:render:' + menu, this.renderMenu, this ); this.on( 'toolbar:render:' + menu, this.renderDetailsToolbar, this ); }, renderDetailsContent: function() { var view = new this.DetailsView({ controller: this, model: this.state().media, attachment: this.state().media.attachment }).render(); this.content.set( view ); }, renderMenu: function( view ) { var lastState = this.lastState(), previous = lastState && lastState.id, frame = this; view.set({ cancel: { text: this.cancelText, priority: 20, click: function() { if ( previous ) { frame.setState( previous ); } else { frame.close(); } } }, separateCancel: new wp.media.View({ className: 'separator', priority: 40 }) }); }, setPrimaryButton: function(text, handler) { this.toolbar.set( new wp.media.view.Toolbar({ controller: this, items: { button: { style: 'primary', text: text, priority: 80, click: function() { var controller = this.controller; handler.call( this, controller, controller.state() ); // Restore and reset the default state. controller.setState( controller.options.state ); controller.reset(); } } } }) ); }, renderDetailsToolbar: function() { this.setPrimaryButton( l10n.update, function( controller, state ) { controller.close(); state.trigger( 'update', controller.media.toJSON() ); } ); }, renderReplaceToolbar: function() { this.setPrimaryButton( l10n.replace, function( controller, state ) { var attachment = state.get( 'selection' ).single(); controller.media.changeAttachment( attachment ); state.trigger( 'replace', controller.media.toJSON() ); } ); }, renderAddSourceToolbar: function() { this.setPrimaryButton( this.addText, function( controller, state ) { var attachment = state.get( 'selection' ).single(); controller.media.setSource( attachment ); state.trigger( 'add-source', controller.media.toJSON() ); } ); } }); module.exports = MediaDetails; /***/ }), /***/ 1206: /***/ ((module) => { var State = wp.media.controller.State, l10n = wp.media.view.l10n, AudioDetails; /** * wp.media.controller.AudioDetails * * The controller for the Audio Details state * * @memberOf wp.media.controller * * @class * @augments wp.media.controller.State * @augments Backbone.Model */ AudioDetails = State.extend(/** @lends wp.media.controller.AudioDetails.prototype */{ defaults: { id: 'audio-details', toolbar: 'audio-details', title: l10n.audioDetailsTitle, content: 'audio-details', menu: 'audio-details', router: false, priority: 60 }, initialize: function( options ) { this.media = options.media; State.prototype.initialize.apply( this, arguments ); } }); module.exports = AudioDetails; /***/ }), /***/ 3713: /***/ ((module) => { var MediaDetails = wp.media.view.MediaDetails, AudioDetails; /** * wp.media.view.AudioDetails * * @memberOf wp.media.view * * @class * @augments wp.media.view.MediaDetails * @augments wp.media.view.Settings.AttachmentDisplay * @augments wp.media.view.Settings * @augments wp.media.View * @augments wp.Backbone.View * @augments Backbone.View */ AudioDetails = MediaDetails.extend(/** @lends wp.media.view.AudioDetails.prototype */{ className: 'audio-details', template: wp.template('audio-details'), setMedia: function() { var audio = this.$('.wp-audio-shortcode'); if ( audio.find( 'source' ).length ) { if ( audio.is(':hidden') ) { audio.show(); } this.media = MediaDetails.prepareSrc( audio.get(0) ); } else { audio.hide(); this.media = false; } return this; } }); module.exports = AudioDetails; /***/ }), /***/ 5039: /***/ ((module) => { /** * wp.media.controller.VideoDetails * * The controller for the Video Details state * * @memberOf wp.media.controller * * @class * @augments wp.media.controller.State * @augments Backbone.Model */ var State = wp.media.controller.State, l10n = wp.media.view.l10n, VideoDetails; VideoDetails = State.extend(/** @lends wp.media.controller.VideoDetails.prototype */{ defaults: { id: 'video-details', toolbar: 'video-details', title: l10n.videoDetailsTitle, content: 'video-details', menu: 'video-details', router: false, priority: 60 }, initialize: function( options ) { this.media = options.media; State.prototype.initialize.apply( this, arguments ); } }); module.exports = VideoDetails; /***/ }), /***/ 5836: /***/ ((module) => { var MediaDetails = wp.media.view.MediaDetails, VideoDetails; /** * wp.media.view.VideoDetails * * @memberOf wp.media.view * * @class * @augments wp.media.view.MediaDetails * @augments wp.media.view.Settings.AttachmentDisplay * @augments wp.media.view.Settings * @augments wp.media.View * @augments wp.Backbone.View * @augments Backbone.View */ VideoDetails = MediaDetails.extend(/** @lends wp.media.view.VideoDetails.prototype */{ className: 'video-details', template: wp.template('video-details'), setMedia: function() { var video = this.$('.wp-video-shortcode'); if ( video.find( 'source' ).length ) { if ( video.is(':hidden') ) { video.show(); } if ( ! video.hasClass( 'youtube-video' ) && ! video.hasClass( 'vimeo-video' ) ) { this.media = MediaDetails.prepareSrc( video.get(0) ); } else { this.media = video.get(0); } } else { video.hide(); this.media = false; } return this; } }); module.exports = VideoDetails; /***/ }), /***/ 8646: /***/ ((module) => { var MediaDetails = wp.media.view.MediaFrame.MediaDetails, MediaLibrary = wp.media.controller.MediaLibrary, l10n = wp.media.view.l10n, VideoDetails; /** * wp.media.view.MediaFrame.VideoDetails * * @memberOf wp.media.view.MediaFrame * * @class * @augments wp.media.view.MediaFrame.MediaDetails * @augments wp.media.view.MediaFrame.Select * @augments wp.media.view.MediaFrame * @augments wp.media.view.Frame * @augments wp.media.View * @augments wp.Backbone.View * @augments Backbone.View * @mixes wp.media.controller.StateMachine */ VideoDetails = MediaDetails.extend(/** @lends wp.media.view.MediaFrame.VideoDetails.prototype */{ defaults: { id: 'video', url: '', menu: 'video-details', content: 'video-details', toolbar: 'video-details', type: 'link', title: l10n.videoDetailsTitle, priority: 120 }, initialize: function( options ) { options.DetailsView = wp.media.view.VideoDetails; options.cancelText = l10n.videoDetailsCancel; options.addText = l10n.videoAddSourceTitle; MediaDetails.prototype.initialize.call( this, options ); }, bindHandlers: function() { MediaDetails.prototype.bindHandlers.apply( this, arguments ); this.on( 'toolbar:render:replace-video', this.renderReplaceToolbar, this ); this.on( 'toolbar:render:add-video-source', this.renderAddSourceToolbar, this ); this.on( 'toolbar:render:select-poster-image', this.renderSelectPosterImageToolbar, this ); this.on( 'toolbar:render:add-track', this.renderAddTrackToolbar, this ); }, createStates: function() { this.states.add([ new wp.media.controller.VideoDetails({ media: this.media }), new MediaLibrary( { type: 'video', id: 'replace-video', title: l10n.videoReplaceTitle, toolbar: 'replace-video', media: this.media, menu: 'video-details' } ), new MediaLibrary( { type: 'video', id: 'add-video-source', title: l10n.videoAddSourceTitle, toolbar: 'add-video-source', media: this.media, menu: false } ), new MediaLibrary( { type: 'image', id: 'select-poster-image', title: l10n.videoSelectPosterImageTitle, toolbar: 'select-poster-image', media: this.media, menu: 'video-details' } ), new MediaLibrary( { type: 'text', id: 'add-track', title: l10n.videoAddTrackTitle, toolbar: 'add-track', media: this.media, menu: 'video-details' } ) ]); }, renderSelectPosterImageToolbar: function() { this.setPrimaryButton( l10n.videoSelectPosterImageTitle, function( controller, state ) { var urls = [], attachment = state.get( 'selection' ).single(); controller.media.set( 'poster', attachment.get( 'url' ) ); state.trigger( 'set-poster-image', controller.media.toJSON() ); _.each( wp.media.view.settings.embedExts, function (ext) { if ( controller.media.get( ext ) ) { urls.push( controller.media.get( ext ) ); } } ); wp.ajax.send( 'set-attachment-thumbnail', { data : { _ajax_nonce: wp.media.view.settings.nonce.setAttachmentThumbnail, urls: urls, thumbnail_id: attachment.get( 'id' ) } } ); } ); }, renderAddTrackToolbar: function() { this.setPrimaryButton( l10n.videoAddTrackTitle, function( controller, state ) { var attachment = state.get( 'selection' ).single(), content = controller.media.get( 'content' ); if ( -1 === content.indexOf( attachment.get( 'url' ) ) ) { content += [ '' ].join(''); controller.media.set( 'content', content ); } state.trigger( 'add-track', controller.media.toJSON() ); } ); } }); module.exports = VideoDetails; /***/ }), /***/ 9467: /***/ ((module) => { /* global MediaElementPlayer */ var AttachmentDisplay = wp.media.view.Settings.AttachmentDisplay, $ = jQuery, MediaDetails; /** * wp.media.view.MediaDetails * * @memberOf wp.media.view * * @class * @augments wp.media.view.Settings.AttachmentDisplay * @augments wp.media.view.Settings * @augments wp.media.View * @augments wp.Backbone.View * @augments Backbone.View */ MediaDetails = AttachmentDisplay.extend(/** @lends wp.media.view.MediaDetails.prototype */{ initialize: function() { _.bindAll(this, 'success'); this.players = []; this.listenTo( this.controller.states, 'close', wp.media.mixin.unsetPlayers ); this.on( 'ready', this.setPlayer ); this.on( 'media:setting:remove', wp.media.mixin.unsetPlayers, this ); this.on( 'media:setting:remove', this.render ); this.on( 'media:setting:remove', this.setPlayer ); AttachmentDisplay.prototype.initialize.apply( this, arguments ); }, events: function(){ return _.extend( { 'click .remove-setting' : 'removeSetting', 'change .content-track' : 'setTracks', 'click .remove-track' : 'setTracks', 'click .add-media-source' : 'addSource' }, AttachmentDisplay.prototype.events ); }, prepare: function() { return _.defaults({ model: this.model.toJSON() }, this.options ); }, /** * Remove a setting's UI when the model unsets it * * @fires wp.media.view.MediaDetails#media:setting:remove * * @param {Event} e */ removeSetting : function(e) { var wrap = $( e.currentTarget ).parent(), setting; setting = wrap.find( 'input' ).data( 'setting' ); if ( setting ) { this.model.unset( setting ); this.trigger( 'media:setting:remove', this ); } wrap.remove(); }, /** * * @fires wp.media.view.MediaDetails#media:setting:remove */ setTracks : function() { var tracks = ''; _.each( this.$('.content-track'), function(track) { tracks += $( track ).val(); } ); this.model.set( 'content', tracks ); this.trigger( 'media:setting:remove', this ); }, addSource : function( e ) { this.controller.lastMime = $( e.currentTarget ).data( 'mime' ); this.controller.setState( 'add-' + this.controller.defaults.id + '-source' ); }, loadPlayer: function () { this.players.push( new MediaElementPlayer( this.media, this.settings ) ); this.scriptXhr = false; }, setPlayer : function() { var src; if ( this.players.length || ! this.media || this.scriptXhr ) { return; } src = this.model.get( 'src' ); if ( src && src.indexOf( 'vimeo' ) > -1 && ! ( 'Vimeo' in window ) ) { this.scriptXhr = $.getScript( 'https://player.vimeo.com/api/player.js', _.bind( this.loadPlayer, this ) ); } else { this.loadPlayer(); } }, /** * @abstract */ setMedia : function() { return this; }, success : function(mejs) { var autoplay = mejs.attributes.autoplay && 'false' !== mejs.attributes.autoplay; if ( 'flash' === mejs.pluginType && autoplay ) { mejs.addEventListener( 'canplay', function() { mejs.play(); }, false ); } this.mejs = mejs; }, /** * @return {media.view.MediaDetails} Returns itself to allow chaining. */ render: function() { AttachmentDisplay.prototype.render.apply( this, arguments ); setTimeout( _.bind( function() { this.scrollToTop(); }, this ), 10 ); this.settings = _.defaults( { success : this.success }, wp.media.mixin.mejsSettings ); return this.setMedia(); }, scrollToTop: function() { this.$( '.embed-media-settings' ).scrollTop( 0 ); } },/** @lends wp.media.view.MediaDetails */{ instances : 0, /** * When multiple players in the DOM contain the same src, things get weird. * * @param {HTMLElement} elem * @return {HTMLElement} */ prepareSrc : function( elem ) { var i = MediaDetails.instances++; _.each( $( elem ).find( 'source' ), function( source ) { source.src = [ source.src, source.src.indexOf('?') > -1 ? '&' : '?', '_=', i ].join(''); } ); return elem; } }); module.exports = MediaDetails; /***/ }) /******/ }); /************************************************************************/ /******/ // The module cache /******/ var __webpack_module_cache__ = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ var cachedModule = __webpack_module_cache__[moduleId]; /******/ if (cachedModule !== undefined) { /******/ return cachedModule.exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = __webpack_module_cache__[moduleId] = { /******/ // no module.id needed /******/ // no module.loaded needed /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /************************************************************************/ /** * @output wp-includes/js/media-audiovideo.js */ var media = wp.media, baseSettings = window._wpmejsSettings || {}, l10n = window._wpMediaViewsL10n || {}; /** * * Defines the wp.media.mixin object. * * @mixin * * @since 4.2.0 */ wp.media.mixin = { mejsSettings: baseSettings, /** * Pauses and removes all players. * * @since 4.2.0 * * @return {void} */ removeAllPlayers: function() { var p; if ( window.mejs && window.mejs.players ) { for ( p in window.mejs.players ) { window.mejs.players[p].pause(); this.removePlayer( window.mejs.players[p] ); } } }, /** * Removes the player. * * Override the MediaElement method for removing a player. * MediaElement tries to pull the audio/video tag out of * its container and re-add it to the DOM. * * @since 4.2.0 * * @return {void} */ removePlayer: function(t) { var featureIndex, feature; if ( ! t.options ) { return; } // Invoke features cleanup. for ( featureIndex in t.options.features ) { feature = t.options.features[featureIndex]; if ( t['clean' + feature] ) { try { t['clean' + feature](t); } catch (e) {} } } if ( ! t.isDynamic ) { t.node.remove(); } if ( 'html5' !== t.media.rendererName ) { t.media.remove(); } delete window.mejs.players[t.id]; t.container.remove(); t.globalUnbind('resize', t.globalResizeCallback); t.globalUnbind('keydown', t.globalKeydownCallback); t.globalUnbind('click', t.globalClickCallback); delete t.media.player; }, /** * * Removes and resets all players. * * Allows any class that has set 'player' to a MediaElementPlayer * instance to remove the player when listening to events. * * Examples: modal closes, shortcode properties are removed, etc. * * @since 4.2.0 */ unsetPlayers : function() { if ( this.players && this.players.length ) { _.each( this.players, function (player) { player.pause(); wp.media.mixin.removePlayer( player ); } ); this.players = []; } } }; /** * Shortcode modeling for playlists. * * @since 4.2.0 */ wp.media.playlist = new wp.media.collection({ tag: 'playlist', editTitle : l10n.editPlaylistTitle, defaults : { id: wp.media.view.settings.post.id, style: 'light', tracklist: true, tracknumbers: true, images: true, artists: true, type: 'audio' } }); /** * Shortcode modeling for audio. * * `edit()` prepares the shortcode for the media modal. * `shortcode()` builds the new shortcode after an update. * * @namespace * * @since 4.2.0 */ wp.media.audio = { coerce : wp.media.coerce, defaults : { id : wp.media.view.settings.post.id, src : '', loop : false, autoplay : false, preload : 'none', width : 400 }, /** * Instantiates a new media object with the next matching shortcode. * * @since 4.2.0 * * @param {string} data The text to apply the shortcode on. * @return {wp.media} The media object. */ edit : function( data ) { var frame, shortcode = wp.shortcode.next( 'audio', data ).shortcode; frame = wp.media({ frame: 'audio', state: 'audio-details', metadata: _.defaults( shortcode.attrs.named, this.defaults ) }); return frame; }, /** * Generates an audio shortcode. * * @since 4.2.0 * * @param {Array} model Array with attributes for the shortcode. * @return {wp.shortcode} The audio shortcode object. */ shortcode : function( model ) { var content; _.each( this.defaults, function( value, key ) { model[ key ] = this.coerce( model, key ); if ( value === model[ key ] ) { delete model[ key ]; } }, this ); content = model.content; delete model.content; return new wp.shortcode({ tag: 'audio', attrs: model, content: content }); } }; /** * Shortcode modeling for video. * * `edit()` prepares the shortcode for the media modal. * `shortcode()` builds the new shortcode after update. * * @since 4.2.0 * * @namespace */ wp.media.video = { coerce : wp.media.coerce, defaults : { id : wp.media.view.settings.post.id, src : '', poster : '', loop : false, autoplay : false, preload : 'metadata', content : '', width : 640, height : 360 }, /** * Instantiates a new media object with the next matching shortcode. * * @since 4.2.0 * * @param {string} data The text to apply the shortcode on. * @return {wp.media} The media object. */ edit : function( data ) { var frame, shortcode = wp.shortcode.next( 'video', data ).shortcode, attrs; attrs = shortcode.attrs.named; attrs.content = shortcode.content; frame = wp.media({ frame: 'video', state: 'video-details', metadata: _.defaults( attrs, this.defaults ) }); return frame; }, /** * Generates an video shortcode. * * @since 4.2.0 * * @param {Array} model Array with attributes for the shortcode. * @return {wp.shortcode} The video shortcode object. */ shortcode : function( model ) { var content; _.each( this.defaults, function( value, key ) { model[ key ] = this.coerce( model, key ); if ( value === model[ key ] ) { delete model[ key ]; } }, this ); content = model.content; delete model.content; return new wp.shortcode({ tag: 'video', attrs: model, content: content }); } }; media.model.PostMedia = __webpack_require__( 241 ); media.controller.AudioDetails = __webpack_require__( 1206 ); media.controller.VideoDetails = __webpack_require__( 5039 ); media.view.MediaFrame.MediaDetails = __webpack_require__( 741 ); media.view.MediaFrame.AudioDetails = __webpack_require__( 175 ); media.view.MediaFrame.VideoDetails = __webpack_require__( 8646 ); media.view.MediaDetails = __webpack_require__( 9467 ); media.view.AudioDetails = __webpack_require__( 3713 ); media.view.VideoDetails = __webpack_require__( 5836 ); /******/ })() ;wp-api.min.js000064400000034532152335011310007062 0ustar00/*! This file is auto-generated */ !function(e){"use strict";e.wp=e.wp||{},wp.api=wp.api||new function(){this.models={},this.collections={},this.views={}},wp.api.versionString=wp.api.versionString||"wp/v2/",!_.isFunction(_.includes)&&_.isFunction(_.contains)&&(_.includes=_.contains)}(window),function(e){"use strict";var t,i;e.wp=e.wp||{},wp.api=wp.api||{},wp.api.utils=wp.api.utils||{},wp.api.getModelByRoute=function(t){return _.find(wp.api.models,function(e){return e.prototype.route&&t===e.prototype.route.index})},wp.api.getCollectionByRoute=function(t){return _.find(wp.api.collections,function(e){return e.prototype.route&&t===e.prototype.route.index})},Date.prototype.toISOString||(t=function(e){return i=1===(i=String(e)).length?"0"+i:i},Date.prototype.toISOString=function(){return this.getUTCFullYear()+"-"+t(this.getUTCMonth()+1)+"-"+t(this.getUTCDate())+"T"+t(this.getUTCHours())+":"+t(this.getUTCMinutes())+":"+t(this.getUTCSeconds())+"."+String((this.getUTCMilliseconds()/1e3).toFixed(3)).slice(2,5)+"Z"}),wp.api.utils.parseISO8601=function(e){var t,i,n,o,s=0,a=[1,4,5,6,7,10,11];if(i=/^(\d{4}|[+\-]\d{6})(?:-(\d{2})(?:-(\d{2}))?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3}))?)?(?:(Z)|([+\-])(\d{2})(?::(\d{2}))?)?)?$/.exec(e)){for(n=0;o=a[n];++n)i[o]=+i[o]||0;i[2]=(+i[2]||1)-1,i[3]=+i[3]||1,"Z"!==i[8]&&void 0!==i[9]&&(s=60*i[10]+i[11],"+"===i[9])&&(s=0-s),t=Date.UTC(i[1],i[2],i[3],i[4],i[5]+s,i[6],i[7])}else t=Date.parse?Date.parse(e):NaN;return t},wp.api.utils.getRootUrl=function(){return e.location.origin?e.location.origin+"/":e.location.protocol+"//"+e.location.host+"/"},wp.api.utils.capitalize=function(e){return _.isUndefined(e)?e:e.charAt(0).toUpperCase()+e.slice(1)},wp.api.utils.capitalizeAndCamelCaseDashes=function(e){return _.isUndefined(e)?e:(e=wp.api.utils.capitalize(e),wp.api.utils.camelCaseDashes(e))},wp.api.utils.camelCaseDashes=function(e){return e.replace(/-([a-z])/g,function(e){return e[1].toUpperCase()})},wp.api.utils.extractRoutePart=function(e,t,i,n){return t=t||1,i=i||wp.api.versionString,i=(e=0===e.indexOf("/"+i)?e.substr(i.length+1):e).split("/"),n&&(i=i.reverse()),_.isUndefined(i[--t])?"":i[t]},wp.api.utils.extractParentName=function(e){var t=e.lastIndexOf("_id>[\\d]+)/");return t<0?"":((e=(e=e.substr(0,t-1)).split("/")).pop(),e.pop())},wp.api.utils.decorateFromRoute=function(e,t){_.each(e,function(e){_.includes(e.methods,"POST")||_.includes(e.methods,"PUT")?_.isEmpty(e.args)||(_.isEmpty(t.prototype.args)?t.prototype.args=e.args:t.prototype.args=_.extend(t.prototype.args,e.args)):_.includes(e.methods,"GET")&&!_.isEmpty(e.args)&&(_.isEmpty(t.prototype.options)?t.prototype.options=e.args:t.prototype.options=_.extend(t.prototype.options,e.args))})},wp.api.utils.addMixinsAndHelpers=function(t,e,i){function n(e,t,i,n,o){var s,a=jQuery.Deferred(),e=e.get("_embedded")||{};return _.isNumber(t)&&0!==t?(s=(s=e[n]?_.findWhere(e[n],{id:t}):s)||{id:t},(e=new wp.api.models[i](s)).get(o)?a.resolve(e):e.fetch({success:function(e){a.resolve(e)},error:function(e,t){a.reject(t)}}),a.promise()):(a.reject(),a)}function p(e,t){_.each(e.models,function(e){e.set("parent_post",t)})}var o=!1,s=["date","modified","date_gmt","modified_gmt"],a={setDate:function(e,t){t=t||"date";if(_.indexOf(s,t)<0)return!1;this.set(t,e.toISOString())},getDate:function(e){var e=e||"date",t=this.get(e);return!(_.indexOf(s,e)<0||_.isNull(t))&&new Date(wp.api.utils.parseISO8601(t))}},r={getMeta:function(e){return this.get("meta")[e]},getMetas:function(){return this.get("meta")},setMetas:function(e){var t=this.get("meta");_.extend(t,e),this.set("meta",t)},setMeta:function(e,t){var i=this.get("meta");i[e]=t,this.set("meta",i)}},c={getRevisions:function(){return e=this,t="PostRevisions",s=o="",a=jQuery.Deferred(),r=e.get("id"),e=e.get("_embedded")||{},_.isNumber(r)&&0!==r?(_.isUndefined(i)||_.isUndefined(e[i])?o={parent:r}:s=_.isUndefined(n)?e[i]:e[i][n],e=new wp.api.collections[t](s,o),_.isUndefined(e.models[0])?e.fetch({success:function(e){p(e,r),a.resolve(e)},error:function(e,t){a.reject(t)}}):(p(e,r),a.resolve(e)),a.promise()):(a.reject(),a);var e,t,i,n,o,s,a,r}},d={getTags:function(){var e=this.get("tags"),t=new wp.api.collections.Tags;return _.isEmpty(e)?jQuery.Deferred().resolve([]):t.fetch({data:{include:e}})},setTags:function(e){var i,n=this,o=[];if(_.isString(e))return!1;_.isArray(e)?(new wp.api.collections.Tags).fetch({data:{per_page:100},success:function(t){_.each(e,function(e){(i=new wp.api.models.Tag(t.findWhere({slug:e}))).set("parent_post",n.get("id")),o.push(i)}),e=new wp.api.collections.Tags(o),n.setTagsWithCollection(e)}}):this.setTagsWithCollection(e)},setTagsWithCollection:function(e){return this.set("tags",e.pluck("id")),this.save()}},l={getCategories:function(){var e=this.get("categories"),t=new wp.api.collections.Categories;return _.isEmpty(e)?jQuery.Deferred().resolve([]):t.fetch({data:{include:e}})},setCategories:function(e){var i,n=this,o=[];if(_.isString(e))return!1;_.isArray(e)?(new wp.api.collections.Categories).fetch({data:{per_page:100},success:function(t){_.each(e,function(e){(i=new wp.api.models.Category(t.findWhere({slug:e}))).set("parent_post",n.get("id")),o.push(i)}),e=new wp.api.collections.Categories(o),n.setCategoriesWithCollection(e)}}):this.setCategoriesWithCollection(e)},setCategoriesWithCollection:function(e){return this.set("categories",e.pluck("id")),this.save()}},u={getAuthorUser:function(){return n(this,this.get("author"),"User","author","name")}},g={getFeaturedMedia:function(){return n(this,this.get("featured_media"),"Media","wp:featuredmedia","source_url")}};return t=_.isUndefined(t.prototype.args)||(_.each(s,function(e){_.isUndefined(t.prototype.args[e])||(o=!0)}),o&&(t=t.extend(a)),_.isUndefined(t.prototype.args.author)||(t=t.extend(u)),_.isUndefined(t.prototype.args.featured_media)||(t=t.extend(g)),_.isUndefined(t.prototype.args.categories)||(t=t.extend(l)),_.isUndefined(t.prototype.args.meta)||(t=t.extend(r)),_.isUndefined(t.prototype.args.tags)||(t=t.extend(d)),_.isUndefined(i.collections[e+"Revisions"]))?t:t.extend(c)}}(window),function(){"use strict";var i=window.wpApiSettings||{},e=["Comment","Media","Comment","Post","Page","Status","Taxonomy","Type"];wp.api.WPApiBaseModel=Backbone.Model.extend({initialize:function(){-1===_.indexOf(e,this.name)&&(this.requireForceForDelete=!0)},sync:function(e,t,i){var n;return i=i||{},_.isNull(t.get("date_gmt"))&&t.unset("date_gmt"),_.isEmpty(t.get("slug"))&&t.unset("slug"),_.isFunction(t.nonce)&&!_.isEmpty(t.nonce())&&(n=i.beforeSend,i.beforeSend=function(e){if(e.setRequestHeader("X-WP-Nonce",t.nonce()),n)return n.apply(this,arguments)},i.complete=function(e){e=e.getResponseHeader("X-WP-Nonce");e&&_.isFunction(t.nonce)&&t.nonce()!==e&&t.endpointModel.set("nonce",e)}),this.requireForceForDelete&&"delete"===e&&(t.url=t.url()+"?force=true"),Backbone.sync(e,t,i)},save:function(e,t){return!(!_.includes(this.methods,"PUT")&&!_.includes(this.methods,"POST"))&&Backbone.Model.prototype.save.call(this,e,t)},destroy:function(e){return!!_.includes(this.methods,"DELETE")&&Backbone.Model.prototype.destroy.call(this,e)}}),wp.api.models.Schema=wp.api.WPApiBaseModel.extend({defaults:{_links:{},namespace:null,routes:{}},initialize:function(e,t){t=t||{},wp.api.WPApiBaseModel.prototype.initialize.call(this,e,t),this.apiRoot=t.apiRoot||i.root,this.versionString=t.versionString||i.versionString},url:function(){return this.apiRoot+this.versionString}})}(),function(){"use strict";window.wpApiSettings;wp.api.WPApiBaseCollection=Backbone.Collection.extend({initialize:function(e,t){this.state={data:{},currentPage:null,totalPages:null,totalObjects:null},_.isUndefined(t)?this.parent="":this.parent=t.parent},sync:function(e,t,i){var n,o,s=this;return i=i||{},_.isFunction(t.nonce)&&!_.isEmpty(t.nonce())&&(n=i.beforeSend,i.beforeSend=function(e){if(e.setRequestHeader("X-WP-Nonce",t.nonce()),n)return n.apply(s,arguments)},i.complete=function(e){e=e.getResponseHeader("X-WP-Nonce");e&&_.isFunction(t.nonce)&&t.nonce()!==e&&t.endpointModel.set("nonce",e)}),"read"===e&&(i.data?(s.state.data=_.clone(i.data),delete s.state.data.page):s.state.data=i.data={},void 0===i.data.page?(s.state.currentPage=null,s.state.totalPages=null,s.state.totalObjects=null):s.state.currentPage=i.data.page-1,o=i.success,i.success=function(e,t,i){if(_.isUndefined(i)||(s.state.totalPages=parseInt(i.getResponseHeader("x-wp-totalpages"),10),s.state.totalObjects=parseInt(i.getResponseHeader("x-wp-total"),10)),null===s.state.currentPage?s.state.currentPage=1:s.state.currentPage++,o)return o.apply(this,arguments)}),Backbone.sync(e,t,i)},more:function(e){if((e=e||{}).data=e.data||{},_.extend(e.data,this.state.data),void 0===e.data.page){if(!this.hasMore())return!1;null===this.state.currentPage||this.state.currentPage<=1?e.data.page=2:e.data.page=this.state.currentPage+1}return this.fetch(e)},hasMore:function(){return null===this.state.totalPages||null===this.state.totalObjects||null===this.state.currentPage?null:this.state.currentPage|$)/g,"").replace(/<(script|style)[^>]*>[\s\S]*?(<\/\1>|$)/gi,"").replace(/<\/?[a-z][\s\S]*?(>|$)/gi,"");return e!==t?wp.sanitize.stripTags(e):e},stripTagsAndEncodeText:function(t){var t=wp.sanitize.stripTags(t),e=document.createElement("textarea");try{e.textContent=t,t=wp.sanitize.stripTags(e.value)}catch(t){}return t}};wp-pointer.min.js000064400000007045152335011310007770 0ustar00/*! This file is auto-generated */ !function(o){var i=0,e=9999;o.widget("wp.pointer",{options:{pointerClass:"wp-pointer",pointerWidth:320,content:function(){return o(this).text()},buttons:function(t,i){return o('').text(wp.i18n.__("Dismiss")).on("click.pointer",function(t){t.preventDefault(),i.element.pointer("close")})},position:"top",show:function(t,i){i.pointer.show(),i.opened()},hide:function(t,i){i.pointer.hide(),i.closed()},document:document},_create:function(){var t;this.content=o('

        '),this.arrow=o('
        '),t="absolute",this.element.parents().add(this.element).filter(function(){return"fixed"===o(this).css("position")}).length&&(t="fixed"),this.pointer=o("
        ").append(this.content).append(this.arrow).attr("id","wp-pointer-"+i++).addClass(this.options.pointerClass).css({position:t,width:this.options.pointerWidth+"px",display:"none"}).appendTo(this.options.document.body)},_setOption:function(t,i){var e=this.options,n=this.pointer;"document"===t&&i!==e.document?n.detach().appendTo(i.body):"pointerClass"===t&&n.removeClass(e.pointerClass).addClass(i),o.Widget.prototype._setOption.apply(this,arguments),"position"===t?this.reposition():"content"===t&&this.active&&this.update()},destroy:function(){this.pointer.remove(),o.Widget.prototype.destroy.call(this)},widget:function(){return this.pointer},update:function(i){var e=this,t=this.options,n=o.Deferred();if(!t.disabled)return n.done(function(t){e._update(i,t)}),(t="string"==typeof t.content?t.content:t.content.call(this.element[0],n.resolve,i,this._handoff()))&&n.resolve(t),n.promise()},_update:function(t,i){var e=this.options;i&&(this.pointer.stop(),this.content.html(i),(i=e.buttons.call(this.element[0],t,this._handoff()))&&i.wrap('
        ').parent().appendTo(this.content),this.reposition())},reposition:function(){var t;this.options.disabled||(t=this._processPosition(this.options.position),this.pointer.css({top:0,left:0,zIndex:e++}).show().position(o.extend({of:this.element,collision:"fit none"},t)),this.repoint())},repoint:function(){var t=this.options;t.disabled||(t="string"==typeof t.position?t.position:t.position.edge,this.pointer[0].className=this.pointer[0].className.replace(/wp-pointer-[^\s'"]*/,""),this.pointer.addClass("wp-pointer-"+t))},_processPosition:function(t){var i={top:"bottom",bottom:"top",left:"right",right:"left"},t="string"==typeof t?{edge:t+""}:o.extend({},t);return t.edge&&("top"==t.edge||"bottom"==t.edge?(t.align=t.align||"left",t.at=t.at||t.align+" "+i[t.edge],t.my=t.my||t.align+" "+t.edge):(t.align=t.align||"top",t.at=t.at||i[t.edge]+" "+t.align,t.my=t.my||t.edge+" "+t.align)),t},open:function(t){var i=this,e=this.options;this.active||e.disabled||this.element.is(":hidden")||this.update().done(function(){i._open(t)})},_open:function(t){var i=this,e=this.options;this.active||e.disabled||this.element.is(":hidden")||(this.active=!0,this._trigger("open",t,this._handoff()),this._trigger("show",t,this._handoff({opened:function(){i._trigger("opened",t,i._handoff())}})))},close:function(t){var i;this.active&&!this.options.disabled&&((i=this).active=!1,this._trigger("close",t,this._handoff()),this._trigger("hide",t,this._handoff({closed:function(){i._trigger("closed",t,i._handoff())}})))},sendToTop:function(){this.active&&this.pointer.css("z-index",e++)},toggle:function(t){this.pointer.is(":hidden")?this.open(t):this.close(t)},_handoff:function(t){return o.extend({pointer:this.pointer,element:this.element},t)}})}(jQuery);shortcode.js000064400000025006152335011310007071 0ustar00/** * Utility functions for parsing and handling shortcodes in JavaScript. * * @output wp-includes/js/shortcode.js */ /** * Ensure the global `wp` object exists. * * @namespace wp */ window.wp = window.wp || {}; (function(){ wp.shortcode = { /* * ### Find the next matching shortcode. * * Given a shortcode `tag`, a block of `text`, and an optional starting * `index`, returns the next matching shortcode or `undefined`. * * Shortcodes are formatted as an object that contains the match * `content`, the matching `index`, and the parsed `shortcode` object. */ next: function( tag, text, index ) { var re = wp.shortcode.regexp( tag ), match, result; re.lastIndex = index || 0; match = re.exec( text ); if ( ! match ) { return; } // If we matched an escaped shortcode, try again. if ( '[' === match[1] && ']' === match[7] ) { return wp.shortcode.next( tag, text, re.lastIndex ); } result = { index: match.index, content: match[0], shortcode: wp.shortcode.fromMatch( match ) }; // If we matched a leading `[`, strip it from the match // and increment the index accordingly. if ( match[1] ) { result.content = result.content.slice( 1 ); result.index++; } // If we matched a trailing `]`, strip it from the match. if ( match[7] ) { result.content = result.content.slice( 0, -1 ); } return result; }, /* * ### Replace matching shortcodes in a block of text. * * Accepts a shortcode `tag`, content `text` to scan, and a `callback` * to process the shortcode matches and return a replacement string. * Returns the `text` with all shortcodes replaced. * * Shortcode matches are objects that contain the shortcode `tag`, * a shortcode `attrs` object, the `content` between shortcode tags, * and a boolean flag to indicate if the match was a `single` tag. */ replace: function( tag, text, callback ) { return text.replace( wp.shortcode.regexp( tag ), function( match, left, tag, attrs, slash, content, closing, right ) { // If both extra brackets exist, the shortcode has been // properly escaped. if ( left === '[' && right === ']' ) { return match; } // Create the match object and pass it through the callback. var result = callback( wp.shortcode.fromMatch( arguments ) ); // Make sure to return any of the extra brackets if they // weren't used to escape the shortcode. return result ? left + result + right : match; }); }, /* * ### Generate a string from shortcode parameters. * * Creates a `wp.shortcode` instance and returns a string. * * Accepts the same `options` as the `wp.shortcode()` constructor, * containing a `tag` string, a string or object of `attrs`, a boolean * indicating whether to format the shortcode using a `single` tag, and a * `content` string. */ string: function( options ) { return new wp.shortcode( options ).string(); }, /* * ### Generate a RegExp to identify a shortcode. * * The base regex is functionally equivalent to the one found in * `get_shortcode_regex()` in `wp-includes/shortcodes.php`. * * Capture groups: * * 1. An extra `[` to allow for escaping shortcodes with double `[[]]`. * 2. The shortcode name. * 3. The shortcode argument list. * 4. The self closing `/`. * 5. The content of a shortcode when it wraps some content. * 6. The closing tag. * 7. An extra `]` to allow for escaping shortcodes with double `[[]]`. */ regexp: _.memoize( function( tag ) { return new RegExp( '\\[(\\[?)(' + tag + ')(?![\\w-])([^\\]\\/]*(?:\\/(?!\\])[^\\]\\/]*)*?)(?:(\\/)\\]|\\](?:([^\\[]*(?:\\[(?!\\/\\2\\])[^\\[]*)*)(\\[\\/\\2\\]))?)(\\]?)', 'g' ); }), /* * ### Parse shortcode attributes. * * Shortcodes accept many types of attributes. These can chiefly be * divided into named and numeric attributes: * * Named attributes are assigned on a key/value basis, while numeric * attributes are treated as an array. * * Named attributes can be formatted as either `name="value"`, * `name='value'`, or `name=value`. Numeric attributes can be formatted * as `"value"` or just `value`. */ attrs: _.memoize( function( text ) { var named = {}, numeric = [], pattern, match; /* * This regular expression is reused from `shortcode_parse_atts()` * in `wp-includes/shortcodes.php`. * * Capture groups: * * 1. An attribute name, that corresponds to... * 2. a value in double quotes. * 3. An attribute name, that corresponds to... * 4. a value in single quotes. * 5. An attribute name, that corresponds to... * 6. an unquoted value. * 7. A numeric attribute in double quotes. * 8. A numeric attribute in single quotes. * 9. An unquoted numeric attribute. */ pattern = /([\w-]+)\s*=\s*"([^"]*)"(?:\s|$)|([\w-]+)\s*=\s*'([^']*)'(?:\s|$)|([\w-]+)\s*=\s*([^\s'"]+)(?:\s|$)|"([^"]*)"(?:\s|$)|'([^']*)'(?:\s|$)|(\S+)(?:\s|$)/g; // Map zero-width spaces to actual spaces. text = text.replace( /[\u00a0\u200b]/g, ' ' ); // Match and normalize attributes. while ( (match = pattern.exec( text )) ) { if ( match[1] ) { named[ match[1].toLowerCase() ] = match[2]; } else if ( match[3] ) { named[ match[3].toLowerCase() ] = match[4]; } else if ( match[5] ) { named[ match[5].toLowerCase() ] = match[6]; } else if ( match[7] ) { numeric.push( match[7] ); } else if ( match[8] ) { numeric.push( match[8] ); } else if ( match[9] ) { numeric.push( match[9] ); } } return { named: named, numeric: numeric }; }), /* * ### Generate a Shortcode Object from a RegExp match. * * Accepts a `match` object from calling `regexp.exec()` on a `RegExp` * generated by `wp.shortcode.regexp()`. `match` can also be set * to the `arguments` from a callback passed to `regexp.replace()`. */ fromMatch: function( match ) { var type; if ( match[4] ) { type = 'self-closing'; } else if ( match[6] ) { type = 'closed'; } else { type = 'single'; } return new wp.shortcode({ tag: match[2], attrs: match[3], type: type, content: match[5] }); } }; /* * Shortcode Objects * ----------------- * * Shortcode objects are generated automatically when using the main * `wp.shortcode` methods: `next()`, `replace()`, and `string()`. * * To access a raw representation of a shortcode, pass an `options` object, * containing a `tag` string, a string or object of `attrs`, a string * indicating the `type` of the shortcode ('single', 'self-closing', * or 'closed'), and a `content` string. */ wp.shortcode = _.extend( function( options ) { _.extend( this, _.pick( options || {}, 'tag', 'attrs', 'type', 'content' ) ); var attrs = this.attrs; // Ensure we have a correctly formatted `attrs` object. this.attrs = { named: {}, numeric: [] }; if ( ! attrs ) { return; } // Parse a string of attributes. if ( _.isString( attrs ) ) { this.attrs = wp.shortcode.attrs( attrs ); // Identify a correctly formatted `attrs` object. } else if ( _.difference( _.keys( attrs ), [ 'named', 'numeric' ] ).length === 0 ) { this.attrs = _.defaults( attrs, this.attrs ); // Handle a flat object of attributes. } else { _.each( options.attrs, function( value, key ) { this.set( key, value ); }, this ); } }, wp.shortcode ); _.extend( wp.shortcode.prototype, { /* * ### Get a shortcode attribute. * * Automatically detects whether `attr` is named or numeric and routes * it accordingly. */ get: function( attr ) { return this.attrs[ _.isNumber( attr ) ? 'numeric' : 'named' ][ attr ]; }, /* * ### Set a shortcode attribute. * * Automatically detects whether `attr` is named or numeric and routes * it accordingly. */ set: function( attr, value ) { this.attrs[ _.isNumber( attr ) ? 'numeric' : 'named' ][ attr ] = value; return this; }, // ### Transform the shortcode match into a string. string: function() { var text = '[' + this.tag; _.each( this.attrs.numeric, function( value ) { if ( /\s/.test( value ) ) { text += ' "' + value + '"'; } else { text += ' ' + value; } }); _.each( this.attrs.named, function( value, name ) { text += ' ' + name + '="' + value + '"'; }); // If the tag is marked as `single` or `self-closing`, close the // tag and ignore any additional content. if ( 'single' === this.type ) { return text + ']'; } else if ( 'self-closing' === this.type ) { return text + ' /]'; } // Complete the opening tag. text += ']'; if ( this.content ) { text += this.content; } // Add the closing tag. return text + '[/' + this.tag + ']'; } }); }()); /* * HTML utility functions * ---------------------- * * Experimental. These functions may change or be removed in the future. */ (function(){ wp.html = _.extend( wp.html || {}, { /* * ### Parse HTML attributes. * * Converts `content` to a set of parsed HTML attributes. * Utilizes `wp.shortcode.attrs( content )`, which is a valid superset of * the HTML attribute specification. Reformats the attributes into an * object that contains the `attrs` with `key:value` mapping, and a record * of the attributes that were entered using `empty` attribute syntax (i.e. * with no value). */ attrs: function( content ) { var result, attrs; // If `content` ends in a slash, strip it. if ( '/' === content[ content.length - 1 ] ) { content = content.slice( 0, -1 ); } result = wp.shortcode.attrs( content ); attrs = result.named; _.each( result.numeric, function( key ) { if ( /\s/.test( key ) ) { return; } attrs[ key ] = ''; }); return attrs; }, // ### Convert an HTML-representation of an object to a string. string: function( options ) { var text = '<' + options.tag, content = options.content || ''; _.each( options.attrs, function( value, attr ) { text += ' ' + attr; // Convert boolean values to strings. if ( _.isBoolean( value ) ) { value = value ? 'true' : 'false'; } text += '="' + value + '"'; }); // Return the result if it is a self-closing tag. if ( options.single ) { return text + ' />'; } // Complete the opening tag. text += '>'; // If `content` is an object, recursively call this function. text += _.isObject( content ) ? wp.html.string( content ) : content; return text + ''; } }); }()); hoverIntent.min.js000064400000002733152335011310010170 0ustar00/*! This file is auto-generated */ !function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=e(require("jquery")):jQuery&&!jQuery.fn.hoverIntent&&e(jQuery)}(function(f){"use strict";function u(e){return"function"==typeof e}var i,r,v={interval:100,sensitivity:6,timeout:0},s=0,a=function(e){i=e.pageX,r=e.pageY},p=function(e,t,n,o){if(Math.sqrt((n.pX-i)*(n.pX-i)+(n.pY-r)*(n.pY-r))[\\d]+)/' ); if ( lastSlash < 0 ) { return ''; } name = route.substr( 0, lastSlash - 1 ); name = name.split( '/' ); name.pop(); name = name.pop(); return name; }; /** * Add args and options to a model prototype from a route's endpoints. * * @param {Array} routeEndpoints Array of route endpoints. * @param {Object} modelInstance An instance of the model (or collection) * to add the args to. */ wp.api.utils.decorateFromRoute = function( routeEndpoints, modelInstance ) { /** * Build the args based on route endpoint data. */ _.each( routeEndpoints, function( routeEndpoint ) { // Add post and edit endpoints as model args. if ( _.includes( routeEndpoint.methods, 'POST' ) || _.includes( routeEndpoint.methods, 'PUT' ) ) { // Add any non-empty args, merging them into the args object. if ( ! _.isEmpty( routeEndpoint.args ) ) { // Set as default if no args yet. if ( _.isEmpty( modelInstance.prototype.args ) ) { modelInstance.prototype.args = routeEndpoint.args; } else { // We already have args, merge these new args in. modelInstance.prototype.args = _.extend( modelInstance.prototype.args, routeEndpoint.args ); } } } else { // Add GET method as model options. if ( _.includes( routeEndpoint.methods, 'GET' ) ) { // Add any non-empty args, merging them into the defaults object. if ( ! _.isEmpty( routeEndpoint.args ) ) { // Set as default if no defaults yet. if ( _.isEmpty( modelInstance.prototype.options ) ) { modelInstance.prototype.options = routeEndpoint.args; } else { // We already have options, merge these new args in. modelInstance.prototype.options = _.extend( modelInstance.prototype.options, routeEndpoint.args ); } } } } } ); }; /** * Add mixins and helpers to models depending on their defaults. * * @param {Backbone Model} model The model to attach helpers and mixins to. * @param {string} modelClassName The classname of the constructed model. * @param {Object} loadingObjects An object containing the models and collections we are building. */ wp.api.utils.addMixinsAndHelpers = function( model, modelClassName, loadingObjects ) { var hasDate = false, /** * Array of parseable dates. * * @type {string[]}. */ parseableDates = [ 'date', 'modified', 'date_gmt', 'modified_gmt' ], /** * Mixin for all content that is time stamped. * * This mixin converts between mysql timestamps and JavaScript Dates when syncing a model * to or from the server. For example, a date stored as `2015-12-27T21:22:24` on the server * gets expanded to `Sun Dec 27 2015 14:22:24 GMT-0700 (MST)` when the model is fetched. * * @type {{toJSON: toJSON, parse: parse}}. */ TimeStampedMixin = { /** * Prepare a JavaScript Date for transmitting to the server. * * This helper function accepts a field and Date object. It converts the passed Date * to an ISO string and sets that on the model field. * * @param {Date} date A JavaScript date object. WordPress expects dates in UTC. * @param {string} field The date field to set. One of 'date', 'date_gmt', 'date_modified' * or 'date_modified_gmt'. Optional, defaults to 'date'. */ setDate: function( date, field ) { var theField = field || 'date'; // Don't alter non-parsable date fields. if ( _.indexOf( parseableDates, theField ) < 0 ) { return false; } this.set( theField, date.toISOString() ); }, /** * Get a JavaScript Date from the passed field. * * WordPress returns 'date' and 'date_modified' in the timezone of the server as well as * UTC dates as 'date_gmt' and 'date_modified_gmt'. Draft posts do not include UTC dates. * * @param {string} field The date field to set. One of 'date', 'date_gmt', 'date_modified' * or 'date_modified_gmt'. Optional, defaults to 'date'. */ getDate: function( field ) { var theField = field || 'date', theISODate = this.get( theField ); // Only get date fields and non-null values. if ( _.indexOf( parseableDates, theField ) < 0 || _.isNull( theISODate ) ) { return false; } return new Date( wp.api.utils.parseISO8601( theISODate ) ); } }, /** * Build a helper function to retrieve related model. * * @param {string} parentModel The parent model. * @param {number} modelId The model ID if the object to request * @param {string} modelName The model name to use when constructing the model. * @param {string} embedSourcePoint Where to check the embedded object for _embed data. * @param {string} embedCheckField Which model field to check to see if the model has data. * * @return {Deferred.promise} A promise which resolves to the constructed model. */ buildModelGetter = function( parentModel, modelId, modelName, embedSourcePoint, embedCheckField ) { var getModel, embeddedObjects, attributes, deferred; deferred = jQuery.Deferred(); embeddedObjects = parentModel.get( '_embedded' ) || {}; // Verify that we have a valid object id. if ( ! _.isNumber( modelId ) || 0 === modelId ) { deferred.reject(); return deferred; } // If we have embedded object data, use that when constructing the getModel. if ( embeddedObjects[ embedSourcePoint ] ) { attributes = _.findWhere( embeddedObjects[ embedSourcePoint ], { id: modelId } ); } // Otherwise use the modelId. if ( ! attributes ) { attributes = { id: modelId }; } // Create the new getModel model. getModel = new wp.api.models[ modelName ]( attributes ); if ( ! getModel.get( embedCheckField ) ) { getModel.fetch( { success: function( getModel ) { deferred.resolve( getModel ); }, error: function( getModel, response ) { deferred.reject( response ); } } ); } else { // Resolve with the embedded model. deferred.resolve( getModel ); } // Return a promise. return deferred.promise(); }, /** * Build a helper to retrieve a collection. * * @param {string} parentModel The parent model. * @param {string} collectionName The name to use when constructing the collection. * @param {string} embedSourcePoint Where to check the embedded object for _embed data. * @param {string} embedIndex An additional optional index for the _embed data. * * @return {Deferred.promise} A promise which resolves to the constructed collection. */ buildCollectionGetter = function( parentModel, collectionName, embedSourcePoint, embedIndex ) { /** * Returns a promise that resolves to the requested collection * * Uses the embedded data if available, otherwise fetches the * data from the server. * * @return {Deferred.promise} promise Resolves to a wp.api.collections[ collectionName ] * collection. */ var postId, embeddedObjects, getObjects, classProperties = '', properties = '', deferred = jQuery.Deferred(); postId = parentModel.get( 'id' ); embeddedObjects = parentModel.get( '_embedded' ) || {}; // Verify that we have a valid post ID. if ( ! _.isNumber( postId ) || 0 === postId ) { deferred.reject(); return deferred; } // If we have embedded getObjects data, use that when constructing the getObjects. if ( ! _.isUndefined( embedSourcePoint ) && ! _.isUndefined( embeddedObjects[ embedSourcePoint ] ) ) { // Some embeds also include an index offset, check for that. if ( _.isUndefined( embedIndex ) ) { // Use the embed source point directly. properties = embeddedObjects[ embedSourcePoint ]; } else { // Add the index to the embed source point. properties = embeddedObjects[ embedSourcePoint ][ embedIndex ]; } } else { // Otherwise use the postId. classProperties = { parent: postId }; } // Create the new getObjects collection. getObjects = new wp.api.collections[ collectionName ]( properties, classProperties ); // If we didn’t have embedded getObjects, fetch the getObjects data. if ( _.isUndefined( getObjects.models[0] ) ) { getObjects.fetch( { success: function( getObjects ) { // Add a helper 'parent_post' attribute onto the model. setHelperParentPost( getObjects, postId ); deferred.resolve( getObjects ); }, error: function( getModel, response ) { deferred.reject( response ); } } ); } else { // Add a helper 'parent_post' attribute onto the model. setHelperParentPost( getObjects, postId ); deferred.resolve( getObjects ); } // Return a promise. return deferred.promise(); }, /** * Set the model post parent. */ setHelperParentPost = function( collection, postId ) { // Attach post_parent id to the collection. _.each( collection.models, function( model ) { model.set( 'parent_post', postId ); } ); }, /** * Add a helper function to handle post Meta. */ MetaMixin = { /** * Get meta by key for a post. * * @param {string} key The meta key. * * @return {Object} The post meta value. */ getMeta: function( key ) { var metas = this.get( 'meta' ); return metas[ key ]; }, /** * Get all meta key/values for a post. * * @return {Object} The post metas, as a key value pair object. */ getMetas: function() { return this.get( 'meta' ); }, /** * Set a group of meta key/values for a post. * * @param {Object} meta The post meta to set, as key/value pairs. */ setMetas: function( meta ) { var metas = this.get( 'meta' ); _.extend( metas, meta ); this.set( 'meta', metas ); }, /** * Set a single meta value for a post, by key. * * @param {string} key The meta key. * @param {Object} value The meta value. */ setMeta: function( key, value ) { var metas = this.get( 'meta' ); metas[ key ] = value; this.set( 'meta', metas ); } }, /** * Add a helper function to handle post Revisions. */ RevisionsMixin = { getRevisions: function() { return buildCollectionGetter( this, 'PostRevisions' ); } }, /** * Add a helper function to handle post Tags. */ TagsMixin = { /** * Get the tags for a post. * * @return {Deferred.promise} promise Resolves to an array of tags. */ getTags: function() { var tagIds = this.get( 'tags' ), tags = new wp.api.collections.Tags(); // Resolve with an empty array if no tags. if ( _.isEmpty( tagIds ) ) { return jQuery.Deferred().resolve( [] ); } return tags.fetch( { data: { include: tagIds } } ); }, /** * Set the tags for a post. * * Accepts an array of tag slugs, or a Tags collection. * * @param {Array|Backbone.Collection} tags The tags to set on the post. * */ setTags: function( tags ) { var allTags, newTag, self = this, newTags = []; if ( _.isString( tags ) ) { return false; } // If this is an array of slugs, build a collection. if ( _.isArray( tags ) ) { // Get all the tags. allTags = new wp.api.collections.Tags(); allTags.fetch( { data: { per_page: 100 }, success: function( alltags ) { // Find the passed tags and set them up. _.each( tags, function( tag ) { newTag = new wp.api.models.Tag( alltags.findWhere( { slug: tag } ) ); // Tie the new tag to the post. newTag.set( 'parent_post', self.get( 'id' ) ); // Add the new tag to the collection. newTags.push( newTag ); } ); tags = new wp.api.collections.Tags( newTags ); self.setTagsWithCollection( tags ); } } ); } else { this.setTagsWithCollection( tags ); } }, /** * Set the tags for a post. * * Accepts a Tags collection. * * @param {Array|Backbone.Collection} tags The tags to set on the post. * */ setTagsWithCollection: function( tags ) { // Pluck out the category IDs. this.set( 'tags', tags.pluck( 'id' ) ); return this.save(); } }, /** * Add a helper function to handle post Categories. */ CategoriesMixin = { /** * Get a the categories for a post. * * @return {Deferred.promise} promise Resolves to an array of categories. */ getCategories: function() { var categoryIds = this.get( 'categories' ), categories = new wp.api.collections.Categories(); // Resolve with an empty array if no categories. if ( _.isEmpty( categoryIds ) ) { return jQuery.Deferred().resolve( [] ); } return categories.fetch( { data: { include: categoryIds } } ); }, /** * Set the categories for a post. * * Accepts an array of category slugs, or a Categories collection. * * @param {Array|Backbone.Collection} categories The categories to set on the post. * */ setCategories: function( categories ) { var allCategories, newCategory, self = this, newCategories = []; if ( _.isString( categories ) ) { return false; } // If this is an array of slugs, build a collection. if ( _.isArray( categories ) ) { // Get all the categories. allCategories = new wp.api.collections.Categories(); allCategories.fetch( { data: { per_page: 100 }, success: function( allcats ) { // Find the passed categories and set them up. _.each( categories, function( category ) { newCategory = new wp.api.models.Category( allcats.findWhere( { slug: category } ) ); // Tie the new category to the post. newCategory.set( 'parent_post', self.get( 'id' ) ); // Add the new category to the collection. newCategories.push( newCategory ); } ); categories = new wp.api.collections.Categories( newCategories ); self.setCategoriesWithCollection( categories ); } } ); } else { this.setCategoriesWithCollection( categories ); } }, /** * Set the categories for a post. * * Accepts Categories collection. * * @param {Array|Backbone.Collection} categories The categories to set on the post. * */ setCategoriesWithCollection: function( categories ) { // Pluck out the category IDs. this.set( 'categories', categories.pluck( 'id' ) ); return this.save(); } }, /** * Add a helper function to retrieve the author user model. */ AuthorMixin = { getAuthorUser: function() { return buildModelGetter( this, this.get( 'author' ), 'User', 'author', 'name' ); } }, /** * Add a helper function to retrieve the featured media. */ FeaturedMediaMixin = { getFeaturedMedia: function() { return buildModelGetter( this, this.get( 'featured_media' ), 'Media', 'wp:featuredmedia', 'source_url' ); } }; // Exit if we don't have valid model defaults. if ( _.isUndefined( model.prototype.args ) ) { return model; } // Go thru the parsable date fields, if our model contains any of them it gets the TimeStampedMixin. _.each( parseableDates, function( theDateKey ) { if ( ! _.isUndefined( model.prototype.args[ theDateKey ] ) ) { hasDate = true; } } ); // Add the TimeStampedMixin for models that contain a date field. if ( hasDate ) { model = model.extend( TimeStampedMixin ); } // Add the AuthorMixin for models that contain an author. if ( ! _.isUndefined( model.prototype.args.author ) ) { model = model.extend( AuthorMixin ); } // Add the FeaturedMediaMixin for models that contain a featured_media. if ( ! _.isUndefined( model.prototype.args.featured_media ) ) { model = model.extend( FeaturedMediaMixin ); } // Add the CategoriesMixin for models that support categories collections. if ( ! _.isUndefined( model.prototype.args.categories ) ) { model = model.extend( CategoriesMixin ); } // Add the MetaMixin for models that support meta. if ( ! _.isUndefined( model.prototype.args.meta ) ) { model = model.extend( MetaMixin ); } // Add the TagsMixin for models that support tags collections. if ( ! _.isUndefined( model.prototype.args.tags ) ) { model = model.extend( TagsMixin ); } // Add the RevisionsMixin for models that support revisions collections. if ( ! _.isUndefined( loadingObjects.collections[ modelClassName + 'Revisions' ] ) ) { model = model.extend( RevisionsMixin ); } return model; }; })( window ); /* global wpApiSettings:false */ // Suppress warning about parse function's unused "options" argument: /* jshint unused:false */ (function() { 'use strict'; var wpApiSettings = window.wpApiSettings || {}, trashableTypes = [ 'Comment', 'Media', 'Comment', 'Post', 'Page', 'Status', 'Taxonomy', 'Type' ]; /** * Backbone base model for all models. */ wp.api.WPApiBaseModel = Backbone.Model.extend( /** @lends WPApiBaseModel.prototype */ { // Initialize the model. initialize: function() { /** * Types that don't support trashing require passing ?force=true to delete. * */ if ( -1 === _.indexOf( trashableTypes, this.name ) ) { this.requireForceForDelete = true; } }, /** * Set nonce header before every Backbone sync. * * @param {string} method. * @param {Backbone.Model} model. * @param {{beforeSend}, *} options. * @return {*}. */ sync: function( method, model, options ) { var beforeSend; options = options || {}; // Remove date_gmt if null. if ( _.isNull( model.get( 'date_gmt' ) ) ) { model.unset( 'date_gmt' ); } // Remove slug if empty. if ( _.isEmpty( model.get( 'slug' ) ) ) { model.unset( 'slug' ); } if ( _.isFunction( model.nonce ) && ! _.isEmpty( model.nonce() ) ) { beforeSend = options.beforeSend; // @todo Enable option for jsonp endpoints. // options.dataType = 'jsonp'; // Include the nonce with requests. options.beforeSend = function( xhr ) { xhr.setRequestHeader( 'X-WP-Nonce', model.nonce() ); if ( beforeSend ) { return beforeSend.apply( this, arguments ); } }; // Update the nonce when a new nonce is returned with the response. options.complete = function( xhr ) { var returnedNonce = xhr.getResponseHeader( 'X-WP-Nonce' ); if ( returnedNonce && _.isFunction( model.nonce ) && model.nonce() !== returnedNonce ) { model.endpointModel.set( 'nonce', returnedNonce ); } }; } // Add '?force=true' to use delete method when required. if ( this.requireForceForDelete && 'delete' === method ) { model.url = model.url() + '?force=true'; } return Backbone.sync( method, model, options ); }, /** * Save is only allowed when the PUT OR POST methods are available for the endpoint. */ save: function( attrs, options ) { // Do we have the put method, then execute the save. if ( _.includes( this.methods, 'PUT' ) || _.includes( this.methods, 'POST' ) ) { // Proxy the call to the original save function. return Backbone.Model.prototype.save.call( this, attrs, options ); } else { // Otherwise bail, disallowing action. return false; } }, /** * Delete is only allowed when the DELETE method is available for the endpoint. */ destroy: function( options ) { // Do we have the DELETE method, then execute the destroy. if ( _.includes( this.methods, 'DELETE' ) ) { // Proxy the call to the original save function. return Backbone.Model.prototype.destroy.call( this, options ); } else { // Otherwise bail, disallowing action. return false; } } } ); /** * API Schema model. Contains meta information about the API. */ wp.api.models.Schema = wp.api.WPApiBaseModel.extend( /** @lends Schema.prototype */ { defaults: { _links: {}, namespace: null, routes: {} }, initialize: function( attributes, options ) { var model = this; options = options || {}; wp.api.WPApiBaseModel.prototype.initialize.call( model, attributes, options ); model.apiRoot = options.apiRoot || wpApiSettings.root; model.versionString = options.versionString || wpApiSettings.versionString; }, url: function() { return this.apiRoot + this.versionString; } } ); })(); ( function() { 'use strict'; var wpApiSettings = window.wpApiSettings || {}; /** * Contains basic collection functionality such as pagination. */ wp.api.WPApiBaseCollection = Backbone.Collection.extend( /** @lends BaseCollection.prototype */ { /** * Setup default state. */ initialize: function( models, options ) { this.state = { data: {}, currentPage: null, totalPages: null, totalObjects: null }; if ( _.isUndefined( options ) ) { this.parent = ''; } else { this.parent = options.parent; } }, /** * Extend Backbone.Collection.sync to add nince and pagination support. * * Set nonce header before every Backbone sync. * * @param {string} method. * @param {Backbone.Model} model. * @param {{success}, *} options. * @return {*}. */ sync: function( method, model, options ) { var beforeSend, success, self = this; options = options || {}; if ( _.isFunction( model.nonce ) && ! _.isEmpty( model.nonce() ) ) { beforeSend = options.beforeSend; // Include the nonce with requests. options.beforeSend = function( xhr ) { xhr.setRequestHeader( 'X-WP-Nonce', model.nonce() ); if ( beforeSend ) { return beforeSend.apply( self, arguments ); } }; // Update the nonce when a new nonce is returned with the response. options.complete = function( xhr ) { var returnedNonce = xhr.getResponseHeader( 'X-WP-Nonce' ); if ( returnedNonce && _.isFunction( model.nonce ) && model.nonce() !== returnedNonce ) { model.endpointModel.set( 'nonce', returnedNonce ); } }; } // When reading, add pagination data. if ( 'read' === method ) { if ( options.data ) { self.state.data = _.clone( options.data ); delete self.state.data.page; } else { self.state.data = options.data = {}; } if ( 'undefined' === typeof options.data.page ) { self.state.currentPage = null; self.state.totalPages = null; self.state.totalObjects = null; } else { self.state.currentPage = options.data.page - 1; } success = options.success; options.success = function( data, textStatus, request ) { if ( ! _.isUndefined( request ) ) { self.state.totalPages = parseInt( request.getResponseHeader( 'x-wp-totalpages' ), 10 ); self.state.totalObjects = parseInt( request.getResponseHeader( 'x-wp-total' ), 10 ); } if ( null === self.state.currentPage ) { self.state.currentPage = 1; } else { self.state.currentPage++; } if ( success ) { return success.apply( this, arguments ); } }; } // Continue by calling Backbone's sync. return Backbone.sync( method, model, options ); }, /** * Fetches the next page of objects if a new page exists. * * @param {data: {page}} options. * @return {*}. */ more: function( options ) { options = options || {}; options.data = options.data || {}; _.extend( options.data, this.state.data ); if ( 'undefined' === typeof options.data.page ) { if ( ! this.hasMore() ) { return false; } if ( null === this.state.currentPage || this.state.currentPage <= 1 ) { options.data.page = 2; } else { options.data.page = this.state.currentPage + 1; } } return this.fetch( options ); }, /** * Returns true if there are more pages of objects available. * * @return {null|boolean} */ hasMore: function() { if ( null === this.state.totalPages || null === this.state.totalObjects || null === this.state.currentPage ) { return null; } else { return ( this.state.currentPage < this.state.totalPages ); } } } ); } )(); ( function() { 'use strict'; var Endpoint, initializedDeferreds = {}, wpApiSettings = window.wpApiSettings || {}; /** @namespace wp */ window.wp = window.wp || {}; /** @namespace wp.api */ wp.api = wp.api || {}; // If wpApiSettings is unavailable, try the default. if ( _.isEmpty( wpApiSettings ) ) { wpApiSettings.root = window.location.origin + '/wp-json/'; } Endpoint = Backbone.Model.extend(/** @lends Endpoint.prototype */{ defaults: { apiRoot: wpApiSettings.root, versionString: wp.api.versionString, nonce: null, schema: null, models: {}, collections: {} }, /** * Initialize the Endpoint model. */ initialize: function() { var model = this, deferred; Backbone.Model.prototype.initialize.apply( model, arguments ); deferred = jQuery.Deferred(); model.schemaConstructed = deferred.promise(); model.schemaModel = new wp.api.models.Schema( null, { apiRoot: model.get( 'apiRoot' ), versionString: model.get( 'versionString' ), nonce: model.get( 'nonce' ) } ); // When the model loads, resolve the promise. model.schemaModel.once( 'change', function() { model.constructFromSchema(); deferred.resolve( model ); } ); if ( model.get( 'schema' ) ) { // Use schema supplied as model attribute. model.schemaModel.set( model.schemaModel.parse( model.get( 'schema' ) ) ); } else if ( ! _.isUndefined( sessionStorage ) && ( _.isUndefined( wpApiSettings.cacheSchema ) || wpApiSettings.cacheSchema ) && sessionStorage.getItem( 'wp-api-schema-model' + model.get( 'apiRoot' ) + model.get( 'versionString' ) ) ) { // Used a cached copy of the schema model if available. model.schemaModel.set( model.schemaModel.parse( JSON.parse( sessionStorage.getItem( 'wp-api-schema-model' + model.get( 'apiRoot' ) + model.get( 'versionString' ) ) ) ) ); } else { model.schemaModel.fetch( { /** * When the server returns the schema model data, store the data in a sessionCache so we don't * have to retrieve it again for this session. Then, construct the models and collections based * on the schema model data. * * @ignore */ success: function( newSchemaModel ) { // Store a copy of the schema model in the session cache if available. if ( ! _.isUndefined( sessionStorage ) && ( _.isUndefined( wpApiSettings.cacheSchema ) || wpApiSettings.cacheSchema ) ) { try { sessionStorage.setItem( 'wp-api-schema-model' + model.get( 'apiRoot' ) + model.get( 'versionString' ), JSON.stringify( newSchemaModel ) ); } catch ( error ) { // Fail silently, fixes errors in safari private mode. } } }, // Log the error condition. error: function( err ) { window.console.log( err ); } } ); } }, constructFromSchema: function() { var routeModel = this, modelRoutes, collectionRoutes, schemaRoot, loadingObjects, /** * Set up the model and collection name mapping options. As the schema is built, the * model and collection names will be adjusted if they are found in the mapping object. * * Localizing a variable wpApiSettings.mapping will over-ride the default mapping options. * */ mapping = wpApiSettings.mapping || { models: { 'Categories': 'Category', 'Comments': 'Comment', 'Pages': 'Page', 'PagesMeta': 'PageMeta', 'PagesRevisions': 'PageRevision', 'Posts': 'Post', 'PostsCategories': 'PostCategory', 'PostsRevisions': 'PostRevision', 'PostsTags': 'PostTag', 'Schema': 'Schema', 'Statuses': 'Status', 'Tags': 'Tag', 'Taxonomies': 'Taxonomy', 'Types': 'Type', 'Users': 'User' }, collections: { 'PagesMeta': 'PageMeta', 'PagesRevisions': 'PageRevisions', 'PostsCategories': 'PostCategories', 'PostsMeta': 'PostMeta', 'PostsRevisions': 'PostRevisions', 'PostsTags': 'PostTags' } }, modelEndpoints = routeModel.get( 'modelEndpoints' ), modelRegex = new RegExp( '(?:.*[+)]|\/(' + modelEndpoints.join( '|' ) + '))$' ); /** * Iterate thru the routes, picking up models and collections to build. Builds two arrays, * one for models and one for collections. */ modelRoutes = []; collectionRoutes = []; schemaRoot = routeModel.get( 'apiRoot' ).replace( wp.api.utils.getRootUrl(), '' ); loadingObjects = {}; /** * Tracking objects for models and collections. */ loadingObjects.models = {}; loadingObjects.collections = {}; _.each( routeModel.schemaModel.get( 'routes' ), function( route, index ) { // Skip the schema root if included in the schema. if ( index !== routeModel.get( ' versionString' ) && index !== schemaRoot && index !== ( '/' + routeModel.get( 'versionString' ).slice( 0, -1 ) ) ) { // Single items end with a regex, or a special case word. if ( modelRegex.test( index ) ) { modelRoutes.push( { index: index, route: route } ); } else { // Collections end in a name. collectionRoutes.push( { index: index, route: route } ); } } } ); /** * Construct the models. * * Base the class name on the route endpoint. */ _.each( modelRoutes, function( modelRoute ) { // Extract the name and any parent from the route. var modelClassName, routeName = wp.api.utils.extractRoutePart( modelRoute.index, 2, routeModel.get( 'versionString' ), true ), parentName = wp.api.utils.extractRoutePart( modelRoute.index, 1, routeModel.get( 'versionString' ), false ), routeEnd = wp.api.utils.extractRoutePart( modelRoute.index, 1, routeModel.get( 'versionString' ), true ); // Clear the parent part of the rouite if its actually the version string. if ( parentName === routeModel.get( 'versionString' ) ) { parentName = ''; } // Handle the special case of the 'me' route. if ( 'me' === routeEnd ) { routeName = 'me'; } // If the model has a parent in its route, add that to its class name. if ( '' !== parentName && parentName !== routeName ) { modelClassName = wp.api.utils.capitalizeAndCamelCaseDashes( parentName ) + wp.api.utils.capitalizeAndCamelCaseDashes( routeName ); modelClassName = mapping.models[ modelClassName ] || modelClassName; loadingObjects.models[ modelClassName ] = wp.api.WPApiBaseModel.extend( { // Return a constructed url based on the parent and id. url: function() { var url = routeModel.get( 'apiRoot' ) + routeModel.get( 'versionString' ) + parentName + '/' + ( ( _.isUndefined( this.get( 'parent' ) ) || 0 === this.get( 'parent' ) ) ? ( _.isUndefined( this.get( 'parent_post' ) ) ? '' : this.get( 'parent_post' ) + '/' ) : this.get( 'parent' ) + '/' ) + routeName; if ( ! _.isUndefined( this.get( 'id' ) ) ) { url += '/' + this.get( 'id' ); } return url; }, // Track nonces on the Endpoint 'routeModel'. nonce: function() { return routeModel.get( 'nonce' ); }, endpointModel: routeModel, // Include a reference to the original route object. route: modelRoute, // Include a reference to the original class name. name: modelClassName, // Include the array of route methods for easy reference. methods: modelRoute.route.methods, // Include the array of route endpoints for easy reference. endpoints: modelRoute.route.endpoints } ); } else { // This is a model without a parent in its route. modelClassName = wp.api.utils.capitalizeAndCamelCaseDashes( routeName ); modelClassName = mapping.models[ modelClassName ] || modelClassName; loadingObjects.models[ modelClassName ] = wp.api.WPApiBaseModel.extend( { // Function that returns a constructed url based on the ID. url: function() { var url = routeModel.get( 'apiRoot' ) + routeModel.get( 'versionString' ) + ( ( 'me' === routeName ) ? 'users/me' : routeName ); if ( ! _.isUndefined( this.get( 'id' ) ) ) { url += '/' + this.get( 'id' ); } return url; }, // Track nonces at the Endpoint level. nonce: function() { return routeModel.get( 'nonce' ); }, endpointModel: routeModel, // Include a reference to the original route object. route: modelRoute, // Include a reference to the original class name. name: modelClassName, // Include the array of route methods for easy reference. methods: modelRoute.route.methods, // Include the array of route endpoints for easy reference. endpoints: modelRoute.route.endpoints } ); } // Add defaults to the new model, pulled form the endpoint. wp.api.utils.decorateFromRoute( modelRoute.route.endpoints, loadingObjects.models[ modelClassName ], routeModel.get( 'versionString' ) ); } ); /** * Construct the collections. * * Base the class name on the route endpoint. */ _.each( collectionRoutes, function( collectionRoute ) { // Extract the name and any parent from the route. var collectionClassName, modelClassName, routeName = collectionRoute.index.slice( collectionRoute.index.lastIndexOf( '/' ) + 1 ), parentName = wp.api.utils.extractRoutePart( collectionRoute.index, 1, routeModel.get( 'versionString' ), false ); // If the collection has a parent in its route, add that to its class name. if ( '' !== parentName && parentName !== routeName && routeModel.get( 'versionString' ) !== parentName ) { collectionClassName = wp.api.utils.capitalizeAndCamelCaseDashes( parentName ) + wp.api.utils.capitalizeAndCamelCaseDashes( routeName ); modelClassName = mapping.models[ collectionClassName ] || collectionClassName; collectionClassName = mapping.collections[ collectionClassName ] || collectionClassName; loadingObjects.collections[ collectionClassName ] = wp.api.WPApiBaseCollection.extend( { // Function that returns a constructed url passed on the parent. url: function() { return routeModel.get( 'apiRoot' ) + routeModel.get( 'versionString' ) + parentName + '/' + ( ( _.isUndefined( this.parent ) || '' === this.parent ) ? ( _.isUndefined( this.get( 'parent_post' ) ) ? '' : this.get( 'parent_post' ) + '/' ) : this.parent + '/' ) + routeName; }, // Specify the model that this collection contains. model: function( attrs, options ) { return new loadingObjects.models[ modelClassName ]( attrs, options ); }, // Track nonces at the Endpoint level. nonce: function() { return routeModel.get( 'nonce' ); }, endpointModel: routeModel, // Include a reference to the original class name. name: collectionClassName, // Include a reference to the original route object. route: collectionRoute, // Include the array of route methods for easy reference. methods: collectionRoute.route.methods } ); } else { // This is a collection without a parent in its route. collectionClassName = wp.api.utils.capitalizeAndCamelCaseDashes( routeName ); modelClassName = mapping.models[ collectionClassName ] || collectionClassName; collectionClassName = mapping.collections[ collectionClassName ] || collectionClassName; loadingObjects.collections[ collectionClassName ] = wp.api.WPApiBaseCollection.extend( { // For the url of a root level collection, use a string. url: function() { return routeModel.get( 'apiRoot' ) + routeModel.get( 'versionString' ) + routeName; }, // Specify the model that this collection contains. model: function( attrs, options ) { return new loadingObjects.models[ modelClassName ]( attrs, options ); }, // Track nonces at the Endpoint level. nonce: function() { return routeModel.get( 'nonce' ); }, endpointModel: routeModel, // Include a reference to the original class name. name: collectionClassName, // Include a reference to the original route object. route: collectionRoute, // Include the array of route methods for easy reference. methods: collectionRoute.route.methods } ); } // Add defaults to the new model, pulled form the endpoint. wp.api.utils.decorateFromRoute( collectionRoute.route.endpoints, loadingObjects.collections[ collectionClassName ] ); } ); // Add mixins and helpers for each of the models. _.each( loadingObjects.models, function( model, index ) { loadingObjects.models[ index ] = wp.api.utils.addMixinsAndHelpers( model, index, loadingObjects ); } ); // Set the routeModel models and collections. routeModel.set( 'models', loadingObjects.models ); routeModel.set( 'collections', loadingObjects.collections ); } } ); wp.api.endpoints = new Backbone.Collection(); /** * Initialize the wp-api, optionally passing the API root. * * @param {Object} [args] * @param {string} [args.nonce] The nonce. Optional, defaults to wpApiSettings.nonce. * @param {string} [args.apiRoot] The api root. Optional, defaults to wpApiSettings.root. * @param {string} [args.versionString] The version string. Optional, defaults to wpApiSettings.root. * @param {Object} [args.schema] The schema. Optional, will be fetched from API if not provided. */ wp.api.init = function( args ) { var endpoint, attributes = {}, deferred, promise; args = args || {}; attributes.nonce = _.isString( args.nonce ) ? args.nonce : ( wpApiSettings.nonce || '' ); attributes.apiRoot = args.apiRoot || wpApiSettings.root || '/wp-json'; attributes.versionString = args.versionString || wpApiSettings.versionString || 'wp/v2/'; attributes.schema = args.schema || null; attributes.modelEndpoints = args.modelEndpoints || [ 'me', 'settings' ]; if ( ! attributes.schema && attributes.apiRoot === wpApiSettings.root && attributes.versionString === wpApiSettings.versionString ) { attributes.schema = wpApiSettings.schema; } if ( ! initializedDeferreds[ attributes.apiRoot + attributes.versionString ] ) { // Look for an existing copy of this endpoint. endpoint = wp.api.endpoints.findWhere( { 'apiRoot': attributes.apiRoot, 'versionString': attributes.versionString } ); if ( ! endpoint ) { endpoint = new Endpoint( attributes ); } deferred = jQuery.Deferred(); promise = deferred.promise(); endpoint.schemaConstructed.done( function( resolvedEndpoint ) { wp.api.endpoints.add( resolvedEndpoint ); // Map the default endpoints, extending any already present items (including Schema model). wp.api.models = _.extend( wp.api.models, resolvedEndpoint.get( 'models' ) ); wp.api.collections = _.extend( wp.api.collections, resolvedEndpoint.get( 'collections' ) ); deferred.resolve( resolvedEndpoint ); } ); initializedDeferreds[ attributes.apiRoot + attributes.versionString ] = promise; } return initializedDeferreds[ attributes.apiRoot + attributes.versionString ]; }; /** * Construct the default endpoints and add to an endpoints collection. */ // The wp.api.init function returns a promise that will resolve with the endpoint once it is ready. wp.api.loadPromise = wp.api.init(); } )(); media-models.min.js000064400000031744152335011310010227 0ustar00/*! This file is auto-generated */ (()=>{var e,i,t,s,r={1288:t=>{var a,r=wp.media.model.Attachments,o=r.extend({initialize:function(t,e){var i;e=e||{},r.prototype.initialize.apply(this,arguments),this.args=e.args,this._hasMore=!0,this.created=new Date,this.filters.order=function(t){var e=this.props.get("orderby"),i=this.props.get("order");return!this.comparator||(this.length?1!==this.comparator(t,this.last(),{ties:!0}):"DESC"!==i||"date"!==e&&"modified"!==e?"ASC"===i&&"menuOrder"===e&&0===t.get(e):t.get(e)>=this.created)},i=["s","order","orderby","posts_per_page","post_mime_type","post_parent","author"],wp.Uploader&&_(this.args).chain().keys().difference(i).isEmpty().value()&&this.observe(wp.Uploader.queue)},hasMore:function(){return this._hasMore},more:function(t){var e=this;return this._more&&"pending"===this._more.state()?this._more:this.hasMore()?((t=t||{}).remove=!1,this._more=this.fetch(t).done(function(t){(_.isEmpty(t)||-1===e.args.posts_per_page||t.length{var n=Backbone.$,e=Backbone.Model.extend({sync:function(t,e,i){return _.isUndefined(this.id)?n.Deferred().rejectWith(this).promise():"read"===t?((i=i||{}).context=this,i.data=_.extend(i.data||{},{action:"get-attachment",id:this.id}),wp.media.ajax(i)):"update"===t?this.get("nonces")&&this.get("nonces").update?((i=i||{}).context=this,i.data=_.extend(i.data||{},{action:"save-attachment",id:this.id,nonce:this.get("nonces").update,post_id:wp.media.model.settings.post.id}),e.hasChanged()&&(i.data.changes={},_.each(e.changed,function(t,e){i.data.changes[e]=this.get(e)},this)),wp.media.ajax(i)):n.Deferred().rejectWith(this).promise():"delete"===t?((i=i||{}).wait||(this.destroyed=!0),i.context=this,i.data=_.extend(i.data||{},{action:"delete-post",id:this.id,_wpnonce:this.get("nonces").delete}),wp.media.ajax(i).done(function(){this.destroyed=!0}).fail(function(){this.destroyed=!1})):Backbone.Model.prototype.sync.apply(this,arguments)},parse:function(t){return t&&(t.date=new Date(t.date),t.modified=new Date(t.modified)),t},saveCompat:function(t,s){var r=this;return this.get("nonces")&&this.get("nonces").update?wp.media.post("save-attachment-compat",_.defaults({id:this.id,nonce:this.get("nonces").update,post_id:wp.media.model.settings.post.id},t)).done(function(t,e,i){r.set(r.parse(t,i),s)}):n.Deferred().rejectWith(this).promise()}},{create:function(t){return wp.media.model.Attachments.all.push(t)},get:_.memoize(function(t,e){return wp.media.model.Attachments.all.push(e||{id:t})})});t.exports=e},4134:t=>{var i=wp.media.model.Attachments,e=i.extend({initialize:function(t,e){i.prototype.initialize.apply(this,arguments),this.multiple=e&&e.multiple,this.on("add remove reset",_.bind(this.single,this,!1))},add:function(t,e){return this.multiple||this.remove(this.models),i.prototype.add.call(this,t,e)},single:function(t){var e=this._single;return t&&(this._single=t),this._single&&!this.get(this._single.cid)&&delete this._single,this._single=this._single||this.last(),this._single!==e&&(e&&(e.trigger("selection:unsingle",e,this),this.get(e.cid)||this.trigger("selection:unsingle",e,this)),this._single)&&this._single.trigger("selection:single",this._single,this),this._single}});t.exports=e},8266:t=>{var n=Backbone.Collection.extend({model:wp.media.model.Attachment,initialize:function(t,e){e=e||{},this.props=new Backbone.Model,this.filters=e.filters||{},this.props.on("change",this._changeFilteredProps,this),this.props.on("change:order",this._changeOrder,this),this.props.on("change:orderby",this._changeOrderby,this),this.props.on("change:query",this._changeQuery,this),this.props.set(_.defaults(e.props||{})),e.observe&&this.observe(e.observe)},_changeOrder:function(){this.comparator&&this.sort()},_changeOrderby:function(t,e){this.comparator&&this.comparator!==n.comparator||(e&&"post__in"!==e?this.comparator=n.comparator:delete this.comparator)},_changeQuery:function(t,e){e?(this.props.on("change",this._requery,this),this._requery()):this.props.off("change",this._requery,this)},_changeFilteredProps:function(r){this.props.get("query")||_.chain(r.changed).map(function(t,e){var i=n.filters[e],s=r.get(e);if(i){if(s&&!this.filters[e])this.filters[e]=i;else{if(s||this.filters[e]!==i)return;delete this.filters[e]}return!0}},this).any().value()&&(this._source||(this._source=new n(this.models)),this.reset(this._source.filter(this.validator,this)))},validateDestroyed:!1,validator:function(e){return!(!this.validateDestroyed&&e.destroyed)&&_.all(this.filters,function(t){return!!t.call(this,e)},this)},validate:function(t,e){var i=this.validator(t),s=!!this.get(t.cid);return!i&&s?this.remove(t,e):i&&!s&&this.add(t,e),this},validateAll:function(t,e){return e=e||{},_.each(t.models,function(t){this.validate(t,{silent:!0})},this),e.silent||this.trigger("reset",this,e),this},observe:function(t){return this.observers=this.observers||[],this.observers.push(t),t.on("add change remove",this._validateHandler,this),t.on("add",this._addToTotalAttachments,this),t.on("remove",this._removeFromTotalAttachments,this),t.on("reset",this._validateAllHandler,this),this.validateAll(t),this},unobserve:function(t){return t?(t.off(null,null,this),this.observers=_.without(this.observers,t)):(_.each(this.observers,function(t){t.off(null,null,this)},this),delete this.observers),this},_removeFromTotalAttachments:function(){this.mirroring&&(this.mirroring.totalAttachments=this.mirroring.totalAttachments-1)},_addToTotalAttachments:function(){this.mirroring&&(this.mirroring.totalAttachments=this.mirroring.totalAttachments+1)},_validateHandler:function(t,e,i){return i=e===this.mirroring?i:{silent:i&&i.silent},this.validate(t,i)},_validateAllHandler:function(t,e){return this.validateAll(t,e)},mirror:function(t){return this.mirroring&&this.mirroring===t||(this.unmirror(),this.mirroring=t,this.reset([],{silent:!0}),this.observe(t),this.trigger("attachments:received",this)),this},unmirror:function(){this.mirroring&&(this.unobserve(this.mirroring),delete this.mirroring)},more:function(t){var e=jQuery.Deferred(),i=this.mirroring,s=this;return(i&&i.more?(i.more(t).done(function(){this===s.mirroring&&e.resolveWith(this),s.trigger("attachments:received",this)}),e):e.resolveWith(this)).promise()},hasMore:function(){return!!this.mirroring&&this.mirroring.hasMore()},totalAttachments:0,getTotalAttachments:function(){return this.mirroring?this.mirroring.totalAttachments:0},parse:function(t,i){return _.isArray(t)||(t=[t]),_.map(t,function(t){var e;return t instanceof Backbone.Model?(e=t.get("id"),t=t.attributes):e=t.id,t=(e=wp.media.model.Attachment.get(e)).parse(t,i),_.isEqual(e.attributes,t)||e.set(t),e})},_requery:function(){var t;this.props.get("query")&&(t=this.props.toJSON(),this.mirror(wp.media.model.Query.get(t)))},saveMenuOrder:function(){if("menuOrder"===this.props.get("orderby")){var t=this.chain().filter(function(t){return!_.isUndefined(t.id)}).map(function(t,e){return t.set("menuOrder",e+=1),[t.id,e]}).object().value();if(!_.isEmpty(t))return wp.media.post("save-attachment-order",{nonce:wp.media.model.settings.post.nonce,post_id:wp.media.model.settings.post.id,attachments:t})}}},{comparator:function(t,e,i){var s=this.props.get("orderby"),r=this.props.get("order")||"DESC",n=t.cid,a=e.cid;return t=t.get(s),e=e.get(s),"date"!==s&&"modified"!==s||(t=t||new Date,e=e||new Date),i&&i.ties&&(n=a=null),"DESC"===r?wp.media.compare(t,e,n,a):wp.media.compare(e,t,a,n)},filters:{search:function(e){return!this.props.get("search")||_.any(["title","filename","description","caption","name"],function(t){t=e.get(t);return t&&-1!==t.search(this.props.get("search"))},this)},type:function(t){var e,i=this.props.get("type"),t=t.toJSON();return!(i&&(!_.isArray(i)||i.length))||(e=t.mime||t.file&&t.file.type||"",_.isArray(i)?_.find(i,function(t){return-1!==e.indexOf(t)}):-1!==e.indexOf(i))},uploadedTo:function(t){var e=this.props.get("uploadedTo");return!!_.isUndefined(e)||e===t.get("uploadedTo")},status:function(t){var e=this.props.get("status");return!!_.isUndefined(e)||e===t.get("status")}}});t.exports=n},9104:t=>{var e=Backbone.Model.extend({initialize:function(t){var e=wp.media.model.Attachment;this.attachment=!1,t.attachment_id&&(this.attachment=e.get(t.attachment_id),this.attachment.get("url")?(this.dfd=jQuery.Deferred(),this.dfd.resolve()):this.dfd=this.attachment.fetch(),this.bindAttachmentListeners()),this.on("change:link",this.updateLinkUrl,this),this.on("change:size",this.updateSize,this),this.setLinkTypeFromUrl(),this.setAspectRatio(),this.set("originalUrl",t.url)},bindAttachmentListeners:function(){this.listenTo(this.attachment,"sync",this.setLinkTypeFromUrl),this.listenTo(this.attachment,"sync",this.setAspectRatio),this.listenTo(this.attachment,"change",this.updateSize)},changeAttachment:function(t,e){this.stopListening(this.attachment),this.attachment=t,this.bindAttachmentListeners(),this.set("attachment_id",this.attachment.get("id")),this.set("caption",this.attachment.get("caption")),this.set("alt",this.attachment.get("alt")),this.set("size",e.get("size")),this.set("align",e.get("align")),this.set("link",e.get("link")),this.updateLinkUrl(),this.updateSize()},setLinkTypeFromUrl:function(){var t,e=this.get("linkUrl");e?(t="custom",this.attachment?this.attachment.get("url")===e?t="file":this.attachment.get("link")===e&&(t="post"):this.get("url")===e&&(t="file"),this.set("link",t)):this.set("link","none")},updateLinkUrl:function(){var t;switch(this.get("link")){case"file":t=(this.attachment||this).get("url"),this.set("linkUrl",t);break;case"post":this.set("linkUrl",this.attachment.get("link"));break;case"none":this.set("linkUrl","")}},updateSize:function(){var t;this.attachment&&("custom"===this.get("size")?(this.set("width",this.get("customWidth")),this.set("height",this.get("customHeight")),this.set("url",this.get("originalUrl"))):(t=this.attachment.get("sizes")[this.get("size")])&&(this.set("url",t.url),this.set("width",t.width),this.set("height",t.height)))},setAspectRatio:function(){var t;this.attachment&&this.attachment.get("sizes")&&(t=this.attachment.get("sizes").full)?this.set("aspectRatio",t.width/t.height):this.set("aspectRatio",this.get("customWidth")/this.get("customHeight"))}});t.exports=e}},n={};function a(t){var e=n[t];return void 0!==e||(e=n[t]={exports:{}},r[t](e,e.exports,a)),e.exports}window.wp=window.wp||{},s=wp.media=function(t){var e,i=s.view.MediaFrame;if(i)return"select"===(t=_.defaults(t||{},{frame:"select"})).frame&&i.Select?e=new i.Select(t):"post"===t.frame&&i.Post?e=new i.Post(t):"manage"===t.frame&&i.Manage?e=new i.Manage(t):"image"===t.frame&&i.ImageDetails?e=new i.ImageDetails(t):"audio"===t.frame&&i.AudioDetails?e=new i.AudioDetails(t):"video"===t.frame&&i.VideoDetails?e=new i.VideoDetails(t):"edit-attachments"===t.frame&&i.EditAttachments&&(e=new i.EditAttachments(t)),delete t.frame,s.frame=e},_.extend(s,{model:{},view:{},controller:{},frames:{}}),t=s.model.l10n=window._wpMediaModelsL10n||{},s.model.settings=t.settings||{},delete t.settings,e=s.model.Attachment=a(3343),i=s.model.Attachments=a(8266),s.model.Query=a(1288),s.model.PostImage=a(9104),s.model.Selection=a(4134),s.compare=function(t,e,i,s){return _.isEqual(t,e)?i===s?0:s>10),56320+(1023&d))},toCodePoint:o},onerror:function(){this.parentNode&&this.parentNode.replaceChild(x(this.alt,!1),this)},parse:function(d,u){u&&"function"!=typeof u||(u={callback:u});return h.doNotParse=u.doNotParse,("string"==typeof d?function(d,a){return n(d,function(d){var u,f,c=d,e=N(d),b=a.callback(e,a);if(e&&b){for(f in c="")}return c})}:function(d,u){var f,c,e,b,a,t,r,n,o,s,i,l=function d(u,f){var c,e,b=u.childNodes,a=b.length;for(;a--;)c=b[a],3===(e=c.nodeType)?f.push(c):1!==e||"ownerSVGElement"in c||m.test(c.nodeName.toLowerCase())||h.doNotParse&&h.doNotParse(c)||d(c,f);return f}(d,[]),p=l.length;for(;p--;){for(e=!1,b=document.createDocumentFragment(),a=l[p],t=a.nodeValue,r=0;o=g.exec(t);){if((i=o.index)!==r&&b.appendChild(x(t.slice(r,i),!0)),s=N(o=o[0]),r=i+o.length,i=u.callback(s,u),s&&i){for(c in(n=new Image).onerror=u.onerror,n.setAttribute("draggable","false"),f=u.attributes(o,s))f.hasOwnProperty(c)&&0!==c.indexOf("on")&&!n.hasAttribute(c)&&n.setAttribute(c,f[c]);n.className=u.className,n.alt=o,n.src=i,e=!0,b.appendChild(n)}n||b.appendChild(x(o,!1)),n=null}e&&(r":">","'":"'",'"':"""},g=/(?:\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83d\udc68\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc68\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc68\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc68\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffc-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffd-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb\udffc\udffe\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffd\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc68\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83d\udc69\ud83c[\udffb-\udfff]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc68\ud83c[\udffb-\udffe]|\ud83d\udc69\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83d\udc69\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udffb\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffc-\udfff]|\ud83e\uddd1\ud83c\udffb\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffd-\udfff]|\ud83e\uddd1\ud83c\udffc\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\uddd1\ud83c\udffd\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffd\udfff]|\ud83e\uddd1\ud83c\udffe\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83e\uddd1\ud83c\udfff\u200d\u2764\ufe0f\u200d\ud83e\uddd1\ud83c[\udffb-\udffe]|\ud83e\uddd1\ud83c\udfff\u200d\ud83e\udd1d\u200d\ud83e\uddd1\ud83c[\udffb-\udfff]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d\udc8b\u200d\ud83d[\udc68\udc69]|\ud83e\udef1\ud83c\udffb\u200d\ud83e\udef2\ud83c[\udffc-\udfff]|\ud83e\udef1\ud83c\udffc\u200d\ud83e\udef2\ud83c[\udffb\udffd-\udfff]|\ud83e\udef1\ud83c\udffd\u200d\ud83e\udef2\ud83c[\udffb\udffc\udffe\udfff]|\ud83e\udef1\ud83c\udffe\u200d\ud83e\udef2\ud83c[\udffb-\udffd\udfff]|\ud83e\udef1\ud83c\udfff\u200d\ud83e\udef2\ud83c[\udffb-\udffe]|\ud83d\udc68\u200d\u2764\ufe0f\u200d\ud83d\udc68|\ud83d\udc69\u200d\u2764\ufe0f\u200d\ud83d[\udc68\udc69]|\ud83e\uddd1\u200d\ud83e\udd1d\u200d\ud83e\uddd1|\ud83d\udc6b\ud83c[\udffb-\udfff]|\ud83d\udc6c\ud83c[\udffb-\udfff]|\ud83d\udc6d\ud83c[\udffb-\udfff]|\ud83d\udc8f\ud83c[\udffb-\udfff]|\ud83d\udc91\ud83c[\udffb-\udfff]|\ud83e\udd1d\ud83c[\udffb-\udfff]|\ud83d[\udc6b-\udc6d\udc8f\udc91]|\ud83e\udd1d)|(?:\ud83d[\udc68\udc69]|\ud83e\uddd1)(?:\ud83c[\udffb-\udfff])?\u200d(?:\u2695\ufe0f|\u2696\ufe0f|\u2708\ufe0f|\ud83c[\udf3e\udf73\udf7c\udf84\udf93\udfa4\udfa8\udfeb\udfed]|\ud83d[\udcbb\udcbc\udd27\udd2c\ude80\ude92]|\ud83e[\uddaf-\uddb3\uddbc\uddbd])(?:\u200d\u27a1\ufe0f)?|(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75]|\u26f9)((?:\ud83c[\udffb-\udfff]|\ufe0f)\u200d[\u2640\u2642]\ufe0f(?:\u200d\u27a1\ufe0f)?)|(?:\ud83c[\udfc3\udfc4\udfca]|\ud83d[\udc6e\udc70\udc71\udc73\udc77\udc81\udc82\udc86\udc87\ude45-\ude47\ude4b\ude4d\ude4e\udea3\udeb4-\udeb6]|\ud83e[\udd26\udd35\udd37-\udd39\udd3d\udd3e\uddb8\uddb9\uddcd-\uddcf\uddd4\uddd6-\udddd])(?:\ud83c[\udffb-\udfff])?\u200d[\u2640\u2642]\ufe0f(?:\u200d\u27a1\ufe0f)?|(?:\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83e\uddd1\u200d\ud83e\uddd1\u200d\ud83e\uddd2\u200d\ud83e\uddd2|\ud83d\udc68\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc68\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc68\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc66\u200d\ud83d\udc66|\ud83d\udc69\u200d\ud83d\udc67\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83e\uddd1\u200d\ud83e\uddd1\u200d\ud83e\uddd2|\ud83e\uddd1\u200d\ud83e\uddd2\u200d\ud83e\uddd2|\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f|\ud83c\udff3\ufe0f\u200d\ud83c\udf08|\ud83d\ude36\u200d\ud83c\udf2b\ufe0f|\u26d3\ufe0f\u200d\ud83d\udca5|\u2764\ufe0f\u200d\ud83d\udd25|\u2764\ufe0f\u200d\ud83e\ude79|\ud83c\udf44\u200d\ud83d\udfeb|\ud83c\udf4b\u200d\ud83d\udfe9|\ud83c\udff4\u200d\u2620\ufe0f|\ud83d\udc15\u200d\ud83e\uddba|\ud83d\udc26\u200d\ud83d\udd25|\ud83d\udc3b\u200d\u2744\ufe0f|\ud83d\udc41\u200d\ud83d\udde8|\ud83d\udc68\u200d\ud83d[\udc66\udc67]|\ud83d\udc69\u200d\ud83d[\udc66\udc67]|\ud83d\udc6f\u200d\u2640\ufe0f|\ud83d\udc6f\u200d\u2642\ufe0f|\ud83d\ude2e\u200d\ud83d\udca8|\ud83d\ude35\u200d\ud83d\udcab|\ud83d\ude42\u200d\u2194\ufe0f|\ud83d\ude42\u200d\u2195\ufe0f|\ud83e\udd3c\u200d\u2640\ufe0f|\ud83e\udd3c\u200d\u2642\ufe0f|\ud83e\uddd1\u200d\ud83e\uddd2|\ud83e\uddde\u200d\u2640\ufe0f|\ud83e\uddde\u200d\u2642\ufe0f|\ud83e\udddf\u200d\u2640\ufe0f|\ud83e\udddf\u200d\u2642\ufe0f|\ud83d\udc08\u200d\u2b1b|\ud83d\udc26\u200d\u2b1b)|[#*0-9]\ufe0f?\u20e3|(?:[\xa9\xae\u2122\u265f]\ufe0f)|(?:\ud83c[\udc04\udd70\udd71\udd7e\udd7f\ude02\ude1a\ude2f\ude37\udf21\udf24-\udf2c\udf36\udf7d\udf96\udf97\udf99-\udf9b\udf9e\udf9f\udfcd\udfce\udfd4-\udfdf\udff3\udff5\udff7]|\ud83d[\udc3f\udc41\udcfd\udd49\udd4a\udd6f\udd70\udd73\udd76-\udd79\udd87\udd8a-\udd8d\udda5\udda8\uddb1\uddb2\uddbc\uddc2-\uddc4\uddd1-\uddd3\udddc-\uddde\udde1\udde3\udde8\uddef\uddf3\uddfa\udecb\udecd-\udecf\udee0-\udee5\udee9\udef0\udef3]|[\u203c\u2049\u2139\u2194-\u2199\u21a9\u21aa\u231a\u231b\u2328\u23cf\u23ed-\u23ef\u23f1\u23f2\u23f8-\u23fa\u24c2\u25aa\u25ab\u25b6\u25c0\u25fb-\u25fe\u2600-\u2604\u260e\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262a\u262e\u262f\u2638-\u263a\u2640\u2642\u2648-\u2653\u2660\u2663\u2665\u2666\u2668\u267b\u267f\u2692-\u2697\u2699\u269b\u269c\u26a0\u26a1\u26a7\u26aa\u26ab\u26b0\u26b1\u26bd\u26be\u26c4\u26c5\u26c8\u26cf\u26d1\u26d3\u26d4\u26e9\u26ea\u26f0-\u26f5\u26f8\u26fa\u26fd\u2702\u2708\u2709\u270f\u2712\u2714\u2716\u271d\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u2764\u27a1\u2934\u2935\u2b05-\u2b07\u2b1b\u2b1c\u2b50\u2b55\u3030\u303d\u3297\u3299])(?:\ufe0f|(?!\ufe0e))|(?:(?:\ud83c[\udfcb\udfcc]|\ud83d[\udd74\udd75\udd90]|\ud83e\udef0|[\u261d\u26f7\u26f9\u270c\u270d])(?:\ufe0f|(?!\ufe0e))|(?:\ud83c\udfc3|\ud83d\udeb6|\ud83e\uddce)(?:\ud83c[\udffb-\udfff])?(?:\u200d\u27a1\ufe0f)?|(?:\ud83c[\udf85\udfc2\udfc4\udfc7\udfca]|\ud83d[\udc42\udc43\udc46-\udc50\udc66-\udc69\udc6e\udc70-\udc78\udc7c\udc81-\udc83\udc85-\udc87\udcaa\udd7a\udd95\udd96\ude45-\ude47\ude4b-\ude4f\udea3\udeb4\udeb5\udec0\udecc]|\ud83e[\udd0c\udd0f\udd18-\udd1c\udd1e\udd1f\udd26\udd30-\udd39\udd3d\udd3e\udd77\uddb5\uddb6\uddb8\uddb9\uddbb\uddcd\uddcf\uddd1-\udddd\udec3-\udec5\udef1-\udef8]|[\u270a\u270b]))(?:\ud83c[\udffb-\udfff])?|(?:\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc73\udb40\udc63\udb40\udc74\udb40\udc7f|\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f|\ud83c\udde6\ud83c[\udde8-\uddec\uddee\uddf1\uddf2\uddf4\uddf6-\uddfa\uddfc\uddfd\uddff]|\ud83c\udde7\ud83c[\udde6\udde7\udde9-\uddef\uddf1-\uddf4\uddf6-\uddf9\uddfb\uddfc\uddfe\uddff]|\ud83c\udde8\ud83c[\udde6\udde8\udde9\uddeb-\uddee\uddf0-\uddf7\uddfa-\uddff]|\ud83c\udde9\ud83c[\uddea\uddec\uddef\uddf0\uddf2\uddf4\uddff]|\ud83c\uddea\ud83c[\udde6\udde8\uddea\uddec\udded\uddf7-\uddfa]|\ud83c\uddeb\ud83c[\uddee-\uddf0\uddf2\uddf4\uddf7]|\ud83c\uddec\ud83c[\udde6\udde7\udde9-\uddee\uddf1-\uddf3\uddf5-\uddfa\uddfc\uddfe]|\ud83c\udded\ud83c[\uddf0\uddf2\uddf3\uddf7\uddf9\uddfa]|\ud83c\uddee\ud83c[\udde8-\uddea\uddf1-\uddf4\uddf6-\uddf9]|\ud83c\uddef\ud83c[\uddea\uddf2\uddf4\uddf5]|\ud83c\uddf0\ud83c[\uddea\uddec-\uddee\uddf2\uddf3\uddf5\uddf7\uddfc\uddfe\uddff]|\ud83c\uddf1\ud83c[\udde6-\udde8\uddee\uddf0\uddf7-\uddfb\uddfe]|\ud83c\uddf2\ud83c[\udde6\udde8-\udded\uddf0-\uddff]|\ud83c\uddf3\ud83c[\udde6\udde8\uddea-\uddec\uddee\uddf1\uddf4\uddf5\uddf7\uddfa\uddff]|\ud83c\uddf4\ud83c\uddf2|\ud83c\uddf5\ud83c[\udde6\uddea-\udded\uddf0-\uddf3\uddf7-\uddf9\uddfc\uddfe]|\ud83c\uddf6\ud83c\udde6|\ud83c\uddf7\ud83c[\uddea\uddf4\uddf8\uddfa\uddfc]|\ud83c\uddf8\ud83c[\udde6-\uddea\uddec-\uddf4\uddf7-\uddf9\uddfb\uddfd-\uddff]|\ud83c\uddf9\ud83c[\udde6\udde8\udde9\uddeb-\udded\uddef-\uddf4\uddf7\uddf9\uddfb\uddfc\uddff]|\ud83c\uddfa\ud83c[\udde6\uddec\uddf2\uddf3\uddf8\uddfe\uddff]|\ud83c\uddfb\ud83c[\udde6\udde8\uddea\uddec\uddee\uddf3\uddfa]|\ud83c\uddfc\ud83c[\uddeb\uddf8]|\ud83c\uddfd\ud83c\uddf0|\ud83c\uddfe\ud83c[\uddea\uddf9]|\ud83c\uddff\ud83c[\udde6\uddf2\uddfc]|\ud83c[\udccf\udd8e\udd91-\udd9a\udde6-\uddff\ude01\ude32-\ude36\ude38-\ude3a\ude50\ude51\udf00-\udf20\udf2d-\udf35\udf37-\udf7c\udf7e-\udf84\udf86-\udf93\udfa0-\udfc1\udfc5\udfc6\udfc8\udfc9\udfcf-\udfd3\udfe0-\udff0\udff4\udff8-\udfff]|\ud83d[\udc00-\udc3e\udc40\udc44\udc45\udc51-\udc65\udc6a\udc6f\udc79-\udc7b\udc7d-\udc80\udc84\udc88-\udc8e\udc90\udc92-\udca9\udcab-\udcfc\udcff-\udd3d\udd4b-\udd4e\udd50-\udd67\udda4\uddfb-\ude44\ude48-\ude4a\ude80-\udea2\udea4-\udeb3\udeb7-\udebf\udec1-\udec5\uded0-\uded2\uded5-\uded7\udedc-\udedf\udeeb\udeec\udef4-\udefc\udfe0-\udfeb\udff0]|\ud83e[\udd0d\udd0e\udd10-\udd17\udd20-\udd25\udd27-\udd2f\udd3a\udd3c\udd3f-\udd45\udd47-\udd76\udd78-\uddb4\uddb7\uddba\uddbc-\uddcc\uddd0\uddde-\uddff\ude70-\ude7c\ude80-\ude89\ude8f-\udec2\udec6\udece-\udedc\udedf-\udee9]|[\u23e9-\u23ec\u23f0\u23f3\u267e\u26ce\u2705\u2728\u274c\u274e\u2753-\u2755\u2795-\u2797\u27b0\u27bf\ue50a])|\ufe0f/g,f=/\uFE0F/g,c=String.fromCharCode(8205),t=/[&<>'"]/g,m=/^(?:iframe|noframes|noscript|script|select|style|textarea)$/,e=String.fromCharCode;return h;function x(d,u){return document.createTextNode(u?d.replace(f,""):d)}function b(d,u){return"".concat(u.base,u.size,"/",d,u.ext)}function N(d){return o(d.indexOf(c)<0?d.replace(f,""):d)}function r(d){return u[d]}function a(){return null}function n(d,u){return String(d).replace(g,u)}function o(d,u){for(var f=[],c=0,e=0,b=0;b' + text + '

        ', processed: true } ); // Update the remaining content. remaining = remaining.slice( result.index + result.content.length ); } // There are no additional matches. // If any content remains, add it as an unprocessed piece. if ( remaining ) { pieces.push( { content: remaining } ); } } ); } ); content = _.pluck( pieces, 'content' ).join( '' ); return content.replace( /

        \s*

        ' ); }, /** * Create a view instance. * * @param {string} type The view type. * @param {string} text The textual representation of the view. * @param {Object} options Options. * @param {boolean} force Recreate the instance. Optional. * * @return {wp.mce.View} The view instance. */ createInstance: function( type, text, options, force ) { var View = this.get( type ), encodedText, instance; if ( text.indexOf( '[' ) !== -1 && text.indexOf( ']' ) !== -1 ) { // Looks like a shortcode? Remove any line breaks from inside of shortcodes // or autop will replace them with

        and
        later and the string won't match. text = text.replace( /\[[^\]]+\]/g, function( match ) { return match.replace( /[\r\n]/g, '' ); }); } if ( ! force ) { instance = this.getInstance( text ); if ( instance ) { return instance; } } encodedText = encodeURIComponent( text ); options = _.extend( options || {}, { text: text, encodedText: encodedText } ); return instances[ encodedText ] = new View( options ); }, /** * Get a view instance. * * @param {(string|HTMLElement)} object The textual representation of the view or the view node. * * @return {wp.mce.View} The view instance or undefined. */ getInstance: function( object ) { if ( typeof object === 'string' ) { return instances[ encodeURIComponent( object ) ]; } return instances[ $( object ).attr( 'data-wpview-text' ) ]; }, /** * Given a view node, get the view's text. * * @param {HTMLElement} node The view node. * * @return {string} The textual representation of the view. */ getText: function( node ) { return decodeURIComponent( $( node ).attr( 'data-wpview-text' ) || '' ); }, /** * Renders all view nodes that are not yet rendered. * * @param {boolean} force Rerender all view nodes. */ render: function( force ) { _.each( instances, function( instance ) { instance.render( null, force ); } ); }, /** * Update the text of a given view node. * * @param {string} text The new text. * @param {tinymce.Editor} editor The TinyMCE editor instance the view node is in. * @param {HTMLElement} node The view node to update. * @param {boolean} force Recreate the instance. Optional. */ update: function( text, editor, node, force ) { var instance = this.getInstance( node ); if ( instance ) { instance.update( text, editor, node, force ); } }, /** * Renders any editing interface based on the view type. * * @param {tinymce.Editor} editor The TinyMCE editor instance the view node is in. * @param {HTMLElement} node The view node to edit. */ edit: function( editor, node ) { var instance = this.getInstance( node ); if ( instance && instance.edit ) { instance.edit( instance.text, function( text, force ) { instance.update( text, editor, node, force ); } ); } }, /** * Remove a given view node from the DOM. * * @param {tinymce.Editor} editor The TinyMCE editor instance the view node is in. * @param {HTMLElement} node The view node to remove. */ remove: function( editor, node ) { var instance = this.getInstance( node ); if ( instance ) { instance.remove( editor, node ); } } }; /** * A Backbone-like View constructor intended for use when rendering a TinyMCE View. * The main difference is that the TinyMCE View is not tied to a particular DOM node. * * @param {Object} options Options. */ wp.mce.View = function( options ) { _.extend( this, options ); this.initialize(); }; wp.mce.View.extend = Backbone.View.extend; _.extend( wp.mce.View.prototype, /** @lends wp.mce.View.prototype */{ /** * The content. * * @type {*} */ content: null, /** * Whether or not to display a loader. * * @type {Boolean} */ loader: true, /** * Runs after the view instance is created. */ initialize: function() {}, /** * Returns the content to render in the view node. * * @return {*} */ getContent: function() { return this.content; }, /** * Renders all view nodes tied to this view instance that are not yet rendered. * * @param {string} content The content to render. Optional. * @param {boolean} force Rerender all view nodes tied to this view instance. Optional. */ render: function( content, force ) { if ( content != null ) { this.content = content; } content = this.getContent(); // If there's nothing to render an no loader needs to be shown, stop. if ( ! this.loader && ! content ) { return; } // We're about to rerender all views of this instance, so unbind rendered views. force && this.unbind(); // Replace any left over markers. this.replaceMarkers(); if ( content ) { this.setContent( content, function( editor, node ) { $( node ).data( 'rendered', true ); this.bindNode.call( this, editor, node ); }, force ? null : false ); } else { this.setLoader(); } }, /** * Binds a given node after its content is added to the DOM. */ bindNode: function() {}, /** * Unbinds a given node before its content is removed from the DOM. */ unbindNode: function() {}, /** * Unbinds all view nodes tied to this view instance. * Runs before their content is removed from the DOM. */ unbind: function() { this.getNodes( function( editor, node ) { this.unbindNode.call( this, editor, node ); }, true ); }, /** * Gets all the TinyMCE editor instances that support views. * * @param {Function} callback A callback. */ getEditors: function( callback ) { _.each( tinymce.editors, function( editor ) { if ( editor.plugins.wpview ) { callback.call( this, editor ); } }, this ); }, /** * Gets all view nodes tied to this view instance. * * @param {Function} callback A callback. * @param {boolean} rendered Get (un)rendered view nodes. Optional. */ getNodes: function( callback, rendered ) { this.getEditors( function( editor ) { var self = this; $( editor.getBody() ) .find( '[data-wpview-text="' + self.encodedText + '"]' ) .filter( function() { var data; if ( rendered == null ) { return true; } data = $( this ).data( 'rendered' ) === true; return rendered ? data : ! data; } ) .each( function() { callback.call( self, editor, this, this /* back compat */ ); } ); } ); }, /** * Gets all marker nodes tied to this view instance. * * @param {Function} callback A callback. */ getMarkers: function( callback ) { this.getEditors( function( editor ) { var self = this; $( editor.getBody() ) .find( '[data-wpview-marker="' + this.encodedText + '"]' ) .each( function() { callback.call( self, editor, this ); } ); } ); }, /** * Replaces all marker nodes tied to this view instance. */ replaceMarkers: function() { this.getMarkers( function( editor, node ) { var selected = node === editor.selection.getNode(); var $viewNode; if ( ! this.loader && $( node ).text() !== tinymce.DOM.decode( this.text ) ) { editor.dom.setAttrib( node, 'data-wpview-marker', null ); return; } $viewNode = editor.$( '

        ' ); editor.undoManager.ignore( function() { editor.$( node ).replaceWith( $viewNode ); } ); if ( selected ) { setTimeout( function() { editor.undoManager.ignore( function() { editor.selection.select( $viewNode[0] ); editor.selection.collapse(); } ); } ); } } ); }, /** * Removes all marker nodes tied to this view instance. */ removeMarkers: function() { this.getMarkers( function( editor, node ) { editor.dom.setAttrib( node, 'data-wpview-marker', null ); } ); }, /** * Sets the content for all view nodes tied to this view instance. * * @param {*} content The content to set. * @param {Function} callback A callback. Optional. * @param {boolean} rendered Only set for (un)rendered nodes. Optional. */ setContent: function( content, callback, rendered ) { if ( _.isObject( content ) && ( content.sandbox || content.head || content.body.indexOf( '/g, '>' ); } ); } this.getNodes( function( editor, node ) { var dom = editor.dom, styles = '', bodyClasses = editor.getBody().className || '', editorHead = editor.getDoc().getElementsByTagName( 'head' )[0], iframe, iframeWin, iframeDoc, MutationObserver, observer, i, block; tinymce.each( dom.$( 'link[rel="stylesheet"]', editorHead ), function( link ) { if ( link.href && link.href.indexOf( 'skins/lightgray/content.min.css' ) === -1 && link.href.indexOf( 'skins/wordpress/wp-content.css' ) === -1 ) { styles += dom.getOuterHTML( link ); } } ); if ( self.iframeHeight ) { dom.add( node, 'span', { 'data-mce-bogus': 1, style: { display: 'block', width: '100%', height: self.iframeHeight } }, '\u200B' ); } editor.undoManager.transact( function() { node.innerHTML = ''; iframe = dom.add( node, 'iframe', { /* jshint scripturl: true */ src: tinymce.Env.ie ? 'javascript:""' : '', frameBorder: '0', allowTransparency: 'true', scrolling: 'no', 'class': 'wpview-sandbox', style: { width: '100%', display: 'block' }, height: self.iframeHeight } ); dom.add( node, 'span', { 'class': 'mce-shim' } ); dom.add( node, 'span', { 'class': 'wpview-end' } ); } ); /* * Bail if the iframe node is not attached to the DOM. * Happens when the view is dragged in the editor. * There is a browser restriction when iframes are moved in the DOM. They get emptied. * The iframe will be rerendered after dropping the view node at the new location. */ if ( ! iframe.contentWindow ) { return; } iframeWin = iframe.contentWindow; iframeDoc = iframeWin.document; iframeDoc.open(); iframeDoc.write( '' + '' + '' + '' + head + styles + '' + '' + '' + body + '' + '' ); iframeDoc.close(); function resize() { var $iframe; if ( block ) { return; } // Make sure the iframe still exists. if ( iframe.contentWindow ) { $iframe = $( iframe ); self.iframeHeight = $( iframeDoc.body ).height(); if ( $iframe.height() !== self.iframeHeight ) { $iframe.height( self.iframeHeight ); editor.nodeChanged(); } } } if ( self.iframeHeight ) { block = true; setTimeout( function() { block = false; resize(); }, 3000 ); } function addObserver() { observer = new MutationObserver( _.debounce( resize, 100 ) ); observer.observe( iframeDoc.body, { attributes: true, childList: true, subtree: true } ); } $( iframeWin ).on( 'load', resize ); MutationObserver = iframeWin.MutationObserver || iframeWin.WebKitMutationObserver || iframeWin.MozMutationObserver; if ( MutationObserver ) { if ( ! iframeDoc.body ) { iframeDoc.addEventListener( 'DOMContentLoaded', addObserver, false ); } else { addObserver(); } } else { for ( i = 1; i < 6; i++ ) { setTimeout( resize, i * 700 ); } } callback && callback.call( self, editor, node ); }, rendered ); }, /** * Sets a loader for all view nodes tied to this view instance. */ setLoader: function( dashicon ) { this.setContent( '
        ' + '
        ' + '
        ' + '
        ' ); }, /** * Sets an error for all view nodes tied to this view instance. * * @param {string} message The error message to set. * @param {string} dashicon A dashicon ID. Optional. {@link https://developer.wordpress.org/resource/dashicons/} */ setError: function( message, dashicon ) { this.setContent( '
        ' + '
        ' + '

        ' + message + '

        ' + '
        ' ); }, /** * Tries to find a text match in a given string. * * @param {string} content The string to scan. * * @return {Object} */ match: function( content ) { var match = shortcode.next( this.type, content ); if ( match ) { return { index: match.index, content: match.content, options: { shortcode: match.shortcode } }; } }, /** * Update the text of a given view node. * * @param {string} text The new text. * @param {tinymce.Editor} editor The TinyMCE editor instance the view node is in. * @param {HTMLElement} node The view node to update. * @param {boolean} force Recreate the instance. Optional. */ update: function( text, editor, node, force ) { _.find( views, function( view, type ) { var match = view.prototype.match( text ); if ( match ) { $( node ).data( 'rendered', false ); editor.dom.setAttrib( node, 'data-wpview-text', encodeURIComponent( text ) ); wp.mce.views.createInstance( type, text, match.options, force ).render(); editor.selection.select( node ); editor.nodeChanged(); editor.focus(); return true; } } ); }, /** * Remove a given view node from the DOM. * * @param {tinymce.Editor} editor The TinyMCE editor instance the view node is in. * @param {HTMLElement} node The view node to remove. */ remove: function( editor, node ) { this.unbindNode.call( this, editor, node ); editor.dom.remove( node ); editor.focus(); } } ); } )( window, window.wp, window.wp.shortcode, window.jQuery ); /* * The WordPress core TinyMCE views. * Views for the gallery, audio, video, playlist and embed shortcodes, * and a view for embeddable URLs. */ ( function( window, views, media, $ ) { var base, gallery, av, embed, schema, parser, serializer; function verifyHTML( string ) { var settings = {}; if ( ! window.tinymce ) { return string.replace( /<[^>]+>/g, '' ); } if ( ! string || ( string.indexOf( '<' ) === -1 && string.indexOf( '>' ) === -1 ) ) { return string; } schema = schema || new window.tinymce.html.Schema( settings ); parser = parser || new window.tinymce.html.DomParser( settings, schema ); serializer = serializer || new window.tinymce.html.Serializer( settings, schema ); return serializer.serialize( parser.parse( string, { forced_root_block: false } ) ); } base = { state: [], edit: function( text, update ) { var type = this.type, frame = media[ type ].edit( text ); this.pausePlayers && this.pausePlayers(); _.each( this.state, function( state ) { frame.state( state ).on( 'update', function( selection ) { update( media[ type ].shortcode( selection ).string(), type === 'gallery' ); } ); } ); frame.on( 'close', function() { frame.detach(); } ); frame.open(); } }; gallery = _.extend( {}, base, { state: [ 'gallery-edit' ], template: media.template( 'editor-gallery' ), initialize: function() { var attachments = media.gallery.attachments( this.shortcode, media.view.settings.post.id ), attrs = this.shortcode.attrs.named, self = this; attachments.more() .done( function() { attachments = attachments.toJSON(); _.each( attachments, function( attachment ) { if ( attachment.sizes ) { if ( attrs.size && attachment.sizes[ attrs.size ] ) { attachment.thumbnail = attachment.sizes[ attrs.size ]; } else if ( attachment.sizes.thumbnail ) { attachment.thumbnail = attachment.sizes.thumbnail; } else if ( attachment.sizes.full ) { attachment.thumbnail = attachment.sizes.full; } } } ); self.render( self.template( { verifyHTML: verifyHTML, attachments: attachments, columns: attrs.columns ? parseInt( attrs.columns, 10 ) : media.galleryDefaults.columns } ) ); } ) .fail( function( jqXHR, textStatus ) { self.setError( textStatus ); } ); } } ); av = _.extend( {}, base, { action: 'parse-media-shortcode', initialize: function() { var self = this, maxwidth = null; if ( this.url ) { this.loader = false; this.shortcode = media.embed.shortcode( { url: this.text } ); } // Obtain the target width for the embed. if ( self.editor ) { maxwidth = self.editor.getBody().clientWidth; } wp.ajax.post( this.action, { post_ID: media.view.settings.post.id, type: this.shortcode.tag, shortcode: this.shortcode.string(), maxwidth: maxwidth } ) .done( function( response ) { self.render( response ); } ) .fail( function( response ) { if ( self.url ) { self.ignore = true; self.removeMarkers(); } else { self.setError( response.message || response.statusText, 'admin-media' ); } } ); this.getEditors( function( editor ) { editor.on( 'wpview-selected', function() { self.pausePlayers(); } ); } ); }, pausePlayers: function() { this.getNodes( function( editor, node, content ) { var win = $( 'iframe.wpview-sandbox', content ).get( 0 ); if ( win && ( win = win.contentWindow ) && win.mejs ) { _.each( win.mejs.players, function( player ) { try { player.pause(); } catch ( e ) {} } ); } } ); } } ); embed = _.extend( {}, av, { action: 'parse-embed', edit: function( text, update ) { var frame = media.embed.edit( text, this.url ), self = this; this.pausePlayers(); frame.state( 'embed' ).props.on( 'change:url', function( model, url ) { if ( url && model.get( 'url' ) ) { frame.state( 'embed' ).metadata = model.toJSON(); } } ); frame.state( 'embed' ).on( 'select', function() { var data = frame.state( 'embed' ).metadata; if ( self.url ) { update( data.url ); } else { update( media.embed.shortcode( data ).string() ); } } ); frame.on( 'close', function() { frame.detach(); } ); frame.open(); } } ); views.register( 'gallery', _.extend( {}, gallery ) ); views.register( 'audio', _.extend( {}, av, { state: [ 'audio-details' ] } ) ); views.register( 'video', _.extend( {}, av, { state: [ 'video-details' ] } ) ); views.register( 'playlist', _.extend( {}, av, { state: [ 'playlist-edit', 'video-playlist-edit' ] } ) ); views.register( 'embed', _.extend( {}, embed ) ); views.register( 'embedURL', _.extend( {}, embed, { match: function( content ) { // There may be a "bookmark" node next to the URL... var re = /(^|

        (?:]+>\s*<\/span>)?)(https?:\/\/[^\s"]+?)((?:]+>\s*<\/span>)?<\/p>\s*|$)/gi; var match = re.exec( content ); if ( match ) { return { index: match.index + match[1].length, content: match[2], options: { url: true } }; } } } ) ); } )( window, window.wp.mce.views, window.wp.media, window.jQuery ); customize-preview.min.js000064400000024720152335011310011364 0ustar00/*! This file is auto-generated */ !function(r){var s,i,a,o,c,n,u,l,d,h=wp.customize,p={};(i=history).replaceState&&(c=function(e){var t,n=document.createElement("a");return n.href=e,e=h.utils.parseQueryString(location.search.substr(1)),(t=h.utils.parseQueryString(n.search.substr(1))).customize_changeset_uuid=e.customize_changeset_uuid,e.customize_autosaved&&(t.customize_autosaved="on"),e.customize_theme&&(t.customize_theme=e.customize_theme),e.customize_messenger_channel&&(t.customize_messenger_channel=e.customize_messenger_channel),n.search=r.param(t),n.href},i.replaceState=(a=i.replaceState,function(e,t,n){return p=e,a.call(i,e,t,"string"==typeof n&&0",{type:"hidden",name:t,value:e}))}),h.settings.channel&&(i.target="_self")):h.settings.channel&&r(i).addClass("customize-unpreviewable")},h.keepAliveCurrentUrl=(n=location.pathname,u=location.search.substr(1),l=null,d=["customize_theme","customize_changeset_uuid","customize_messenger_channel","customize_autosaved"],function(){var e,t;u===location.search.substr(1)&&n===location.pathname?h.preview.send("keep-alive"):(e=document.createElement("a"),null===l&&(e.search=u,l=h.utils.parseQueryString(u),_.each(d,function(e){delete l[e]})),e.href=location.href,t=h.utils.parseQueryString(e.search.substr(1)),_.each(d,function(e){delete t[e]}),n===location.pathname&&_.isEqual(l,t)?h.preview.send("keep-alive"):(e.search=r.param(t),e.hash="",h.settings.url.self=e.href,h.preview.send("ready",{currentUrl:h.settings.url.self,activePanels:h.settings.activePanels,activeSections:h.settings.activeSections,activeControls:h.settings.activeControls,settingValidities:h.settings.settingValidities})),l=t,u=location.search.substr(1),n=location.pathname)}),h.settingPreviewHandlers={custom_logo:function(e){r("body").toggleClass("wp-custom-logo",!!e)},custom_css:function(e){r("#wp-custom-css").text(e)},background:function(){var e="",t={};_.each(["color","image","preset","position_x","position_y","size","repeat","attachment"],function(e){t[e]=h("background_"+e)}),r(document.body).toggleClass("custom-background",!(!t.color()&&!t.image())),t.color()&&(e+="background-color: "+t.color()+";"),t.image()&&(e=(e=(e=(e=(e+='background-image: url("'+t.image()+'");')+"background-size: "+t.size()+";")+"background-position: "+t.position_x()+" "+t.position_y()+";")+"background-repeat: "+t.repeat()+";")+"background-attachment: "+t.attachment()+";"),r("#custom-background-css").text("body.custom-background { "+e+" }")}},r(function(){var e,t,n;h.settings=window._wpCustomizeSettings,h.settings&&(h.preview=new h.Preview({url:window.location.href,channel:h.settings.channel}),h.addLinkPreviewing(),h.addRequestPreviewing(),h.addFormPreviewing(),t=function(e,t,n){var i=h(e);i?i.set(t):(n=n||!1,i=h.create(e,t,{id:e}),n&&(i._dirty=!0))},h.preview.bind("settings",function(e){r.each(e,t)}),h.preview.trigger("settings",h.settings.values),r.each(h.settings._dirty,function(e,t){t=h(t);t&&(t._dirty=!0)}),h.preview.bind("setting",function(e){t.apply(null,e.concat(!0))}),h.preview.bind("sync",function(t){t.settings&&t["settings-modified-while-loading"]&&_.each(_.keys(t.settings),function(e){h.has(e)&&!t["settings-modified-while-loading"][e]&&delete t.settings[e]}),r.each(t,function(e,t){h.preview.trigger(e,t)}),h.preview.send("synced")}),h.preview.bind("active",function(){h.preview.send("nonce",h.settings.nonce),h.preview.send("documentTitle",document.title),h.preview.send("scroll",r(window).scrollTop())}),h.preview.bind("changeset-uuid",n=function(e){h.settings.changeset.uuid=e,r(document.body).find("a[href], area[href]").each(function(){h.prepareLinkPreview(this)}),r(document.body).find("form").each(function(){h.prepareFormPreview(this)}),history.replaceState&&history.replaceState(p,"",location.href)}),h.preview.bind("saved",function(e){e.next_changeset_uuid&&n(e.next_changeset_uuid),h.trigger("saved",e)}),h.preview.bind("autosaving",function(){h.settings.changeset.autosaved||(h.settings.changeset.autosaved=!0,r(document.body).find("a[href], area[href]").each(function(){h.prepareLinkPreview(this)}),r(document.body).find("form").each(function(){h.prepareFormPreview(this)}),history.replaceState&&history.replaceState(p,"",location.href))}),h.preview.bind("changeset-saved",function(e){_.each(e.saved_changeset_values,function(e,t){t=h(t);t&&_.isEqual(t.get(),e)&&(t._dirty=!1)})}),h.preview.bind("nonce-refresh",function(e){r.extend(h.settings.nonce,e)}),h.preview.send("ready",{currentUrl:h.settings.url.self,activePanels:h.settings.activePanels,activeSections:h.settings.activeSections,activeControls:h.settings.activeControls,settingValidities:h.settings.settingValidities}),setInterval(h.keepAliveCurrentUrl,h.settings.timeouts.keepAliveSend),h.preview.bind("loading-initiated",function(){r("body").addClass("wp-customizer-unloading")}),h.preview.bind("loading-failed",function(){r("body").removeClass("wp-customizer-unloading")}),e=r.map(["color","image","preset","position_x","position_y","size","repeat","attachment"],function(e){return"background_"+e}),h.when.apply(h,e).done(function(){r.each(arguments,function(){this.bind(h.settingPreviewHandlers.background)})}),h("custom_logo",function(e){h.settingPreviewHandlers.custom_logo.call(e,e.get()),e.bind(h.settingPreviewHandlers.custom_logo)}),h("custom_css["+h.settings.theme.stylesheet+"]",function(e){e.bind(h.settingPreviewHandlers.custom_css)}),h.trigger("preview-ready"))})}((wp,jQuery));wp-lists.js000064400000061343152335011310006665 0ustar00/** * @output wp-includes/js/wp-lists.js */ /* global ajaxurl, wpAjax */ /** * @param {jQuery} $ jQuery object. */ ( function( $ ) { var functions = { add: 'ajaxAdd', del: 'ajaxDel', dim: 'ajaxDim', process: 'process', recolor: 'recolor' }, wpList; /** * @namespace */ wpList = { /** * @member {object} */ settings: { /** * URL for Ajax requests. * * @member {string} */ url: ajaxurl, /** * The HTTP method to use for Ajax requests. * * @member {string} */ type: 'POST', /** * ID of the element the parsed Ajax response will be stored in. * * @member {string} */ response: 'ajax-response', /** * The type of list. * * @member {string} */ what: '', /** * CSS class name for alternate styling. * * @member {string} */ alt: 'alternate', /** * Offset to start alternate styling from. * * @member {number} */ altOffset: 0, /** * Color used in animation when adding an element. * * Can be 'none' to disable the animation. * * @member {string} */ addColor: '#ffff33', /** * Color used in animation when deleting an element. * * Can be 'none' to disable the animation. * * @member {string} */ delColor: '#faafaa', /** * Color used in dim add animation. * * Can be 'none' to disable the animation. * * @member {string} */ dimAddColor: '#ffff33', /** * Color used in dim delete animation. * * Can be 'none' to disable the animation. * * @member {string} */ dimDelColor: '#ff3333', /** * Callback that's run before a request is made. * * @callback wpList~confirm * @param {object} this * @param {HTMLElement} list The list DOM element. * @param {object} settings Settings for the current list. * @param {string} action The type of action to perform: 'add', 'delete', or 'dim'. * @param {string} backgroundColor Background color of the list's DOM element. * @return {boolean} Whether to proceed with the action or not. */ confirm: null, /** * Callback that's run before an item gets added to the list. * * Allows to cancel the request. * * @callback wpList~addBefore * @param {object} settings Settings for the Ajax request. * @return {object|boolean} Settings for the Ajax request or false to abort. */ addBefore: null, /** * Callback that's run after an item got added to the list. * * @callback wpList~addAfter * @param {XML} returnedResponse Raw response returned from the server. * @param {object} settings Settings for the Ajax request. * @param {jqXHR} settings.xml jQuery XMLHttpRequest object. * @param {string} settings.status Status of the request: 'success', 'notmodified', 'nocontent', 'error', * 'timeout', 'abort', or 'parsererror'. * @param {object} settings.parsed Parsed response object. */ addAfter: null, /** * Callback that's run before an item gets deleted from the list. * * Allows to cancel the request. * * @callback wpList~delBefore * @param {object} settings Settings for the Ajax request. * @param {HTMLElement} list The list DOM element. * @return {object|boolean} Settings for the Ajax request or false to abort. */ delBefore: null, /** * Callback that's run after an item got deleted from the list. * * @callback wpList~delAfter * @param {XML} returnedResponse Raw response returned from the server. * @param {object} settings Settings for the Ajax request. * @param {jqXHR} settings.xml jQuery XMLHttpRequest object. * @param {string} settings.status Status of the request: 'success', 'notmodified', 'nocontent', 'error', * 'timeout', 'abort', or 'parsererror'. * @param {object} settings.parsed Parsed response object. */ delAfter: null, /** * Callback that's run before an item gets dim'd. * * Allows to cancel the request. * * @callback wpList~dimBefore * @param {object} settings Settings for the Ajax request. * @return {object|boolean} Settings for the Ajax request or false to abort. */ dimBefore: null, /** * Callback that's run after an item got dim'd. * * @callback wpList~dimAfter * @param {XML} returnedResponse Raw response returned from the server. * @param {object} settings Settings for the Ajax request. * @param {jqXHR} settings.xml jQuery XMLHttpRequest object. * @param {string} settings.status Status of the request: 'success', 'notmodified', 'nocontent', 'error', * 'timeout', 'abort', or 'parsererror'. * @param {object} settings.parsed Parsed response object. */ dimAfter: null }, /** * Finds a nonce. * * 1. Nonce in settings. * 2. `_ajax_nonce` value in element's href attribute. * 3. `_ajax_nonce` input field that is a descendant of element. * 4. `_wpnonce` value in element's href attribute. * 5. `_wpnonce` input field that is a descendant of element. * 6. 0 if none can be found. * * @param {jQuery} element Element that triggered the request. * @param {Object} settings Settings for the Ajax request. * @return {string|number} Nonce */ nonce: function( element, settings ) { var url = wpAjax.unserialize( element.attr( 'href' ) ), $element = $( '#' + settings.element ); return settings.nonce || url._ajax_nonce || $element.find( 'input[name="_ajax_nonce"]' ).val() || url._wpnonce || $element.find( 'input[name="_wpnonce"]' ).val() || 0; }, /** * Extract list item data from a DOM element. * * Example 1: data-wp-lists="delete:the-comment-list:comment-{comment_ID}:66cc66:unspam=1" * Example 2: data-wp-lists="dim:the-comment-list:comment-{comment_ID}:unapproved:e7e7d3:e7e7d3:new=approved" * * Returns an unassociative array with the following data: * data[0] - Data identifier: 'list', 'add', 'delete', or 'dim'. * data[1] - ID of the corresponding list. If data[0] is 'list', the type of list ('comment', 'category', etc). * data[2] - ID of the parent element of all inputs necessary for the request. * data[3] - Hex color to be used in this request. If data[0] is 'dim', dim class. * data[4] - Additional arguments in query syntax that are added to the request. Example: 'post_id=1234'. * If data[0] is 'dim', dim add color. * data[5] - Only available if data[0] is 'dim', dim delete color. * data[6] - Only available if data[0] is 'dim', additional arguments in query syntax that are added to the request. * * Result for Example 1: * data[0] - delete * data[1] - the-comment-list * data[2] - comment-{comment_ID} * data[3] - 66cc66 * data[4] - unspam=1 * * @param {HTMLElement} element The DOM element. * @param {string} type The type of data to look for: 'list', 'add', 'delete', or 'dim'. * @return {Array} Extracted list item data. */ parseData: function( element, type ) { var data = [], wpListsData; try { wpListsData = $( element ).data( 'wp-lists' ) || ''; wpListsData = wpListsData.match( new RegExp( type + ':[\\S]+' ) ); if ( wpListsData ) { data = wpListsData[0].split( ':' ); } } catch ( error ) {} return data; }, /** * Calls a confirm callback to verify the action that is about to be performed. * * @param {HTMLElement} list The DOM element. * @param {Object} settings Settings for this list. * @param {string} action The type of action to perform: 'add', 'delete', or 'dim'. * @return {Object|boolean} Settings if confirmed, false if not. */ pre: function( list, settings, action ) { var $element, backgroundColor, confirmed; settings = $.extend( {}, this.wpList.settings, { element: null, nonce: 0, target: list.get( 0 ) }, settings || {} ); if ( typeof settings.confirm === 'function' ) { $element = $( '#' + settings.element ); if ( 'add' !== action ) { backgroundColor = $element.css( 'backgroundColor' ); $element.css( 'backgroundColor', '#ff9966' ); } confirmed = settings.confirm.call( this, list, settings, action, backgroundColor ); if ( 'add' !== action ) { $element.css( 'backgroundColor', backgroundColor ); } if ( ! confirmed ) { return false; } } return settings; }, /** * Adds an item to the list via Ajax. * * @param {HTMLElement} element The DOM element. * @param {Object} settings Settings for this list. * @return {boolean} Whether the item was added. */ ajaxAdd: function( element, settings ) { var list = this, $element = $( element ), data = wpList.parseData( $element, 'add' ), formValues, formData, parsedResponse, returnedResponse; settings = settings || {}; settings = wpList.pre.call( list, $element, settings, 'add' ); settings.element = data[2] || $element.prop( 'id' ) || settings.element || null; settings.addColor = data[3] ? '#' + data[3] : settings.addColor; if ( ! settings ) { return false; } if ( ! $element.is( '[id="' + settings.element + '-submit"]' ) ) { return ! wpList.add.call( list, $element, settings ); } if ( ! settings.element ) { return true; } settings.action = 'add-' + settings.what; settings.nonce = wpList.nonce( $element, settings ); if ( ! wpAjax.validateForm( '#' + settings.element ) ) { return false; } settings.data = $.param( $.extend( { _ajax_nonce: settings.nonce, action: settings.action }, wpAjax.unserialize( data[4] || '' ) ) ); formValues = $( '#' + settings.element + ' :input' ).not( '[name="_ajax_nonce"], [name="_wpnonce"], [name="action"]' ); formData = typeof formValues.fieldSerialize === 'function' ? formValues.fieldSerialize() : formValues.serialize(); if ( formData ) { settings.data += '&' + formData; } if ( typeof settings.addBefore === 'function' ) { settings = settings.addBefore( settings ); if ( ! settings ) { return true; } } if ( ! settings.data.match( /_ajax_nonce=[a-f0-9]+/ ) ) { return true; } settings.success = function( response ) { parsedResponse = wpAjax.parseAjaxResponse( response, settings.response, settings.element ); returnedResponse = response; if ( ! parsedResponse || parsedResponse.errors ) { return false; } if ( true === parsedResponse ) { return true; } $.each( parsedResponse.responses, function() { wpList.add.call( list, this.data, $.extend( {}, settings, { // this.firstChild.nodevalue position: this.position || 0, id: this.id || 0, oldId: this.oldId || null } ) ); } ); list.wpList.recolor(); $( list ).trigger( 'wpListAddEnd', [ settings, list.wpList ] ); wpList.clear.call( list, '#' + settings.element ); }; settings.complete = function( jqXHR, status ) { if ( typeof settings.addAfter === 'function' ) { settings.addAfter( returnedResponse, $.extend( { xml: jqXHR, status: status, parsed: parsedResponse }, settings ) ); } }; $.ajax( settings ); return false; }, /** * Delete an item in the list via Ajax. * * @param {HTMLElement} element A DOM element containing item data. * @param {Object} settings Settings for this list. * @return {boolean} Whether the item was deleted. */ ajaxDel: function( element, settings ) { var list = this, $element = $( element ), data = wpList.parseData( $element, 'delete' ), $eventTarget, parsedResponse, returnedResponse; settings = settings || {}; settings = wpList.pre.call( list, $element, settings, 'delete' ); settings.element = data[2] || settings.element || null; settings.delColor = data[3] ? '#' + data[3] : settings.delColor; if ( ! settings || ! settings.element ) { return false; } settings.action = 'delete-' + settings.what; settings.nonce = wpList.nonce( $element, settings ); settings.data = $.extend( { _ajax_nonce: settings.nonce, action: settings.action, id: settings.element.split( '-' ).pop() }, wpAjax.unserialize( data[4] || '' ) ); if ( typeof settings.delBefore === 'function' ) { settings = settings.delBefore( settings, list ); if ( ! settings ) { return true; } } if ( ! settings.data._ajax_nonce ) { return true; } $eventTarget = $( '#' + settings.element ); if ( 'none' !== settings.delColor ) { $eventTarget.css( 'backgroundColor', settings.delColor ).fadeOut( 350, function() { list.wpList.recolor(); $( list ).trigger( 'wpListDelEnd', [ settings, list.wpList ] ); } ); } else { list.wpList.recolor(); $( list ).trigger( 'wpListDelEnd', [ settings, list.wpList ] ); } settings.success = function( response ) { parsedResponse = wpAjax.parseAjaxResponse( response, settings.response, settings.element ); returnedResponse = response; if ( ! parsedResponse || parsedResponse.errors ) { $eventTarget.stop().stop().css( 'backgroundColor', '#faa' ).show().queue( function() { list.wpList.recolor(); $( this ).dequeue(); } ); return false; } }; settings.complete = function( jqXHR, status ) { if ( typeof settings.delAfter === 'function' ) { $eventTarget.queue( function() { settings.delAfter( returnedResponse, $.extend( { xml: jqXHR, status: status, parsed: parsedResponse }, settings ) ); } ).dequeue(); } }; $.ajax( settings ); return false; }, /** * Dim an item in the list via Ajax. * * @param {HTMLElement} element A DOM element containing item data. * @param {Object} settings Settings for this list. * @return {boolean} Whether the item was dim'ed. */ ajaxDim: function( element, settings ) { var list = this, $element = $( element ), data = wpList.parseData( $element, 'dim' ), $eventTarget, isClass, color, dimColor, parsedResponse, returnedResponse; // Prevent hidden links from being clicked by hotkeys. if ( 'none' === $element.parent().css( 'display' ) ) { return false; } settings = settings || {}; settings = wpList.pre.call( list, $element, settings, 'dim' ); settings.element = data[2] || settings.element || null; settings.dimClass = data[3] || settings.dimClass || null; settings.dimAddColor = data[4] ? '#' + data[4] : settings.dimAddColor; settings.dimDelColor = data[5] ? '#' + data[5] : settings.dimDelColor; if ( ! settings || ! settings.element || ! settings.dimClass ) { return true; } settings.action = 'dim-' + settings.what; settings.nonce = wpList.nonce( $element, settings ); settings.data = $.extend( { _ajax_nonce: settings.nonce, action: settings.action, id: settings.element.split( '-' ).pop(), dimClass: settings.dimClass }, wpAjax.unserialize( data[6] || '' ) ); if ( typeof settings.dimBefore === 'function' ) { settings = settings.dimBefore( settings ); if ( ! settings ) { return true; } } $eventTarget = $( '#' + settings.element ); isClass = $eventTarget.toggleClass( settings.dimClass ).is( '.' + settings.dimClass ); color = wpList.getColor( $eventTarget ); dimColor = isClass ? settings.dimAddColor : settings.dimDelColor; $eventTarget.toggleClass( settings.dimClass ); if ( 'none' !== dimColor ) { $eventTarget .animate( { backgroundColor: dimColor }, 'fast' ) .queue( function() { $eventTarget.toggleClass( settings.dimClass ); $( this ).dequeue(); } ) .animate( { backgroundColor: color }, { complete: function() { $( this ).css( 'backgroundColor', '' ); $( list ).trigger( 'wpListDimEnd', [ settings, list.wpList ] ); } } ); } else { $( list ).trigger( 'wpListDimEnd', [ settings, list.wpList ] ); } if ( ! settings.data._ajax_nonce ) { return true; } settings.success = function( response ) { parsedResponse = wpAjax.parseAjaxResponse( response, settings.response, settings.element ); returnedResponse = response; if ( true === parsedResponse ) { return true; } if ( ! parsedResponse || parsedResponse.errors ) { $eventTarget.stop().stop().css( 'backgroundColor', '#ff3333' )[isClass ? 'removeClass' : 'addClass']( settings.dimClass ).show().queue( function() { list.wpList.recolor(); $( this ).dequeue(); } ); return false; } /** @property {string} comment_link Link of the comment to be dimmed. */ if ( 'undefined' !== typeof parsedResponse.responses[0].supplemental.comment_link ) { var $submittedOn = $element.find( '.submitted-on' ), $commentLink = $submittedOn.find( 'a' ); // Comment is approved; link the date field. if ( '' !== parsedResponse.responses[0].supplemental.comment_link ) { $submittedOn.html( $('').text( $submittedOn.text() ).prop( 'href', parsedResponse.responses[0].supplemental.comment_link ) ); // Comment is not approved; unlink the date field. } else if ( $commentLink.length ) { $submittedOn.text( $commentLink.text() ); } } }; settings.complete = function( jqXHR, status ) { if ( typeof settings.dimAfter === 'function' ) { $eventTarget.queue( function() { settings.dimAfter( returnedResponse, $.extend( { xml: jqXHR, status: status, parsed: parsedResponse }, settings ) ); } ).dequeue(); } }; $.ajax( settings ); return false; }, /** * Returns the background color of the passed element. * * @param {jQuery|string} element Element to check. * @return {string} Background color value in HEX. Default: '#ffffff'. */ getColor: function( element ) { return $( element ).css( 'backgroundColor' ) || '#ffffff'; }, /** * Adds something. * * @param {HTMLElement} element A DOM element containing item data. * @param {Object} settings Settings for this list. * @return {boolean} Whether the item was added. */ add: function( element, settings ) { var $list = $( this ), $element = $( element ), old = false, position, reference; if ( 'string' === typeof settings ) { settings = { what: settings }; } settings = $.extend( { position: 0, id: 0, oldId: null }, this.wpList.settings, settings ); if ( ! $element.length || ! settings.what ) { return false; } if ( settings.oldId ) { old = $( '#' + settings.what + '-' + settings.oldId ); } if ( settings.id && ( settings.id !== settings.oldId || ! old || ! old.length ) ) { $( '#' + settings.what + '-' + settings.id ).remove(); } if ( old && old.length ) { old.before( $element ); old.remove(); } else if ( isNaN( settings.position ) ) { position = 'after'; if ( '-' === settings.position.substr( 0, 1 ) ) { settings.position = settings.position.substr( 1 ); position = 'before'; } reference = $list.find( '#' + settings.position ); if ( 1 === reference.length ) { reference[position]( $element ); } else { $list.append( $element ); } } else if ( 'comment' !== settings.what || 0 === $( '#' + settings.element ).length ) { if ( settings.position < 0 ) { $list.prepend( $element ); } else { $list.append( $element ); } } if ( settings.alt ) { $element.toggleClass( settings.alt, ( $list.children( ':visible' ).index( $element[0] ) + settings.altOffset ) % 2 ); } if ( 'none' !== settings.addColor ) { $element.css( 'backgroundColor', settings.addColor ).animate( { backgroundColor: wpList.getColor( $element ) }, { complete: function() { $( this ).css( 'backgroundColor', '' ); } } ); } // Add event handlers. $list.each( function( index, list ) { list.wpList.process( $element ); } ); return $element; }, /** * Clears all input fields within the element passed. * * @param {string} elementId ID of the element to check, including leading #. */ clear: function( elementId ) { var list = this, $element = $( elementId ), type, tagName; // Bail if we're within the list. if ( list.wpList && $element.parents( '#' + list.id ).length ) { return; } // Check each input field. $element.find( ':input' ).each( function( index, input ) { // Bail if the form was marked to not to be cleared. if ( $( input ).parents( '.form-no-clear' ).length ) { return; } type = input.type.toLowerCase(); tagName = input.tagName.toLowerCase(); if ( 'text' === type || 'password' === type || 'textarea' === tagName ) { input.value = ''; } else if ( 'checkbox' === type || 'radio' === type ) { input.checked = false; } else if ( 'select' === tagName ) { input.selectedIndex = null; } } ); }, /** * Registers event handlers to add, delete, and dim items. * * @param {string} elementId */ process: function( elementId ) { var list = this, $element = $( elementId || document ); $element.on( 'submit', 'form[data-wp-lists^="add:' + list.id + ':"]', function() { return list.wpList.add( this ); } ); $element.on( 'click', '[data-wp-lists^="add:' + list.id + ':"], input[data-wp-lists^="add:' + list.id + ':"]', function() { return list.wpList.add( this ); } ); $element.on( 'click', '[data-wp-lists^="delete:' + list.id + ':"]', function() { return list.wpList.del( this ); } ); $element.on( 'click', '[data-wp-lists^="dim:' + list.id + ':"]', function() { return list.wpList.dim( this ); } ); }, /** * Updates list item background colors. */ recolor: function() { var list = this, evenOdd = [':even', ':odd'], items; // Bail if there is no alternate class name specified. if ( ! list.wpList.settings.alt ) { return; } items = $( '.list-item:visible', list ); if ( ! items.length ) { items = $( list ).children( ':visible' ); } if ( list.wpList.settings.altOffset % 2 ) { evenOdd.reverse(); } items.filter( evenOdd[0] ).addClass( list.wpList.settings.alt ).end(); items.filter( evenOdd[1] ).removeClass( list.wpList.settings.alt ); }, /** * Sets up `process()` and `recolor()` functions. */ init: function() { var $list = this; $list.wpList.process = function( element ) { $list.each( function() { this.wpList.process( element ); } ); }; $list.wpList.recolor = function() { $list.each( function() { this.wpList.recolor(); } ); }; } }; /** * Initializes wpList object. * * @param {Object} settings * @param {string} settings.url URL for ajax calls. Default: ajaxurl. * @param {string} settings.type The HTTP method to use for Ajax requests. Default: 'POST'. * @param {string} settings.response ID of the element the parsed ajax response will be stored in. * Default: 'ajax-response'. * * @param {string} settings.what Default: ''. * @param {string} settings.alt CSS class name for alternate styling. Default: 'alternate'. * @param {number} settings.altOffset Offset to start alternate styling from. Default: 0. * @param {string} settings.addColor Hex code or 'none' to disable animation. Default: '#ffff33'. * @param {string} settings.delColor Hex code or 'none' to disable animation. Default: '#faafaa'. * @param {string} settings.dimAddColor Hex code or 'none' to disable animation. Default: '#ffff33'. * @param {string} settings.dimDelColor Hex code or 'none' to disable animation. Default: '#ff3333'. * * @param {wpList~confirm} settings.confirm Callback that's run before a request is made. Default: null. * @param {wpList~addBefore} settings.addBefore Callback that's run before an item gets added to the list. * Default: null. * @param {wpList~addAfter} settings.addAfter Callback that's run after an item got added to the list. * Default: null. * @param {wpList~delBefore} settings.delBefore Callback that's run before an item gets deleted from the list. * Default: null. * @param {wpList~delAfter} settings.delAfter Callback that's run after an item got deleted from the list. * Default: null. * @param {wpList~dimBefore} settings.dimBefore Callback that's run before an item gets dim'd. Default: null. * @param {wpList~dimAfter} settings.dimAfter Callback that's run after an item got dim'd. Default: null. * @return {$.fn} wpList API function. */ $.fn.wpList = function( settings ) { this.each( function( index, list ) { list.wpList = { settings: $.extend( {}, wpList.settings, { what: wpList.parseData( list, 'list' )[1] || '' }, settings ) }; $.each( functions, function( func, callback ) { list.wpList[func] = function( element, setting ) { return wpList[callback].call( list, element, setting ); }; } ); } ); wpList.init.call( this ); this.wpList.process(); return this; }; } ) ( jQuery ); api-request.js000064400000006374152335011310007345 0ustar00/** * Thin jQuery.ajax wrapper for WP REST API requests. * * Currently only applies to requests that do not use the `wp-api.js` Backbone * client library, though this may change. Serves several purposes: * * - Allows overriding these requests as needed by customized WP installations. * - Sends the REST API nonce as a request header. * - Allows specifying only an endpoint namespace/path instead of a full URL. * * @since 4.9.0 * @since 5.6.0 Added overriding of the "PUT" and "DELETE" methods with "POST". * Added an "application/json" Accept header to all requests. * @output wp-includes/js/api-request.js */ ( function( $ ) { var wpApiSettings = window.wpApiSettings; function apiRequest( options ) { options = apiRequest.buildAjaxOptions( options ); return apiRequest.transport( options ); } apiRequest.buildAjaxOptions = function( options ) { var url = options.url; var path = options.path; var method = options.method; var namespaceTrimmed, endpointTrimmed, apiRoot; var headers, addNonceHeader, addAcceptHeader, headerName; if ( typeof options.namespace === 'string' && typeof options.endpoint === 'string' ) { namespaceTrimmed = options.namespace.replace( /^\/|\/$/g, '' ); endpointTrimmed = options.endpoint.replace( /^\//, '' ); if ( endpointTrimmed ) { path = namespaceTrimmed + '/' + endpointTrimmed; } else { path = namespaceTrimmed; } } if ( typeof path === 'string' ) { apiRoot = wpApiSettings.root; path = path.replace( /^\//, '' ); // API root may already include query parameter prefix // if site is configured to use plain permalinks. if ( 'string' === typeof apiRoot && -1 !== apiRoot.indexOf( '?' ) ) { path = path.replace( '?', '&' ); } url = apiRoot + path; } // If ?_wpnonce=... is present, no need to add a nonce header. addNonceHeader = ! ( options.data && options.data._wpnonce ); addAcceptHeader = true; headers = options.headers || {}; for ( headerName in headers ) { if ( ! headers.hasOwnProperty( headerName ) ) { continue; } // If an 'X-WP-Nonce' or 'Accept' header (or any case-insensitive variation // thereof) was specified, no need to add the header again. switch ( headerName.toLowerCase() ) { case 'x-wp-nonce': addNonceHeader = false; break; case 'accept': addAcceptHeader = false; break; } } if ( addNonceHeader ) { // Do not mutate the original headers object, if any. headers = $.extend( { 'X-WP-Nonce': wpApiSettings.nonce }, headers ); } if ( addAcceptHeader ) { headers = $.extend( { 'Accept': 'application/json, */*;q=0.1' }, headers ); } if ( typeof method === 'string' ) { method = method.toUpperCase(); if ( 'PUT' === method || 'DELETE' === method ) { headers = $.extend( { 'X-HTTP-Method-Override': method }, headers ); method = 'POST'; } } // Do not mutate the original options object. options = $.extend( {}, options, { headers: headers, url: url, method: method } ); delete options.path; delete options.namespace; delete options.endpoint; return options; }; apiRequest.transport = $.ajax; /** @namespace wp */ window.wp = window.wp || {}; window.wp.apiRequest = apiRequest; } )( jQuery ); utils.min.js000064400000003510152335011310007015 0ustar00/*! This file is auto-generated */ window.wpCookies={each:function(e,t,n){var i,s;if(!e)return 0;if(n=n||e,void 0!==e.length){for(i=0,s=e.length;i').appendTo(this.body),this.bind("open",this.overlay.show),this.bind("close",this.overlay.hide),i("#wpbody").on("click",".load-customize",function(e){e.preventDefault(),n.link=i(this),n.open(n.link.attr("href"))}),i.support.history&&this.window.on("popstate",n.popstate),i.support.hashchange)&&(this.window.on("hashchange",n.hashchange),this.window.triggerHandler("hashchange"))},popstate:function(e){e=e.originalEvent.state;e&&e.customize?n.open(e.customize):n.active&&n.close()},hashchange:function(){var e=window.location.toString().split("#")[1];e&&0===e.indexOf("wp_customize=on")&&n.open(n.settings.url+"?"+e),e||i.support.history||n.close()},beforeunload:function(){if(!n.saved())return n.settings.l10n.saveAlert},open:function(e){if(!this.active){if(n.settings.browser.mobile)return window.location=e;this.originalDocumentTitle=document.title,this.active=!0,this.body.addClass("customize-loading"),this.saved=new o.Value(!0),this.iframe=i("'; _iframe = temp.firstChild; container.appendChild(_iframe); /* _iframe.onreadystatechange = function() { console.info(_iframe.readyState); };*/ Events.addEvent(_iframe, 'load', function() { // _iframe.onload doesn't work in IE lte 8 var el; try { el = _iframe.contentWindow.document || _iframe.contentDocument || window.frames[_iframe.id].document; // try to detect some standard error pages if (/^4(0[0-9]|1[0-7]|2[2346])\s/.test(el.title)) { // test if title starts with 4xx HTTP error _status = el.title.replace(/^(\d+).*$/, '$1'); } else { _status = 200; // get result _response = Basic.trim(el.body.innerHTML); // we need to fire these at least once target.trigger({ type: 'progress', loaded: _response.length, total: _response.length }); if (blob) { // if we were uploading a file target.trigger({ type: 'uploadprogress', loaded: blob.size || 1025, total: blob.size || 1025 }); } } } catch (ex) { if (Url.hasSameOrigin(meta.url)) { // if response is sent with error code, iframe in IE gets redirected to res://ieframe.dll/http_x.htm // which obviously results to cross domain error (wtf?) _status = 404; } else { cleanup.call(target, function() { target.trigger('error'); }); return; } } cleanup.call(target, function() { target.trigger('load'); }); }, target.uid); } // end createIframe // prepare data to be sent and convert if required if (data instanceof FormData && data.hasBlob()) { blob = data.getBlob(); uid = blob.uid; input = Dom.get(uid); form = Dom.get(uid + '_form'); if (!form) { throw new x.DOMException(x.DOMException.NOT_FOUND_ERR); } } else { uid = Basic.guid('uid_'); form = document.createElement('form'); form.setAttribute('id', uid + '_form'); form.setAttribute('method', meta.method); form.setAttribute('enctype', 'multipart/form-data'); form.setAttribute('encoding', 'multipart/form-data'); I.getShimContainer().appendChild(form); } // set upload target form.setAttribute('target', uid + '_iframe'); if (data instanceof FormData) { data.each(function(value, name) { if (value instanceof Blob) { if (input) { input.setAttribute('name', name); } } else { var hidden = document.createElement('input'); Basic.extend(hidden, { type : 'hidden', name : name, value : value }); // make sure that input[type="file"], if it's there, comes last if (input) { form.insertBefore(hidden, input); } else { form.appendChild(hidden); } } }); } // set destination url form.setAttribute("action", meta.url); createIframe(); form.submit(); target.trigger('loadstart'); }, getStatus: function() { return _status; }, getResponse: function(responseType) { if ('json' === responseType) { // strip off

        ..
        tags that might be enclosing the response if (Basic.typeOf(_response) === 'string' && !!window.JSON) { try { return JSON.parse(_response.replace(/^\s*]*>/, '').replace(/<\/pre>\s*$/, '')); } catch (ex) { return null; } } } else if ('document' === responseType) { } return _response; }, abort: function() { var target = this; if (_iframe && _iframe.contentWindow) { if (_iframe.contentWindow.stop) { // FireFox/Safari/Chrome _iframe.contentWindow.stop(); } else if (_iframe.contentWindow.document.execCommand) { // IE _iframe.contentWindow.document.execCommand('Stop'); } else { _iframe.src = "about:blank"; } } cleanup.call(this, function() { // target.dispatchEvent('readystatechange'); target.dispatchEvent('abort'); }); } }); } return (extensions.XMLHttpRequest = XMLHttpRequest); }); // Included from: src/javascript/runtime/html4/image/Image.js /** * Image.js * * Copyright 2013, Moxiecode Systems AB * Released under GPL License. * * License: http://www.plupload.com/license * Contributing: http://www.plupload.com/contributing */ /** @class moxie/runtime/html4/image/Image @private */ define("moxie/runtime/html4/image/Image", [ "moxie/runtime/html4/Runtime", "moxie/runtime/html5/image/Image" ], function(extensions, Image) { return (extensions.Image = Image); }); expose(["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/I18n","moxie/core/utils/Mime","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/FileInput","moxie/core/utils/Encode","moxie/file/Blob","moxie/file/File","moxie/file/FileDrop","moxie/file/FileReader","moxie/core/utils/Url","moxie/runtime/RuntimeTarget","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/runtime/Transporter","moxie/image/Image","moxie/core/utils/Events"]); })(this); /** * o.js * * Copyright 2013, Moxiecode Systems AB * Released under GPL License. * * License: http://www.plupload.com/license * Contributing: http://www.plupload.com/contributing */ /*global moxie:true */ /** Globally exposed namespace with the most frequently used public classes and handy methods. @class o @static @private */ (function(exports) { "use strict"; var o = {}, inArray = exports.moxie.core.utils.Basic.inArray; // directly add some public classes // (we do it dynamically here, since for custom builds we cannot know beforehand what modules were included) (function addAlias(ns) { var name, itemType; for (name in ns) { itemType = typeof(ns[name]); if (itemType === 'object' && !~inArray(name, ['Exceptions', 'Env', 'Mime'])) { addAlias(ns[name]); } else if (itemType === 'function') { o[name] = ns[name]; } } })(exports.moxie); // add some manually o.Env = exports.moxie.core.utils.Env; o.Mime = exports.moxie.core.utils.Mime; o.Exceptions = exports.moxie.core.Exceptions; // expose globally exports.mOxie = o; if (!exports.o) { exports.o = o; } return o; })(this); plupload/wp-plupload.min.js000064400000013624152335011310011750 0ustar00window.wp=window.wp||{},function(e,l){var u;"undefined"!=typeof _wpPluploadSettings&&(l.extend(u=function(e){var n,t,i,p,d=this,a={container:"container",browser:"browse_button",dropzone:"drop_element"},s={};if(this.supports={upload:u.browser.supported},this.supported=this.supports.upload,this.supported){for(t in this.plupload=l.extend(!0,{multipart_params:{}},u.defaults),this.container=document.body,l.extend(!0,this,e),this)"function"==typeof this[t]&&(this[t]=l.proxy(this[t],this));for(t in a)this[t]&&(this[t]=l(this[t]).first(),this[t].length?(this[t].prop("id")||this[t].prop("id","__wp-uploader-id-"+u.uuid++),this.plupload[a[t]]=this[t].prop("id")):delete this[t]);(this.browser&&this.browser.length||this.dropzone&&this.dropzone.length)&&(this.uploader=new plupload.Uploader(this.plupload),delete this.plupload,this.param(this.params||{}),delete this.params,n=function(t,a,r){var e,o;a&&a.responseHeaders&&(o=a.responseHeaders.match(/x-wp-upload-attachment-id:\s*(\d+)/i))&&o[1]?(o=o[1],(e=s[r.id])&&4').css({position:"fixed",top:"-1000px",left:"-1000px",height:0,width:0}).attr("id","wp-uploader-browser-"+this.uploader.id).appendTo("body")).append(this.browser))}this.uploader.refresh()}}),u.queue=new wp.media.model.Attachments([],{query:!1}),u.errors=new Backbone.Collection,e.Uploader=u)}(wp,jQuery);plupload/moxie.min.js000064400000252542152335011310010631 0ustar00var MXI_DEBUG=!1;!function(o,x){"use strict";var s={};function n(e,t){for(var i,n=[],r=0;rt[s]){a=1;break}}if(!i)return a;switch(i){case">":case"gt":return 0=":case"ge":return 0<=a;case"<=":case"le":return a<=0;case"==":case"=":case"eq":return 0===a;case"<>":case"!=":case"ne":return 0!==a;case"":case"<":case"lt":return a<0;default:return null}},global_event_dispatcher:"moxie.core.EventTarget.instance.dispatchEvent"};return l.OS=l.os,MXI_DEBUG&&(l.debug={runtime:!0,events:!1},l.log=function(){var e,t,i=arguments[0];"string"===n.typeOf(i)&&(i=n.sprintf.apply(this,arguments)),window&&window.console&&window.console.log?window.console.log(i):document&&((e=document.getElementById("moxie-console"))||((e=document.createElement("pre")).id="moxie-console",document.body.appendChild(e)),-1!==n.inArray(n.typeOf(i),["object","array"])?(t=i,e.appendChild(document.createTextNode(t+"\n"))):e.appendChild(document.createTextNode(i+"\n")))}),l}),e("moxie/core/I18n",["moxie/core/utils/Basic"],function(i){var t={};return{addI18n:function(e){return i.extend(t,e)},translate:function(e){return t[e]||e},_:function(e){return this.translate(e)},sprintf:function(e){var t=[].slice.call(arguments,1);return e.replace(/%[a-z]/g,function(){var e=t.shift();return"undefined"!==i.typeOf(e)?e:""})}}}),e("moxie/core/utils/Mime",["moxie/core/utils/Basic","moxie/core/I18n"],function(a,n){var e={mimes:{},extensions:{},addMimeType:function(e){for(var t,i,n=e.split(/,/),r=0;r>16&255,n=s>>8&255,s=255&s,d[l++]=64==r?String.fromCharCode(i):64==o?String.fromCharCode(i,n):String.fromCharCode(i,n,s),c>12&63,n=o>>6&63,r=63&o,c[u++]=s.charAt(o>>18&63)+s.charAt(i)+s.charAt(n)+s.charAt(r),ap.MAX_RESIZE_WIDTH||this.height>p.MAX_RESIZE_HEIGHT)throw new u.ImageError(u.ImageError.MAX_RESOLUTION_ERR);this.exec("Image","downsize",e.width,e.height,e.crop,e.preserveHeaders)}catch(e){this.trigger("error",e.code)}},crop:function(e,t,i){this.downsize(e,t,!0,i)},getAsCanvas:function(){if(l.can("create_canvas"))return this.connectRuntime(this.ruid).exec.call(this,"Image","getAsCanvas");throw new u.RuntimeError(u.RuntimeError.NOT_SUPPORTED_ERR)},getAsBlob:function(e,t){if(this.size)return this.exec("Image","getAsBlob",e||"image/jpeg",t||90);throw new u.DOMException(u.DOMException.INVALID_STATE_ERR)},getAsDataURL:function(e,t){if(this.size)return this.exec("Image","getAsDataURL",e||"image/jpeg",t||90);throw new u.DOMException(u.DOMException.INVALID_STATE_ERR)},getAsBinaryString:function(e,t){e=this.getAsDataURL(e,t);return h.atob(e.substring(e.indexOf("base64,")+7))},embed:function(r,e){var o,s=this;e=a.extend({width:this.width,height:this.height,type:this.type||"image/jpeg",quality:90},e||{});try{if(!(r=n.get(r)))throw new u.DOMException(u.DOMException.INVALID_NODE_TYPE_ERR);if(!this.size)throw new u.DOMException(u.DOMException.INVALID_STATE_ERR);this.width>p.MAX_RESIZE_WIDTH||this.height;var t=new p;return t.bind("Resize",function(){!function(e,t){var i=this;if(l.can("create_canvas")){var n=i.getAsCanvas();if(n)return r.appendChild(n),i.destroy(),void s.trigger("embedded")}if(!(n=i.getAsDataURL(e,t)))throw new u.ImageError(u.ImageError.WRONG_FORMAT);l.can("use_data_uri_of",n.length)?(r.innerHTML='',i.destroy(),s.trigger("embedded")):((t=new c).bind("TransportingComplete",function(){o=s.connectRuntime(this.result.ruid),s.bind("Embedded",function(){a.extend(o.getShimContainer().style,{top:"0px",left:"0px",width:i.width+"px",height:i.height+"px"}),o=null},999),o.exec.call(s,"ImageView","display",this.result.uid,width,height),i.destroy()}),t.transport(h.atob(n.substring(n.indexOf("base64,")+7)),e,{required_caps:{display_media:!0},runtime_order:"flash,silverlight",container:r}))}.call(this,e.type,e.quality)}),t.bind("Load",function(){t.downsize(e)}),this.meta.thumb&&this.meta.thumb.width>=e.width&&this.meta.thumb.height>=e.height?t.load(this.meta.thumb.data):t.clone(this,!1),t}catch(e){this.trigger("error",e.code)}},destroy:function(){this.ruid&&(this.getRuntime().exec.call(this,"Image","destroy"),this.disconnectRuntime()),this.unbindAll()}}),this.handleEventProps(f),this.bind("Load Resize",function(){!function(e){e=e||this.exec("Image","getInfo");this.size=e.size,this.width=e.width,this.height=e.height,this.type=e.type,this.meta=e.meta,""===this.name&&(this.name=e.name)}.call(this)},999)}return p.MAX_RESIZE_WIDTH=8192,p.MAX_RESIZE_HEIGHT=8192,p.prototype=i.instance,p}),e("moxie/runtime/html5/Runtime",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/Runtime","moxie/core/utils/Env"],function(s,e,a,u){var c={};return a.addConstructor("html5",function(e){var t,i=this,n=a.capTest,r=a.capTrue,o=s.extend({access_binary:n(window.FileReader||window.File&&window.File.getAsDataURL),access_image_binary:function(){return i.can("access_binary")&&!!c.Image},display_media:n(u.can("create_canvas")||u.can("use_data_uri_over32kb")),do_cors:n(window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest),drag_and_drop:n(("draggable"in(o=document.createElement("div"))||"ondragstart"in o&&"ondrop"in o)&&("IE"!==u.browser||u.verComp(u.version,9,">"))),filter_by_extension:n("Chrome"===u.browser&&u.verComp(u.version,28,">=")||"IE"===u.browser&&u.verComp(u.version,10,">=")||"Safari"===u.browser&&u.verComp(u.version,7,">=")),return_response_headers:r,return_response_type:function(e){return!("json"!==e||!window.JSON)||u.can("return_response_type",e)},return_status_code:r,report_upload_progress:n(window.XMLHttpRequest&&(new XMLHttpRequest).upload),resize_image:function(){return i.can("access_binary")&&u.can("create_canvas")},select_file:function(){return u.can("use_fileinput")&&window.File},select_folder:function(){return i.can("select_file")&&"Chrome"===u.browser&&u.verComp(u.version,21,">=")},select_multiple:function(){return i.can("select_file")&&!("Safari"===u.browser&&"Windows"===u.os)&&!("iOS"===u.os&&u.verComp(u.osVersion,"7.0.0",">")&&u.verComp(u.osVersion,"8.0.0","<"))},send_binary_string:n(window.XMLHttpRequest&&((new XMLHttpRequest).sendAsBinary||window.Uint8Array&&window.ArrayBuffer)),send_custom_headers:n(window.XMLHttpRequest),send_multipart:function(){return!!(window.XMLHttpRequest&&(new XMLHttpRequest).upload&&window.FormData)||i.can("send_binary_string")},slice_blob:n(window.File&&(File.prototype.mozSlice||File.prototype.webkitSlice||File.prototype.slice)),stream_upload:function(){return i.can("slice_blob")&&i.can("send_multipart")},summon_file_dialog:function(){return i.can("select_file")&&("Firefox"===u.browser&&u.verComp(u.version,4,">=")||"Opera"===u.browser&&u.verComp(u.version,12,">=")||"IE"===u.browser&&u.verComp(u.version,10,">=")||!!~s.inArray(u.browser,["Chrome","Safari"]))},upload_filesize:r},arguments[2]);a.call(this,e,arguments[1]||"html5",o),s.extend(this,{init:function(){this.trigger("Init")},destroy:(t=this.destroy,function(){t.call(i),t=i=null})}),s.extend(this.getShim(),c)}),c}),e("moxie/core/utils/Events",["moxie/core/utils/Basic"],function(o){var s={},a="moxie_"+o.guid();function u(){this.returnValue=!1}function c(){this.cancelBubble=!0}function r(t,e,i){if(e=e.toLowerCase(),t[a]&&s[t[a]]&&s[t[a]][e]){for(var n,r=(n=s[t[a]][e]).length-1;0<=r&&(n[r].orig!==i&&n[r].key!==i||(t.removeEventListener?t.removeEventListener(e,n[r].func,!1):t.detachEvent&&t.detachEvent("on"+e,n[r].func),n[r].orig=null,n[r].func=null,n.splice(r,1),void 0===i));r--);if(n.length||delete s[t[a]][e],o.isEmptyObj(s[t[a]])){delete s[t[a]];try{delete t[a]}catch(e){t[a]=void 0}}}}return{addEvent:function(e,t,i,n){var r;t=t.toLowerCase(),e.addEventListener?e.addEventListener(t,r=i,!1):e.attachEvent&&e.attachEvent("on"+t,r=function(){var e=window.event;e.target||(e.target=e.srcElement),e.preventDefault=u,e.stopPropagation=c,i(e)}),e[a]||(e[a]=o.guid()),s.hasOwnProperty(e[a])||(s[e[a]]={}),(e=s[e[a]]).hasOwnProperty(t)||(e[t]=[]),e[t].push({func:r,orig:i,key:n})},removeEvent:r,removeAllEvents:function(i,n){i&&i[a]&&o.each(s[i[a]],function(e,t){r(i,t,n)})}}}),e("moxie/runtime/html5/file/FileInput",["moxie/runtime/html5/Runtime","moxie/file/File","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,a,u,c,l,d,m){return e.FileInput=function(){var s;u.extend(this,{init:function(e){var t,i,n,r=this,o=r.getRuntime(),e=(s=e).accept.mimes||d.extList2mimes(s.accept,o.can("filter_by_extension"));(t=o.getShimContainer()).innerHTML='",e=c.get(o.uid),u.extend(e.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),i=c.get(s.browse_button),o.can("summon_file_dialog")&&("static"===c.getStyle(i,"position")&&(i.style.position="relative"),n=parseInt(c.getStyle(i,"z-index"),10)||1,i.style.zIndex=n,t.style.zIndex=n-1,l.addEvent(i,"click",function(e){var t=c.get(o.uid);t&&!t.disabled&&t.click(),e.preventDefault()},r.uid)),n=o.can("summon_file_dialog")?i:t,l.addEvent(n,"mouseover",function(){r.trigger("mouseenter")},r.uid),l.addEvent(n,"mouseout",function(){r.trigger("mouseleave")},r.uid),l.addEvent(n,"mousedown",function(){r.trigger("mousedown")},r.uid),l.addEvent(c.get(s.container),"mouseup",function(){r.trigger("mouseup")},r.uid),e.onchange=function e(t){var i;r.files=[],u.each(this.files,function(e){var t="";if(s.directory&&"."==e.name)return!0;e.webkitRelativePath&&(t="/"+e.webkitRelativePath.replace(/^\//,"")),(e=new a(o.uid,e)).relativePath=t,r.files.push(e)}),"IE"!==m.browser&&"IEMobile"!==m.browser?this.value="":(i=this.cloneNode(!0),this.parentNode.replaceChild(i,this),i.onchange=e),r.files.length&&r.trigger("change")},r.trigger({type:"ready",async:!0})},disable:function(e){var t=this.getRuntime();(t=c.get(t.uid))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),e=e.getShimContainer();l.removeAllEvents(e,this.uid),l.removeAllEvents(s&&c.get(s.container),this.uid),l.removeAllEvents(s&&c.get(s.browse_button),this.uid),e&&(e.innerHTML=""),t.removeInstance(this.uid),s=null}})}}),e("moxie/runtime/html5/file/Blob",["moxie/runtime/html5/Runtime","moxie/file/Blob"],function(e,t){return e.Blob=function(){this.slice=function(){return new t(this.getRuntime().uid,function(t,i,n){var e;if(!window.File.prototype.slice)return(e=window.File.prototype.webkitSlice||window.File.prototype.mozSlice)?e.call(t,i,n):null;try{return t.slice(),t.slice(i,n)}catch(e){return t.slice(i,n-i)}}.apply(this,arguments))}}}),e("moxie/runtime/html5/file/FileDrop",["moxie/runtime/html5/Runtime","moxie/file/File","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime"],function(e,r,l,i,d,m){return e.FileDrop=function(){var t,n,o=[],s=[];function a(e){if(e.dataTransfer&&e.dataTransfer.types)return e=l.toArray(e.dataTransfer.types||[]),-1!==l.inArray("Files",e)||-1!==l.inArray("public.file-url",e)||-1!==l.inArray("application/x-moz-file",e)}function u(e,t){var i;i=e,s.length&&(i=m.getFileExtension(i.name))&&-1===l.inArray(i,s)||((i=new r(n,e)).relativePath=t||"",o.push(i))}function c(e,t){var i=[];l.each(e,function(s){i.push(function(e){{var t,n,r;(o=e,(i=s).isFile)?i.file(function(e){u(e,i.fullPath),o()},function(){o()}):i.isDirectory?(t=o,n=[],r=(e=i).createReader(),function t(i){r.readEntries(function(e){e.length?([].push.apply(n,e),t(i)):i()},i)}(function(){c(n,t)})):o()}var i,o})}),l.inSeries(i,function(){t()})}l.extend(this,{init:function(e){var r=this;t=e,n=r.ruid,s=function(e){for(var t=[],i=0;i=")&&E.verComp(E.version,7,"<"),o="Android Browser"===E.browser,s=!1;if(l=e.url.replace(/^.+?\/([\w\-\.]+)$/,"$1").toLowerCase(),(c=!window.XMLHttpRequest||"IE"===E.browser&&E.verComp(E.version,8,"<")?function(){for(var e=["Msxml2.XMLHTTP.6.0","Microsoft.XMLHTTP"],t=0;tthis.length())throw new Error("You are trying to read outside the source boundaries.");for(n=this.littleEndian?0:-8*(t-1),i=r=0;rthis.length())throw new Error("You are trying to write outside the source boundaries.");for(n=this.littleEndian?0:-8*(i-1),r=0;r>Math.abs(n+8*r)&255)},BYTE:function(e){return this.read(e,1)},SHORT:function(e){return this.read(e,2)},LONG:function(e){return this.read(e,4)},SLONG:function(e){e=this.read(e,4);return 2147483647=o.length));i++);},purge:function(){this.headers=s=[]}}}}),e("moxie/runtime/html5/image/ExifParser",["moxie/core/utils/Basic","moxie/runtime/html5/utils/BinaryReader","moxie/core/Exceptions"],function(p,o,g){function s(e){var t,l,h,f,i;if(o.call(this,e),l={tiff:{274:"Orientation",270:"ImageDescription",271:"Make",272:"Model",305:"Software",34665:"ExifIFDPointer",34853:"GPSInfoIFDPointer"},exif:{36864:"ExifVersion",40961:"ColorSpace",40962:"PixelXDimension",40963:"PixelYDimension",36867:"DateTimeOriginal",33434:"ExposureTime",33437:"FNumber",34855:"ISOSpeedRatings",37377:"ShutterSpeedValue",37378:"ApertureValue",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",41986:"ExposureMode",41987:"WhiteBalance",41990:"SceneCaptureType",41988:"DigitalZoomRatio",41992:"Contrast",41993:"Saturation",41994:"Sharpness"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude"},thumb:{513:"JPEGInterchangeFormat",514:"JPEGInterchangeFormatLength"}},h={ColorSpace:{1:"sRGB",0:"Uncalibrated"},MeteringMode:{0:"Unknown",1:"Average",2:"CenterWeightedAverage",3:"Spot",4:"MultiSpot",5:"Pattern",6:"Partial",255:"Other"},LightSource:{1:"Daylight",2:"Fliorescent",3:"Tungsten",4:"Flash",9:"Fine weather",10:"Cloudy weather",11:"Shade",12:"Daylight fluorescent (D 5700 - 7100K)",13:"Day white fluorescent (N 4600 -5400K)",14:"Cool white fluorescent (W 3900 - 4500K)",15:"White fluorescent (WW 3200 - 3700K)",17:"Standard light A",18:"Standard light B",19:"Standard light C",20:"D55",21:"D65",22:"D75",23:"D50",24:"ISO studio tungsten",255:"Other"},Flash:{0:"Flash did not fire",1:"Flash fired",5:"Strobe return light not detected",7:"Strobe return light detected",9:"Flash fired, compulsory flash mode",13:"Flash fired, compulsory flash mode, return light not detected",15:"Flash fired, compulsory flash mode, return light detected",16:"Flash did not fire, compulsory flash mode",24:"Flash did not fire, auto mode",25:"Flash fired, auto mode",29:"Flash fired, auto mode, return light not detected",31:"Flash fired, auto mode, return light detected",32:"No flash function",65:"Flash fired, red-eye reduction mode",69:"Flash fired, red-eye reduction mode, return light not detected",71:"Flash fired, red-eye reduction mode, return light detected",73:"Flash fired, compulsory flash mode, red-eye reduction mode",77:"Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",79:"Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",89:"Flash fired, auto mode, red-eye reduction mode",93:"Flash fired, auto mode, return light not detected, red-eye reduction mode",95:"Flash fired, auto mode, return light detected, red-eye reduction mode"},ExposureMode:{0:"Auto exposure",1:"Manual exposure",2:"Auto bracket"},WhiteBalance:{0:"Auto white balance",1:"Manual white balance"},SceneCaptureType:{0:"Standard",1:"Landscape",2:"Portrait",3:"Night scene"},Contrast:{0:"Normal",1:"Soft",2:"Hard"},Saturation:{0:"Normal",1:"Low saturation",2:"High saturation"},Sharpness:{0:"Normal",1:"Soft",2:"Hard"},GPSLatitudeRef:{N:"North latitude",S:"South latitude"},GPSLongitudeRef:{E:"East longitude",W:"West longitude"}},n=(f={tiffHeader:10}).tiffHeader,t={clear:this.clear},p.extend(this,{read:function(){try{return s.prototype.read.apply(this,arguments)}catch(e){throw new g.ImageError(g.ImageError.INVALID_META_ERR)}},write:function(){try{return s.prototype.write.apply(this,arguments)}catch(e){throw new g.ImageError(g.ImageError.INVALID_META_ERR)}},UNDEFINED:function(){return this.BYTE.apply(this,arguments)},RATIONAL:function(e){return this.LONG(e)/this.LONG(e+4)},SRATIONAL:function(e){return this.SLONG(e)/this.SLONG(e+4)},ASCII:function(e){return this.CHAR(e)},TIFF:function(){return i||null},EXIF:function(){var e=null;if(f.exifIFD){try{e=r.call(this,f.exifIFD,l.exif)}catch(e){return null}if(e.ExifVersion&&"array"===p.typeOf(e.ExifVersion)){for(var t=0,i="";t=this.length())throw new g.ImageError(g.ImageError.INVALID_META_ERR);"ASCII"===o?u[i]=p.trim(a.STRING(r,n).replace(/\0$/,"")):(s=a.asArray(o,r,n),o=1==n?s[0]:s,h.hasOwnProperty(i)&&"object"!=typeof o?u[i]=h[i][o]:u[i]=o)}return u}n&&(f.IFD1=f.tiffHeader+n)}return s.prototype=o.prototype,s}),e("moxie/runtime/html5/image/JPEG",["moxie/core/utils/Basic","moxie/core/Exceptions","moxie/runtime/html5/image/JPEGHeaders","moxie/runtime/html5/utils/BinaryReader","moxie/runtime/html5/image/ExifParser"],function(s,a,u,c,l){return function(e){var i,n,t,r=new c(e);if(65496!==r.SHORT(0))throw new a.ImageError(a.ImageError.WRONG_FORMAT);i=new u(e);try{n=new l(i.get("app1")[0])}catch(e){}function o(e){var t,i=0;for(e=e||r;i<=e.length();){if(65472<=(t=e.SHORT(i+=2))&&t<=65475)return i+=5,{height:e.SHORT(i),width:e.SHORT(i+=2)};t=e.SHORT(i+=2),i+=t-2}return null}t=o.call(this),s.extend(this,{type:"image/jpeg",size:r.length(),width:t&&t.width||0,height:t&&t.height||0,setExif:function(e,t){if(!n)return!1;"object"===s.typeOf(e)?s.each(e,function(e,t){n.setExif(t,e)}):n.setExif(e,t),i.set("app1",n.SEGMENT())},writeHeaders:function(){return arguments.length?i.restore(arguments[0]):i.restore(e)},stripHeaders:function(e){return i.strip(e)},purge:function(){!function(){n&&i&&r&&(n.clear(),i.purge(),r.clear(),t=i=n=r=null)}.call(this)}}),n&&(this.meta={tiff:n.TIFF(),exif:n.EXIF(),gps:n.GPS(),thumb:function(){var e,t,i=n.thumb();if(i&&(e=new c(i),t=o(e),e.clear(),t))return t.data=i,t;return null}()})}}),e("moxie/runtime/html5/image/PNG",["moxie/core/Exceptions","moxie/core/utils/Basic","moxie/runtime/html5/utils/BinaryReader"],function(a,u,c){return function(e){for(var t,r=new c(e),i=0,n=0,o=[35152,20039,3338,6666],n=0;n>1;i=null;e=a/t;return 0==e?1:e}(e,r),f=0;f=")||"IE"===a.browser&&a.verComp(a.version,10,">=")||"Safari"===a.browser&&a.verComp(a.version,7,">=")),resize_image:function(){return u.Image&&i.can("access_binary")&&a.can("create_canvas")},report_upload_progress:!1,return_response_headers:!1,return_response_type:function(e){return!("json"!==e||!window.JSON)||!!~o.inArray(e,["text","document",""])},return_status_code:function(e){return!o.arrayDiff(e,[200,404])},select_file:function(){return a.can("use_fileinput")},select_multiple:!1,send_binary_string:!1,send_custom_headers:!1,send_multipart:!0,slice_blob:!1,stream_upload:function(){return i.can("select_file")},summon_file_dialog:function(){return i.can("select_file")&&("Firefox"===a.browser&&a.verComp(a.version,4,">=")||"Opera"===a.browser&&a.verComp(a.version,12,">=")||"IE"===a.browser&&a.verComp(a.version,10,">=")||!!~o.inArray(a.browser,["Chrome","Safari"]))},upload_filesize:r,use_http_method:function(e){return!o.arrayDiff(e,["GET","POST"])}}),o.extend(this,{init:function(){this.trigger("Init")},destroy:(t=this.destroy,function(){t.call(i),t=i=null})}),o.extend(this.getShim(),u)}),u}),e("moxie/runtime/html4/file/FileInput",["moxie/runtime/html4/Runtime","moxie/file/File","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Events","moxie/core/utils/Mime","moxie/core/utils/Env"],function(e,d,m,h,f,s,p){return e.FileInput=function(){var a,u,c=[];function l(){var e,t,i,n=this,r=n.getRuntime(),o=m.guid("uid_"),s=r.getShimContainer();a&&(e=h.get(a+"_form"))&&m.extend(e.style,{top:"100%"}),(t=document.createElement("form")).setAttribute("id",o+"_form"),t.setAttribute("method","post"),t.setAttribute("enctype","multipart/form-data"),t.setAttribute("encoding","multipart/form-data"),m.extend(t.style,{overflow:"hidden",position:"absolute",top:0,left:0,width:"100%",height:"100%"}),(i=document.createElement("input")).setAttribute("id",o),i.setAttribute("type","file"),i.setAttribute("name",u.name||"Filedata"),i.setAttribute("accept",c.join(",")),m.extend(i.style,{fontSize:"999px",opacity:0}),t.appendChild(i),s.appendChild(t),m.extend(i.style,{position:"absolute",top:0,left:0,width:"100%",height:"100%"}),"IE"===p.browser&&p.verComp(p.version,10,"<")&&m.extend(i.style,{filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=0)"}),i.onchange=function(){var e;if(this.value){if(this.files){if(0===(e=this.files[0]).size)return void t.parentNode.removeChild(t)}else e={name:this.value};e=new d(r.uid,e),this.onchange=function(){},l.call(n),n.files=[e],i.setAttribute("id",e.uid),t.setAttribute("id",e.uid+"_form"),n.trigger("change"),i=t=null}},r.can("summon_file_dialog")&&(e=h.get(u.browse_button),f.removeEvent(e,"click",n.uid),f.addEvent(e,"click",function(e){i&&!i.disabled&&i.click(),e.preventDefault()},n.uid)),a=o}m.extend(this,{init:function(e){var t,i,n,r=this,o=r.getRuntime();c=(u=e).accept.mimes||s.extList2mimes(e.accept,o.can("filter_by_extension")),t=o.getShimContainer(),n=h.get(e.browse_button),o.can("summon_file_dialog")&&("static"===h.getStyle(n,"position")&&(n.style.position="relative"),i=parseInt(h.getStyle(n,"z-index"),10)||1,n.style.zIndex=i,t.style.zIndex=i-1),i=o.can("summon_file_dialog")?n:t,f.addEvent(i,"mouseover",function(){r.trigger("mouseenter")},r.uid),f.addEvent(i,"mouseout",function(){r.trigger("mouseleave")},r.uid),f.addEvent(i,"mousedown",function(){r.trigger("mousedown")},r.uid),f.addEvent(h.get(e.container),"mouseup",function(){r.trigger("mouseup")},r.uid),l.call(this),t=null,r.trigger({type:"ready",async:!0})},disable:function(e){var t;(t=h.get(a))&&(t.disabled=!!e)},destroy:function(){var e=this.getRuntime(),t=e.getShim(),e=e.getShimContainer();f.removeAllEvents(e,this.uid),f.removeAllEvents(u&&h.get(u.container),this.uid),f.removeAllEvents(u&&h.get(u.browse_button),this.uid),e&&(e.innerHTML=""),t.removeInstance(this.uid),a=c=u=null}})}}),e("moxie/runtime/html4/file/FileReader",["moxie/runtime/html4/Runtime","moxie/runtime/html5/file/FileReader"],function(e,t){return e.FileReader=t}),e("moxie/runtime/html4/xhr/XMLHttpRequest",["moxie/runtime/html4/Runtime","moxie/core/utils/Basic","moxie/core/utils/Dom","moxie/core/utils/Url","moxie/core/Exceptions","moxie/core/utils/Events","moxie/file/Blob","moxie/xhr/FormData"],function(e,m,h,f,p,g,x,E){return e.XMLHttpRequest=function(){var u,c,l;function d(t){var e,i,n,r=this,o=!1;if(l){if(e=l.id.replace(/_iframe$/,""),e=h.get(e+"_form")){for(n=(i=e.getElementsByTagName("input")).length;n--;)switch(i[n].getAttribute("type")){case"hidden":i[n].parentNode.removeChild(i[n]);break;case"file":o=!0}i=[],o||e.parentNode.removeChild(e),e=null}setTimeout(function(){g.removeEvent(l,"load",r.uid),l.parentNode&&l.parentNode.removeChild(l);var e=r.getRuntime().getShimContainer();e.children.length||e.parentNode.removeChild(e),e=l=null,t()},1)}}m.extend(this,{send:function(t,e){var i,n,r,o,s=this,a=s.getRuntime();if(u=c=null,e instanceof E&&e.hasBlob()){if(o=e.getBlob(),i=o.uid,r=h.get(i),!(n=h.get(i+"_form")))throw new p.DOMException(p.DOMException.NOT_FOUND_ERR)}else i=m.guid("uid_"),(n=document.createElement("form")).setAttribute("id",i+"_form"),n.setAttribute("method",t.method),n.setAttribute("enctype","multipart/form-data"),n.setAttribute("encoding","multipart/form-data"),a.getShimContainer().appendChild(n);n.setAttribute("target",i+"_iframe"),e instanceof E&&e.each(function(e,t){var i;e instanceof x?r&&r.setAttribute("name",t):(i=document.createElement("input"),m.extend(i,{type:"hidden",name:t,value:e}),r?n.insertBefore(i,r):n.appendChild(i))}),n.setAttribute("action",t.url),e=a.getShimContainer()||document.body,(a=document.createElement("div")).innerHTML='',l=a.firstChild,e.appendChild(l),g.addEvent(l,"load",function(){var e;try{e=l.contentWindow.document||l.contentDocument||window.frames[l.id].document,/^4(0[0-9]|1[0-7]|2[2346])\s/.test(e.title)?u=e.title.replace(/^(\d+).*$/,"$1"):(u=200,c=m.trim(e.body.innerHTML),s.trigger({type:"progress",loaded:c.length,total:c.length}),o&&s.trigger({type:"uploadprogress",loaded:o.size||1025,total:o.size||1025}))}catch(e){if(!f.hasSameOrigin(t.url))return void d.call(s,function(){s.trigger("error")});u=404}d.call(s,function(){s.trigger("load")})},s.uid),n.submit(),s.trigger("loadstart")},getStatus:function(){return u},getResponse:function(e){if("json"===e&&"string"===m.typeOf(c)&&window.JSON)try{return JSON.parse(c.replace(/^\s*]*>/,"").replace(/<\/pre>\s*$/,""))}catch(e){return null}return c},abort:function(){var e=this;l&&l.contentWindow&&(l.contentWindow.stop?l.contentWindow.stop():l.contentWindow.document.execCommand?l.contentWindow.document.execCommand("Stop"):l.src="about:blank"),d.call(this,function(){e.dispatchEvent("abort")})}})}}),e("moxie/runtime/html4/image/Image",["moxie/runtime/html4/Runtime","moxie/runtime/html5/image/Image"],function(e,t){return e.Image=t});for(var t=["moxie/core/utils/Basic","moxie/core/utils/Env","moxie/core/I18n","moxie/core/utils/Mime","moxie/core/utils/Dom","moxie/core/Exceptions","moxie/core/EventTarget","moxie/runtime/Runtime","moxie/runtime/RuntimeClient","moxie/file/FileInput","moxie/core/utils/Encode","moxie/file/Blob","moxie/file/File","moxie/file/FileDrop","moxie/file/FileReader","moxie/core/utils/Url","moxie/runtime/RuntimeTarget","moxie/file/FileReaderSync","moxie/xhr/FormData","moxie/xhr/XMLHttpRequest","moxie/runtime/Transporter","moxie/image/Image","moxie/core/utils/Events"],i=0;i' ) .attr( 'id', 'media-item-' + fileObj.id ) .addClass( 'child-of-' + postid ) .append( jQuery( '
        ' ).text( ' ' + fileObj.name ), '
        0%
        ' ) .appendTo( jQuery( '#media-items' ) ); // Disable submit. jQuery( '#insert-gallery' ).prop( 'disabled', true ); } function uploadStart() { try { if ( typeof topWin.tb_remove != 'undefined' ) topWin.jQuery( '#TB_overlay' ).unbind( 'click', topWin.tb_remove ); } catch( e ){} return true; } function uploadProgress( up, file ) { var item = jQuery( '#media-item-' + file.id ); jQuery( '.bar', item ).width( ( 200 * file.loaded ) / file.size ); jQuery( '.percent', item ).html( file.percent + '%' ); } // Check to see if a large file failed to upload. function fileUploading( up, file ) { var hundredmb = 100 * 1024 * 1024, max = parseInt( up.settings.max_file_size, 10 ); if ( max > hundredmb && file.size > hundredmb ) { setTimeout( function() { if ( file.status < 3 && file.loaded === 0 ) { // Not uploading. wpFileError( file, pluploadL10n.big_upload_failed.replace( '%1$s', '' ).replace( '%2$s', '' ) ); up.stop(); // Stop the whole queue. up.removeFile( file ); up.start(); // Restart the queue. } }, 10000 ); // Wait for 10 seconds for the file to start uploading. } } function updateMediaForm() { var items = jQuery( '#media-items' ).children(); // Just one file, no need for collapsible part. if ( items.length == 1 ) { items.addClass( 'open' ).find( '.slidetoggle' ).show(); jQuery( '.insert-gallery' ).hide(); } else if ( items.length > 1 ) { items.removeClass( 'open' ); // Only show Gallery/Playlist buttons when there are at least two files. jQuery( '.insert-gallery' ).show(); } // Only show Save buttons when there is at least one file. if ( items.not( '.media-blank' ).length > 0 ) jQuery( '.savebutton' ).show(); else jQuery( '.savebutton' ).hide(); } function uploadSuccess( fileObj, serverData ) { var item = jQuery( '#media-item-' + fileObj.id ); // On success serverData should be numeric, // fix bug in html4 runtime returning the serverData wrapped in a
         tag.
        	if ( typeof serverData === 'string' ) {
        		serverData = serverData.replace( /^
        (\d+)<\/pre>$/, '$1' );
        
        		// If async-upload returned an error message, place it in the media item div and return.
        		if ( /media-upload-error|error-div/.test( serverData ) ) {
        			item.html( serverData );
        			return;
        		}
        	}
        
        	item.find( '.percent' ).html( pluploadL10n.crunching );
        
        	prepareMediaItem( fileObj, serverData );
        	updateMediaForm();
        
        	// Increment the counter.
        	if ( post_id && item.hasClass( 'child-of-' + post_id ) ) {
        		jQuery( '#attachments-count' ).text( 1 * jQuery( '#attachments-count' ).text() + 1 );
        	}
        }
        
        function setResize( arg ) {
        	if ( arg ) {
        		if ( window.resize_width && window.resize_height ) {
        			uploader.settings.resize = {
        				enabled: true,
        				width: window.resize_width,
        				height: window.resize_height,
        				quality: 100
        			};
        		} else {
        			uploader.settings.multipart_params.image_resize = true;
        		}
        	} else {
        		delete( uploader.settings.multipart_params.image_resize );
        	}
        }
        
        function prepareMediaItem( fileObj, serverData ) {
        	var f = ( typeof shortform == 'undefined' ) ? 1 : 2, item = jQuery( '#media-item-' + fileObj.id );
        	if ( f == 2 && shortform > 2 )
        		f = shortform;
        
        	try {
        		if ( typeof topWin.tb_remove != 'undefined' )
        			topWin.jQuery( '#TB_overlay' ).click( topWin.tb_remove );
        	} catch( e ){}
        
        	if ( isNaN( serverData ) || !serverData ) {
        		// Old style: Append the HTML returned by the server -- thumbnail and form inputs.
        		item.append( serverData );
        		prepareMediaItemInit( fileObj );
        	} else {
        		// New style: server data is just the attachment ID, fetch the thumbnail and form html from the server.
        		item.load( 'async-upload.php', {attachment_id:serverData, fetch:f}, function(){prepareMediaItemInit( fileObj );updateMediaForm();});
        	}
        }
        
        function prepareMediaItemInit( fileObj ) {
        	var item = jQuery( '#media-item-' + fileObj.id );
        	// Clone the thumbnail as a "pinkynail" -- a tiny image to the left of the filename.
        	jQuery( '.thumbnail', item ).clone().attr( 'class', 'pinkynail toggle' ).prependTo( item );
        
        	// Replace the original filename with the new (unique) one assigned during upload.
        	jQuery( '.filename.original', item ).replaceWith( jQuery( '.filename.new', item ) );
        
        	// Bind Ajax to the new Delete button.
        	jQuery( 'a.delete', item ).on( 'click', function(){
        		// Tell the server to delete it. TODO: Handle exceptions.
        		jQuery.ajax({
        			url: ajaxurl,
        			type: 'post',
        			success: deleteSuccess,
        			error: deleteError,
        			id: fileObj.id,
        			data: {
        				id : this.id.replace(/[^0-9]/g, '' ),
        				action : 'trash-post',
        				_ajax_nonce : this.href.replace(/^.*wpnonce=/,'' )
        			}
        		});
        		return false;
        	});
        
        	// Bind Ajax to the new Undo button.
        	jQuery( 'a.undo', item ).on( 'click', function(){
        		// Tell the server to untrash it. TODO: Handle exceptions.
        		jQuery.ajax({
        			url: ajaxurl,
        			type: 'post',
        			id: fileObj.id,
        			data: {
        				id : this.id.replace(/[^0-9]/g,'' ),
        				action: 'untrash-post',
        				_ajax_nonce: this.href.replace(/^.*wpnonce=/,'' )
        			},
        			success: function( ){
        				var type,
        					item = jQuery( '#media-item-' + fileObj.id );
        
        				if ( type = jQuery( '#type-of-' + fileObj.id ).val() )
        					jQuery( '#' + type + '-counter' ).text( jQuery( '#' + type + '-counter' ).text()-0+1 );
        
        				if ( post_id && item.hasClass( 'child-of-'+post_id ) )
        					jQuery( '#attachments-count' ).text( jQuery( '#attachments-count' ).text()-0+1 );
        
        				jQuery( '.filename .trashnotice', item ).remove();
        				jQuery( '.filename .title', item ).css( 'font-weight','normal' );
        				jQuery( 'a.undo', item ).addClass( 'hidden' );
        				jQuery( '.menu_order_input', item ).show();
        				item.css( {backgroundColor:'#ceb'} ).animate( {backgroundColor: '#fff'}, { queue: false, duration: 500, complete: function(){ jQuery( this ).css({backgroundColor:''}); } }).removeClass( 'undo' );
        			}
        		});
        		return false;
        	});
        
        	// Open this item if it says to start open (e.g. to display an error).
        	jQuery( '#media-item-' + fileObj.id + '.startopen' ).removeClass( 'startopen' ).addClass( 'open' ).find( 'slidetoggle' ).fadeIn();
        }
        
        // Generic error message.
        function wpQueueError( message ) {
        	jQuery( '#media-upload-error' ).show().html( '

        ' + message + '

        ' ); } // File-specific error messages. function wpFileError( fileObj, message ) { itemAjaxError( fileObj.id, message ); } function itemAjaxError( id, message ) { var item = jQuery( '#media-item-' + id ), filename = item.find( '.filename' ).text(), last_err = item.data( 'last-err' ); if ( last_err == id ) // Prevent firing an error for the same file twice. return; item.html( '
        ' + '' + pluploadL10n.dismiss + '' + '' + pluploadL10n.error_uploading.replace( '%s', jQuery.trim( filename )) + ' ' + message + '
        ' ).data( 'last-err', id ); } function deleteSuccess( data ) { var type, id, item; if ( data == '-1' ) return itemAjaxError( this.id, 'You do not have permission. Has your session expired?' ); if ( data == '0' ) return itemAjaxError( this.id, 'Could not be deleted. Has it been deleted already?' ); id = this.id; item = jQuery( '#media-item-' + id ); // Decrement the counters. if ( type = jQuery( '#type-of-' + id ).val() ) jQuery( '#' + type + '-counter' ).text( jQuery( '#' + type + '-counter' ).text() - 1 ); if ( post_id && item.hasClass( 'child-of-'+post_id ) ) jQuery( '#attachments-count' ).text( jQuery( '#attachments-count' ).text() - 1 ); if ( jQuery( 'form.type-form #media-items' ).children().length == 1 && jQuery( '.hidden', '#media-items' ).length > 0 ) { jQuery( '.toggle' ).toggle(); jQuery( '.slidetoggle' ).slideUp( 200 ).siblings().removeClass( 'hidden' ); } // Vanish it. jQuery( '.toggle', item ).toggle(); jQuery( '.slidetoggle', item ).slideUp( 200 ).siblings().removeClass( 'hidden' ); item.css( {backgroundColor:'#faa'} ).animate( {backgroundColor:'#f4f4f4'}, {queue:false, duration:500} ).addClass( 'undo' ); jQuery( '.filename:empty', item ).remove(); jQuery( '.filename .title', item ).css( 'font-weight','bold' ); jQuery( '.filename', item ).append( ' ' + pluploadL10n.deleted + ' ' ).siblings( 'a.toggle' ).hide(); jQuery( '.filename', item ).append( jQuery( 'a.undo', item ).removeClass( 'hidden' ) ); jQuery( '.menu_order_input', item ).hide(); return; } function deleteError() { } function uploadComplete() { jQuery( '#insert-gallery' ).prop( 'disabled', false ); } function switchUploader( s ) { if ( s ) { deleteUserSetting( 'uploader' ); jQuery( '.media-upload-form' ).removeClass( 'html-uploader' ); if ( typeof( uploader ) == 'object' ) uploader.refresh(); } else { setUserSetting( 'uploader', '1' ); // 1 == html uploader. jQuery( '.media-upload-form' ).addClass( 'html-uploader' ); } } function uploadError( fileObj, errorCode, message, up ) { var hundredmb = 100 * 1024 * 1024, max; switch ( errorCode ) { case plupload.FAILED: wpFileError( fileObj, pluploadL10n.upload_failed ); break; case plupload.FILE_EXTENSION_ERROR: wpFileExtensionError( up, fileObj, pluploadL10n.invalid_filetype ); break; case plupload.FILE_SIZE_ERROR: uploadSizeError( up, fileObj ); break; case plupload.IMAGE_FORMAT_ERROR: wpFileError( fileObj, pluploadL10n.not_an_image ); break; case plupload.IMAGE_MEMORY_ERROR: wpFileError( fileObj, pluploadL10n.image_memory_exceeded ); break; case plupload.IMAGE_DIMENSIONS_ERROR: wpFileError( fileObj, pluploadL10n.image_dimensions_exceeded ); break; case plupload.GENERIC_ERROR: wpQueueError( pluploadL10n.upload_failed ); break; case plupload.IO_ERROR: max = parseInt( up.settings.filters.max_file_size, 10 ); if ( max > hundredmb && fileObj.size > hundredmb ) { wpFileError( fileObj, pluploadL10n.big_upload_failed.replace( '%1$s', '' ).replace( '%2$s', '' ) ); } else { wpQueueError( pluploadL10n.io_error ); } break; case plupload.HTTP_ERROR: wpQueueError( pluploadL10n.http_error ); break; case plupload.INIT_ERROR: jQuery( '.media-upload-form' ).addClass( 'html-uploader' ); break; case plupload.SECURITY_ERROR: wpQueueError( pluploadL10n.security_error ); break; /* case plupload.UPLOAD_ERROR.UPLOAD_STOPPED: case plupload.UPLOAD_ERROR.FILE_CANCELLED: jQuery( '#media-item-' + fileObj.id ).remove(); break;*/ default: wpFileError( fileObj, pluploadL10n.default_error ); } } function uploadSizeError( up, file ) { var message, errorDiv; message = pluploadL10n.file_exceeds_size_limit.replace( '%s', file.name ); // Construct the error div. errorDiv = jQuery( '
        ' ) .attr( { 'id': 'media-item-' + file.id, 'class': 'media-item error' } ) .append( jQuery( '

        ' ) .text( message ) ); // Append the error. jQuery( '#media-items' ).append( errorDiv ); up.removeFile( file ); } function wpFileExtensionError( up, file, message ) { jQuery( '#media-items' ).append( '

        ' + message + '

        ' ); up.removeFile( file ); } /** * Copies the attachment URL to the clipboard. * * @since 5.8.0 * * @param {MouseEvent} event A click event. * * @return {void} */ function copyAttachmentUploadURLClipboard() { var clipboard = new ClipboardJS( '.copy-attachment-url' ), successTimeout; clipboard.on( 'success', function( event ) { var triggerElement = jQuery( event.trigger ), successElement = jQuery( '.success', triggerElement.closest( '.copy-to-clipboard-container' ) ); // Clear the selection and move focus back to the trigger. event.clearSelection(); // Show success visual feedback. clearTimeout( successTimeout ); successElement.removeClass( 'hidden' ); // Hide success visual feedback after 3 seconds since last success. successTimeout = setTimeout( function() { successElement.addClass( 'hidden' ); }, 3000 ); // Handle success audible feedback. wp.a11y.speak( pluploadL10n.file_url_copied ); } ); } jQuery( document ).ready( function( $ ) { copyAttachmentUploadURLClipboard(); var tryAgainCount = {}; var tryAgain; $( '.media-upload-form' ).on( 'click.uploader', function( e ) { var target = $( e.target ), tr, c; if ( target.is( 'input[type="radio"]' ) ) { // Remember the last used image size and alignment. tr = target.closest( 'tr' ); if ( tr.hasClass( 'align' ) ) setUserSetting( 'align', target.val() ); else if ( tr.hasClass( 'image-size' ) ) setUserSetting( 'imgsize', target.val() ); } else if ( target.is( 'button.button' ) ) { // Remember the last used image link url. c = e.target.className || ''; c = c.match( /url([^ '"]+)/ ); if ( c && c[1] ) { setUserSetting( 'urlbutton', c[1] ); target.siblings( '.urlfield' ).val( target.data( 'link-url' ) ); } } else if ( target.is( 'a.dismiss' ) ) { target.parents( '.media-item' ).fadeOut( 200, function() { $( this ).remove(); } ); } else if ( target.is( '.upload-flash-bypass a' ) || target.is( 'a.uploader-html' ) ) { // Switch uploader to html4. $( '#media-items, p.submit, span.big-file-warning' ).css( 'display', 'none' ); switchUploader( 0 ); e.preventDefault(); } else if ( target.is( '.upload-html-bypass a' ) ) { // Switch uploader to multi-file. $( '#media-items, p.submit, span.big-file-warning' ).css( 'display', '' ); switchUploader( 1 ); e.preventDefault(); } else if ( target.is( 'a.describe-toggle-on' ) ) { // Show. target.parent().addClass( 'open' ); target.siblings( '.slidetoggle' ).fadeIn( 250, function() { var S = $( window ).scrollTop(), H = $( window ).height(), top = $( this ).offset().top, h = $( this ).height(), b, B; if ( H && top && h ) { b = top + h; B = S + H; if ( b > B ) { if ( b - B < top - S ) window.scrollBy( 0, ( b - B ) + 10 ); else window.scrollBy( 0, top - S - 40 ); } } } ); e.preventDefault(); } else if ( target.is( 'a.describe-toggle-off' ) ) { // Hide. target.siblings( '.slidetoggle' ).fadeOut( 250, function() { target.parent().removeClass( 'open' ); } ); e.preventDefault(); } }); // Attempt to create image sub-sizes when an image was uploaded successfully // but the server responded with an HTTP 5xx error. tryAgain = function( up, error ) { var file = error.file; var times; var id; if ( ! error || ! error.responseHeaders ) { wpQueueError( pluploadL10n.http_error_image ); return; } id = error.responseHeaders.match( /x-wp-upload-attachment-id:\s*(\d+)/i ); if ( id && id[1] ) { id = id[1]; } else { wpQueueError( pluploadL10n.http_error_image ); return; } times = tryAgainCount[ file.id ]; if ( times && times > 4 ) { /* * The file may have been uploaded and attachment post created, * but post-processing and resizing failed... * Do a cleanup then tell the user to scale down the image and upload it again. */ $.ajax({ type: 'post', url: ajaxurl, dataType: 'json', data: { action: 'media-create-image-subsizes', _wpnonce: wpUploaderInit.multipart_params._wpnonce, attachment_id: id, _wp_upload_failed_cleanup: true, } }); if ( error.message && ( error.status < 500 || error.status >= 600 ) ) { wpQueueError( error.message ); } else { wpQueueError( pluploadL10n.http_error_image ); } return; } if ( ! times ) { tryAgainCount[ file.id ] = 1; } else { tryAgainCount[ file.id ] = ++times; } // Try to create the missing image sizes. $.ajax({ type: 'post', url: ajaxurl, dataType: 'json', data: { action: 'media-create-image-subsizes', _wpnonce: wpUploaderInit.multipart_params._wpnonce, attachment_id: id, _legacy_support: 'true', } }).done( function( response ) { var message; if ( response.success ) { uploadSuccess( file, response.data.id ); } else { if ( response.data && response.data.message ) { message = response.data.message; } wpQueueError( message || pluploadL10n.http_error_image ); } }).fail( function( jqXHR ) { // If another HTTP 5xx error, try try again... if ( jqXHR.status >= 500 && jqXHR.status < 600 ) { tryAgain( up, error ); return; } wpQueueError( pluploadL10n.http_error_image ); }); } // Init and set the uploader. uploader_init = function() { uploader = new plupload.Uploader( wpUploaderInit ); $( '#image_resize' ).on( 'change', function() { var arg = $( this ).prop( 'checked' ); setResize( arg ); if ( arg ) setUserSetting( 'upload_resize', '1' ); else deleteUserSetting( 'upload_resize' ); }); uploader.bind( 'Init', function( up ) { var uploaddiv = $( '#plupload-upload-ui' ); setResize( getUserSetting( 'upload_resize', false ) ); if ( up.features.dragdrop && ! $( document.body ).hasClass( 'mobile' ) ) { uploaddiv.addClass( 'drag-drop' ); $( '#drag-drop-area' ).on( 'dragover.wp-uploader', function() { // dragenter doesn't fire right :( uploaddiv.addClass( 'drag-over' ); }).on( 'dragleave.wp-uploader, drop.wp-uploader', function() { uploaddiv.removeClass( 'drag-over' ); }); } else { uploaddiv.removeClass( 'drag-drop' ); $( '#drag-drop-area' ).off( '.wp-uploader' ); } if ( up.runtime === 'html4' ) { $( '.upload-flash-bypass' ).hide(); } }); uploader.bind( 'postinit', function( up ) { up.refresh(); }); uploader.init(); uploader.bind( 'FilesAdded', function( up, files ) { $( '#media-upload-error' ).empty(); uploadStart(); plupload.each( files, function( file ) { if ( file.type === 'image/heic' && up.settings.heic_upload_error ) { // Show error but do not block uploading. wpQueueError( pluploadL10n.unsupported_image ); } else if ( file.type === 'image/webp' && up.settings.webp_upload_error ) { // Disallow uploading of WebP images if the server cannot edit them. wpQueueError( pluploadL10n.noneditable_image ); up.removeFile( file ); return; } else if ( file.type === 'image/avif' && up.settings.avif_upload_error ) { // Disallow uploading of AVIF images if the server cannot edit them. wpQueueError( pluploadL10n.noneditable_image ); up.removeFile( file ); return; } fileQueued( file ); }); up.refresh(); up.start(); }); uploader.bind( 'UploadFile', function( up, file ) { fileUploading( up, file ); }); uploader.bind( 'UploadProgress', function( up, file ) { uploadProgress( up, file ); }); uploader.bind( 'Error', function( up, error ) { var isImage = error.file && error.file.type && error.file.type.indexOf( 'image/' ) === 0; var status = error && error.status; // If the file is an image and the error is HTTP 5xx try to create sub-sizes again. if ( isImage && status >= 500 && status < 600 ) { tryAgain( up, error ); return; } uploadError( error.file, error.code, error.message, up ); up.refresh(); }); uploader.bind( 'FileUploaded', function( up, file, response ) { uploadSuccess( file, response.response ); }); uploader.bind( 'UploadComplete', function() { uploadComplete(); }); }; if ( typeof( wpUploaderInit ) == 'object' ) { uploader_init(); } }); plupload/handlers.min.js000064400000027254152335011310011310 0ustar00var uploader,uploader_init,topWin=window.dialogArguments||opener||parent||top;function fileQueued(e){jQuery(".media-blank").remove();var a=jQuery("#media-items").children(),r=post_id||0;1==a.length&&a.removeClass("open").find(".slidetoggle").slideUp(200),jQuery('
        ').attr("id","media-item-"+e.id).addClass("child-of-"+r).append(jQuery('
        ').text(" "+e.name),'
        0%
        ').appendTo(jQuery("#media-items")),jQuery("#insert-gallery").prop("disabled",!0)}function uploadStart(){try{void 0!==topWin.tb_remove&&topWin.jQuery("#TB_overlay").unbind("click",topWin.tb_remove)}catch(e){}return!0}function uploadProgress(e,a){var r=jQuery("#media-item-"+a.id);jQuery(".bar",r).width(200*a.loaded/a.size),jQuery(".percent",r).html(a.percent+"%")}function fileUploading(e,a){var r=104857600;rr&&setTimeout(function(){a.status<3&&0===a.loaded&&(wpFileError(a,pluploadL10n.big_upload_failed.replace("%1$s",'').replace("%2$s","")),e.stop(),e.removeFile(a),e.start())},1e4)}function updateMediaForm(){var e=jQuery("#media-items").children();1==e.length?(e.addClass("open").find(".slidetoggle").show(),jQuery(".insert-gallery").hide()):1(\d+)<\/pre>$/,"$1"),/media-upload-error|error-div/.test(a))?r.html(a):(r.find(".percent").html(pluploadL10n.crunching),prepareMediaItem(e,a),updateMediaForm(),post_id&&r.hasClass("child-of-"+post_id)&&jQuery("#attachments-count").text(+jQuery("#attachments-count").text()+1))}function setResize(e){e?window.resize_width&&window.resize_height?uploader.settings.resize={enabled:!0,width:window.resize_width,height:window.resize_height,quality:100}:uploader.settings.multipart_params.image_resize=!0:delete uploader.settings.multipart_params.image_resize}function prepareMediaItem(e,a){var r="undefined"==typeof shortform?1:2,i=jQuery("#media-item-"+e.id);2==r&&2

        '+e+"

        ")}function wpFileError(e,a){itemAjaxError(e.id,a)}function itemAjaxError(e,a){var r=jQuery("#media-item-"+e),i=r.find(".filename").text();r.data("last-err")!=e&&r.html('
        '+pluploadL10n.dismiss+""+pluploadL10n.error_uploading.replace("%s",jQuery.trim(i))+" "+a+"
        ").data("last-err",e)}function deleteSuccess(e){var a;return"-1"==e?itemAjaxError(this.id,"You do not have permission. Has your session expired?"):"0"==e?itemAjaxError(this.id,"Could not be deleted. Has it been deleted already?"):(e=this.id,a=jQuery("#media-item-"+e),(e=jQuery("#type-of-"+e).val())&&jQuery("#"+e+"-counter").text(jQuery("#"+e+"-counter").text()-1),post_id&&a.hasClass("child-of-"+post_id)&&jQuery("#attachments-count").text(jQuery("#attachments-count").text()-1),1==jQuery("form.type-form #media-items").children().length&&0 '+pluploadL10n.deleted+" ").siblings("a.toggle").hide(),jQuery(".filename",a).append(jQuery("a.undo",a).removeClass("hidden")),void jQuery(".menu_order_input",a).hide())}function deleteError(){}function uploadComplete(){jQuery("#insert-gallery").prop("disabled",!1)}function switchUploader(e){e?(deleteUserSetting("uploader"),jQuery(".media-upload-form").removeClass("html-uploader"),"object"==typeof uploader&&uploader.refresh()):(setUserSetting("uploader","1"),jQuery(".media-upload-form").addClass("html-uploader"))}function uploadError(e,a,r,i){var t=104857600;switch(a){case plupload.FAILED:wpFileError(e,pluploadL10n.upload_failed);break;case plupload.FILE_EXTENSION_ERROR:wpFileExtensionError(i,e,pluploadL10n.invalid_filetype);break;case plupload.FILE_SIZE_ERROR:uploadSizeError(i,e);break;case plupload.IMAGE_FORMAT_ERROR:wpFileError(e,pluploadL10n.not_an_image);break;case plupload.IMAGE_MEMORY_ERROR:wpFileError(e,pluploadL10n.image_memory_exceeded);break;case plupload.IMAGE_DIMENSIONS_ERROR:wpFileError(e,pluploadL10n.image_dimensions_exceeded);break;case plupload.GENERIC_ERROR:wpQueueError(pluploadL10n.upload_failed);break;case plupload.IO_ERROR:tt?wpFileError(e,pluploadL10n.big_upload_failed.replace("%1$s",'').replace("%2$s","")):wpQueueError(pluploadL10n.io_error);break;case plupload.HTTP_ERROR:wpQueueError(pluploadL10n.http_error);break;case plupload.INIT_ERROR:jQuery(".media-upload-form").addClass("html-uploader");break;case plupload.SECURITY_ERROR:wpQueueError(pluploadL10n.security_error);break;default:wpFileError(e,pluploadL10n.default_error)}}function uploadSizeError(e,a){var r=pluploadL10n.file_exceeds_size_limit.replace("%s",a.name),r=jQuery("
        ").attr({id:"media-item-"+a.id,class:"media-item error"}).append(jQuery("

        ").text(r));jQuery("#media-items").append(r),e.removeFile(a)}function wpFileExtensionError(e,a,r){jQuery("#media-items").append('

        '+r+"

        "),e.removeFile(a)}function copyAttachmentUploadURLClipboard(){var i;new ClipboardJS(".copy-attachment-url").on("success",function(e){var a=jQuery(e.trigger),r=jQuery(".success",a.closest(".copy-to-clipboard-container"));e.clearSelection(),clearTimeout(i),r.removeClass("hidden"),i=setTimeout(function(){r.addClass("hidden")},3e3),wp.a11y.speak(pluploadL10n.file_url_copied)})}jQuery(document).ready(function(o){copyAttachmentUploadURLClipboard();var d,l={};o(".media-upload-form").on("click.uploader",function(e){var a,r=o(e.target);r.is('input[type="radio"]')?(a=r.closest("tr")).hasClass("align")?setUserSetting("align",r.val()):a.hasClass("image-size")&&setUserSetting("imgsize",r.val()):r.is("button.button")?(a=(a=e.target.className||"").match(/url([^ '"]+)/))&&a[1]&&(setUserSetting("urlbutton",a[1]),r.siblings(".urlfield").val(r.data("link-url"))):r.is("a.dismiss")?r.parents(".media-item").fadeOut(200,function(){o(this).remove()}):r.is(".upload-flash-bypass a")||r.is("a.uploader-html")?(o("#media-items, p.submit, span.big-file-warning").css("display","none"),switchUploader(0),e.preventDefault()):r.is(".upload-html-bypass a")?(o("#media-items, p.submit, span.big-file-warning").css("display",""),switchUploader(1),e.preventDefault()):r.is("a.describe-toggle-on")?(r.parent().addClass("open"),r.siblings(".slidetoggle").fadeIn(250,function(){var e=o(window).scrollTop(),a=o(window).height(),r=o(this).offset().top,i=o(this).height();a&&r&&i&&(a=e+a)<(i=r+i)&&(i-a":"gt","&":"amp",'"':"quot","'":"#39"};return e&&(""+e).replace(/[<>&\"\']/g,function(e){return t[e]?"&"+t[e]+";":e})},toArray:I.toArray,inArray:I.inArray,addI18n:I.addI18n,translate:I.translate,isEmptyObj:I.isEmptyObj,hasClass:I.hasClass,addClass:I.addClass,removeClass:I.removeClass,getStyle:I.getStyle,addEvent:I.addEvent,removeEvent:I.removeEvent,removeAllEvents:I.removeAllEvents,cleanName:function(e){for(var t=[/[\300-\306]/g,"A",/[\340-\346]/g,"a",/\307/g,"C",/\347/g,"c",/[\310-\313]/g,"E",/[\350-\353]/g,"e",/[\314-\317]/g,"I",/[\354-\357]/g,"i",/\321/g,"N",/\361/g,"n",/[\322-\330]/g,"O",/[\362-\370]/g,"o",/[\331-\334]/g,"U",/[\371-\374]/g,"u"],i=0;i(t/=1024)?i(e/t,1)+" "+F.translate("gb"):e>(t/=1024)?i(e/t,1)+" "+F.translate("mb"):1024e?(this.trigger("Error",{code:F.FILE_SIZE_ERROR,message:F.translate("File size error."),file:t}),i(!1)):i(!0)}),F.addFileFilter("prevent_duplicates",function(e,t,i){if(e)for(var n=this.files.length;n--;)if(t.name===this.files[n].name&&t.size===this.files[n].size)return this.trigger("Error",{code:F.FILE_DUPLICATE_ERROR,message:F.translate("Duplicate file error."),file:t}),void i(!1);i(!0)}),F.Uploader=function(e){var u,i,n,p,t=F.guid(),l=[],h={},o=[],d=[],c=!1;function r(){var e,t,i=0;if(this.state==F.STARTED){for(t=0;tu?(t=Math.min(u,a.size-c),a.slice(c,c+t)):(t=a.size,a),u&&d.chunks&&(r.settings.send_chunk_number?(n.chunk=Math.ceil(c/u),n.chunks=Math.ceil(a.size/u)):(n.offset=c,n.total=a.size)),(p=new I.XMLHttpRequest).upload&&(p.upload.onprogress=function(e){s.loaded=Math.min(s.size,c+e.loaded),r.trigger("UploadProgress",s)}),p.onload=function(){400<=p.status?f():(l=r.settings.max_retries,t=a.size?(s.size!=s.origSize&&(a.destroy(),a=null),r.trigger("UploadProgress",s),s.status=F.DONE,r.trigger("FileUploaded",s,{response:p.responseText,status:p.status,responseHeaders:p.getAllResponseHeaders()})):T(g,1))},p.onerror=function(){f()},p.onloadend=function(){this.destroy(),p=null},r.settings.multipart&&d.multipart?(p.open("post",o,!0),F.each(r.settings.headers,function(e,t){p.setRequestHeader(t,e)}),i=new I.FormData,F.each(F.extend(n,r.settings.multipart_params),function(e,t){i.append(t,e)}),i.append(r.settings.file_data_name,e),p.send(i,{runtime_order:r.settings.runtimes,required_caps:r.settings.required_features,preferred_caps:h})):(o=F.buildUrl(r.settings.url,F.extend(n,r.settings.multipart_params)),p.open("post",o,!0),p.setRequestHeader("Content-Type","application/octet-stream"),F.each(r.settings.headers,function(e,t){p.setRequestHeader(t,e)}),p.send(e,{runtime_order:r.settings.runtimes,required_caps:r.settings.required_features,preferred_caps:h})))}s.loaded&&(c=s.loaded=u?u*Math.floor(s.loaded/u):0),a=s.getSource(),r.settings.resize.enabled&&function(e,t){if(e.ruid){e=I.Runtime.getInfo(e.ruid);if(e)return e.can(t)}}(a,"send_binary_string")&&~I.inArray(a.type,["image/jpeg","image/png"])?function(t,e,i){var n=new I.Image;try{n.onload=function(){if(e.width>this.width&&e.height>this.height&&e.quality===S&&e.preserve_headers&&!e.crop)return this.destroy(),i(t);n.downsize(e.width,e.height,e.crop,e.preserve_headers)},n.onresize=function(){i(this.getAsBlob(t.type,e.quality)),this.destroy()},n.onerror=function(){i(t)},n.load(t)}catch(e){i(t)}}.call(this,a,r.settings.resize,function(e){a=e,s.size=e.size,g()}):g()}function R(e,t){s(t)}function E(e){if(e.state==F.STARTED)i=+new Date;else if(e.state==F.STOPPED)for(var t=e.files.length-1;0<=t;t--)e.files[t].status==F.UPLOADING&&(e.files[t].status=F.QUEUED,a())}function y(){p&&p.abort()}function v(e){a(),T(function(){r.call(e)},1)}function z(e,t){t.code===F.INIT_ERROR?e.destroy():t.code===F.HTTP_ERROR&&(t.file.status=F.FAILED,s(t.file),e.state==F.STARTED)&&(e.trigger("CancelUpload"),T(function(){r.call(e)},1))}function O(e){e.stop(),F.each(l,function(e){e.destroy()}),l=[],o.length&&(F.each(o,function(e){e.destroy()}),o=[]),d.length&&(F.each(d,function(e){e.destroy()}),d=[]),c=!(h={}),i=p=null,n.reset()}u={runtimes:I.Runtime.order,max_retries:0,chunk_size:0,multipart:!0,multi_selection:!0,file_data_name:"file",filters:{mime_types:[],prevent_duplicates:!1,max_file_size:0},resize:{enabled:!1,preserve_headers:!0,crop:!1},send_file_name:!0,send_chunk_number:!0},_.call(this,e,null,!0),n=new F.QueueProgress,F.extend(this,{id:t,uid:t,state:F.STOPPED,features:{},runtime:null,files:l,settings:u,total:n,init:function(){var t,i=this,e=i.getOption("preinit");return"function"==typeof e?e(i):F.each(e,function(e,t){i.bind(t,e)}),function(){this.bind("FilesAdded FilesRemoved",function(e){e.trigger("QueueChanged"),e.refresh()}),this.bind("CancelUpload",y),this.bind("BeforeUpload",m),this.bind("UploadFile",b),this.bind("UploadProgress",R),this.bind("StateChanged",E),this.bind("QueueChanged",a),this.bind("Error",z),this.bind("FileUploaded",v),this.bind("Destroy",O)}.call(i),F.each(["container","browse_button","drop_element"],function(e){if(null===i.getOption(e))return!(t={code:F.INIT_ERROR,message:F.translate("'%' specified, but cannot be found.")})}),t?i.trigger("Error",t):u.browse_button||u.drop_element?void g.call(i,u,function(e){var t=i.getOption("init");"function"==typeof t?t(i):F.each(t,function(e,t){i.bind(t,e)}),e?(i.runtime=I.Runtime.getInfo(f()).type,i.trigger("Init",{runtime:i.runtime}),i.trigger("PostInit")):i.trigger("Error",{code:F.INIT_ERROR,message:F.translate("Init error.")})}):i.trigger("Error",{code:F.INIT_ERROR,message:F.translate("You must specify either 'browse_button' or 'drop_element'.")})},setOption:function(e,t){_.call(this,e,t,!this.runtime)},getOption:function(e){return e?u[e]:u},refresh:function(){o.length&&F.each(o,function(e){e.trigger("Refresh")}),this.trigger("Refresh")},start:function(){this.state!=F.STARTED&&(this.state=F.STARTED,this.trigger("StateChanged"),r.call(this))},stop:function(){this.state!=F.STOPPED&&(this.state=F.STOPPED,this.trigger("StateChanged"),this.trigger("CancelUpload"))},disableBrowse:function(){c=arguments[0]===S||arguments[0],o.length&&F.each(o,function(e){e.disable(c)}),this.trigger("DisableBrowse",c)},getFile:function(e){for(var t=l.length-1;0<=t;t--)if(l[t].id===e)return l[t]},addFile:function(e,n){var r,s=this,a=[],o=[];r=f(),function e(i){var t=I.typeOf(i);if(i instanceof I.File){if(!i.ruid&&!i.isDetached()){if(!r)return!1;i.ruid=r,i.connectRuntime(r)}e(new F.File(i))}else i instanceof I.Blob?(e(i.getSource()),i.destroy()):i instanceof F.File?(n&&(i.name=n),a.push(function(t){var n,e,r;n=i,e=function(e){e||(l.push(i),o.push(i),s.trigger("FileFiltered",i)),T(t,1)},r=[],I.each(s.settings.filters,function(e,i){D[i]&&r.push(function(t){D[i].call(s,e,n,function(e){t(!e)})})}),I.inSeries(r,e)})):-1!==I.inArray(t,["file","blob"])?e(new I.File(null,i)):"node"===t&&"filelist"===I.typeOf(i.files)?I.each(i.files,e):"array"===t&&(n=null,I.each(i,e))}(e),a.length&&I.inSeries(a,function(){o.length&&s.trigger("FilesAdded",o)})},removeFile:function(e){for(var t="string"==typeof e?e:e.id,i=l.length-1;0<=i;i--)if(l[i].id===t)return this.splice(i,1)[0]},splice:function(e,t){var e=l.splice(e===S?0:e,t===S?l.length:t),i=!1;return this.state==F.STARTED&&(F.each(e,function(e){if(e.status===F.UPLOADING)return!(i=!0)}),i)&&this.stop(),this.trigger("FilesRemoved",e),F.each(e,function(e){e.destroy()}),i&&this.start(),e},dispatchEvent:function(e){var t,i;if(e=e.toLowerCase(),t=this.hasEventListener(e)){t.sort(function(e,t){return t.priority-e.priority}),(i=[].slice.call(arguments)).shift(),i.unshift(this);for(var n=0;n 4 ) { /* * The file may have been uploaded and attachment post created, * but post-processing and resizing failed... * Do a cleanup then tell the user to scale down the image and upload it again. */ $.ajax({ type: 'post', url: ajaxurl, dataType: 'json', data: { action: 'media-create-image-subsizes', _wpnonce: _wpPluploadSettings.defaults.multipart_params._wpnonce, attachment_id: id, _wp_upload_failed_cleanup: true, } }); error( message, data, file, 'no-retry' ); return; } if ( ! times ) { tryAgainCount[ file.id ] = 1; } else { tryAgainCount[ file.id ] = ++times; } // Another request to try to create the missing image sub-sizes. $.ajax({ type: 'post', url: ajaxurl, dataType: 'json', data: { action: 'media-create-image-subsizes', _wpnonce: _wpPluploadSettings.defaults.multipart_params._wpnonce, attachment_id: id, } }).done( function( response ) { if ( response.success ) { fileUploaded( self.uploader, file, response ); } else { if ( response.data && response.data.message ) { message = response.data.message; } error( message, data, file, 'no-retry' ); } }).fail( function( jqXHR ) { // If another HTTP 5xx error, try try again... if ( jqXHR.status >= 500 && jqXHR.status < 600 ) { tryAgain( message, data, file ); return; } error( message, data, file, 'no-retry' ); }); } /** * Custom error callback. * * Add a new error to the errors collection, so other modules can track * and display errors. @see wp.Uploader.errors. * * @param {string} message Error message. * @param {object} data Error data from Plupload. * @param {plupload.File} file File that was uploaded. * @param {string} retry Whether to try again to create image sub-sizes. Passing 'no-retry' will prevent it. */ error = function( message, data, file, retry ) { var isImage = file.type && file.type.indexOf( 'image/' ) === 0, status = data && data.status; // If the file is an image and the error is HTTP 5xx try to create sub-sizes again. if ( retry !== 'no-retry' && isImage && status >= 500 && status < 600 ) { tryAgain( message, data, file ); return; } if ( file.attachment ) { file.attachment.destroy(); } Uploader.errors.unshift({ message: message || pluploadL10n.default_error, data: data, file: file }); self.error( message, data, file ); }; /** * After a file is successfully uploaded, update its model. * * @param {plupload.Uploader} up Uploader instance. * @param {plupload.File} file File that was uploaded. * @param {Object} response Object with response properties. */ fileUploaded = function( up, file, response ) { var complete; // Remove the "uploading" UI elements. _.each( ['file','loaded','size','percent'], function( key ) { file.attachment.unset( key ); } ); file.attachment.set( _.extend( response.data, { uploading: false } ) ); wp.media.model.Attachment.get( response.data.id, file.attachment ); complete = Uploader.queue.all( function( attachment ) { return ! attachment.get( 'uploading' ); }); if ( complete ) { Uploader.queue.reset(); } self.success( file.attachment ); } /** * After the Uploader has been initialized, initialize some behaviors for the dropzone. * * @param {plupload.Uploader} uploader Uploader instance. */ this.uploader.bind( 'init', function( uploader ) { var timer, active, dragdrop, dropzone = self.dropzone; dragdrop = self.supports.dragdrop = uploader.features.dragdrop && ! Uploader.browser.mobile; // Generate drag/drop helper classes. if ( ! dropzone ) { return; } dropzone.toggleClass( 'supports-drag-drop', !! dragdrop ); if ( ! dragdrop ) { return dropzone.unbind('.wp-uploader'); } // 'dragenter' doesn't fire correctly, simulate it with a limited 'dragover'. dropzone.on( 'dragover.wp-uploader', function() { if ( timer ) { clearTimeout( timer ); } if ( active ) { return; } dropzone.trigger('dropzone:enter').addClass('drag-over'); active = true; }); dropzone.on('dragleave.wp-uploader, drop.wp-uploader', function() { /* * Using an instant timer prevents the drag-over class * from being quickly removed and re-added when elements * inside the dropzone are repositioned. * * @see https://core.trac.wordpress.org/ticket/21705 */ timer = setTimeout( function() { active = false; dropzone.trigger('dropzone:leave').removeClass('drag-over'); }, 0 ); }); self.ready = true; $(self).trigger( 'uploader:ready' ); }); this.uploader.bind( 'postinit', function( up ) { up.refresh(); self.init(); }); this.uploader.init(); if ( this.browser ) { this.browser.on( 'mouseenter', this.refresh ); } else { this.uploader.disableBrowse( true ); } $( self ).on( 'uploader:ready', function() { $( '.moxie-shim-html5 input[type="file"]' ) .attr( { tabIndex: '-1', 'aria-hidden': 'true' } ); } ); /** * After files were filtered and added to the queue, create a model for each. * * @param {plupload.Uploader} up Uploader instance. * @param {Array} files Array of file objects that were added to queue by the user. */ this.uploader.bind( 'FilesAdded', function( up, files ) { _.each( files, function( file ) { var attributes, image; // Ignore failed uploads. if ( plupload.FAILED === file.status ) { return; } if ( file.type === 'image/heic' && up.settings.heic_upload_error ) { // Show error but do not block uploading. Uploader.errors.unshift({ message: pluploadL10n.unsupported_image, data: {}, file: file }); } else if ( file.type === 'image/webp' && up.settings.webp_upload_error ) { // Disallow uploading of WebP images if the server cannot edit them. error( pluploadL10n.noneditable_image, {}, file, 'no-retry' ); up.removeFile( file ); return; } else if ( file.type === 'image/avif' && up.settings.avif_upload_error ) { // Disallow uploading of AVIF images if the server cannot edit them. error( pluploadL10n.noneditable_image, {}, file, 'no-retry' ); up.removeFile( file ); return; } // Generate attributes for a new `Attachment` model. attributes = _.extend({ file: file, uploading: true, date: new Date(), filename: file.name, menuOrder: 0, uploadedTo: wp.media.model.settings.post.id }, _.pick( file, 'loaded', 'size', 'percent' ) ); // Handle early mime type scanning for images. image = /(?:jpe?g|png|gif)$/i.exec( file.name ); // For images set the model's type and subtype attributes. if ( image ) { attributes.type = 'image'; // `jpeg`, `png` and `gif` are valid subtypes. // `jpg` is not, so map it to `jpeg`. attributes.subtype = ( 'jpg' === image[0] ) ? 'jpeg' : image[0]; } // Create a model for the attachment, and add it to the Upload queue collection // so listeners to the upload queue can track and display upload progress. file.attachment = wp.media.model.Attachment.create( attributes ); Uploader.queue.add( file.attachment ); self.added( file.attachment ); }); up.refresh(); up.start(); }); this.uploader.bind( 'UploadProgress', function( up, file ) { file.attachment.set( _.pick( file, 'loaded', 'percent' ) ); self.progress( file.attachment ); }); /** * After a file is successfully uploaded, update its model. * * @param {plupload.Uploader} up Uploader instance. * @param {plupload.File} file File that was uploaded. * @param {Object} response Object with response properties. * @return {mixed} */ this.uploader.bind( 'FileUploaded', function( up, file, response ) { try { response = JSON.parse( response.response ); } catch ( e ) { return error( pluploadL10n.default_error, e, file ); } if ( ! _.isObject( response ) || _.isUndefined( response.success ) ) { return error( pluploadL10n.default_error, null, file ); } else if ( ! response.success ) { return error( response.data && response.data.message, response.data, file ); } // Success. Update the UI with the new attachment. fileUploaded( up, file, response ); }); /** * When plupload surfaces an error, send it to the error handler. * * @param {plupload.Uploader} up Uploader instance. * @param {Object} pluploadError Contains code, message and sometimes file and other details. */ this.uploader.bind( 'Error', function( up, pluploadError ) { var message = pluploadL10n.default_error, key; // Check for plupload errors. for ( key in Uploader.errorMap ) { if ( pluploadError.code === plupload[ key ] ) { message = Uploader.errorMap[ key ]; if ( typeof message === 'function' ) { message = message( pluploadError.file, pluploadError ); } break; } } error( message, pluploadError, pluploadError.file ); up.refresh(); }); }; // Adds the 'defaults' and 'browser' properties. $.extend( Uploader, _wpPluploadSettings ); Uploader.uuid = 0; // Map Plupload error codes to user friendly error messages. Uploader.errorMap = { 'FAILED': pluploadL10n.upload_failed, 'FILE_EXTENSION_ERROR': pluploadL10n.invalid_filetype, 'IMAGE_FORMAT_ERROR': pluploadL10n.not_an_image, 'IMAGE_MEMORY_ERROR': pluploadL10n.image_memory_exceeded, 'IMAGE_DIMENSIONS_ERROR': pluploadL10n.image_dimensions_exceeded, 'GENERIC_ERROR': pluploadL10n.upload_failed, 'IO_ERROR': pluploadL10n.io_error, 'SECURITY_ERROR': pluploadL10n.security_error, 'FILE_SIZE_ERROR': function( file ) { return pluploadL10n.file_exceeds_size_limit.replace( '%s', file.name ); }, 'HTTP_ERROR': function( file ) { if ( file.type && file.type.indexOf( 'image/' ) === 0 ) { return pluploadL10n.http_error_image; } return pluploadL10n.http_error; }, }; $.extend( Uploader.prototype, /** @lends wp.Uploader.prototype */{ /** * Acts as a shortcut to extending the uploader's multipart_params object. * * param( key ) * Returns the value of the key. * * param( key, value ) * Sets the value of a key. * * param( map ) * Sets values for a map of data. */ param: function( key, value ) { if ( arguments.length === 1 && typeof key === 'string' ) { return this.uploader.settings.multipart_params[ key ]; } if ( arguments.length > 1 ) { this.uploader.settings.multipart_params[ key ] = value; } else { $.extend( this.uploader.settings.multipart_params, key ); } }, /** * Make a few internal event callbacks available on the wp.Uploader object * to change the Uploader internals if absolutely necessary. */ init: function() {}, error: function() {}, success: function() {}, added: function() {}, progress: function() {}, complete: function() {}, refresh: function() { var node, attached, container, id; if ( this.browser ) { node = this.browser[0]; // Check if the browser node is in the DOM. while ( node ) { if ( node === document.body ) { attached = true; break; } node = node.parentNode; } /* * If the browser node is not attached to the DOM, * use a temporary container to house it, as the browser button shims * require the button to exist in the DOM at all times. */ if ( ! attached ) { id = 'wp-uploader-browser-' + this.uploader.id; container = $( '#' + id ); if ( ! container.length ) { container = $('
        ').css({ position: 'fixed', top: '-1000px', left: '-1000px', height: 0, width: 0 }).attr( 'id', 'wp-uploader-browser-' + this.uploader.id ).appendTo('body'); } container.append( this.browser ); } } this.uploader.refresh(); } }); // Create a collection of attachments in the upload queue, // so that other modules can track and display upload progress. Uploader.queue = new wp.media.model.Attachments( [], { query: false }); // Create a collection to collect errors incurred while attempting upload. Uploader.errors = new Backbone.Collection(); exports.Uploader = Uploader; })( wp, jQuery ); json2.js000064400000043766152335011310006147 0ustar00/* json2.js 2015-05-03 Public Domain. NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. See http://www.JSON.org/js.html This code should be minified before deployment. See http://javascript.crockford.com/jsmin.html USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO NOT CONTROL. This file creates a global JSON object containing two methods: stringify and parse. This file is provides the ES5 JSON capability to ES3 systems. If a project might run on IE8 or earlier, then this file should be included. This file does nothing on ES5 systems. JSON.stringify(value, replacer, space) value any JavaScript value, usually an object or array. replacer an optional parameter that determines how object values are stringified for objects. It can be a function or an array of strings. space an optional parameter that specifies the indentation of nested structures. If it is omitted, the text will be packed without extra whitespace. If it is a number, it will specify the number of spaces to indent at each level. If it is a string (such as '\t' or ' '), it contains the characters used to indent at each level. This method produces a JSON text from a JavaScript value. When an object value is found, if the object contains a toJSON method, its toJSON method will be called and the result will be stringified. A toJSON method does not serialize: it returns the value represented by the name/value pair that should be serialized, or undefined if nothing should be serialized. The toJSON method will be passed the key associated with the value, and this will be bound to the value For example, this would serialize Dates as ISO strings. Date.prototype.toJSON = function (key) { function f(n) { // Format integers to have at least two digits. return n < 10 ? '0' + n : n; } return this.getUTCFullYear() + '-' + f(this.getUTCMonth() + 1) + '-' + f(this.getUTCDate()) + 'T' + f(this.getUTCHours()) + ':' + f(this.getUTCMinutes()) + ':' + f(this.getUTCSeconds()) + 'Z'; }; You can provide an optional replacer method. It will be passed the key and value of each member, with this bound to the containing object. The value that is returned from your method will be serialized. If your method returns undefined, then the member will be excluded from the serialization. If the replacer parameter is an array of strings, then it will be used to select the members to be serialized. It filters the results such that only members with keys listed in the replacer array are stringified. Values that do not have JSON representations, such as undefined or functions, will not be serialized. Such values in objects will be dropped; in arrays they will be replaced with null. You can use a replacer function to replace those with JSON values. JSON.stringify(undefined) returns undefined. The optional space parameter produces a stringification of the value that is filled with line breaks and indentation to make it easier to read. If the space parameter is a non-empty string, then that string will be used for indentation. If the space parameter is a number, then the indentation will be that many spaces. Example: text = JSON.stringify(['e', {pluribus: 'unum'}]); // text is '["e",{"pluribus":"unum"}]' text = JSON.stringify(['e', {pluribus: 'unum'}], null, '\t'); // text is '[\n\t"e",\n\t{\n\t\t"pluribus": "unum"\n\t}\n]' text = JSON.stringify([new Date()], function (key, value) { return this[key] instanceof Date ? 'Date(' + this[key] + ')' : value; }); // text is '["Date(---current time---)"]' JSON.parse(text, reviver) This method parses a JSON text to produce an object or array. It can throw a SyntaxError exception. The optional reviver parameter is a function that can filter and transform the results. It receives each of the keys and values, and its return value is used instead of the original value. If it returns what it received, then the structure is not modified. If it returns undefined then the member is deleted. Example: // Parse the text. Values that look like ISO date strings will // be converted to Date objects. myData = JSON.parse(text, function (key, value) { var a; if (typeof value === 'string') { a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); if (a) { return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6])); } } return value; }); myData = JSON.parse('["Date(09/09/2001)"]', function (key, value) { var d; if (typeof value === 'string' && value.slice(0, 5) === 'Date(' && value.slice(-1) === ')') { d = new Date(value.slice(5, -1)); if (d) { return d; } } return value; }); This is a reference implementation. You are free to copy, modify, or redistribute. */ /*jslint eval, for, this */ /*property JSON, apply, call, charCodeAt, getUTCDate, getUTCFullYear, getUTCHours, getUTCMinutes, getUTCMonth, getUTCSeconds, hasOwnProperty, join, lastIndex, length, parse, prototype, push, replace, slice, stringify, test, toJSON, toString, valueOf */ // Create a JSON object only if one does not already exist. We create the // methods in a closure to avoid creating global variables. if (typeof JSON !== 'object') { JSON = {}; } (function () { 'use strict'; var rx_one = /^[\],:{}\s]*$/, rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, rx_four = /(?:^|:|,)(?:\s*\[)+/g, rx_escapable = /[\\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; function f(n) { // Format integers to have at least two digits. return n < 10 ? '0' + n : n; } function this_value() { return this.valueOf(); } if (typeof Date.prototype.toJSON !== 'function') { Date.prototype.toJSON = function () { return isFinite(this.valueOf()) ? this.getUTCFullYear() + '-' + f(this.getUTCMonth() + 1) + '-' + f(this.getUTCDate()) + 'T' + f(this.getUTCHours()) + ':' + f(this.getUTCMinutes()) + ':' + f(this.getUTCSeconds()) + 'Z' : null; }; Boolean.prototype.toJSON = this_value; Number.prototype.toJSON = this_value; String.prototype.toJSON = this_value; } var gap, indent, meta, rep; function quote(string) { // If the string contains no control characters, no quote characters, and no // backslash characters, then we can safely slap some quotes around it. // Otherwise we must also replace the offending characters with safe escape // sequences. rx_escapable.lastIndex = 0; return rx_escapable.test(string) ? '"' + string.replace(rx_escapable, function (a) { var c = meta[a]; return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); }) + '"' : '"' + string + '"'; } function str(key, holder) { // Produce a string from holder[key]. var i, // The loop counter. k, // The member key. v, // The member value. length, mind = gap, partial, value = holder[key]; // If the value has a toJSON method, call it to obtain a replacement value. if (value && typeof value === 'object' && typeof value.toJSON === 'function') { value = value.toJSON(key); } // If we were called with a replacer function, then call the replacer to // obtain a replacement value. if (typeof rep === 'function') { value = rep.call(holder, key, value); } // What happens next depends on the value's type. switch (typeof value) { case 'string': return quote(value); case 'number': // JSON numbers must be finite. Encode non-finite numbers as null. return isFinite(value) ? String(value) : 'null'; case 'boolean': case 'null': // If the value is a boolean or null, convert it to a string. Note: // typeof null does not produce 'null'. The case is included here in // the remote chance that this gets fixed someday. return String(value); // If the type is 'object', we might be dealing with an object or an array or // null. case 'object': // Due to a specification blunder in ECMAScript, typeof null is 'object', // so watch out for that case. if (!value) { return 'null'; } // Make an array to hold the partial results of stringifying this object value. gap += indent; partial = []; // Is the value an array? if (Object.prototype.toString.apply(value) === '[object Array]') { // The value is an array. Stringify every element. Use null as a placeholder // for non-JSON values. length = value.length; for (i = 0; i < length; i += 1) { partial[i] = str(i, value) || 'null'; } // Join all of the elements together, separated with commas, and wrap them in // brackets. v = partial.length === 0 ? '[]' : gap ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : '[' + partial.join(',') + ']'; gap = mind; return v; } // If the replacer is an array, use it to select the members to be stringified. if (rep && typeof rep === 'object') { length = rep.length; for (i = 0; i < length; i += 1) { if (typeof rep[i] === 'string') { k = rep[i]; v = str(k, value); if (v) { partial.push(quote(k) + ( gap ? ': ' : ':' ) + v); } } } } else { // Otherwise, iterate through all of the keys in the object. for (k in value) { if (Object.prototype.hasOwnProperty.call(value, k)) { v = str(k, value); if (v) { partial.push(quote(k) + ( gap ? ': ' : ':' ) + v); } } } } // Join all of the member texts together, separated with commas, // and wrap them in braces. v = partial.length === 0 ? '{}' : gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : '{' + partial.join(',') + '}'; gap = mind; return v; } } // If the JSON object does not yet have a stringify method, give it one. if (typeof JSON.stringify !== 'function') { meta = { // table of character substitutions '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"': '\\"', '\\': '\\\\' }; JSON.stringify = function (value, replacer, space) { // The stringify method takes a value and an optional replacer, and an optional // space parameter, and returns a JSON text. The replacer can be a function // that can replace values, or an array of strings that will select the keys. // A default replacer method can be provided. Use of the space parameter can // produce text that is more easily readable. var i; gap = ''; indent = ''; // If the space parameter is a number, make an indent string containing that // many spaces. if (typeof space === 'number') { for (i = 0; i < space; i += 1) { indent += ' '; } // If the space parameter is a string, it will be used as the indent string. } else if (typeof space === 'string') { indent = space; } // If there is a replacer, it must be a function or an array. // Otherwise, throw an error. rep = replacer; if (replacer && typeof replacer !== 'function' && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) { throw new Error('JSON.stringify'); } // Make a fake root object containing our value under the key of ''. // Return the result of stringifying the value. return str('', {'': value}); }; } // If the JSON object does not yet have a parse method, give it one. if (typeof JSON.parse !== 'function') { JSON.parse = function (text, reviver) { // The parse method takes a text and an optional reviver function, and returns // a JavaScript value if the text is a valid JSON text. var j; function walk(holder, key) { // The walk method is used to recursively walk the resulting structure so // that modifications can be made. var k, v, value = holder[key]; if (value && typeof value === 'object') { for (k in value) { if (Object.prototype.hasOwnProperty.call(value, k)) { v = walk(value, k); if (v !== undefined) { value[k] = v; } else { delete value[k]; } } } } return reviver.call(holder, key, value); } // Parsing happens in four stages. In the first stage, we replace certain // Unicode characters with escape sequences. JavaScript handles many characters // incorrectly, either silently deleting them, or treating them as line endings. text = String(text); rx_dangerous.lastIndex = 0; if (rx_dangerous.test(text)) { text = text.replace(rx_dangerous, function (a) { return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4); }); } // In the second stage, we run the text against regular expressions that look // for non-JSON patterns. We are especially concerned with '()' and 'new' // because they can cause invocation, and '=' because it can cause mutation. // But just to be safe, we want to reject all unexpected forms. // We split the second stage into 4 regexp operations in order to work around // crippling inefficiencies in IE's and Safari's regexp engines. First we // replace the JSON backslash pairs with '@' (a non-JSON character). Second, we // replace all simple value tokens with ']' characters. Third, we delete all // open brackets that follow a colon or comma or that begin the text. Finally, // we look to see that the remaining characters are only whitespace or ']' or // ',' or ':' or '{' or '}'. If that is so, then the text is safe for eval. if ( rx_one.test( text .replace(rx_two, '@') .replace(rx_three, ']') .replace(rx_four, '') ) ) { // In the third stage we use the eval function to compile the text into a // JavaScript structure. The '{' operator is subject to a syntactic ambiguity // in JavaScript: it can begin a block or an object literal. We wrap the text // in parens to eliminate the ambiguity. j = eval('(' + text + ')'); // In the optional fourth stage, we recursively walk the new structure, passing // each name/value pair to a reviver function for possible transformation. return typeof reviver === 'function' ? walk({'': j}, '') : j; } // If the text is not JSON parseable, then a SyntaxError is thrown. throw new SyntaxError('JSON.parse'); }; } }());wp-auth-check.min.js000064400000003172152335011310010321 0ustar00/*! This file is auto-generated */ !function(i){var h,d,e;function r(){var e=window.adminpage,a=window.wp;i(window).off("beforeunload.wp-auth-check"),("post-php"===e||"post-new-php"===e)&&a&&a.heartbeat&&a.heartbeat.connectNow(),h.fadeOut(200,function(){h.addClass("hidden").css("display",""),i("#wp-auth-check-frame").remove(),i("body").removeClass("modal-open")})}i(function(){(h=i("#wp-auth-check-wrap")).find(".wp-auth-check-close").on("click",function(){r(),d=!0,window.clearTimeout(e),e=window.setTimeout(function(){d=!1},3e5)})}).on("heartbeat-tick.wp-auth-check",function(e,a){var o,t,n,c,s;"wp-auth-check"in a&&(a["wp-auth-check"]||!h.hasClass("hidden")||d?a["wp-auth-check"]&&!h.hasClass("hidden")&&r():(t=i("#wp-auth-check"),n=i("#wp-auth-check-form"),c=h.find(".wp-auth-fallback-expired"),s=!1,n.length&&(i(window).on("beforeunload.wp-auth-check",function(e){e.originalEvent.returnValue=window.wp.i18n.__("Your session has expired. You can log in again from this page or go to the login page.")}),(o=i('
        "); jQuery("#TB_overlay").on( 'click', tb_remove ); } }else{//all others if(document.getElementById("TB_overlay") === null){ jQuery("body").append("
        "); jQuery("#TB_overlay").on( 'click', tb_remove ); jQuery( 'body' ).addClass( 'modal-open' ); } } if(tb_detectMacXFF()){ jQuery("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash }else{ jQuery("#TB_overlay").addClass("TB_overlayBG");//use background and opacity } if(caption===null){caption="";} jQuery("body").append("
        ");//add loader to the page jQuery('#TB_load').show();//show loader var baseURL; if(url.indexOf("?")!==-1){ //ff there is a query string involved baseURL = url.substr(0, url.indexOf("?")); }else{ baseURL = url; } var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$|\.webp$|\.avif$/; var urlType = baseURL.toLowerCase().match(urlString); if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp' || urlType == '.webp' || urlType == '.avif' ){//code to show images TB_PrevCaption = ""; TB_PrevURL = ""; TB_PrevHTML = ""; TB_NextCaption = ""; TB_NextURL = ""; TB_NextHTML = ""; TB_imageCount = ""; TB_FoundURL = false; if(imageGroup){ TB_TempArray = jQuery("a[rel="+imageGroup+"]").get(); for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) { var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString); if (!(TB_TempArray[TB_Counter].href == url)) { if (TB_FoundURL) { TB_NextCaption = TB_TempArray[TB_Counter].title; TB_NextURL = TB_TempArray[TB_Counter].href; TB_NextHTML = "  "+thickboxL10n.next+""; } else { TB_PrevCaption = TB_TempArray[TB_Counter].title; TB_PrevURL = TB_TempArray[TB_Counter].href; TB_PrevHTML = "  "+thickboxL10n.prev+""; } } else { TB_FoundURL = true; TB_imageCount = thickboxL10n.image + ' ' + (TB_Counter + 1) + ' ' + thickboxL10n.of + ' ' + (TB_TempArray.length); } } } imgPreloader = new Image(); imgPreloader.onload = function(){ imgPreloader.onload = null; // Resizing large images - original by Christian Montoya edited by me. var pagesize = tb_getPageSize(); var x = pagesize[0] - 150; var y = pagesize[1] - 150; var imageWidth = imgPreloader.width; var imageHeight = imgPreloader.height; if (imageWidth > x) { imageHeight = imageHeight * (x / imageWidth); imageWidth = x; if (imageHeight > y) { imageWidth = imageWidth * (y / imageHeight); imageHeight = y; } } else if (imageHeight > y) { imageWidth = imageWidth * (y / imageHeight); imageHeight = y; if (imageWidth > x) { imageHeight = imageHeight * (x / imageWidth); imageWidth = x; } } // End Resizing TB_WIDTH = imageWidth + 30; TB_HEIGHT = imageHeight + 60; jQuery("#TB_window").append(""+thickboxL10n.close+""+caption+"" + "
        "+caption+"
        " + TB_imageCount + TB_PrevHTML + TB_NextHTML + "
        "); jQuery("#TB_closeWindowButton").on( 'click', tb_remove ); if (!(TB_PrevHTML === "")) { function goPrev(){ if(jQuery(document).off("click",goPrev)){jQuery(document).off("click",goPrev);} jQuery("#TB_window").remove(); jQuery("body").append("
        "); tb_show(TB_PrevCaption, TB_PrevURL, imageGroup); return false; } jQuery("#TB_prev").on( 'click', goPrev ); } if (!(TB_NextHTML === "")) { function goNext(){ jQuery("#TB_window").remove(); jQuery("body").append("
        "); tb_show(TB_NextCaption, TB_NextURL, imageGroup); return false; } jQuery("#TB_next").on( 'click', goNext ); } jQuery(document).on('keydown.thickbox', function(e){ if ( e.which == 27 ){ // close tb_remove(); } else if ( e.which == 190 ){ // display previous image if(!(TB_NextHTML == "")){ jQuery(document).off('thickbox'); goNext(); } } else if ( e.which == 188 ){ // display next image if(!(TB_PrevHTML == "")){ jQuery(document).off('thickbox'); goPrev(); } } return false; }); tb_position(); jQuery("#TB_load").remove(); jQuery("#TB_ImageOff").on( 'click', tb_remove ); jQuery("#TB_window").css({'visibility':'visible'}); //for safari using css instead of show }; imgPreloader.src = url; }else{//code to show html var queryString = url.replace(/^[^\?]+\??/,''); var params = tb_parseQuery( queryString ); TB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no parameters were added to URL TB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no parameters were added to URL ajaxContentW = TB_WIDTH - 30; ajaxContentH = TB_HEIGHT - 45; if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window urlNoQuery = url.split('TB_'); jQuery("#TB_iframeContent").remove(); if(params['modal'] != "true"){//iframe no modal jQuery("#TB_window").append("
        "+caption+"
        "); }else{//iframe modal jQuery("#TB_overlay").off(); jQuery("#TB_window").append(""); } }else{// not an iframe, ajax if(jQuery("#TB_window").css("visibility") != "visible"){ if(params['modal'] != "true"){//ajax no modal jQuery("#TB_window").append("
        "+caption+"
        "); }else{//ajax modal jQuery("#TB_overlay").off(); jQuery("#TB_window").append("
        "); } }else{//this means the window is already up, we are just loading new content via ajax jQuery("#TB_ajaxContent")[0].style.width = ajaxContentW +"px"; jQuery("#TB_ajaxContent")[0].style.height = ajaxContentH +"px"; jQuery("#TB_ajaxContent")[0].scrollTop = 0; jQuery("#TB_ajaxWindowTitle").html(caption); } } jQuery("#TB_closeWindowButton").on( 'click', tb_remove ); if(url.indexOf('TB_inline') != -1){ jQuery("#TB_ajaxContent").append(jQuery('#' + params['inlineId']).children()); jQuery("#TB_window").on('tb_unload', function () { jQuery('#' + params['inlineId']).append( jQuery("#TB_ajaxContent").children() ); // move elements back when you're finished }); tb_position(); jQuery("#TB_load").remove(); jQuery("#TB_window").css({'visibility':'visible'}); }else if(url.indexOf('TB_iframe') != -1){ tb_position(); jQuery("#TB_load").remove(); jQuery("#TB_window").css({'visibility':'visible'}); }else{ var load_url = url; load_url += -1 === url.indexOf('?') ? '?' : '&'; jQuery("#TB_ajaxContent").load(load_url += "random=" + (new Date().getTime()),function(){//to do a post change this load method tb_position(); jQuery("#TB_load").remove(); tb_init("#TB_ajaxContent a.thickbox"); jQuery("#TB_window").css({'visibility':'visible'}); }); } } if(!params['modal']){ jQuery(document).on('keydown.thickbox', function(e){ if ( e.which == 27 ){ // close tb_remove(); return false; } }); } $closeBtn = jQuery( '#TB_closeWindowButton' ); /* * If the native Close button icon is visible, move focus on the button * (e.g. in the Network Admin Themes screen). * In other admin screens is hidden and replaced by a different icon. */ if ( $closeBtn.find( '.tb-close-icon' ).is( ':visible' ) ) { $closeBtn.trigger( 'focus' ); } } catch(e) { //nothing here } } //helper functions below function tb_showIframe(){ jQuery("#TB_load").remove(); jQuery("#TB_window").css({'visibility':'visible'}).trigger( 'thickbox:iframe:loaded' ); } function tb_remove() { jQuery("#TB_imageOff").off("click"); jQuery("#TB_closeWindowButton").off("click"); jQuery( '#TB_window' ).fadeOut( 'fast', function() { jQuery( '#TB_window, #TB_overlay, #TB_HideSelect' ).trigger( 'tb_unload' ).off().remove(); jQuery( 'body' ).trigger( 'thickbox:removed' ); }); jQuery( 'body' ).removeClass( 'modal-open' ); jQuery("#TB_load").remove(); if (typeof document.body.style.maxHeight == "undefined") {//if IE 6 jQuery("body","html").css({height: "auto", width: "auto"}); jQuery("html").css("overflow",""); } jQuery(document).off('.thickbox'); return false; } function tb_position() { var isIE6 = typeof document.body.style.maxHeight === "undefined"; jQuery("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'}); if ( ! isIE6 ) { // take away IE6 jQuery("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'}); } } function tb_parseQuery ( query ) { var Params = {}; if ( ! query ) {return Params;}// return empty object var Pairs = query.split(/[;&]/); for ( var i = 0; i < Pairs.length; i++ ) { var KeyVal = Pairs[i].split('='); if ( ! KeyVal || KeyVal.length != 2 ) {continue;} var key = unescape( KeyVal[0] ); var val = unescape( KeyVal[1] ); val = val.replace(/\+/g, ' '); Params[key] = val; } return Params; } function tb_getPageSize(){ var de = document.documentElement; var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth; var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight; arrayPageSize = [w,h]; return arrayPageSize; } function tb_detectMacXFF() { var userAgent = navigator.userAgent.toLowerCase(); if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) { return true; } } thickbox/macFFBgHack.png000064400000000136152335011310011073 0ustar00PNG  IHDRc%IDATH! _jM H$D"H_,!ZIENDB`jquery/suggest.js000064400000015517152335011310010105 0ustar00/* * jquery.suggest 1.1b - 2007-08-06 * Patched by Mark Jaquith with Alexander Dick's "multiple items" patch to allow for auto-suggesting of more than one tag before submitting * See: http://www.vulgarisoip.com/2007/06/29/jquerysuggest-an-alternative-jquery-based-autocomplete-library/#comment-7228 * * Uses code and techniques from following libraries: * 1. http://www.dyve.net/jquery/?autocomplete * 2. http://dev.jquery.com/browser/trunk/plugins/interface/iautocompleter.js * * All the new stuff written by Peter Vulgaris (www.vulgarisoip.com) * Feel free to do whatever you want with this file * */ (function($) { $.suggest = function(input, options) { var $input, $results, timeout, prevLength, cache, cacheSize; $input = $(input).attr("autocomplete", "off"); $results = $("
          "); timeout = false; // hold timeout ID for suggestion results to appear prevLength = 0; // last recorded length of $input.val() cache = []; // cache MRU list cacheSize = 0; // size of cache in chars (bytes?) $results.addClass(options.resultsClass).appendTo('body'); resetPosition(); $(window) .on( 'load', resetPosition ) // just in case user is changing size of page while loading .on( 'resize', resetPosition ); $input.blur(function() { setTimeout(function() { $results.hide() }, 200); }); $input.keydown(processKey); function resetPosition() { // requires jquery.dimension plugin var offset = $input.offset(); $results.css({ top: (offset.top + input.offsetHeight) + 'px', left: offset.left + 'px' }); } function processKey(e) { // handling up/down/escape requires results to be visible // handling enter/tab requires that AND a result to be selected if ((/27$|38$|40$/.test(e.keyCode) && $results.is(':visible')) || (/^13$|^9$/.test(e.keyCode) && getCurrentResult())) { if (e.preventDefault) e.preventDefault(); if (e.stopPropagation) e.stopPropagation(); e.cancelBubble = true; e.returnValue = false; switch(e.keyCode) { case 38: // up prevResult(); break; case 40: // down nextResult(); break; case 9: // tab case 13: // return selectCurrentResult(); break; case 27: // escape $results.hide(); break; } } else if ($input.val().length != prevLength) { if (timeout) clearTimeout(timeout); timeout = setTimeout(suggest, options.delay); prevLength = $input.val().length; } } function suggest() { var q = $.trim($input.val()), multipleSepPos, items; if ( options.multiple ) { multipleSepPos = q.lastIndexOf(options.multipleSep); if ( multipleSepPos != -1 ) { q = $.trim(q.substr(multipleSepPos + options.multipleSep.length)); } } if (q.length >= options.minchars) { cached = checkCache(q); if (cached) { displayItems(cached['items']); } else { $.get(options.source, {q: q}, function(txt) { $results.hide(); items = parseTxt(txt, q); displayItems(items); addToCache(q, items, txt.length); }); } } else { $results.hide(); } } function checkCache(q) { var i; for (i = 0; i < cache.length; i++) if (cache[i]['q'] == q) { cache.unshift(cache.splice(i, 1)[0]); return cache[0]; } return false; } function addToCache(q, items, size) { var cached; while (cache.length && (cacheSize + size > options.maxCacheSize)) { cached = cache.pop(); cacheSize -= cached['size']; } cache.push({ q: q, size: size, items: items }); cacheSize += size; } function displayItems(items) { var html = '', i; if (!items) return; if (!items.length) { $results.hide(); return; } resetPosition(); // when the form moves after the page has loaded for (i = 0; i < items.length; i++) html += '
        • ' + items[i] + '
        • '; $results.html(html).show(); $results .children('li') .mouseover(function() { $results.children('li').removeClass(options.selectClass); $(this).addClass(options.selectClass); }) .click(function(e) { e.preventDefault(); e.stopPropagation(); selectCurrentResult(); }); } function parseTxt(txt, q) { var items = [], tokens = txt.split(options.delimiter), i, token; // parse returned data for non-empty items for (i = 0; i < tokens.length; i++) { token = $.trim(tokens[i]); if (token) { token = token.replace( new RegExp(q, 'ig'), function(q) { return '' + q + '' } ); items[items.length] = token; } } return items; } function getCurrentResult() { var $currentResult; if (!$results.is(':visible')) return false; $currentResult = $results.children('li.' + options.selectClass); if (!$currentResult.length) $currentResult = false; return $currentResult; } function selectCurrentResult() { $currentResult = getCurrentResult(); if ($currentResult) { if ( options.multiple ) { if ( $input.val().indexOf(options.multipleSep) != -1 ) { $currentVal = $input.val().substr( 0, ( $input.val().lastIndexOf(options.multipleSep) + options.multipleSep.length ) ) + ' '; } else { $currentVal = ""; } $input.val( $currentVal + $currentResult.text() + options.multipleSep + ' ' ); $input.focus(); } else { $input.val($currentResult.text()); } $results.hide(); $input.trigger('change'); if (options.onSelect) options.onSelect.apply($input[0]); } } function nextResult() { $currentResult = getCurrentResult(); if ($currentResult) $currentResult .removeClass(options.selectClass) .next() .addClass(options.selectClass); else $results.children('li:first-child').addClass(options.selectClass); } function prevResult() { var $currentResult = getCurrentResult(); if ($currentResult) $currentResult .removeClass(options.selectClass) .prev() .addClass(options.selectClass); else $results.children('li:last-child').addClass(options.selectClass); } } $.fn.suggest = function(source, options) { if (!source) return; options = options || {}; options.multiple = options.multiple || false; options.multipleSep = options.multipleSep || ","; options.source = source; options.delay = options.delay || 100; options.resultsClass = options.resultsClass || 'ac_results'; options.selectClass = options.selectClass || 'ac_over'; options.matchClass = options.matchClass || 'ac_match'; options.minchars = options.minchars || 2; options.delimiter = options.delimiter || '\n'; options.onSelect = options.onSelect || false; options.maxCacheSize = options.maxCacheSize || 65536; this.each(function() { new $.suggest(this, options); }); return this; }; })(jQuery); jquery/jquery.js000064400001055226152335011310007745 0ustar00/*! * jQuery JavaScript Library v3.7.1 * https://jquery.com/ * * Copyright OpenJS Foundation and other contributors * Released under the MIT license * https://jquery.org/license * * Date: 2023-08-28T13:37Z */ ( function( global, factory ) { "use strict"; if ( typeof module === "object" && typeof module.exports === "object" ) { // For CommonJS and CommonJS-like environments where a proper `window` // is present, execute the factory and get jQuery. // For environments that do not have a `window` with a `document` // (such as Node.js), expose a factory as module.exports. // This accentuates the need for the creation of a real `window`. // e.g. var jQuery = require("jquery")(window); // See ticket trac-14549 for more info. module.exports = global.document ? factory( global, true ) : function( w ) { if ( !w.document ) { throw new Error( "jQuery requires a window with a document" ); } return factory( w ); }; } else { factory( global ); } // Pass this if window is not defined yet } )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common // enough that all such attempts are guarded in a try block. "use strict"; var arr = []; var getProto = Object.getPrototypeOf; var slice = arr.slice; var flat = arr.flat ? function( array ) { return arr.flat.call( array ); } : function( array ) { return arr.concat.apply( [], array ); }; var push = arr.push; var indexOf = arr.indexOf; var class2type = {}; var toString = class2type.toString; var hasOwn = class2type.hasOwnProperty; var fnToString = hasOwn.toString; var ObjectFunctionString = fnToString.call( Object ); var support = {}; var isFunction = function isFunction( obj ) { // Support: Chrome <=57, Firefox <=52 // In some browsers, typeof returns "function" for HTML elements // (i.e., `typeof document.createElement( "object" ) === "function"`). // We don't want to classify *any* DOM node as a function. // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 // Plus for old WebKit, typeof returns "function" for HTML collections // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) return typeof obj === "function" && typeof obj.nodeType !== "number" && typeof obj.item !== "function"; }; var isWindow = function isWindow( obj ) { return obj != null && obj === obj.window; }; var document = window.document; var preservedScriptAttributes = { type: true, src: true, nonce: true, noModule: true }; function DOMEval( code, node, doc ) { doc = doc || document; var i, val, script = doc.createElement( "script" ); script.text = code; if ( node ) { for ( i in preservedScriptAttributes ) { // Support: Firefox 64+, Edge 18+ // Some browsers don't support the "nonce" property on scripts. // On the other hand, just using `getAttribute` is not enough as // the `nonce` attribute is reset to an empty string whenever it // becomes browsing-context connected. // See https://github.com/whatwg/html/issues/2369 // See https://html.spec.whatwg.org/#nonce-attributes // The `node.getAttribute` check was added for the sake of // `jQuery.globalEval` so that it can fake a nonce-containing node // via an object. val = node[ i ] || node.getAttribute && node.getAttribute( i ); if ( val ) { script.setAttribute( i, val ); } } } doc.head.appendChild( script ).parentNode.removeChild( script ); } function toType( obj ) { if ( obj == null ) { return obj + ""; } // Support: Android <=2.3 only (functionish RegExp) return typeof obj === "object" || typeof obj === "function" ? class2type[ toString.call( obj ) ] || "object" : typeof obj; } /* global Symbol */ // Defining this global in .eslintrc.json would create a danger of using the global // unguarded in another place, it seems safer to define global only for this module var version = "3.7.1", rhtmlSuffix = /HTML$/i, // Define a local copy of jQuery jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQuery.fn.init( selector, context ); }; jQuery.fn = jQuery.prototype = { // The current version of jQuery being used jquery: version, constructor: jQuery, // The default length of a jQuery object is 0 length: 0, toArray: function() { return slice.call( this ); }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { // Return all the elements in a clean array if ( num == null ) { return slice.call( this ); } // Return just the one element from the set return num < 0 ? this[ num + this.length ] : this[ num ]; }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems ) { // Build a new jQuery matched element set var ret = jQuery.merge( this.constructor(), elems ); // Add the old object onto the stack (as a reference) ret.prevObject = this; // Return the newly-formed element set return ret; }, // Execute a callback for every element in the matched set. each: function( callback ) { return jQuery.each( this, callback ); }, map: function( callback ) { return this.pushStack( jQuery.map( this, function( elem, i ) { return callback.call( elem, i, elem ); } ) ); }, slice: function() { return this.pushStack( slice.apply( this, arguments ) ); }, first: function() { return this.eq( 0 ); }, last: function() { return this.eq( -1 ); }, even: function() { return this.pushStack( jQuery.grep( this, function( _elem, i ) { return ( i + 1 ) % 2; } ) ); }, odd: function() { return this.pushStack( jQuery.grep( this, function( _elem, i ) { return i % 2; } ) ); }, eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); }, end: function() { return this.prevObject || this.constructor(); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: push, sort: arr.sort, splice: arr.splice }; jQuery.extend = jQuery.fn.extend = function() { var options, name, src, copy, copyIsArray, clone, target = arguments[ 0 ] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; // Skip the boolean and the target target = arguments[ i ] || {}; i++; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !isFunction( target ) ) { target = {}; } // Extend jQuery itself if only one argument is passed if ( i === length ) { target = this; i--; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( ( options = arguments[ i ] ) != null ) { // Extend the base object for ( name in options ) { copy = options[ name ]; // Prevent Object.prototype pollution // Prevent never-ending loop if ( name === "__proto__" || target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject( copy ) || ( copyIsArray = Array.isArray( copy ) ) ) ) { src = target[ name ]; // Ensure proper type for the source value if ( copyIsArray && !Array.isArray( src ) ) { clone = []; } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { clone = {}; } else { clone = src; } copyIsArray = false; // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; jQuery.extend( { // Unique for each copy of jQuery on the page expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), // Assume jQuery is ready without the ready module isReady: true, error: function( msg ) { throw new Error( msg ); }, noop: function() {}, isPlainObject: function( obj ) { var proto, Ctor; // Detect obvious negatives // Use toString instead of jQuery.type to catch host objects if ( !obj || toString.call( obj ) !== "[object Object]" ) { return false; } proto = getProto( obj ); // Objects with no prototype (e.g., `Object.create( null )`) are plain if ( !proto ) { return true; } // Objects with prototype are plain iff they were constructed by a global Object function Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; }, isEmptyObject: function( obj ) { var name; for ( name in obj ) { return false; } return true; }, // Evaluates a script in a provided context; falls back to the global one // if not specified. globalEval: function( code, options, doc ) { DOMEval( code, { nonce: options && options.nonce }, doc ); }, each: function( obj, callback ) { var length, i = 0; if ( isArrayLike( obj ) ) { length = obj.length; for ( ; i < length; i++ ) { if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { break; } } } else { for ( i in obj ) { if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { break; } } } return obj; }, // Retrieve the text value of an array of DOM nodes text: function( elem ) { var node, ret = "", i = 0, nodeType = elem.nodeType; if ( !nodeType ) { // If no nodeType, this is expected to be an array while ( ( node = elem[ i++ ] ) ) { // Do not traverse comment nodes ret += jQuery.text( node ); } } if ( nodeType === 1 || nodeType === 11 ) { return elem.textContent; } if ( nodeType === 9 ) { return elem.documentElement.textContent; } if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } // Do not include comment or processing instruction nodes return ret; }, // results is for internal usage only makeArray: function( arr, results ) { var ret = results || []; if ( arr != null ) { if ( isArrayLike( Object( arr ) ) ) { jQuery.merge( ret, typeof arr === "string" ? [ arr ] : arr ); } else { push.call( ret, arr ); } } return ret; }, inArray: function( elem, arr, i ) { return arr == null ? -1 : indexOf.call( arr, elem, i ); }, isXMLDoc: function( elem ) { var namespace = elem && elem.namespaceURI, docElem = elem && ( elem.ownerDocument || elem ).documentElement; // Assume HTML when documentElement doesn't yet exist, such as inside // document fragments. return !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || "HTML" ); }, // Support: Android <=4.0 only, PhantomJS 1 only // push.apply(_, arraylike) throws on ancient WebKit merge: function( first, second ) { var len = +second.length, j = 0, i = first.length; for ( ; j < len; j++ ) { first[ i++ ] = second[ j ]; } first.length = i; return first; }, grep: function( elems, callback, invert ) { var callbackInverse, matches = [], i = 0, length = elems.length, callbackExpect = !invert; // Go through the array, only saving the items // that pass the validator function for ( ; i < length; i++ ) { callbackInverse = !callback( elems[ i ], i ); if ( callbackInverse !== callbackExpect ) { matches.push( elems[ i ] ); } } return matches; }, // arg is for internal usage only map: function( elems, callback, arg ) { var length, value, i = 0, ret = []; // Go through the array, translating each of the items to their new values if ( isArrayLike( elems ) ) { length = elems.length; for ( ; i < length; i++ ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } // Go through every key on the object, } else { for ( i in elems ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret.push( value ); } } } // Flatten any nested arrays return flat( ret ); }, // A global GUID counter for objects guid: 1, // jQuery.support is not used in Core but other projects attach their // properties to it so it needs to exist. support: support } ); if ( typeof Symbol === "function" ) { jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; } // Populate the class2type map jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), function( _i, name ) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); } ); function isArrayLike( obj ) { // Support: real iOS 8.2 only (not reproducible in simulator) // `in` check used to prevent JIT error (gh-2145) // hasOwn isn't used here due to false negatives // regarding Nodelist length in IE var length = !!obj && "length" in obj && obj.length, type = toType( obj ); if ( isFunction( obj ) || isWindow( obj ) ) { return false; } return type === "array" || length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj; } function nodeName( elem, name ) { return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); } var pop = arr.pop; var sort = arr.sort; var splice = arr.splice; var whitespace = "[\\x20\\t\\r\\n\\f]"; var rtrimCSS = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ); // Note: an element does not contain itself jQuery.contains = function( a, b ) { var bup = b && b.parentNode; return a === bup || !!( bup && bup.nodeType === 1 && ( // Support: IE 9 - 11+ // IE doesn't have `contains` on SVG. a.contains ? a.contains( bup ) : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 ) ); }; // CSS string/identifier serialization // https://drafts.csswg.org/cssom/#common-serializing-idioms var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g; function fcssescape( ch, asCodePoint ) { if ( asCodePoint ) { // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER if ( ch === "\0" ) { return "\uFFFD"; } // Control characters and (dependent upon position) numbers get escaped as code points return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; } // Other potentially-special ASCII characters get backslash-escaped return "\\" + ch; } jQuery.escapeSelector = function( sel ) { return ( sel + "" ).replace( rcssescape, fcssescape ); }; var preferredDoc = document, pushNative = push; ( function() { var i, Expr, outermostContext, sortInput, hasDuplicate, push = pushNative, // Local document vars document, documentElement, documentIsHTML, rbuggyQSA, matches, // Instance-specific data expando = jQuery.expando, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), nonnativeSelectorCache = createCache(), sortOrder = function( a, b ) { if ( a === b ) { hasDuplicate = true; } return 0; }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|" + "loop|multiple|open|readonly|required|scoped", // Regular expressions // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", // Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + identifier + ")(?:\\((" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: // 1. quoted (capture 3; capture 4 or capture 5) "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + // 2. simple (capture 6) "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + // 3. anything else (capture 2) ".*" + ")\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rwhitespace = new RegExp( whitespace + "+", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), rdescend = new RegExp( whitespace + "|>" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { ID: new RegExp( "^#(" + identifier + ")" ), CLASS: new RegExp( "^\\.(" + identifier + ")" ), TAG: new RegExp( "^(" + identifier + "|[*])" ), ATTR: new RegExp( "^" + attributes ), PSEUDO: new RegExp( "^" + pseudos ), CHILD: new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), bool: new RegExp( "^(?:" + booleans + ")$", "i" ), // For use in libraries implementing .is() // We use this for POS matching in `select` needsContext: new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, // CSS escapes // https://www.w3.org/TR/CSS21/syndata.html#escaped-characters runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), funescape = function( escape, nonHex ) { var high = "0x" + escape.slice( 1 ) - 0x10000; if ( nonHex ) { // Strip the backslash prefix from a non-hex escape sequence return nonHex; } // Replace a hexadecimal escape sequence with the encoded Unicode code point // Support: IE <=11+ // For values outside the Basic Multilingual Plane (BMP), manually construct a // surrogate pair return high < 0 ? String.fromCharCode( high + 0x10000 ) : String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }, // Used for iframes; see `setDocument`. // Support: IE 9 - 11+, Edge 12 - 18+ // Removing the function wrapper causes a "Permission Denied" // error in IE/Edge. unloadHandler = function() { setDocument(); }, inDisabledFieldset = addCombinator( function( elem ) { return elem.disabled === true && nodeName( elem, "fieldset" ); }, { dir: "parentNode", next: "legend" } ); // Support: IE <=9 only // Accessing document.activeElement can throw unexpectedly // https://bugs.jquery.com/ticket/13393 function safeActiveElement() { try { return document.activeElement; } catch ( err ) { } } // Optimize for push.apply( _, NodeList ) try { push.apply( ( arr = slice.call( preferredDoc.childNodes ) ), preferredDoc.childNodes ); // Support: Android <=4.0 // Detect silently failing push.apply // eslint-disable-next-line no-unused-expressions arr[ preferredDoc.childNodes.length ].nodeType; } catch ( e ) { push = { apply: function( target, els ) { pushNative.apply( target, slice.call( els ) ); }, call: function( target ) { pushNative.apply( target, slice.call( arguments, 1 ) ); } }; } function find( selector, context, results, seed ) { var m, i, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, // nodeType defaults to 9, since context defaults to document nodeType = context ? context.nodeType : 9; results = results || []; // Return early from calls with invalid selector or context if ( typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { return results; } // Try to shortcut find operations (as opposed to filters) in HTML documents if ( !seed ) { setDocument( context ); context = context || document; if ( documentIsHTML ) { // If the selector is sufficiently simple, try using a "get*By*" DOM method // (excepting DocumentFragment context, where the methods don't exist) if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { // ID selector if ( ( m = match[ 1 ] ) ) { // Document context if ( nodeType === 9 ) { if ( ( elem = context.getElementById( m ) ) ) { // Support: IE 9 only // getElementById can match elements by name instead of ID if ( elem.id === m ) { push.call( results, elem ); return results; } } else { return results; } // Element context } else { // Support: IE 9 only // getElementById can match elements by name instead of ID if ( newContext && ( elem = newContext.getElementById( m ) ) && find.contains( context, elem ) && elem.id === m ) { push.call( results, elem ); return results; } } // Type selector } else if ( match[ 2 ] ) { push.apply( results, context.getElementsByTagName( selector ) ); return results; // Class selector } else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) { push.apply( results, context.getElementsByClassName( m ) ); return results; } } // Take advantage of querySelectorAll if ( !nonnativeSelectorCache[ selector + " " ] && ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) { newSelector = selector; newContext = context; // qSA considers elements outside a scoping root when evaluating child or // descendant combinators, which is not what we want. // In such cases, we work around the behavior by prefixing every selector in the // list with an ID selector referencing the scope context. // The technique has to be used as well when a leading combinator is used // as such selectors are not recognized by querySelectorAll. // Thanks to Andrew Dupont for this technique. if ( nodeType === 1 && ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { // Expand context for sibling selectors newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; // We can use :scope instead of the ID hack if the browser // supports it & if we're not changing the context. // Support: IE 11+, Edge 17 - 18+ // IE/Edge sometimes throw a "Permission denied" error when // strict-comparing two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq if ( newContext != context || !support.scope ) { // Capture the context ID, setting it first if necessary if ( ( nid = context.getAttribute( "id" ) ) ) { nid = jQuery.escapeSelector( nid ); } else { context.setAttribute( "id", ( nid = expando ) ); } } // Prefix every selector in the list groups = tokenize( selector ); i = groups.length; while ( i-- ) { groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + toSelector( groups[ i ] ); } newSelector = groups.join( "," ); } try { push.apply( results, newContext.querySelectorAll( newSelector ) ); return results; } catch ( qsaError ) { nonnativeSelectorCache( selector, true ); } finally { if ( nid === expando ) { context.removeAttribute( "id" ); } } } } } // All others return select( selector.replace( rtrimCSS, "$1" ), context, results, seed ); } /** * Create key-value caches of limited size * @returns {function(string, object)} Returns the Object data after storing it on itself with * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) * deleting the oldest entry */ function createCache() { var keys = []; function cache( key, value ) { // Use (key + " ") to avoid collision with native prototype properties // (see https://github.com/jquery/sizzle/issues/157) if ( keys.push( key + " " ) > Expr.cacheLength ) { // Only keep the most recent entries delete cache[ keys.shift() ]; } return ( cache[ key + " " ] = value ); } return cache; } /** * Mark a function for special use by jQuery selector module * @param {Function} fn The function to mark */ function markFunction( fn ) { fn[ expando ] = true; return fn; } /** * Support testing using an element * @param {Function} fn Passed the created element and returns a boolean result */ function assert( fn ) { var el = document.createElement( "fieldset" ); try { return !!fn( el ); } catch ( e ) { return false; } finally { // Remove from its parent by default if ( el.parentNode ) { el.parentNode.removeChild( el ); } // release memory in IE el = null; } } /** * Returns a function to use in pseudos for input types * @param {String} type */ function createInputPseudo( type ) { return function( elem ) { return nodeName( elem, "input" ) && elem.type === type; }; } /** * Returns a function to use in pseudos for buttons * @param {String} type */ function createButtonPseudo( type ) { return function( elem ) { return ( nodeName( elem, "input" ) || nodeName( elem, "button" ) ) && elem.type === type; }; } /** * Returns a function to use in pseudos for :enabled/:disabled * @param {Boolean} disabled true for :disabled; false for :enabled */ function createDisabledPseudo( disabled ) { // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable return function( elem ) { // Only certain elements can match :enabled or :disabled // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled if ( "form" in elem ) { // Check for inherited disabledness on relevant non-disabled elements: // * listed form-associated elements in a disabled fieldset // https://html.spec.whatwg.org/multipage/forms.html#category-listed // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled // * option elements in a disabled optgroup // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled // All such elements have a "form" property. if ( elem.parentNode && elem.disabled === false ) { // Option elements defer to a parent optgroup if present if ( "label" in elem ) { if ( "label" in elem.parentNode ) { return elem.parentNode.disabled === disabled; } else { return elem.disabled === disabled; } } // Support: IE 6 - 11+ // Use the isDisabled shortcut property to check for disabled fieldset ancestors return elem.isDisabled === disabled || // Where there is no isDisabled, check manually elem.isDisabled !== !disabled && inDisabledFieldset( elem ) === disabled; } return elem.disabled === disabled; // Try to winnow out elements that can't be disabled before trusting the disabled property. // Some victims get caught in our net (label, legend, menu, track), but it shouldn't // even exist on them, let alone have a boolean value. } else if ( "label" in elem ) { return elem.disabled === disabled; } // Remaining elements are neither :enabled nor :disabled return false; }; } /** * Returns a function to use in pseudos for positionals * @param {Function} fn */ function createPositionalPseudo( fn ) { return markFunction( function( argument ) { argument = +argument; return markFunction( function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { if ( seed[ ( j = matchIndexes[ i ] ) ] ) { seed[ j ] = !( matches[ j ] = seed[ j ] ); } } } ); } ); } /** * Checks a node for validity as a jQuery selector context * @param {Element|Object=} context * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value */ function testContext( context ) { return context && typeof context.getElementsByTagName !== "undefined" && context; } /** * Sets document-related variables once based on the current document * @param {Element|Object} [node] An element or document object to use to set the document * @returns {Object} Returns the current document */ function setDocument( node ) { var subWindow, doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected // Support: IE 11+, Edge 17 - 18+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing // two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } // Update global variables document = doc; documentElement = document.documentElement; documentIsHTML = !jQuery.isXMLDoc( document ); // Support: iOS 7 only, IE 9 - 11+ // Older browsers didn't support unprefixed `matches`. matches = documentElement.matches || documentElement.webkitMatchesSelector || documentElement.msMatchesSelector; // Support: IE 9 - 11+, Edge 12 - 18+ // Accessing iframe documents after unload throws "permission denied" errors // (see trac-13936). // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. if ( documentElement.msMatchesSelector && // Support: IE 11+, Edge 17 - 18+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing // two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq preferredDoc != document && ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { // Support: IE 9 - 11+, Edge 12 - 18+ subWindow.addEventListener( "unload", unloadHandler ); } // Support: IE <10 // Check if getElementById returns elements by name // The broken getElementById methods don't pick up programmatically-set names, // so use a roundabout getElementsByName test support.getById = assert( function( el ) { documentElement.appendChild( el ).id = jQuery.expando; return !document.getElementsByName || !document.getElementsByName( jQuery.expando ).length; } ); // Support: IE 9 only // Check to see if it's possible to do matchesSelector // on a disconnected node. support.disconnectedMatch = assert( function( el ) { return matches.call( el, "*" ); } ); // Support: IE 9 - 11+, Edge 12 - 18+ // IE/Edge don't support the :scope pseudo-class. support.scope = assert( function() { return document.querySelectorAll( ":scope" ); } ); // Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only // Make sure the `:has()` argument is parsed unforgivingly. // We include `*` in the test to detect buggy implementations that are // _selectively_ forgiving (specifically when the list includes at least // one valid selector). // Note that we treat complete lack of support for `:has()` as if it were // spec-compliant support, which is fine because use of `:has()` in such // environments will fail in the qSA path and fall back to jQuery traversal // anyway. support.cssHas = assert( function() { try { document.querySelector( ":has(*,:jqfake)" ); return false; } catch ( e ) { return true; } } ); // ID filter and find if ( support.getById ) { Expr.filter.ID = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { return elem.getAttribute( "id" ) === attrId; }; }; Expr.find.ID = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var elem = context.getElementById( id ); return elem ? [ elem ] : []; } }; } else { Expr.filter.ID = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode( "id" ); return node && node.value === attrId; }; }; // Support: IE 6 - 7 only // getElementById is not reliable as a find shortcut Expr.find.ID = function( id, context ) { if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var node, i, elems, elem = context.getElementById( id ); if ( elem ) { // Verify the id attribute node = elem.getAttributeNode( "id" ); if ( node && node.value === id ) { return [ elem ]; } // Fall back on getElementsByName elems = context.getElementsByName( id ); i = 0; while ( ( elem = elems[ i++ ] ) ) { node = elem.getAttributeNode( "id" ); if ( node && node.value === id ) { return [ elem ]; } } } return []; } }; } // Tag Expr.find.TAG = function( tag, context ) { if ( typeof context.getElementsByTagName !== "undefined" ) { return context.getElementsByTagName( tag ); // DocumentFragment nodes don't have gEBTN } else { return context.querySelectorAll( tag ); } }; // Class Expr.find.CLASS = function( className, context ) { if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { return context.getElementsByClassName( className ); } }; /* QSA/matchesSelector ---------------------------------------------------------------------- */ // QSA and matchesSelector support rbuggyQSA = []; // Build QSA regex // Regex strategy adopted from Diego Perini assert( function( el ) { var input; documentElement.appendChild( el ).innerHTML = "" + ""; // Support: iOS <=7 - 8 only // Boolean attributes and "value" are not treated correctly in some XML documents if ( !el.querySelectorAll( "[selected]" ).length ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); } // Support: iOS <=7 - 8 only if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { rbuggyQSA.push( "~=" ); } // Support: iOS 8 only // https://bugs.webkit.org/show_bug.cgi?id=136851 // In-page `selector#id sibling-combinator selector` fails if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { rbuggyQSA.push( ".#.+[+~]" ); } // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ // In some of the document kinds, these selectors wouldn't work natively. // This is probably OK but for backwards compatibility we want to maintain // handling them through jQuery traversal in jQuery 3.x. if ( !el.querySelectorAll( ":checked" ).length ) { rbuggyQSA.push( ":checked" ); } // Support: Windows 8 Native Apps // The type and name attributes are restricted during .innerHTML assignment input = document.createElement( "input" ); input.setAttribute( "type", "hidden" ); el.appendChild( input ).setAttribute( "name", "D" ); // Support: IE 9 - 11+ // IE's :disabled selector does not pick up the children of disabled fieldsets // Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+ // In some of the document kinds, these selectors wouldn't work natively. // This is probably OK but for backwards compatibility we want to maintain // handling them through jQuery traversal in jQuery 3.x. documentElement.appendChild( el ).disabled = true; if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { rbuggyQSA.push( ":enabled", ":disabled" ); } // Support: IE 11+, Edge 15 - 18+ // IE 11/Edge don't find elements on a `[name='']` query in some cases. // Adding a temporary attribute to the document before the selection works // around the issue. // Interestingly, IE 10 & older don't seem to have the issue. input = document.createElement( "input" ); input.setAttribute( "name", "" ); el.appendChild( input ); if ( !el.querySelectorAll( "[name='']" ).length ) { rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + "*(?:''|\"\")" ); } } ); if ( !support.cssHas ) { // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ // Our regular `try-catch` mechanism fails to detect natively-unsupported // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) // in browsers that parse the `:has()` argument as a forgiving selector list. // https://drafts.csswg.org/selectors/#relational now requires the argument // to be parsed unforgivingly, but browsers have not yet fully adjusted. rbuggyQSA.push( ":has" ); } rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); /* Sorting ---------------------------------------------------------------------- */ // Document order sorting sortOrder = function( a, b ) { // Flag for duplicate removal if ( a === b ) { hasDuplicate = true; return 0; } // Sort on method existence if only one input has compareDocumentPosition var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; if ( compare ) { return compare; } // Calculate position if both inputs belong to the same document // Support: IE 11+, Edge 17 - 18+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing // two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? a.compareDocumentPosition( b ) : // Otherwise we know they are disconnected 1; // Disconnected nodes if ( compare & 1 || ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { // Choose the first element that is related to our preferred document // Support: IE 11+, Edge 17 - 18+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing // two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq if ( a === document || a.ownerDocument == preferredDoc && find.contains( preferredDoc, a ) ) { return -1; } // Support: IE 11+, Edge 17 - 18+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing // two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq if ( b === document || b.ownerDocument == preferredDoc && find.contains( preferredDoc, b ) ) { return 1; } // Maintain original order return sortInput ? ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : 0; } return compare & 4 ? -1 : 1; }; return document; } find.matches = function( expr, elements ) { return find( expr, null, null, elements ); }; find.matchesSelector = function( elem, expr ) { setDocument( elem ); if ( documentIsHTML && !nonnativeSelectorCache[ expr + " " ] && ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { try { var ret = matches.call( elem, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } } catch ( e ) { nonnativeSelectorCache( expr, true ); } } return find( expr, document, null, [ elem ] ).length > 0; }; find.contains = function( context, elem ) { // Set document vars if needed // Support: IE 11+, Edge 17 - 18+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing // two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq if ( ( context.ownerDocument || context ) != document ) { setDocument( context ); } return jQuery.contains( context, elem ); }; find.attr = function( elem, name ) { // Set document vars if needed // Support: IE 11+, Edge 17 - 18+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing // two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq if ( ( elem.ownerDocument || elem ) != document ) { setDocument( elem ); } var fn = Expr.attrHandle[ name.toLowerCase() ], // Don't get fooled by Object.prototype properties (see trac-13807) val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? fn( elem, name, !documentIsHTML ) : undefined; if ( val !== undefined ) { return val; } return elem.getAttribute( name ); }; find.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; /** * Document sorting and removing duplicates * @param {ArrayLike} results */ jQuery.uniqueSort = function( results ) { var elem, duplicates = [], j = 0, i = 0; // Unless we *know* we can detect duplicates, assume their presence // // Support: Android <=4.0+ // Testing for detecting duplicates is unpredictable so instead assume we can't // depend on duplicate detection in all browsers without a stable sort. hasDuplicate = !support.sortStable; sortInput = !support.sortStable && slice.call( results, 0 ); sort.call( results, sortOrder ); if ( hasDuplicate ) { while ( ( elem = results[ i++ ] ) ) { if ( elem === results[ i ] ) { j = duplicates.push( i ); } } while ( j-- ) { splice.call( results, duplicates[ j ], 1 ); } } // Clear input after sorting to release objects // See https://github.com/jquery/sizzle/pull/225 sortInput = null; return results; }; jQuery.fn.uniqueSort = function() { return this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) ); }; Expr = jQuery.expr = { // Can be adjusted by the user cacheLength: 50, createPseudo: markFunction, match: matchExpr, attrHandle: {}, find: {}, relative: { ">": { dir: "parentNode", first: true }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: true }, "~": { dir: "previousSibling" } }, preFilter: { ATTR: function( match ) { match[ 1 ] = match[ 1 ].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted match[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || "" ) .replace( runescape, funescape ); if ( match[ 2 ] === "~=" ) { match[ 3 ] = " " + match[ 3 ] + " "; } return match.slice( 0, 4 ); }, CHILD: function( match ) { /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 4 xn-component of xn+y argument ([+-]?\d*n|) 5 sign of xn-component 6 x of xn-component 7 sign of y-component 8 y of y-component */ match[ 1 ] = match[ 1 ].toLowerCase(); if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { // nth-* requires argument if ( !match[ 3 ] ) { find.error( match[ 0 ] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 match[ 4 ] = +( match[ 4 ] ? match[ 5 ] + ( match[ 6 ] || 1 ) : 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); // other types prohibit arguments } else if ( match[ 3 ] ) { find.error( match[ 0 ] ); } return match; }, PSEUDO: function( match ) { var excess, unquoted = !match[ 6 ] && match[ 2 ]; if ( matchExpr.CHILD.test( match[ 0 ] ) ) { return null; } // Accept quoted arguments as-is if ( match[ 3 ] ) { match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && // Get excess from tokenize (recursively) ( excess = tokenize( unquoted, true ) ) && // advance to the next closing parenthesis ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { // excess is a negative index match[ 0 ] = match[ 0 ].slice( 0, excess ); match[ 2 ] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) return match.slice( 0, 3 ); } }, filter: { TAG: function( nodeNameSelector ) { var expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); return nodeNameSelector === "*" ? function() { return true; } : function( elem ) { return nodeName( elem, expectedNodeName ); }; }, CLASS: function( className ) { var pattern = classCache[ className + " " ]; return pattern || ( pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( className, function( elem ) { return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute( "class" ) || "" ); } ); }, ATTR: function( name, operator, check ) { return function( elem ) { var result = find.attr( elem, name ); if ( result == null ) { return operator === "!="; } if ( !operator ) { return true; } result += ""; if ( operator === "=" ) { return result === check; } if ( operator === "!=" ) { return result !== check; } if ( operator === "^=" ) { return check && result.indexOf( check ) === 0; } if ( operator === "*=" ) { return check && result.indexOf( check ) > -1; } if ( operator === "$=" ) { return check && result.slice( -check.length ) === check; } if ( operator === "~=" ) { return ( " " + result.replace( rwhitespace, " " ) + " " ) .indexOf( check ) > -1; } if ( operator === "|=" ) { return result === check || result.slice( 0, check.length + 1 ) === check + "-"; } return false; }; }, CHILD: function( type, what, _argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; return first === 1 && last === 0 ? // Shortcut for :nth-*(n) function( elem ) { return !!elem.parentNode; } : function( elem, _context, xml ) { var cache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false; if ( parent ) { // :(first|last|only)-(child|of-type) if ( simple ) { while ( dir ) { node = elem; while ( ( node = node[ dir ] ) ) { if ( ofType ? nodeName( node, name ) : node.nodeType === 1 ) { return false; } } // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } return true; } start = [ forward ? parent.firstChild : parent.lastChild ]; // non-xml :nth-child(...) stores cache data on `parent` if ( forward && useCache ) { // Seek `elem` from a previously-cached index outerCache = parent[ expando ] || ( parent[ expando ] = {} ); cache = outerCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex && cache[ 2 ]; node = nodeIndex && parent.childNodes[ nodeIndex ]; while ( ( node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start ( diff = nodeIndex = 0 ) || start.pop() ) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { outerCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } } else { // Use previously-cached element index if available if ( useCache ) { outerCache = elem[ expando ] || ( elem[ expando ] = {} ); cache = outerCache[ type ] || []; nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; diff = nodeIndex; } // xml :nth-child(...) // or :nth-last-child(...) or :nth(-last)?-of-type(...) if ( diff === false ) { // Use the same loop as above to seek `elem` from the start while ( ( node = ++nodeIndex && node && node[ dir ] || ( diff = nodeIndex = 0 ) || start.pop() ) ) { if ( ( ofType ? nodeName( node, name ) : node.nodeType === 1 ) && ++diff ) { // Cache the index of each encountered element if ( useCache ) { outerCache = node[ expando ] || ( node[ expando ] = {} ); outerCache[ type ] = [ dirruns, diff ]; } if ( node === elem ) { break; } } } } } // Incorporate the offset, then check against cycle size diff -= last; return diff === first || ( diff % first === 0 && diff / first >= 0 ); } }; }, PSEUDO: function( pseudo, argument ) { // pseudo-class names are case-insensitive // https://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || find.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function // just as jQuery does if ( fn[ expando ] ) { return fn( argument ); } // But maintain support for old signatures if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? markFunction( function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { idx = indexOf.call( seed, matched[ i ] ); seed[ idx ] = !( matches[ idx ] = matched[ i ] ); } } ) : function( elem ) { return fn( elem, 0, args ); }; } return fn; } }, pseudos: { // Potentially complex pseudos not: markFunction( function( selector ) { // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], matcher = compile( selector.replace( rtrimCSS, "$1" ) ); return matcher[ expando ] ? markFunction( function( seed, matches, _context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { if ( ( elem = unmatched[ i ] ) ) { seed[ i ] = !( matches[ i ] = elem ); } } } ) : function( elem, _context, xml ) { input[ 0 ] = elem; matcher( input, null, xml, results ); // Don't keep the element // (see https://github.com/jquery/sizzle/issues/299) input[ 0 ] = null; return !results.pop(); }; } ), has: markFunction( function( selector ) { return function( elem ) { return find( selector, elem ).length > 0; }; } ), contains: markFunction( function( text ) { text = text.replace( runescape, funescape ); return function( elem ) { return ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1; }; } ), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value // being equal to the identifier C, // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." // https://www.w3.org/TR/selectors/#lang-pseudo lang: markFunction( function( lang ) { // lang value must be a valid identifier if ( !ridentifier.test( lang || "" ) ) { find.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { if ( ( elemLang = documentIsHTML ? elem.lang : elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); return false; }; } ), // Miscellaneous target: function( elem ) { var hash = window.location && window.location.hash; return hash && hash.slice( 1 ) === elem.id; }, root: function( elem ) { return elem === documentElement; }, focus: function( elem ) { return elem === safeActiveElement() && document.hasFocus() && !!( elem.type || elem.href || ~elem.tabIndex ); }, // Boolean properties enabled: createDisabledPseudo( false ), disabled: createDisabledPseudo( true ), checked: function( elem ) { // In CSS3, :checked should return both checked and selected elements // https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked return ( nodeName( elem, "input" ) && !!elem.checked ) || ( nodeName( elem, "option" ) && !!elem.selected ); }, selected: function( elem ) { // Support: IE <=11+ // Accessing the selectedIndex property // forces the browser to treat the default option as // selected when in an optgroup. if ( elem.parentNode ) { // eslint-disable-next-line no-unused-expressions elem.parentNode.selectedIndex; } return elem.selected === true; }, // Contents empty: function( elem ) { // https://www.w3.org/TR/selectors/#empty-pseudo // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), // but not by others (comment: 8; processing instruction: 7; etc.) // nodeType < 6 works because attributes (2) do not appear as children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { if ( elem.nodeType < 6 ) { return false; } } return true; }, parent: function( elem ) { return !Expr.pseudos.empty( elem ); }, // Element/input types header: function( elem ) { return rheader.test( elem.nodeName ); }, input: function( elem ) { return rinputs.test( elem.nodeName ); }, button: function( elem ) { return nodeName( elem, "input" ) && elem.type === "button" || nodeName( elem, "button" ); }, text: function( elem ) { var attr; return nodeName( elem, "input" ) && elem.type === "text" && // Support: IE <10 only // New HTML5 attribute values (e.g., "search") appear // with elem.type === "text" ( ( attr = elem.getAttribute( "type" ) ) == null || attr.toLowerCase() === "text" ); }, // Position-in-collection first: createPositionalPseudo( function() { return [ 0 ]; } ), last: createPositionalPseudo( function( _matchIndexes, length ) { return [ length - 1 ]; } ), eq: createPositionalPseudo( function( _matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; } ), even: createPositionalPseudo( function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; } ), odd: createPositionalPseudo( function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; } ), lt: createPositionalPseudo( function( matchIndexes, length, argument ) { var i; if ( argument < 0 ) { i = argument + length; } else if ( argument > length ) { i = length; } else { i = argument; } for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; } ), gt: createPositionalPseudo( function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; } ) } }; Expr.pseudos.nth = Expr.pseudos.eq; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { Expr.pseudos[ i ] = createInputPseudo( i ); } for ( i in { submit: true, reset: true } ) { Expr.pseudos[ i ] = createButtonPseudo( i ); } // Easy API for creating new setFilters function setFilters() {} setFilters.prototype = Expr.filters = Expr.pseudos; Expr.setFilters = new setFilters(); function tokenize( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; if ( cached ) { return parseOnly ? 0 : cached.slice( 0 ); } soFar = selector; groups = []; preFilters = Expr.preFilter; while ( soFar ) { // Comma and first run if ( !matched || ( match = rcomma.exec( soFar ) ) ) { if ( match ) { // Don't consume trailing commas as valid soFar = soFar.slice( match[ 0 ].length ) || soFar; } groups.push( ( tokens = [] ) ); } matched = false; // Combinators if ( ( match = rleadingCombinator.exec( soFar ) ) ) { matched = match.shift(); tokens.push( { value: matched, // Cast descendant combinators to space type: match[ 0 ].replace( rtrimCSS, " " ) } ); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || ( match = preFilters[ type ]( match ) ) ) ) { matched = match.shift(); tokens.push( { value: matched, type: type, matches: match } ); soFar = soFar.slice( matched.length ); } } if ( !matched ) { break; } } // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens if ( parseOnly ) { return soFar.length; } return soFar ? find.error( selector ) : // Cache the tokens tokenCache( selector, groups ).slice( 0 ); } function toSelector( tokens ) { var i = 0, len = tokens.length, selector = ""; for ( ; i < len; i++ ) { selector += tokens[ i ].value; } return selector; } function addCombinator( matcher, combinator, base ) { var dir = combinator.dir, skip = combinator.next, key = skip || dir, checkNonElements = base && key === "parentNode", doneName = done++; return combinator.first ? // Check against closest ancestor/preceding element function( elem, context, xml ) { while ( ( elem = elem[ dir ] ) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } } return false; } : // Check against all ancestor/preceding elements function( elem, context, xml ) { var oldCache, outerCache, newCache = [ dirruns, doneName ]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching if ( xml ) { while ( ( elem = elem[ dir ] ) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; } } } } else { while ( ( elem = elem[ dir ] ) ) { if ( elem.nodeType === 1 || checkNonElements ) { outerCache = elem[ expando ] || ( elem[ expando ] = {} ); if ( skip && nodeName( elem, skip ) ) { elem = elem[ dir ] || elem; } else if ( ( oldCache = outerCache[ key ] ) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements return ( newCache[ 2 ] = oldCache[ 2 ] ); } else { // Reuse newcache so results back-propagate to previous elements outerCache[ key ] = newCache; // A match means we're done; a fail means we have to keep checking if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { return true; } } } } } return false; }; } function elementMatcher( matchers ) { return matchers.length > 1 ? function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { if ( !matchers[ i ]( elem, context, xml ) ) { return false; } } return true; } : matchers[ 0 ]; } function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { find( selector, contexts[ i ], results ); } return results; } function condense( unmatched, map, filter, context, xml ) { var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; for ( ; i < len; i++ ) { if ( ( elem = unmatched[ i ] ) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { map.push( i ); } } } } return newUnmatched; } function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { if ( postFilter && !postFilter[ expando ] ) { postFilter = setMatcher( postFilter ); } if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } return markFunction( function( seed, results, context, xml ) { var temp, i, elem, matcherOut, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : elems; if ( matcher ) { // If we have a postFinder, or filtered seed, or non-seed postFilter // or preexisting results, matcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ? // ...intermediate processing is necessary [] : // ...otherwise use results directly results; // Find primary matches matcher( matcherIn, matcherOut, context, xml ); } else { matcherOut = matcherIn; } // Apply postFilter if ( postFilter ) { temp = condense( matcherOut, postMap ); postFilter( temp, [], context, xml ); // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { if ( ( elem = temp[ i ] ) ) { matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); } } } if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { if ( ( elem = matcherOut[ i ] ) ) { // Restore matcherIn since elem is not yet a final match temp.push( ( matcherIn[ i ] = elem ) ); } } postFinder( null, ( matcherOut = [] ), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { if ( ( elem = matcherOut[ i ] ) && ( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) { seed[ temp ] = !( results[ temp ] = elem ); } } } // Add elements to results, through postFinder if defined } else { matcherOut = condense( matcherOut === results ? matcherOut.splice( preexisting, matcherOut.length ) : matcherOut ); if ( postFinder ) { postFinder( null, results, matcherOut, xml ); } else { push.apply( results, matcherOut ); } } } ); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[ tokens[ 0 ].type ], implicitRelative = leadingRelative || Expr.relative[ " " ], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) matchContext = addCombinator( function( elem ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { return indexOf.call( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { // Support: IE 11+, Edge 17 - 18+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing // two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq var ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || ( ( checkContext = context ).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); // Avoid hanging onto element // (see https://github.com/jquery/sizzle/issues/299) checkContext = null; return ret; } ]; for ( ; i < len; i++ ) { if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; } else { matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { if ( Expr.relative[ tokens[ j ].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*` tokens.slice( 0, i - 1 ) .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) ).replace( rtrimCSS, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), j < len && toSelector( tokens ) ); } matchers.push( matcher ); } } return elementMatcher( matchers ); } function matcherFromGroupMatchers( elementMatchers, setMatchers ) { var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function( seed, context, xml, results, outermost ) { var elem, j, matcher, matchedCount = 0, i = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, // We must always have either seed elements or outermost context elems = seed || byElement && Expr.find.TAG( "*", outermost ), // Use integer dirruns iff this is the outermost matcher dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), len = elems.length; if ( outermost ) { // Support: IE 11+, Edge 17 - 18+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing // two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq outermostContext = context == document || context || outermost; } // Add elements passing elementMatchers directly to results // Support: iOS <=7 - 9 only // Tolerate NodeList properties (IE: "length"; Safari: ) matching // elements by id. (see trac-14142) for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { if ( byElement && elem ) { j = 0; // Support: IE 11+, Edge 17 - 18+ // IE/Edge sometimes throw a "Permission denied" error when strict-comparing // two documents; shallow comparisons work. // eslint-disable-next-line eqeqeq if ( !context && elem.ownerDocument != document ) { setDocument( elem ); xml = !documentIsHTML; } while ( ( matcher = elementMatchers[ j++ ] ) ) { if ( matcher( elem, context || document, xml ) ) { push.call( results, elem ); break; } } if ( outermost ) { dirruns = dirrunsUnique; } } // Track unmatched elements for set filters if ( bySet ) { // They will have gone through all possible matchers if ( ( elem = !matcher && elem ) ) { matchedCount--; } // Lengthen the array for every element, matched or not if ( seed ) { unmatched.push( elem ); } } } // `i` is now the count of elements visited above, and adding it to `matchedCount` // makes the latter nonnegative. matchedCount += i; // Apply set filters to unmatched elements // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` // equals `i`), unless we didn't visit _any_ elements in the above loop because we have // no element matchers and no seed. // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that // case, which will result in a "00" `matchedCount` that differs from `i` but is also // numerically zero. if ( bySet && i !== matchedCount ) { j = 0; while ( ( matcher = setMatchers[ j++ ] ) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { if ( !( unmatched[ i ] || setMatched[ i ] ) ) { setMatched[ i ] = pop.call( results ); } } } // Discard index placeholder values to get only actual matches setMatched = condense( setMatched ); } // Add matches to results push.apply( results, setMatched ); // Seedless set matches succeeding multiple successful matchers stipulate sorting if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { jQuery.uniqueSort( results ); } } // Override manipulation of globals by nested matchers if ( outermost ) { dirruns = dirrunsUnique; outermostContext = contextBackup; } return unmatched; }; return bySet ? markFunction( superMatcher ) : superMatcher; } function compile( selector, match /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], cached = compilerCache[ selector + " " ]; if ( !cached ) { // Generate a function of recursive functions that can be used to check each element if ( !match ) { match = tokenize( selector ); } i = match.length; while ( i-- ) { cached = matcherFromTokens( match[ i ] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { elementMatchers.push( cached ); } } // Cache the compiled function cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); // Save selector and tokenization cached.selector = selector; } return cached; } /** * A low-level selection function that works with jQuery's compiled * selector functions * @param {String|Function} selector A selector or a pre-compiled * selector function built with jQuery selector compile * @param {Element} context * @param {Array} [results] * @param {Array} [seed] A set of elements to match against */ function select( selector, context, results, seed ) { var i, tokens, token, type, find, compiled = typeof selector === "function" && selector, match = !seed && tokenize( ( selector = compiled.selector || selector ) ); results = results || []; // Try to minimize operations if there is only one selector in the list and no seed // (the latter of which guarantees us context) if ( match.length === 1 ) { // Reduce context if the leading compound selector is an ID tokens = match[ 0 ] = match[ 0 ].slice( 0 ); if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { context = ( Expr.find.ID( token.matches[ 0 ].replace( runescape, funescape ), context ) || [] )[ 0 ]; if ( !context ) { return results; // Precompiled matchers will still verify ancestry, so step up a level } else if ( compiled ) { context = context.parentNode; } selector = selector.slice( tokens.shift().value.length ); } // Fetch a seed set for right-to-left matching i = matchExpr.needsContext.test( selector ) ? 0 : tokens.length; while ( i-- ) { token = tokens[ i ]; // Abort if we hit a combinator if ( Expr.relative[ ( type = token.type ) ] ) { break; } if ( ( find = Expr.find[ type ] ) ) { // Search, expanding context for leading sibling combinators if ( ( seed = find( token.matches[ 0 ].replace( runescape, funescape ), rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || context ) ) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); selector = seed.length && toSelector( tokens ); if ( !selector ) { push.apply( results, seed ); return results; } break; } } } } // Compile and execute a filtering function if one is not provided // Provide `match` to avoid retokenization if we modified the selector above ( compiled || compile( selector, match ) )( seed, context, !documentIsHTML, results, !context || rsibling.test( selector ) && testContext( context.parentNode ) || context ); return results; } // One-time assignments // Support: Android <=4.0 - 4.1+ // Sort stability support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; // Initialize against the default document setDocument(); // Support: Android <=4.0 - 4.1+ // Detached nodes confoundingly follow *each other* support.sortDetached = assert( function( el ) { // Should return 1, but returns 4 (following) return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; } ); jQuery.find = find; // Deprecated jQuery.expr[ ":" ] = jQuery.expr.pseudos; jQuery.unique = jQuery.uniqueSort; // These have always been private, but they used to be documented as part of // Sizzle so let's maintain them for now for backwards compatibility purposes. find.compile = compile; find.select = select; find.setDocument = setDocument; find.tokenize = tokenize; find.escape = jQuery.escapeSelector; find.getText = jQuery.text; find.isXML = jQuery.isXMLDoc; find.selectors = jQuery.expr; find.support = jQuery.support; find.uniqueSort = jQuery.uniqueSort; /* eslint-enable */ } )(); var dir = function( elem, dir, until ) { var matched = [], truncate = until !== undefined; while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { if ( elem.nodeType === 1 ) { if ( truncate && jQuery( elem ).is( until ) ) { break; } matched.push( elem ); } } return matched; }; var siblings = function( n, elem ) { var matched = []; for ( ; n; n = n.nextSibling ) { if ( n.nodeType === 1 && n !== elem ) { matched.push( n ); } } return matched; }; var rneedsContext = jQuery.expr.match.needsContext; var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); // Implement the identical functionality for filter and not function winnow( elements, qualifier, not ) { if ( isFunction( qualifier ) ) { return jQuery.grep( elements, function( elem, i ) { return !!qualifier.call( elem, i, elem ) !== not; } ); } // Single element if ( qualifier.nodeType ) { return jQuery.grep( elements, function( elem ) { return ( elem === qualifier ) !== not; } ); } // Arraylike of elements (jQuery, arguments, Array) if ( typeof qualifier !== "string" ) { return jQuery.grep( elements, function( elem ) { return ( indexOf.call( qualifier, elem ) > -1 ) !== not; } ); } // Filtered directly for both simple and complex selectors return jQuery.filter( qualifier, elements, not ); } jQuery.filter = function( expr, elems, not ) { var elem = elems[ 0 ]; if ( not ) { expr = ":not(" + expr + ")"; } if ( elems.length === 1 && elem.nodeType === 1 ) { return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; } return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { return elem.nodeType === 1; } ) ); }; jQuery.fn.extend( { find: function( selector ) { var i, ret, len = this.length, self = this; if ( typeof selector !== "string" ) { return this.pushStack( jQuery( selector ).filter( function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( self[ i ], this ) ) { return true; } } } ) ); } ret = this.pushStack( [] ); for ( i = 0; i < len; i++ ) { jQuery.find( selector, self[ i ], ret ); } return len > 1 ? jQuery.uniqueSort( ret ) : ret; }, filter: function( selector ) { return this.pushStack( winnow( this, selector || [], false ) ); }, not: function( selector ) { return this.pushStack( winnow( this, selector || [], true ) ); }, is: function( selector ) { return !!winnow( this, // If this is a positional/relative selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". typeof selector === "string" && rneedsContext.test( selector ) ? jQuery( selector ) : selector || [], false ).length; } } ); // Initialize a jQuery object // A central reference to the root jQuery(document) var rootjQuery, // A simple way to check for HTML strings // Prioritize #id over to avoid XSS via location.hash (trac-9521) // Strict HTML recognition (trac-11290: must start with <) // Shortcut simple #id case for speed rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, init = jQuery.fn.init = function( selector, context, root ) { var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false) if ( !selector ) { return this; } // Method init() accepts an alternate rootjQuery // so migrate can support jQuery.sub (gh-2101) root = root || rootjQuery; // Handle HTML strings if ( typeof selector === "string" ) { if ( selector[ 0 ] === "<" && selector[ selector.length - 1 ] === ">" && selector.length >= 3 ) { // Assume that strings that start and end with <> are HTML and skip the regex check match = [ null, selector, null ]; } else { match = rquickExpr.exec( selector ); } // Match html or make sure no context is specified for #id if ( match && ( match[ 1 ] || !context ) ) { // HANDLE: $(html) -> $(array) if ( match[ 1 ] ) { context = context instanceof jQuery ? context[ 0 ] : context; // Option to run scripts is true for back-compat // Intentionally let the error be thrown if parseHTML is not present jQuery.merge( this, jQuery.parseHTML( match[ 1 ], context && context.nodeType ? context.ownerDocument || context : document, true ) ); // HANDLE: $(html, props) if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { for ( match in context ) { // Properties of context are called as methods if possible if ( isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); // ...and otherwise set as attributes } else { this.attr( match, context[ match ] ); } } } return this; // HANDLE: $(#id) } else { elem = document.getElementById( match[ 2 ] ); if ( elem ) { // Inject the element directly into the jQuery object this[ 0 ] = elem; this.length = 1; } return this; } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return ( context || root ).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return this.constructor( context ).find( selector ); } // HANDLE: $(DOMElement) } else if ( selector.nodeType ) { this[ 0 ] = selector; this.length = 1; return this; // HANDLE: $(function) // Shortcut for document ready } else if ( isFunction( selector ) ) { return root.ready !== undefined ? root.ready( selector ) : // Execute immediately if ready is not present selector( jQuery ); } return jQuery.makeArray( selector, this ); }; // Give the init function the jQuery prototype for later instantiation init.prototype = jQuery.fn; // Initialize central reference rootjQuery = jQuery( document ); var rparentsprev = /^(?:parents|prev(?:Until|All))/, // Methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, contents: true, next: true, prev: true }; jQuery.fn.extend( { has: function( target ) { var targets = jQuery( target, this ), l = targets.length; return this.filter( function() { var i = 0; for ( ; i < l; i++ ) { if ( jQuery.contains( this, targets[ i ] ) ) { return true; } } } ); }, closest: function( selectors, context ) { var cur, i = 0, l = this.length, matched = [], targets = typeof selectors !== "string" && jQuery( selectors ); // Positional selectors never match, since there's no _selection_ context if ( !rneedsContext.test( selectors ) ) { for ( ; i < l; i++ ) { for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { // Always skip document fragments if ( cur.nodeType < 11 && ( targets ? targets.index( cur ) > -1 : // Don't pass non-elements to jQuery#find cur.nodeType === 1 && jQuery.find.matchesSelector( cur, selectors ) ) ) { matched.push( cur ); break; } } } } return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); }, // Determine the position of an element within the set index: function( elem ) { // No argument, return index in parent if ( !elem ) { return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; } // Index in selector if ( typeof elem === "string" ) { return indexOf.call( jQuery( elem ), this[ 0 ] ); } // Locate the position of the desired element return indexOf.call( this, // If it receives a jQuery object, the first element is used elem.jquery ? elem[ 0 ] : elem ); }, add: function( selector, context ) { return this.pushStack( jQuery.uniqueSort( jQuery.merge( this.get(), jQuery( selector, context ) ) ) ); }, addBack: function( selector ) { return this.add( selector == null ? this.prevObject : this.prevObject.filter( selector ) ); } } ); function sibling( cur, dir ) { while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} return cur; } jQuery.each( { parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { return dir( elem, "parentNode" ); }, parentsUntil: function( elem, _i, until ) { return dir( elem, "parentNode", until ); }, next: function( elem ) { return sibling( elem, "nextSibling" ); }, prev: function( elem ) { return sibling( elem, "previousSibling" ); }, nextAll: function( elem ) { return dir( elem, "nextSibling" ); }, prevAll: function( elem ) { return dir( elem, "previousSibling" ); }, nextUntil: function( elem, _i, until ) { return dir( elem, "nextSibling", until ); }, prevUntil: function( elem, _i, until ) { return dir( elem, "previousSibling", until ); }, siblings: function( elem ) { return siblings( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { return siblings( elem.firstChild ); }, contents: function( elem ) { if ( elem.contentDocument != null && // Support: IE 11+ // elements with no `data` attribute has an object // `contentDocument` with a `null` prototype. getProto( elem.contentDocument ) ) { return elem.contentDocument; } // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only // Treat the template element as a regular one in browsers that // don't support it. if ( nodeName( elem, "template" ) ) { elem = elem.content || elem; } return jQuery.merge( [], elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var matched = jQuery.map( this, fn, until ); if ( name.slice( -5 ) !== "Until" ) { selector = until; } if ( selector && typeof selector === "string" ) { matched = jQuery.filter( selector, matched ); } if ( this.length > 1 ) { // Remove duplicates if ( !guaranteedUnique[ name ] ) { jQuery.uniqueSort( matched ); } // Reverse order for parents* and prev-derivatives if ( rparentsprev.test( name ) ) { matched.reverse(); } } return this.pushStack( matched ); }; } ); var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); // Convert String-formatted options into Object-formatted ones function createOptions( options ) { var object = {}; jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { object[ flag ] = true; } ); return object; } /* * Create a callback list using the following parameters: * * options: an optional list of space-separated options that will change how * the callback list behaves or a more traditional option object * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible options: * * once: will ensure the callback list can only be fired once (like a Deferred) * * memory: will keep track of previous values and will call any callback added * after the list has been fired right away with the latest "memorized" * values (like a Deferred) * * unique: will ensure a callback can only be added once (no duplicate in the list) * * stopOnFalse: interrupt callings when a callback returns false * */ jQuery.Callbacks = function( options ) { // Convert options from String-formatted to Object-formatted if needed // (we check in cache first) options = typeof options === "string" ? createOptions( options ) : jQuery.extend( {}, options ); var // Flag to know if list is currently firing firing, // Last fire value for non-forgettable lists memory, // Flag to know if list was already fired fired, // Flag to prevent firing locked, // Actual callback list list = [], // Queue of execution data for repeatable lists queue = [], // Index of currently firing callback (modified by add/remove as needed) firingIndex = -1, // Fire callbacks fire = function() { // Enforce single-firing locked = locked || options.once; // Execute callbacks for all pending executions, // respecting firingIndex overrides and runtime changes fired = firing = true; for ( ; queue.length; firingIndex = -1 ) { memory = queue.shift(); while ( ++firingIndex < list.length ) { // Run callback and check for early termination if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && options.stopOnFalse ) { // Jump to end and forget the data so .add doesn't re-fire firingIndex = list.length; memory = false; } } } // Forget the data if we're done with it if ( !options.memory ) { memory = false; } firing = false; // Clean up if we're done firing for good if ( locked ) { // Keep an empty list if we have data for future add calls if ( memory ) { list = []; // Otherwise, this object is spent } else { list = ""; } } }, // Actual Callbacks object self = { // Add a callback or a collection of callbacks to the list add: function() { if ( list ) { // If we have memory from a past run, we should fire after adding if ( memory && !firing ) { firingIndex = list.length - 1; queue.push( memory ); } ( function add( args ) { jQuery.each( args, function( _, arg ) { if ( isFunction( arg ) ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } } else if ( arg && arg.length && toType( arg ) !== "string" ) { // Inspect recursively add( arg ); } } ); } )( arguments ); if ( memory && !firing ) { fire(); } } return this; }, // Remove a callback from the list remove: function() { jQuery.each( arguments, function( _, arg ) { var index; while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { list.splice( index, 1 ); // Handle firing indexes if ( index <= firingIndex ) { firingIndex--; } } } ); return this; }, // Check if a given callback is in the list. // If no argument is given, return whether or not list has callbacks attached. has: function( fn ) { return fn ? jQuery.inArray( fn, list ) > -1 : list.length > 0; }, // Remove all callbacks from the list empty: function() { if ( list ) { list = []; } return this; }, // Disable .fire and .add // Abort any current/pending executions // Clear all callbacks and values disable: function() { locked = queue = []; list = memory = ""; return this; }, disabled: function() { return !list; }, // Disable .fire // Also disable .add unless we have memory (since it would have no effect) // Abort any pending executions lock: function() { locked = queue = []; if ( !memory && !firing ) { list = memory = ""; } return this; }, locked: function() { return !!locked; }, // Call all callbacks with the given context and arguments fireWith: function( context, args ) { if ( !locked ) { args = args || []; args = [ context, args.slice ? args.slice() : args ]; queue.push( args ); if ( !firing ) { fire(); } } return this; }, // Call all the callbacks with the given arguments fire: function() { self.fireWith( this, arguments ); return this; }, // To know if the callbacks have already been called at least once fired: function() { return !!fired; } }; return self; }; function Identity( v ) { return v; } function Thrower( ex ) { throw ex; } function adoptValue( value, resolve, reject, noValue ) { var method; try { // Check for promise aspect first to privilege synchronous behavior if ( value && isFunction( ( method = value.promise ) ) ) { method.call( value ).done( resolve ).fail( reject ); // Other thenables } else if ( value && isFunction( ( method = value.then ) ) ) { method.call( value, resolve, reject ); // Other non-thenables } else { // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: // * false: [ value ].slice( 0 ) => resolve( value ) // * true: [ value ].slice( 1 ) => resolve() resolve.apply( undefined, [ value ].slice( noValue ) ); } // For Promises/A+, convert exceptions into rejections // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in // Deferred#then to conditionally suppress rejection. } catch ( value ) { // Support: Android 4.0 only // Strict mode functions invoked without .call/.apply get global-object context reject.apply( undefined, [ value ] ); } } jQuery.extend( { Deferred: function( func ) { var tuples = [ // action, add listener, callbacks, // ... .then handlers, argument index, [final state] [ "notify", "progress", jQuery.Callbacks( "memory" ), jQuery.Callbacks( "memory" ), 2 ], [ "resolve", "done", jQuery.Callbacks( "once memory" ), jQuery.Callbacks( "once memory" ), 0, "resolved" ], [ "reject", "fail", jQuery.Callbacks( "once memory" ), jQuery.Callbacks( "once memory" ), 1, "rejected" ] ], state = "pending", promise = { state: function() { return state; }, always: function() { deferred.done( arguments ).fail( arguments ); return this; }, "catch": function( fn ) { return promise.then( null, fn ); }, // Keep pipe for back-compat pipe: function( /* fnDone, fnFail, fnProgress */ ) { var fns = arguments; return jQuery.Deferred( function( newDefer ) { jQuery.each( tuples, function( _i, tuple ) { // Map tuples (progress, done, fail) to arguments (done, fail, progress) var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; // deferred.progress(function() { bind to newDefer or newDefer.notify }) // deferred.done(function() { bind to newDefer or newDefer.resolve }) // deferred.fail(function() { bind to newDefer or newDefer.reject }) deferred[ tuple[ 1 ] ]( function() { var returned = fn && fn.apply( this, arguments ); if ( returned && isFunction( returned.promise ) ) { returned.promise() .progress( newDefer.notify ) .done( newDefer.resolve ) .fail( newDefer.reject ); } else { newDefer[ tuple[ 0 ] + "With" ]( this, fn ? [ returned ] : arguments ); } } ); } ); fns = null; } ).promise(); }, then: function( onFulfilled, onRejected, onProgress ) { var maxDepth = 0; function resolve( depth, deferred, handler, special ) { return function() { var that = this, args = arguments, mightThrow = function() { var returned, then; // Support: Promises/A+ section 2.3.3.3.3 // https://promisesaplus.com/#point-59 // Ignore double-resolution attempts if ( depth < maxDepth ) { return; } returned = handler.apply( that, args ); // Support: Promises/A+ section 2.3.1 // https://promisesaplus.com/#point-48 if ( returned === deferred.promise() ) { throw new TypeError( "Thenable self-resolution" ); } // Support: Promises/A+ sections 2.3.3.1, 3.5 // https://promisesaplus.com/#point-54 // https://promisesaplus.com/#point-75 // Retrieve `then` only once then = returned && // Support: Promises/A+ section 2.3.4 // https://promisesaplus.com/#point-64 // Only check objects and functions for thenability ( typeof returned === "object" || typeof returned === "function" ) && returned.then; // Handle a returned thenable if ( isFunction( then ) ) { // Special processors (notify) just wait for resolution if ( special ) { then.call( returned, resolve( maxDepth, deferred, Identity, special ), resolve( maxDepth, deferred, Thrower, special ) ); // Normal processors (resolve) also hook into progress } else { // ...and disregard older resolution values maxDepth++; then.call( returned, resolve( maxDepth, deferred, Identity, special ), resolve( maxDepth, deferred, Thrower, special ), resolve( maxDepth, deferred, Identity, deferred.notifyWith ) ); } // Handle all other returned values } else { // Only substitute handlers pass on context // and multiple values (non-spec behavior) if ( handler !== Identity ) { that = undefined; args = [ returned ]; } // Process the value(s) // Default process is resolve ( special || deferred.resolveWith )( that, args ); } }, // Only normal processors (resolve) catch and reject exceptions process = special ? mightThrow : function() { try { mightThrow(); } catch ( e ) { if ( jQuery.Deferred.exceptionHook ) { jQuery.Deferred.exceptionHook( e, process.error ); } // Support: Promises/A+ section 2.3.3.3.4.1 // https://promisesaplus.com/#point-61 // Ignore post-resolution exceptions if ( depth + 1 >= maxDepth ) { // Only substitute handlers pass on context // and multiple values (non-spec behavior) if ( handler !== Thrower ) { that = undefined; args = [ e ]; } deferred.rejectWith( that, args ); } } }; // Support: Promises/A+ section 2.3.3.3.1 // https://promisesaplus.com/#point-57 // Re-resolve promises immediately to dodge false rejection from // subsequent errors if ( depth ) { process(); } else { // Call an optional hook to record the error, in case of exception // since it's otherwise lost when execution goes async if ( jQuery.Deferred.getErrorHook ) { process.error = jQuery.Deferred.getErrorHook(); // The deprecated alias of the above. While the name suggests // returning the stack, not an error instance, jQuery just passes // it directly to `console.warn` so both will work; an instance // just better cooperates with source maps. } else if ( jQuery.Deferred.getStackHook ) { process.error = jQuery.Deferred.getStackHook(); } window.setTimeout( process ); } }; } return jQuery.Deferred( function( newDefer ) { // progress_handlers.add( ... ) tuples[ 0 ][ 3 ].add( resolve( 0, newDefer, isFunction( onProgress ) ? onProgress : Identity, newDefer.notifyWith ) ); // fulfilled_handlers.add( ... ) tuples[ 1 ][ 3 ].add( resolve( 0, newDefer, isFunction( onFulfilled ) ? onFulfilled : Identity ) ); // rejected_handlers.add( ... ) tuples[ 2 ][ 3 ].add( resolve( 0, newDefer, isFunction( onRejected ) ? onRejected : Thrower ) ); } ).promise(); }, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { return obj != null ? jQuery.extend( obj, promise ) : promise; } }, deferred = {}; // Add list-specific methods jQuery.each( tuples, function( i, tuple ) { var list = tuple[ 2 ], stateString = tuple[ 5 ]; // promise.progress = list.add // promise.done = list.add // promise.fail = list.add promise[ tuple[ 1 ] ] = list.add; // Handle state if ( stateString ) { list.add( function() { // state = "resolved" (i.e., fulfilled) // state = "rejected" state = stateString; }, // rejected_callbacks.disable // fulfilled_callbacks.disable tuples[ 3 - i ][ 2 ].disable, // rejected_handlers.disable // fulfilled_handlers.disable tuples[ 3 - i ][ 3 ].disable, // progress_callbacks.lock tuples[ 0 ][ 2 ].lock, // progress_handlers.lock tuples[ 0 ][ 3 ].lock ); } // progress_handlers.fire // fulfilled_handlers.fire // rejected_handlers.fire list.add( tuple[ 3 ].fire ); // deferred.notify = function() { deferred.notifyWith(...) } // deferred.resolve = function() { deferred.resolveWith(...) } // deferred.reject = function() { deferred.rejectWith(...) } deferred[ tuple[ 0 ] ] = function() { deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); return this; }; // deferred.notifyWith = list.fireWith // deferred.resolveWith = list.fireWith // deferred.rejectWith = list.fireWith deferred[ tuple[ 0 ] + "With" ] = list.fireWith; } ); // Make the deferred a promise promise.promise( deferred ); // Call given func if any if ( func ) { func.call( deferred, deferred ); } // All done! return deferred; }, // Deferred helper when: function( singleValue ) { var // count of uncompleted subordinates remaining = arguments.length, // count of unprocessed arguments i = remaining, // subordinate fulfillment data resolveContexts = Array( i ), resolveValues = slice.call( arguments ), // the primary Deferred primary = jQuery.Deferred(), // subordinate callback factory updateFunc = function( i ) { return function( value ) { resolveContexts[ i ] = this; resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; if ( !( --remaining ) ) { primary.resolveWith( resolveContexts, resolveValues ); } }; }; // Single- and empty arguments are adopted like Promise.resolve if ( remaining <= 1 ) { adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, !remaining ); // Use .then() to unwrap secondary thenables (cf. gh-3000) if ( primary.state() === "pending" || isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { return primary.then(); } } // Multiple arguments are aggregated like Promise.all array elements while ( i-- ) { adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); } return primary.promise(); } } ); // These usually indicate a programmer mistake during development, // warn about them ASAP rather than swallowing them by default. var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; // If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error // captured before the async barrier to get the original error cause // which may otherwise be hidden. jQuery.Deferred.exceptionHook = function( error, asyncError ) { // Support: IE 8 - 9 only // Console exists when dev tools are open, which can happen at any time if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, asyncError ); } }; jQuery.readyException = function( error ) { window.setTimeout( function() { throw error; } ); }; // The deferred used on DOM ready var readyList = jQuery.Deferred(); jQuery.fn.ready = function( fn ) { readyList .then( fn ) // Wrap jQuery.readyException in a function so that the lookup // happens at the time of error handling instead of callback // registration. .catch( function( error ) { jQuery.readyException( error ); } ); return this; }; jQuery.extend( { // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See trac-6781 readyWait: 1, // Handle when the DOM is ready ready: function( wait ) { // Abort if there are pending holds or we're already ready if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { return; } // Remember that the DOM is ready jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.resolveWith( document, [ jQuery ] ); } } ); jQuery.ready.then = readyList.then; // The ready event handler and self cleanup method function completed() { document.removeEventListener( "DOMContentLoaded", completed ); window.removeEventListener( "load", completed ); jQuery.ready(); } // Catch cases where $(document).ready() is called // after the browser event has already occurred. // Support: IE <=9 - 10 only // Older IE sometimes signals "interactive" too soon if ( document.readyState === "complete" || ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { // Handle it asynchronously to allow scripts the opportunity to delay ready window.setTimeout( jQuery.ready ); } else { // Use the handy event callback document.addEventListener( "DOMContentLoaded", completed ); // A fallback to window.onload, that will always work window.addEventListener( "load", completed ); } // Multifunctional method to get and set values of a collection // The value/s can optionally be executed if it's a function var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { var i = 0, len = elems.length, bulk = key == null; // Sets many values if ( toType( key ) === "object" ) { chainable = true; for ( i in key ) { access( elems, fn, i, key[ i ], true, emptyGet, raw ); } // Sets one value } else if ( value !== undefined ) { chainable = true; if ( !isFunction( value ) ) { raw = true; } if ( bulk ) { // Bulk operations run against the entire set if ( raw ) { fn.call( elems, value ); fn = null; // ...except when executing function values } else { bulk = fn; fn = function( elem, _key, value ) { return bulk.call( jQuery( elem ), value ); }; } } if ( fn ) { for ( ; i < len; i++ ) { fn( elems[ i ], key, raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) ) ); } } } if ( chainable ) { return elems; } // Gets if ( bulk ) { return fn.call( elems ); } return len ? fn( elems[ 0 ], key ) : emptyGet; }; // Matches dashed string for camelizing var rmsPrefix = /^-ms-/, rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace() function fcamelCase( _all, letter ) { return letter.toUpperCase(); } // Convert dashed to camelCase; used by the css and data modules // Support: IE <=9 - 11, Edge 12 - 15 // Microsoft forgot to hump their vendor prefix (trac-9572) function camelCase( string ) { return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); } var acceptData = function( owner ) { // Accepts only: // - Node // - Node.ELEMENT_NODE // - Node.DOCUMENT_NODE // - Object // - Any return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); }; function Data() { this.expando = jQuery.expando + Data.uid++; } Data.uid = 1; Data.prototype = { cache: function( owner ) { // Check if the owner object already has a cache var value = owner[ this.expando ]; // If not, create one if ( !value ) { value = {}; // We can accept data for non-element nodes in modern browsers, // but we should not, see trac-8335. // Always return an empty object. if ( acceptData( owner ) ) { // If it is a node unlikely to be stringify-ed or looped over // use plain assignment if ( owner.nodeType ) { owner[ this.expando ] = value; // Otherwise secure it in a non-enumerable property // configurable must be true to allow the property to be // deleted when data is removed } else { Object.defineProperty( owner, this.expando, { value: value, configurable: true } ); } } } return value; }, set: function( owner, data, value ) { var prop, cache = this.cache( owner ); // Handle: [ owner, key, value ] args // Always use camelCase key (gh-2257) if ( typeof data === "string" ) { cache[ camelCase( data ) ] = value; // Handle: [ owner, { properties } ] args } else { // Copy the properties one-by-one to the cache object for ( prop in data ) { cache[ camelCase( prop ) ] = data[ prop ]; } } return cache; }, get: function( owner, key ) { return key === undefined ? this.cache( owner ) : // Always use camelCase key (gh-2257) owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; }, access: function( owner, key, value ) { // In cases where either: // // 1. No key was specified // 2. A string key was specified, but no value provided // // Take the "read" path and allow the get method to determine // which value to return, respectively either: // // 1. The entire cache object // 2. The data stored at the key // if ( key === undefined || ( ( key && typeof key === "string" ) && value === undefined ) ) { return this.get( owner, key ); } // When the key is not a string, or both a key and value // are specified, set or extend (existing objects) with either: // // 1. An object of properties // 2. A key and value // this.set( owner, key, value ); // Since the "set" path can have two possible entry points // return the expected data based on which path was taken[*] return value !== undefined ? value : key; }, remove: function( owner, key ) { var i, cache = owner[ this.expando ]; if ( cache === undefined ) { return; } if ( key !== undefined ) { // Support array or space separated string of keys if ( Array.isArray( key ) ) { // If key is an array of keys... // We always set camelCase keys, so remove that. key = key.map( camelCase ); } else { key = camelCase( key ); // If a key with the spaces exists, use it. // Otherwise, create an array by matching non-whitespace key = key in cache ? [ key ] : ( key.match( rnothtmlwhite ) || [] ); } i = key.length; while ( i-- ) { delete cache[ key[ i ] ]; } } // Remove the expando if there's no more data if ( key === undefined || jQuery.isEmptyObject( cache ) ) { // Support: Chrome <=35 - 45 // Webkit & Blink performance suffers when deleting properties // from DOM nodes, so set to undefined instead // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) if ( owner.nodeType ) { owner[ this.expando ] = undefined; } else { delete owner[ this.expando ]; } } }, hasData: function( owner ) { var cache = owner[ this.expando ]; return cache !== undefined && !jQuery.isEmptyObject( cache ); } }; var dataPriv = new Data(); var dataUser = new Data(); // Implementation Summary // // 1. Enforce API surface and semantic compatibility with 1.9.x branch // 2. Improve the module's maintainability by reducing the storage // paths to a single mechanism. // 3. Use the same single mechanism to support "private" and "user" data. // 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) // 5. Avoid exposing implementation details on user objects (eg. expando properties) // 6. Provide a clear path for implementation upgrade to WeakMap in 2014 var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, rmultiDash = /[A-Z]/g; function getData( data ) { if ( data === "true" ) { return true; } if ( data === "false" ) { return false; } if ( data === "null" ) { return null; } // Only convert to a number if it doesn't change the string if ( data === +data + "" ) { return +data; } if ( rbrace.test( data ) ) { return JSON.parse( data ); } return data; } function dataAttr( elem, key, data ) { var name; // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); data = elem.getAttribute( name ); if ( typeof data === "string" ) { try { data = getData( data ); } catch ( e ) {} // Make sure we set the data so it isn't changed later dataUser.set( elem, key, data ); } else { data = undefined; } } return data; } jQuery.extend( { hasData: function( elem ) { return dataUser.hasData( elem ) || dataPriv.hasData( elem ); }, data: function( elem, name, data ) { return dataUser.access( elem, name, data ); }, removeData: function( elem, name ) { dataUser.remove( elem, name ); }, // TODO: Now that all calls to _data and _removeData have been replaced // with direct calls to dataPriv methods, these can be deprecated. _data: function( elem, name, data ) { return dataPriv.access( elem, name, data ); }, _removeData: function( elem, name ) { dataPriv.remove( elem, name ); } } ); jQuery.fn.extend( { data: function( key, value ) { var i, name, data, elem = this[ 0 ], attrs = elem && elem.attributes; // Gets all values if ( key === undefined ) { if ( this.length ) { data = dataUser.get( elem ); if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { i = attrs.length; while ( i-- ) { // Support: IE 11 only // The attrs elements can be null (trac-14894) if ( attrs[ i ] ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { name = camelCase( name.slice( 5 ) ); dataAttr( elem, name, data[ name ] ); } } } dataPriv.set( elem, "hasDataAttrs", true ); } } return data; } // Sets multiple values if ( typeof key === "object" ) { return this.each( function() { dataUser.set( this, key ); } ); } return access( this, function( value ) { var data; // The calling jQuery object (element matches) is not empty // (and therefore has an element appears at this[ 0 ]) and the // `value` parameter was not undefined. An empty jQuery object // will result in `undefined` for elem = this[ 0 ] which will // throw an exception if an attempt to read a data cache is made. if ( elem && value === undefined ) { // Attempt to get data from the cache // The key will always be camelCased in Data data = dataUser.get( elem, key ); if ( data !== undefined ) { return data; } // Attempt to "discover" the data in // HTML5 custom data-* attrs data = dataAttr( elem, key ); if ( data !== undefined ) { return data; } // We tried really hard, but the data doesn't exist. return; } // Set the data... this.each( function() { // We always store the camelCased key dataUser.set( this, key, value ); } ); }, null, value, arguments.length > 1, null, true ); }, removeData: function( key ) { return this.each( function() { dataUser.remove( this, key ); } ); } } ); jQuery.extend( { queue: function( elem, type, data ) { var queue; if ( elem ) { type = ( type || "fx" ) + "queue"; queue = dataPriv.get( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { if ( !queue || Array.isArray( data ) ) { queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); } else { queue.push( data ); } } return queue || []; } }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks( elem, type ), next = function() { jQuery.dequeue( elem, type ); }; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); startLength--; } if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift( "inprogress" ); } // Clear up the last queue stop function delete hooks.stop; fn.call( elem, next, hooks ); } if ( !startLength && hooks ) { hooks.empty.fire(); } }, // Not public - generate a queueHooks object, or return the current one _queueHooks: function( elem, type ) { var key = type + "queueHooks"; return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { empty: jQuery.Callbacks( "once memory" ).add( function() { dataPriv.remove( elem, [ type + "queue", key ] ); } ) } ); } } ); jQuery.fn.extend( { queue: function( type, data ) { var setter = 2; if ( typeof type !== "string" ) { data = type; type = "fx"; setter--; } if ( arguments.length < setter ) { return jQuery.queue( this[ 0 ], type ); } return data === undefined ? this : this.each( function() { var queue = jQuery.queue( this, type, data ); // Ensure a hooks for this queue jQuery._queueHooks( this, type ); if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { jQuery.dequeue( this, type ); } } ); }, dequeue: function( type ) { return this.each( function() { jQuery.dequeue( this, type ); } ); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); }, // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, obj ) { var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() { if ( !( --count ) ) { defer.resolveWith( elements, [ elements ] ); } }; if ( typeof type !== "string" ) { obj = type; type = undefined; } type = type || "fx"; while ( i-- ) { tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); if ( tmp && tmp.empty ) { count++; tmp.empty.add( resolve ); } } resolve(); return defer.promise( obj ); } } ); var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; var documentElement = document.documentElement; var isAttached = function( elem ) { return jQuery.contains( elem.ownerDocument, elem ); }, composed = { composed: true }; // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only // Check attachment across shadow DOM boundaries when possible (gh-3504) // Support: iOS 10.0-10.2 only // Early iOS 10 versions support `attachShadow` but not `getRootNode`, // leading to errors. We need to check for `getRootNode`. if ( documentElement.getRootNode ) { isAttached = function( elem ) { return jQuery.contains( elem.ownerDocument, elem ) || elem.getRootNode( composed ) === elem.ownerDocument; }; } var isHiddenWithinTree = function( elem, el ) { // isHiddenWithinTree might be called from jQuery#filter function; // in that case, element will be second argument elem = el || elem; // Inline style trumps all return elem.style.display === "none" || elem.style.display === "" && // Otherwise, check computed style // Support: Firefox <=43 - 45 // Disconnected elements can have computed display: none, so first confirm that elem is // in the document. isAttached( elem ) && jQuery.css( elem, "display" ) === "none"; }; function adjustCSS( elem, prop, valueParts, tween ) { var adjusted, scale, maxIterations = 20, currentValue = tween ? function() { return tween.cur(); } : function() { return jQuery.css( elem, prop, "" ); }, initial = currentValue(), unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), // Starting value computation is required for potential unit mismatches initialInUnit = elem.nodeType && ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && rcssNum.exec( jQuery.css( elem, prop ) ); if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { // Support: Firefox <=54 // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) initial = initial / 2; // Trust units reported by jQuery.css unit = unit || initialInUnit[ 3 ]; // Iteratively approximate from a nonzero starting point initialInUnit = +initial || 1; while ( maxIterations-- ) { // Evaluate and update our best guess (doubling guesses that zero out). // Finish if the scale equals or crosses 1 (making the old*new product non-positive). jQuery.style( elem, prop, initialInUnit + unit ); if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { maxIterations = 0; } initialInUnit = initialInUnit / scale; } initialInUnit = initialInUnit * 2; jQuery.style( elem, prop, initialInUnit + unit ); // Make sure we update the tween properties later on valueParts = valueParts || []; } if ( valueParts ) { initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified adjusted = valueParts[ 1 ] ? initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : +valueParts[ 2 ]; if ( tween ) { tween.unit = unit; tween.start = initialInUnit; tween.end = adjusted; } } return adjusted; } var defaultDisplayMap = {}; function getDefaultDisplay( elem ) { var temp, doc = elem.ownerDocument, nodeName = elem.nodeName, display = defaultDisplayMap[ nodeName ]; if ( display ) { return display; } temp = doc.body.appendChild( doc.createElement( nodeName ) ); display = jQuery.css( temp, "display" ); temp.parentNode.removeChild( temp ); if ( display === "none" ) { display = "block"; } defaultDisplayMap[ nodeName ] = display; return display; } function showHide( elements, show ) { var display, elem, values = [], index = 0, length = elements.length; // Determine new display value for elements that need to change for ( ; index < length; index++ ) { elem = elements[ index ]; if ( !elem.style ) { continue; } display = elem.style.display; if ( show ) { // Since we force visibility upon cascade-hidden elements, an immediate (and slow) // check is required in this first loop unless we have a nonempty display value (either // inline or about-to-be-restored) if ( display === "none" ) { values[ index ] = dataPriv.get( elem, "display" ) || null; if ( !values[ index ] ) { elem.style.display = ""; } } if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { values[ index ] = getDefaultDisplay( elem ); } } else { if ( display !== "none" ) { values[ index ] = "none"; // Remember what we're overwriting dataPriv.set( elem, "display", display ); } } } // Set the display of the elements in a second loop to avoid constant reflow for ( index = 0; index < length; index++ ) { if ( values[ index ] != null ) { elements[ index ].style.display = values[ index ]; } } return elements; } jQuery.fn.extend( { show: function() { return showHide( this, true ); }, hide: function() { return showHide( this ); }, toggle: function( state ) { if ( typeof state === "boolean" ) { return state ? this.show() : this.hide(); } return this.each( function() { if ( isHiddenWithinTree( this ) ) { jQuery( this ).show(); } else { jQuery( this ).hide(); } } ); } } ); var rcheckableType = ( /^(?:checkbox|radio)$/i ); var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); ( function() { var fragment = document.createDocumentFragment(), div = fragment.appendChild( document.createElement( "div" ) ), input = document.createElement( "input" ); // Support: Android 4.0 - 4.3 only // Check state lost if the name is set (trac-11217) // Support: Windows Web Apps (WWA) // `name` and `type` must use .setAttribute for WWA (trac-14901) input.setAttribute( "type", "radio" ); input.setAttribute( "checked", "checked" ); input.setAttribute( "name", "t" ); div.appendChild( input ); // Support: Android <=4.1 only // Older WebKit doesn't clone checked state correctly in fragments support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; // Support: IE <=11 only // Make sure textarea (and checkbox) defaultValue is properly cloned div.innerHTML = ""; support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; // Support: IE <=9 only // IE <=9 replaces "; support.option = !!div.lastChild; } )(); // We have to close these tags to support XHTML (trac-13200) var wrapMap = { // XHTML parsers do not magically insert elements in the // same way that tag soup parsers do. So we cannot shorten // this by omitting or other required elements. thead: [ 1, "", "
          " ], col: [ 2, "", "
          " ], tr: [ 2, "", "
          " ], td: [ 3, "", "
          " ], _default: [ 0, "", "" ] }; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; // Support: IE <=9 only if ( !support.option ) { wrapMap.optgroup = wrapMap.option = [ 1, "" ]; } function getAll( context, tag ) { // Support: IE <=9 - 11 only // Use typeof to avoid zero-argument method invocation on host objects (trac-15151) var ret; if ( typeof context.getElementsByTagName !== "undefined" ) { ret = context.getElementsByTagName( tag || "*" ); } else if ( typeof context.querySelectorAll !== "undefined" ) { ret = context.querySelectorAll( tag || "*" ); } else { ret = []; } if ( tag === undefined || tag && nodeName( context, tag ) ) { return jQuery.merge( [ context ], ret ); } return ret; } // Mark scripts as having already been evaluated function setGlobalEval( elems, refElements ) { var i = 0, l = elems.length; for ( ; i < l; i++ ) { dataPriv.set( elems[ i ], "globalEval", !refElements || dataPriv.get( refElements[ i ], "globalEval" ) ); } } var rhtml = /<|&#?\w+;/; function buildFragment( elems, context, scripts, selection, ignored ) { var elem, tmp, tag, wrap, attached, j, fragment = context.createDocumentFragment(), nodes = [], i = 0, l = elems.length; for ( ; i < l; i++ ) { elem = elems[ i ]; if ( elem || elem === 0 ) { // Add nodes directly if ( toType( elem ) === "object" ) { // Support: Android <=4.0 only, PhantomJS 1 only // push.apply(_, arraylike) throws on ancient WebKit jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); // Convert non-html into a text node } else if ( !rhtml.test( elem ) ) { nodes.push( context.createTextNode( elem ) ); // Convert html into DOM nodes } else { tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); // Deserialize a standard representation tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); wrap = wrapMap[ tag ] || wrapMap._default; tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; // Descend through wrappers to the right content j = wrap[ 0 ]; while ( j-- ) { tmp = tmp.lastChild; } // Support: Android <=4.0 only, PhantomJS 1 only // push.apply(_, arraylike) throws on ancient WebKit jQuery.merge( nodes, tmp.childNodes ); // Remember the top-level container tmp = fragment.firstChild; // Ensure the created nodes are orphaned (trac-12392) tmp.textContent = ""; } } } // Remove wrapper from fragment fragment.textContent = ""; i = 0; while ( ( elem = nodes[ i++ ] ) ) { // Skip elements already in the context collection (trac-4087) if ( selection && jQuery.inArray( elem, selection ) > -1 ) { if ( ignored ) { ignored.push( elem ); } continue; } attached = isAttached( elem ); // Append to fragment tmp = getAll( fragment.appendChild( elem ), "script" ); // Preserve script evaluation history if ( attached ) { setGlobalEval( tmp ); } // Capture executables if ( scripts ) { j = 0; while ( ( elem = tmp[ j++ ] ) ) { if ( rscriptType.test( elem.type || "" ) ) { scripts.push( elem ); } } } } return fragment; } var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; function returnTrue() { return true; } function returnFalse() { return false; } function on( elem, types, selector, data, fn, one ) { var origFn, type; // Types can be a map of types/handlers if ( typeof types === "object" ) { // ( types-Object, selector, data ) if ( typeof selector !== "string" ) { // ( types-Object, data ) data = data || selector; selector = undefined; } for ( type in types ) { on( elem, type, selector, data, types[ type ], one ); } return elem; } if ( data == null && fn == null ) { // ( types, fn ) fn = selector; data = selector = undefined; } else if ( fn == null ) { if ( typeof selector === "string" ) { // ( types, selector, fn ) fn = data; data = undefined; } else { // ( types, data, fn ) fn = data; data = selector; selector = undefined; } } if ( fn === false ) { fn = returnFalse; } else if ( !fn ) { return elem; } if ( one === 1 ) { origFn = fn; fn = function( event ) { // Can use an empty set, since event contains the info jQuery().off( event ); return origFn.apply( this, arguments ); }; // Use same guid so caller can remove using origFn fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); } return elem.each( function() { jQuery.event.add( this, types, fn, data, selector ); } ); } /* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. */ jQuery.event = { global: {}, add: function( elem, types, handler, data, selector ) { var handleObjIn, eventHandle, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.get( elem ); // Only attach events to objects that accept data if ( !acceptData( elem ) ) { return; } // Caller can pass in an object of custom data in lieu of the handler if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; selector = handleObjIn.selector; } // Ensure that invalid selectors throw exceptions at attach time // Evaluate against documentElement in case elem is a non-element node (e.g., document) if ( selector ) { jQuery.find.matchesSelector( documentElement, selector ); } // Make sure that the handler has a unique ID, used to find/remove it later if ( !handler.guid ) { handler.guid = jQuery.guid++; } // Init the element's event structure and main handler, if this is the first if ( !( events = elemData.events ) ) { events = elemData.events = Object.create( null ); } if ( !( eventHandle = elemData.handle ) ) { eventHandle = elemData.handle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply( elem, arguments ) : undefined; }; } // Handle multiple events separated by a space types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[ t ] ) || []; type = origType = tmp[ 1 ]; namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // There *must* be a type, no attaching namespace-only handlers if ( !type ) { continue; } // If event changes its type, use the special event handlers for the changed type special = jQuery.event.special[ type ] || {}; // If selector defined, determine special event api type, otherwise given type type = ( selector ? special.delegateType : special.bindType ) || type; // Update special based on newly reset type special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers handleObj = jQuery.extend( { type: type, origType: origType, data: data, handler: handler, guid: handler.guid, selector: selector, needsContext: selector && jQuery.expr.match.needsContext.test( selector ), namespace: namespaces.join( "." ) }, handleObjIn ); // Init the event handler queue if we're the first if ( !( handlers = events[ type ] ) ) { handlers = events[ type ] = []; handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle ); } } } if ( special.add ) { special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } // Add to the element's handler list, delegates in front if ( selector ) { handlers.splice( handlers.delegateCount++, 0, handleObj ); } else { handlers.push( handleObj ); } // Keep track of which events have ever been used, for event optimization jQuery.event.global[ type ] = true; } }, // Detach an event or set of events from an element remove: function( elem, types, handler, selector, mappedTypes ) { var j, origCount, tmp, events, t, handleObj, special, handlers, type, namespaces, origType, elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); if ( !elemData || !( events = elemData.events ) ) { return; } // Once for each type.namespace in types; type may be omitted types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[ t ] ) || []; type = origType = tmp[ 1 ]; namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // Unbind all events (on this namespace, if provided) for the element if ( !type ) { for ( type in events ) { jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); } continue; } special = jQuery.event.special[ type ] || {}; type = ( selector ? special.delegateType : special.bindType ) || type; handlers = events[ type ] || []; tmp = tmp[ 2 ] && new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); // Remove matching events origCount = j = handlers.length; while ( j-- ) { handleObj = handlers[ j ]; if ( ( mappedTypes || origType === handleObj.origType ) && ( !handler || handler.guid === handleObj.guid ) && ( !tmp || tmp.test( handleObj.namespace ) ) && ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { handlers.splice( j, 1 ); if ( handleObj.selector ) { handlers.delegateCount--; } if ( special.remove ) { special.remove.call( elem, handleObj ); } } } // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( origCount && !handlers.length ) { if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { jQuery.removeEvent( elem, type, elemData.handle ); } delete events[ type ]; } } // Remove data and the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { dataPriv.remove( elem, "handle events" ); } }, dispatch: function( nativeEvent ) { var i, j, ret, matched, handleObj, handlerQueue, args = new Array( arguments.length ), // Make a writable jQuery.Event from the native event object event = jQuery.event.fix( nativeEvent ), handlers = ( dataPriv.get( this, "events" ) || Object.create( null ) )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event args[ 0 ] = event; for ( i = 1; i < arguments.length; i++ ) { args[ i ] = arguments[ i ]; } event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { return; } // Determine handlers handlerQueue = jQuery.event.handlers.call( this, event, handlers ); // Run delegates first; they may want to stop propagation beneath us i = 0; while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { event.currentTarget = matched.elem; j = 0; while ( ( handleObj = matched.handlers[ j++ ] ) && !event.isImmediatePropagationStopped() ) { // If the event is namespaced, then each handler is only invoked if it is // specially universal or its namespaces are a superset of the event's. if ( !event.rnamespace || handleObj.namespace === false || event.rnamespace.test( handleObj.namespace ) ) { event.handleObj = handleObj; event.data = handleObj.data; ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || handleObj.handler ).apply( matched.elem, args ); if ( ret !== undefined ) { if ( ( event.result = ret ) === false ) { event.preventDefault(); event.stopPropagation(); } } } } } // Call the postDispatch hook for the mapped type if ( special.postDispatch ) { special.postDispatch.call( this, event ); } return event.result; }, handlers: function( event, handlers ) { var i, handleObj, sel, matchedHandlers, matchedSelectors, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target; // Find delegate handlers if ( delegateCount && // Support: IE <=9 // Black-hole SVG instance trees (trac-13180) cur.nodeType && // Support: Firefox <=42 // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click // Support: IE 11 only // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) !( event.type === "click" && event.button >= 1 ) ) { for ( ; cur !== this; cur = cur.parentNode || this ) { // Don't check non-elements (trac-13208) // Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764) if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { matchedHandlers = []; matchedSelectors = {}; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; // Don't conflict with Object.prototype properties (trac-13203) sel = handleObj.selector + " "; if ( matchedSelectors[ sel ] === undefined ) { matchedSelectors[ sel ] = handleObj.needsContext ? jQuery( sel, this ).index( cur ) > -1 : jQuery.find( sel, this, null, [ cur ] ).length; } if ( matchedSelectors[ sel ] ) { matchedHandlers.push( handleObj ); } } if ( matchedHandlers.length ) { handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); } } } } // Add the remaining (directly-bound) handlers cur = this; if ( delegateCount < handlers.length ) { handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); } return handlerQueue; }, addProp: function( name, hook ) { Object.defineProperty( jQuery.Event.prototype, name, { enumerable: true, configurable: true, get: isFunction( hook ) ? function() { if ( this.originalEvent ) { return hook( this.originalEvent ); } } : function() { if ( this.originalEvent ) { return this.originalEvent[ name ]; } }, set: function( value ) { Object.defineProperty( this, name, { enumerable: true, configurable: true, writable: true, value: value } ); } } ); }, fix: function( originalEvent ) { return originalEvent[ jQuery.expando ] ? originalEvent : new jQuery.Event( originalEvent ); }, special: { load: { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, click: { // Utilize native event to ensure correct state for checkable inputs setup: function( data ) { // For mutual compressibility with _default, replace `this` access with a local var. // `|| data` is dead code meant only to preserve the variable through minification. var el = this || data; // Claim the first handler if ( rcheckableType.test( el.type ) && el.click && nodeName( el, "input" ) ) { // dataPriv.set( el, "click", ... ) leverageNative( el, "click", true ); } // Return false to allow normal processing in the caller return false; }, trigger: function( data ) { // For mutual compressibility with _default, replace `this` access with a local var. // `|| data` is dead code meant only to preserve the variable through minification. var el = this || data; // Force setup before triggering a click if ( rcheckableType.test( el.type ) && el.click && nodeName( el, "input" ) ) { leverageNative( el, "click" ); } // Return non-false to allow normal event-path propagation return true; }, // For cross-browser consistency, suppress native .click() on links // Also prevent it if we're currently inside a leveraged native-event stack _default: function( event ) { var target = event.target; return rcheckableType.test( target.type ) && target.click && nodeName( target, "input" ) && dataPriv.get( target, "click" ) || nodeName( target, "a" ); } }, beforeunload: { postDispatch: function( event ) { // Support: Firefox 20+ // Firefox doesn't alert if the returnValue field is not set. if ( event.result !== undefined && event.originalEvent ) { event.originalEvent.returnValue = event.result; } } } } }; // Ensure the presence of an event listener that handles manually-triggered // synthetic events by interrupting progress until reinvoked in response to // *native* events that it fires directly, ensuring that state changes have // already occurred before other listeners are invoked. function leverageNative( el, type, isSetup ) { // Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add if ( !isSetup ) { if ( dataPriv.get( el, type ) === undefined ) { jQuery.event.add( el, type, returnTrue ); } return; } // Register the controller as a special universal handler for all event namespaces dataPriv.set( el, type, false ); jQuery.event.add( el, type, { namespace: false, handler: function( event ) { var result, saved = dataPriv.get( this, type ); if ( ( event.isTrigger & 1 ) && this[ type ] ) { // Interrupt processing of the outer synthetic .trigger()ed event if ( !saved ) { // Store arguments for use when handling the inner native event // There will always be at least one argument (an event object), so this array // will not be confused with a leftover capture object. saved = slice.call( arguments ); dataPriv.set( this, type, saved ); // Trigger the native event and capture its result this[ type ](); result = dataPriv.get( this, type ); dataPriv.set( this, type, false ); if ( saved !== result ) { // Cancel the outer synthetic event event.stopImmediatePropagation(); event.preventDefault(); return result; } // If this is an inner synthetic event for an event with a bubbling surrogate // (focus or blur), assume that the surrogate already propagated from triggering // the native event and prevent that from happening again here. // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the // bubbling surrogate propagates *after* the non-bubbling base), but that seems // less bad than duplication. } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { event.stopPropagation(); } // If this is a native event triggered above, everything is now in order // Fire an inner synthetic event with the original arguments } else if ( saved ) { // ...and capture the result dataPriv.set( this, type, jQuery.event.trigger( saved[ 0 ], saved.slice( 1 ), this ) ); // Abort handling of the native event by all jQuery handlers while allowing // native handlers on the same element to run. On target, this is achieved // by stopping immediate propagation just on the jQuery event. However, // the native event is re-wrapped by a jQuery one on each level of the // propagation so the only way to stop it for jQuery is to stop it for // everyone via native `stopPropagation()`. This is not a problem for // focus/blur which don't bubble, but it does also stop click on checkboxes // and radios. We accept this limitation. event.stopPropagation(); event.isImmediatePropagationStopped = returnTrue; } } } ); } jQuery.removeEvent = function( elem, type, handle ) { // This "if" is needed for plain objects if ( elem.removeEventListener ) { elem.removeEventListener( type, handle ); } }; jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !( this instanceof jQuery.Event ) ) { return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only src.returnValue === false ? returnTrue : returnFalse; // Create target properties // Support: Safari <=6 - 7 only // Target should not be a text node (trac-504, trac-13143) this.target = ( src.target && src.target.nodeType === 3 ) ? src.target.parentNode : src.target; this.currentTarget = src.currentTarget; this.relatedTarget = src.relatedTarget; // Event type } else { this.type = src; } // Put explicitly provided properties onto the event object if ( props ) { jQuery.extend( this, props ); } // Create a timestamp if incoming event doesn't have one this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { constructor: jQuery.Event, isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse, isSimulated: false, preventDefault: function() { var e = this.originalEvent; this.isDefaultPrevented = returnTrue; if ( e && !this.isSimulated ) { e.preventDefault(); } }, stopPropagation: function() { var e = this.originalEvent; this.isPropagationStopped = returnTrue; if ( e && !this.isSimulated ) { e.stopPropagation(); } }, stopImmediatePropagation: function() { var e = this.originalEvent; this.isImmediatePropagationStopped = returnTrue; if ( e && !this.isSimulated ) { e.stopImmediatePropagation(); } this.stopPropagation(); } }; // Includes all common event props including KeyEvent and MouseEvent specific props jQuery.each( { altKey: true, bubbles: true, cancelable: true, changedTouches: true, ctrlKey: true, detail: true, eventPhase: true, metaKey: true, pageX: true, pageY: true, shiftKey: true, view: true, "char": true, code: true, charCode: true, key: true, keyCode: true, button: true, buttons: true, clientX: true, clientY: true, offsetX: true, offsetY: true, pointerId: true, pointerType: true, screenX: true, screenY: true, targetTouches: true, toElement: true, touches: true, which: true }, jQuery.event.addProp ); jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { function focusMappedHandler( nativeEvent ) { if ( document.documentMode ) { // Support: IE 11+ // Attach a single focusin/focusout handler on the document while someone wants // focus/blur. This is because the former are synchronous in IE while the latter // are async. In other browsers, all those handlers are invoked synchronously. // `handle` from private data would already wrap the event, but we need // to change the `type` here. var handle = dataPriv.get( this, "handle" ), event = jQuery.event.fix( nativeEvent ); event.type = nativeEvent.type === "focusin" ? "focus" : "blur"; event.isSimulated = true; // First, handle focusin/focusout handle( nativeEvent ); // ...then, handle focus/blur // // focus/blur don't bubble while focusin/focusout do; simulate the former by only // invoking the handler at the lower level. if ( event.target === event.currentTarget ) { // The setup part calls `leverageNative`, which, in turn, calls // `jQuery.event.add`, so event handle will already have been set // by this point. handle( event ); } } else { // For non-IE browsers, attach a single capturing handler on the document // while someone wants focusin/focusout. jQuery.event.simulate( delegateType, nativeEvent.target, jQuery.event.fix( nativeEvent ) ); } } jQuery.event.special[ type ] = { // Utilize native event if possible so blur/focus sequence is correct setup: function() { var attaches; // Claim the first handler // dataPriv.set( this, "focus", ... ) // dataPriv.set( this, "blur", ... ) leverageNative( this, type, true ); if ( document.documentMode ) { // Support: IE 9 - 11+ // We use the same native handler for focusin & focus (and focusout & blur) // so we need to coordinate setup & teardown parts between those events. // Use `delegateType` as the key as `type` is already used by `leverageNative`. attaches = dataPriv.get( this, delegateType ); if ( !attaches ) { this.addEventListener( delegateType, focusMappedHandler ); } dataPriv.set( this, delegateType, ( attaches || 0 ) + 1 ); } else { // Return false to allow normal processing in the caller return false; } }, trigger: function() { // Force setup before trigger leverageNative( this, type ); // Return non-false to allow normal event-path propagation return true; }, teardown: function() { var attaches; if ( document.documentMode ) { attaches = dataPriv.get( this, delegateType ) - 1; if ( !attaches ) { this.removeEventListener( delegateType, focusMappedHandler ); dataPriv.remove( this, delegateType ); } else { dataPriv.set( this, delegateType, attaches ); } } else { // Return false to indicate standard teardown should be applied return false; } }, // Suppress native focus or blur if we're currently inside // a leveraged native-event stack _default: function( event ) { return dataPriv.get( event.target, type ); }, delegateType: delegateType }; // Support: Firefox <=44 // Firefox doesn't have focus(in | out) events // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 // // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 // focus(in | out) events fire after focus & blur events, // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 // // Support: IE 9 - 11+ // To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch, // attach a single handler for both events in IE. jQuery.event.special[ delegateType ] = { setup: function() { // Handle: regular nodes (via `this.ownerDocument`), window // (via `this.document`) & document (via `this`). var doc = this.ownerDocument || this.document || this, dataHolder = document.documentMode ? this : doc, attaches = dataPriv.get( dataHolder, delegateType ); // Support: IE 9 - 11+ // We use the same native handler for focusin & focus (and focusout & blur) // so we need to coordinate setup & teardown parts between those events. // Use `delegateType` as the key as `type` is already used by `leverageNative`. if ( !attaches ) { if ( document.documentMode ) { this.addEventListener( delegateType, focusMappedHandler ); } else { doc.addEventListener( type, focusMappedHandler, true ); } } dataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 ); }, teardown: function() { var doc = this.ownerDocument || this.document || this, dataHolder = document.documentMode ? this : doc, attaches = dataPriv.get( dataHolder, delegateType ) - 1; if ( !attaches ) { if ( document.documentMode ) { this.removeEventListener( delegateType, focusMappedHandler ); } else { doc.removeEventListener( type, focusMappedHandler, true ); } dataPriv.remove( dataHolder, delegateType ); } else { dataPriv.set( dataHolder, delegateType, attaches ); } } }; } ); // Create mouseenter/leave events using mouseover/out and event-time checks // so that event delegation works in jQuery. // Do the same for pointerenter/pointerleave and pointerover/pointerout // // Support: Safari 7 only // Safari sends mouseenter too often; see: // https://bugs.chromium.org/p/chromium/issues/detail?id=470258 // for the description of the bug (it existed in older Chrome versions as well). jQuery.each( { mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", pointerleave: "pointerout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { delegateType: fix, bindType: fix, handle: function( event ) { var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; } return ret; } }; } ); jQuery.fn.extend( { on: function( types, selector, data, fn ) { return on( this, types, selector, data, fn ); }, one: function( types, selector, data, fn ) { return on( this, types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { var handleObj, type; if ( types && types.preventDefault && types.handleObj ) { // ( event ) dispatched jQuery.Event handleObj = types.handleObj; jQuery( types.delegateTarget ).off( handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types === "object" ) { // ( types-object [, selector] ) for ( type in types ) { this.off( type, selector, types[ type ] ); } return this; } if ( selector === false || typeof selector === "function" ) { // ( types [, fn] ) fn = selector; selector = undefined; } if ( fn === false ) { fn = returnFalse; } return this.each( function() { jQuery.event.remove( this, types, fn, selector ); } ); } } ); var // Support: IE <=10 - 11, Edge 12 - 13 only // In IE/Edge using regex groups here causes severe slowdowns. // See https://connect.microsoft.com/IE/feedback/details/1736512/ rnoInnerhtml = /\s*$/g; // Prefer a tbody over its parent table for containing new rows function manipulationTarget( elem, content ) { if ( nodeName( elem, "table" ) && nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { return jQuery( elem ).children( "tbody" )[ 0 ] || elem; } return elem; } // Replace/restore the type attribute of script elements for safe DOM manipulation function disableScript( elem ) { elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; return elem; } function restoreScript( elem ) { if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { elem.type = elem.type.slice( 5 ); } else { elem.removeAttribute( "type" ); } return elem; } function cloneCopyEvent( src, dest ) { var i, l, type, pdataOld, udataOld, udataCur, events; if ( dest.nodeType !== 1 ) { return; } // 1. Copy private data: events, handlers, etc. if ( dataPriv.hasData( src ) ) { pdataOld = dataPriv.get( src ); events = pdataOld.events; if ( events ) { dataPriv.remove( dest, "handle events" ); for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { jQuery.event.add( dest, type, events[ type ][ i ] ); } } } } // 2. Copy user data if ( dataUser.hasData( src ) ) { udataOld = dataUser.access( src ); udataCur = jQuery.extend( {}, udataOld ); dataUser.set( dest, udataCur ); } } // Fix IE bugs, see support tests function fixInput( src, dest ) { var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button. if ( nodeName === "input" && rcheckableType.test( src.type ) ) { dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options } else if ( nodeName === "input" || nodeName === "textarea" ) { dest.defaultValue = src.defaultValue; } } function domManip( collection, args, callback, ignored ) { // Flatten any nested arrays args = flat( args ); var fragment, first, scripts, hasScripts, node, doc, i = 0, l = collection.length, iNoClone = l - 1, value = args[ 0 ], valueIsFunction = isFunction( value ); // We can't cloneNode fragments that contain checked, in WebKit if ( valueIsFunction || ( l > 1 && typeof value === "string" && !support.checkClone && rchecked.test( value ) ) ) { return collection.each( function( index ) { var self = collection.eq( index ); if ( valueIsFunction ) { args[ 0 ] = value.call( this, index, self.html() ); } domManip( self, args, callback, ignored ); } ); } if ( l ) { fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); first = fragment.firstChild; if ( fragment.childNodes.length === 1 ) { fragment = first; } // Require either new content or an interest in ignored elements to invoke the callback if ( first || ignored ) { scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); hasScripts = scripts.length; // Use the original fragment for the last item // instead of the first because it can end up // being emptied incorrectly in certain situations (trac-8070). for ( ; i < l; i++ ) { node = fragment; if ( i !== iNoClone ) { node = jQuery.clone( node, true, true ); // Keep references to cloned scripts for later restoration if ( hasScripts ) { // Support: Android <=4.0 only, PhantomJS 1 only // push.apply(_, arraylike) throws on ancient WebKit jQuery.merge( scripts, getAll( node, "script" ) ); } } callback.call( collection[ i ], node, i ); } if ( hasScripts ) { doc = scripts[ scripts.length - 1 ].ownerDocument; // Re-enable scripts jQuery.map( scripts, restoreScript ); // Evaluate executable scripts on first document insertion for ( i = 0; i < hasScripts; i++ ) { node = scripts[ i ]; if ( rscriptType.test( node.type || "" ) && !dataPriv.access( node, "globalEval" ) && jQuery.contains( doc, node ) ) { if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { // Optional AJAX dependency, but won't run scripts if not present if ( jQuery._evalUrl && !node.noModule ) { jQuery._evalUrl( node.src, { nonce: node.nonce || node.getAttribute( "nonce" ) }, doc ); } } else { // Unwrap a CDATA section containing script contents. This shouldn't be // needed as in XML documents they're already not visible when // inspecting element contents and in HTML documents they have no // meaning but we're preserving that logic for backwards compatibility. // This will be removed completely in 4.0. See gh-4904. DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); } } } } } } return collection; } function remove( elem, selector, keepData ) { var node, nodes = selector ? jQuery.filter( selector, elem ) : elem, i = 0; for ( ; ( node = nodes[ i ] ) != null; i++ ) { if ( !keepData && node.nodeType === 1 ) { jQuery.cleanData( getAll( node ) ); } if ( node.parentNode ) { if ( keepData && isAttached( node ) ) { setGlobalEval( getAll( node, "script" ) ); } node.parentNode.removeChild( node ); } } return elem; } jQuery.extend( { htmlPrefilter: function( html ) { return html; }, clone: function( elem, dataAndEvents, deepDataAndEvents ) { var i, l, srcElements, destElements, clone = elem.cloneNode( true ), inPage = isAttached( elem ); // Fix IE cloning issues if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { // We eschew jQuery#find here for performance reasons: // https://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); for ( i = 0, l = srcElements.length; i < l; i++ ) { fixInput( srcElements[ i ], destElements[ i ] ); } } // Copy the events from the original to the clone if ( dataAndEvents ) { if ( deepDataAndEvents ) { srcElements = srcElements || getAll( elem ); destElements = destElements || getAll( clone ); for ( i = 0, l = srcElements.length; i < l; i++ ) { cloneCopyEvent( srcElements[ i ], destElements[ i ] ); } } else { cloneCopyEvent( elem, clone ); } } // Preserve script evaluation history destElements = getAll( clone, "script" ); if ( destElements.length > 0 ) { setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); } // Return the cloned set return clone; }, cleanData: function( elems ) { var data, elem, type, special = jQuery.event.special, i = 0; for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { if ( acceptData( elem ) ) { if ( ( data = elem[ dataPriv.expando ] ) ) { if ( data.events ) { for ( type in data.events ) { if ( special[ type ] ) { jQuery.event.remove( elem, type ); // This is a shortcut to avoid jQuery.event.remove's overhead } else { jQuery.removeEvent( elem, type, data.handle ); } } } // Support: Chrome <=35 - 45+ // Assign undefined instead of using delete, see Data#remove elem[ dataPriv.expando ] = undefined; } if ( elem[ dataUser.expando ] ) { // Support: Chrome <=35 - 45+ // Assign undefined instead of using delete, see Data#remove elem[ dataUser.expando ] = undefined; } } } } } ); jQuery.fn.extend( { detach: function( selector ) { return remove( this, selector, true ); }, remove: function( selector ) { return remove( this, selector ); }, text: function( value ) { return access( this, function( value ) { return value === undefined ? jQuery.text( this ) : this.empty().each( function() { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { this.textContent = value; } } ); }, null, value, arguments.length ); }, append: function() { return domManip( this, arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.appendChild( elem ); } } ); }, prepend: function() { return domManip( this, arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.insertBefore( elem, target.firstChild ); } } ); }, before: function() { return domManip( this, arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this ); } } ); }, after: function() { return domManip( this, arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this.nextSibling ); } } ); }, empty: function() { var elem, i = 0; for ( ; ( elem = this[ i ] ) != null; i++ ) { if ( elem.nodeType === 1 ) { // Prevent memory leaks jQuery.cleanData( getAll( elem, false ) ); // Remove any remaining nodes elem.textContent = ""; } } return this; }, clone: function( dataAndEvents, deepDataAndEvents ) { dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; return this.map( function() { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); } ); }, html: function( value ) { return access( this, function( value ) { var elem = this[ 0 ] || {}, i = 0, l = this.length; if ( value === undefined && elem.nodeType === 1 ) { return elem.innerHTML; } // See if we can take a shortcut and just use innerHTML if ( typeof value === "string" && !rnoInnerhtml.test( value ) && !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { value = jQuery.htmlPrefilter( value ); try { for ( ; i < l; i++ ) { elem = this[ i ] || {}; // Remove element nodes and prevent memory leaks if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); elem.innerHTML = value; } } elem = 0; // If using innerHTML throws an exception, use the fallback method } catch ( e ) {} } if ( elem ) { this.empty().append( value ); } }, null, value, arguments.length ); }, replaceWith: function() { var ignored = []; // Make the changes, replacing each non-ignored context element with the new content return domManip( this, arguments, function( elem ) { var parent = this.parentNode; if ( jQuery.inArray( this, ignored ) < 0 ) { jQuery.cleanData( getAll( this ) ); if ( parent ) { parent.replaceChild( elem, this ); } } // Force callback invocation }, ignored ); } } ); jQuery.each( { appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { var elems, ret = [], insert = jQuery( selector ), last = insert.length - 1, i = 0; for ( ; i <= last; i++ ) { elems = i === last ? this : this.clone( true ); jQuery( insert[ i ] )[ original ]( elems ); // Support: Android <=4.0 only, PhantomJS 1 only // .get() because push.apply(_, arraylike) throws on ancient WebKit push.apply( ret, elems.get() ); } return this.pushStack( ret ); }; } ); var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); var rcustomProp = /^--/; var getStyles = function( elem ) { // Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150) // IE throws on elements created in popups // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" var view = elem.ownerDocument.defaultView; if ( !view || !view.opener ) { view = window; } return view.getComputedStyle( elem ); }; var swap = function( elem, options, callback ) { var ret, name, old = {}; // Remember the old values, and insert the new ones for ( name in options ) { old[ name ] = elem.style[ name ]; elem.style[ name ] = options[ name ]; } ret = callback.call( elem ); // Revert the old values for ( name in options ) { elem.style[ name ] = old[ name ]; } return ret; }; var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); ( function() { // Executing both pixelPosition & boxSizingReliable tests require only one layout // so they're executed at the same time to save the second computation. function computeStyleTests() { // This is a singleton, we need to execute it only once if ( !div ) { return; } container.style.cssText = "position:absolute;left:-11111px;width:60px;" + "margin-top:1px;padding:0;border:0"; div.style.cssText = "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + "margin:auto;border:1px;padding:1px;" + "width:60%;top:1%"; documentElement.appendChild( container ).appendChild( div ); var divStyle = window.getComputedStyle( div ); pixelPositionVal = divStyle.top !== "1%"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 // Some styles come back with percentage values, even though they shouldn't div.style.right = "60%"; pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; // Support: IE 9 - 11 only // Detect misreporting of content dimensions for box-sizing:border-box elements boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; // Support: IE 9 only // Detect overflow:scroll screwiness (gh-3699) // Support: Chrome <=64 // Don't get tricked when zoom affects offsetWidth (gh-4029) div.style.position = "absolute"; scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; documentElement.removeChild( container ); // Nullify the div so it wouldn't be stored in the memory and // it will also be a sign that checks already performed div = null; } function roundPixelMeasures( measure ) { return Math.round( parseFloat( measure ) ); } var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, reliableTrDimensionsVal, reliableMarginLeftVal, container = document.createElement( "div" ), div = document.createElement( "div" ); // Finish early in limited (non-browser) environments if ( !div.style ) { return; } // Support: IE <=9 - 11 only // Style of cloned element affects source element cloned (trac-8908) div.style.backgroundClip = "content-box"; div.cloneNode( true ).style.backgroundClip = ""; support.clearCloneStyle = div.style.backgroundClip === "content-box"; jQuery.extend( support, { boxSizingReliable: function() { computeStyleTests(); return boxSizingReliableVal; }, pixelBoxStyles: function() { computeStyleTests(); return pixelBoxStylesVal; }, pixelPosition: function() { computeStyleTests(); return pixelPositionVal; }, reliableMarginLeft: function() { computeStyleTests(); return reliableMarginLeftVal; }, scrollboxSize: function() { computeStyleTests(); return scrollboxSizeVal; }, // Support: IE 9 - 11+, Edge 15 - 18+ // IE/Edge misreport `getComputedStyle` of table rows with width/height // set in CSS while `offset*` properties report correct values. // Behavior in IE 9 is more subtle than in newer versions & it passes // some versions of this test; make sure not to make it pass there! // // Support: Firefox 70+ // Only Firefox includes border widths // in computed dimensions. (gh-4529) reliableTrDimensions: function() { var table, tr, trChild, trStyle; if ( reliableTrDimensionsVal == null ) { table = document.createElement( "table" ); tr = document.createElement( "tr" ); trChild = document.createElement( "div" ); table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; tr.style.cssText = "box-sizing:content-box;border:1px solid"; // Support: Chrome 86+ // Height set through cssText does not get applied. // Computed height then comes back as 0. tr.style.height = "1px"; trChild.style.height = "9px"; // Support: Android 8 Chrome 86+ // In our bodyBackground.html iframe, // display for all div elements is set to "inline", // which causes a problem only in Android 8 Chrome 86. // Ensuring the div is `display: block` // gets around this issue. trChild.style.display = "block"; documentElement .appendChild( table ) .appendChild( tr ) .appendChild( trChild ); trStyle = window.getComputedStyle( tr ); reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + parseInt( trStyle.borderTopWidth, 10 ) + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; documentElement.removeChild( table ); } return reliableTrDimensionsVal; } } ); } )(); function curCSS( elem, name, computed ) { var width, minWidth, maxWidth, ret, isCustomProp = rcustomProp.test( name ), // Support: Firefox 51+ // Retrieving style before computed somehow // fixes an issue with getting wrong values // on detached elements style = elem.style; computed = computed || getStyles( elem ); // getPropertyValue is needed for: // .css('filter') (IE 9 only, trac-12537) // .css('--customProperty) (gh-3144) if ( computed ) { // Support: IE <=9 - 11+ // IE only supports `"float"` in `getPropertyValue`; in computed styles // it's only available as `"cssFloat"`. We no longer modify properties // sent to `.css()` apart from camelCasing, so we need to check both. // Normally, this would create difference in behavior: if // `getPropertyValue` returns an empty string, the value returned // by `.css()` would be `undefined`. This is usually the case for // disconnected elements. However, in IE even disconnected elements // with no styles return `"none"` for `getPropertyValue( "float" )` ret = computed.getPropertyValue( name ) || computed[ name ]; if ( isCustomProp && ret ) { // Support: Firefox 105+, Chrome <=105+ // Spec requires trimming whitespace for custom properties (gh-4926). // Firefox only trims leading whitespace. Chrome just collapses // both leading & trailing whitespace to a single space. // // Fall back to `undefined` if empty string returned. // This collapses a missing definition with property defined // and set to an empty string but there's no standard API // allowing us to differentiate them without a performance penalty // and returning `undefined` aligns with older jQuery. // // rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED // as whitespace while CSS does not, but this is not a problem // because CSS preprocessing replaces them with U+000A LINE FEED // (which *is* CSS whitespace) // https://www.w3.org/TR/css-syntax-3/#input-preprocessing ret = ret.replace( rtrimCSS, "$1" ) || undefined; } if ( ret === "" && !isAttached( elem ) ) { ret = jQuery.style( elem, name ); } // A tribute to the "awesome hack by Dean Edwards" // Android Browser returns percentage for some values, // but width seems to be reliably pixels. // This is against the CSSOM draft spec: // https://drafts.csswg.org/cssom/#resolved-values if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { // Remember the original values width = style.width; minWidth = style.minWidth; maxWidth = style.maxWidth; // Put in the new values to get a computed value out style.minWidth = style.maxWidth = style.width = ret; ret = computed.width; // Revert the changed values style.width = width; style.minWidth = minWidth; style.maxWidth = maxWidth; } } return ret !== undefined ? // Support: IE <=9 - 11 only // IE returns zIndex value as an integer. ret + "" : ret; } function addGetHookIf( conditionFn, hookFn ) { // Define the hook, we'll check on the first run if it's really needed. return { get: function() { if ( conditionFn() ) { // Hook not needed (or it's not possible to use it due // to missing dependency), remove it. delete this.get; return; } // Hook needed; redefine it so that the support test is not executed again. return ( this.get = hookFn ).apply( this, arguments ); } }; } var cssPrefixes = [ "Webkit", "Moz", "ms" ], emptyStyle = document.createElement( "div" ).style, vendorProps = {}; // Return a vendor-prefixed property or undefined function vendorPropName( name ) { // Check for vendor prefixed names var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), i = cssPrefixes.length; while ( i-- ) { name = cssPrefixes[ i ] + capName; if ( name in emptyStyle ) { return name; } } } // Return a potentially-mapped jQuery.cssProps or vendor prefixed property function finalPropName( name ) { var final = jQuery.cssProps[ name ] || vendorProps[ name ]; if ( final ) { return final; } if ( name in emptyStyle ) { return name; } return vendorProps[ name ] = vendorPropName( name ) || name; } var // Swappable if display is none or starts with table // except "table", "table-cell", or "table-caption" // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display rdisplayswap = /^(none|table(?!-c[ea]).+)/, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssNormalTransform = { letterSpacing: "0", fontWeight: "400" }; function setPositiveNumber( _elem, value, subtract ) { // Any relative (+/-) values have already been // normalized at this point var matches = rcssNum.exec( value ); return matches ? // Guard against undefined "subtract", e.g., when used as in cssHooks Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : value; } function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { var i = dimension === "width" ? 1 : 0, extra = 0, delta = 0, marginDelta = 0; // Adjustment may not be necessary if ( box === ( isBorderBox ? "border" : "content" ) ) { return 0; } for ( ; i < 4; i += 2 ) { // Both box models exclude margin // Count margin delta separately to only add it after scroll gutter adjustment. // This is needed to make negative margins work with `outerHeight( true )` (gh-3982). if ( box === "margin" ) { marginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); } // If we get here with a content-box, we're seeking "padding" or "border" or "margin" if ( !isBorderBox ) { // Add padding delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); // For "border" or "margin", add border if ( box !== "padding" ) { delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); // But still keep track of it otherwise } else { extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); } // If we get here with a border-box (content + padding + border), we're seeking "content" or // "padding" or "margin" } else { // For "content", subtract padding if ( box === "content" ) { delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); } // For "content" or "padding", subtract border if ( box !== "margin" ) { delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); } } } // Account for positive content-box scroll gutter when requested by providing computedVal if ( !isBorderBox && computedVal >= 0 ) { // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border // Assuming integer scroll gutter, subtract the rest and round down delta += Math.max( 0, Math.ceil( elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - computedVal - delta - extra - 0.5 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter // Use an explicit zero to avoid NaN (gh-3964) ) ) || 0; } return delta + marginDelta; } function getWidthOrHeight( elem, dimension, extra ) { // Start with computed style var styles = getStyles( elem ), // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). // Fake content-box until we know it's needed to know the true value. boxSizingNeeded = !support.boxSizingReliable() || extra, isBorderBox = boxSizingNeeded && jQuery.css( elem, "boxSizing", false, styles ) === "border-box", valueIsBorderBox = isBorderBox, val = curCSS( elem, dimension, styles ), offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); // Support: Firefox <=54 // Return a confounding non-pixel value or feign ignorance, as appropriate. if ( rnumnonpx.test( val ) ) { if ( !extra ) { return val; } val = "auto"; } // Support: IE 9 - 11 only // Use offsetWidth/offsetHeight for when box sizing is unreliable. // In those cases, the computed value can be trusted to be border-box. if ( ( !support.boxSizingReliable() && isBorderBox || // Support: IE 10 - 11+, Edge 15 - 18+ // IE/Edge misreport `getComputedStyle` of table rows with width/height // set in CSS while `offset*` properties report correct values. // Interestingly, in some cases IE 9 doesn't suffer from this issue. !support.reliableTrDimensions() && nodeName( elem, "tr" ) || // Fall back to offsetWidth/offsetHeight when value is "auto" // This happens for inline elements with no explicit setting (gh-3571) val === "auto" || // Support: Android <=4.1 - 4.3 only // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && // Make sure the element is visible & connected elem.getClientRects().length ) { isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; // Where available, offsetWidth/offsetHeight approximate border box dimensions. // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the // retrieved value as a content box dimension. valueIsBorderBox = offsetProp in elem; if ( valueIsBorderBox ) { val = elem[ offsetProp ]; } } // Normalize "" and auto val = parseFloat( val ) || 0; // Adjust for the element's box model return ( val + boxModelAdjustment( elem, dimension, extra || ( isBorderBox ? "border" : "content" ), valueIsBorderBox, styles, // Provide the current computed size to request scroll gutter calculation (gh-3589) val ) ) + "px"; } jQuery.extend( { // Add in style property hooks for overriding the default // behavior of getting and setting a style property cssHooks: { opacity: { get: function( elem, computed ) { if ( computed ) { // We should always get a number back from opacity var ret = curCSS( elem, "opacity" ); return ret === "" ? "1" : ret; } } } }, // Don't automatically add "px" to these possibly-unitless properties cssNumber: { animationIterationCount: true, aspectRatio: true, borderImageSlice: true, columnCount: true, flexGrow: true, flexShrink: true, fontWeight: true, gridArea: true, gridColumn: true, gridColumnEnd: true, gridColumnStart: true, gridRow: true, gridRowEnd: true, gridRowStart: true, lineHeight: true, opacity: true, order: true, orphans: true, scale: true, widows: true, zIndex: true, zoom: true, // SVG-related fillOpacity: true, floodOpacity: true, stopOpacity: true, strokeMiterlimit: true, strokeOpacity: true }, // Add in properties whose names you wish to fix before // setting or getting the value cssProps: {}, // Get and set the style property on a DOM Node style: function( elem, name, value, extra ) { // Don't set styles on text and comment nodes if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { return; } // Make sure that we're working with the right name var ret, type, hooks, origName = camelCase( name ), isCustomProp = rcustomProp.test( name ), style = elem.style; // Make sure that we're working with the right name. We don't // want to query the value if it is a CSS custom property // since they are user-defined. if ( !isCustomProp ) { name = finalPropName( origName ); } // Gets hook for the prefixed version, then unprefixed version hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; // Check if we're setting a value if ( value !== undefined ) { type = typeof value; // Convert "+=" or "-=" to relative numbers (trac-7345) if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { value = adjustCSS( elem, name, ret ); // Fixes bug trac-9237 type = "number"; } // Make sure that null and NaN values aren't set (trac-7116) if ( value == null || value !== value ) { return; } // If a number was passed in, add the unit (except for certain CSS properties) // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append // "px" to a few hardcoded values. if ( type === "number" && !isCustomProp ) { value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); } // background-* props affect original clone's values if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { style[ name ] = "inherit"; } // If a hook was provided, use that value, otherwise just set the specified value if ( !hooks || !( "set" in hooks ) || ( value = hooks.set( elem, value, extra ) ) !== undefined ) { if ( isCustomProp ) { style.setProperty( name, value ); } else { style[ name ] = value; } } } else { // If a hook was provided get the non-computed value from there if ( hooks && "get" in hooks && ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { return ret; } // Otherwise just get the value from the style object return style[ name ]; } }, css: function( elem, name, extra, styles ) { var val, num, hooks, origName = camelCase( name ), isCustomProp = rcustomProp.test( name ); // Make sure that we're working with the right name. We don't // want to modify the value if it is a CSS custom property // since they are user-defined. if ( !isCustomProp ) { name = finalPropName( origName ); } // Try prefixed name followed by the unprefixed name hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; // If a hook was provided get the computed value from there if ( hooks && "get" in hooks ) { val = hooks.get( elem, true, extra ); } // Otherwise, if a way to get the computed value exists, use that if ( val === undefined ) { val = curCSS( elem, name, styles ); } // Convert "normal" to computed value if ( val === "normal" && name in cssNormalTransform ) { val = cssNormalTransform[ name ]; } // Make numeric if forced or a qualifier was provided and val looks numeric if ( extra === "" || extra ) { num = parseFloat( val ); return extra === true || isFinite( num ) ? num || 0 : val; } return val; } } ); jQuery.each( [ "height", "width" ], function( _i, dimension ) { jQuery.cssHooks[ dimension ] = { get: function( elem, computed, extra ) { if ( computed ) { // Certain elements can have dimension info if we invisibly show them // but it must have a current display style that would benefit return rdisplayswap.test( jQuery.css( elem, "display" ) ) && // Support: Safari 8+ // Table columns in Safari have non-zero offsetWidth & zero // getBoundingClientRect().width unless display is changed. // Support: IE <=11 only // Running getBoundingClientRect on a disconnected node // in IE throws an error. ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? swap( elem, cssShow, function() { return getWidthOrHeight( elem, dimension, extra ); } ) : getWidthOrHeight( elem, dimension, extra ); } }, set: function( elem, value, extra ) { var matches, styles = getStyles( elem ), // Only read styles.position if the test has a chance to fail // to avoid forcing a reflow. scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === "absolute", // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) boxSizingNeeded = scrollboxSizeBuggy || extra, isBorderBox = boxSizingNeeded && jQuery.css( elem, "boxSizing", false, styles ) === "border-box", subtract = extra ? boxModelAdjustment( elem, dimension, extra, isBorderBox, styles ) : 0; // Account for unreliable border-box dimensions by comparing offset* to computed and // faking a content-box to get border and padding (gh-3699) if ( isBorderBox && scrollboxSizeBuggy ) { subtract -= Math.ceil( elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - parseFloat( styles[ dimension ] ) - boxModelAdjustment( elem, dimension, "border", false, styles ) - 0.5 ); } // Convert to pixels if value adjustment is needed if ( subtract && ( matches = rcssNum.exec( value ) ) && ( matches[ 3 ] || "px" ) !== "px" ) { elem.style[ dimension ] = value; value = jQuery.css( elem, dimension ); } return setPositiveNumber( elem, value, subtract ); } }; } ); jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, function( elem, computed ) { if ( computed ) { return ( parseFloat( curCSS( elem, "marginLeft" ) ) || elem.getBoundingClientRect().left - swap( elem, { marginLeft: 0 }, function() { return elem.getBoundingClientRect().left; } ) ) + "px"; } } ); // These hooks are used by animate to expand properties jQuery.each( { margin: "", padding: "", border: "Width" }, function( prefix, suffix ) { jQuery.cssHooks[ prefix + suffix ] = { expand: function( value ) { var i = 0, expanded = {}, // Assumes a single number if not a string parts = typeof value === "string" ? value.split( " " ) : [ value ]; for ( ; i < 4; i++ ) { expanded[ prefix + cssExpand[ i ] + suffix ] = parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; } return expanded; } }; if ( prefix !== "margin" ) { jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; } } ); jQuery.fn.extend( { css: function( name, value ) { return access( this, function( elem, name, value ) { var styles, len, map = {}, i = 0; if ( Array.isArray( name ) ) { styles = getStyles( elem ); len = name.length; for ( ; i < len; i++ ) { map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); } return map; } return value !== undefined ? jQuery.style( elem, name, value ) : jQuery.css( elem, name ); }, name, value, arguments.length > 1 ); } } ); function Tween( elem, options, prop, end, easing ) { return new Tween.prototype.init( elem, options, prop, end, easing ); } jQuery.Tween = Tween; Tween.prototype = { constructor: Tween, init: function( elem, options, prop, end, easing, unit ) { this.elem = elem; this.prop = prop; this.easing = easing || jQuery.easing._default; this.options = options; this.start = this.now = this.cur(); this.end = end; this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); }, cur: function() { var hooks = Tween.propHooks[ this.prop ]; return hooks && hooks.get ? hooks.get( this ) : Tween.propHooks._default.get( this ); }, run: function( percent ) { var eased, hooks = Tween.propHooks[ this.prop ]; if ( this.options.duration ) { this.pos = eased = jQuery.easing[ this.easing ]( percent, this.options.duration * percent, 0, 1, this.options.duration ); } else { this.pos = eased = percent; } this.now = ( this.end - this.start ) * eased + this.start; if ( this.options.step ) { this.options.step.call( this.elem, this.now, this ); } if ( hooks && hooks.set ) { hooks.set( this ); } else { Tween.propHooks._default.set( this ); } return this; } }; Tween.prototype.init.prototype = Tween.prototype; Tween.propHooks = { _default: { get: function( tween ) { var result; // Use a property on the element directly when it is not a DOM element, // or when there is no matching style property that exists. if ( tween.elem.nodeType !== 1 || tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { return tween.elem[ tween.prop ]; } // Passing an empty string as a 3rd parameter to .css will automatically // attempt a parseFloat and fallback to a string if the parse fails. // Simple values such as "10px" are parsed to Float; // complex values such as "rotate(1rad)" are returned as-is. result = jQuery.css( tween.elem, tween.prop, "" ); // Empty strings, null, undefined and "auto" are converted to 0. return !result || result === "auto" ? 0 : result; }, set: function( tween ) { // Use step hook for back compat. // Use cssHook if its there. // Use .style if available and use plain properties where available. if ( jQuery.fx.step[ tween.prop ] ) { jQuery.fx.step[ tween.prop ]( tween ); } else if ( tween.elem.nodeType === 1 && ( jQuery.cssHooks[ tween.prop ] || tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); } else { tween.elem[ tween.prop ] = tween.now; } } } }; // Support: IE <=9 only // Panic based approach to setting things on disconnected nodes Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { set: function( tween ) { if ( tween.elem.nodeType && tween.elem.parentNode ) { tween.elem[ tween.prop ] = tween.now; } } }; jQuery.easing = { linear: function( p ) { return p; }, swing: function( p ) { return 0.5 - Math.cos( p * Math.PI ) / 2; }, _default: "swing" }; jQuery.fx = Tween.prototype.init; // Back compat <1.8 extension point jQuery.fx.step = {}; var fxNow, inProgress, rfxtypes = /^(?:toggle|show|hide)$/, rrun = /queueHooks$/; function schedule() { if ( inProgress ) { if ( document.hidden === false && window.requestAnimationFrame ) { window.requestAnimationFrame( schedule ); } else { window.setTimeout( schedule, jQuery.fx.interval ); } jQuery.fx.tick(); } } // Animations created synchronously will run synchronously function createFxNow() { window.setTimeout( function() { fxNow = undefined; } ); return ( fxNow = Date.now() ); } // Generate parameters to create a standard animation function genFx( type, includeWidth ) { var which, i = 0, attrs = { height: type }; // If we include width, step value is 1 to do all cssExpand values, // otherwise step value is 2 to skip over Left and Right includeWidth = includeWidth ? 1 : 0; for ( ; i < 4; i += 2 - includeWidth ) { which = cssExpand[ i ]; attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; } if ( includeWidth ) { attrs.opacity = attrs.width = type; } return attrs; } function createTween( value, prop, animation ) { var tween, collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), index = 0, length = collection.length; for ( ; index < length; index++ ) { if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { // We're done with this property return tween; } } } function defaultPrefilter( elem, props, opts ) { var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, isBox = "width" in props || "height" in props, anim = this, orig = {}, style = elem.style, hidden = elem.nodeType && isHiddenWithinTree( elem ), dataShow = dataPriv.get( elem, "fxshow" ); // Queue-skipping animations hijack the fx hooks if ( !opts.queue ) { hooks = jQuery._queueHooks( elem, "fx" ); if ( hooks.unqueued == null ) { hooks.unqueued = 0; oldfire = hooks.empty.fire; hooks.empty.fire = function() { if ( !hooks.unqueued ) { oldfire(); } }; } hooks.unqueued++; anim.always( function() { // Ensure the complete handler is called before this completes anim.always( function() { hooks.unqueued--; if ( !jQuery.queue( elem, "fx" ).length ) { hooks.empty.fire(); } } ); } ); } // Detect show/hide animations for ( prop in props ) { value = props[ prop ]; if ( rfxtypes.test( value ) ) { delete props[ prop ]; toggle = toggle || value === "toggle"; if ( value === ( hidden ? "hide" : "show" ) ) { // Pretend to be hidden if this is a "show" and // there is still data from a stopped show/hide if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { hidden = true; // Ignore all other no-op show/hide data } else { continue; } } orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); } } // Bail out if this is a no-op like .hide().hide() propTween = !jQuery.isEmptyObject( props ); if ( !propTween && jQuery.isEmptyObject( orig ) ) { return; } // Restrict "overflow" and "display" styles during box animations if ( isBox && elem.nodeType === 1 ) { // Support: IE <=9 - 11, Edge 12 - 15 // Record all 3 overflow attributes because IE does not infer the shorthand // from identically-valued overflowX and overflowY and Edge just mirrors // the overflowX value there. opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; // Identify a display type, preferring old show/hide data over the CSS cascade restoreDisplay = dataShow && dataShow.display; if ( restoreDisplay == null ) { restoreDisplay = dataPriv.get( elem, "display" ); } display = jQuery.css( elem, "display" ); if ( display === "none" ) { if ( restoreDisplay ) { display = restoreDisplay; } else { // Get nonempty value(s) by temporarily forcing visibility showHide( [ elem ], true ); restoreDisplay = elem.style.display || restoreDisplay; display = jQuery.css( elem, "display" ); showHide( [ elem ] ); } } // Animate inline elements as inline-block if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { if ( jQuery.css( elem, "float" ) === "none" ) { // Restore the original display value at the end of pure show/hide animations if ( !propTween ) { anim.done( function() { style.display = restoreDisplay; } ); if ( restoreDisplay == null ) { display = style.display; restoreDisplay = display === "none" ? "" : display; } } style.display = "inline-block"; } } } if ( opts.overflow ) { style.overflow = "hidden"; anim.always( function() { style.overflow = opts.overflow[ 0 ]; style.overflowX = opts.overflow[ 1 ]; style.overflowY = opts.overflow[ 2 ]; } ); } // Implement show/hide animations propTween = false; for ( prop in orig ) { // General show/hide setup for this element animation if ( !propTween ) { if ( dataShow ) { if ( "hidden" in dataShow ) { hidden = dataShow.hidden; } } else { dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); } // Store hidden/visible for toggle so `.stop().toggle()` "reverses" if ( toggle ) { dataShow.hidden = !hidden; } // Show elements before animating them if ( hidden ) { showHide( [ elem ], true ); } /* eslint-disable no-loop-func */ anim.done( function() { /* eslint-enable no-loop-func */ // The final step of a "hide" animation is actually hiding the element if ( !hidden ) { showHide( [ elem ] ); } dataPriv.remove( elem, "fxshow" ); for ( prop in orig ) { jQuery.style( elem, prop, orig[ prop ] ); } } ); } // Per-property setup propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); if ( !( prop in dataShow ) ) { dataShow[ prop ] = propTween.start; if ( hidden ) { propTween.end = propTween.start; propTween.start = 0; } } } } function propFilter( props, specialEasing ) { var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass for ( index in props ) { name = camelCase( index ); easing = specialEasing[ name ]; value = props[ index ]; if ( Array.isArray( value ) ) { easing = value[ 1 ]; value = props[ index ] = value[ 0 ]; } if ( index !== name ) { props[ name ] = value; delete props[ index ]; } hooks = jQuery.cssHooks[ name ]; if ( hooks && "expand" in hooks ) { value = hooks.expand( value ); delete props[ name ]; // Not quite $.extend, this won't overwrite existing keys. // Reusing 'index' because we have the correct "name" for ( index in value ) { if ( !( index in props ) ) { props[ index ] = value[ index ]; specialEasing[ index ] = easing; } } } else { specialEasing[ name ] = easing; } } } function Animation( elem, properties, options ) { var result, stopped, index = 0, length = Animation.prefilters.length, deferred = jQuery.Deferred().always( function() { // Don't match elem in the :animated selector delete tick.elem; } ), tick = function() { if ( stopped ) { return false; } var currentTime = fxNow || createFxNow(), remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), // Support: Android 2.3 only // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497) temp = remaining / animation.duration || 0, percent = 1 - temp, index = 0, length = animation.tweens.length; for ( ; index < length; index++ ) { animation.tweens[ index ].run( percent ); } deferred.notifyWith( elem, [ animation, percent, remaining ] ); // If there's more to do, yield if ( percent < 1 && length ) { return remaining; } // If this was an empty animation, synthesize a final progress notification if ( !length ) { deferred.notifyWith( elem, [ animation, 1, 0 ] ); } // Resolve the animation and report its conclusion deferred.resolveWith( elem, [ animation ] ); return false; }, animation = deferred.promise( { elem: elem, props: jQuery.extend( {}, properties ), opts: jQuery.extend( true, { specialEasing: {}, easing: jQuery.easing._default }, options ), originalProperties: properties, originalOptions: options, startTime: fxNow || createFxNow(), duration: options.duration, tweens: [], createTween: function( prop, end ) { var tween = jQuery.Tween( elem, animation.opts, prop, end, animation.opts.specialEasing[ prop ] || animation.opts.easing ); animation.tweens.push( tween ); return tween; }, stop: function( gotoEnd ) { var index = 0, // If we are going to the end, we want to run all the tweens // otherwise we skip this part length = gotoEnd ? animation.tweens.length : 0; if ( stopped ) { return this; } stopped = true; for ( ; index < length; index++ ) { animation.tweens[ index ].run( 1 ); } // Resolve when we played the last frame; otherwise, reject if ( gotoEnd ) { deferred.notifyWith( elem, [ animation, 1, 0 ] ); deferred.resolveWith( elem, [ animation, gotoEnd ] ); } else { deferred.rejectWith( elem, [ animation, gotoEnd ] ); } return this; } } ), props = animation.props; propFilter( props, animation.opts.specialEasing ); for ( ; index < length; index++ ) { result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); if ( result ) { if ( isFunction( result.stop ) ) { jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = result.stop.bind( result ); } return result; } } jQuery.map( props, createTween, animation ); if ( isFunction( animation.opts.start ) ) { animation.opts.start.call( elem, animation ); } // Attach callbacks from options animation .progress( animation.opts.progress ) .done( animation.opts.done, animation.opts.complete ) .fail( animation.opts.fail ) .always( animation.opts.always ); jQuery.fx.timer( jQuery.extend( tick, { elem: elem, anim: animation, queue: animation.opts.queue } ) ); return animation; } jQuery.Animation = jQuery.extend( Animation, { tweeners: { "*": [ function( prop, value ) { var tween = this.createTween( prop, value ); adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); return tween; } ] }, tweener: function( props, callback ) { if ( isFunction( props ) ) { callback = props; props = [ "*" ]; } else { props = props.match( rnothtmlwhite ); } var prop, index = 0, length = props.length; for ( ; index < length; index++ ) { prop = props[ index ]; Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; Animation.tweeners[ prop ].unshift( callback ); } }, prefilters: [ defaultPrefilter ], prefilter: function( callback, prepend ) { if ( prepend ) { Animation.prefilters.unshift( callback ); } else { Animation.prefilters.push( callback ); } } } ); jQuery.speed = function( speed, easing, fn ) { var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { complete: fn || !fn && easing || isFunction( speed ) && speed, duration: speed, easing: fn && easing || easing && !isFunction( easing ) && easing }; // Go to the end state if fx are off if ( jQuery.fx.off ) { opt.duration = 0; } else { if ( typeof opt.duration !== "number" ) { if ( opt.duration in jQuery.fx.speeds ) { opt.duration = jQuery.fx.speeds[ opt.duration ]; } else { opt.duration = jQuery.fx.speeds._default; } } } // Normalize opt.queue - true/undefined/null -> "fx" if ( opt.queue == null || opt.queue === true ) { opt.queue = "fx"; } // Queueing opt.old = opt.complete; opt.complete = function() { if ( isFunction( opt.old ) ) { opt.old.call( this ); } if ( opt.queue ) { jQuery.dequeue( this, opt.queue ); } }; return opt; }; jQuery.fn.extend( { fadeTo: function( speed, to, easing, callback ) { // Show any hidden elements after setting opacity to 0 return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() // Animate to the value specified .end().animate( { opacity: to }, speed, easing, callback ); }, animate: function( prop, speed, easing, callback ) { var empty = jQuery.isEmptyObject( prop ), optall = jQuery.speed( speed, easing, callback ), doAnimation = function() { // Operate on a copy of prop so per-property easing won't be lost var anim = Animation( this, jQuery.extend( {}, prop ), optall ); // Empty animations, or finishing resolves immediately if ( empty || dataPriv.get( this, "finish" ) ) { anim.stop( true ); } }; doAnimation.finish = doAnimation; return empty || optall.queue === false ? this.each( doAnimation ) : this.queue( optall.queue, doAnimation ); }, stop: function( type, clearQueue, gotoEnd ) { var stopQueue = function( hooks ) { var stop = hooks.stop; delete hooks.stop; stop( gotoEnd ); }; if ( typeof type !== "string" ) { gotoEnd = clearQueue; clearQueue = type; type = undefined; } if ( clearQueue ) { this.queue( type || "fx", [] ); } return this.each( function() { var dequeue = true, index = type != null && type + "queueHooks", timers = jQuery.timers, data = dataPriv.get( this ); if ( index ) { if ( data[ index ] && data[ index ].stop ) { stopQueue( data[ index ] ); } } else { for ( index in data ) { if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { stopQueue( data[ index ] ); } } } for ( index = timers.length; index--; ) { if ( timers[ index ].elem === this && ( type == null || timers[ index ].queue === type ) ) { timers[ index ].anim.stop( gotoEnd ); dequeue = false; timers.splice( index, 1 ); } } // Start the next in the queue if the last step wasn't forced. // Timers currently will call their complete callbacks, which // will dequeue but only if they were gotoEnd. if ( dequeue || !gotoEnd ) { jQuery.dequeue( this, type ); } } ); }, finish: function( type ) { if ( type !== false ) { type = type || "fx"; } return this.each( function() { var index, data = dataPriv.get( this ), queue = data[ type + "queue" ], hooks = data[ type + "queueHooks" ], timers = jQuery.timers, length = queue ? queue.length : 0; // Enable finishing flag on private data data.finish = true; // Empty the queue first jQuery.queue( this, type, [] ); if ( hooks && hooks.stop ) { hooks.stop.call( this, true ); } // Look for any active animations, and finish them for ( index = timers.length; index--; ) { if ( timers[ index ].elem === this && timers[ index ].queue === type ) { timers[ index ].anim.stop( true ); timers.splice( index, 1 ); } } // Look for any animations in the old queue and finish them for ( index = 0; index < length; index++ ) { if ( queue[ index ] && queue[ index ].finish ) { queue[ index ].finish.call( this ); } } // Turn off finishing flag delete data.finish; } ); } } ); jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { var cssFn = jQuery.fn[ name ]; jQuery.fn[ name ] = function( speed, easing, callback ) { return speed == null || typeof speed === "boolean" ? cssFn.apply( this, arguments ) : this.animate( genFx( name, true ), speed, easing, callback ); }; } ); // Generate shortcuts for custom animations jQuery.each( { slideDown: genFx( "show" ), slideUp: genFx( "hide" ), slideToggle: genFx( "toggle" ), fadeIn: { opacity: "show" }, fadeOut: { opacity: "hide" }, fadeToggle: { opacity: "toggle" } }, function( name, props ) { jQuery.fn[ name ] = function( speed, easing, callback ) { return this.animate( props, speed, easing, callback ); }; } ); jQuery.timers = []; jQuery.fx.tick = function() { var timer, i = 0, timers = jQuery.timers; fxNow = Date.now(); for ( ; i < timers.length; i++ ) { timer = timers[ i ]; // Run the timer and safely remove it when done (allowing for external removal) if ( !timer() && timers[ i ] === timer ) { timers.splice( i--, 1 ); } } if ( !timers.length ) { jQuery.fx.stop(); } fxNow = undefined; }; jQuery.fx.timer = function( timer ) { jQuery.timers.push( timer ); jQuery.fx.start(); }; jQuery.fx.interval = 13; jQuery.fx.start = function() { if ( inProgress ) { return; } inProgress = true; schedule(); }; jQuery.fx.stop = function() { inProgress = null; }; jQuery.fx.speeds = { slow: 600, fast: 200, // Default speed _default: 400 }; // Based off of the plugin by Clint Helfers, with permission. jQuery.fn.delay = function( time, type ) { time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; type = type || "fx"; return this.queue( type, function( next, hooks ) { var timeout = window.setTimeout( next, time ); hooks.stop = function() { window.clearTimeout( timeout ); }; } ); }; ( function() { var input = document.createElement( "input" ), select = document.createElement( "select" ), opt = select.appendChild( document.createElement( "option" ) ); input.type = "checkbox"; // Support: Android <=4.3 only // Default value for a checkbox should be "on" support.checkOn = input.value !== ""; // Support: IE <=11 only // Must access selectedIndex to make default options select support.optSelected = opt.selected; // Support: IE <=11 only // An input loses its value after becoming a radio input = document.createElement( "input" ); input.value = "t"; input.type = "radio"; support.radioValue = input.value === "t"; } )(); var boolHook, attrHandle = jQuery.expr.attrHandle; jQuery.fn.extend( { attr: function( name, value ) { return access( this, jQuery.attr, name, value, arguments.length > 1 ); }, removeAttr: function( name ) { return this.each( function() { jQuery.removeAttr( this, name ); } ); } } ); jQuery.extend( { attr: function( elem, name, value ) { var ret, hooks, nType = elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes if ( nType === 3 || nType === 8 || nType === 2 ) { return; } // Fallback to prop when attributes are not supported if ( typeof elem.getAttribute === "undefined" ) { return jQuery.prop( elem, name, value ); } // Attribute hooks are determined by the lowercase version // Grab necessary hook if one is defined if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { hooks = jQuery.attrHooks[ name.toLowerCase() ] || ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); } if ( value !== undefined ) { if ( value === null ) { jQuery.removeAttr( elem, name ); return; } if ( hooks && "set" in hooks && ( ret = hooks.set( elem, value, name ) ) !== undefined ) { return ret; } elem.setAttribute( name, value + "" ); return value; } if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { return ret; } ret = jQuery.find.attr( elem, name ); // Non-existent attributes return null, we normalize to undefined return ret == null ? undefined : ret; }, attrHooks: { type: { set: function( elem, value ) { if ( !support.radioValue && value === "radio" && nodeName( elem, "input" ) ) { var val = elem.value; elem.setAttribute( "type", value ); if ( val ) { elem.value = val; } return value; } } } }, removeAttr: function( elem, value ) { var name, i = 0, // Attribute names can contain non-HTML whitespace characters // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 attrNames = value && value.match( rnothtmlwhite ); if ( attrNames && elem.nodeType === 1 ) { while ( ( name = attrNames[ i++ ] ) ) { elem.removeAttribute( name ); } } } } ); // Hooks for boolean attributes boolHook = { set: function( elem, value, name ) { if ( value === false ) { // Remove boolean attributes when set to false jQuery.removeAttr( elem, name ); } else { elem.setAttribute( name, name ); } return name; } }; jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { var getter = attrHandle[ name ] || jQuery.find.attr; attrHandle[ name ] = function( elem, name, isXML ) { var ret, handle, lowercaseName = name.toLowerCase(); if ( !isXML ) { // Avoid an infinite loop by temporarily removing this function from the getter handle = attrHandle[ lowercaseName ]; attrHandle[ lowercaseName ] = ret; ret = getter( elem, name, isXML ) != null ? lowercaseName : null; attrHandle[ lowercaseName ] = handle; } return ret; }; } ); var rfocusable = /^(?:input|select|textarea|button)$/i, rclickable = /^(?:a|area)$/i; jQuery.fn.extend( { prop: function( name, value ) { return access( this, jQuery.prop, name, value, arguments.length > 1 ); }, removeProp: function( name ) { return this.each( function() { delete this[ jQuery.propFix[ name ] || name ]; } ); } } ); jQuery.extend( { prop: function( elem, name, value ) { var ret, hooks, nType = elem.nodeType; // Don't get/set properties on text, comment and attribute nodes if ( nType === 3 || nType === 8 || nType === 2 ) { return; } if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { // Fix name and attach hooks name = jQuery.propFix[ name ] || name; hooks = jQuery.propHooks[ name ]; } if ( value !== undefined ) { if ( hooks && "set" in hooks && ( ret = hooks.set( elem, value, name ) ) !== undefined ) { return ret; } return ( elem[ name ] = value ); } if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { return ret; } return elem[ name ]; }, propHooks: { tabIndex: { get: function( elem ) { // Support: IE <=9 - 11 only // elem.tabIndex doesn't always return the // correct value when it hasn't been explicitly set // Use proper attribute retrieval (trac-12072) var tabindex = jQuery.find.attr( elem, "tabindex" ); if ( tabindex ) { return parseInt( tabindex, 10 ); } if ( rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ) { return 0; } return -1; } } }, propFix: { "for": "htmlFor", "class": "className" } } ); // Support: IE <=11 only // Accessing the selectedIndex property // forces the browser to respect setting selected // on the option // The getter ensures a default option is selected // when in an optgroup // eslint rule "no-unused-expressions" is disabled for this code // since it considers such accessions noop if ( !support.optSelected ) { jQuery.propHooks.selected = { get: function( elem ) { /* eslint no-unused-expressions: "off" */ var parent = elem.parentNode; if ( parent && parent.parentNode ) { parent.parentNode.selectedIndex; } return null; }, set: function( elem ) { /* eslint no-unused-expressions: "off" */ var parent = elem.parentNode; if ( parent ) { parent.selectedIndex; if ( parent.parentNode ) { parent.parentNode.selectedIndex; } } } }; } jQuery.each( [ "tabIndex", "readOnly", "maxLength", "cellSpacing", "cellPadding", "rowSpan", "colSpan", "useMap", "frameBorder", "contentEditable" ], function() { jQuery.propFix[ this.toLowerCase() ] = this; } ); // Strip and collapse whitespace according to HTML spec // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace function stripAndCollapse( value ) { var tokens = value.match( rnothtmlwhite ) || []; return tokens.join( " " ); } function getClass( elem ) { return elem.getAttribute && elem.getAttribute( "class" ) || ""; } function classesToArray( value ) { if ( Array.isArray( value ) ) { return value; } if ( typeof value === "string" ) { return value.match( rnothtmlwhite ) || []; } return []; } jQuery.fn.extend( { addClass: function( value ) { var classNames, cur, curValue, className, i, finalValue; if ( isFunction( value ) ) { return this.each( function( j ) { jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); } ); } classNames = classesToArray( value ); if ( classNames.length ) { return this.each( function() { curValue = getClass( this ); cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); if ( cur ) { for ( i = 0; i < classNames.length; i++ ) { className = classNames[ i ]; if ( cur.indexOf( " " + className + " " ) < 0 ) { cur += className + " "; } } // Only assign if different to avoid unneeded rendering. finalValue = stripAndCollapse( cur ); if ( curValue !== finalValue ) { this.setAttribute( "class", finalValue ); } } } ); } return this; }, removeClass: function( value ) { var classNames, cur, curValue, className, i, finalValue; if ( isFunction( value ) ) { return this.each( function( j ) { jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); } ); } if ( !arguments.length ) { return this.attr( "class", "" ); } classNames = classesToArray( value ); if ( classNames.length ) { return this.each( function() { curValue = getClass( this ); // This expression is here for better compressibility (see addClass) cur = this.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); if ( cur ) { for ( i = 0; i < classNames.length; i++ ) { className = classNames[ i ]; // Remove *all* instances while ( cur.indexOf( " " + className + " " ) > -1 ) { cur = cur.replace( " " + className + " ", " " ); } } // Only assign if different to avoid unneeded rendering. finalValue = stripAndCollapse( cur ); if ( curValue !== finalValue ) { this.setAttribute( "class", finalValue ); } } } ); } return this; }, toggleClass: function( value, stateVal ) { var classNames, className, i, self, type = typeof value, isValidValue = type === "string" || Array.isArray( value ); if ( isFunction( value ) ) { return this.each( function( i ) { jQuery( this ).toggleClass( value.call( this, i, getClass( this ), stateVal ), stateVal ); } ); } if ( typeof stateVal === "boolean" && isValidValue ) { return stateVal ? this.addClass( value ) : this.removeClass( value ); } classNames = classesToArray( value ); return this.each( function() { if ( isValidValue ) { // Toggle individual class names self = jQuery( this ); for ( i = 0; i < classNames.length; i++ ) { className = classNames[ i ]; // Check each className given, space separated list if ( self.hasClass( className ) ) { self.removeClass( className ); } else { self.addClass( className ); } } // Toggle whole class name } else if ( value === undefined || type === "boolean" ) { className = getClass( this ); if ( className ) { // Store className if set dataPriv.set( this, "__className__", className ); } // If the element has a class name or if we're passed `false`, // then remove the whole classname (if there was one, the above saved it). // Otherwise bring back whatever was previously saved (if anything), // falling back to the empty string if nothing was stored. if ( this.setAttribute ) { this.setAttribute( "class", className || value === false ? "" : dataPriv.get( this, "__className__" ) || "" ); } } } ); }, hasClass: function( selector ) { var className, elem, i = 0; className = " " + selector + " "; while ( ( elem = this[ i++ ] ) ) { if ( elem.nodeType === 1 && ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { return true; } } return false; } } ); var rreturn = /\r/g; jQuery.fn.extend( { val: function( value ) { var hooks, ret, valueIsFunction, elem = this[ 0 ]; if ( !arguments.length ) { if ( elem ) { hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; if ( hooks && "get" in hooks && ( ret = hooks.get( elem, "value" ) ) !== undefined ) { return ret; } ret = elem.value; // Handle most common string cases if ( typeof ret === "string" ) { return ret.replace( rreturn, "" ); } // Handle cases where value is null/undef or number return ret == null ? "" : ret; } return; } valueIsFunction = isFunction( value ); return this.each( function( i ) { var val; if ( this.nodeType !== 1 ) { return; } if ( valueIsFunction ) { val = value.call( this, i, jQuery( this ).val() ); } else { val = value; } // Treat null/undefined as ""; convert numbers to string if ( val == null ) { val = ""; } else if ( typeof val === "number" ) { val += ""; } else if ( Array.isArray( val ) ) { val = jQuery.map( val, function( value ) { return value == null ? "" : value + ""; } ); } hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; // If set returns undefined, fall back to normal setting if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { this.value = val; } } ); } } ); jQuery.extend( { valHooks: { option: { get: function( elem ) { var val = jQuery.find.attr( elem, "value" ); return val != null ? val : // Support: IE <=10 - 11 only // option.text throws exceptions (trac-14686, trac-14858) // Strip and collapse whitespace // https://html.spec.whatwg.org/#strip-and-collapse-whitespace stripAndCollapse( jQuery.text( elem ) ); } }, select: { get: function( elem ) { var value, option, i, options = elem.options, index = elem.selectedIndex, one = elem.type === "select-one", values = one ? null : [], max = one ? index + 1 : options.length; if ( index < 0 ) { i = max; } else { i = one ? index : 0; } // Loop through all the selected options for ( ; i < max; i++ ) { option = options[ i ]; // Support: IE <=9 only // IE8-9 doesn't update selected after form reset (trac-2551) if ( ( option.selected || i === index ) && // Don't return options that are disabled or in a disabled optgroup !option.disabled && ( !option.parentNode.disabled || !nodeName( option.parentNode, "optgroup" ) ) ) { // Get the specific value for the option value = jQuery( option ).val(); // We don't need an array for one selects if ( one ) { return value; } // Multi-Selects return an array values.push( value ); } } return values; }, set: function( elem, value ) { var optionSet, option, options = elem.options, values = jQuery.makeArray( value ), i = options.length; while ( i-- ) { option = options[ i ]; /* eslint-disable no-cond-assign */ if ( option.selected = jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 ) { optionSet = true; } /* eslint-enable no-cond-assign */ } // Force browsers to behave consistently when non-matching value is set if ( !optionSet ) { elem.selectedIndex = -1; } return values; } } } } ); // Radios and checkboxes getter/setter jQuery.each( [ "radio", "checkbox" ], function() { jQuery.valHooks[ this ] = { set: function( elem, value ) { if ( Array.isArray( value ) ) { return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); } } }; if ( !support.checkOn ) { jQuery.valHooks[ this ].get = function( elem ) { return elem.getAttribute( "value" ) === null ? "on" : elem.value; }; } } ); // Return jQuery for attributes-only inclusion var location = window.location; var nonce = { guid: Date.now() }; var rquery = ( /\?/ ); // Cross-browser xml parsing jQuery.parseXML = function( data ) { var xml, parserErrorElem; if ( !data || typeof data !== "string" ) { return null; } // Support: IE 9 - 11 only // IE throws on parseFromString with invalid input. try { xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); } catch ( e ) {} parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; if ( !xml || parserErrorElem ) { jQuery.error( "Invalid XML: " + ( parserErrorElem ? jQuery.map( parserErrorElem.childNodes, function( el ) { return el.textContent; } ).join( "\n" ) : data ) ); } return xml; }; var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, stopPropagationCallback = function( e ) { e.stopPropagation(); }; jQuery.extend( jQuery.event, { trigger: function( event, data, elem, onlyHandlers ) { var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, eventPath = [ elem || document ], type = hasOwn.call( event, "type" ) ? event.type : event, namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; } // focus/blur morphs to focusin/out; ensure we're not firing them right now if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { return; } if ( type.indexOf( "." ) > -1 ) { // Namespaced trigger; create a regexp to match event type in handle() namespaces = type.split( "." ); type = namespaces.shift(); namespaces.sort(); } ontype = type.indexOf( ":" ) < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string event = event[ jQuery.expando ] ? event : new jQuery.Event( type, typeof event === "object" && event ); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) event.isTrigger = onlyHandlers ? 2 : 3; event.namespace = namespaces.join( "." ); event.rnamespace = event.namespace ? new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null; // Clean up the event in case it is being reused event.result = undefined; if ( !event.target ) { event.target = elem; } // Clone any incoming data and prepend the event, creating the handler arg list data = data == null ? [ event ] : jQuery.makeArray( data, [ event ] ); // Allow special events to draw outside the lines special = jQuery.event.special[ type ] || {}; if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { return; } // Determine event propagation path in advance, per W3C events spec (trac-9951) // Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724) if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { bubbleType = special.delegateType || type; if ( !rfocusMorph.test( bubbleType + type ) ) { cur = cur.parentNode; } for ( ; cur; cur = cur.parentNode ) { eventPath.push( cur ); tmp = cur; } // Only add window if we got to document (e.g., not plain obj or detached DOM) if ( tmp === ( elem.ownerDocument || document ) ) { eventPath.push( tmp.defaultView || tmp.parentWindow || window ); } } // Fire handlers on the event path i = 0; while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { lastElement = cur; event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && dataPriv.get( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); } // Native handler handle = ontype && cur[ ontype ]; if ( handle && handle.apply && acceptData( cur ) ) { event.result = handle.apply( cur, data ); if ( event.result === false ) { event.preventDefault(); } } } event.type = type; // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { if ( ( !special._default || special._default.apply( eventPath.pop(), data ) === false ) && acceptData( elem ) ) { // Call a native DOM method on the target with the same name as the event. // Don't do default actions on window, that's where global variables be (trac-6170) if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ ontype ]; if ( tmp ) { elem[ ontype ] = null; } // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; if ( event.isPropagationStopped() ) { lastElement.addEventListener( type, stopPropagationCallback ); } elem[ type ](); if ( event.isPropagationStopped() ) { lastElement.removeEventListener( type, stopPropagationCallback ); } jQuery.event.triggered = undefined; if ( tmp ) { elem[ ontype ] = tmp; } } } } return event.result; }, // Piggyback on a donor event to simulate a different one // Used only for `focus(in | out)` events simulate: function( type, elem, event ) { var e = jQuery.extend( new jQuery.Event(), event, { type: type, isSimulated: true } ); jQuery.event.trigger( e, null, elem ); } } ); jQuery.fn.extend( { trigger: function( type, data ) { return this.each( function() { jQuery.event.trigger( type, data, this ); } ); }, triggerHandler: function( type, data ) { var elem = this[ 0 ]; if ( elem ) { return jQuery.event.trigger( type, data, elem, true ); } } } ); var rbracket = /\[\]$/, rCRLF = /\r?\n/g, rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, rsubmittable = /^(?:input|select|textarea|keygen)/i; function buildParams( prefix, obj, traditional, add ) { var name; if ( Array.isArray( obj ) ) { // Serialize array item. jQuery.each( obj, function( i, v ) { if ( traditional || rbracket.test( prefix ) ) { // Treat each array item as a scalar. add( prefix, v ); } else { // Item is non-scalar (array or object), encode its numeric index. buildParams( prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", v, traditional, add ); } } ); } else if ( !traditional && toType( obj ) === "object" ) { // Serialize object item. for ( name in obj ) { buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); } } else { // Serialize scalar item. add( prefix, obj ); } } // Serialize an array of form elements or a set of // key/values into a query string jQuery.param = function( a, traditional ) { var prefix, s = [], add = function( key, valueOrFunction ) { // If value is a function, invoke it and use its return value var value = isFunction( valueOrFunction ) ? valueOrFunction() : valueOrFunction; s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value == null ? "" : value ); }; if ( a == null ) { return ""; } // If an array was passed in, assume that it is an array of form elements. if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { // Serialize the form elements jQuery.each( a, function() { add( this.name, this.value ); } ); } else { // If traditional, encode the "old" way (the way 1.3.2 or older // did it), otherwise encode params recursively. for ( prefix in a ) { buildParams( prefix, a[ prefix ], traditional, add ); } } // Return the resulting serialization return s.join( "&" ); }; jQuery.fn.extend( { serialize: function() { return jQuery.param( this.serializeArray() ); }, serializeArray: function() { return this.map( function() { // Can add propHook for "elements" to filter or add form elements var elements = jQuery.prop( this, "elements" ); return elements ? jQuery.makeArray( elements ) : this; } ).filter( function() { var type = this.type; // Use .is( ":disabled" ) so that fieldset[disabled] works return this.name && !jQuery( this ).is( ":disabled" ) && rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && ( this.checked || !rcheckableType.test( type ) ); } ).map( function( _i, elem ) { var val = jQuery( this ).val(); if ( val == null ) { return null; } if ( Array.isArray( val ) ) { return jQuery.map( val, function( val ) { return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; } ); } return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; } ).get(); } } ); var r20 = /%20/g, rhash = /#.*$/, rantiCache = /([?&])_=[^&]*/, rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, // trac-7653, trac-8125, trac-8152: local protocol detection rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, rnoContent = /^(?:GET|HEAD)$/, rprotocol = /^\/\//, /* Prefilters * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) * 2) These are called: * - BEFORE asking for a transport * - AFTER param serialization (s.data is a string if s.processData is true) * 3) key is the dataType * 4) the catchall symbol "*" can be used * 5) execution will start with transport dataType and THEN continue down to "*" if needed */ prefilters = {}, /* Transports bindings * 1) key is the dataType * 2) the catchall symbol "*" can be used * 3) selection will start with transport dataType and THEN go to "*" if needed */ transports = {}, // Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression allTypes = "*/".concat( "*" ), // Anchor tag for parsing the document origin originAnchor = document.createElement( "a" ); originAnchor.href = location.href; // Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport function addToPrefiltersOrTransports( structure ) { // dataTypeExpression is optional and defaults to "*" return function( dataTypeExpression, func ) { if ( typeof dataTypeExpression !== "string" ) { func = dataTypeExpression; dataTypeExpression = "*"; } var dataType, i = 0, dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; if ( isFunction( func ) ) { // For each dataType in the dataTypeExpression while ( ( dataType = dataTypes[ i++ ] ) ) { // Prepend if requested if ( dataType[ 0 ] === "+" ) { dataType = dataType.slice( 1 ) || "*"; ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); // Otherwise append } else { ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); } } } }; } // Base inspection function for prefilters and transports function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { var inspected = {}, seekingTransport = ( structure === transports ); function inspect( dataType ) { var selected; inspected[ dataType ] = true; jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { options.dataTypes.unshift( dataTypeOrTransport ); inspect( dataTypeOrTransport ); return false; } else if ( seekingTransport ) { return !( selected = dataTypeOrTransport ); } } ); return selected; } return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); } // A special extend for ajax options // that takes "flat" options (not to be deep extended) // Fixes trac-9887 function ajaxExtend( target, src ) { var key, deep, flatOptions = jQuery.ajaxSettings.flatOptions || {}; for ( key in src ) { if ( src[ key ] !== undefined ) { ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; } } if ( deep ) { jQuery.extend( true, target, deep ); } return target; } /* Handles responses to an ajax request: * - finds the right dataType (mediates between content-type and expected dataType) * - returns the corresponding response */ function ajaxHandleResponses( s, jqXHR, responses ) { var ct, type, finalDataType, firstDataType, contents = s.contents, dataTypes = s.dataTypes; // Remove auto dataType and get content-type in the process while ( dataTypes[ 0 ] === "*" ) { dataTypes.shift(); if ( ct === undefined ) { ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); } } // Check if we're dealing with a known content-type if ( ct ) { for ( type in contents ) { if ( contents[ type ] && contents[ type ].test( ct ) ) { dataTypes.unshift( type ); break; } } } // Check to see if we have a response for the expected dataType if ( dataTypes[ 0 ] in responses ) { finalDataType = dataTypes[ 0 ]; } else { // Try convertible dataTypes for ( type in responses ) { if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { finalDataType = type; break; } if ( !firstDataType ) { firstDataType = type; } } // Or just use first one finalDataType = finalDataType || firstDataType; } // If we found a dataType // We add the dataType to the list if needed // and return the corresponding response if ( finalDataType ) { if ( finalDataType !== dataTypes[ 0 ] ) { dataTypes.unshift( finalDataType ); } return responses[ finalDataType ]; } } /* Chain conversions given the request and the original response * Also sets the responseXXX fields on the jqXHR instance */ function ajaxConvert( s, response, jqXHR, isSuccess ) { var conv2, current, conv, tmp, prev, converters = {}, // Work with a copy of dataTypes in case we need to modify it for conversion dataTypes = s.dataTypes.slice(); // Create converters map with lowercased keys if ( dataTypes[ 1 ] ) { for ( conv in s.converters ) { converters[ conv.toLowerCase() ] = s.converters[ conv ]; } } current = dataTypes.shift(); // Convert to each sequential dataType while ( current ) { if ( s.responseFields[ current ] ) { jqXHR[ s.responseFields[ current ] ] = response; } // Apply the dataFilter if provided if ( !prev && isSuccess && s.dataFilter ) { response = s.dataFilter( response, s.dataType ); } prev = current; current = dataTypes.shift(); if ( current ) { // There's only work to do if current dataType is non-auto if ( current === "*" ) { current = prev; // Convert response if prev dataType is non-auto and differs from current } else if ( prev !== "*" && prev !== current ) { // Seek a direct converter conv = converters[ prev + " " + current ] || converters[ "* " + current ]; // If none found, seek a pair if ( !conv ) { for ( conv2 in converters ) { // If conv2 outputs current tmp = conv2.split( " " ); if ( tmp[ 1 ] === current ) { // If prev can be converted to accepted input conv = converters[ prev + " " + tmp[ 0 ] ] || converters[ "* " + tmp[ 0 ] ]; if ( conv ) { // Condense equivalence converters if ( conv === true ) { conv = converters[ conv2 ]; // Otherwise, insert the intermediate dataType } else if ( converters[ conv2 ] !== true ) { current = tmp[ 0 ]; dataTypes.unshift( tmp[ 1 ] ); } break; } } } } // Apply converter (if not an equivalence) if ( conv !== true ) { // Unless errors are allowed to bubble, catch and return them if ( conv && s.throws ) { response = conv( response ); } else { try { response = conv( response ); } catch ( e ) { return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; } } } } } } return { state: "success", data: response }; } jQuery.extend( { // Counter for holding the number of active queries active: 0, // Last-Modified header cache for next request lastModified: {}, etag: {}, ajaxSettings: { url: location.href, type: "GET", isLocal: rlocalProtocol.test( location.protocol ), global: true, processData: true, async: true, contentType: "application/x-www-form-urlencoded; charset=UTF-8", /* timeout: 0, data: null, dataType: null, username: null, password: null, cache: null, throws: false, traditional: false, headers: {}, */ accepts: { "*": allTypes, text: "text/plain", html: "text/html", xml: "application/xml, text/xml", json: "application/json, text/javascript" }, contents: { xml: /\bxml\b/, html: /\bhtml/, json: /\bjson\b/ }, responseFields: { xml: "responseXML", text: "responseText", json: "responseJSON" }, // Data converters // Keys separate source (or catchall "*") and destination types with a single space converters: { // Convert anything to text "* text": String, // Text to html (true = no transformation) "text html": true, // Evaluate text as a json expression "text json": JSON.parse, // Parse text as xml "text xml": jQuery.parseXML }, // For options that shouldn't be deep extended: // you can add your own custom options here if // and when you create one that shouldn't be // deep extended (see ajaxExtend) flatOptions: { url: true, context: true } }, // Creates a full fledged settings object into target // with both ajaxSettings and settings fields. // If target is omitted, writes into ajaxSettings. ajaxSetup: function( target, settings ) { return settings ? // Building a settings object ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : // Extending ajaxSettings ajaxExtend( jQuery.ajaxSettings, target ); }, ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), ajaxTransport: addToPrefiltersOrTransports( transports ), // Main method ajax: function( url, options ) { // If url is an object, simulate pre-1.5 signature if ( typeof url === "object" ) { options = url; url = undefined; } // Force options to be an object options = options || {}; var transport, // URL without anti-cache param cacheURL, // Response headers responseHeadersString, responseHeaders, // timeout handle timeoutTimer, // Url cleanup var urlAnchor, // Request state (becomes false upon send and true upon completion) completed, // To know if global events are to be dispatched fireGlobals, // Loop variable i, // uncached part of the url uncached, // Create the final options object s = jQuery.ajaxSetup( {}, options ), // Callbacks context callbackContext = s.context || s, // Context for global events is callbackContext if it is a DOM node or jQuery collection globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? jQuery( callbackContext ) : jQuery.event, // Deferreds deferred = jQuery.Deferred(), completeDeferred = jQuery.Callbacks( "once memory" ), // Status-dependent callbacks statusCode = s.statusCode || {}, // Headers (they are sent all at once) requestHeaders = {}, requestHeadersNames = {}, // Default abort message strAbort = "canceled", // Fake xhr jqXHR = { readyState: 0, // Builds headers hashtable if needed getResponseHeader: function( key ) { var match; if ( completed ) { if ( !responseHeaders ) { responseHeaders = {}; while ( ( match = rheaders.exec( responseHeadersString ) ) ) { responseHeaders[ match[ 1 ].toLowerCase() + " " ] = ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) .concat( match[ 2 ] ); } } match = responseHeaders[ key.toLowerCase() + " " ]; } return match == null ? null : match.join( ", " ); }, // Raw string getAllResponseHeaders: function() { return completed ? responseHeadersString : null; }, // Caches the header setRequestHeader: function( name, value ) { if ( completed == null ) { name = requestHeadersNames[ name.toLowerCase() ] = requestHeadersNames[ name.toLowerCase() ] || name; requestHeaders[ name ] = value; } return this; }, // Overrides response content-type header overrideMimeType: function( type ) { if ( completed == null ) { s.mimeType = type; } return this; }, // Status-dependent callbacks statusCode: function( map ) { var code; if ( map ) { if ( completed ) { // Execute the appropriate callbacks jqXHR.always( map[ jqXHR.status ] ); } else { // Lazy-add the new callbacks in a way that preserves old ones for ( code in map ) { statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; } } } return this; }, // Cancel the request abort: function( statusText ) { var finalText = statusText || strAbort; if ( transport ) { transport.abort( finalText ); } done( 0, finalText ); return this; } }; // Attach deferreds deferred.promise( jqXHR ); // Add protocol if not provided (prefilters might expect it) // Handle falsy url in the settings object (trac-10093: consistency with old signature) // We also use the url parameter if available s.url = ( ( url || s.url || location.href ) + "" ) .replace( rprotocol, location.protocol + "//" ); // Alias method option to type as per ticket trac-12004 s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; // A cross-domain request is in order when the origin doesn't match the current origin. if ( s.crossDomain == null ) { urlAnchor = document.createElement( "a" ); // Support: IE <=8 - 11, Edge 12 - 15 // IE throws exception on accessing the href property if url is malformed, // e.g. http://example.com:80x/ try { urlAnchor.href = s.url; // Support: IE <=8 - 11 only // Anchor's host property isn't correctly set when s.url is relative urlAnchor.href = urlAnchor.href; s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== urlAnchor.protocol + "//" + urlAnchor.host; } catch ( e ) { // If there is an error parsing the URL, assume it is crossDomain, // it can be rejected by the transport if it is invalid s.crossDomain = true; } } // Convert data if not already a string if ( s.data && s.processData && typeof s.data !== "string" ) { s.data = jQuery.param( s.data, s.traditional ); } // Apply prefilters inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); // If request was aborted inside a prefilter, stop there if ( completed ) { return jqXHR; } // We can fire global events as of now if asked to // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118) fireGlobals = jQuery.event && s.global; // Watch for a new set of requests if ( fireGlobals && jQuery.active++ === 0 ) { jQuery.event.trigger( "ajaxStart" ); } // Uppercase the type s.type = s.type.toUpperCase(); // Determine if request has content s.hasContent = !rnoContent.test( s.type ); // Save the URL in case we're toying with the If-Modified-Since // and/or If-None-Match header later on // Remove hash to simplify url manipulation cacheURL = s.url.replace( rhash, "" ); // More options handling for requests with no content if ( !s.hasContent ) { // Remember the hash so we can put it back uncached = s.url.slice( cacheURL.length ); // If data is available and should be processed, append data to url if ( s.data && ( s.processData || typeof s.data === "string" ) ) { cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; // trac-9682: remove data so that it's not used in an eventual retry delete s.data; } // Add or update anti-cache param if needed if ( s.cache === false ) { cacheURL = cacheURL.replace( rantiCache, "$1" ); uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + uncached; } // Put hash and anti-cache on the URL that will be requested (gh-1732) s.url = cacheURL + uncached; // Change '%20' to '+' if this is encoded form body content (gh-2658) } else if ( s.data && s.processData && ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { s.data = s.data.replace( r20, "+" ); } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. if ( s.ifModified ) { if ( jQuery.lastModified[ cacheURL ] ) { jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); } if ( jQuery.etag[ cacheURL ] ) { jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); } } // Set the correct header, if data is being sent if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { jqXHR.setRequestHeader( "Content-Type", s.contentType ); } // Set the Accepts header for the server, depending on the dataType jqXHR.setRequestHeader( "Accept", s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? s.accepts[ s.dataTypes[ 0 ] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : s.accepts[ "*" ] ); // Check for headers option for ( i in s.headers ) { jqXHR.setRequestHeader( i, s.headers[ i ] ); } // Allow custom headers/mimetypes and early abort if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { // Abort if not done already and return return jqXHR.abort(); } // Aborting is no longer a cancellation strAbort = "abort"; // Install callbacks on deferreds completeDeferred.add( s.complete ); jqXHR.done( s.success ); jqXHR.fail( s.error ); // Get transport transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); // If no transport, we auto-abort if ( !transport ) { done( -1, "No Transport" ); } else { jqXHR.readyState = 1; // Send global event if ( fireGlobals ) { globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); } // If request was aborted inside ajaxSend, stop there if ( completed ) { return jqXHR; } // Timeout if ( s.async && s.timeout > 0 ) { timeoutTimer = window.setTimeout( function() { jqXHR.abort( "timeout" ); }, s.timeout ); } try { completed = false; transport.send( requestHeaders, done ); } catch ( e ) { // Rethrow post-completion exceptions if ( completed ) { throw e; } // Propagate others as results done( -1, e ); } } // Callback for when everything is done function done( status, nativeStatusText, responses, headers ) { var isSuccess, success, error, response, modified, statusText = nativeStatusText; // Ignore repeat invocations if ( completed ) { return; } completed = true; // Clear timeout if it exists if ( timeoutTimer ) { window.clearTimeout( timeoutTimer ); } // Dereference transport for early garbage collection // (no matter how long the jqXHR object will be used) transport = undefined; // Cache response headers responseHeadersString = headers || ""; // Set readyState jqXHR.readyState = status > 0 ? 4 : 0; // Determine if successful isSuccess = status >= 200 && status < 300 || status === 304; // Get response data if ( responses ) { response = ajaxHandleResponses( s, jqXHR, responses ); } // Use a noop converter for missing script but not if jsonp if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 && jQuery.inArray( "json", s.dataTypes ) < 0 ) { s.converters[ "text script" ] = function() {}; } // Convert no matter what (that way responseXXX fields are always set) response = ajaxConvert( s, response, jqXHR, isSuccess ); // If successful, handle type chaining if ( isSuccess ) { // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. if ( s.ifModified ) { modified = jqXHR.getResponseHeader( "Last-Modified" ); if ( modified ) { jQuery.lastModified[ cacheURL ] = modified; } modified = jqXHR.getResponseHeader( "etag" ); if ( modified ) { jQuery.etag[ cacheURL ] = modified; } } // if no content if ( status === 204 || s.type === "HEAD" ) { statusText = "nocontent"; // if not modified } else if ( status === 304 ) { statusText = "notmodified"; // If we have data, let's convert it } else { statusText = response.state; success = response.data; error = response.error; isSuccess = !error; } } else { // Extract error from statusText and normalize for non-aborts error = statusText; if ( status || !statusText ) { statusText = "error"; if ( status < 0 ) { status = 0; } } } // Set data for the fake xhr object jqXHR.status = status; jqXHR.statusText = ( nativeStatusText || statusText ) + ""; // Success/Error if ( isSuccess ) { deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); } else { deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); } // Status-dependent callbacks jqXHR.statusCode( statusCode ); statusCode = undefined; if ( fireGlobals ) { globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", [ jqXHR, s, isSuccess ? success : error ] ); } // Complete completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); if ( fireGlobals ) { globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); // Handle the global AJAX counter if ( !( --jQuery.active ) ) { jQuery.event.trigger( "ajaxStop" ); } } } return jqXHR; }, getJSON: function( url, data, callback ) { return jQuery.get( url, data, callback, "json" ); }, getScript: function( url, callback ) { return jQuery.get( url, undefined, callback, "script" ); } } ); jQuery.each( [ "get", "post" ], function( _i, method ) { jQuery[ method ] = function( url, data, callback, type ) { // Shift arguments if data argument was omitted if ( isFunction( data ) ) { type = type || callback; callback = data; data = undefined; } // The url can be an options object (which then must have .url) return jQuery.ajax( jQuery.extend( { url: url, type: method, dataType: type, data: data, success: callback }, jQuery.isPlainObject( url ) && url ) ); }; } ); jQuery.ajaxPrefilter( function( s ) { var i; for ( i in s.headers ) { if ( i.toLowerCase() === "content-type" ) { s.contentType = s.headers[ i ] || ""; } } } ); jQuery._evalUrl = function( url, options, doc ) { return jQuery.ajax( { url: url, // Make this explicit, since user can override this through ajaxSetup (trac-11264) type: "GET", dataType: "script", cache: true, async: false, global: false, // Only evaluate the response if it is successful (gh-4126) // dataFilter is not invoked for failure responses, so using it instead // of the default converter is kludgy but it works. converters: { "text script": function() {} }, dataFilter: function( response ) { jQuery.globalEval( response, options, doc ); } } ); }; jQuery.fn.extend( { wrapAll: function( html ) { var wrap; if ( this[ 0 ] ) { if ( isFunction( html ) ) { html = html.call( this[ 0 ] ); } // The elements to wrap the target around wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); if ( this[ 0 ].parentNode ) { wrap.insertBefore( this[ 0 ] ); } wrap.map( function() { var elem = this; while ( elem.firstElementChild ) { elem = elem.firstElementChild; } return elem; } ).append( this ); } return this; }, wrapInner: function( html ) { if ( isFunction( html ) ) { return this.each( function( i ) { jQuery( this ).wrapInner( html.call( this, i ) ); } ); } return this.each( function() { var self = jQuery( this ), contents = self.contents(); if ( contents.length ) { contents.wrapAll( html ); } else { self.append( html ); } } ); }, wrap: function( html ) { var htmlIsFunction = isFunction( html ); return this.each( function( i ) { jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); } ); }, unwrap: function( selector ) { this.parent( selector ).not( "body" ).each( function() { jQuery( this ).replaceWith( this.childNodes ); } ); return this; } } ); jQuery.expr.pseudos.hidden = function( elem ) { return !jQuery.expr.pseudos.visible( elem ); }; jQuery.expr.pseudos.visible = function( elem ) { return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); }; jQuery.ajaxSettings.xhr = function() { try { return new window.XMLHttpRequest(); } catch ( e ) {} }; var xhrSuccessStatus = { // File protocol always yields status code 0, assume 200 0: 200, // Support: IE <=9 only // trac-1450: sometimes IE returns 1223 when it should be 204 1223: 204 }, xhrSupported = jQuery.ajaxSettings.xhr(); support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); support.ajax = xhrSupported = !!xhrSupported; jQuery.ajaxTransport( function( options ) { var callback, errorCallback; // Cross domain only allowed if supported through XMLHttpRequest if ( support.cors || xhrSupported && !options.crossDomain ) { return { send: function( headers, complete ) { var i, xhr = options.xhr(); xhr.open( options.type, options.url, options.async, options.username, options.password ); // Apply custom fields if provided if ( options.xhrFields ) { for ( i in options.xhrFields ) { xhr[ i ] = options.xhrFields[ i ]; } } // Override mime type if needed if ( options.mimeType && xhr.overrideMimeType ) { xhr.overrideMimeType( options.mimeType ); } // X-Requested-With header // For cross-domain requests, seeing as conditions for a preflight are // akin to a jigsaw puzzle, we simply never set it to be sure. // (it can always be set on a per-request basis or even using ajaxSetup) // For same-domain requests, won't change header if already provided. if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { headers[ "X-Requested-With" ] = "XMLHttpRequest"; } // Set headers for ( i in headers ) { xhr.setRequestHeader( i, headers[ i ] ); } // Callback callback = function( type ) { return function() { if ( callback ) { callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null; if ( type === "abort" ) { xhr.abort(); } else if ( type === "error" ) { // Support: IE <=9 only // On a manual native abort, IE9 throws // errors on any property access that is not readyState if ( typeof xhr.status !== "number" ) { complete( 0, "error" ); } else { complete( // File: protocol always yields status 0; see trac-8605, trac-14207 xhr.status, xhr.statusText ); } } else { complete( xhrSuccessStatus[ xhr.status ] || xhr.status, xhr.statusText, // Support: IE <=9 only // IE9 has no XHR2 but throws on binary (trac-11426) // For XHR2 non-text, let the caller handle it (gh-2498) ( xhr.responseType || "text" ) !== "text" || typeof xhr.responseText !== "string" ? { binary: xhr.response } : { text: xhr.responseText }, xhr.getAllResponseHeaders() ); } } }; }; // Listen to events xhr.onload = callback(); errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); // Support: IE 9 only // Use onreadystatechange to replace onabort // to handle uncaught aborts if ( xhr.onabort !== undefined ) { xhr.onabort = errorCallback; } else { xhr.onreadystatechange = function() { // Check readyState before timeout as it changes if ( xhr.readyState === 4 ) { // Allow onerror to be called first, // but that will not handle a native abort // Also, save errorCallback to a variable // as xhr.onerror cannot be accessed window.setTimeout( function() { if ( callback ) { errorCallback(); } } ); } }; } // Create the abort callback callback = callback( "abort" ); try { // Do send the request (this may raise an exception) xhr.send( options.hasContent && options.data || null ); } catch ( e ) { // trac-14683: Only rethrow if this hasn't been notified as an error yet if ( callback ) { throw e; } } }, abort: function() { if ( callback ) { callback(); } } }; } } ); // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) jQuery.ajaxPrefilter( function( s ) { if ( s.crossDomain ) { s.contents.script = false; } } ); // Install script dataType jQuery.ajaxSetup( { accepts: { script: "text/javascript, application/javascript, " + "application/ecmascript, application/x-ecmascript" }, contents: { script: /\b(?:java|ecma)script\b/ }, converters: { "text script": function( text ) { jQuery.globalEval( text ); return text; } } } ); // Handle cache's special case and crossDomain jQuery.ajaxPrefilter( "script", function( s ) { if ( s.cache === undefined ) { s.cache = false; } if ( s.crossDomain ) { s.type = "GET"; } } ); // Bind script tag hack transport jQuery.ajaxTransport( "script", function( s ) { // This transport only deals with cross domain or forced-by-attrs requests if ( s.crossDomain || s.scriptAttrs ) { var script, callback; return { send: function( _, complete ) { script = jQuery( "'; }; var dataToHtml = function (editor, dataIn) { var data = global$2.extend({}, dataIn); if (!data.source1) { global$2.extend(data, HtmlToData.htmlToData(Settings.getScripts(editor), data.embed)); if (!data.source1) { return ''; } } if (!data.source2) { data.source2 = ''; } if (!data.poster) { data.poster = ''; } data.source1 = editor.convertURL(data.source1, 'source'); data.source2 = editor.convertURL(data.source2, 'source'); data.source1mime = Mime.guess(data.source1); data.source2mime = Mime.guess(data.source2); data.poster = editor.convertURL(data.poster, 'poster'); var pattern = matchPattern(data.source1); if (pattern) { data.source1 = pattern.url; data.type = pattern.type; data.allowFullscreen = pattern.allowFullscreen; data.width = data.width || pattern.w; data.height = data.height || pattern.h; } if (data.embed) { return UpdateHtml.updateHtml(data.embed, data, true); } else { var videoScript = VideoScript.getVideoScriptMatch(Settings.getScripts(editor), data.source1); if (videoScript) { data.type = 'script'; data.width = videoScript.width; data.height = videoScript.height; } var audioTemplateCallback = Settings.getAudioTemplateCallback(editor); var videoTemplateCallback = Settings.getVideoTemplateCallback(editor); data.width = data.width || 300; data.height = data.height || 150; global$2.each(data, function (value, key) { data[key] = editor.dom.encode(value); }); if (data.type === 'iframe') { return getIframeHtml(data); } else if (data.source1mime === 'application/x-shockwave-flash') { return getFlashHtml(data); } else if (data.source1mime.indexOf('audio') !== -1) { return getAudioHtml(data, audioTemplateCallback); } else if (data.type === 'script') { return getScriptHtml(data); } else { return getVideoHtml(data, videoTemplateCallback); } } }; var DataToHtml = { dataToHtml: dataToHtml }; var cache = {}; var embedPromise = function (data, dataToHtml, handler) { return new global$5(function (res, rej) { var wrappedResolve = function (response) { if (response.html) { cache[data.source1] = response; } return res({ url: data.source1, html: response.html ? response.html : dataToHtml(data) }); }; if (cache[data.source1]) { wrappedResolve(cache[data.source1]); } else { handler({ url: data.source1 }, wrappedResolve, rej); } }); }; var defaultPromise = function (data, dataToHtml) { return new global$5(function (res) { res({ html: dataToHtml(data), url: data.source1 }); }); }; var loadedData = function (editor) { return function (data) { return DataToHtml.dataToHtml(editor, data); }; }; var getEmbedHtml = function (editor, data) { var embedHandler = Settings.getUrlResolver(editor); return embedHandler ? embedPromise(data, loadedData(editor), embedHandler) : defaultPromise(data, loadedData(editor)); }; var isCached = function (url) { return cache.hasOwnProperty(url); }; var Service = { getEmbedHtml: getEmbedHtml, isCached: isCached }; var trimPx$1 = function (value) { return value.replace(/px$/, ''); }; var addPx$1 = function (value) { return /^[0-9.]+$/.test(value) ? value + 'px' : value; }; var getSize = function (name) { return function (elm) { return elm ? trimPx$1(elm.style[name]) : ''; }; }; var setSize = function (name) { return function (elm, value) { if (elm) { elm.style[name] = addPx$1(value); } }; }; var Size = { getMaxWidth: getSize('maxWidth'), getMaxHeight: getSize('maxHeight'), setMaxWidth: setSize('maxWidth'), setMaxHeight: setSize('maxHeight') }; var doSyncSize = function (widthCtrl, heightCtrl) { widthCtrl.state.set('oldVal', widthCtrl.value()); heightCtrl.state.set('oldVal', heightCtrl.value()); }; var doSizeControls = function (win, f) { var widthCtrl = win.find('#width')[0]; var heightCtrl = win.find('#height')[0]; var constrained = win.find('#constrain')[0]; if (widthCtrl && heightCtrl && constrained) { f(widthCtrl, heightCtrl, constrained.checked()); } }; var doUpdateSize = function (widthCtrl, heightCtrl, isContrained) { var oldWidth = widthCtrl.state.get('oldVal'); var oldHeight = heightCtrl.state.get('oldVal'); var newWidth = widthCtrl.value(); var newHeight = heightCtrl.value(); if (isContrained && oldWidth && oldHeight && newWidth && newHeight) { if (newWidth !== oldWidth) { newHeight = Math.round(newWidth / oldWidth * newHeight); if (!isNaN(newHeight)) { heightCtrl.value(newHeight); } } else { newWidth = Math.round(newHeight / oldHeight * newWidth); if (!isNaN(newWidth)) { widthCtrl.value(newWidth); } } } doSyncSize(widthCtrl, heightCtrl); }; var syncSize = function (win) { doSizeControls(win, doSyncSize); }; var updateSize = function (win) { doSizeControls(win, doUpdateSize); }; var createUi = function (onChange) { var recalcSize = function () { onChange(function (win) { updateSize(win); }); }; return { type: 'container', label: 'Dimensions', layout: 'flex', align: 'center', spacing: 5, items: [ { name: 'width', type: 'textbox', maxLength: 5, size: 5, onchange: recalcSize, ariaLabel: 'Width' }, { type: 'label', text: 'x' }, { name: 'height', type: 'textbox', maxLength: 5, size: 5, onchange: recalcSize, ariaLabel: 'Height' }, { name: 'constrain', type: 'checkbox', checked: true, text: 'Constrain proportions' } ] }; }; var SizeManager = { createUi: createUi, syncSize: syncSize, updateSize: updateSize }; var embedChange = global$1.ie && global$1.ie <= 8 ? 'onChange' : 'onInput'; var handleError = function (editor) { return function (error) { var errorMessage = error && error.msg ? 'Media embed handler error: ' + error.msg : 'Media embed handler threw unknown error.'; editor.notificationManager.open({ type: 'error', text: errorMessage }); }; }; var getData = function (editor) { var element = editor.selection.getNode(); var dataEmbed = element.getAttribute('data-ephox-embed-iri'); if (dataEmbed) { return { 'source1': dataEmbed, 'data-ephox-embed-iri': dataEmbed, 'width': Size.getMaxWidth(element), 'height': Size.getMaxHeight(element) }; } return element.getAttribute('data-mce-object') ? HtmlToData.htmlToData(Settings.getScripts(editor), editor.serializer.serialize(element, { selection: true })) : {}; }; var getSource = function (editor) { var elm = editor.selection.getNode(); if (elm.getAttribute('data-mce-object') || elm.getAttribute('data-ephox-embed-iri')) { return editor.selection.getContent(); } }; var addEmbedHtml = function (win, editor) { return function (response) { var html = response.html; var embed = win.find('#embed')[0]; var data = global$2.extend(HtmlToData.htmlToData(Settings.getScripts(editor), html), { source1: response.url }); win.fromJSON(data); if (embed) { embed.value(html); SizeManager.updateSize(win); } }; }; var selectPlaceholder = function (editor, beforeObjects) { var i; var y; var afterObjects = editor.dom.select('img[data-mce-object]'); for (i = 0; i < beforeObjects.length; i++) { for (y = afterObjects.length - 1; y >= 0; y--) { if (beforeObjects[i] === afterObjects[y]) { afterObjects.splice(y, 1); } } } editor.selection.select(afterObjects[0]); }; var handleInsert = function (editor, html) { var beforeObjects = editor.dom.select('img[data-mce-object]'); editor.insertContent(html); selectPlaceholder(editor, beforeObjects); editor.nodeChanged(); }; var submitForm = function (win, editor) { var data = win.toJSON(); data.embed = UpdateHtml.updateHtml(data.embed, data); if (data.embed && Service.isCached(data.source1)) { handleInsert(editor, data.embed); } else { Service.getEmbedHtml(editor, data).then(function (response) { handleInsert(editor, response.html); }).catch(handleError(editor)); } }; var populateMeta = function (win, meta) { global$2.each(meta, function (value, key) { win.find('#' + key).value(value); }); }; var showDialog = function (editor) { var win; var data; var generalFormItems = [{ name: 'source1', type: 'filepicker', filetype: 'media', size: 40, autofocus: true, label: 'Source', onpaste: function () { setTimeout(function () { Service.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor)); }, 1); }, onchange: function (e) { Service.getEmbedHtml(editor, win.toJSON()).then(addEmbedHtml(win, editor)).catch(handleError(editor)); populateMeta(win, e.meta); }, onbeforecall: function (e) { e.meta = win.toJSON(); } }]; var advancedFormItems = []; var reserialise = function (update) { update(win); data = win.toJSON(); win.find('#embed').value(UpdateHtml.updateHtml(data.embed, data)); }; if (Settings.hasAltSource(editor)) { advancedFormItems.push({ name: 'source2', type: 'filepicker', filetype: 'media', size: 40, label: 'Alternative source' }); } if (Settings.hasPoster(editor)) { advancedFormItems.push({ name: 'poster', type: 'filepicker', filetype: 'image', size: 40, label: 'Poster' }); } if (Settings.hasDimensions(editor)) { var control = SizeManager.createUi(reserialise); generalFormItems.push(control); } data = getData(editor); var embedTextBox = { id: 'mcemediasource', type: 'textbox', flex: 1, name: 'embed', value: getSource(editor), multiline: true, rows: 5, label: 'Source' }; var updateValueOnChange = function () { data = global$2.extend({}, HtmlToData.htmlToData(Settings.getScripts(editor), this.value())); this.parent().parent().fromJSON(data); }; embedTextBox[embedChange] = updateValueOnChange; var body = [ { title: 'General', type: 'form', items: generalFormItems }, { title: 'Embed', type: 'container', layout: 'flex', direction: 'column', align: 'stretch', padding: 10, spacing: 10, items: [ { type: 'label', text: 'Paste your embed code below:', forId: 'mcemediasource' }, embedTextBox ] } ]; if (advancedFormItems.length > 0) { body.push({ title: 'Advanced', type: 'form', items: advancedFormItems }); } win = editor.windowManager.open({ title: 'Insert/edit media', data: data, bodyType: 'tabpanel', body: body, onSubmit: function () { SizeManager.updateSize(win); submitForm(win, editor); } }); SizeManager.syncSize(win); }; var Dialog = { showDialog: showDialog }; var get$1 = function (editor) { var showDialog = function () { Dialog.showDialog(editor); }; return { showDialog: showDialog }; }; var Api = { get: get$1 }; var register = function (editor) { var showDialog = function () { Dialog.showDialog(editor); }; editor.addCommand('mceMedia', showDialog); }; var Commands = { register: register }; var global$8 = tinymce.util.Tools.resolve('tinymce.html.Node'); var sanitize = function (editor, html) { if (Settings.shouldFilterHtml(editor) === false) { return html; } var writer = global$7(); var blocked; global$4({ validate: false, allow_conditional_comments: false, special: 'script,noscript', comment: function (text) { writer.comment(text); }, cdata: function (text) { writer.cdata(text); }, text: function (text, raw) { writer.text(text, raw); }, start: function (name, attrs, empty) { blocked = true; if (name === 'script' || name === 'noscript' || name === 'svg') { return; } for (var i = attrs.length - 1; i >= 0; i--) { var attrName = attrs[i].name; if (attrName.indexOf('on') === 0) { delete attrs.map[attrName]; attrs.splice(i, 1); } if (attrName === 'style') { attrs[i].value = editor.dom.serializeStyle(editor.dom.parseStyle(attrs[i].value), name); } } writer.start(name, attrs, empty); blocked = false; }, end: function (name) { if (blocked) { return; } writer.end(name); } }, global$6({})).parse(html); return writer.getContent(); }; var Sanitize = { sanitize: sanitize }; var createPlaceholderNode = function (editor, node) { var placeHolder; var name = node.name; placeHolder = new global$8('img', 1); placeHolder.shortEnded = true; retainAttributesAndInnerHtml(editor, node, placeHolder); placeHolder.attr({ 'width': node.attr('width') || '300', 'height': node.attr('height') || (name === 'audio' ? '30' : '150'), 'style': node.attr('style'), 'src': global$1.transparentSrc, 'data-mce-object': name, 'class': 'mce-object mce-object-' + name }); return placeHolder; }; var createPreviewIframeNode = function (editor, node) { var previewWrapper; var previewNode; var shimNode; var name = node.name; previewWrapper = new global$8('span', 1); previewWrapper.attr({ 'contentEditable': 'false', 'style': node.attr('style'), 'data-mce-object': name, 'class': 'mce-preview-object mce-object-' + name }); retainAttributesAndInnerHtml(editor, node, previewWrapper); previewNode = new global$8(name, 1); previewNode.attr({ src: node.attr('src'), allowfullscreen: node.attr('allowfullscreen'), style: node.attr('style'), class: node.attr('class'), width: node.attr('width'), height: node.attr('height'), frameborder: '0' }); shimNode = new global$8('span', 1); shimNode.attr('class', 'mce-shim'); previewWrapper.append(previewNode); previewWrapper.append(shimNode); return previewWrapper; }; var retainAttributesAndInnerHtml = function (editor, sourceNode, targetNode) { var attrName; var attrValue; var attribs; var ai; var innerHtml; attribs = sourceNode.attributes; ai = attribs.length; while (ai--) { attrName = attribs[ai].name; attrValue = attribs[ai].value; if (attrName !== 'width' && attrName !== 'height' && attrName !== 'style') { if (attrName === 'data' || attrName === 'src') { attrValue = editor.convertURL(attrValue, attrName); } targetNode.attr('data-mce-p-' + attrName, attrValue); } } innerHtml = sourceNode.firstChild && sourceNode.firstChild.value; if (innerHtml) { targetNode.attr('data-mce-html', escape(Sanitize.sanitize(editor, innerHtml))); targetNode.firstChild = null; } }; var isWithinEphoxEmbed = function (node) { while (node = node.parent) { if (node.attr('data-ephox-embed-iri')) { return true; } } return false; }; var placeHolderConverter = function (editor) { return function (nodes) { var i = nodes.length; var node; var videoScript; while (i--) { node = nodes[i]; if (!node.parent) { continue; } if (node.parent.attr('data-mce-object')) { continue; } if (node.name === 'script') { videoScript = VideoScript.getVideoScriptMatch(Settings.getScripts(editor), node.attr('src')); if (!videoScript) { continue; } } if (videoScript) { if (videoScript.width) { node.attr('width', videoScript.width.toString()); } if (videoScript.height) { node.attr('height', videoScript.height.toString()); } } if (node.name === 'iframe' && Settings.hasLiveEmbeds(editor) && global$1.ceFalse) { if (!isWithinEphoxEmbed(node)) { node.replace(createPreviewIframeNode(editor, node)); } } else { if (!isWithinEphoxEmbed(node)) { node.replace(createPlaceholderNode(editor, node)); } } } }; }; var Nodes = { createPreviewIframeNode: createPreviewIframeNode, createPlaceholderNode: createPlaceholderNode, placeHolderConverter: placeHolderConverter }; var setup = function (editor) { editor.on('preInit', function () { var specialElements = editor.schema.getSpecialElements(); global$2.each('video audio iframe object'.split(' '), function (name) { specialElements[name] = new RegExp(']*>', 'gi'); }); var boolAttrs = editor.schema.getBoolAttrs(); global$2.each('webkitallowfullscreen mozallowfullscreen allowfullscreen'.split(' '), function (name) { boolAttrs[name] = {}; }); editor.parser.addNodeFilter('iframe,video,audio,object,embed,script', Nodes.placeHolderConverter(editor)); editor.serializer.addAttributeFilter('data-mce-object', function (nodes, name) { var i = nodes.length; var node; var realElm; var ai; var attribs; var innerHtml; var innerNode; var realElmName; var className; while (i--) { node = nodes[i]; if (!node.parent) { continue; } realElmName = node.attr(name); realElm = new global$8(realElmName, 1); if (realElmName !== 'audio' && realElmName !== 'script') { className = node.attr('class'); if (className && className.indexOf('mce-preview-object') !== -1) { realElm.attr({ width: node.firstChild.attr('width'), height: node.firstChild.attr('height') }); } else { realElm.attr({ width: node.attr('width'), height: node.attr('height') }); } } realElm.attr({ style: node.attr('style') }); attribs = node.attributes; ai = attribs.length; while (ai--) { var attrName = attribs[ai].name; if (attrName.indexOf('data-mce-p-') === 0) { realElm.attr(attrName.substr(11), attribs[ai].value); } } if (realElmName === 'script') { realElm.attr('type', 'text/javascript'); } innerHtml = node.attr('data-mce-html'); if (innerHtml) { innerNode = new global$8('#text', 3); innerNode.raw = true; innerNode.value = Sanitize.sanitize(editor, unescape(innerHtml)); realElm.append(innerNode); } node.replace(realElm); } }); }); editor.on('setContent', function () { editor.$('span.mce-preview-object').each(function (index, elm) { var $elm = editor.$(elm); if ($elm.find('span.mce-shim', elm).length === 0) { $elm.append(''); } }); }); }; var FilterContent = { setup: setup }; var setup$1 = function (editor) { editor.on('ResolveName', function (e) { var name; if (e.target.nodeType === 1 && (name = e.target.getAttribute('data-mce-object'))) { e.name = name; } }); }; var ResolveName = { setup: setup$1 }; var setup$2 = function (editor) { editor.on('click keyup', function () { var selectedNode = editor.selection.getNode(); if (selectedNode && editor.dom.hasClass(selectedNode, 'mce-preview-object')) { if (editor.dom.getAttrib(selectedNode, 'data-mce-selected')) { selectedNode.setAttribute('data-mce-selected', '2'); } } }); editor.on('ObjectSelected', function (e) { var objectType = e.target.getAttribute('data-mce-object'); if (objectType === 'audio' || objectType === 'script') { e.preventDefault(); } }); editor.on('objectResized', function (e) { var target = e.target; var html; if (target.getAttribute('data-mce-object')) { html = target.getAttribute('data-mce-html'); if (html) { html = unescape(html); target.setAttribute('data-mce-html', escape(UpdateHtml.updateHtml(html, { width: e.width, height: e.height }))); } } }); }; var Selection = { setup: setup$2 }; var register$1 = function (editor) { editor.addButton('media', { tooltip: 'Insert/edit media', cmd: 'mceMedia', stateSelector: [ 'img[data-mce-object]', 'span[data-mce-object]', 'div[data-ephox-embed-iri]' ] }); editor.addMenuItem('media', { icon: 'media', text: 'Media', cmd: 'mceMedia', context: 'insert', prependToContext: true }); }; var Buttons = { register: register$1 }; global.add('media', function (editor) { Commands.register(editor); Buttons.register(editor); ResolveName.setup(editor); FilterContent.setup(editor); Selection.setup(editor); return Api.get(editor); }); function Plugin () { } return Plugin; }()); })(); tinymce/plugins/media/plugin.min.js000064400000040300152335011310013361 0ustar00!function(){"use strict";var e,t,r,n,i=tinymce.util.Tools.resolve("tinymce.PluginManager"),o=tinymce.util.Tools.resolve("tinymce.Env"),v=tinymce.util.Tools.resolve("tinymce.util.Tools"),w=function(e){return e.getParam("media_scripts")},b=function(e){return e.getParam("audio_template_callback")},y=function(e){return e.getParam("video_template_callback")},a=function(e){return e.getParam("media_live_embeds",!0)},u=function(e){return e.getParam("media_filter_html",!0)},s=function(e){return e.getParam("media_url_resolver")},m=function(e){return e.getParam("media_alt_source",!0)},d=function(e){return e.getParam("media_poster",!0)},h=function(e){return e.getParam("media_dimensions",!0)},f=function(e){var t=e,r=function(){return t};return{get:r,set:function(e){t=e},clone:function(){return f(r())}}},c=function(){},l=function(e){return function(){return e}},p=l(!1),g=l(!0),x=function(){return O},O=(e=function(e){return e.isNone()},n={fold:function(e,t){return e()},is:p,isSome:p,isNone:g,getOr:r=function(e){return e},getOrThunk:t=function(e){return e()},getOrDie:function(e){throw new Error(e||"error: getOrDie called on none.")},getOrNull:l(null),getOrUndefined:l(undefined),or:r,orThunk:t,map:x,each:c,bind:x,exists:p,forall:g,filter:x,equals:e,equals_:e,toArray:function(){return[]},toString:l("none()")},Object.freeze&&Object.freeze(n),n),j=function(r){var e=l(r),t=function(){return i},n=function(e){return e(r)},i={fold:function(e,t){return t(r)},is:function(e){return r===e},isSome:g,isNone:p,getOr:e,getOrThunk:e,getOrDie:e,getOrNull:e,getOrUndefined:e,or:t,orThunk:t,map:function(e){return j(e(r))},each:function(e){e(r)},bind:n,exists:n,forall:n,filter:function(e){return e(r)?i:O},toArray:function(){return[r]},toString:function(){return"some("+r+")"},equals:function(e){return e.is(r)},equals_:function(e,t){return e.fold(p,function(e){return t(r,e)})}};return i},_=x,S=function(e){return null===e||e===undefined?O:j(e)},k=Object.hasOwnProperty,N=function(e,t){return M(e,t)?S(e[t]):_()},M=function(e,t){return k.call(e,t)},T=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),z=tinymce.util.Tools.resolve("tinymce.html.SaxParser"),A=function(e,t){if(e)for(var r=0;r"):"application/x-shockwave-flash"===n.source1mime?(d='',m.poster&&(d+=''),d+=""):-1!==n.source1mime.indexOf("audio")?(s=n,(l=p)?l(s):'"):"script"===n.type?'