压缩字符

This commit is contained in:
Harvey committed 2019-11-28 10:56:53 +08:00
1 parent 7ff61b4660
commit 0cf455ced3
27 files changed
+171 -239

No files matched your search

+62 -3
View File
@@ -1,5 +1,64 @@
import video from './video';
export default {
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',
],
};
-64
View File
@@ -1,64 +0,0 @@
export default {
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',
],
};
+1 -1
View File
@@ -28,7 +28,7 @@ export default function quality(option) {
const { url, name } = quality[index];
if (url && name && playIndex !== index) {
player.switchQuality(url, name);
$qualityName.innerHTML = name;
$qualityName.innerText = name;
playIndex = index;
}
});
+2 -6
View File
@@ -15,15 +15,11 @@ export default function setting(option) {
append($control, icons.setting);
proxy($control, 'click', () => {
setting.toggle();
setting.toggle = true;
});
art.on('setting:toggle', value => {
if (value) {
tooltip($control, i18n.get('Hide setting'));
} else {
tooltip($control, i18n.get('Show setting'));
}
tooltip($control, i18n.get(value ? 'Hide setting' : 'Show setting'));
});
},
});
+1 -3
View File
@@ -1,7 +1,5 @@
export default function clickInit(art, events) {
const {
template: { $player },
} = art;
const { $player } = art.template;
events.proxy(document, ['click', 'contextmenu'], event => {
if (event.composedPath().indexOf($player) > -1) {
art.isFocus = true;
+1 -3
View File
@@ -1,9 +1,7 @@
import { addClass, removeClass } from '../utils';
export default function hoverInit(art, events) {
const {
template: { $player },
} = art;
const { $player } = art.template;
events.hover(
$player,
() => {
@@ -4,12 +4,13 @@ export default function mousemoveInitInit(art, events) {
const {
template: { $player, $video },
player,
controls,
} = art;
const autoHide = debounce(() => {
addClass($player, 'art-hide-cursor');
removeClass($player, 'art-hover');
art.controls.show = false;
controls.show = false;
}, 3000);
art.on('hoverleave', () => {
@@ -21,8 +22,8 @@ export default function mousemoveInitInit(art, events) {
events.proxy($player, 'mousemove', event => {
autoHide.clearTimeout();
removeClass($player, 'art-hide-cursor');
art.controls.show = true;
if (!art.player.pip && player.playing && event.target === $video) {
controls.show = true;
if (!player.pip && player.playing && event.target === $video) {
autoHide();
}
art.emit('mousemove');
+4 -4
View File
@@ -19,13 +19,13 @@ export default function resizeInit(art, events) {
playerWidth = player.width;
playerHeight = player.height;
if (option.autoSize) {
if (!art.player.fullscreen && !art.player.fullscreenWeb && !art.player.pip) {
art.player.autoSize = true;
if (!player.fullscreen && !player.fullscreenWeb && !player.pip) {
player.autoSize = true;
} else {
art.player.autoSize = false;
player.autoSize = false;
}
}
art.player.aspectRatioReset = true;
player.aspectRatioReset = true;
art.emit('resize', {
width: player.width,
height: player.height,
-1
View File
@@ -32,7 +32,6 @@
"Exit web fullscreen": "退出网页全屏",
"Mini player": "迷你播放器",
"Exit mini player": "退出迷你播放器",
"Does not support fullscreen": "不支持全屏",
"Local Subtitle": "本地字幕",
"Local Video": "本地视频",
"Subtitle offset time": "字幕偏移时间",
-1
View File
@@ -32,7 +32,6 @@
"Exit web fullscreen": "退出網頁全屏",
"Mini player": "迷你播放器",
"Exit mini player": "退出迷你播放器",
"Does not support fullscreen": "不支持全屏",
"Local Subtitle": "本地字幕",
"Local Video": "本地視頻",
"Subtitle offset time": "字幕偏移時間",
+15 -17
View File
@@ -14,23 +14,21 @@ import pip from './pip.svg';
export default class Icons {
constructor(art) {
const icons = Object.assign(
{
loading,
state,
play,
pause,
volume,
volumeClose,
subtitle,
screenshot,
setting,
fullscreen,
fullscreenWeb,
pip,
},
art.option.icons,
);
const icons = {
loading,
state,
play,
pause,
volume,
volumeClose,
subtitle,
screenshot,
setting,
fullscreen,
fullscreenWeb,
pip,
...art.option.icons,
};
Object.keys(icons).forEach(key => {
const icon = document.createElement('i');
+1 -1
View File
@@ -9,7 +9,7 @@ export default class Mobile {
template: { $video },
} = art;
config.video.events.forEach(eventName => {
config.events.forEach(eventName => {
proxy($video, eventName, event => {
art.emit(`video:${event.type}`, event);
});
+1 -3
View File
@@ -1,9 +1,7 @@
import { setStyle, addClass, removeClass, hasClass, def } from '../utils';
export default function resizeMix(art, player) {
const {
template: { $container, $player, $video },
} = art;
const { $container, $player, $video } = art.template;
def(player, 'autoSize', {
get() {
+2 -2
View File
@@ -17,7 +17,7 @@ export default function eventInit(art, player) {
player.toggle = true;
});
config.video.events.forEach(eventName => {
config.events.forEach(eventName => {
proxy($video, eventName, event => {
art.emit(`video:${event.type}`, event);
});
@@ -72,7 +72,7 @@ export default function eventInit(art, player) {
addClass($player, 'art-error');
sleep(1000).then(() => {
notice.show = i18n.get('Video load failed');
art.destroy();
art.destroy(false);
});
}
});
+4 -3
View File
@@ -1,18 +1,19 @@
import { errorHandle, def } from '../utils';
export default function flipMix(art, player) {
const { $player } = art.template;
def(player, 'flip', {
get() {
return art.template.$player.dataset.flip;
return $player.dataset.flip;
},
set(flip) {
if (flip) {
const flipList = ['normal', 'horizontal', 'vertical'];
errorHandle(flipList.includes(flip), `'flip' only accept ${flipList.toString()} as parameters`);
art.template.$player.dataset.flip = flip;
$player.dataset.flip = flip;
art.emit('flipChange', flip);
} else {
delete art.template.$player.dataset.flip;
delete $player.dataset.flip;
art.emit('flipRemove');
}
},
+2 -1
View File
@@ -2,8 +2,9 @@ import { def } from '../utils';
export default function seekMix(art, player) {
const { $video } = art.template;
def(player, 'loaded', {
get: () => ($video.buffered.length ? $video.buffered.end($video.buffered.length - 1) / $video.duration : 0),
get: () => player.loadedTime / $video.duration,
});
def(player, 'loadedTime', {
+1 -1
View File
@@ -119,7 +119,7 @@ function customPip(art, player) {
player.aspectRatio = false;
player.playbackRate = false;
art.emit('pipChange', true);
} else {
} else if (player.pip) {
$player.style.cssText = cacheStyle;
removeClass($player, 'art-pip');
setStyle($player, 'top', null);
+3 -2
View File
@@ -4,6 +4,7 @@ export default function playMix(art, player) {
const {
i18n,
notice,
constructor: { instances },
option: { mutex },
template: { $video },
} = art;
@@ -12,7 +13,7 @@ export default function playMix(art, player) {
set(value) {
if (value) {
const promise = $video.play();
if (promise !== undefined) {
if (promise.then) {
promise.then().catch(err => {
notice.show = err;
throw err;
@@ -20,7 +21,7 @@ export default function playMix(art, player) {
}
if (mutex) {
art.constructor.instances
instances
.filter(item => item !== art)
.forEach(item => {
item.player.pause = true;
+2 -2
View File
@@ -1,7 +1,7 @@
import { def } from '../utils';
export default function seekMix(art, player) {
export default function playedMix(art, player) {
def(player, 'played', {
get: () => art.template.$video.currentTime / art.template.$video.duration,
get: () => player.currentTime / player.duration,
});
}
@@ -1,4 +1,4 @@
import { query, append, setStyle, setStyles, errorHandle, getExt, vttToBlob, srtToVtt, assToVtt } from '../utils';
import { query, append, setStyle, setStyles, errorHandle, getExt } from '../utils';
export default function localSubtitle(art) {
const {
@@ -12,31 +12,9 @@ export default function localSubtitle(art) {
if (file) {
const type = getExt(file.name);
if (['ass', 'vtt', 'srt'].includes(type)) {
const reader = new FileReader();
proxy(reader, 'load', event => {
const text = event.target.result;
switch (type) {
case 'srt': {
const url = vttToBlob(srtToVtt(text));
subtitle.switch(url, file.name);
break;
}
case 'ass': {
const url = vttToBlob(assToVtt(text));
subtitle.switch(url, file.name);
break;
}
case 'vtt': {
const url = vttToBlob(text);
subtitle.switch(url, file.name);
break;
}
default:
break;
}
art.emit('localSubtitle', file);
});
reader.readAsText(file);
const url = URL.createObjectURL(file);
subtitle.switch(url, file.name, type);
art.emit('localSubtitle', file);
} else {
errorHandle(false, 'Only supports subtitle files in .ass, .vtt and .srt format');
}
+4 -4
View File
@@ -43,9 +43,9 @@ export default class Subtitle extends Component {
}
}
switch(url, name) {
switch(url, name, ext) {
const { i18n, notice } = this.art;
return this.init(url).then(subUrl => {
return this.init(url, ext).then(subUrl => {
if (name) {
notice.show = `${i18n.get('Switch subtitle')}: ${name}`;
}
@@ -54,7 +54,7 @@ export default class Subtitle extends Component {
});
}
init(url) {
init(url, ext) {
const {
notice,
template: { $subtitle, $track },
@@ -66,7 +66,7 @@ export default class Subtitle extends Component {
})
.then(text => {
this.art.emit('subtitle:load', url);
switch (getExt(url)) {
switch (ext || getExt(url)) {
case 'srt':
return vttToBlob(srtToVtt(text));
case 'ass':