diff --git a/dashboard-ui/bower_components/emby-icons/emby-icons.html b/dashboard-ui/bower_components/emby-icons/emby-icons.html
index eff2198b1e..517b24a240 100644
--- a/dashboard-ui/bower_components/emby-icons/emby-icons.html
+++ b/dashboard-ui/bower_components/emby-icons/emby-icons.html
@@ -54,6 +54,7 @@ See [iron-iconset](#iron-iconset) and [iron-iconset-svg](#iron-iconset-svg) for
+
diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json
index 456c933e44..4f44a24b85 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json
+++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json
@@ -16,12 +16,12 @@
},
"devDependencies": {},
"ignore": [],
- "version": "1.2.87",
- "_release": "1.2.87",
+ "version": "1.3.18",
+ "_release": "1.3.18",
"_resolution": {
"type": "version",
- "tag": "1.2.87",
- "commit": "21a6cacb0ec2cf301045a5fb35192753efd71025"
+ "tag": "1.3.18",
+ "commit": "127ca5da89083c44351fd0664355f3f521313d5d"
},
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "^1.2.0",
diff --git a/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js b/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js
index 093bb2e768..77d6d49830 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/actionsheet/actionsheet.js
@@ -1,4 +1,4 @@
-define(['dialogHelper', 'layoutManager', 'dialogText', 'paper-button', 'css!./actionsheet', 'html!./../icons/nav.html'], function (dialogHelper, layoutManager, dialogText) {
+define(['dialogHelper', 'layoutManager', 'globalize', 'paper-button', 'css!./actionsheet', 'html!./../icons/nav.html'], function (dialogHelper, layoutManager, globalize) {
function parentWithClass(elem, className) {
@@ -88,7 +88,8 @@
// title
var dialogOptions = {
removeOnClose: true,
- enableHistory: options.enableHistory
+ enableHistory: options.enableHistory,
+ scrollY: false
};
var backButton = false;
@@ -179,7 +180,7 @@
if (options.showCancel) {
html += '
';
if (program.IsLive) {
- html += '
' + globalize.translate('core#AttributeLive') + ' ';
+ html += '
' + globalize.translate('sharedcomponents#AttributeLive') + ' ';
}
else if (program.IsPremiere) {
- html += '
' + globalize.translate('core#AttributePremiere') + ' ';
+ html += '
' + globalize.translate('sharedcomponents#AttributePremiere') + ' ';
}
else if (program.IsSeries && !program.IsRepeat) {
- html += '
' + globalize.translate('core#AttributeNew') + ' ';
+ html += '
' + globalize.translate('sharedcomponents#AttributeNew') + ' ';
}
html += program.Name;
@@ -441,13 +439,13 @@
function getFutureDateText(date) {
var weekday = [];
- weekday[0] = globalize.translate('core#OptionSundayShort');
- weekday[1] = globalize.translate('core#OptionMondayShort');
- weekday[2] = globalize.translate('core#OptionTuesdayShort');
- weekday[3] = globalize.translate('core#OptionWednesdayShort');
- weekday[4] = globalize.translate('core#OptionThursdayShort');
- weekday[5] = globalize.translate('core#OptionFridayShort');
- weekday[6] = globalize.translate('core#OptionSaturdayShort');
+ weekday[0] = globalize.translate('sharedcomponents#OptionSundayShort');
+ weekday[1] = globalize.translate('sharedcomponents#OptionMondayShort');
+ weekday[2] = globalize.translate('sharedcomponents#OptionTuesdayShort');
+ weekday[3] = globalize.translate('sharedcomponents#OptionWednesdayShort');
+ weekday[4] = globalize.translate('sharedcomponents#OptionThursdayShort');
+ weekday[5] = globalize.translate('sharedcomponents#OptionFridayShort');
+ weekday[6] = globalize.translate('sharedcomponents#OptionSaturdayShort');
var day = weekday[date.getDay()];
date = datetime.toLocaleDateString(date);
@@ -530,7 +528,7 @@
actionsheet.show({
items: dateOptions,
- title: globalize.translate('core#HeaderSelectDate'),
+ title: globalize.translate('sharedcomponents#HeaderSelectDate'),
callback: function (id) {
var date = new Date();
@@ -598,9 +596,6 @@
}
}
- var xhr = new XMLHttpRequest();
- xhr.open('GET', baseUrl + '/tvguide.template.html', true);
-
var supportsCaptureOption = false;
try {
var opts = Object.defineProperty({}, 'capture', {
@@ -619,9 +614,7 @@
target.addEventListener(type, handler, optionsOrCapture);
}
- xhr.onload = function (e) {
-
- var template = this.response;
+ require(['text!./tvguide.template.html'], function (template) {
var context = options.element;
context.innerHTML = globalize.translateDocument(template, 'core');
@@ -658,13 +651,7 @@
events.trigger(self, 'load');
self.refresh();
- }
-
- xhr.send();
- };
-
- Guide.setBaseUrl = function (url) {
- baseUrl = url;
+ });
};
return Guide;
diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js
new file mode 100644
index 0000000000..b5d11d830c
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/itemcontextmenu.js
@@ -0,0 +1,101 @@
+define(['apphost', 'globalize', 'connectionManager'], function (appHost, globalize, connectionManager) {
+
+ function getCommands(options) {
+
+ var item = options.item;
+
+ var serverId = item.ServerId;
+ var apiClient = connectionManager.getApiClient(serverId);
+
+ return apiClient.getCurrentUser().then(function (user) {
+
+ var commands = [];
+
+ if (item.CanDownload && user.Policy.EnableContentDownloading && appHost.supports('filedownload')) {
+ commands.push({
+ name: globalize.translate('sharedcomponents#Download'),
+ id: 'download'
+ });
+ }
+
+ if (item.Type != 'Timer' && user.Policy.EnablePublicSharing && appHost.supports('sharing')) {
+ commands.push({
+ name: globalize.translate('Share'),
+ id: 'share'
+ });
+ }
+
+ return commands;
+ });
+ }
+
+ function executeCommand(item, id) {
+
+ var itemId = item.Id;
+ var serverId = item.ServerId;
+ var apiClient = connectionManager.getApiClient(serverId);
+
+ return new Promise(function (resolve, reject) {
+
+ switch (id) {
+
+ case 'download':
+ {
+ require(['fileDownloader'], function (fileDownloader) {
+ var downloadHref = apiClient.getUrl("Items/" + itemId + "/Download", {
+ api_key: apiClient.accessToken()
+ });
+
+ fileDownloader.download([
+ {
+ url: downloadHref,
+ itemId: itemId,
+ serverId: serverId
+ }]);
+
+ reject();
+ });
+
+ break;
+ }
+ case 'share':
+ {
+ require(['sharingmanager'], function (sharingManager) {
+ sharingManager.showMenu({
+ serverId: serverId,
+ itemId: itemId
+
+ }).then(reject);
+ });
+ break;
+ }
+ default:
+ break;
+ }
+ });
+ }
+
+ function show(options) {
+
+ return getCommands(options).then(function (commands) {
+
+ return new Promise(function (resolve, reject) {
+
+ require(['actionsheet'], function (actionSheet) {
+
+ actionSheet.show({
+ items: commands
+ }).then(function (id) {
+ executeCommand(options.item, id).then(resolve);
+ }, reject);
+ });
+ });
+
+ });
+ }
+
+ return {
+ getCommands: getCommands,
+ show: show
+ };
+});
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/itemhelper.js b/dashboard-ui/bower_components/emby-webcomponents/itemhelper.js
index 6df165474a..6bb706adbd 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/itemhelper.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/itemhelper.js
@@ -19,7 +19,7 @@ define([], function () {
}
if (/*options.isInlineSpecial &&*/ item.Type == "Episode" && item.ParentIndexNumber == 0) {
- name = Globalize.translate('core#ValueSpecialEpisodeName', name);
+ name = Globalize.translate('sharedcomponents#ValueSpecialEpisodeName', name);
} else if ((item.Type == "Episode" || item.Type == 'Program') && item.IndexNumber != null && item.ParentIndexNumber != null) {
diff --git a/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js b/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js
index e07733e4cb..7a8a302653 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/mediainfo/mediainfo.js
@@ -71,7 +71,7 @@ define(['datetime', 'globalize', 'embyRouter', 'html!./../icons/mediainfo.html',
if (count) {
- miscInfo.push(globalize.translate('core#TrackCount', count));
+ miscInfo.push(globalize.translate('sharedcomponents#TrackCount', count));
}
if (item.CumulativeRunTimeTicks) {
@@ -86,7 +86,7 @@ define(['datetime', 'globalize', 'embyRouter', 'html!./../icons/mediainfo.html',
if (count) {
- miscInfo.push(globalize.translate('core#ItemCount', count));
+ miscInfo.push(globalize.translate('sharedcomponents#ItemCount', count));
}
}
@@ -127,7 +127,7 @@ define(['datetime', 'globalize', 'embyRouter', 'html!./../icons/mediainfo.html',
if (item.ProductionYear && item.Type == "Series") {
if (item.Status == "Continuing") {
- miscInfo.push(globalize.translate('core#ValueSeriesYearToPresent', item.ProductionYear));
+ miscInfo.push(globalize.translate('sharedcomponents#ValueSeriesYearToPresent', item.ProductionYear));
}
else if (item.ProductionYear) {
@@ -158,17 +158,17 @@ define(['datetime', 'globalize', 'embyRouter', 'html!./../icons/mediainfo.html',
if (item.IsLive) {
miscInfo.push({
- html: '
' + globalize.translate('core#AttributeLive') + '
'
+ html: '
' + globalize.translate('sharedcomponents#AttributeLive') + '
'
});
}
else if (item.IsPremiere) {
miscInfo.push({
- html: '
' + globalize.translate('core#AttributePremiere') + '
'
+ html: '
' + globalize.translate('sharedcomponents#AttributePremiere') + '
'
});
}
else if (item.IsSeries && !item.IsRepeat) {
miscInfo.push({
- html: '
' + globalize.translate('core#AttributeNew') + '
'
+ html: '
' + globalize.translate('sharedcomponents#AttributeNew') + '
'
});
}
@@ -176,14 +176,14 @@ define(['datetime', 'globalize', 'embyRouter', 'html!./../icons/mediainfo.html',
try {
date = datetime.parseISO8601Date(item.PremiereDate);
- text = globalize.translate('core#OriginalAirDateValue', date.toLocaleDateString());
+ text = globalize.translate('sharedcomponents#OriginalAirDateValue', date.toLocaleDateString());
miscInfo.push(text);
}
catch (e) {
console.log("Error parsing date: " + item.PremiereDate);
}
} else if (item.ProductionYear) {
- text = globalize.translate('core#ReleaseYearValue', item.ProductionYear);
+ text = globalize.translate('sharedcomponents#ReleaseYearValue', item.ProductionYear);
miscInfo.push(text);
}
}
@@ -275,7 +275,7 @@ define(['datetime', 'globalize', 'embyRouter', 'html!./../icons/mediainfo.html',
endDate = new Date(endDate);
var displayTime = datetime.getDisplayTime(endDate);
- return globalize.translate('core#EndsAtValue', displayTime);
+ return globalize.translate('sharedcomponents#EndsAtValue', displayTime);
}
}
@@ -292,7 +292,7 @@ define(['datetime', 'globalize', 'embyRouter', 'html!./../icons/mediainfo.html',
if (includeText === false) {
return displayTime;
}
- return globalize.translate('core#EndsAtValue', displayTime);
+ return globalize.translate('sharedcomponents#EndsAtValue', displayTime);
}
function getMediaInfoItem(m, cssClass) {
@@ -400,7 +400,7 @@ define(['datetime', 'globalize', 'embyRouter', 'html!./../icons/mediainfo.html',
}
if (options.isInlineSpecial && item.Type == "Episode" && item.ParentIndexNumber == 0) {
- name = globalize.translate('core#ValueSpecialEpisodeName', name);
+ name = globalize.translate('sharedcomponents#ValueSpecialEpisodeName', name);
} else if (item.Type == "Episode" && item.IndexNumber != null && item.ParentIndexNumber != null) {
diff --git a/dashboard-ui/bower_components/emby-webcomponents/prompt/prompt.js b/dashboard-ui/bower_components/emby-webcomponents/prompt/prompt.js
index d23b840a0d..2c95a4fcf3 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/prompt/prompt.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/prompt/prompt.js
@@ -1,4 +1,4 @@
-define(['dialogHelper', 'layoutManager', 'dialogText', 'html!./../icons/nav.html', 'css!./style.css', 'paper-button', 'paper-icon-button-light', 'paper-input'], function (dialogHelper, layoutManager, dialogText) {
+define(['dialogHelper', 'layoutManager', 'globalize', 'html!./../icons/nav.html', 'css!./style.css', 'paper-button', 'paper-icon-button-light', 'paper-input'], function (dialogHelper, layoutManager, globalize) {
function getIcon(icon, cssClass, canFocus, autoFocus) {
@@ -64,11 +64,11 @@ define(['dialogHelper', 'layoutManager', 'dialogText', 'html!./../icons/nav.html
html += '
';
if (raisedButtons) {
- html += '
' + dialogText.get('Ok') + '';
+ html += '
' + globalize.translate('sharedcomponents#ButtonOk') + '';
} else {
html += '
';
}
html += '';
diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.css b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.css
new file mode 100644
index 0000000000..842bfe0ffe
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.css
@@ -0,0 +1,3 @@
+.recordingDialog .btnSubmit {
+ background-color: #cc3333;
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.js b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.js
new file mode 100644
index 0000000000..acbd4b581c
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.js
@@ -0,0 +1,416 @@
+define(['dialogHelper', 'globalize', 'layoutManager', 'mediaInfo', 'apphost', 'connectionManager', 'require', 'loading', 'scrollHelper', 'scrollStyles', 'paper-checkbox', 'emby-collapsible', 'paper-input', 'paper-icon-button-light', 'css!./../formdialog', 'css!./recordingcreator', 'html!./../icons/mediainfo.html', 'html!./../icons/nav.html'], function (dialogHelper, globalize, layoutManager, mediaInfo, appHost, connectionManager, require, loading, scrollHelper) {
+
+ var currentProgramId;
+ var currentServerId;
+ var currentDialog;
+ var recordingCreated = false;
+
+ function getDaysOfWeek() {
+
+ return [
+ 'Sunday',
+ 'Monday',
+ 'Tuesday',
+ 'Wednesday',
+ 'Thursday',
+ 'Friday',
+ 'Saturday'
+ ];
+ }
+
+ function getDays(context) {
+
+ var daysOfWeek = getDaysOfWeek();
+
+ var days = [];
+
+ for (var i = 0, length = daysOfWeek.length; i < length; i++) {
+
+ var day = daysOfWeek[i];
+
+ if (context.querySelector('#chk' + day).checked) {
+ days.push(day);
+ }
+
+ }
+
+ return days;
+ }
+
+ function hideSeriesRecordingFields(context) {
+ slideUpToHide(context.querySelector('#seriesFields'));
+ context.querySelector('.btnSubmit').classList.remove('hide');
+ context.querySelector('.supporterContainer').classList.add('hide');
+ }
+
+ function closeDialog(isSubmitted) {
+
+ recordingCreated = isSubmitted;
+ dialogHelper.close(currentDialog);
+ }
+
+ function onSubmit(e) {
+
+ loading.show();
+
+ var form = this;
+
+ var apiClient = connectionManager.getApiClient(currentServerId);
+
+ apiClient.getNamedConfiguration("livetv").then(function (config) {
+
+ config.EnableRecordingEncoding = form.querySelector('#chkConvertRecordings').checked;
+
+ apiClient.updateNamedConfiguration("livetv", config);
+ });
+
+ apiClient.getNewLiveTvTimerDefaults({ programId: currentProgramId }).then(function (item) {
+
+ item.PrePaddingSeconds = form.querySelector('#txtPrePaddingMinutes').value * 60;
+ item.PostPaddingSeconds = form.querySelector('#txtPostPaddingMinutes').value * 60;
+
+ item.RecordNewOnly = form.querySelector('#chkNewOnly').checked;
+ item.RecordAnyChannel = form.querySelector('#chkAllChannels').checked;
+ item.RecordAnyTime = form.querySelector('#chkAnyTime').checked;
+
+ item.Days = getDays(form);
+
+ if (form.querySelector('#chkRecordSeries').checked) {
+
+ apiClient.createLiveTvSeriesTimer(item).then(function () {
+
+ loading.hide();
+ closeDialog(true);
+ });
+
+ } else {
+ apiClient.createLiveTvTimer(item).then(function () {
+
+ loading.hide();
+ closeDialog(true);
+ });
+ }
+ });
+
+ // Disable default form submission
+ e.preventDefault();
+ return false;
+ }
+
+ function getRegistration(programId, apiClient) {
+
+ loading.show();
+
+ return apiClient.getJSON(apiClient.getUrl('LiveTv/Registration', {
+
+ ProgramId: programId,
+ Feature: 'seriesrecordings'
+
+ })).then(function (result) {
+
+ loading.hide();
+ return result;
+
+ }, function () {
+
+ loading.hide();
+
+ return {
+ TrialVersion: true,
+ IsValid: true,
+ IsRegistered: false
+ };
+ });
+ }
+
+ function showSeriesRecordingFields(context, apiClient) {
+ slideDownToShow(context.querySelector('#seriesFields'));
+ context.querySelector('.btnSubmit').classList.remove('hide');
+
+ getRegistration(currentProgramId, apiClient).then(function (regInfo) {
+
+ if (regInfo.IsValid) {
+ context.querySelector('.btnSubmit').classList.remove('hide');
+ } else {
+ context.querySelector('.btnSubmit').classList.add('hide');
+ }
+
+ if (regInfo.IsRegistered) {
+
+ context.querySelector('.supporterContainer').classList.add('hide');
+
+ } else {
+
+ context.querySelector('.supporterContainer').classList.remove('hide');
+
+ if (regInfo.TrialVersion) {
+ context.querySelector('.supporterTrial').classList.remove('hide');
+ } else {
+ context.querySelector('.supporterTrial').classList.add('hide');
+ }
+ }
+ });
+ }
+
+ function slideDownToShow(elem) {
+
+ if (!elem.classList.contains('hide')) {
+ return;
+ }
+
+ elem.classList.remove('hide');
+
+ elem.style.overflowY = 'hidden';
+
+ requestAnimationFrame(function () {
+
+ elem.animate([{
+ height: 0
+ }, {
+ height: elem.offsetHeight + 'px'
+
+ }], { duration: 400, easing: 'ease' }).onfinish = function () {
+ elem.classList.remove('hide');
+ };
+ });
+ }
+
+ function slideUpToHide(elem) {
+
+ if (elem.classList.contains('hide')) {
+ return;
+ }
+
+ elem.style.overflowY = 'hidden';
+
+ requestAnimationFrame(function () {
+
+ elem.animate([{
+ height: elem.offsetHeight + 'px'
+ }, {
+ height: 0
+ }], { duration: 400, easing: 'ease' }).onfinish = function () {
+ elem.classList.add('hide');
+ };
+ });
+ }
+
+ function onPremiereLinkClicked(e) {
+
+ require(['shell'], function (shell) {
+ shell.openUrl('https://emby.media/premiere');
+ });
+ e.preventDefault();
+ return false;
+ }
+
+ function init(context) {
+
+ var apiClient = connectionManager.getApiClient(currentServerId);
+
+ context.querySelector('.lnkPremiere').addEventListener('click', onPremiereLinkClicked);
+
+ context.querySelector('#chkRecordSeries').addEventListener('change', function () {
+
+ if (this.checked) {
+ showSeriesRecordingFields(context, apiClient);
+ } else {
+ hideSeriesRecordingFields(context);
+ }
+ });
+
+ context.querySelector('.btnSubmit').addEventListener('click', function () {
+
+ // Do a fake form submit this the button isn't a real submit button
+ var fakeSubmit = document.createElement('input');
+ fakeSubmit.setAttribute('type', 'submit');
+ fakeSubmit.style.display = 'none';
+ var form = context.querySelector('form');
+ form.appendChild(fakeSubmit);
+ fakeSubmit.click();
+
+ // Seeing issues in smart tv browsers where the form does not get submitted if the button is removed prior to the submission actually happening
+ setTimeout(function () {
+ form.removeChild(fakeSubmit);
+ }, 500);
+ });
+
+ context.querySelector('.btnCancel').addEventListener('click', function () {
+
+ closeDialog(false);
+ });
+
+ context.querySelector('form', context).addEventListener('submit', onSubmit);
+
+ var supporterButtons = context.querySelectorAll('.btnSupporter');
+ for (var i = 0, length = supporterButtons.length; i < length; i++) {
+ if (appHost.supports('externalpremium')) {
+ supporterButtons[i].classList.remove('hide');
+ } else {
+ supporterButtons[i].classList.add('hide');
+ }
+ }
+
+ if (appHost.supports('externalpremium')) {
+ context.querySelector('.btnSupporterForConverting a').href = 'https://emby.media/premiere';
+ } else {
+ context.querySelector('.btnSupporterForConverting a').href = '#';
+ }
+
+ apiClient.getNamedConfiguration("livetv").then(function (config) {
+
+ context.querySelector('#chkConvertRecordings').checked = config.EnableRecordingEncoding;
+ });
+
+ if (layoutManager.tv) {
+ context.querySelector('.advanced').classList.add('hide');
+ } else {
+ context.querySelector('.advanced').classList.remove('hide');
+ }
+ }
+
+ function selectDays(page, days) {
+
+ var daysOfWeek = getDaysOfWeek();
+
+ for (var i = 0, length = daysOfWeek.length; i < length; i++) {
+
+ var day = daysOfWeek[i];
+
+ page.querySelector('#chk' + day).checked = days.indexOf(day) != -1;
+ }
+ }
+
+ function renderRecording(context, defaultTimer, program, apiClient) {
+
+ context.querySelector('.itemName').innerHTML = program.Name;
+ context.querySelector('.itemEpisodeName').innerHTML = program.EpisodeTitle || '';
+
+ context.querySelector('.itemMiscInfoPrimary').innerHTML = mediaInfo.getPrimaryMediaInfoHtml(program);
+ context.querySelector('.itemMiscInfoSecondary').innerHTML = mediaInfo.getSecondaryMediaInfoHtml(program);
+
+ context.querySelector('#chkNewOnly').checked = defaultTimer.RecordNewOnly;
+ context.querySelector('#chkAllChannels').checked = defaultTimer.RecordAnyChannel;
+ context.querySelector('#chkAnyTime').checked = defaultTimer.RecordAnyTime;
+
+ context.querySelector('#txtPrePaddingMinutes').value = defaultTimer.PrePaddingSeconds / 60;
+ context.querySelector('#txtPostPaddingMinutes').value = defaultTimer.PostPaddingSeconds / 60;
+
+ if (program.IsSeries) {
+ context.querySelector('#eligibleForSeriesFields').classList.remove('hide');
+ } else {
+ context.querySelector('#eligibleForSeriesFields').classList.add('hide');
+ }
+
+ selectDays(context, defaultTimer.Days);
+
+ if (program.ServiceName == 'Emby') {
+ context.querySelector('.convertRecordingsContainer').classList.remove('hide');
+ showConvertRecordingsUnlockMessage(context, apiClient);
+ } else {
+ context.querySelector('.convertRecordingsContainer').classList.add('hide');
+ }
+
+ loading.hide();
+ }
+
+ function showConvertRecordingsUnlockMessage(context, apiClient) {
+
+ apiClient.getPluginSecurityInfo().then(function (regInfo) {
+
+ if (regInfo.IsMBSupporter) {
+ context.querySelector('.btnSupporterForConverting').classList.add('hide');
+ } else {
+ context.querySelector('.btnSupporterForConverting').classList.remove('hide');
+ }
+
+ }, function () {
+
+ context.querySelector('.btnSupporterForConverting').classList.remove('hide');
+ });
+ }
+
+ function reload(context, programId) {
+
+ loading.show();
+
+ var apiClient = connectionManager.getApiClient(currentServerId);
+
+ var promise1 = apiClient.getNewLiveTvTimerDefaults({ programId: programId });
+ var promise2 = apiClient.getLiveTvProgram(programId, apiClient.getCurrentUserId());
+
+ Promise.all([promise1, promise2]).then(function (responses) {
+
+ var defaults = responses[0];
+ var program = responses[1];
+
+ renderRecording(context, defaults, program, apiClient);
+ });
+ }
+
+ function showEditor(itemId, serverId) {
+
+ return new Promise(function (resolve, reject) {
+
+ recordingCreated = false;
+ currentProgramId = itemId;
+ currentServerId = serverId;
+ loading.show();
+
+ require(['text!./recordingcreator.template.html'], function (template) {
+
+ var dialogOptions = {
+ removeOnClose: true,
+ scrollY: false
+ };
+
+ if (layoutManager.tv) {
+ dialogOptions.size = 'fullscreen';
+ } else {
+ dialogOptions.size = 'small';
+ }
+
+ var dlg = dialogHelper.createDialog(dialogOptions);
+
+ dlg.classList.add('formDialog');
+ dlg.classList.add('recordingDialog');
+
+ var html = '';
+
+ html += globalize.translateDocument(template, 'sharedcomponents');
+
+ dlg.innerHTML = html;
+ document.body.appendChild(dlg);
+
+ currentDialog = dlg;
+
+ dlg.addEventListener('close', function () {
+
+ if (recordingCreated) {
+ require(['toast'], function (toast) {
+ toast(globalize.translate('RecordingScheduled'));
+ });
+ resolve();
+ } else {
+ reject();
+ }
+ });
+
+ if (layoutManager.tv) {
+ scrollHelper.centerFocus.on(dlg.querySelector('.dialogContent'), false);
+ }
+
+ hideSeriesRecordingFields(dlg);
+ init(dlg);
+
+ reload(dlg, itemId);
+
+ dialogHelper.open(dlg);
+ });
+ });
+ }
+
+ return {
+ show: showEditor
+ };
+});
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.template.html b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.template.html
new file mode 100644
index 0000000000..855a356131
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/recordingcreator/recordingcreator.template.html
@@ -0,0 +1,77 @@
+
+
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/emby-webcomponents/requirecss.js b/dashboard-ui/bower_components/emby-webcomponents/require/requirecss.js
similarity index 96%
rename from dashboard-ui/bower_components/emby-webcomponents/requirecss.js
rename to dashboard-ui/bower_components/emby-webcomponents/require/requirecss.js
index 4d93987fdb..83a82972db 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/requirecss.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/require/requirecss.js
@@ -26,7 +26,7 @@ define(function () {
requireCss.load = function (cssId, req, load, config) {
// Somehow if the url starts with /css, require will get all screwed up since this extension is also called css
- var srch = '/emby-webcomponents/requirecss';
+ var srch = '/emby-webcomponents/require/requirecss';
var index = cssId.indexOf(srch);
if (index != -1) {
diff --git a/dashboard-ui/bower_components/emby-webcomponents/requirehtml.js b/dashboard-ui/bower_components/emby-webcomponents/require/requirehtml.js
similarity index 100%
rename from dashboard-ui/bower_components/emby-webcomponents/requirehtml.js
rename to dashboard-ui/bower_components/emby-webcomponents/require/requirehtml.js
diff --git a/dashboard-ui/bower_components/emby-webcomponents/require/requiretext.js b/dashboard-ui/bower_components/emby-webcomponents/require/requiretext.js
new file mode 100644
index 0000000000..a93bae6302
--- /dev/null
+++ b/dashboard-ui/bower_components/emby-webcomponents/require/requiretext.js
@@ -0,0 +1,29 @@
+define(function () {
+
+ return {
+
+ load: function (url, req, load, config) {
+
+ if (url.indexOf('http') != 0 && url.indexOf('file:') != 0) {
+ url = config.baseUrl + url;
+ }
+
+ if (config.urlArgs) {
+ url += config.urlArgs(url, url);
+ }
+
+ var xhr = new XMLHttpRequest();
+ xhr.open('GET', url, true);
+
+ xhr.onload = function (e) {
+ load(this.response);
+ };
+
+ xhr.send();
+ },
+
+ normalize: function (name, normalize) {
+ return normalize(name);
+ }
+ };
+});
diff --git a/dashboard-ui/bower_components/emby-webcomponents/router.js b/dashboard-ui/bower_components/emby-webcomponents/router.js
index bcea1e0830..ffad2468bf 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/router.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/router.js
@@ -71,8 +71,8 @@ define(['loading', 'viewManager', 'skinManager', 'pluginManager', 'backdrop', 'b
require(['alert'], function (alert) {
alert({
- text: Globalize.translate('core#ServerUpdateNeeded', 'https://emby.media'),
- html: Globalize.translate('core#ServerUpdateNeeded', '
https://emby.media')
+ text: Globalize.translate('sharedcomponents#ServerUpdateNeeded', 'https://emby.media'),
+ html: Globalize.translate('sharedcomponents#ServerUpdateNeeded', '
https://emby.media')
}).then(function () {
embyRouter.showSelectServer();
diff --git a/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmanager.js b/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmanager.js
index facbbc39e1..c3e7f26e15 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmanager.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmanager.js
@@ -8,10 +8,8 @@
// Delete the share since it was cancelled
apiClient.ajax({
-
type: 'DELETE',
url: apiClient.getUrl('Social/Shares/' + shareId)
-
});
}
@@ -41,7 +39,7 @@
loading.hide();
- sharingMenu.showMenu(options).then(function() {
+ return sharingMenu.showMenu(options).then(function () {
console.log('share success. shareId: ' + options.share.Id);
}, function () {
onSharingCancel(options, apiClient);
diff --git a/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmenu.js b/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmenu.js
index 1358dd49b0..3b83d38fea 100644
--- a/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmenu.js
+++ b/dashboard-ui/bower_components/emby-webcomponents/sharing/sharingmenu.js
@@ -1,4 +1,4 @@
-define(['dialogHelper', 'layoutManager', 'dialogText', './social-share-kit-1.0.4/dist/js/social-share-kit.min', 'css!./social-share-kit-1.0.4/dist/css/social-share-kit.css'], function (dialogHelper, layoutManager, dialogText) {
+define(['dialogHelper', 'layoutManager', 'globalize', './social-share-kit-1.0.4/dist/js/social-share-kit.min', 'css!./social-share-kit-1.0.4/dist/css/social-share-kit.css'], function (dialogHelper, layoutManager, globalize) {
function showMenu(options) {
@@ -22,7 +22,7 @@
html += '
';
html += '