Merge pull request #1776 from MrTimscampi/focus-prevent-scroll
Remove focus-prevent-scroll, migrate gamepadtokey and chromecastHelper to ES6
This commit is contained in:
commit
fb55fe9e7d
4 changed files with 524 additions and 527 deletions
|
@ -320,6 +320,7 @@
|
||||||
"src/plugins/backdropScreensaver/plugin.js",
|
"src/plugins/backdropScreensaver/plugin.js",
|
||||||
"src/plugins/bookPlayer/plugin.js",
|
"src/plugins/bookPlayer/plugin.js",
|
||||||
"src/plugins/bookPlayer/tableOfContents.js",
|
"src/plugins/bookPlayer/tableOfContents.js",
|
||||||
|
"src/plugins/chromecastPlayer/chromecastHelper.js",
|
||||||
"src/plugins/photoPlayer/plugin.js",
|
"src/plugins/photoPlayer/plugin.js",
|
||||||
"src/plugins/youtubePlayer/plugin.js",
|
"src/plugins/youtubePlayer/plugin.js",
|
||||||
"src/scripts/alphanumericshortcuts.js",
|
"src/scripts/alphanumericshortcuts.js",
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
// TODO: Move to external library (https://github.com/calvellido/focus-options-polyfill)
|
|
||||||
// Polyfill to add support for preventScroll by focus function
|
// Polyfill to add support for preventScroll by focus function
|
||||||
|
|
||||||
if (HTMLElement.prototype.nativeFocus === undefined) {
|
if (HTMLElement.prototype.nativeFocus === undefined) {
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
define(['events'], function (events) {
|
import events from 'events';
|
||||||
'use strict';
|
|
||||||
|
|
||||||
// LinkParser
|
// LinkParser
|
||||||
//
|
//
|
||||||
|
@ -36,15 +35,15 @@ define(['events'], function (events) {
|
||||||
// 5) It wasn't as smart as it could have been about what should be part of a
|
// 5) It wasn't as smart as it could have been about what should be part of a
|
||||||
// URL and what should be part of human language.
|
// URL and what should be part of human language.
|
||||||
|
|
||||||
var protocols = '(?:(?:http|https|rtsp|ftp):\\/\\/)';
|
const protocols = '(?:(?:http|https|rtsp|ftp):\\/\\/)';
|
||||||
var credentials = "(?:(?:[a-z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-f0-9]{2})){1,64}" // username (1-64 normal or url escaped characters)
|
const credentials = "(?:(?:[a-z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-f0-9]{2})){1,64}" // username (1-64 normal or url escaped characters)
|
||||||
+ "(?:\\:(?:[a-z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-f0-9]{2})){1,25})?" // followed by optional password (: + 1-25 normal or url escaped characters)
|
+ "(?:\\:(?:[a-z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-f0-9]{2})){1,25})?" // followed by optional password (: + 1-25 normal or url escaped characters)
|
||||||
+ '\\@)';
|
+ '\\@)';
|
||||||
|
|
||||||
// IPv6 Regex http://forums.intermapper.com/viewtopic.php?t=452
|
// IPv6 Regex http://forums.intermapper.com/viewtopic.php?t=452
|
||||||
// by Dartware, LLC is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License
|
// by Dartware, LLC is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License
|
||||||
// http://intermapper.com/
|
// http://intermapper.com/
|
||||||
var ipv6 = '('
|
const ipv6 = '('
|
||||||
+ '(([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))'
|
+ '(([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))'
|
||||||
+ '|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))'
|
+ '|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))'
|
||||||
+ '|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))'
|
+ '|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))'
|
||||||
|
@ -55,13 +54,13 @@ define(['events'], function (events) {
|
||||||
+ '|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))'
|
+ '|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))'
|
||||||
+ ')(%.+)?';
|
+ ')(%.+)?';
|
||||||
|
|
||||||
var ipv4 = '(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.'
|
const ipv4 = '(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.'
|
||||||
+ '(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.'
|
+ '(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.'
|
||||||
+ '(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.'
|
+ '(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.'
|
||||||
+ '(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])';
|
+ '(?:25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[0-9])';
|
||||||
|
|
||||||
// This would have been a lot cleaner if JS RegExp supported conditionals...
|
// This would have been a lot cleaner if JS RegExp supported conditionals...
|
||||||
var linkRegExpString =
|
const linkRegExpString =
|
||||||
|
|
||||||
// begin match for protocol / username / password / host
|
// begin match for protocol / username / password / host
|
||||||
'(?:'
|
'(?:'
|
||||||
|
@ -112,9 +111,9 @@ define(['events'], function (events) {
|
||||||
+ ')';
|
+ ')';
|
||||||
|
|
||||||
// regex = XRegExp(regex,'gi');
|
// regex = XRegExp(regex,'gi');
|
||||||
var linkRegExp = RegExp(linkRegExpString, 'gi');
|
const linkRegExp = RegExp(linkRegExpString, 'gi');
|
||||||
|
|
||||||
var protocolRegExp = RegExp('^' + protocols, 'i');
|
const protocolRegExp = RegExp('^' + protocols, 'i');
|
||||||
|
|
||||||
// if url doesn't begin with a known protocol, add http by default
|
// if url doesn't begin with a known protocol, add http by default
|
||||||
function ensureProtocol(url) {
|
function ensureProtocol(url) {
|
||||||
|
@ -125,18 +124,18 @@ define(['events'], function (events) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// look for links in the text
|
// look for links in the text
|
||||||
var LinkParser = {
|
const LinkParser = {
|
||||||
parse: function (text) {
|
parse: function (text) {
|
||||||
var links = [];
|
const links = [];
|
||||||
var match;
|
let match;
|
||||||
|
|
||||||
// eslint-disable-next-line no-cond-assign
|
// eslint-disable-next-line no-cond-assign
|
||||||
while (match = linkRegExp.exec(text)) {
|
while (match = linkRegExp.exec(text)) {
|
||||||
console.debug(match);
|
console.debug(match);
|
||||||
var txt = match[0];
|
const txt = match[0];
|
||||||
var pos = match.index;
|
const pos = match.index;
|
||||||
var len = txt.length;
|
const len = txt.length;
|
||||||
var url = ensureProtocol(text);
|
const url = ensureProtocol(text);
|
||||||
links.push({ 'pos': pos, 'text': txt, 'len': len, 'url': url });
|
links.push({ 'pos': pos, 'text': txt, 'len': len, 'url': url });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,35 +147,37 @@ define(['events'], function (events) {
|
||||||
window.LinkParser = LinkParser;
|
window.LinkParser = LinkParser;
|
||||||
})();
|
})();
|
||||||
|
|
||||||
var cache = {};
|
let cache = {};
|
||||||
|
|
||||||
|
// TODO: Replace with isIP (https://www.npmjs.com/package/is-ip)
|
||||||
function isValidIpAddress(address) {
|
function isValidIpAddress(address) {
|
||||||
var links = LinkParser.parse(address);
|
const links = LinkParser.parse(address);
|
||||||
|
|
||||||
return links.length == 1;
|
return links.length == 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: Add IPv6 support. Potentially replace with isLocalhost (https://www.npmjs.com/package/is-localhost-ip)
|
||||||
function isLocalIpAddress(address) {
|
function isLocalIpAddress(address) {
|
||||||
address = address.toLowerCase();
|
address = address.toLowerCase();
|
||||||
|
|
||||||
if (address.indexOf('127.0.0.1') !== -1) {
|
if (address.includes('127.0.0.1')) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (address.indexOf('localhost') !== -1) {
|
if (address.includes('localhost')) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getServerAddress(apiClient) {
|
export function getServerAddress(apiClient) {
|
||||||
var serverAddress = apiClient.serverAddress();
|
const serverAddress = apiClient.serverAddress();
|
||||||
|
|
||||||
if (isValidIpAddress(serverAddress) && !isLocalIpAddress(serverAddress)) {
|
if (isValidIpAddress(serverAddress) && !isLocalIpAddress(serverAddress)) {
|
||||||
return Promise.resolve(serverAddress);
|
return Promise.resolve(serverAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
var cachedValue = getCachedValue(serverAddress);
|
const cachedValue = getCachedValue(serverAddress);
|
||||||
if (cachedValue) {
|
if (cachedValue) {
|
||||||
return Promise.resolve(cachedValue);
|
return Promise.resolve(cachedValue);
|
||||||
}
|
}
|
||||||
|
@ -184,7 +185,7 @@ define(['events'], function (events) {
|
||||||
return apiClient.getEndpointInfo().then(function (endpoint) {
|
return apiClient.getEndpointInfo().then(function (endpoint) {
|
||||||
if (endpoint.IsInNetwork) {
|
if (endpoint.IsInNetwork) {
|
||||||
return apiClient.getPublicSystemInfo().then(function (info) {
|
return apiClient.getPublicSystemInfo().then(function (info) {
|
||||||
var localAddress = info.LocalAddress;
|
let localAddress = info.LocalAddress;
|
||||||
if (!localAddress) {
|
if (!localAddress) {
|
||||||
console.debug('No valid local address returned, defaulting to external one');
|
console.debug('No valid local address returned, defaulting to external one');
|
||||||
localAddress = serverAddress;
|
localAddress = serverAddress;
|
||||||
|
@ -211,7 +212,7 @@ define(['events'], function (events) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function getCachedValue(key) {
|
function getCachedValue(key) {
|
||||||
var obj = cache[key];
|
const obj = cache[key];
|
||||||
|
|
||||||
if (obj && (new Date().getTime() - obj.time) < 180000) {
|
if (obj && (new Date().getTime() - obj.time) < 180000) {
|
||||||
return obj.value;
|
return obj.value;
|
||||||
|
@ -223,7 +224,6 @@ define(['events'], function (events) {
|
||||||
events.on(ConnectionManager, 'localusersignedin', clearCache);
|
events.on(ConnectionManager, 'localusersignedin', clearCache);
|
||||||
events.on(ConnectionManager, 'localusersignedout', clearCache);
|
events.on(ConnectionManager, 'localusersignedout', clearCache);
|
||||||
|
|
||||||
return {
|
export default {
|
||||||
getServerAddress: getServerAddress
|
getServerAddress: getServerAddress
|
||||||
};
|
};
|
||||||
});
|
|
||||||
|
|
|
@ -19,10 +19,8 @@
|
||||||
// # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
// # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
// # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
// # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
// # THE SOFTWARE.
|
// # THE SOFTWARE.
|
||||||
require(['apphost'], function (appHost) {
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
appHost = appHost.default || appHost;
|
import appHost from 'apphost';
|
||||||
|
|
||||||
var _GAMEPAD_A_BUTTON_INDEX = 0;
|
var _GAMEPAD_A_BUTTON_INDEX = 0;
|
||||||
var _GAMEPAD_B_BUTTON_INDEX = 1;
|
var _GAMEPAD_B_BUTTON_INDEX = 1;
|
||||||
|
@ -401,4 +399,3 @@ require(['apphost'], function (appHost) {
|
||||||
// and provide input to the DOM navigator.getGamepads API.
|
// and provide input to the DOM navigator.getGamepads API.
|
||||||
window.navigator.gamepadInputEmulation = 'gamepad';
|
window.navigator.gamepadInputEmulation = 'gamepad';
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue