Merge pull request #570 from ciderapp/develop
[Backport] Develop -> E18
This commit is contained in:
commit
ed5149399e
15 changed files with 604 additions and 539 deletions
|
@ -23,9 +23,6 @@ jobs:
|
||||||
key: yarn-packages-{{ checksum "cider-yarn.lock" }}
|
key: yarn-packages-{{ checksum "cider-yarn.lock" }}
|
||||||
paths:
|
paths:
|
||||||
- ~/.cache/yarn
|
- ~/.cache/yarn
|
||||||
- run:
|
|
||||||
name: Install Playwright
|
|
||||||
command: yarn playwright install --with-deps
|
|
||||||
- run:
|
- run:
|
||||||
name: Install system build dependencies
|
name: Install system build dependencies
|
||||||
command: |
|
command: |
|
||||||
|
|
|
@ -11,5 +11,10 @@
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatialisation",
|
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatialisation",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialise audio and make audio more 3-dimensional (note: This is not Dolby Atmos)",
|
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialise audio and make audio more 3-dimensional (note: This is not Dolby Atmos)",
|
||||||
"spatial.notTurnedOn": "Audio Spatialisation is disabled. To use, please enable it first.",
|
"spatial.notTurnedOn": "Audio Spatialisation is disabled. To use, please enable it first.",
|
||||||
"action.tray.minimize": "Minimise to Tray"
|
"action.tray.minimize": "Minimise to Tray",
|
||||||
|
"term.tracks": "songs",
|
||||||
|
"term.track": {
|
||||||
|
"one" : "song",
|
||||||
|
"other" : "songs"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,13 +92,25 @@
|
||||||
"term.time.released": "Released",
|
"term.time.released": "Released",
|
||||||
"term.time.updated": "Updated",
|
"term.time.updated": "Updated",
|
||||||
"term.time.days": "days",
|
"term.time.days": "days",
|
||||||
"term.time.day": "day",
|
"term.time.day": {
|
||||||
|
"one": "day",
|
||||||
|
"other": "days"
|
||||||
|
},
|
||||||
"term.time.hours": "hours",
|
"term.time.hours": "hours",
|
||||||
"term.time.hour": "hour",
|
"term.time.hour": {
|
||||||
|
"one": "hour",
|
||||||
|
"other": "hours"
|
||||||
|
},
|
||||||
"term.time.minutes": "minutes",
|
"term.time.minutes": "minutes",
|
||||||
"term.time.minute": "minute",
|
"term.time.minute": {
|
||||||
|
"one": "minute",
|
||||||
|
"other": "minutes"
|
||||||
|
},
|
||||||
"term.time.seconds": "seconds",
|
"term.time.seconds": "seconds",
|
||||||
"term.time.second": "second",
|
"term.time.second": {
|
||||||
|
"one": "second",
|
||||||
|
"other": "seconds"
|
||||||
|
},
|
||||||
"term.fullscreenView": "Fullscreen View",
|
"term.fullscreenView": "Fullscreen View",
|
||||||
"term.defaultView": "Default View",
|
"term.defaultView": "Default View",
|
||||||
"term.audioSettings": "Audio Settings",
|
"term.audioSettings": "Audio Settings",
|
||||||
|
|
|
@ -92,13 +92,25 @@
|
||||||
"term.time.released": "Released",
|
"term.time.released": "Released",
|
||||||
"term.time.updated": "Updated",
|
"term.time.updated": "Updated",
|
||||||
"term.time.days": "days",
|
"term.time.days": "days",
|
||||||
"term.time.day": "day",
|
"term.time.day": {
|
||||||
|
"one": "day",
|
||||||
|
"other": "days"
|
||||||
|
},
|
||||||
"term.time.hours": "hours",
|
"term.time.hours": "hours",
|
||||||
"term.time.hour": "hour",
|
"term.time.hour": {
|
||||||
|
"one": "hour",
|
||||||
|
"other": "hours"
|
||||||
|
},
|
||||||
"term.time.minutes": "minutes",
|
"term.time.minutes": "minutes",
|
||||||
"term.time.minute": "minute",
|
"term.time.minute": {
|
||||||
|
"one": "minute",
|
||||||
|
"other": "minutes"
|
||||||
|
},
|
||||||
"term.time.seconds": "seconds",
|
"term.time.seconds": "seconds",
|
||||||
"term.time.second": "second",
|
"term.time.second": {
|
||||||
|
"one": "second",
|
||||||
|
"other": "seconds"
|
||||||
|
},
|
||||||
"term.fullscreenView": "Fullscreen View",
|
"term.fullscreenView": "Fullscreen View",
|
||||||
"term.defaultView": "Default View",
|
"term.defaultView": "Default View",
|
||||||
"term.audioSettings": "Audio Settings",
|
"term.audioSettings": "Audio Settings",
|
||||||
|
|
|
@ -218,6 +218,14 @@
|
||||||
"settings.option.audio.seamlessTransition": "無間斷播放",
|
"settings.option.audio.seamlessTransition": "無間斷播放",
|
||||||
"settings.option.audio.enableAdvancedFunctionality": "進階音訊功能",
|
"settings.option.audio.enableAdvancedFunctionality": "進階音訊功能",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.description": "啟用 AudioContext 將開啟類似音訊平衡和等化器的進階設定。但這並不一定適合每部電腦,可能會發生音樂卡頓。",
|
"settings.option.audio.enableAdvancedFunctionality.description": "啟用 AudioContext 將開啟類似音訊平衡和等化器的進階設定。但這並不一定適合每部電腦,可能會發生音樂卡頓。",
|
||||||
|
"settings.option.audio.audioLab": "Cider 音訊實驗室",
|
||||||
|
"settings.option.audio.audioLab.description": "包含由 Cider 開發團隊進行的各種音訊改善功能。",
|
||||||
|
"settings.warn.audioLab.withoutAF": "使用 Cider 音訊實驗室需要開啟進階音訊功能才能使用。" ,
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmth": "模擬溫暖",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "以 Korg Nutube 6P1 為設計的模擬溫暖",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "改變模擬溫暖模組處理的強度。",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "溫和",
|
||||||
|
"settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "溫暖",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 數位增強音訊處理™️",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 數位增強音訊處理™️",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "將欺騙您的大腦讓您感受到近似保真壓縮的音質。| 由 Maikiwi 設計",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "將欺騙您的大腦讓您感受到近似保真壓縮的音質。| 由 Maikiwi 設計",
|
||||||
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "數位增強音訊處理設定",
|
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "數位增強音訊處理設定",
|
||||||
|
@ -251,13 +259,19 @@
|
||||||
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
|
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
|
||||||
"settings.header.visual.theme": "主題",
|
"settings.header.visual.theme": "主題",
|
||||||
"settings.option.visual.theme.github.download": "從 GitHub 網址安裝",
|
"settings.option.visual.theme.github.download": "從 GitHub 網址安裝",
|
||||||
"settings.option.visual.theme.github.explore": "瀏覽 GitHub 上的主題",
|
"settings.option.visual.theme.github.explore": "探索 GitHub 上的主題",
|
||||||
|
"settings.option.visual.plugin.github.explore": "探索 GitHub 插件",
|
||||||
|
"settings.header.visual.plugin.github.page": "來自 GitHub 的插件",
|
||||||
"settings.prompt.visual.theme.github.URL": "輸入你要安裝的主題網址",
|
"settings.prompt.visual.theme.github.URL": "輸入你要安裝的主題網址",
|
||||||
"settings.notyf.visual.theme.install.success": "主題成功安裝",
|
"settings.notyf.visual.theme.install.success": "主題成功安裝",
|
||||||
"settings.notyf.visual.theme.install.error": "主題安裝失敗",
|
"settings.notyf.visual.theme.install.error": "主題安裝失敗",
|
||||||
"settings.option.visual.theme.default": "Cider",
|
"settings.option.visual.theme.default": "預設",
|
||||||
"settings.option.visual.theme.dark": "暗黑模式",
|
"settings.option.visual.theme.dark": "午夜黑",
|
||||||
"settings.option.visual.showPersonalInfo": "顯示個人檔案",
|
"settings.option.visual.showPersonalInfo": "顯示個人檔案",
|
||||||
|
"settings.header.window": "視窗",
|
||||||
|
"settings.header.window.description": "調整 Cider 的視窗設定",
|
||||||
|
"settings.option.window.openOnStartup": "開機時,啟動 Cider ",
|
||||||
|
"settings.option.window.openOnStartup.hidden": "啟動時,自動隱藏至系統列",
|
||||||
"settings.header.lyrics": "歌詞",
|
"settings.header.lyrics": "歌詞",
|
||||||
"settings.header.lyrics.description": "調整 Cider 的歌詞設定",
|
"settings.header.lyrics.description": "調整 Cider 的歌詞設定",
|
||||||
"settings.option.lyrics.enableMusixmatch": "啟用 Musixmatch 歌詞",
|
"settings.option.lyrics.enableMusixmatch": "啟用 Musixmatch 歌詞",
|
||||||
|
@ -285,7 +299,11 @@
|
||||||
"settings.option.experimental.closeButtonBehaviour": "關閉按鈕操作",
|
"settings.option.experimental.closeButtonBehaviour": "關閉按鈕操作",
|
||||||
"settings.option.window.close_button_hide": "關閉按鈕將 Cider 隱藏至系統列",
|
"settings.option.window.close_button_hide": "關閉按鈕將 Cider 隱藏至系統列",
|
||||||
"settings.option.experimental.inline_playlists": "將播放列表做為行内元素顯示",
|
"settings.option.experimental.inline_playlists": "將播放列表做為行内元素顯示",
|
||||||
"spatial.notTurnedOn": "空間音訊目前是關閉狀態,請先啟用再使用。",
|
"settings.option.advanced.playlistTrackMapping": "播放列表追蹤映射",
|
||||||
|
"settings.option.advanced.playlistTrackMapping.description": "開啟對播放列表的深度掃描,以確定歌曲在哪些播放列表中。但播放列表快取時間會顯著增加。",
|
||||||
|
"settings.option.visual.transparent": "透明視窗框架",
|
||||||
|
"settings.option.visual.transparent.description": "透明視窗框架(需要主題支援,且須重新啟動)。",
|
||||||
|
"spatial.notTurnedOn": "空間音訊目前是關閉狀態,請先開啟再使用。",
|
||||||
"spatial.spatialProperties": "空間音訊屬性設定",
|
"spatial.spatialProperties": "空間音訊屬性設定",
|
||||||
"spatial.width": "寬度",
|
"spatial.width": "寬度",
|
||||||
"spatial.height": "高度",
|
"spatial.height": "高度",
|
||||||
|
|
|
@ -894,11 +894,7 @@ export class BrowserWindow {
|
||||||
})
|
})
|
||||||
|
|
||||||
app.on('before-quit', () => {
|
app.on('before-quit', () => {
|
||||||
BrowserWindow.win.webContents.executeJavaScript(`
|
|
||||||
window.localStorage.setItem("currentTrack", JSON.stringify(app.mk.nowPlayingItem));
|
|
||||||
window.localStorage.setItem("currentTime", JSON.stringify(app.mk.currentPlaybackTime));
|
|
||||||
window.localStorage.setItem("currentQueue", JSON.stringify(app.mk.queue.items));
|
|
||||||
ipcRenderer.send('stopGCast','');`)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
@ -1135,6 +1131,11 @@ export class BrowserWindow {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
BrowserWindow.win.hide();
|
BrowserWindow.win.hide();
|
||||||
} else {
|
} else {
|
||||||
|
BrowserWindow.win.webContents.executeJavaScript(`
|
||||||
|
window.localStorage.setItem("currentTrack", JSON.stringify(app.mk.nowPlayingItem));
|
||||||
|
window.localStorage.setItem("currentTime", JSON.stringify(app.mk.currentPlaybackTime));
|
||||||
|
window.localStorage.setItem("currentQueue", JSON.stringify(app.mk.queue.items));
|
||||||
|
ipcRenderer.send('stopGCast','');`)
|
||||||
BrowserWindow.win.destroy();
|
BrowserWindow.win.destroy();
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -164,7 +164,7 @@ export default class DiscordRichPresence {
|
||||||
this._activity = {
|
this._activity = {
|
||||||
details: attributes.name,
|
details: attributes.name,
|
||||||
state: `${attributes.artistName ? `by ${attributes.artistName}` : ''}`,
|
state: `${attributes.artistName ? `by ${attributes.artistName}` : ''}`,
|
||||||
startTimestamp: attributes.startTime,
|
startTimestamp: Date.now() - (attributes?.durationInMillis - attributes?.remainingTime),
|
||||||
endTimestamp: attributes.endTime,
|
endTimestamp: attributes.endTime,
|
||||||
largeImageKey: attributes?.artwork?.url?.replace('{w}', '1024').replace('{h}', '1024'),
|
largeImageKey: attributes?.artwork?.url?.replace('{w}', '1024').replace('{h}', '1024'),
|
||||||
largeImageText: attributes.albumName,
|
largeImageText: attributes.albumName,
|
||||||
|
|
|
@ -72,21 +72,21 @@ const CiderAudio = {
|
||||||
CiderAudio.audioNodes.spatialNode.normalize = true;
|
CiderAudio.audioNodes.spatialNode.normalize = true;
|
||||||
switch (app.cfg.audio.maikiwiAudio.spatialType) {
|
switch (app.cfg.audio.maikiwiAudio.spatialType) {
|
||||||
case 0:
|
case 0:
|
||||||
fetch('./audio/impulses/CiderSpatial_Conv.wav').then(async (impulseData) => {
|
fetch('./audio/impulses/CiderSpatial_v69_Standard.wav').then(async (impulseData) => {
|
||||||
let bufferedImpulse = await impulseData.arrayBuffer();
|
let bufferedImpulse = await impulseData.arrayBuffer();
|
||||||
CiderAudio.audioNodes.spatialNode.buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse);
|
CiderAudio.audioNodes.spatialNode.buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse);
|
||||||
|
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
fetch('./audio/impulses/CiderSpatial_Conv_v2.wav').then(async (impulseData) => {
|
fetch('./audio/impulses/CiderSpatial_v69_Audiophile.wav').then(async (impulseData) => {
|
||||||
let bufferedImpulse = await impulseData.arrayBuffer();
|
let bufferedImpulse = await impulseData.arrayBuffer();
|
||||||
CiderAudio.audioNodes.spatialNode.buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse);
|
CiderAudio.audioNodes.spatialNode.buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse);
|
||||||
|
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
fetch('./audio/impulses/CiderSpatial_Conv.wav').then(async (impulseData) => {
|
fetch('./audio/impulses/CiderSpatial_v69_Standard.wav').then(async (impulseData) => {
|
||||||
let bufferedImpulse = await impulseData.arrayBuffer();
|
let bufferedImpulse = await impulseData.arrayBuffer();
|
||||||
CiderAudio.audioNodes.spatialNode.buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse);
|
CiderAudio.audioNodes.spatialNode.buffer = await CiderAudio.context.decodeAudioData(bufferedImpulse);
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
BIN
src/renderer/audio/impulses/CiderSpatial_v69_Audiophile.wav
Normal file
BIN
src/renderer/audio/impulses/CiderSpatial_v69_Audiophile.wav
Normal file
Binary file not shown.
BIN
src/renderer/audio/impulses/CiderSpatial_v69_Standard.wav
Normal file
BIN
src/renderer/audio/impulses/CiderSpatial_v69_Standard.wav
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load diff
|
@ -297,6 +297,10 @@ const app = new Vue({
|
||||||
}
|
}
|
||||||
this.lz = ipcRenderer.sendSync("get-i18n", lang)
|
this.lz = ipcRenderer.sendSync("get-i18n", lang)
|
||||||
this.mklang = await this.MKJSLang()
|
this.mklang = await this.MKJSLang()
|
||||||
|
try{
|
||||||
|
this.listennow.timestamp = 0;
|
||||||
|
this.browsepage.timestamp = 0;
|
||||||
|
}catch(e){}
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Grabs translation for localization.
|
* Grabs translation for localization.
|
||||||
|
@ -1400,72 +1404,58 @@ const app = new Vue({
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
* Converts seconds to dd:hh:mm:ss
|
* Converts seconds to dd:hh:mm:ss / Days:Hours:Minutes:Seconds
|
||||||
* @param {number} time (in seconds)
|
* @param {number} seconds
|
||||||
* @param {string} format (short, long)
|
* @param {string} format (short, long)
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
* @author Core#1034
|
* @author Core#1034
|
||||||
* @memberOf app
|
* @memberOf app
|
||||||
*/
|
*/
|
||||||
convertTime(time = 0, format = 'short') {
|
convertTime(seconds, format = "short") {
|
||||||
|
|
||||||
if (isNaN(time)) {
|
if (isNaN(seconds)) {
|
||||||
time = 0
|
seconds = 0
|
||||||
}
|
}
|
||||||
if (typeof time !== "number") {
|
seconds = parseInt(seconds);
|
||||||
time = parseInt(time)
|
|
||||||
|
const datetime = new Date(seconds * 1000)
|
||||||
|
|
||||||
|
if (format === "long") {
|
||||||
|
const d = Math.floor(seconds / (3600*24));
|
||||||
|
const h = Math.floor(seconds % (3600*24) / 3600);
|
||||||
|
const m = Math.floor(seconds % 3600 / 60);
|
||||||
|
const s = Math.floor(seconds % 60);
|
||||||
|
|
||||||
|
const dDisplay = d > 0 ? `${d} ${app.getLz("term.time.day", {"count": d})}, ` : "";
|
||||||
|
const hDisplay = h > 0 ? `${h} ${app.getLz("term.time.hour", {"count": h})}, ` : "";
|
||||||
|
const mDisplay = m > 0 ? `${m} ${app.getLz("term.time.minute", {"count": m})}, ` : "";
|
||||||
|
const sDisplay = s > 0 ? `${s} ${app.getLz("term.time.second", {"count": s})}` : "";
|
||||||
|
|
||||||
|
return dDisplay + hDisplay + mDisplay + sDisplay;
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
let returnTime = datetime.toISOString().substring(11, 19);
|
||||||
|
|
||||||
const timeGates = {
|
const timeGates = {
|
||||||
600: 15, // 10 Minutes
|
600: 15, // 10 Minutes
|
||||||
3600: 14, // Hour
|
3600: 14, // Hour
|
||||||
36000: 12, // 10 Hours
|
36000: 12, // 10 Hours
|
||||||
}
|
|
||||||
|
|
||||||
const datetime = new Date(time * 1000)
|
|
||||||
|
|
||||||
let returnTime = datetime.toISOString().substring(11, 19);
|
|
||||||
for (let key in timeGates) {
|
|
||||||
if (time < key) {
|
|
||||||
returnTime = datetime.toISOString().substring(timeGates[key], 19)
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add the days on the front
|
|
||||||
let day;
|
|
||||||
if (time >= 86400) {
|
|
||||||
day = datetime.toISOString().substring(8, 10)
|
|
||||||
day = parseInt(day) - 1
|
|
||||||
returnTime = day + ":" + returnTime
|
|
||||||
}
|
|
||||||
|
|
||||||
if (format === 'long') {
|
|
||||||
const longFormat = []
|
|
||||||
|
|
||||||
// Seconds
|
|
||||||
if (datetime.getSeconds() !== 0) {
|
|
||||||
longFormat.push(`${datetime.getSeconds()} ${app.getLz('term.time.seconds')}`)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Minutes
|
for (let key in timeGates) {
|
||||||
if (time >= 60) {
|
if (seconds < key) {
|
||||||
longFormat.push(`${datetime.getMinutes()} ${app.getLz(`term.time.${datetime.getMinutes() === 1 ? 'minute' : 'minutes'}`)}`)
|
returnTime = datetime.toISOString().substring(timeGates[key], 19)
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hours
|
// Add the days on the front
|
||||||
if (time >= 3600) {
|
if (seconds >= 86400) {
|
||||||
longFormat.push(`${datetime.getHours()} ${app.getLz(`term.time.${datetime.getHours() === 1 ? 'hour' : 'hours'}`)}`)
|
returnTime = parseInt(datetime.toISOString().substring(8, 10)) - 1 + ":" + returnTime
|
||||||
}
|
}
|
||||||
|
|
||||||
// Days
|
return returnTime
|
||||||
if (time >= 86400) {
|
|
||||||
longFormat.push(`${day} ${app.getLz(`term.time.${day === 1 ? 'day' : 'days'}`)}`)
|
|
||||||
}
|
|
||||||
returnTime = longFormat.reverse().join(', ')
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return returnTime
|
|
||||||
},
|
},
|
||||||
hashCode(str) {
|
hashCode(str) {
|
||||||
let hash = 0,
|
let hash = 0,
|
||||||
|
@ -1862,10 +1852,10 @@ const app = new Vue({
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove any non-alphanumeric characters and spaces from search term and item name
|
// remove any non-alphanumeric characters and spaces from search term and item name
|
||||||
searchTerm = searchTerm.replace(/[^a-z0-9 ]/gi, "")
|
searchTerm = searchTerm.replace(/[^\p{L}\p{N} ]/gu, "")
|
||||||
itemName = itemName.replace(/[^a-z0-9 ]/gi, "")
|
itemName = itemName.replace(/[^\p{L}\p{N} ]/gu, "")
|
||||||
artistName = artistName.replace(/[^a-z0-9 ]/gi, "")
|
artistName = artistName.replace(/[^\p{L}\p{N} ]/gu, "")
|
||||||
albumName = albumName.replace(/[^a-z0-9 ]/gi, "")
|
albumName = albumName.replace(/[^\p{L}\p{N} ]/gu, "")
|
||||||
|
|
||||||
if (itemName.includes(searchTerm) || artistName.includes(searchTerm) || albumName.includes(searchTerm)) {
|
if (itemName.includes(searchTerm) || artistName.includes(searchTerm) || albumName.includes(searchTerm)) {
|
||||||
return item
|
return item
|
||||||
|
@ -1931,10 +1921,10 @@ const app = new Vue({
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove any non-alphanumeric characters and spaces from search term and item name
|
// remove any non-alphanumeric characters and spaces from search term and item name
|
||||||
searchTerm = searchTerm.replace(/[^a-z0-9 ]/gi, "")
|
searchTerm = searchTerm.replace(/[^\p{L}\p{N} ]/gu, "")
|
||||||
itemName = itemName.replace(/[^a-z0-9 ]/gi, "")
|
itemName = itemName.replace(/[^\p{L}\p{N} ]/gu, "")
|
||||||
artistName = artistName.replace(/[^a-z0-9 ]/gi, "")
|
artistName = artistName.replace(/[^\p{L}\p{N} ]/gu, "")
|
||||||
albumName = albumName.replace(/[^a-z0-9 ]/gi, "")
|
albumName = albumName.replace(/[^\p{L}\p{N} ]/gu, "")
|
||||||
|
|
||||||
if (itemName.includes(searchTerm) || artistName.includes(searchTerm) || albumName.includes(searchTerm)) {
|
if (itemName.includes(searchTerm) || artistName.includes(searchTerm) || albumName.includes(searchTerm)) {
|
||||||
return item
|
return item
|
||||||
|
@ -1996,8 +1986,8 @@ const app = new Vue({
|
||||||
// }
|
// }
|
||||||
|
|
||||||
// remove any non-alphanumeric characters and spaces from search term and item name
|
// remove any non-alphanumeric characters and spaces from search term and item name
|
||||||
searchTerm = searchTerm.replace(/[^a-z0-9 ]/gi, "")
|
searchTerm = searchTerm.replace(/[^\p{L}\p{N} ]/gu, "")
|
||||||
itemName = itemName.replace(/[^a-z0-9 ]/gi, "")
|
itemName = itemName.replace(/[^\p{L}\p{N} ]/gu, "")
|
||||||
|
|
||||||
|
|
||||||
if (itemName.includes(searchTerm) || artistName.includes(searchTerm) || albumName.includes(searchTerm)) {
|
if (itemName.includes(searchTerm) || artistName.includes(searchTerm) || albumName.includes(searchTerm)) {
|
||||||
|
@ -4021,4 +4011,4 @@ const app = new Vue({
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
export { app }
|
export { app }
|
||||||
|
|
|
@ -56,8 +56,8 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="artist-body">
|
<div class="artist-body">
|
||||||
<div class="row well">
|
<div class="arow well" :class="{arowb: data.views['latest-release'].data.length == 0}">
|
||||||
<div class="col-sm-3" v-if="data.views['latest-release'].data.length != 0">
|
<div class="latestRelease" v-if="data.views['latest-release'].data.length != 0">
|
||||||
<h3>{{app.getLz('term.latestReleases')}}</h3>
|
<h3>{{app.getLz('term.latestReleases')}}</h3>
|
||||||
<div style="width: auto;margin: 0 auto;">
|
<div style="width: auto;margin: 0 auto;">
|
||||||
<mediaitem-square kind="card" v-for="song in data.views['latest-release'].data"
|
<mediaitem-square kind="card" v-for="song in data.views['latest-release'].data"
|
||||||
|
@ -65,7 +65,7 @@
|
||||||
</mediaitem-square>
|
</mediaitem-square>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="col-sm-12" v-if="data.views['top-songs']">
|
<div class="topSongs" v-if="data.views['top-songs']">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="col" style="padding:0;">
|
<div class="col" style="padding:0;">
|
||||||
<h3>{{app.getLz('term.topSongs')}}</h3>
|
<h3>{{app.getLz('term.topSongs')}}</h3>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue