diff --git a/src/components/castSenderApi.js b/src/components/castSenderApi.js
new file mode 100644
index 000000000..a1e7bd875
--- /dev/null
+++ b/src/components/castSenderApi.js
@@ -0,0 +1,34 @@
+define([], function() {
+ 'use strict';
+
+ if (window.appMode === "cordova" || window.appMode === "android") {
+ return {
+ load: function () {
+ window.chrome = window.chrome || {};
+ return Promise.resolve();
+ }
+ };
+ } else {
+ var ccLoaded = false;
+ return {
+ load: function () {
+ if (ccLoaded) {
+ return Promise.resolve();
+ }
+
+ return new Promise(function (resolve, reject) {
+ var fileref = document.createElement("script");
+ fileref.setAttribute("type", "text/javascript");
+
+ fileref.onload = function () {
+ ccLoaded = true;
+ resolve();
+ };
+
+ fileref.setAttribute("src", "https://www.gstatic.com/cv/js/sender/v1/cast_sender.js");
+ document.querySelector("head").appendChild(fileref);
+ });
+ }
+ };
+ }
+});
diff --git a/src/components/confirm/confirm.js b/src/components/confirm/confirm.js
index f104350c8..fa9a15667 100644
--- a/src/components/confirm/confirm.js
+++ b/src/components/confirm/confirm.js
@@ -1,40 +1,65 @@
-define(['dialog', 'globalize'], function (dialog, globalize) {
+define(["browser", "dialog", "globalize"], function(browser, dialog, globalize) {
'use strict';
- return function (text, title) {
+ function replaceAll(str, find, replace) {
+ return str.split(find).join(replace);
+ }
- var options;
- if (typeof text === 'string') {
- options = {
- title: title,
- text: text
- };
- } else {
- options = text;
- }
-
- var items = [];
-
- items.push({
- name: options.cancelText || globalize.translate('ButtonCancel'),
- id: 'cancel',
- type: 'cancel'
- });
-
- items.push({
- name: options.confirmText || globalize.translate('ButtonOk'),
- id: 'ok',
- type: options.primary === 'delete' ? 'delete' : 'submit'
- });
-
- options.buttons = items;
-
- return dialog(options).then(function (result) {
- if (result === 'ok') {
- return Promise.resolve();
+ if (browser.tv && window.confirm) {
+ // Use the native confirm dialog
+ return function (options) {
+ if (typeof options === 'string') {
+ options = {
+ title: '',
+ text: options
+ };
}
- return Promise.reject();
- });
- };
+ var text = replaceAll(options.text || '', '
', '\n');
+ var result = confirm(text);
+
+ if (result) {
+ return Promise.resolve();
+ } else {
+ return Promise.reject();
+ }
+ };
+ } else {
+ // Use our own dialog
+ return function (text, title) {
+ var options;
+ if (typeof text === 'string') {
+ options = {
+ title: title,
+ text: text
+ };
+ } else {
+ options = text;
+ }
+
+ var items = [];
+
+ items.push({
+ name: options.cancelText || globalize.translate('ButtonCancel'),
+ id: 'cancel',
+ type: 'cancel'
+ });
+
+ items.push({
+ name: options.confirmText || globalize.translate('ButtonOk'),
+ id: 'ok',
+ type: options.primary === 'delete' ? 'delete' : 'submit'
+ });
+
+ options.buttons = items;
+
+ return dialog(options).then(function (result) {
+ if (result === 'ok') {
+ return Promise.resolve();
+ }
+
+ return Promise.reject();
+ });
+ };
+ }
});
diff --git a/src/components/confirm/nativeconfirm.js b/src/components/confirm/nativeconfirm.js
deleted file mode 100644
index 7d72bc5ea..000000000
--- a/src/components/confirm/nativeconfirm.js
+++ /dev/null
@@ -1,27 +0,0 @@
-define([], function () {
- 'use strict';
-
- function replaceAll(str, find, replace) {
-
- return str.split(find).join(replace);
- }
-
- return function (options) {
-
- if (typeof options === 'string') {
- options = {
- title: '',
- text: options
- };
- }
-
- var text = replaceAll(options.text || '', '
', '\n');
- var result = confirm(text);
-
- if (result) {
- return Promise.resolve();
- } else {
- return Promise.reject();
- }
- };
-});
diff --git a/src/components/prompt/nativeprompt.js b/src/components/prompt/nativeprompt.js
deleted file mode 100644
index ba7f1a9a4..000000000
--- a/src/components/prompt/nativeprompt.js
+++ /dev/null
@@ -1,28 +0,0 @@
-define([], function () {
- 'use strict';
-
- function replaceAll(str, find, replace) {
-
- return str.split(find).join(replace);
- }
-
- return function (options) {
-
- if (typeof options === 'string') {
- options = {
- label: '',
- text: options
- };
- }
-
- var label = replaceAll(options.label || '', '
', '\n');
-
- var result = prompt(label, options.text || '');
-
- if (result) {
- return Promise.resolve(result);
- } else {
- return Promise.reject(result);
- }
- };
-});
diff --git a/src/components/prompt/prompt.js b/src/components/prompt/prompt.js
index 8f4f839ea..32fadb811 100644
--- a/src/components/prompt/prompt.js
+++ b/src/components/prompt/prompt.js
@@ -1,6 +1,10 @@
-define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'dom', 'require', 'material-icons', 'emby-button', 'paper-icon-button-light', 'emby-input', 'formDialogStyle'], function (dialogHelper, layoutManager, scrollHelper, globalize, dom, require) {
+define(["browser", 'dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'dom', 'require', 'material-icons', 'emby-button', 'paper-icon-button-light', 'emby-input', 'formDialogStyle'], function(browser, dialogHelper, layoutManager, scrollHelper, globalize, dom, require) {
'use strict';
+ function replaceAll(str, find, replace) {
+ return str.split(find).join(replace);
+ }
+
function setInputProperties(dlg, options) {
var txtInput = dlg.querySelector('#txtInput');
@@ -13,7 +17,6 @@ define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'dom', 're
}
function showDialog(options, template) {
-
var dialogOptions = {
removeOnClose: true,
scrollY: false
@@ -71,7 +74,6 @@ define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'dom', 're
dlg.style.minWidth = (Math.min(400, dom.getWindowSize().innerWidth - 50)) + 'px';
return dialogHelper.open(dlg).then(function () {
-
if (layoutManager.tv) {
scrollHelper.centerFocus.off(dlg.querySelector('.formDialogContent'), false);
}
@@ -86,19 +88,37 @@ define(['dialogHelper', 'layoutManager', 'scrollHelper', 'globalize', 'dom', 're
});
}
- return function (options) {
+ if ((browser.tv || browser.xboxOne) && window.confirm) {
+ return function (options) {
+ if (typeof options === 'string') {
+ options = {
+ label: '',
+ text: options
+ };
+ }
- return new Promise(function (resolve, reject) {
- require(['text!./prompt.template.html'], function (template) {
+ var label = replaceAll(options.label || '', '
', '\n');
+ var result = prompt(label, options.text || '');
- if (typeof options === 'string') {
- options = {
- title: '',
- text: options
- };
- }
- showDialog(options, template).then(resolve, reject);
+ if (result) {
+ return Promise.resolve(result);
+ } else {
+ return Promise.reject(result);
+ }
+ };
+ } else {
+ return function (options) {
+ return new Promise(function (resolve, reject) {
+ require(['text!./prompt.template.html'], function (template) {
+ if (typeof options === 'string') {
+ options = {
+ title: '',
+ text: options
+ };
+ }
+ showDialog(options, template).then(resolve, reject);
+ });
});
- });
- };
+ };
+ }
});
diff --git a/src/scripts/site.js b/src/scripts/site.js
index 0ab8e9a1f..6739e3cd5 100644
--- a/src/scripts/site.js
+++ b/src/scripts/site.js
@@ -355,39 +355,6 @@ var AppInfo = {};
return headroom;
}
- function getCastSenderApiLoader() {
- var ccLoaded = false;
- return {
- load: function () {
- if (ccLoaded) {
- return Promise.resolve();
- }
-
- return new Promise(function (resolve, reject) {
- var fileref = document.createElement("script");
- fileref.setAttribute("type", "text/javascript");
-
- fileref.onload = function () {
- ccLoaded = true;
- resolve();
- };
-
- fileref.setAttribute("src", "https://www.gstatic.com/cv/js/sender/v1/cast_sender.js");
- document.querySelector("head").appendChild(fileref);
- });
- }
- };
- }
-
- function getDummyCastSenderApiLoader() {
- return {
- load: function () {
- window.chrome = window.chrome || {};
- return Promise.resolve();
- }
- };
- }
-
function createSharedAppFooter(appFooter) {
return new appFooter({});
}
@@ -439,28 +406,16 @@ var AppInfo = {};
defineResizeObserver();
define("dialog", [componentsPath + "/dialog/dialog"], returnFirstDependency);
- if (preferNativeAlerts && window.confirm) {
- define("confirm", [componentsPath + "/confirm/nativeconfirm"], returnFirstDependency);
- } else {
- define("confirm", [componentsPath + "/confirm/confirm"], returnFirstDependency);
- }
+ define("confirm", [componentsPath + "/confirm/confirm"], returnFirstDependency);
- if ((preferNativeAlerts || browser.xboxOne) && window.confirm) {
- define("prompt", [componentsPath + "/prompt/nativeprompt"], returnFirstDependency);
- } else {
- define("prompt", [componentsPath + "/prompt/prompt"], returnFirstDependency);
- }
+ define("prompt", [componentsPath + "/prompt/prompt"], returnFirstDependency);
define("loading", [componentsPath + "/loading/loading"], returnFirstDependency);
define("multi-download", [componentsPath + "/multidownload"], returnFirstDependency);
define("fileDownloader", [componentsPath + "/filedownloader"], returnFirstDependency);
define("localassetmanager", [bowerPath + "/apiclient/localassetmanager"], returnFirstDependency);
- if ("cordova" === self.appMode || "android" === self.appMode) {
- define("castSenderApiLoader", [], getDummyCastSenderApiLoader);
- } else {
- define("castSenderApiLoader", [], getCastSenderApiLoader);
- }
+ define("castSenderApiLoader", [componentsPath + "castSenderApi"], returnFirstDependency);
define("transfermanager", [bowerPath + "/apiclient/sync/transfermanager"], returnFirstDependency);
define("filerepository", [bowerPath + "/apiclient/sync/filerepository"], returnFirstDependency);