Explorar o código

use eslint, close: #74

DIYgod %!s(int64=8) %!d(string=hai) anos
pai
achega
15e770c988
Modificáronse 13 ficheiros con 869 adicións e 505 borrados
  1. 60 0
      .eslintrc
  2. 0 0
      dist/DPlayer.min.css
  3. 0 0
      dist/DPlayer.min.js
  4. 0 0
      dist/DPlayer.min.js.map
  5. 8 6
      package.json
  6. 133 151
      src/DPlayer.js
  7. 18 18
      src/api.js
  8. 189 193
      src/html.js
  9. 1 1
      src/i18n.js
  10. 1 1
      src/option.js
  11. 6 8
      src/svg.js
  12. 9 0
      webpack.config.js
  13. 444 127
      yarn.lock

+ 60 - 0
.eslintrc

@@ -0,0 +1,60 @@
+{
+    "extends": "eslint:recommended",
+    "parserOptions": {
+        "ecmaVersion": 6,
+        "sourceType": "module"
+    },
+    "env": {
+      "browser": true
+    },
+    "rules": {
+        "no-console": 0,
+        "no-extra-parens": 1,
+        "block-scoped-var": 1,
+        "curly": 1,
+        "eqeqeq": 1,
+        "no-global-assign": 1,
+        "no-implicit-globals": 1,
+        "no-labels": 1,
+        "no-multi-str": 1,
+        "no-unused-expressions": 1,
+        "comma-spacing": 1,
+        "comma-style": 1,
+        "func-call-spacing": 1,
+        "indent": 1,
+        "keyword-spacing": 1,
+        "linebreak-style": 1,
+        "lines-around-comment": 1,
+        "no-multiple-empty-lines": 1,
+        "space-infix-ops": 1,
+        "arrow-spacing": 1,
+        "no-var": 1,
+        "prefer-const": 1,
+        "no-unsafe-negation": 1,
+        "array-callback-return": 1,
+        "dot-location": 1,
+        "dot-notation": 1,
+        "no-eval": 1,
+        "no-extend-native": 1,
+        "no-extra-label": 1,
+        "semi": 1,
+        "space-before-blocks": 1,
+        "space-before-function-paren": 1,
+        "space-in-parens": 1,
+        "space-unary-ops": 1,
+        "spaced-comment": 1,
+        "arrow-body-style": 1,
+        "arrow-parens": 1,
+        "no-restricted-imports": 1,
+        "no-duplicate-imports": 1,
+        "no-useless-computed-key": 1,
+        "no-useless-rename": 1,
+        "rest-spread-spacing": 1
+    },
+    "globals": {
+        "require": false,
+        "module": false,
+        "Hls": false,
+        "flvjs": false
+    }
+}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/DPlayer.min.css


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/DPlayer.min.js


A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 0
dist/DPlayer.min.js.map


+ 8 - 6
package.json

@@ -29,21 +29,23 @@
   },
   "homepage": "https://github.com/DIYgod/DPlayer#readme",
   "devDependencies": {
-    "autoprefixer": "^6.7.2",
+    "autoprefixer": "^7.1.1",
     "babel-core": "^6.24.1",
-    "babel-loader": "^6.4.1",
+    "babel-loader": "^7.0.0",
     "babel-preset-es2015": "^6.24.1",
     "css-loader": "^0.28.0",
+    "eslint": "^3.19.0",
+    "eslint-loader": "^1.7.1",
     "exports-loader": "^0.6.4",
     "extract-text-webpack-plugin": "^2.1.0",
     "file-loader": "^0.11.1",
     "node-sass": "^4.5.0",
-    "postcss-loader": "^1.3.3",
+    "postcss-loader": "^2.0.5",
     "sass-loader": "^6.0.2",
     "strip-loader": "^0.1.2",
-    "style-loader": "^0.16.1",
+    "style-loader": "^0.18.1",
     "url-loader": "^0.5.7",
-    "webpack": "^2.3.3",
-    "webpack-dev-server": "^2.4.2"
+    "webpack": "^2.6.1",
+    "webpack-dev-server": "^2.4.5"
   }
 }

+ 133 - 151
src/DPlayer.js

@@ -1,4 +1,4 @@
-console.log("\n %c DPlayer 1.2.0 %c http://dplayer.js.org \n\n","color: #fadfa3; background: #030307; padding:5px 0;","background: #fadfa3; padding:5px 0;");
+console.log('\n %c DPlayer 1.2.0 %c http://dplayer.js.org \n\n', 'color: #fadfa3; background: #030307; padding:5px 0;', 'background: #fadfa3; padding:5px 0;');
 
 require('./DPlayer.scss');
 const svg = require('./svg.js');
