From 3b172ffa93feec2a2685ff0f34a7a33daf83f3ef Mon Sep 17 00:00:00 2001 From: zhw2590582 Date: Sun, 21 Apr 2019 11:57:44 +0800 Subject: [PATCH] build all packages --- README.md | 20 ++-- dist/artplayer-plugin-playlist.css | 1 + dist/artplayer-plugin-playlist.js | 8 ++ dist/artplayer-react.js | 2 +- dist/artplayer-tool-thumbnail.js | 2 +- dist/artplayer-vue.js | 2 +- dist/artplayer.css | 4 +- dist/artplayer.js | 2 +- docs/assets/example/playlist.js | 51 +++++++++ docs/index.html | 1 + docs/uncompiled/artplayer-plugin-playlist.css | 2 + .../artplayer-plugin-playlist.css.map | 1 + docs/uncompiled/artplayer-plugin-playlist.js | 107 ++++++++++++++++++ .../artplayer-plugin-playlist.js.map | 1 + docs/uncompiled/artplayer.js | 37 +++++- docs/uncompiled/artplayer.js.map | 2 +- packages/artplayer-plugin-playlist/README.md | 26 ++++- .../dist/artplayer-plugin-playlist.css | 1 + .../dist/artplayer-plugin-playlist.js | 8 ++ .../artplayer-plugin-playlist/src/index.js | 95 +++++++++++++++- .../artplayer-plugin-playlist/src/index.scss | 39 +++++++ .../artplayer-react/dist/artplayer-react.js | 2 +- .../dist/artplayer-tool-thumbnail.js | 2 +- packages/artplayer-vue/dist/artplayer-vue.js | 2 +- packages/artplayer/dist/artplayer.css | 4 +- packages/artplayer/dist/artplayer.js | 2 +- packages/artplayer/src/index.js | 4 + packages/artplayer/src/player/attachUrlMix.js | 4 +- packages/artplayer/src/player/index.js | 4 +- packages/artplayer/src/player/switchMix.js | 43 +++++++ .../artplayer/src/player/switchQualityMix.js | 26 ----- 31 files changed, 447 insertions(+), 58 deletions(-) create mode 100644 dist/artplayer-plugin-playlist.css create mode 100644 dist/artplayer-plugin-playlist.js create mode 100644 docs/assets/example/playlist.js create mode 100644 docs/uncompiled/artplayer-plugin-playlist.css create mode 100644 docs/uncompiled/artplayer-plugin-playlist.css.map create mode 100644 docs/uncompiled/artplayer-plugin-playlist.js create mode 100644 docs/uncompiled/artplayer-plugin-playlist.js.map create mode 100644 packages/artplayer-plugin-playlist/dist/artplayer-plugin-playlist.css create mode 100644 packages/artplayer-plugin-playlist/dist/artplayer-plugin-playlist.js create mode 100644 packages/artplayer-plugin-playlist/src/index.scss create mode 100644 packages/artplayer/src/player/switchMix.js delete mode 100644 packages/artplayer/src/player/switchQualityMix.js diff --git a/README.md b/README.md index 0c25777c7..9cb4d6bc9 100644 --- a/README.md +++ b/README.md @@ -29,16 +29,16 @@ ## Ecosystem -| Project | Description | Demo | -| --------------------------------------------------------------------------------------------------------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------- | -| [artplayer-plugin-danmu](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-danmu) | Danmu plugin for ArtPlayer | `WIP` | -| [artplayer-plugin-flv](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-flv) | Flv plugin for ArtPlayer | `WIP` | -| [artplayer-plugin-gif](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-gif) | Gif plugin for ArtPlayer | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-gif.js&example=gif) | -| [artplayer-plugin-backlight](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-backlight) | Backlight plugin for ArtPlayer | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-backlight.js&example=backlight) | -| [artplayer-tool-playlist](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-tool-playlist) | Playlist plugin for ArtPlayer | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-playlist.js&example=playlist) | -| [artplayer-tool-thumbnail](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-tool-thumbnail) | Thumbnail tool for ArtPlayer | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-tool-thumbnail.js&example=thumbnail) | -| [artplayer-react](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-react) | React Component for Artplayer | [demo](https://codesandbox.io/s/n74859y9rl) | -| [artplayer-vue](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-vue) | Vue Component for Artplayer | [demo](https://codesandbox.io/s/6z76lm109n) | +| Project | Description | Demo | +| --------------------------------------------------------------------------------------------------------------------- | ------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------- | +| [artplayer-plugin-danmu](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-danmu) | Danmu plugin for ArtPlayer | `WIP` | +| [artplayer-plugin-flv](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-flv) | Flv plugin for ArtPlayer | `WIP` | +| [artplayer-plugin-gif](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-gif) | Gif plugin for ArtPlayer | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-gif.js&example=gif) | +| [artplayer-plugin-backlight](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-plugin-backlight) | Backlight plugin for ArtPlayer | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-backlight.js&example=backlight) | +| [artplayer-tool-playlist](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-tool-playlist) | Playlist plugin for ArtPlayer | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-plugin-playlist.js%0A.%2Funcompiled%2Fartplayer-plugin-playlist.css&example=playlist) | +| [artplayer-tool-thumbnail](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-tool-thumbnail) | Thumbnail tool for ArtPlayer | [demo](https://artplayer.org/?libs=.%2Funcompiled%2Fartplayer-tool-thumbnail.js&example=thumbnail) | +| [artplayer-react](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-react) | React Component for Artplayer | [demo](https://codesandbox.io/s/n74859y9rl) | +| [artplayer-vue](https://github.com/zhw2590582/ArtPlayer/tree/master/packages/artplayer-vue) | Vue Component for Artplayer | [demo](https://codesandbox.io/s/6z76lm109n) | ## Demo diff --git a/dist/artplayer-plugin-playlist.css b/dist/artplayer-plugin-playlist.css new file mode 100644 index 000000000..25d90f932 --- /dev/null +++ b/dist/artplayer-plugin-playlist.css @@ -0,0 +1 @@ +.artplayer-video-player .artplay-playlist{display:none;position:absolute;z-index:120;left:0;top:0;height:100%;width:100%;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.artplayer-video-player .artplay-playlist .artplay-playlist-inner{position:absolute;top:0;right:0;bottom:0;width:50%;height:100%;font-size:12px;background:rgba(0,0,0,.8);overflow:auto}.artplayer-video-player .artplay-playlist .artplay-playlist-inner .artplay-playlist-item{cursor:pointer;border-bottom:1px solid hsla(0,0%,100%,.1);padding:12px 20px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.artplayer-video-player .artplay-playlist .artplay-playlist-inner .artplay-playlist-item.active,.artplayer-video-player .artplay-playlist .artplay-playlist-inner .artplay-playlist-item:hover{color:#00a1d6;background:hsla(0,0%,100%,.1)} \ No newline at end of file diff --git a/dist/artplayer-plugin-playlist.js b/dist/artplayer-plugin-playlist.js new file mode 100644 index 000000000..fecbb1476 --- /dev/null +++ b/dist/artplayer-plugin-playlist.js @@ -0,0 +1,8 @@ +/*! + * artplayer-plugin-playlist.js v3.1.6 + * Github: https://github.com/zhw2590582/ArtPlayer#readme + * (c) 2017-2019 Harvey Zack + * Released under the MIT License. + */ + +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t=t||self)["artplayer-plugin-playlist"]=n()}(this,function(){"use strict";function t(t){var n=t.constructor.utils,e=n.append,i=n.errorHandle,r=t.player,l=t.events.proxy,a=t.template,o=a.$player,s=a.$video,u=e(o,'\n
\n
\n
\n '),c=u.querySelector(".artplay-playlist-inner"),y=[];function d(t){var n=y[t];r.switchUrl(n.url,n.title).then(function(){r.play()})}return t.on("afterAttachUrl",function(){var t=y.findIndex(function(t){return t.url===s.src}),n=Array.from(c.children),e=n[t];-1!==t&&e&&(n.forEach(function(t){return t.classList.remove("active")}),e.classList.add("active"))}),l(c,"click",function(t){var n=t.target.dataset.optionIndex;n&&Number(n)<=y.length-1&&d(n)}),l(u,"click",function(t){t.target===u&&(u.style.display="none")}),{name:"artplayerPluginPlaylist",load:function(t){i(Array.isArray(t),"Playlist is not an array type"),i(0').concat(t.title,"")}).join("")},show:function(){u.style.display="flex"},hide:function(){u.style.display="none"},next:function(){var t=y.findIndex(function(t){return t.url===s.src});(i(-1!==t,"Can't find Playlist item"),1===y.length)?d(0):d(t+1===y.length?0:t+1)},prev:function(){var t=y.findIndex(function(t){return t.url===s.src});(i(-1!==t,"Can't find Playlist item"),1===y.length)?d(0):d(t-1==-1?y.length-1:t-1)}}}return window.artplayerPluginPlaylist=t}); diff --git a/dist/artplayer-react.js b/dist/artplayer-react.js index 2fb59bbb3..ed3340e70 100644 --- a/dist/artplayer-react.js +++ b/dist/artplayer-react.js @@ -5,4 +5,4 @@ * Released under the MIT License. */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t=t||self)["artplayer-react"]=e()}(this,function(){"use strict";var a=function(t,e){if(null==t)return{};var n,r,i={},o=Object.keys(t);for(r=0;r.")}return e}(e);if(!vt[n]){vt[n]=!0;var r="";t&&t._owner&&t._owner!==M.current&&(r=" It was passed a child from "+z(t._owner.type)+"."),I(t),N(!1,'Each child in a list should have a unique "key" prop.%s%s See https://fb.me/react-warning-keys for more information.',n,r),I(null)}}}function gt(t,e){if("object"==typeof t)if(Array.isArray(t))for(var n=0;n",i=" Did you accidentally export a JSX literal instead of a component?"):a=typeof t,N(!1,"React.createElement: type is invalid -- expected a string (for built-in components) or a class/function (for composite components) but got: %s.%s",a,i)}var s=X.apply(this,arguments);if(null==s)return s;if(r)for(var c=2;c is not supported and will be removed in a future major release. Did you mean to render instead?"),n.Provider},set:function(t){n.Provider=t}},_currentValue:{get:function(){return n._currentValue},set:function(t){n._currentValue=t}},_currentValue2:{get:function(){return n._currentValue2},set:function(t){n._currentValue2=t}},_threadCount:{get:function(){return n._threadCount},set:function(t){n._threadCount=t}},Consumer:{get:function(){return r||N(!(r=!0),"Rendering is not supported and will be removed in a future major release. Did you mean to render instead?"),n.Consumer}}}),n.Consumer=o,n._currentRenderer=null,n._currentRenderer2=null,n},forwardRef:function(t){return null!=t&&t.$$typeof===f?k(!1,"forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):"function"!=typeof t?k(!1,"forwardRef requires a render function but was given %s.",null===t?"null":typeof t):0!==t.length&&2!==t.length&&k(!1,"forwardRef render functions accept exactly two parameters: props and ref. %s",1===t.length?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),null!=t&&(null!=t.defaultProps||null!=t.propTypes)&&k(!1,"forwardRef render functions do not support propTypes or defaultProps. Did you accidentally pass a React component?"),{$$typeof:c,render:t}},lazy:function(t){var e={$$typeof:p,_ctor:t,_status:-1,_result:null},n=void 0,r=void 0;return Object.defineProperties(e,{defaultProps:{configurable:!0,get:function(){return n},set:function(t){N(!1,"React.lazy(...): It is not supported to assign `defaultProps` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),n=t,Object.defineProperty(e,"defaultProps",{enumerable:!0})}},propTypes:{configurable:!0,get:function(){return r},set:function(t){N(!1,"React.lazy(...): It is not supported to assign `propTypes` to a lazy component import. Either specify them where the component is defined, or create a wrapping component around it."),r=t,Object.defineProperty(e,"propTypes",{enumerable:!0})}}}),e},memo:function(t,e){return pt(t)||k(!1,"memo: The first argument must be a component. Instead received: %s",null===t?"null":typeof t),{$$typeof:f,type:t,compare:void 0===e?null:e}},useCallback:function(t,e){return dt().useCallback(t,e)},useContext:function(t,e){var n=dt();if(void 0!==e&&N(!1,"useContext() second argument is reserved for future use in React. Passing it is not supported. You passed: %s.%s",e,"number"==typeof e&&Array.isArray(arguments[2])?"\n\nDid you call array.map(useContext)? Calling Hooks inside a loop is not supported. Learn more at https://fb.me/rules-of-hooks":""),void 0!==t._context){var r=t._context;r.Consumer===t?N(!1,"Calling useContext(Context.Consumer) is not supported, may cause bugs, and will be removed in a future major release. Did you mean to call useContext(Context) instead?"):r.Provider===t&&N(!1,"Calling useContext(Context.Provider) is not supported. Did you mean to call useContext(Context) instead?")}return n.useContext(t,e)},useEffect:function(t,e){return dt().useEffect(t,e)},useImperativeHandle:function(t,e,n){return dt().useImperativeHandle(t,e,n)},useDebugValue:function(t,e){return dt().useDebugValue(t,e)},useLayoutEffect:function(t,e){return dt().useLayoutEffect(t,e)},useMemo:function(t,e){return dt().useMemo(t,e)},useReducer:function(t,e,n){return dt().useReducer(t,e,n)},useRef:function(t){return dt().useRef(t)},useState:function(t){return dt().useState(t)},Fragment:u,StrictMode:n,Suspense:l,createElement:wt,cloneElement:function(t,e,n){for(var r=function(t,e,n){null==t&&w(!1,"React.cloneElement(...): The argument must be a React element, but you passed %s.",t);var r=void 0,i=h({},t.props),o=t.key,a=t.ref,s=t._self,c=t._source,u=t._owner;if(null!=e){Y(e)&&(a=e.ref,u=M.current),J(e)&&(o=""+e.key);var l=void 0;for(r in t.type&&t.type.defaultProps&&(l=t.type.defaultProps),e)H.call(e,r)&&!B.hasOwnProperty(r)&&(void 0===e[r]&&void 0!==l?i[r]=l[r]:i[r]=e[r])}var f=arguments.length-2;if(1==f)i.children=n;else if(1=Number(n)});return i?i.insertAdjacentElement("beforebegin",e):O(t,e),e}function C(t,e,n){return t.style[e]=n,t}function j(e,n){return Object.keys(n).forEach(function(t){C(e,t,n[t])}),e}function T(t,e){var n=!(2").replace(/\{\\([ibu])1\}/g,"<$1>").replace(/\{([ibu])\}/g,"<$1>").replace(/\{\/([ibu])\}/g,"").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g,"$1.$2").concat("\r\n\r\n"))}function z(t){return URL.createObjectURL(new Blob([t],{type:"text/vtt"}))}function q(t,e){var n=document.createElement("a");C(n,"display","none"),n.href=t,n.download=e,document.body.appendChild(n),n.click(),document.body.removeChild(n)}var W=Object.freeze({ArtPlayerError:g,errorHandle:b,clamp:w,getExt:x,secondToTime:k,sleep:S,debounce:E,isObject:P,isElement:$,mergeDeep:_,append:O,remove:function(t){return t.parentNode.removeChild(t)},insertByIndex:R,setStyle:C,setStyles:j,getStyle:T,sublings:L,inverseClass:M,tooltip:A,srtToVtt:D,vttToBlob:z,downloadImage:q});function I(t,e,n){if("string"===n){if(""===e.trim())throw new g("".concat(t.join(".")," can not be empty"));return!0}if(e instanceof Element)return!0;throw new g("".concat(t.join(".")," require 'string' or 'Element' type, but got '").concat(n,"'"))}var F={container:{validator:I,required:!0},url:{type:"string|function",required:!0},poster:"string",title:"string",type:{type:"string"},mimeCodec:"string",theme:"string",volume:"number",isLive:"boolean",muted:"boolean",autoplay:"boolean",autoSize:"boolean",loop:"boolean",playbackRate:"boolean",aspectRatio:"boolean",screenshot:"boolean",setting:"boolean",hotkey:"boolean",pip:"boolean",mutex:"boolean",fullscreen:"boolean",fullscreenWeb:"boolean",plugins:{type:"array",child:{type:"function"}},whitelist:{type:"array",child:{type:"string|function|regexp"}},layers:{type:"array",child:{type:"object|function",disable:"boolean",name:"string",index:"number",html:I,style:"object",click:"function"}},contextmenu:{type:"array",child:{type:"object|function",disable:"boolean",name:"string",index:"number",html:I,style:"object",click:"function"}},quality:{type:"array",child:{default:"boolean",name:"string",url:"string"}},controls:{type:"array",child:{type:"object|function",disable:"boolean",name:"string",index:"number",html:I,style:"object",click:"function",position:function(t,e){return["top","left","right"].includes(e)}}},highlight:{type:"array",child:{type:"object",time:"number",text:"string"}},thumbnails:{type:"object",child:{type:"object",url:"string",number:"number",width:"number",height:"number",column:"number"}},subtitle:{type:"object",child:{type:"object",url:"string",style:"object"}},moreVideoAttr:"object",icons:"object",customType:"object",lang:"string"},N={mimeCodec:{mp4:'video/mp4; codecs="avc1.42E01E, mp4a.40.2"',webm:'video/webm; codecs="vorbis, vp8"',ts:'video/mp2t; codecs="avc1.42E01E, mp4a.40.2"'},mse:{mediaSource:{propertys:["activeSourceBuffers","duration","readyState","sourceBuffers"],methods:["addSourceBuffer","endOfStream","removeSourceBuffer","clearLiveSeekableRange","setLiveSeekableRange"],events:["sourceclose","sourceended","sourceopen"]},sourceBuffer:{propertys:["mode","updating","buffered","timestampOffset","audioTracks","videoTracks","textTracks","appendWindowStart","appendWindowEnd","trackDefaults"],methods:["appendBuffer","appendStream","abort","remove"],events:["abort","error","update","updateend","updatestart"]},sourceBufferList:{propertys:["length"],events:["addsourcebuffer","removesourcebuffer"]}},video:{propertys:["audioTracks","autoplay","buffered","controller","controls","crossOrigin","currentSrc","currentTime","defaultMuted","defaultPlaybackRate","duration","ended","error","loop","mediaGroup","muted","networkState","paused","playbackRate","played","preload","readyState","seekable","seeking","src","startDate","textTracks","videoTracks","volume"],methods:["addTextTrack","canPlayType","load","play","pause"],events:["abort","canplay","canplaythrough","durationchange","emptied","ended","error","loadeddata","loadedmetadata","loadstart","pause","play","playing","progress","ratechange","seeked","seeking","stalled","suspend","timeupdate","volumechange","waiting"]}},H=function t(e){var n=this;a(this,t);var r=e.option.whitelist;this.userAgent=window.navigator.userAgent,this.isMobile=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(this.userAgent),this.state=!this.isMobile||r.some(function(t){var e=!1;switch(y.kindOf(t)){case"string":e=-1\n \n \n ',this.$player=this.$container.querySelector(".artplayer-video-player"),this.$video=this.$container.querySelector(".artplayer-video")}},{key:"destroy",value:function(t){t?this.$container.innerHTML="":this.$player.classList.add("artplayer-destroy")}}]),n}(),U={"zh-cn":{"About author":"关于作者","Video info":"视频统计信息",Close:"关闭","Video load failed":"视频加载失败",Volume:"音量",Play:"播放",Pause:"暂停",Rate:"速度",Mute:"静音",Flip:"视频翻转",Horizontal:"水平",Vertical:"垂直",Reconnect:"重新连接","Hide subtitle":"隐藏字幕","Show subtitle":"显示字幕","Hide danmu":"隐藏弹幕","Show danmu":"显示弹幕","Show setting":"显示设置","Hide setting":"隐藏设置",Screenshot:"截图","Play speed":"播放速度","Aspect ratio":"画面比例",Default:"默认",Normal:"正常","Switch video":"切换","Switch subtitle":"切换字幕",Fullscreen:"全屏","Exit fullscreen":"退出全屏","Web fullscreen":"网页全屏","Exit web fullscreen":"退出网页全屏","Mini player":"迷你播放器"},"zh-tw":{"About author":"關於作者","Video info":"影片統計訊息",Close:"關閉","Video load failed":"影片載入失敗",Volume:"音量",Play:"播放",Pause:"暫停",Rate:"速度",Mute:"靜音",Flip:"影片翻轉",Horizontal:"水平",Vertical:"垂直",Reconnect:"重新連接","Hide subtitle":"隱藏字幕","Show subtitle":"顯示字幕","Show setting":"顯示设置","Hide setting":"隱藏设置","Hide danmu":"隱藏彈幕","Show danmu":"顯示彈幕",Screenshot:"截圖","Play speed":"播放速度","Aspect ratio":"畫面比例",Default:"默認",Normal:"正常","Switch video":"切換","Switch subtitle":"切換字幕",Fullscreen:"全屏","Exit fullscreen":"退出全屏","Web fullscreen":"網頁全屏","Exit web fullscreen":"退出網頁全屏","Mini player":"迷你播放器"}},V=function(){function e(t){a(this,e),this.art=t,this.init()}return i(e,[{key:"init",value:function(){this.language=U[this.art.option.lang.toLowerCase()]||{}}},{key:"get",value:function(t){return this.language[t]||t}},{key:"update",value:function(t){U=_(U,t),this.init()}}]),e}(),Y=e(function(t){var o,e,i,a,r,n;o="undefined"!=typeof window&&void 0!==window.document?window.document:{},e=t.exports,i="undefined"!=typeof Element&&"ALLOW_KEYBOARD_INPUT"in Element,a=function(){for(var t,e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],n=0,r=e.length,i={};n