forked from mrlan/EnglishPal
84 lines
4.3 KiB
JavaScript
84 lines
4.3 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
function _objectSpread(a) {
|
||
|
for (var b = 1; b < arguments.length; b++) {
|
||
|
var c = null == arguments[b] ? {} : arguments[b], d = Object.keys(c);
|
||
|
"function" == typeof Object.getOwnPropertySymbols && (d = d.concat(Object.getOwnPropertySymbols(c).filter(function (a) {
|
||
|
return Object.getOwnPropertyDescriptor(c, a).enumerable
|
||
|
}))), d.forEach(function (b) {
|
||
|
_defineProperty(a, b, c[b])
|
||
|
})
|
||
|
}
|
||
|
return a
|
||
|
}
|
||
|
|
||
|
function _defineProperty(a, b, c) {
|
||
|
return b in a ? Object.defineProperty(a, b, {
|
||
|
value: c,
|
||
|
enumerable: !0,
|
||
|
configurable: !0,
|
||
|
writable: !0
|
||
|
}) : a[b] = c, a
|
||
|
}
|
||
|
|
||
|
class MetingJSElement extends HTMLElement {
|
||
|
connectedCallback() {
|
||
|
window.APlayer && window.fetch && (this._init(), this._parse())
|
||
|
}
|
||
|
|
||
|
disconnectedCallback() {
|
||
|
this.lock || this.aplayer.destroy()
|
||
|
}
|
||
|
|
||
|
_camelize(a) {
|
||
|
return a.replace(/^[_.\- ]+/, "").toLowerCase().replace(/[_.\- ]+(\w|$)/g, (a, b) => b.toUpperCase())
|
||
|
}
|
||
|
|
||
|
_init() {
|
||
|
let a = {};
|
||
|
for (let b = 0; b < this.attributes.length; b += 1) a[this._camelize(this.attributes[b].name)] = this.attributes[b].value;
|
||
|
let b = ["server", "type", "id", "api", "auth", "auto", "lock", "name", "title", "artist", "author", "url", "cover", "pic", "lyric", "lrc"];
|
||
|
this.meta = {};
|
||
|
for (var c = 0; c < b.length; c++) {
|
||
|
let d = b[c];
|
||
|
this.meta[d] = a[d], delete a[d]
|
||
|
}
|
||
|
this.config = a, this.api = this.meta.api || window.meting_api || "https://api.i-meto.com/meting/api?server=:server&type=:type&id=:id&r=:r", this.meta.auto && this._parse_link()
|
||
|
}
|
||
|
|
||
|
_parse_link() {
|
||
|
let a = [["music.163.com.*song.*id=(\\d+)", "netease", "song"], ["music.163.com.*album.*id=(\\d+)", "netease", "album"], ["music.163.com.*artist.*id=(\\d+)", "netease", "artist"], ["music.163.com.*playlist.*id=(\\d+)", "netease", "playlist"], ["music.163.com.*discover/toplist.*id=(\\d+)", "netease", "playlist"], ["y.qq.com.*song/(\\w+).html", "tencent", "song"], ["y.qq.com.*album/(\\w+).html", "tencent", "album"], ["y.qq.com.*singer/(\\w+).html", "tencent", "artist"], ["y.qq.com.*playsquare/(\\w+).html", "tencent", "playlist"], ["y.qq.com.*playlist/(\\w+).html", "tencent", "playlist"], ["xiami.com.*song/(\\w+)", "xiami", "song"], ["xiami.com.*album/(\\w+)", "xiami", "album"], ["xiami.com.*artist/(\\w+)", "xiami", "artist"], ["xiami.com.*collect/(\\w+)", "xiami", "playlist"]];
|
||
|
for (var b = 0; b < a.length; b++) {
|
||
|
let c = a[b], d = new RegExp(c[0]), e = d.exec(this.meta.auto);
|
||
|
if (null !== e) return this.meta.server = c[1], this.meta.type = c[2], void (this.meta.id = e[1])
|
||
|
}
|
||
|
}
|
||
|
|
||
|
_parse() {
|
||
|
if (this.meta.url) {
|
||
|
let a = {
|
||
|
name: this.meta.name || this.meta.title || "Audio name",
|
||
|
artist: this.meta.artist || this.meta.author || "Audio artist",
|
||
|
url: this.meta.url,
|
||
|
cover: this.meta.cover || this.meta.pic,
|
||
|
lrc: this.meta.lrc || this.meta.lyric || "",
|
||
|
type: this.meta.type || "auto"
|
||
|
};
|
||
|
return a.lrc || (this.meta.lrcType = 0), this.innerText && (a.lrc = this.innerText, this.meta.lrcType = 2), void this._loadPlayer([a])
|
||
|
}
|
||
|
let a = this.api.replace(":server", this.meta.server).replace(":type", this.meta.type).replace(":id", this.meta.id).replace(":auth", this.meta.auth).replace(":r", Math.random());
|
||
|
fetch(a).then(a => a.json()).then(a => this._loadPlayer(a))
|
||
|
}
|
||
|
|
||
|
_loadPlayer(a) {
|
||
|
let b = {audio: a, mutex: !0, lrcType: this.meta.lrcType || 3, storageName: "metingjs"};
|
||
|
if (a.length) {
|
||
|
let a = _objectSpread({}, b, this.config);
|
||
|
for (let b in a) ("true" === a[b] || "false" === a[b]) && (a[b] = "true" === a[b]);
|
||
|
let c = document.createElement("div");
|
||
|
a.container = c, this.appendChild(c), this.aplayer = new APlayer(a)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
console.log("\n %c MetingJS v2.0.1 %c https://github.com/metowolf/MetingJS \n", "color: #fadfa3; background: #030307; padding:5px 0;", "background: #fadfa3; padding:5px 0;"), window.customElements && !window.customElements.get("meting-js") && (window.MetingJSElement = MetingJSElement, window.customElements.define("meting-js", MetingJSElement));
|