diff --git a/package.json b/package.json index 97a6a26015..94d06ae186 100644 --- a/package.json +++ b/package.json @@ -92,6 +92,8 @@ "test": [ "src/components/accessSchedule/accessSchedule.js", "src/components/actionSheet/actionSheet.js", + "src/components/activitylog.js", + "src/components/alert.js", "src/components/alphaPicker/alphaPicker.js", "src/components/appFooter/appFooter.js", "src/components/autoFocuser.js", @@ -205,6 +207,7 @@ "src/plugins/bookPlayer/plugin.js", "src/plugins/bookPlayer/tableOfContents.js", "src/plugins/photoPlayer/plugin.js", + "src/scripts/datetime.js", "src/scripts/deleteHelper.js", "src/scripts/dfnshelper.js", "src/scripts/dom.js", diff --git a/src/components/activitylog.js b/src/components/activitylog.js index bbb0995063..2d5a21756f 100644 --- a/src/components/activitylog.js +++ b/src/components/activitylog.js @@ -1,11 +1,21 @@ -define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings', 'serverNotifications', 'connectionManager', 'emby-button', 'listViewStyle'], function (events, globalize, dom, datefns, dfnshelper, userSettings, serverNotifications, connectionManager) { - 'use strict'; +import events from 'events'; +import globalize from 'globalize'; +import dom from 'dom'; +import * as datefns from 'date-fns'; +import dfnshelper from 'dfnshelper'; +import userSettings from 'userSettings'; +import serverNotifications from 'serverNotifications'; +import connectionManager from 'connectionManager'; +import 'emby-button'; +import 'listViewStyle'; + +/* eslint-disable indent */ function getEntryHtml(entry, apiClient) { - var html = ''; + let html = ''; html += '
'; - var color = '#00a4dc'; - var icon = 'notifications'; + let color = '#00a4dc'; + let icon = 'notifications'; if ('Error' == entry.Severity || 'Fatal' == entry.Severity || 'Warn' == entry.Severity) { color = '#cc0000'; @@ -56,8 +66,8 @@ define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings', } limit = limit || parseInt(elem.getAttribute('data-activitylimit') || '7'); - var minDate = new Date(); - var hasUserId = 'false' !== elem.getAttribute('data-useractivity'); + const minDate = new Date(); + const hasUserId = 'false' !== elem.getAttribute('data-useractivity'); if (hasUserId) { minDate.setTime(minDate.getTime() - 24 * 60 * 60 * 1000); // one day back @@ -74,7 +84,7 @@ define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings', elem.setAttribute('data-activitystartindex', startIndex); elem.setAttribute('data-activitylimit', limit); if (!startIndex) { - var activityContainer = dom.parentWithClass(elem, 'activityContainer'); + const activityContainer = dom.parentWithClass(elem, 'activityContainer'); if (activityContainer) { if (result.Items.length) { @@ -91,7 +101,7 @@ define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings', } function onActivityLogUpdate(e, apiClient, data) { - var options = this.options; + const options = this.options; if (options && options.serverId === apiClient.serverId()) { reloadData(this, options.element, apiClient); @@ -99,14 +109,14 @@ define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings', } function onListClick(e) { - var btnEntryInfo = dom.parentWithClass(e.target, 'btnEntryInfo'); + const btnEntryInfo = dom.parentWithClass(e.target, 'btnEntryInfo'); if (btnEntryInfo) { - var id = btnEntryInfo.getAttribute('data-id'); - var items = this.items; + const id = btnEntryInfo.getAttribute('data-id'); + const items = this.items; if (items) { - var item = items.filter(function (i) { + const item = items.filter(function (i) { return i.Id.toString() === id; })[0]; @@ -118,35 +128,35 @@ define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings', } function showItemOverview(item) { - require(['alert'], function (alert) { + import('alert').then(({default: alert}) => { alert({ text: item.Overview }); }); } - function ActivityLog(options) { +class ActivityLog { + constructor(options) { this.options = options; - var element = options.element; + const element = options.element; element.classList.add('activityLogListWidget'); element.addEventListener('click', onListClick.bind(this)); - var apiClient = connectionManager.getApiClient(options.serverId); + const apiClient = connectionManager.getApiClient(options.serverId); reloadData(this, element, apiClient); - var onUpdate = onActivityLogUpdate.bind(this); + const onUpdate = onActivityLogUpdate.bind(this); this.updateFn = onUpdate; events.on(serverNotifications, 'ActivityLogEntry', onUpdate); apiClient.sendMessage('ActivityLogEntryStart', '0,1500'); } - - ActivityLog.prototype.destroy = function () { - var options = this.options; + destroy() { + const options = this.options; if (options) { options.element.classList.remove('activityLogListWidget'); connectionManager.getApiClient(options.serverId).sendMessage('ActivityLogEntryStop', '0,1500'); } - var onUpdate = this.updateFn; + const onUpdate = this.updateFn; if (onUpdate) { events.off(serverNotifications, 'ActivityLogEntry', onUpdate); @@ -154,7 +164,9 @@ define(['events', 'globalize', 'dom', 'date-fns', 'dfnshelper', 'userSettings', this.items = null; this.options = null; - }; + } +} - return ActivityLog; -}); +export default ActivityLog; + +/* eslint-enable indent */ diff --git a/src/components/alert.js b/src/components/alert.js index 97b580f8f6..5d396e3a62 100644 --- a/src/components/alert.js +++ b/src/components/alert.js @@ -1,14 +1,17 @@ -define(['browser', 'dialog', 'globalize'], function (browser, dialog, globalize) { - 'use strict'; +import browser from 'browser'; +import dialog from 'dialog'; +import globalize from 'globalize'; + +/* eslint-disable indent */ function replaceAll(originalString, strReplace, strWith) { - var reg = new RegExp(strReplace, 'ig'); + const reg = new RegExp(strReplace, 'ig'); return originalString.replace(reg, strWith); } - return function (text, title) { + export default function (text, title) { - var options; + let options; if (typeof text === 'string') { options = { title: title, @@ -21,7 +24,7 @@ define(['browser', 'dialog', 'globalize'], function (browser, dialog, globalize) if (browser.tv && window.alert) { alert(replaceAll(options.text || '', '
', '\n')); } else { - var items = []; + const items = []; items.push({ name: globalize.translate('ButtonGotIt'), @@ -41,5 +44,6 @@ define(['browser', 'dialog', 'globalize'], function (browser, dialog, globalize) } return Promise.resolve(); - }; -}); + } + +/* eslint-enable indent */ diff --git a/src/components/appRouter.js b/src/components/appRouter.js index 1791aef7e2..03fcb76564 100644 --- a/src/components/appRouter.js +++ b/src/components/appRouter.js @@ -53,7 +53,7 @@ define(['loading', 'globalize', 'events', 'viewManager', 'skinManager', 'backdro break; case 'ServerUpdateNeeded': require(['alert'], function (alert) { - alert({ + alert.default({ text: globalize.translate('ServerUpdateNeeded', 'https://github.com/jellyfin/jellyfin'), html: globalize.translate('ServerUpdateNeeded', 'https://github.com/jellyfin/jellyfin') }).then(function () { diff --git a/src/components/multiSelect/multiSelect.js b/src/components/multiSelect/multiSelect.js index 7d3c241c6e..742b8e86da 100644 --- a/src/components/multiSelect/multiSelect.js +++ b/src/components/multiSelect/multiSelect.js @@ -346,6 +346,7 @@ import 'css!./multiSelect'; import('alert').then(({default: alert}) => { alert({ + text: globalize.translate('PleaseSelectTwoItems') }); }); diff --git a/src/components/playback/playbackmanager.js b/src/components/playback/playbackmanager.js index 73f07a05f2..b74ca5fb3d 100644 --- a/src/components/playback/playbackmanager.js +++ b/src/components/playback/playbackmanager.js @@ -709,7 +709,7 @@ define(['events', 'datetime', 'appSettings', 'itemHelper', 'pluginManager', 'pla function showPlaybackInfoErrorMessage(instance, errorCode, playNextTrack) { require(['alert'], function (alert) { - alert({ + alert.default({ text: globalize.translate('PlaybackError' + errorCode), title: globalize.translate('HeaderPlaybackError') }).then(function () { diff --git a/src/controllers/dashboard/serveractivity.js b/src/controllers/dashboard/serveractivity.js index ed56126267..1d5a49eef7 100644 --- a/src/controllers/dashboard/serveractivity.js +++ b/src/controllers/dashboard/serveractivity.js @@ -16,7 +16,7 @@ import globalize from 'globalize'; view.addEventListener('viewshow', function () { if (!activityLog) { - activityLog = new ActivityLog({ + activityLog = new ActivityLog.default({ serverId: ApiClient.serverId(), element: view.querySelector('.activityItems') }); diff --git a/src/controllers/itemDetails.js b/src/controllers/itemDetails.js index 840de8545f..d7c0c74ee2 100644 --- a/src/controllers/itemDetails.js +++ b/src/controllers/itemDetails.js @@ -1787,7 +1787,7 @@ define(['loading', 'appRouter', 'layoutManager', 'connectionManager', 'userSetti imageLoader.lazyChildren(collectionItems); collectionItems.querySelector('.btnAddToCollection').addEventListener('click', function () { require(['alert'], function (alert) { - alert({ + alert.default({ text: globalize.translate('AddItemToCollectionHelp'), html: globalize.translate('AddItemToCollectionHelp') + '

' + globalize.translate('ButtonLearnMore') + '' }); diff --git a/src/plugins/chromecastPlayer/plugin.js b/src/plugins/chromecastPlayer/plugin.js index b3f75f7a6d..dad95691fc 100644 --- a/src/plugins/chromecastPlayer/plugin.js +++ b/src/plugins/chromecastPlayer/plugin.js @@ -150,7 +150,7 @@ define(['appSettings', 'userSettings', 'playbackManager', 'connectionManager', ' function alertText(text, title) { require(['alert'], function (alert) { - alert({ + alert.default({ text: text, title: title }); diff --git a/src/scripts/datetime.js b/src/scripts/datetime.js index 34ff23fe63..cab59299ad 100644 --- a/src/scripts/datetime.js +++ b/src/scripts/datetime.js @@ -1,15 +1,16 @@ -define(['globalize'], function (globalize) { - 'use strict'; +import globalize from 'globalize'; - function parseISO8601Date(s, toLocal) { +/* eslint-disable indent */ + + export function parseISO8601Date(s, toLocal) { // parenthese matches: // year month day hours minutes seconds // dotmilliseconds // tzstring plusminus hours minutes - var re = /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(\.\d+)?(Z|([+-])(\d{2}):(\d{2}))?/; + const re = /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(\.\d+)?(Z|([+-])(\d{2}):(\d{2}))?/; - var d = s.match(re); + const d = s.match(re); // "2010-12-07T11:00:00.000-09:00" parses to: // ["2010-12-07T11:00:00.000-09:00", "2010", "12", "07", "11", @@ -24,8 +25,8 @@ define(['globalize'], function (globalize) { } // parse strings, leading zeros into proper ints - var a = [1, 2, 3, 4, 5, 6, 10, 11]; - for (var i in a) { + const a = [1, 2, 3, 4, 5, 6, 10, 11]; + for (let i in a) { d[a[i]] = parseInt(d[a[i]], 10); } d[7] = parseFloat(d[7]); @@ -33,7 +34,7 @@ define(['globalize'], function (globalize) { // Date.UTC(year, month[, date[, hrs[, min[, sec[, ms]]]]]) // note that month is 0-11, not 1-12 // see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/UTC - var ms = Date.UTC(d[1], d[2] - 1, d[3], d[4], d[5], d[6]); + let ms = Date.UTC(d[1], d[2] - 1, d[3], d[4], d[5], d[6]); // if there are milliseconds, add them if (d[7] > 0) { @@ -42,7 +43,7 @@ define(['globalize'], function (globalize) { // if there's a timezone, calculate it if (d[8] !== 'Z' && d[10]) { - var offset = d[10] * 60 * 60 * 1000; + let offset = d[10] * 60 * 60 * 1000; if (d[11]) { offset += d[11] * 60 * 1000; } @@ -58,14 +59,14 @@ define(['globalize'], function (globalize) { return new Date(ms); } - function getDisplayRunningTime(ticks) { - var ticksPerHour = 36000000000; - var ticksPerMinute = 600000000; - var ticksPerSecond = 10000000; + export function getDisplayRunningTime(ticks) { + const ticksPerHour = 36000000000; + const ticksPerMinute = 600000000; + const ticksPerSecond = 10000000; - var parts = []; + const parts = []; - var hours = ticks / ticksPerHour; + let hours = ticks / ticksPerHour; hours = Math.floor(hours); if (hours) { @@ -74,7 +75,7 @@ define(['globalize'], function (globalize) { ticks -= (hours * ticksPerHour); - var minutes = ticks / ticksPerMinute; + let minutes = ticks / ticksPerMinute; minutes = Math.floor(minutes); ticks -= (minutes * ticksPerMinute); @@ -84,7 +85,7 @@ define(['globalize'], function (globalize) { } parts.push(minutes); - var seconds = ticks / ticksPerSecond; + let seconds = ticks / ticksPerSecond; seconds = Math.floor(seconds); if (seconds < 10) { @@ -95,7 +96,7 @@ define(['globalize'], function (globalize) { return parts.join(':'); } - var toLocaleTimeStringSupportsLocales = function () { + const toLocaleTimeStringSupportsLocales = function () { try { new Date().toLocaleTimeString('i'); } catch (e) { @@ -106,9 +107,9 @@ define(['globalize'], function (globalize) { function getOptionList(options) { - var list = []; + const list = []; - for (var i in options) { + for (const i in options) { list.push({ name: i, value: options[i] @@ -118,7 +119,7 @@ define(['globalize'], function (globalize) { return list; } - function toLocaleString(date, options) { + export function toLocaleString(date, options) { if (!date) { throw new Error('date cannot be null'); @@ -128,7 +129,7 @@ define(['globalize'], function (globalize) { if (toLocaleTimeStringSupportsLocales) { - var currentLocale = globalize.getCurrentDateTimeLocale(); + const currentLocale = globalize.getCurrentDateTimeLocale(); if (currentLocale) { return date.toLocaleString(currentLocale, options); @@ -138,7 +139,7 @@ define(['globalize'], function (globalize) { return date.toLocaleString(); } - function toLocaleDateString(date, options) { + export function toLocaleDateString(date, options) { if (!date) { throw new Error('date cannot be null'); @@ -148,7 +149,7 @@ define(['globalize'], function (globalize) { if (toLocaleTimeStringSupportsLocales) { - var currentLocale = globalize.getCurrentDateTimeLocale(); + const currentLocale = globalize.getCurrentDateTimeLocale(); if (currentLocale) { return date.toLocaleDateString(currentLocale, options); @@ -156,9 +157,9 @@ define(['globalize'], function (globalize) { } // This is essentially a hard-coded polyfill - var optionList = getOptionList(options); + const optionList = getOptionList(options); if (optionList.length === 1 && optionList[0].name === 'weekday') { - var weekday = []; + const weekday = []; weekday[0] = 'Sun'; weekday[1] = 'Mon'; weekday[2] = 'Tue'; @@ -172,7 +173,7 @@ define(['globalize'], function (globalize) { return date.toLocaleDateString(); } - function toLocaleTimeString(date, options) { + export function toLocaleTimeString(date, options) { if (!date) { throw new Error('date cannot be null'); @@ -182,7 +183,7 @@ define(['globalize'], function (globalize) { if (toLocaleTimeStringSupportsLocales) { - var currentLocale = globalize.getCurrentDateTimeLocale(); + const currentLocale = globalize.getCurrentDateTimeLocale(); if (currentLocale) { return date.toLocaleTimeString(currentLocale, options); @@ -192,7 +193,7 @@ define(['globalize'], function (globalize) { return date.toLocaleTimeString(); } - function getDisplayTime(date) { + export function getDisplayTime(date) { if (!date) { throw new Error('date cannot be null'); @@ -217,19 +218,19 @@ define(['globalize'], function (globalize) { }); } - var time = toLocaleTimeString(date); + let time = toLocaleTimeString(date); - var timeLower = time.toLowerCase(); + const timeLower = time.toLowerCase(); if (timeLower.indexOf('am') !== -1 || timeLower.indexOf('pm') !== -1) { time = timeLower; - var hour = date.getHours() % 12; - var suffix = date.getHours() > 11 ? 'pm' : 'am'; + let hour = date.getHours() % 12; + const suffix = date.getHours() > 11 ? 'pm' : 'am'; if (!hour) { hour = 12; } - var minutes = date.getMinutes(); + let minutes = date.getMinutes(); if (minutes < 10) { minutes = '0' + minutes; @@ -239,7 +240,7 @@ define(['globalize'], function (globalize) { time = hour + minutes + suffix; } else { - var timeParts = time.split(':'); + const timeParts = time.split(':'); // Trim off seconds if (timeParts.length > 2) { @@ -253,21 +254,21 @@ define(['globalize'], function (globalize) { return time; } - function isRelativeDay(date, offsetInDays) { + export function isRelativeDay(date, offsetInDays) { if (!date) { throw new Error('date cannot be null'); } - var yesterday = new Date(); - var day = yesterday.getDate() + offsetInDays; + const yesterday = new Date(); + const day = yesterday.getDate() + offsetInDays; yesterday.setDate(day); // automatically adjusts month/year appropriately return date.getFullYear() === yesterday.getFullYear() && date.getMonth() === yesterday.getMonth() && date.getDate() === day; } - return { + export default { parseISO8601Date: parseISO8601Date, getDisplayRunningTime: getDisplayRunningTime, toLocaleDateString: toLocaleDateString, @@ -279,4 +280,5 @@ define(['globalize'], function (globalize) { return toLocaleTimeStringSupportsLocales; } }; -}); + +/* eslint-enable indent */ diff --git a/src/scripts/serverNotifications.js b/src/scripts/serverNotifications.js index 2553c284f0..8e212ab718 100644 --- a/src/scripts/serverNotifications.js +++ b/src/scripts/serverNotifications.js @@ -15,7 +15,7 @@ define(['connectionManager', 'playbackManager', 'syncPlayManager', 'events', 'in }); } else { require(['alert'], function (alert) { - alert({ title: args.Header, text: args.Text }); + alert.default({ title: args.Header, text: args.Text }); }); } } diff --git a/src/scripts/site.js b/src/scripts/site.js index c3f93d9545..17bff0decb 100644 --- a/src/scripts/site.js +++ b/src/scripts/site.js @@ -187,7 +187,7 @@ var Dashboard = { } require(['alert'], function (alert) { - alert({ + alert.default({ title: options.title || Globalize.translate('HeaderAlert'), text: options.message }).then(options.callback || function () {});