@@ -10,13 +10,14 @@ const isMobile = /mobile/i.test(window.navigator.userAgent);
 let index = 0;
 
 class DPlayer {
+    
     /**
      * DPlayer constructor function
      *
      * @param {Object} option - See README
      * @constructor
      */
-    constructor(option) {
+    constructor (option) {
         this.option = handleOption(option);
 
         const tran = new i18n(this.option.lang).tran;
@@ -59,7 +60,7 @@ class DPlayer {
         // arrow style
         this.arrow = this.element.offsetWidth <= 500;
         if (this.arrow) {
-            var arrowStyle = document.createElement('style');
+            const arrowStyle = document.createElement('style');
             arrowStyle.innerHTML = `.dplayer .dplayer-danmaku{font-size:18px}`;
             document.head.appendChild(arrowStyle);
         }
@@ -153,9 +154,7 @@ class DPlayer {
          * @return {String} 00:00 format
          */
         const secondToTime = (second) => {
-            const add0 = (num) => {
-                return num < 10 ? '0' + num : '' + num;
-            };
+            const add0 = (num) => num < 10 ? '0' + num : '' + num;
             const min = parseInt(second / 60);
             const sec = parseInt(second - min * 60);
             return add0(min) + ':' + add0(sec);
@@ -168,7 +167,7 @@ class DPlayer {
         const getElementViewLeft = (element) => {
             let actualLeft = element.offsetLeft;
             let current = element.offsetParent;
-            let elementScrollLeft;
+            const elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;
             if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {
                 while (current !== null) {
                     actualLeft += current.offsetLeft;
@@ -181,31 +180,10 @@ class DPlayer {
                     current = current.offsetParent;
                 }
             }
-            elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;
             return actualLeft - elementScrollLeft;
         };
 
-        const getElementViewTop = (element) => {
-            let actualTop = element.offsetTop;
-            let current = element.offsetParent;
-            let elementScrollTop;
-            if (!document.fullscreenElement && !document.mozFullScreenElement && !document.webkitFullscreenElement) {
-                while (current !== null) {
-                    actualTop += current.offsetTop;
-                    current = current.offsetParent;
-                }
-            }
-            else {
-                while (current !== null && current !== this.element) {
-                    actualTop += current.offsetTop;
-                    current = current.offsetParent;
-                }
-            }
-            elementScrollTop = document.body.scrollTop + document.documentElement.scrollTop;
-            return actualTop - elementScrollTop;
-        };
-
-        let bar = {};
+        const bar = {};
         bar.playedBar = this.element.getElementsByClassName('dplayer-played')[0];
         bar.loadedBar = this.element.getElementsByClassName('dplayer-loaded')[0];
         const pbar = this.element.getElementsByClassName('dplayer-bar-wrap')[0];
@@ -233,13 +211,13 @@ class DPlayer {
                 // whether the video is buffering
                 currentPlayPos = this.video.currentTime;
                 if (!bufferingDetected
-                    && currentPlayPos < (lastPlayPos + 0.01)
+                    && currentPlayPos < lastPlayPos + 0.01
                     && !this.video.paused) {
                     this.element.classList.add('dplayer-loading');
                     bufferingDetected = true;
                 }
                 if (bufferingDetected
-                    && currentPlayPos > (lastPlayPos + 0.01)
+                    && currentPlayPos > lastPlayPos + 0.01
                     && !this.video.paused) {
                     this.element.classList.remove('dplayer-loading');
                     bufferingDetected = false;
@@ -279,14 +257,14 @@ class DPlayer {
             this.video.currentTime = parseFloat(bar.playedBar.style.width) / 100 * this.video.duration;
         });
 
-        this.isTipsShow = false
+        this.isTipsShow = false;
         this.timeTipsHandler = this.timeTipsHandler(
-            pbar, pbarTimeTips, secondToTime).bind(this)
-        pbar.addEventListener('mousemove', this.timeTipsHandler)
-        pbar.addEventListener('mouseover', this.timeTipsHandler)
-        pbar.addEventListener('mouseenter', this.timeTipsHandler)
-        pbar.addEventListener('mouseout', this.timeTipsHandler)
-        pbar.addEventListener('mouseleave', this.timeTipsHandler)
+            pbar, pbarTimeTips, secondToTime).bind(this);
+        pbar.addEventListener('mousemove', this.timeTipsHandler);
+        pbar.addEventListener('mouseover', this.timeTipsHandler);
+        pbar.addEventListener('mouseenter', this.timeTipsHandler);
+        pbar.addEventListener('mouseout', this.timeTipsHandler);
+        pbar.addEventListener('mouseleave', this.timeTipsHandler);
 
         const thumbMove = (event) => {
             const e = event || window.event;
@@ -336,7 +314,7 @@ class DPlayer {
         };
         const volumeMove = (event) => {
             const e = event || window.event;
-            let percentage = (e.clientX - getElementViewLeft(volumeBarWrap) - 5.5) / vWidth;
+            const percentage = (e.clientX - getElementViewLeft(volumeBarWrap) - 5.5) / vWidth;
             this.volume(percentage);
         };
         const volumeUp = () => {
@@ -347,7 +325,7 @@ class DPlayer {
 
         volumeBarWrapWrap.addEventListener('click', (event) => {
             const e = event || window.event;
-            let percentage = (e.clientX - getElementViewLeft(volumeBarWrap) - 5.5) / vWidth;
+            const percentage = (e.clientX - getElementViewLeft(volumeBarWrap) - 5.5) / vWidth;
             this.volume(percentage);
         });
         volumeBarWrapWrap.addEventListener('mousedown', () => {
@@ -390,7 +368,7 @@ class DPlayer {
         }
 
 
-        /***
+        /**
          * setting
          */
         this.danOpacity = localStorage.getItem('DPlayer-opacity') || 0.7;
@@ -651,14 +629,13 @@ class DPlayer {
         const commentSettingBox = this.element.getElementsByClassName('dplayer-comment-setting-box')[0];
         const commentSendIcon = this.element.getElementsByClassName('dplayer-send-icon')[0];
 
-        const htmlEncode = (str) => {
-            return str.replace(/&/g, "&amp;")
-                .replace(/</g, "&lt;")
-                .replace(/>/g, "&gt;")
-                .replace(/"/g, "&quot;")
-                .replace(/'/g, "&#x27;")
-                .replace(/\//g, "&#x2f;");
-        };
+        const htmlEncode = (str) => str.
+            replace(/&/g, "&amp;").
+            replace(/</g, "&lt;").
+            replace(/>/g, "&gt;").
+            replace(/"/g, "&quot;").
+            replace(/'/g, "&#x27;").
+            replace(/\//g, "&#x2f;");
 
         const sendComment = () => {
             commentInput.blur();
@@ -705,7 +682,9 @@ class DPlayer {
         let disableHide = 0;
         let commentFocusTimeout = 0;
         const closeComment = () => {
-            if (!commentBox.classList.contains('dplayer-comment-box-open')) return;
+            if (!commentBox.classList.contains('dplayer-comment-box-open')) {
+                return;
+            }
 
             commentBox.classList.remove('dplayer-comment-box-open');
             mask.classList.remove('dplayer-mask-show');
@@ -716,7 +695,9 @@ class DPlayer {
             closeCommentSetting();
         };
         const openComment = () => {
-            if (commentBox.classList.contains('dplayer-comment-box-open')) return;
+            if (commentBox.classList.contains('dplayer-comment-box-open')) {
+                return;
+            }
 
             commentBox.classList.add('dplayer-comment-box-open');
             mask.classList.add('dplayer-mask-show');
@@ -765,7 +746,7 @@ class DPlayer {
          * full screen
          */
         const resetAnimation = () => {
-            let danWidth = danContainer.offsetWidth;
+            const danWidth = danContainer.offsetWidth;
             const items = this.element.getElementsByClassName('dplayer-danmaku-item');
             for (let i = 0; i < items.length; i++) {
                 items[i].style.transform = `translateX(-${danWidth}px)`;
@@ -831,28 +812,28 @@ class DPlayer {
                 const event = e || window.event;
                 let percentage;
                 switch (event.keyCode) {
-                    case 32:
-                        event.preventDefault();
-                        this.toggle();
-                        break;
-                    case 37:
-                        event.preventDefault();
-                        this.video.currentTime = this.video.currentTime - 5;
-                        break;
-                    case 39:
-                        event.preventDefault();
-                        this.video.currentTime = this.video.currentTime + 5;
-                        break;
-                    case 38:
-                        event.preventDefault();
-                        percentage = this.video.volume + 0.1;
-                        this.volume(percentage);
-                        break;
-                    case 40:
-                        event.preventDefault();
-                        percentage = this.video.volume - 0.1;
-                        this.volume(percentage);
-                        break;
+                case 32:
+                    event.preventDefault();
+                    this.toggle();
+                    break;
+                case 37:
+                    event.preventDefault();
+                    this.video.currentTime = this.video.currentTime - 5;
+                    break;
+                case 39:
+                    event.preventDefault();
+                    this.video.currentTime = this.video.currentTime + 5;
+                    break;
+                case 38:
+                    event.preventDefault();
+                    percentage = this.video.volume + 0.1;
+                    this.volume(percentage);
+                    break;
+                case 40:
+                    event.preventDefault();
+                    percentage = this.video.volume - 0.1;
+                    this.volume(percentage);
+                    break;
                 }
             }
         };
@@ -862,12 +843,12 @@ class DPlayer {
         document.addEventListener('keydown', (e) => {              // Press ESC to quit web full screen
             const event = e || window.event;
             switch (event.keyCode) {
-                case 27:
-                    if (this.element.classList.contains('dplayer-fulled')) {
-                        this.element.classList.remove('dplayer-fulled');
-                        resetAnimation();
-                    }
-                    break;
+            case 27:
+                if (this.element.classList.contains('dplayer-fulled')) {
+                    this.element.classList.remove('dplayer-fulled');
+                    resetAnimation();
+                }
+                break;
             }
         });
 
@@ -905,7 +886,7 @@ class DPlayer {
             mask.addEventListener('click', () => {
                 mask.classList.remove('dplayer-mask-show');
                 menu.classList.remove('dplayer-menu-show');
-           });
+            });
         });
 
         /**
@@ -930,7 +911,7 @@ class DPlayer {
     /**
      * Play music
      */
-    play(time) {
+    play (time) {
         if (Object.prototype.toString.call(time) === '[object Number]') {
             this.video.currentTime = time;
         }
@@ -954,7 +935,7 @@ class DPlayer {
     /**
      * Pause music
      */
-    pause() {
+    pause () {
         this.paused = true;
         this.element.classList.remove('dplayer-loading');
 
@@ -974,7 +955,7 @@ class DPlayer {
     /**
      * Set volume
      */
-    volume(percentage) {
+    volume (percentage) {
         percentage = percentage > 0 ? percentage : 0;
         percentage = percentage < 1 ? percentage : 1;
         this.updateBar('volume', percentage, 'width');
@@ -988,7 +969,7 @@ class DPlayer {
     /**
      * Toggle between play and pause
      */
-    toggle() {
+    toggle () {
         if (this.video.paused) {
             this.play();
         }
@@ -1000,7 +981,7 @@ class DPlayer {
     /**
      * attach event
      */
-    on(name, func) {
+    on (name, func) {
         if (typeof func === 'function') {
             this.event[name].push(func);
         }
@@ -1010,21 +991,23 @@ class DPlayer {
      * Asynchronously read danmaku from all API endpoints
      */
     _readAllEndpoints (endpoints, finish) {
-        let results = [];
+        const results = [];
         let readCount = 0;
-        let cbk = (i) => (err, data) => {
+        const cbk = (i) => (err, data) => {
             ++readCount;
             if (err) {
-                if (err.response)
-                    alert(err.response.msg);
-                else
-                    console.log('Request was unsuccessful: ' + err.status);
+                if (err.response) {
+                    console.log(err.response.msg);                    
+                }
+                else {
+                    console.log('Request was unsuccessful: ' + err.status);                    
+                }
                 results[i] = [];
             }
             else {
                 results[i] = data;
             }
-            if (readCount == endpoints.length) {
+            if (readCount === endpoints.length) {
                 return finish(results);
             }
         };
@@ -1037,7 +1020,7 @@ class DPlayer {
     /**
      * Read danmaku from API
      */
-    readDanmaku() {
+    readDanmaku () {
         const isMobile = /mobile/i.test(window.navigator.userAgent);
         let apiurl;
         if (this.option.danmaku.maximum) {
@@ -1046,7 +1029,7 @@ class DPlayer {
         else {
             apiurl = `${this.option.danmaku.api}?id=${this.option.danmaku.id}`;
         }
-        let endpoints = (this.option.danmaku.addition || []).slice(0);
+        const endpoints = (this.option.danmaku.addition || []).slice(0);
         endpoints.push(apiurl);
 
         this._readAllEndpoints(endpoints, (results) => {
@@ -1071,30 +1054,26 @@ class DPlayer {
      * @param {String} color - danmaku color, default: `#fff`
      * @param {String} type - danmaku type, `right` `top` `bottom`, default: `right`
      */
-    pushDanmaku(text, color, type) {
+    pushDanmaku (text, color, type) {
         const danContainer = this.element.getElementsByClassName('dplayer-danmaku')[0];
         const itemHeight = this.arrow ? 24 : 30;
-        let danWidth;
-        let danHeight;
-        let itemY;
+        const danWidth = danContainer.offsetWidth;
+        const danHeight = danContainer.offsetHeight;
+        const itemY = parseInt(danHeight / itemHeight);
 
-        const danItemRight = (ele) => {
-            return danContainer.getBoundingClientRect().right - ele.getBoundingClientRect().right;
-        };
+        const danItemRight = (ele) => danContainer.getBoundingClientRect().right - ele.getBoundingClientRect().right;
 
-        const danSpeed = (width) => {
-            return (danWidth + width) / 5;
-        };
+        const danSpeed = (width) => (danWidth + width) / 5;
 
         const getTunnel = (ele, type, width) => {
             const tmp = danWidth / danSpeed(width);
 
             for (let i = 0; ; i++) {
-                let item = this.danTunnel[type][i + ''];
+                const item = this.danTunnel[type][i + ''];
                 if (item && item.length) {
                     for (let j = 0; j < item.length; j++) {
                         const danRight = danItemRight(item[j]) - 10;
-                        if (danRight <= danWidth - (tmp * danSpeed(item[j].offsetWidth)) || danRight <= 0) {
+                        if (danRight <= danWidth - tmp * danSpeed(item[j].offsetWidth) || danRight <= 0) {
                             break;
                         }
                         if (j === item.length - 1) {
@@ -1122,10 +1101,7 @@ class DPlayer {
         if (!color) {
             color = '#fff';
         }
-        danWidth = danContainer.offsetWidth;
-        danHeight = danContainer.offsetHeight;
-        itemY = parseInt(danHeight / itemHeight);
-        let item = document.createElement(`div`);
+        const item = document.createElement(`div`);
         item.classList.add(`dplayer-danmaku-item`);
         item.classList.add(`dplayer-danmaku-${type}`);
         item.innerHTML = text;
@@ -1137,23 +1113,23 @@ class DPlayer {
 
         // measure
         this.itemDemo.innerHTML = text;
-        let itemWidth = this.itemDemo.offsetWidth;
+        const itemWidth = this.itemDemo.offsetWidth;
 
         // adjust
         switch (type) {
-            case 'right':
-                item.style.top = itemHeight * getTunnel(item, type, itemWidth) + 'px';
-                item.style.width = (itemWidth + 1) + 'px';
-                item.style.transform = `translateX(-${danWidth}px)`;
-                break;
-            case 'top':
-                item.style.top = itemHeight * getTunnel(item, type) + 'px';
-                break;
-            case 'bottom':
-                item.style.bottom = itemHeight * getTunnel(item, type) + 'px';
-                break;
-            default:
-                console.error(`Can't handled danmaku type: ${type}`);
+        case 'right':
+            item.style.top = itemHeight * getTunnel(item, type, itemWidth) + 'px';
+            item.style.width = itemWidth + 1 + 'px';
+            item.style.transform = `translateX(-${danWidth}px)`;
+            break;
+        case 'top':
+            item.style.top = itemHeight * getTunnel(item, type) + 'px';
+            break;
+        case 'bottom':
+            item.style.bottom = itemHeight * getTunnel(item, type) + 'px';
+            break;
+        default:
+            console.error(`Can't handled danmaku type: ${type}`);
         }
 
         // insert
@@ -1163,7 +1139,7 @@ class DPlayer {
         item.classList.add(`dplayer-danmaku-move`);
 
         return item;
-    };
+    }
 
     /**
      * Switch to a new video
@@ -1171,7 +1147,7 @@ class DPlayer {
      * @param {Object} video - new video info
      * @param {Object} danmaku - new danmaku info
      */
-    switchVideo(video, danmaku) {
+    switchVideo (video, danmaku) {
         this.video.src = video.url;
         this.video.poster = video.pic ? video.pic : '';
         this.video.currentTime = 0;
@@ -1195,15 +1171,15 @@ class DPlayer {
         }
     }
 
-    timeTipsHandler(pbar, timeTips, secondToTime) {
+    timeTipsHandler (pbar, timeTips, secondToTime) {
         // http://stackoverflow.com/questions/1480133/how-can-i-get-an-objects-absolute-position-on-the-page-in-javascript
-        const cumulativeOffset = function(element) {
-            var top = 0, left = 0;
+        const cumulativeOffset = (element) => {
+            let top = 0, left = 0;
             do {
-                top += element.offsetTop  || 0;
+                top += element.offsetTop || 0;
                 left += element.offsetLeft || 0;
                 element = element.offsetParent;
-            } while(element);
+            } while (element);
 
             return {
                 top: top,
@@ -1212,28 +1188,34 @@ class DPlayer {
         };
 
         return (e) => {
-            if (!this.video.duration) return
-            const { clientX, target } = e;
-            const px = cumulativeOffset(pbar).left
+            if (!this.video.duration) {
+                return;
+            }
+            const { clientX } = e;
+            const px = cumulativeOffset(pbar).left;
             const tx = clientX - px;
-            timeTips.innerText = secondToTime(this.video.duration * (tx/pbar.offsetWidth));
+            timeTips.innerText = secondToTime(this.video.duration * (tx / pbar.offsetWidth));
             timeTips.style.left = `${(tx - 20)}px`;
-            switch(e.type) {
-                case 'mouseenter':
-                case 'mouseover':
-                case 'mousemove':
-                    if (this.isTipsShow) return
-                    timeTips.classList.remove('hidden')
-                    this.isTipsShow = true
-                    break;
-                case 'mouseleave':
-                case 'mouseout':
-                    if (!this.isTipsShow) return
-                    timeTips.classList.add('hidden')
-                    this.isTipsShow = false
-                    break;
+            switch (e.type) {
+            case 'mouseenter':
+            case 'mouseover':
+            case 'mousemove':
+                if (this.isTipsShow) {
+                    return;
+                }
+                timeTips.classList.remove('hidden');
+                this.isTipsShow = true;
+                break;
+            case 'mouseleave':
+            case 'mouseout':
+                if (!this.isTipsShow) {
+                    return;
+                }
+                timeTips.classList.add('hidden');
+                this.isTipsShow = false;
+                break;
             }
-        }
+        };
     }
 }
 

+ 18 - 18
src/api.js

@@ -5,46 +5,46 @@
  * */
 
 const SendXMLHttpRequest = (url, data, success, error, fail) => {
-    const xhr = new XMLHttpRequest()
+    const xhr = new XMLHttpRequest();
 
     xhr.onreadystatechange = () => {
         if (xhr.readyState === 4) {
             if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
-                const response = JSON.parse(xhr.responseText)
+                const response = JSON.parse(xhr.responseText);
 
                 if (response.code !== 1) {
-                    return error(xhr, response)
+                    return error(xhr, response);
                 }
 
-                return success(xhr, response)
+                return success(xhr, response);
             }
 
-            fail(xhr)
+            fail(xhr);
         }
-    }
+    };
 
-    xhr.open((data !== null) ? 'POST' : 'GET', url, true)
-    xhr.send((data !== null) ? JSON.stringify(data) : null)
-}
+    xhr.open(data !== null ? 'POST' : 'GET', url, true);
+    xhr.send(data !== null ? JSON.stringify(data) : null);
+};
 
 module.exports = {
     send: (endpoint, danmakuData) => {
         SendXMLHttpRequest(endpoint, danmakuData, (xhr, response) => {
-            console.log('Post danmaku: ', response)
+            console.log('Post danmaku: ', response);
         }, (xhr, response) => {
-            alert(response.msg)
+            alert(response.msg);
         }, (xhr) => {
-            console.log('Request was unsuccessful: ' + xhr.status)
-        })
+            console.log('Request was unsuccessful: ' + xhr.status);
+        });
     },
 
     read: (endpoint, cbk) => {
         SendXMLHttpRequest(endpoint, null, (xhr, response) => {
-            cbk(null, response.danmaku)
+            cbk(null, response.danmaku);
         }, (xhr, response) => {
-            cbk({ status: xhr.status, response })
+            cbk({ status: xhr.status, response });
         }, (xhr) => {
-            cbk({ status: xhr.status, response: null })
-        })
+            cbk({ status: xhr.status, response: null });
+        });
     }
-}
+};

+ 189 - 193
src/html.js

@@ -1,216 +1,212 @@
 const svg = require('./svg.js');
 
 module.exports = {
-    main: (option, index, tran) => {
-        return `
-            <div class="dplayer-mask"></div>
-            <div class="dplayer-video-wrap">
-                <video class="dplayer-video" ${option.video.pic ? `poster="${option.video.pic}"` : ``} webkit-playsinline playsinline ${option.screenshot ? `crossorigin="anonymous"` : ``} preload="${option.preload}" src="${option.video.url}"></video>
-                <div class="dplayer-danmaku">
-                    <div class="dplayer-danmaku-item dplayer-danmaku-item--demo"></div>
-                </div>
-                <div class="dplayer-bezel">
-                    <span class="dplayer-bezel-icon"></span>
-                    ${option.danmaku ? `<span class="dplayer-danloading">${tran('Danmaku is loading')}</span>` : ``}
-                    <span class="diplayer-loading-icon">
-                        <svg height="100%" version="1.1" viewBox="0 0 22 22" width="100%">
-                            <svg x="7" y="1">
-                                <circle class="diplayer-loading-dot diplayer-loading-dot-0" cx="4" cy="4" r="2"></circle>
-                            </svg>
-                            <svg x="11" y="3">
-                                <circle class="diplayer-loading-dot diplayer-loading-dot-1" cx="4" cy="4" r="2"></circle>
-                            </svg>
-                            <svg x="13" y="7">
-                                <circle class="diplayer-loading-dot diplayer-loading-dot-2" cx="4" cy="4" r="2"></circle>
-                            </svg>
-                            <svg x="11" y="11">
-                                <circle class="diplayer-loading-dot diplayer-loading-dot-3" cx="4" cy="4" r="2"></circle>
-                            </svg>
-                            <svg x="7" y="13">
-                                <circle class="diplayer-loading-dot diplayer-loading-dot-4" cx="4" cy="4" r="2"></circle>
-                            </svg>
-                            <svg x="3" y="11">
-                                <circle class="diplayer-loading-dot diplayer-loading-dot-5" cx="4" cy="4" r="2"></circle>
-                            </svg>
-                            <svg x="1" y="7">
-                                <circle class="diplayer-loading-dot diplayer-loading-dot-6" cx="4" cy="4" r="2"></circle>
-                            </svg>
-                            <svg x="3" y="3">
-                                <circle class="diplayer-loading-dot diplayer-loading-dot-7" cx="4" cy="4" r="2"></circle>
-                            </svg>
+    main: (option, index, tran) => `
+        <div class="dplayer-mask"></div>
+        <div class="dplayer-video-wrap">
+            <video class="dplayer-video" ${option.video.pic ? `poster="${option.video.pic}"` : ``} webkit-playsinline playsinline ${option.screenshot ? `crossorigin="anonymous"` : ``} preload="${option.preload}" src="${option.video.url}"></video>
+            <div class="dplayer-danmaku">
+                <div class="dplayer-danmaku-item dplayer-danmaku-item--demo"></div>
+            </div>
+            <div class="dplayer-bezel">
+                <span class="dplayer-bezel-icon"></span>
+                ${option.danmaku ? `<span class="dplayer-danloading">${tran('Danmaku is loading')}</span>` : ``}
+                <span class="diplayer-loading-icon">
+                    <svg height="100%" version="1.1" viewBox="0 0 22 22" width="100%">
+                        <svg x="7" y="1">
+                            <circle class="diplayer-loading-dot diplayer-loading-dot-0" cx="4" cy="4" r="2"></circle>
                         </svg>
-                    </span>
-                </div>
+                        <svg x="11" y="3">
+                            <circle class="diplayer-loading-dot diplayer-loading-dot-1" cx="4" cy="4" r="2"></circle>
+                        </svg>
+                        <svg x="13" y="7">
+                            <circle class="diplayer-loading-dot diplayer-loading-dot-2" cx="4" cy="4" r="2"></circle>
+                        </svg>
+                        <svg x="11" y="11">
+                            <circle class="diplayer-loading-dot diplayer-loading-dot-3" cx="4" cy="4" r="2"></circle>
+                        </svg>
+                        <svg x="7" y="13">
+                            <circle class="diplayer-loading-dot diplayer-loading-dot-4" cx="4" cy="4" r="2"></circle>
+                        </svg>
+                        <svg x="3" y="11">
+                            <circle class="diplayer-loading-dot diplayer-loading-dot-5" cx="4" cy="4" r="2"></circle>
+                        </svg>
+                        <svg x="1" y="7">
+                            <circle class="diplayer-loading-dot diplayer-loading-dot-6" cx="4" cy="4" r="2"></circle>
+                        </svg>
+                        <svg x="3" y="3">
+                            <circle class="diplayer-loading-dot diplayer-loading-dot-7" cx="4" cy="4" r="2"></circle>
+                        </svg>
+                    </svg>
+                </span>
             </div>
-            <div class="dplayer-controller-mask"></div>
-            <div class="dplayer-controller">
-                <div class="dplayer-icons dplayer-icons-left">
-                    <button class="dplayer-icon dplayer-play-icon">`
-            +           svg('play')
-            + `     </button>
-                    <div class="dplayer-volume">
-                        <button class="dplayer-icon dplayer-volume-icon">`
-            +               svg('volume-down')
-            + `         </button>
-                        <div class="dplayer-volume-bar-wrap">
-                            <div class="dplayer-volume-bar">
-                                <div class="dplayer-volume-bar-inner" style="width: 70%; background: ${option.theme};">
-                                    <span class="dplayer-thumb" style="background: ${option.theme}"></span>
-                                </div>
+        </div>
+        <div class="dplayer-controller-mask"></div>
+        <div class="dplayer-controller">
+            <div class="dplayer-icons dplayer-icons-left">
+                <button class="dplayer-icon dplayer-play-icon">
+                    ${svg('play')}
+                </button>
+                <div class="dplayer-volume">
+                    <button class="dplayer-icon dplayer-volume-icon">
+                        ${svg('volume-down')}
+                    </button>
+                    <div class="dplayer-volume-bar-wrap">
+                        <div class="dplayer-volume-bar">
+                            <div class="dplayer-volume-bar-inner" style="width: 70%; background: ${option.theme};">
+                                <span class="dplayer-thumb" style="background: ${option.theme}"></span>
                             </div>
                         </div>
                     </div>
-                    <span class="dplayer-time"><span class="dplayer-ptime">0:00</span> / <span class="dplayer-dtime">0:00</span></span>
                 </div>
-                <div class="dplayer-icons dplayer-icons-right">
-                    ${option.screenshot ? `
-                    <a href="#" class="dplayer-icon dplayer-camera-icon"}dplayer-volume>`
-                +           svg('camera')
-                + `     </a>
-                    ` : ``}
-                    <div class="dplayer-comment">
-                        <button class="dplayer-icon dplayer-comment-icon">`
-            +               svg('comment')
-            + `         </button>
-                        <div class="dplayer-comment-box">
-                            <button class="dplayer-icon dplayer-comment-setting-icon">`
-            +                   svg('menu')
-            + `             </button>
-                            <div class="dplayer-comment-setting-box">
-                                <div class="dplayer-comment-setting-color">
-                                   <div class="dplayer-comment-setting-title">${tran('Set danmaku color')}</div>
-                                    <label>
-                                        <input type="radio" name="dplayer-danmaku-color-${index}" value="#fff" checked>
-                                        <span style="background: #fff; border: 1px solid rgba(0,0,0,.1);"></span>
-                                    </label>
-                                    <label>
-                                        <input type="radio" name="dplayer-danmaku-color-${index}" value="#e54256">
-                                        <span style="background: #e54256"></span>
-                                    </label>
-                                    <label>
-                                        <input type="radio" name="dplayer-danmaku-color-${index}" value="#ffe133">
-                                        <span style="background: #ffe133"></span>
-                                    </label>
-                                    <label>
-                                        <input type="radio" name="dplayer-danmaku-color-${index}" value="#64DD17">
-                                        <span style="background: #64DD17"></span>
-                                    </label>
-                                    <label>
-                                        <input type="radio" name="dplayer-danmaku-color-${index}" value="#39ccff">
-                                        <span style="background: #39ccff"></span>
-                                    </label>
-                                    <label>
-                                        <input type="radio" name="dplayer-danmaku-color-${index}" value="#D500F9">
-                                        <span style="background: #D500F9"></span>
-                                    </label>
-                                </div>
-                                <div class="dplayer-comment-setting-type">
-                                    <div class="dplayer-comment-setting-title">${tran('Set danmaku type')}</div>
-                                    <label>
-                                        <input type="radio" name="dplayer-danmaku-type-${index}" value="top">
-                                        <span>${tran('Top')}</span>
-                                    </label>
-                                    <label>
-                                        <input type="radio" name="dplayer-danmaku-type-${index}" value="right" checked>
-                                        <span>${tran('Rolling')}</span>
-                                    </label>
-                                    <label>
-                                        <input type="radio" name="dplayer-danmaku-type-${index}" value="bottom">
-                                        <span>${tran('Bottom')}</span>
-                                    </label>
-                                </div>
+                <span class="dplayer-time"><span class="dplayer-ptime">0:00</span> / <span class="dplayer-dtime">0:00</span></span>
+            </div>
+            <div class="dplayer-icons dplayer-icons-right">
+                ${option.screenshot ? `
+                <a href="#" class="dplayer-icon dplayer-camera-icon"}dplayer-volume>
+                    ${svg('camera')}
+                </a>
+                ` : ``}
+                <div class="dplayer-comment">
+                    <button class="dplayer-icon dplayer-comment-icon">
+                        ${svg('comment')}
+                    </button>
+                    <div class="dplayer-comment-box">
+                        <button class="dplayer-icon dplayer-comment-setting-icon">
+                            ${svg('menu')}
+                        </button>
+                        <div class="dplayer-comment-setting-box">
+                            <div class="dplayer-comment-setting-color">
+                                <div class="dplayer-comment-setting-title">${tran('Set danmaku color')}</div>
+                                <label>
+                                    <input type="radio" name="dplayer-danmaku-color-${index}" value="#fff" checked>
+                                    <span style="background: #fff; border: 1px solid rgba(0,0,0,.1);"></span>
+                                </label>
+                                <label>
+                                    <input type="radio" name="dplayer-danmaku-color-${index}" value="#e54256">
+                                    <span style="background: #e54256"></span>
+                                </label>
+                                <label>
+                                    <input type="radio" name="dplayer-danmaku-color-${index}" value="#ffe133">
+                                    <span style="background: #ffe133"></span>
+                                </label>
+                                <label>
+                                    <input type="radio" name="dplayer-danmaku-color-${index}" value="#64DD17">
+                                    <span style="background: #64DD17"></span>
+                                </label>
+                                <label>
+                                    <input type="radio" name="dplayer-danmaku-color-${index}" value="#39ccff">
+                                    <span style="background: #39ccff"></span>
+                                </label>
+                                <label>
+                                    <input type="radio" name="dplayer-danmaku-color-${index}" value="#D500F9">
+                                    <span style="background: #D500F9"></span>
+                                </label>
+                            </div>
+                            <div class="dplayer-comment-setting-type">
+                                <div class="dplayer-comment-setting-title">${tran('Set danmaku type')}</div>
+                                <label>
+                                    <input type="radio" name="dplayer-danmaku-type-${index}" value="top">
+                                    <span>${tran('Top')}</span>
+                                </label>
+                                <label>
+                                    <input type="radio" name="dplayer-danmaku-type-${index}" value="right" checked>
+                                    <span>${tran('Rolling')}</span>
+                                </label>
+                                <label>
+                                    <input type="radio" name="dplayer-danmaku-type-${index}" value="bottom">
+                                    <span>${tran('Bottom')}</span>
+                                </label>
                             </div>
-                            <input class="dplayer-comment-input" type="text" placeholder="${tran('Input danmaku, hit Enter')}" maxlength="30">
-                            <button class="dplayer-icon dplayer-send-icon">`
-            +                   svg('send')
-            + `             </button>
                         </div>
-                    </div>
-                    <div class="dplayer-setting">
-                        <button class="dplayer-icon dplayer-setting-icon">`
-            +               svg('setting')
-            + `         </button>
-                        <div class="dplayer-setting-box"></div>
-                    </div>
-                    <div class="dplayer-full">
-                        <button class="dplayer-icon dplayer-full-in-icon">`
-            +               svg('full-in')
-            + `         </button>
-                        <button class="dplayer-icon dplayer-full-icon">`
-            +               svg('full')
-            + `         </button>
+                        <input class="dplayer-comment-input" type="text" placeholder="${tran('Input danmaku, hit Enter')}" maxlength="30">
+                        <button class="dplayer-icon dplayer-send-icon">
+                            ${svg('send')}
+                        </button>
                     </div>
                 </div>
-                <div class="dplayer-bar-wrap">
-                    <div class="dplayer-bar-time hidden">00:00</div>
-                    <div class="dplayer-bar">
-                        <div class="dplayer-loaded" style="width: 0;"></div>
-                        <div class="dplayer-played" style="width: 0; background: ${option.theme}">
-                            <span class="dplayer-thumb" style="background: ${option.theme}"></span>
-                        </div>
-                    </div>
+                <div class="dplayer-setting">
+                    <button class="dplayer-icon dplayer-setting-icon">
+                        ${svg('setting')}
+                    </button>
+                    <div class="dplayer-setting-box"></div>
+                </div>
+                <div class="dplayer-full">
+                    <button class="dplayer-icon dplayer-full-in-icon">
+                        ${svg('full-in')}
+                    </button>
+                    <button class="dplayer-icon dplayer-full-icon">
+                        ${svg('full')}
+                    </button>
                 </div>
             </div>
-            <div class="dplayer-menu">
-                <div class="dplayer-menu-item"><span class="dplayer-menu-label"><a target="_blank" href="http://diygod.me/">${tran('About author')}</a></span></div>
-                <div class="dplayer-menu-item"><span class="dplayer-menu-label"><a target="_blank" href="https://github.com/DIYgod/DPlayer/issues">${tran('DPlayer feedback')}</a></span></div>
-                <div class="dplayer-menu-item"><span class="dplayer-menu-label"><a target="_blank" href="https://github.com/DIYgod/DPlayer">${tran('About DPlayer')}</a></span></div>
+            <div class="dplayer-bar-wrap">
+                <div class="dplayer-bar-time hidden">00:00</div>
+                <div class="dplayer-bar">
+                    <div class="dplayer-loaded" style="width: 0;"></div>
+                    <div class="dplayer-played" style="width: 0; background: ${option.theme}">
+                        <span class="dplayer-thumb" style="background: ${option.theme}"></span>
+                    </div>
+                </div>
             </div>
-        `;
-    },
+        </div>
+        <div class="dplayer-menu">
+            <div class="dplayer-menu-item"><span class="dplayer-menu-label"><a target="_blank" href="http://diygod.me/">${tran('About author')}</a></span></div>
+            <div class="dplayer-menu-item"><span class="dplayer-menu-label"><a target="_blank" href="https://github.com/DIYgod/DPlayer/issues">${tran('DPlayer feedback')}</a></span></div>
+            <div class="dplayer-menu-item"><span class="dplayer-menu-label"><a target="_blank" href="https://github.com/DIYgod/DPlayer">${tran('About DPlayer')}</a></span></div>
+        </div>
+    `,
 
-    setting: (tran) => {
-        return {
-            'original': `
-                <div class="dplayer-setting-item dplayer-setting-speed">
-                    <span class="dplayer-label">${tran('Speed')}</span>
-                    <div class="dplayer-toggle">`
-            +       svg('right')
-            + ` </div>
+    setting: (tran) => ({
+        'original': `
+            <div class="dplayer-setting-item dplayer-setting-speed">
+                <span class="dplayer-label">${tran('Speed')}</span>
+                <div class="dplayer-toggle">
+                    ${svg('right')}
                 </div>
-                <div class="dplayer-setting-item dplayer-setting-loop">
-                    <span class="dplayer-label">${tran('Loop')}</span>
-                    <div class="dplayer-toggle">
-                        <input class="dplayer-toggle-setting-input" type="checkbox" name="dplayer-toggle">
-                        <label for="dplayer-toggle"></label>
-                    </div>
+            </div>
+            <div class="dplayer-setting-item dplayer-setting-loop">
+                <span class="dplayer-label">${tran('Loop')}</span>
+                <div class="dplayer-toggle">
+                    <input class="dplayer-toggle-setting-input" type="checkbox" name="dplayer-toggle">
+                    <label for="dplayer-toggle"></label>
                 </div>
-                <div class="dplayer-setting-item dplayer-setting-showdan">
-                    <span class="dplayer-label">${tran('Danmaku')}</span>
-                    <div class="dplayer-toggle">
-                        <input class="dplayer-showdan-setting-input" type="checkbox" name="dplayer-toggle-dan">
-                        <label for="dplayer-toggle-dan"></label>
-                    </div>
+            </div>
+            <div class="dplayer-setting-item dplayer-setting-showdan">
+                <span class="dplayer-label">${tran('Danmaku')}</span>
+                <div class="dplayer-toggle">
+                    <input class="dplayer-showdan-setting-input" type="checkbox" name="dplayer-toggle-dan">
+                    <label for="dplayer-toggle-dan"></label>
                 </div>
-                <div class="dplayer-setting-item dplayer-setting-danmaku">
-                    <span class="dplayer-label">${tran('Opacity for danmaku')}</span>
-                    <div class="dplayer-danmaku-bar-wrap">
-                        <div class="dplayer-danmaku-bar">
-                            <div class="dplayer-danmaku-bar-inner" style="width: ${(localStorage.getItem('DPlayer-opacity') || 0.7) * 100}%">
-                                <span class="dplayer-thumb"></span>
-                            </div>
+            </div>
+            <div class="dplayer-setting-item dplayer-setting-danmaku">
+                <span class="dplayer-label">${tran('Opacity for danmaku')}</span>
+                <div class="dplayer-danmaku-bar-wrap">
+                    <div class="dplayer-danmaku-bar">
+                        <div class="dplayer-danmaku-bar-inner" style="width: ${(localStorage.getItem('DPlayer-opacity') || 0.7) * 100}%">
+                            <span class="dplayer-thumb"></span>
                         </div>
                     </div>
-                </div>`,
-            'speed': `
-                <div class="dplayer-setting-speed-item" data-speed="0.5">
-                    <span class="dplayer-label">0.5</span>
-                </div>
-                <div class="dplayer-setting-speed-item" data-speed="0.75">
-                    <span class="dplayer-label">0.75</span>
                 </div>
-                <div class="dplayer-setting-speed-item" data-speed="1">
-                    <span class="dplayer-label">${tran('Normal')}</span>
-                </div>
-                <div class="dplayer-setting-speed-item" data-speed="1.25">
-                    <span class="dplayer-label">1.25</span>
-                </div>
-                <div class="dplayer-setting-speed-item" data-speed="1.5">
-                    <span class="dplayer-label">1.5</span>
-                </div>
-                <div class="dplayer-setting-speed-item" data-speed="2">
-                    <span class="dplayer-label">2</span>
-                </div>`
-        }
-    }
-}
+            </div>`,
+        'speed': `
+            <div class="dplayer-setting-speed-item" data-speed="0.5">
+                <span class="dplayer-label">0.5</span>
+            </div>
+            <div class="dplayer-setting-speed-item" data-speed="0.75">
+                <span class="dplayer-label">0.75</span>
+            </div>
+            <div class="dplayer-setting-speed-item" data-speed="1">
+                <span class="dplayer-label">${tran('Normal')}</span>
+            </div>
+            <div class="dplayer-setting-speed-item" data-speed="1.25">
+                <span class="dplayer-label">1.25</span>
+            </div>
+            <div class="dplayer-setting-speed-item" data-speed="1.5">
+                <span class="dplayer-label">1.5</span>
+            </div>
+            <div class="dplayer-setting-speed-item" data-speed="2">
+                <span class="dplayer-label">2</span>
+            </div>`
+    }) 
+};

+ 1 - 1
src/i18n.js

@@ -26,5 +26,5 @@ module.exports = function (lang) {
         else if (this.lang === 'zh') {
             return tranZH[text];
         }
-    }
+    };
 };

+ 1 - 1
src/option.js

@@ -19,7 +19,7 @@ module.exports = (option) => {
         preload: 'auto',
         apiBackend: defaultApiBackend
     };
-    for (let defaultKey in defaultOption) {
+    for (const defaultKey in defaultOption) {
         if (defaultOption.hasOwnProperty(defaultKey) && !option.hasOwnProperty(defaultKey)) {
             option[defaultKey] = defaultOption[defaultKey];
         }

+ 6 - 8
src/svg.js

@@ -20,11 +20,9 @@ const svgSource = {
     'camera': ['0 0 32 32', 'M16 23c-3.309 0-6-2.691-6-6s2.691-6 6-6 6 2.691 6 6-2.691 6-6 6zM16 13c-2.206 0-4 1.794-4 4s1.794 4 4 4c2.206 0 4-1.794 4-4s-1.794-4-4-4zM27 28h-22c-1.654 0-3-1.346-3-3v-16c0-1.654 1.346-3 3-3h3c0.552 0 1 0.448 1 1s-0.448 1-1 1h-3c-0.551 0-1 0.449-1 1v16c0 0.552 0.449 1 1 1h22c0.552 0 1-0.448 1-1v-16c0-0.551-0.448-1-1-1h-11c-0.552 0-1-0.448-1-1s0.448-1 1-1h11c1.654 0 3 1.346 3 3v16c0 1.654-1.346 3-3 3zM24 10.5c0 0.828 0.672 1.5 1.5 1.5s1.5-0.672 1.5-1.5c0-0.828-0.672-1.5-1.5-1.5s-1.5 0.672-1.5 1.5zM15 4c0 0.552-0.448 1-1 1h-4c-0.552 0-1-0.448-1-1v0c0-0.552 0.448-1 1-1h4c0.552 0 1 0.448 1 1v0z']
 };
 
-module.exports = (type) => {
-    return `
-        <svg xmlns:xlink="http://www.w3.org/1999/xlink" height="100%" version="1.1" viewBox="${svgSource[type][0]}" width="100%">
-            <use xlink:href="#dplayer-${type}"></use>
-            <path class="dplayer-fill" d="${svgSource[type][1]}" id="dplayer-${type}"></path>
-        </svg>
-    `;
-};
+module.exports = (type) => `
+    <svg xmlns:xlink="http://www.w3.org/1999/xlink" height="100%" version="1.1" viewBox="${svgSource[type][0]}" width="100%">
+        <use xlink:href="#dplayer-${type}"></use>
+        <path class="dplayer-fill" d="${svgSource[type][1]}" id="dplayer-${type}"></path>
+    </svg>
+`;

+ 9 - 0
webpack.config.js

@@ -51,6 +51,15 @@ module.exports = {
 
     module: {
         rules: [
+            {
+                enforce: 'pre',
+                test: /\.js$/,
+                loader: 'eslint-loader',
+                include: APP_PATH,
+                options: {
+                    configFile: './.eslintrc'
+                },
+            },
             {
                 test: /\.js$/,
                 loader: 'babel-loader',

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 444 - 127
yarn.lock


Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio