Beautified all js in web dashboard
This commit is contained in:
+393
-2
File diff suppressed because one or more lines are too long
+17
-1
@@ -1 +1,17 @@
|
||||
!function(factory){"use strict";"function"==typeof define&&define.amd?define(["jquery"],factory):factory(jQuery)}(function($){"use strict";$.fn.sortable=function(options){var retVal,args=arguments;return this.each(function(){var $el=$(this),sortable=$el.data("sortable");if(sortable||!(options instanceof Object)&&options||(sortable=new Sortable(this,options),$el.data("sortable",sortable)),sortable){if("widget"===options)return sortable;"destroy"===options?(sortable.destroy(),$el.removeData("sortable")):"function"==typeof sortable[options]?retVal=sortable[options].apply(sortable,[].slice.call(args,1)):options in sortable.options&&(retVal=sortable.option.apply(sortable,args))}}),void 0===retVal?this:retVal}});
|
||||
! function(factory) {
|
||||
"use strict";
|
||||
"function" == typeof define && define.amd ? define(["jquery"], factory) : factory(jQuery)
|
||||
}(function($) {
|
||||
"use strict";
|
||||
$.fn.sortable = function(options) {
|
||||
var retVal, args = arguments;
|
||||
return this.each(function() {
|
||||
var $el = $(this),
|
||||
sortable = $el.data("sortable");
|
||||
if (sortable || !(options instanceof Object) && options || (sortable = new Sortable(this, options), $el.data("sortable", sortable)), sortable) {
|
||||
if ("widget" === options) return sortable;
|
||||
"destroy" === options ? (sortable.destroy(), $el.removeData("sortable")) : "function" == typeof sortable[options] ? retVal = sortable[options].apply(sortable, [].slice.call(args, 1)) : options in sortable.options && (retVal = sortable.option.apply(sortable, args))
|
||||
}
|
||||
}), void 0 === retVal ? this : retVal
|
||||
}
|
||||
});
|
||||
+97
-1
@@ -1 +1,97 @@
|
||||
!function(factory){"use strict";if("function"==typeof define&&define.amd)define(["knockout"],factory);else if("function"==typeof require&&"object"==typeof exports&&"object"==typeof module){var ko=require("knockout");factory(ko)}else factory(window.ko)}(function(ko){"use strict";var init=function(element,valueAccessor,allBindings,viewModel,bindingContext,sortableOptions){var options=buildOptions(valueAccessor,sortableOptions);["onStart","onEnd","onRemove","onAdd","onUpdate","onSort","onFilter"].forEach(function(e){(options[e]||eventHandlers[e])&&(options[e]=function(eventType,parentVM,parentBindings,handler,e){var itemVM=ko.dataFor(e.item),bindings=ko.utils.peekObservable(parentBindings()),bindingHandlerBinding=bindings.sortable||bindings.draggable,collection=bindingHandlerBinding.collection||bindingHandlerBinding.foreach;handler&&handler(e,itemVM,parentVM,collection,bindings),eventHandlers[eventType]&&eventHandlers[eventType](e,itemVM,parentVM,collection,bindings)}.bind(void 0,e,viewModel,allBindings,options[e]))});var sortableElement=Sortable.create(element,options);return ko.utils.domNodeDisposal.addDisposeCallback(element,function(){sortableElement.destroy()}),ko.bindingHandlers.template.init(element,valueAccessor)},update=function(element,valueAccessor,allBindings,viewModel,bindingContext,sortableOptions){return ko.bindingHandlers.template.update(element,valueAccessor,allBindings,viewModel,bindingContext)},eventHandlers=function(handlers){var moveOperations=[],tryMoveOperation=function(e,itemVM,parentVM,collection,parentBindings){var currentOperation={event:e,itemVM:itemVM,parentVM:parentVM,collection:collection,parentBindings:parentBindings},existingOperation=moveOperations.filter(function(op){return op.itemVM===currentOperation.itemVM})[0];if(existingOperation){moveOperations.splice(moveOperations.indexOf(existingOperation),1);var removeOperation="remove"===currentOperation.event.type?currentOperation:existingOperation,addOperation="add"===currentOperation.event.type?currentOperation:existingOperation;moveItem(itemVM,removeOperation.collection,addOperation.collection,addOperation.event.clone,addOperation.event)}else moveOperations.push(currentOperation)},moveItem=function(itemVM,from,to,clone,e){var fromArray=from(),originalIndex=fromArray.indexOf(itemVM),newIndex=e.newIndex;e.item.previousElementSibling&&(newIndex=fromArray.indexOf(ko.dataFor(e.item.previousElementSibling)),originalIndex>newIndex&&(newIndex+=1)),e.item.parentNode.removeChild(e.item),fromArray.splice(originalIndex,1),from.valueHasMutated(),clone&&from!==to&&(fromArray.splice(originalIndex,0,itemVM),from.valueHasMutated()),to().splice(newIndex,0,itemVM),to.valueHasMutated()};return handlers.onRemove=tryMoveOperation,handlers.onAdd=tryMoveOperation,handlers.onUpdate=function(e,itemVM,parentVM,collection,parentBindings){moveItem(itemVM,collection,collection,!1,e)},handlers}({}),buildOptions=function(bindingOptions,options){var merge=function(into,from){for(var prop in from)"[object Object]"===Object.prototype.toString.call(from[prop])?("[object Object]"!==Object.prototype.toString.call(into[prop])&&(into[prop]={}),into[prop]=merge(into[prop],from[prop])):into[prop]=from[prop];return into},unwrappedOptions=ko.utils.peekObservable(bindingOptions()).options||{};return options=merge({},options),unwrappedOptions.group&&"[object Object]"!==Object.prototype.toString.call(unwrappedOptions.group)&&(unwrappedOptions.group={name:unwrappedOptions.group}),merge(options,unwrappedOptions)};ko.bindingHandlers.draggable={sortableOptions:{group:{pull:"clone",put:!1},sort:!1},init:function(element,valueAccessor,allBindings,viewModel,bindingContext){return init(element,valueAccessor,allBindings,viewModel,0,ko.bindingHandlers.draggable.sortableOptions)},update:function(element,valueAccessor,allBindings,viewModel,bindingContext){return update(element,valueAccessor,allBindings,viewModel,bindingContext,ko.bindingHandlers.draggable.sortableOptions)}},ko.bindingHandlers.sortable={sortableOptions:{group:{pull:!0,put:!0}},init:function(element,valueAccessor,allBindings,viewModel,bindingContext){return init(element,valueAccessor,allBindings,viewModel,0,ko.bindingHandlers.sortable.sortableOptions)},update:function(element,valueAccessor,allBindings,viewModel,bindingContext){return update(element,valueAccessor,allBindings,viewModel,bindingContext,ko.bindingHandlers.sortable.sortableOptions)}}});
|
||||
! function(factory) {
|
||||
"use strict";
|
||||
if ("function" == typeof define && define.amd) define(["knockout"], factory);
|
||||
else if ("function" == typeof require && "object" == typeof exports && "object" == typeof module) {
|
||||
var ko = require("knockout");
|
||||
factory(ko)
|
||||
} else factory(window.ko)
|
||||
}(function(ko) {
|
||||
"use strict";
|
||||
var init = function(element, valueAccessor, allBindings, viewModel, bindingContext, sortableOptions) {
|
||||
var options = buildOptions(valueAccessor, sortableOptions);
|
||||
["onStart", "onEnd", "onRemove", "onAdd", "onUpdate", "onSort", "onFilter"].forEach(function(e) {
|
||||
(options[e] || eventHandlers[e]) && (options[e] = function(eventType, parentVM, parentBindings, handler, e) {
|
||||
var itemVM = ko.dataFor(e.item),
|
||||
bindings = ko.utils.peekObservable(parentBindings()),
|
||||
bindingHandlerBinding = bindings.sortable || bindings.draggable,
|
||||
collection = bindingHandlerBinding.collection || bindingHandlerBinding.foreach;
|
||||
handler && handler(e, itemVM, parentVM, collection, bindings), eventHandlers[eventType] && eventHandlers[eventType](e, itemVM, parentVM, collection, bindings)
|
||||
}.bind(void 0, e, viewModel, allBindings, options[e]))
|
||||
});
|
||||
var sortableElement = Sortable.create(element, options);
|
||||
return ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
|
||||
sortableElement.destroy()
|
||||
}), ko.bindingHandlers.template.init(element, valueAccessor)
|
||||
},
|
||||
update = function(element, valueAccessor, allBindings, viewModel, bindingContext, sortableOptions) {
|
||||
return ko.bindingHandlers.template.update(element, valueAccessor, allBindings, viewModel, bindingContext)
|
||||
},
|
||||
eventHandlers = function(handlers) {
|
||||
var moveOperations = [],
|
||||
tryMoveOperation = function(e, itemVM, parentVM, collection, parentBindings) {
|
||||
var currentOperation = {
|
||||
event: e,
|
||||
itemVM: itemVM,
|
||||
parentVM: parentVM,
|
||||
collection: collection,
|
||||
parentBindings: parentBindings
|
||||
},
|
||||
existingOperation = moveOperations.filter(function(op) {
|
||||
return op.itemVM === currentOperation.itemVM
|
||||
})[0];
|
||||
if (existingOperation) {
|
||||
moveOperations.splice(moveOperations.indexOf(existingOperation), 1);
|
||||
var removeOperation = "remove" === currentOperation.event.type ? currentOperation : existingOperation,
|
||||
addOperation = "add" === currentOperation.event.type ? currentOperation : existingOperation;
|
||||
moveItem(itemVM, removeOperation.collection, addOperation.collection, addOperation.event.clone, addOperation.event)
|
||||
} else moveOperations.push(currentOperation)
|
||||
},
|
||||
moveItem = function(itemVM, from, to, clone, e) {
|
||||
var fromArray = from(),
|
||||
originalIndex = fromArray.indexOf(itemVM),
|
||||
newIndex = e.newIndex;
|
||||
e.item.previousElementSibling && (newIndex = fromArray.indexOf(ko.dataFor(e.item.previousElementSibling)), originalIndex > newIndex && (newIndex += 1)), e.item.parentNode.removeChild(e.item), fromArray.splice(originalIndex, 1), from.valueHasMutated(), clone && from !== to && (fromArray.splice(originalIndex, 0, itemVM), from.valueHasMutated()), to().splice(newIndex, 0, itemVM), to.valueHasMutated()
|
||||
};
|
||||
return handlers.onRemove = tryMoveOperation, handlers.onAdd = tryMoveOperation, handlers.onUpdate = function(e, itemVM, parentVM, collection, parentBindings) {
|
||||
moveItem(itemVM, collection, collection, !1, e)
|
||||
}, handlers
|
||||
}({}),
|
||||
buildOptions = function(bindingOptions, options) {
|
||||
var merge = function(into, from) {
|
||||
for (var prop in from) "[object Object]" === Object.prototype.toString.call(from[prop]) ? ("[object Object]" !== Object.prototype.toString.call(into[prop]) && (into[prop] = {}), into[prop] = merge(into[prop], from[prop])) : into[prop] = from[prop];
|
||||
return into
|
||||
},
|
||||
unwrappedOptions = ko.utils.peekObservable(bindingOptions()).options || {};
|
||||
return options = merge({}, options), unwrappedOptions.group && "[object Object]" !== Object.prototype.toString.call(unwrappedOptions.group) && (unwrappedOptions.group = {
|
||||
name: unwrappedOptions.group
|
||||
}), merge(options, unwrappedOptions)
|
||||
};
|
||||
ko.bindingHandlers.draggable = {
|
||||
sortableOptions: {
|
||||
group: {
|
||||
pull: "clone",
|
||||
put: !1
|
||||
},
|
||||
sort: !1
|
||||
},
|
||||
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
|
||||
return init(element, valueAccessor, allBindings, viewModel, 0, ko.bindingHandlers.draggable.sortableOptions)
|
||||
},
|
||||
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
|
||||
return update(element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.draggable.sortableOptions)
|
||||
}
|
||||
}, ko.bindingHandlers.sortable = {
|
||||
sortableOptions: {
|
||||
group: {
|
||||
pull: !0,
|
||||
put: !0
|
||||
}
|
||||
},
|
||||
init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
|
||||
return init(element, valueAccessor, allBindings, viewModel, 0, ko.bindingHandlers.sortable.sortableOptions)
|
||||
},
|
||||
update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
|
||||
return update(element, valueAccessor, allBindings, viewModel, bindingContext, ko.bindingHandlers.sortable.sortableOptions)
|
||||
}
|
||||
}
|
||||
});
|
||||
+87
-1
@@ -1 +1,87 @@
|
||||
!function(factory){"use strict";"function"==typeof define&&define.amd?define(["angular","./Sortable"],factory):"function"==typeof require&&"object"==typeof exports&&"object"==typeof module?(require("angular"),factory(angular,require("./Sortable")),module.exports="ng-sortable"):window.angular&&window.Sortable&&factory(angular,Sortable)}(function(angular,Sortable){"use strict";var expando="Sortable:ng-sortable";angular.module("ng-sortable",[]).constant("ngSortableVersion","0.4.0").constant("ngSortableConfig",{}).directive("ngSortable",["$parse","ngSortableConfig",function($parse,ngSortableConfig){var removed,nextSibling,getSourceFactory=function(el,scope){var ngRepeat=[].filter.call(el.childNodes,function(node){return 8===node.nodeType&&-1!==node.nodeValue.indexOf("ngRepeat:")})[0];if(!ngRepeat)return function(){return null};ngRepeat=ngRepeat.nodeValue.match(/ngRepeat:\s*(?:\(.*?,\s*)?([^\s)]+)[\s)]+in\s+([^\s|]+)/);var itemsExpr=$parse(ngRepeat[2]);return function(){return itemsExpr(scope.$parent)||[]}};return{restrict:"AC",scope:{ngSortable:"=?"},link:function(scope,$el){function _emitEvent(evt,item){var name="on"+evt.type.charAt(0).toUpperCase()+evt.type.substr(1),source=getSource();options[name]&&options[name]({model:item||source[evt.newIndex],models:source,oldIndex:evt.oldIndex,newIndex:evt.newIndex})}function _sync(evt){var items=getSource();if(items){var oldIndex=evt.oldIndex,newIndex=evt.newIndex;if(el!==evt.from){var prevItems=evt.from[expando]();removed=prevItems[oldIndex],evt.clone?(removed=angular.copy(removed),prevItems.splice(Sortable.utils.index(evt.clone),0,prevItems.splice(oldIndex,1)[0]),evt.from.removeChild(evt.clone)):prevItems.splice(oldIndex,1),items.splice(newIndex,0,removed),evt.from.insertBefore(evt.item,nextSibling)}else items.splice(newIndex,0,items.splice(oldIndex,1)[0]);scope.$apply()}}var sortable,el=$el[0],options=angular.extend(scope.ngSortable||{},ngSortableConfig),watchers=[],getSource=getSourceFactory(el,scope);el[expando]=getSource,sortable=Sortable.create(el,Object.keys(options).reduce(function(opts,name){return opts[name]=opts[name]||options[name],opts},{onStart:function(evt){nextSibling=evt.item.nextSibling,_emitEvent(evt),scope.$apply()},onEnd:function(evt){_emitEvent(evt,removed),scope.$apply()},onAdd:function(evt){_sync(evt),_emitEvent(evt,removed),scope.$apply()},onUpdate:function(evt){_sync(evt),_emitEvent(evt)},onRemove:function(evt){_emitEvent(evt,removed)},onSort:function(evt){_emitEvent(evt)}})),$el.on("$destroy",function(){angular.forEach(watchers,function(unwatch){unwatch()}),sortable.destroy(),el[expando]=null,el=null,watchers=null,sortable=null,nextSibling=null}),angular.forEach(["sort","disabled","draggable","handle","animation","group","ghostClass","filter","onStart","onEnd","onAdd","onUpdate","onRemove","onSort"],function(name){watchers.push(scope.$watch("ngSortable."+name,function(value){void 0!==value&&(options[name]=value,/^on[A-Z]/.test(name)||sortable.option(name,value))}))})}}}])});
|
||||
! function(factory) {
|
||||
"use strict";
|
||||
"function" == typeof define && define.amd ? define(["angular", "./Sortable"], factory) : "function" == typeof require && "object" == typeof exports && "object" == typeof module ? (require("angular"), factory(angular, require("./Sortable")), module.exports = "ng-sortable") : window.angular && window.Sortable && factory(angular, Sortable)
|
||||
}(function(angular, Sortable) {
|
||||
"use strict";
|
||||
var expando = "Sortable:ng-sortable";
|
||||
angular.module("ng-sortable", []).constant("ngSortableVersion", "0.4.0").constant("ngSortableConfig", {}).directive("ngSortable", ["$parse", "ngSortableConfig", function($parse, ngSortableConfig) {
|
||||
var removed, nextSibling, getSourceFactory = function(el, scope) {
|
||||
var ngRepeat = [].filter.call(el.childNodes, function(node) {
|
||||
return 8 === node.nodeType && -1 !== node.nodeValue.indexOf("ngRepeat:")
|
||||
})[0];
|
||||
if (!ngRepeat) return function() {
|
||||
return null
|
||||
};
|
||||
ngRepeat = ngRepeat.nodeValue.match(/ngRepeat:\s*(?:\(.*?,\s*)?([^\s)]+)[\s)]+in\s+([^\s|]+)/);
|
||||
var itemsExpr = $parse(ngRepeat[2]);
|
||||
return function() {
|
||||
return itemsExpr(scope.$parent) || []
|
||||
}
|
||||
};
|
||||
return {
|
||||
restrict: "AC",
|
||||
scope: {
|
||||
ngSortable: "=?"
|
||||
},
|
||||
link: function(scope, $el) {
|
||||
function _emitEvent(evt, item) {
|
||||
var name = "on" + evt.type.charAt(0).toUpperCase() + evt.type.substr(1),
|
||||
source = getSource();
|
||||
options[name] && options[name]({
|
||||
model: item || source[evt.newIndex],
|
||||
models: source,
|
||||
oldIndex: evt.oldIndex,
|
||||
newIndex: evt.newIndex
|
||||
})
|
||||
}
|
||||
|
||||
function _sync(evt) {
|
||||
var items = getSource();
|
||||
if (items) {
|
||||
var oldIndex = evt.oldIndex,
|
||||
newIndex = evt.newIndex;
|
||||
if (el !== evt.from) {
|
||||
var prevItems = evt.from[expando]();
|
||||
removed = prevItems[oldIndex], evt.clone ? (removed = angular.copy(removed), prevItems.splice(Sortable.utils.index(evt.clone), 0, prevItems.splice(oldIndex, 1)[0]), evt.from.removeChild(evt.clone)) : prevItems.splice(oldIndex, 1), items.splice(newIndex, 0, removed), evt.from.insertBefore(evt.item, nextSibling)
|
||||
} else items.splice(newIndex, 0, items.splice(oldIndex, 1)[0]);
|
||||
scope.$apply()
|
||||
}
|
||||
}
|
||||
var sortable, el = $el[0],
|
||||
options = angular.extend(scope.ngSortable || {}, ngSortableConfig),
|
||||
watchers = [],
|
||||
getSource = getSourceFactory(el, scope);
|
||||
el[expando] = getSource, sortable = Sortable.create(el, Object.keys(options).reduce(function(opts, name) {
|
||||
return opts[name] = opts[name] || options[name], opts
|
||||
}, {
|
||||
onStart: function(evt) {
|
||||
nextSibling = evt.item.nextSibling, _emitEvent(evt), scope.$apply()
|
||||
},
|
||||
onEnd: function(evt) {
|
||||
_emitEvent(evt, removed), scope.$apply()
|
||||
},
|
||||
onAdd: function(evt) {
|
||||
_sync(evt), _emitEvent(evt, removed), scope.$apply()
|
||||
},
|
||||
onUpdate: function(evt) {
|
||||
_sync(evt), _emitEvent(evt)
|
||||
},
|
||||
onRemove: function(evt) {
|
||||
_emitEvent(evt, removed)
|
||||
},
|
||||
onSort: function(evt) {
|
||||
_emitEvent(evt)
|
||||
}
|
||||
})), $el.on("$destroy", function() {
|
||||
angular.forEach(watchers, function(unwatch) {
|
||||
unwatch()
|
||||
}), sortable.destroy(), el[expando] = null, el = null, watchers = null, sortable = null, nextSibling = null
|
||||
}), angular.forEach(["sort", "disabled", "draggable", "handle", "animation", "group", "ghostClass", "filter", "onStart", "onEnd", "onAdd", "onUpdate", "onRemove", "onSort"], function(name) {
|
||||
watchers.push(scope.$watch("ngSortable." + name, function(value) {
|
||||
void 0 !== value && (options[name] = value, /^on[A-Z]/.test(name) || sortable.option(name, value))
|
||||
}))
|
||||
})
|
||||
}
|
||||
}
|
||||
}])
|
||||
});
|
||||
@@ -1 +1,71 @@
|
||||
!function(factory){"use strict";"undefined"!=typeof module&&void 0!==module.exports?module.exports=factory(require("./Sortable")):"function"==typeof define&&define.amd?define(["./Sortable"],factory):window.SortableMixin=factory(Sortable)}(function(Sortable){"use strict";function _getModelName(component){return component.sortableOptions&&component.sortableOptions.model||_defaultOptions.model}function _getModelItems(component){var name=_getModelName(component);return(component.state&&component.state[name]||component.props[name]).slice()}function _extend(dst,src){for(var key in src)src.hasOwnProperty(key)&&(dst[key]=src[key]);return dst}var _nextSibling,_activeComponent,_defaultOptions={ref:"list",model:"items",animation:100,onStart:"handleStart",onEnd:"handleEnd",onAdd:"handleAdd",onUpdate:"handleUpdate",onRemove:"handleRemove",onSort:"handleSort",onFilter:"handleFilter",onMove:"handleMove"};return{sortableMixinVersion:"0.1.1",_sortableInstance:null,componentDidMount:function(){var DOMNode,options=_extend(_extend({},_defaultOptions),this.sortableOptions||{}),copyOptions=_extend({},options),emitEvent=function(type,evt){var method=this[options[type]];method&&method.call(this,evt,this._sortableInstance)}.bind(this);"onStart onEnd onAdd onSort onUpdate onRemove onFilter onMove".split(" ").forEach(function(name){copyOptions[name]=function(evt){if("onStart"===name)_nextSibling=evt.item.nextElementSibling,_activeComponent=this;else if("onAdd"===name||"onUpdate"===name){evt.from.insertBefore(evt.item,_nextSibling);var remoteItems,item,newState={},remoteState={},oldIndex=evt.oldIndex,newIndex=evt.newIndex,items=_getModelItems(this);"onAdd"===name?(remoteItems=_getModelItems(_activeComponent),item=remoteItems.splice(oldIndex,1)[0],items.splice(newIndex,0,item),remoteState[_getModelName(_activeComponent)]=remoteItems):items.splice(newIndex,0,items.splice(oldIndex,1)[0]),newState[_getModelName(this)]=items,copyOptions.stateHandler?this[copyOptions.stateHandler](newState):this.setState(newState),this!==_activeComponent&&_activeComponent.setState(remoteState)}setTimeout(function(){emitEvent(name,evt)},0)}.bind(this)},this),DOMNode=this.getDOMNode()?(this.refs[options.ref]||this).getDOMNode():this.refs[options.ref]||this,this._sortableInstance=Sortable.create(DOMNode,copyOptions)},componentWillReceiveProps:function(nextProps){var newState={},modelName=_getModelName(this),items=nextProps[modelName];items&&(newState[modelName]=items,this.setState(newState))},componentWillUnmount:function(){this._sortableInstance.destroy(),this._sortableInstance=null}}});
|
||||
! function(factory) {
|
||||
"use strict";
|
||||
"undefined" != typeof module && void 0 !== module.exports ? module.exports = factory(require("./Sortable")) : "function" == typeof define && define.amd ? define(["./Sortable"], factory) : window.SortableMixin = factory(Sortable)
|
||||
}(function(Sortable) {
|
||||
"use strict";
|
||||
|
||||
function _getModelName(component) {
|
||||
return component.sortableOptions && component.sortableOptions.model || _defaultOptions.model
|
||||
}
|
||||
|
||||
function _getModelItems(component) {
|
||||
var name = _getModelName(component);
|
||||
return (component.state && component.state[name] || component.props[name]).slice()
|
||||
}
|
||||
|
||||
function _extend(dst, src) {
|
||||
for (var key in src) src.hasOwnProperty(key) && (dst[key] = src[key]);
|
||||
return dst
|
||||
}
|
||||
var _nextSibling, _activeComponent, _defaultOptions = {
|
||||
ref: "list",
|
||||
model: "items",
|
||||
animation: 100,
|
||||
onStart: "handleStart",
|
||||
onEnd: "handleEnd",
|
||||
onAdd: "handleAdd",
|
||||
onUpdate: "handleUpdate",
|
||||
onRemove: "handleRemove",
|
||||
onSort: "handleSort",
|
||||
onFilter: "handleFilter",
|
||||
onMove: "handleMove"
|
||||
};
|
||||
return {
|
||||
sortableMixinVersion: "0.1.1",
|
||||
_sortableInstance: null,
|
||||
componentDidMount: function() {
|
||||
var DOMNode, options = _extend(_extend({}, _defaultOptions), this.sortableOptions || {}),
|
||||
copyOptions = _extend({}, options),
|
||||
emitEvent = function(type, evt) {
|
||||
var method = this[options[type]];
|
||||
method && method.call(this, evt, this._sortableInstance)
|
||||
}.bind(this);
|
||||
"onStart onEnd onAdd onSort onUpdate onRemove onFilter onMove".split(" ").forEach(function(name) {
|
||||
copyOptions[name] = function(evt) {
|
||||
if ("onStart" === name) _nextSibling = evt.item.nextElementSibling, _activeComponent = this;
|
||||
else if ("onAdd" === name || "onUpdate" === name) {
|
||||
evt.from.insertBefore(evt.item, _nextSibling);
|
||||
var remoteItems, item, newState = {},
|
||||
remoteState = {},
|
||||
oldIndex = evt.oldIndex,
|
||||
newIndex = evt.newIndex,
|
||||
items = _getModelItems(this);
|
||||
"onAdd" === name ? (remoteItems = _getModelItems(_activeComponent), item = remoteItems.splice(oldIndex, 1)[0], items.splice(newIndex, 0, item), remoteState[_getModelName(_activeComponent)] = remoteItems) : items.splice(newIndex, 0, items.splice(oldIndex, 1)[0]), newState[_getModelName(this)] = items, copyOptions.stateHandler ? this[copyOptions.stateHandler](newState) : this.setState(newState), this !== _activeComponent && _activeComponent.setState(remoteState)
|
||||
}
|
||||
setTimeout(function() {
|
||||
emitEvent(name, evt)
|
||||
}, 0)
|
||||
}.bind(this)
|
||||
}, this), DOMNode = this.getDOMNode() ? (this.refs[options.ref] || this).getDOMNode() : this.refs[options.ref] || this, this._sortableInstance = Sortable.create(DOMNode, copyOptions)
|
||||
},
|
||||
componentWillReceiveProps: function(nextProps) {
|
||||
var newState = {},
|
||||
modelName = _getModelName(this),
|
||||
items = nextProps[modelName];
|
||||
items && (newState[modelName] = items, this.setState(newState))
|
||||
},
|
||||
componentWillUnmount: function() {
|
||||
this._sortableInstance.destroy(), this._sortableInstance = null
|
||||
}
|
||||
}
|
||||
});
|
||||
+1592
-4
File diff suppressed because one or more lines are too long
+9
-1
@@ -1 +1,9 @@
|
||||
var version="3.3.1";Package.describe({name:"nolimits4web:swiper",summary:"iDangero.us Swiper - mobile touch slider with hardware accelerated transitions and native behavior",version:version,git:"https://github.com/nolimits4web/Swiper"}),Package.onUse(function(api){api.versionsFrom("1.1.0.2"),api.addFiles(["dist/css/swiper.min.css","dist/js/swiper.js"],["client"])}),Package.onTest(function(api){});
|
||||
var version = "3.3.1";
|
||||
Package.describe({
|
||||
name: "nolimits4web:swiper",
|
||||
summary: "iDangero.us Swiper - mobile touch slider with hardware accelerated transitions and native behavior",
|
||||
version: version,
|
||||
git: "https://github.com/nolimits4web/Swiper"
|
||||
}), Package.onUse(function(api) {
|
||||
api.versionsFrom("1.1.0.2"), api.addFiles(["dist/css/swiper.min.css", "dist/js/swiper.js"], ["client"])
|
||||
}), Package.onTest(function(api) {});
|
||||
+418
-1
File diff suppressed because one or more lines are too long
+245
-1
File diff suppressed because one or more lines are too long
+1619
-2
File diff suppressed because one or more lines are too long
+231
-1
File diff suppressed because one or more lines are too long
@@ -1 +1,23 @@
|
||||
define([],function(){"use strict";function MyStore(){}function updateCache(instance){instance.cache.put("data",new Response(JSON.stringify(instance.localData)))}return MyStore.prototype.init=function(){var instance=this;return caches.open("embydata").then(function(result){instance.cache=result,instance.localData={}})},MyStore.prototype.setItem=function(name,value){if(this.localData){this.localData[name]!==value&&(this.localData[name]=value,updateCache(this))}},MyStore.prototype.getItem=function(name){if(this.localData)return this.localData[name]},MyStore.prototype.removeItem=function(name){this.localData&&(this.localData[name]=null,delete this.localData[name],updateCache(this))},new MyStore});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function MyStore() {}
|
||||
|
||||
function updateCache(instance) {
|
||||
instance.cache.put("data", new Response(JSON.stringify(instance.localData)))
|
||||
}
|
||||
return MyStore.prototype.init = function() {
|
||||
var instance = this;
|
||||
return caches.open("embydata").then(function(result) {
|
||||
instance.cache = result, instance.localData = {}
|
||||
})
|
||||
}, MyStore.prototype.setItem = function(name, value) {
|
||||
if (this.localData) {
|
||||
this.localData[name] !== value && (this.localData[name] = value, updateCache(this))
|
||||
}
|
||||
}, MyStore.prototype.getItem = function(name) {
|
||||
if (this.localData) return this.localData[name]
|
||||
}, MyStore.prototype.removeItem = function(name) {
|
||||
this.localData && (this.localData[name] = null, delete this.localData[name], updateCache(this))
|
||||
}, new MyStore
|
||||
});
|
||||
@@ -1 +1,37 @@
|
||||
define([],function(){"use strict";function onCachePutFail(e){console.log(e)}function updateCache(instance){var cache=instance.cache;cache&&cache.put("data",new Response(JSON.stringify(instance.localData))).catch(onCachePutFail)}function onCacheOpened(result){this.cache=result,this.localData={}}function MyStore(){try{self.caches&&caches.open("embydata").then(onCacheOpened.bind(this))}catch(err){console.log("Error opening cache: "+err)}}return MyStore.prototype.setItem=function(name,value){localStorage.setItem(name,value);var localData=this.localData;if(localData){localData[name]!==value&&(localData[name]=value,updateCache(this))}},MyStore.prototype.getItem=function(name){return localStorage.getItem(name)},MyStore.prototype.removeItem=function(name){localStorage.removeItem(name);var localData=this.localData;localData&&(localData[name]=null,delete localData[name],updateCache(this))},new MyStore});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function onCachePutFail(e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
function updateCache(instance) {
|
||||
var cache = instance.cache;
|
||||
cache && cache.put("data", new Response(JSON.stringify(instance.localData))).catch(onCachePutFail)
|
||||
}
|
||||
|
||||
function onCacheOpened(result) {
|
||||
this.cache = result, this.localData = {}
|
||||
}
|
||||
|
||||
function MyStore() {
|
||||
try {
|
||||
self.caches && caches.open("embydata").then(onCacheOpened.bind(this))
|
||||
} catch (err) {
|
||||
console.log("Error opening cache: " + err)
|
||||
}
|
||||
}
|
||||
return MyStore.prototype.setItem = function(name, value) {
|
||||
localStorage.setItem(name, value);
|
||||
var localData = this.localData;
|
||||
if (localData) {
|
||||
localData[name] !== value && (localData[name] = value, updateCache(this))
|
||||
}
|
||||
}, MyStore.prototype.getItem = function(name) {
|
||||
return localStorage.getItem(name)
|
||||
}, MyStore.prototype.removeItem = function(name) {
|
||||
localStorage.removeItem(name);
|
||||
var localData = this.localData;
|
||||
localData && (localData[name] = null, delete localData[name], updateCache(this))
|
||||
}, new MyStore
|
||||
});
|
||||
@@ -1 +1,14 @@
|
||||
define([],function(){"use strict";function MyStore(){this.localData={}}return MyStore.prototype.setItem=function(name,value){this.localData[name]=value},MyStore.prototype.getItem=function(name){return this.localData[name]},MyStore.prototype.removeItem=function(name){this.localData[name]=null},new MyStore});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function MyStore() {
|
||||
this.localData = {}
|
||||
}
|
||||
return MyStore.prototype.setItem = function(name, value) {
|
||||
this.localData[name] = value
|
||||
}, MyStore.prototype.getItem = function(name) {
|
||||
return this.localData[name]
|
||||
}, MyStore.prototype.removeItem = function(name) {
|
||||
this.localData[name] = null
|
||||
}, new MyStore
|
||||
});
|
||||
@@ -1 +1,8 @@
|
||||
define([],function(){"use strict";function CameraRoll(){}return CameraRoll.prototype.getFiles=function(){return Promise.resolve([])},new CameraRoll});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function CameraRoll() {}
|
||||
return CameraRoll.prototype.getFiles = function() {
|
||||
return Promise.resolve([])
|
||||
}, new CameraRoll
|
||||
});
|
||||
@@ -741,4 +741,4 @@ define(["events", "apiclient", "appStorage"], function(events, apiClientFactory,
|
||||
}
|
||||
}
|
||||
}, ConnectionManager
|
||||
});
|
||||
});
|
||||
+29
-1
@@ -1 +1,29 @@
|
||||
define(["events","appStorage"],function(events,appStorage){"use strict";function ensure(instance,data){if(!instance._credentials){var json=appStorage.getItem(instance.key)||"{}";console.log("credentials initialized with: "+json),instance._credentials=JSON.parse(json),instance._credentials.Servers=instance._credentials.Servers||[]}}function set(instance,data){data?(instance._credentials=data,appStorage.setItem(instance.key,JSON.stringify(data))):instance.clear(),events.trigger(instance,"credentialsupdated")}function Credentials(key){this.key=key||"servercredentials3"}return Credentials.prototype.clear=function(){this._credentials=null,appStorage.removeItem(this.key)},Credentials.prototype.credentials=function(data){return data&&set(this,data),ensure(this),this._credentials},Credentials.prototype.addOrUpdateServer=function(list,server){if(!server.Id)throw new Error("Server.Id cannot be null or empty");var existing=list.filter(function(s){return s.Id===server.Id})[0];return existing?(existing.DateLastAccessed=Math.max(existing.DateLastAccessed||0,server.DateLastAccessed||0),existing.UserLinkType=server.UserLinkType,server.AccessToken&&(existing.AccessToken=server.AccessToken,existing.UserId=server.UserId),server.ExchangeToken&&(existing.ExchangeToken=server.ExchangeToken),server.RemoteAddress&&(existing.RemoteAddress=server.RemoteAddress),server.ManualAddress&&(existing.ManualAddress=server.ManualAddress),server.LocalAddress&&(existing.LocalAddress=server.LocalAddress),server.Name&&(existing.Name=server.Name),server.WakeOnLanInfos&&server.WakeOnLanInfos.length&&(existing.WakeOnLanInfos=server.WakeOnLanInfos),null!=server.LastConnectionMode&&(existing.LastConnectionMode=server.LastConnectionMode),server.ConnectServerId&&(existing.ConnectServerId=server.ConnectServerId),existing):(list.push(server),server)},Credentials});
|
||||
define(["events", "appStorage"], function(events, appStorage) {
|
||||
"use strict";
|
||||
|
||||
function ensure(instance, data) {
|
||||
if (!instance._credentials) {
|
||||
var json = appStorage.getItem(instance.key) || "{}";
|
||||
console.log("credentials initialized with: " + json), instance._credentials = JSON.parse(json), instance._credentials.Servers = instance._credentials.Servers || []
|
||||
}
|
||||
}
|
||||
|
||||
function set(instance, data) {
|
||||
data ? (instance._credentials = data, appStorage.setItem(instance.key, JSON.stringify(data))) : instance.clear(), events.trigger(instance, "credentialsupdated")
|
||||
}
|
||||
|
||||
function Credentials(key) {
|
||||
this.key = key || "servercredentials3"
|
||||
}
|
||||
return Credentials.prototype.clear = function() {
|
||||
this._credentials = null, appStorage.removeItem(this.key)
|
||||
}, Credentials.prototype.credentials = function(data) {
|
||||
return data && set(this, data), ensure(this), this._credentials
|
||||
}, Credentials.prototype.addOrUpdateServer = function(list, server) {
|
||||
if (!server.Id) throw new Error("Server.Id cannot be null or empty");
|
||||
var existing = list.filter(function(s) {
|
||||
return s.Id === server.Id
|
||||
})[0];
|
||||
return existing ? (existing.DateLastAccessed = Math.max(existing.DateLastAccessed || 0, server.DateLastAccessed || 0), existing.UserLinkType = server.UserLinkType, server.AccessToken && (existing.AccessToken = server.AccessToken, existing.UserId = server.UserId), server.ExchangeToken && (existing.ExchangeToken = server.ExchangeToken), server.RemoteAddress && (existing.RemoteAddress = server.RemoteAddress), server.ManualAddress && (existing.ManualAddress = server.ManualAddress), server.LocalAddress && (existing.LocalAddress = server.LocalAddress), server.Name && (existing.Name = server.Name), server.WakeOnLanInfos && server.WakeOnLanInfos.length && (existing.WakeOnLanInfos = server.WakeOnLanInfos), null != server.LastConnectionMode && (existing.LastConnectionMode = server.LastConnectionMode), server.ConnectServerId && (existing.ConnectServerId = server.ConnectServerId), existing) : (list.push(server), server)
|
||||
}, Credentials
|
||||
});
|
||||
+30
-1
@@ -1 +1,30 @@
|
||||
define([],function(){"use strict";function getCallbacks(obj,name){if(!obj)throw new Error("obj cannot be null!");obj._callbacks=obj._callbacks||{};var list=obj._callbacks[name];return list||(obj._callbacks[name]=[],list=obj._callbacks[name]),list}return{on:function(obj,eventName,fn){getCallbacks(obj,eventName).push(fn)},off:function(obj,eventName,fn){var list=getCallbacks(obj,eventName),i=list.indexOf(fn);-1!==i&&list.splice(i,1)},trigger:function(obj,eventName){var eventObject={type:eventName},eventArgs=[];eventArgs.push(eventObject);for(var additionalArgs=arguments[2]||[],i=0,length=additionalArgs.length;i<length;i++)eventArgs.push(additionalArgs[i]);getCallbacks(obj,eventName).slice(0).forEach(function(c){c.apply(obj,eventArgs)})}}});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function getCallbacks(obj, name) {
|
||||
if (!obj) throw new Error("obj cannot be null!");
|
||||
obj._callbacks = obj._callbacks || {};
|
||||
var list = obj._callbacks[name];
|
||||
return list || (obj._callbacks[name] = [], list = obj._callbacks[name]), list
|
||||
}
|
||||
return {
|
||||
on: function(obj, eventName, fn) {
|
||||
getCallbacks(obj, eventName).push(fn)
|
||||
},
|
||||
off: function(obj, eventName, fn) {
|
||||
var list = getCallbacks(obj, eventName),
|
||||
i = list.indexOf(fn); - 1 !== i && list.splice(i, 1)
|
||||
},
|
||||
trigger: function(obj, eventName) {
|
||||
var eventObject = {
|
||||
type: eventName
|
||||
},
|
||||
eventArgs = [];
|
||||
eventArgs.push(eventObject);
|
||||
for (var additionalArgs = arguments[2] || [], i = 0, length = additionalArgs.length; i < length; i++) eventArgs.push(additionalArgs[i]);
|
||||
getCallbacks(obj, eventName).slice(0).forEach(function(c) {
|
||||
c.apply(obj, eventArgs)
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1 +1,8 @@
|
||||
define([],function(){"use strict";function FileUpload(){}return FileUpload.prototype.upload=function(file,url){return Promise.reject()},FileUpload});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function FileUpload() {}
|
||||
return FileUpload.prototype.upload = function(file, url) {
|
||||
return Promise.reject()
|
||||
}, FileUpload
|
||||
});
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1,8 @@
|
||||
define([],function(){"use strict";return{findServers:function(timeoutMs){return Promise.resolve([])}}});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
return {
|
||||
findServers: function(timeoutMs) {
|
||||
return Promise.resolve([])
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1 +1,57 @@
|
||||
define(["localassetmanager","cameraRoll"],function(localAssetManager,cameraRoll){"use strict";function getFilesToUpload(files,uploadHistory){return files.filter(function(file){if(!file)return!1;var uploadId=getUploadId(file);return 0===uploadHistory.FilesUploaded.filter(function(u){return uploadId===u.Id}).length})}function getUploadId(file){return btoa(file.Id+"1")}function uploadNext(files,index,server,apiClient,resolve,reject){var length=files.length;if(index>=length)return void resolve();uploadFile(files[index],apiClient).then(function(){uploadNext(files,index+1,server,apiClient,resolve,reject)},function(){uploadNext(files,index+1,server,apiClient,resolve,reject)})}function uploadFile(file,apiClient){return new Promise(function(resolve,reject){require(["fileupload"],function(FileUpload){var url=apiClient.getUrl("Devices/CameraUploads",{DeviceId:apiClient.deviceId(),Name:file.Name,Album:"Camera Roll",Id:getUploadId(file),api_key:apiClient.accessToken()});console.log("Uploading file to "+url),(new FileUpload).upload(file,url).then(resolve,reject)})})}function ContentUploader(){}return ContentUploader.prototype.uploadImages=function(connectionManager,server){return cameraRoll.getFiles().then(function(photos){if(!photos.length)return Promise.resolve();var apiClient=connectionManager.getApiClient(server.Id);return apiClient.getContentUploadHistory().then(function(uploadHistory){return photos=getFilesToUpload(photos,uploadHistory),console.log("Found "+photos.length+" files to upload"),new Promise(function(resolve,reject){uploadNext(photos,0,server,apiClient,resolve,reject)})},function(){return Promise.resolve()})})},ContentUploader});
|
||||
define(["localassetmanager", "cameraRoll"], function(localAssetManager, cameraRoll) {
|
||||
"use strict";
|
||||
|
||||
function getFilesToUpload(files, uploadHistory) {
|
||||
return files.filter(function(file) {
|
||||
if (!file) return !1;
|
||||
var uploadId = getUploadId(file);
|
||||
return 0 === uploadHistory.FilesUploaded.filter(function(u) {
|
||||
return uploadId === u.Id
|
||||
}).length
|
||||
})
|
||||
}
|
||||
|
||||
function getUploadId(file) {
|
||||
return btoa(file.Id + "1")
|
||||
}
|
||||
|
||||
function uploadNext(files, index, server, apiClient, resolve, reject) {
|
||||
var length = files.length;
|
||||
if (index >= length) return void resolve();
|
||||
uploadFile(files[index], apiClient).then(function() {
|
||||
uploadNext(files, index + 1, server, apiClient, resolve, reject)
|
||||
}, function() {
|
||||
uploadNext(files, index + 1, server, apiClient, resolve, reject)
|
||||
})
|
||||
}
|
||||
|
||||
function uploadFile(file, apiClient) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
require(["fileupload"], function(FileUpload) {
|
||||
var url = apiClient.getUrl("Devices/CameraUploads", {
|
||||
DeviceId: apiClient.deviceId(),
|
||||
Name: file.Name,
|
||||
Album: "Camera Roll",
|
||||
Id: getUploadId(file),
|
||||
api_key: apiClient.accessToken()
|
||||
});
|
||||
console.log("Uploading file to " + url), (new FileUpload).upload(file, url).then(resolve, reject)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function ContentUploader() {}
|
||||
return ContentUploader.prototype.uploadImages = function(connectionManager, server) {
|
||||
return cameraRoll.getFiles().then(function(photos) {
|
||||
if (!photos.length) return Promise.resolve();
|
||||
var apiClient = connectionManager.getApiClient(server.Id);
|
||||
return apiClient.getContentUploadHistory().then(function(uploadHistory) {
|
||||
return photos = getFilesToUpload(photos, uploadHistory), console.log("Found " + photos.length + " files to upload"), new Promise(function(resolve, reject) {
|
||||
uploadNext(photos, 0, server, apiClient, resolve, reject)
|
||||
})
|
||||
}, function() {
|
||||
return Promise.resolve()
|
||||
})
|
||||
})
|
||||
}, ContentUploader
|
||||
});
|
||||
@@ -1 +1,45 @@
|
||||
define([],function(){"use strict";function getValidFileName(path){return path}function getFullLocalPath(pathArray){return pathArray.join("/")}function getPathFromArray(pathArray){return pathArray.join("/")}function deleteFile(path){return Promise.resolve()}function deleteDirectory(path){return Promise.resolve()}function fileExists(path){return Promise.resolve()}function getItemFileSize(path){return Promise.resolve(0)}function getImageUrl(pathParts){return pathParts.join("/")}return{getValidFileName:getValidFileName,getFullLocalPath:getFullLocalPath,getPathFromArray:getPathFromArray,deleteFile:deleteFile,deleteDirectory:deleteDirectory,fileExists:fileExists,getItemFileSize:getItemFileSize,getImageUrl:getImageUrl}});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function getValidFileName(path) {
|
||||
return path
|
||||
}
|
||||
|
||||
function getFullLocalPath(pathArray) {
|
||||
return pathArray.join("/")
|
||||
}
|
||||
|
||||
function getPathFromArray(pathArray) {
|
||||
return pathArray.join("/")
|
||||
}
|
||||
|
||||
function deleteFile(path) {
|
||||
return Promise.resolve()
|
||||
}
|
||||
|
||||
function deleteDirectory(path) {
|
||||
return Promise.resolve()
|
||||
}
|
||||
|
||||
function fileExists(path) {
|
||||
return Promise.resolve()
|
||||
}
|
||||
|
||||
function getItemFileSize(path) {
|
||||
return Promise.resolve(0)
|
||||
}
|
||||
|
||||
function getImageUrl(pathParts) {
|
||||
return pathParts.join("/")
|
||||
}
|
||||
return {
|
||||
getValidFileName: getValidFileName,
|
||||
getFullLocalPath: getFullLocalPath,
|
||||
getPathFromArray: getPathFromArray,
|
||||
deleteFile: deleteFile,
|
||||
deleteDirectory: deleteDirectory,
|
||||
fileExists: fileExists,
|
||||
getItemFileSize: getItemFileSize,
|
||||
getImageUrl: getImageUrl
|
||||
}
|
||||
});
|
||||
@@ -1 +1,123 @@
|
||||
define([],function(){"use strict";function ServerDatabase(dbName,readyCallback){var request=indexedDB.open(dbName,dbVersion);request.onerror=function(event){},request.onupgradeneeded=function(event){var db=event.target.result;db.createObjectStore(dbName).transaction.oncomplete=function(event){readyCallback(db)}},request.onsuccess=function(event){var db=event.target.result;readyCallback(db)}}function getDbName(serverId){return"items_"+serverId}function getDb(serverId,callback){var dbName=getDbName(serverId),db=databases[dbName];if(db)return void callback(db);new ServerDatabase(dbName,function(db){databases[dbName]=db,callback(db)})}function getServerItemTypes(serverId,userId){return getAll(serverId,userId).then(function(all){return all.map(function(item2){return item2.Item.Type||""}).filter(filterDistinct)})}function getAll(serverId,userId){return new Promise(function(resolve,reject){getDb(serverId,function(db){var request,storeName=getDbName(serverId),transaction=db.transaction([storeName],"readonly"),objectStore=transaction.objectStore(storeName);if("getAll"in objectStore)request=objectStore.getAll(null,1e4),request.onsuccess=function(event){resolve(event.target.result)};else{var results=[];request=objectStore.openCursor(),request.onsuccess=function(event){var cursor=event.target.result;cursor?(results.push(cursor.value),cursor.continue()):resolve(results)}}request.onerror=reject})})}function get(serverId,key){return new Promise(function(resolve,reject){getDb(serverId,function(db){var storeName=getDbName(serverId),transaction=db.transaction([storeName],"readonly"),objectStore=transaction.objectStore(storeName),request=objectStore.get(key);request.onerror=reject,request.onsuccess=function(event){resolve(request.result)}})})}function set(serverId,key,val){return new Promise(function(resolve,reject){getDb(serverId,function(db){var storeName=getDbName(serverId),transaction=db.transaction([storeName],"readwrite"),objectStore=transaction.objectStore(storeName),request=objectStore.put(val,key);request.onerror=reject,request.onsuccess=resolve})})}function remove(serverId,key){return new Promise(function(resolve,reject){getDb(serverId,function(db){var storeName=getDbName(serverId),transaction=db.transaction([storeName],"readwrite"),objectStore=transaction.objectStore(storeName),request=objectStore.delete(key);request.onerror=reject,request.onsuccess=resolve})})}function clear(serverId){return new Promise(function(resolve,reject){getDb(serverId,function(db){var storeName=getDbName(serverId),transaction=db.transaction([storeName],"readwrite"),objectStore=transaction.objectStore(storeName),request=objectStore.clear();request.onerror=reject,request.onsuccess=resolve})})}function filterDistinct(value,index,self){return self.indexOf(value)===index}var indexedDB=self.indexedDB||self.mozIndexedDB||self.webkitIndexedDB||self.msIndexedDB,dbVersion=(self.IDBTransaction||self.webkitIDBTransaction||self.msIDBTransaction,self.IDBKeyRange||self.webkitIDBKeyRange||self.msIDBKeyRange,1),databases={};return{get:get,set:set,remove:remove,clear:clear,getAll:getAll,getServerItemTypes:getServerItemTypes}});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function ServerDatabase(dbName, readyCallback) {
|
||||
var request = indexedDB.open(dbName, dbVersion);
|
||||
request.onerror = function(event) {}, request.onupgradeneeded = function(event) {
|
||||
var db = event.target.result;
|
||||
db.createObjectStore(dbName).transaction.oncomplete = function(event) {
|
||||
readyCallback(db)
|
||||
}
|
||||
}, request.onsuccess = function(event) {
|
||||
var db = event.target.result;
|
||||
readyCallback(db)
|
||||
}
|
||||
}
|
||||
|
||||
function getDbName(serverId) {
|
||||
return "items_" + serverId
|
||||
}
|
||||
|
||||
function getDb(serverId, callback) {
|
||||
var dbName = getDbName(serverId),
|
||||
db = databases[dbName];
|
||||
if (db) return void callback(db);
|
||||
new ServerDatabase(dbName, function(db) {
|
||||
databases[dbName] = db, callback(db)
|
||||
})
|
||||
}
|
||||
|
||||
function getServerItemTypes(serverId, userId) {
|
||||
return getAll(serverId, userId).then(function(all) {
|
||||
return all.map(function(item2) {
|
||||
return item2.Item.Type || ""
|
||||
}).filter(filterDistinct)
|
||||
})
|
||||
}
|
||||
|
||||
function getAll(serverId, userId) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
getDb(serverId, function(db) {
|
||||
var request, storeName = getDbName(serverId),
|
||||
transaction = db.transaction([storeName], "readonly"),
|
||||
objectStore = transaction.objectStore(storeName);
|
||||
if ("getAll" in objectStore) request = objectStore.getAll(null, 1e4), request.onsuccess = function(event) {
|
||||
resolve(event.target.result)
|
||||
};
|
||||
else {
|
||||
var results = [];
|
||||
request = objectStore.openCursor(), request.onsuccess = function(event) {
|
||||
var cursor = event.target.result;
|
||||
cursor ? (results.push(cursor.value), cursor.continue()) : resolve(results)
|
||||
}
|
||||
}
|
||||
request.onerror = reject
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function get(serverId, key) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
getDb(serverId, function(db) {
|
||||
var storeName = getDbName(serverId),
|
||||
transaction = db.transaction([storeName], "readonly"),
|
||||
objectStore = transaction.objectStore(storeName),
|
||||
request = objectStore.get(key);
|
||||
request.onerror = reject, request.onsuccess = function(event) {
|
||||
resolve(request.result)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function set(serverId, key, val) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
getDb(serverId, function(db) {
|
||||
var storeName = getDbName(serverId),
|
||||
transaction = db.transaction([storeName], "readwrite"),
|
||||
objectStore = transaction.objectStore(storeName),
|
||||
request = objectStore.put(val, key);
|
||||
request.onerror = reject, request.onsuccess = resolve
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function remove(serverId, key) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
getDb(serverId, function(db) {
|
||||
var storeName = getDbName(serverId),
|
||||
transaction = db.transaction([storeName], "readwrite"),
|
||||
objectStore = transaction.objectStore(storeName),
|
||||
request = objectStore.delete(key);
|
||||
request.onerror = reject, request.onsuccess = resolve
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function clear(serverId) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
getDb(serverId, function(db) {
|
||||
var storeName = getDbName(serverId),
|
||||
transaction = db.transaction([storeName], "readwrite"),
|
||||
objectStore = transaction.objectStore(storeName),
|
||||
request = objectStore.clear();
|
||||
request.onerror = reject, request.onsuccess = resolve
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function filterDistinct(value, index, self) {
|
||||
return self.indexOf(value) === index
|
||||
}
|
||||
var indexedDB = self.indexedDB || self.mozIndexedDB || self.webkitIndexedDB || self.msIndexedDB,
|
||||
dbVersion = (self.IDBTransaction || self.webkitIDBTransaction || self.msIDBTransaction, self.IDBKeyRange || self.webkitIDBKeyRange || self.msIDBKeyRange, 1),
|
||||
databases = {};
|
||||
return {
|
||||
get: get,
|
||||
set: set,
|
||||
remove: remove,
|
||||
clear: clear,
|
||||
getAll: getAll,
|
||||
getServerItemTypes: getServerItemTypes
|
||||
}
|
||||
});
|
||||
@@ -1 +1,17 @@
|
||||
define(["connectionManager"],function(connectionManager){"use strict";var isSyncing;return{sync:function(options){return console.log("localSync.sync starting..."),isSyncing?Promise.resolve():(isSyncing=!0,new Promise(function(resolve,reject){require(["multiserversync","appSettings"],function(MultiServerSync,appSettings){options=options||{},options.cameraUploadServers=appSettings.cameraUploadServers(),(new MultiServerSync).sync(connectionManager,options).then(function(){isSyncing=null,resolve()},function(err){isSyncing=null,reject(err)})})}))}}});
|
||||
define(["connectionManager"], function(connectionManager) {
|
||||
"use strict";
|
||||
var isSyncing;
|
||||
return {
|
||||
sync: function(options) {
|
||||
return console.log("localSync.sync starting..."), isSyncing ? Promise.resolve() : (isSyncing = !0, new Promise(function(resolve, reject) {
|
||||
require(["multiserversync", "appSettings"], function(MultiServerSync, appSettings) {
|
||||
options = options || {}, options.cameraUploadServers = appSettings.cameraUploadServers(), (new MultiServerSync).sync(connectionManager, options).then(function() {
|
||||
isSyncing = null, resolve()
|
||||
}, function(err) {
|
||||
isSyncing = null, reject(err)
|
||||
})
|
||||
})
|
||||
}))
|
||||
}
|
||||
}
|
||||
});
|
||||
+368
-1
File diff suppressed because one or more lines are too long
@@ -1 +1,22 @@
|
||||
define(["serversync"],function(ServerSync){"use strict";function syncNext(connectionManager,servers,index,options,resolve,reject){var length=servers.length;if(index>=length)return console.log("MultiServerSync.sync complete"),void resolve();var server=servers[index];console.log("Creating ServerSync to server: "+server.Id),(new ServerSync).sync(connectionManager,server,options).then(function(){console.log("ServerSync succeeded to server: "+server.Id),syncNext(connectionManager,servers,index+1,options,resolve,reject)},function(err){console.log("ServerSync failed to server: "+server.Id+". "+err),syncNext(connectionManager,servers,index+1,options,resolve,reject)})}function MultiServerSync(){}return MultiServerSync.prototype.sync=function(connectionManager,options){return console.log("MultiServerSync.sync starting..."),new Promise(function(resolve,reject){var servers=connectionManager.getSavedServers();syncNext(connectionManager,servers,0,options,resolve,reject)})},MultiServerSync});
|
||||
define(["serversync"], function(ServerSync) {
|
||||
"use strict";
|
||||
|
||||
function syncNext(connectionManager, servers, index, options, resolve, reject) {
|
||||
var length = servers.length;
|
||||
if (index >= length) return console.log("MultiServerSync.sync complete"), void resolve();
|
||||
var server = servers[index];
|
||||
console.log("Creating ServerSync to server: " + server.Id), (new ServerSync).sync(connectionManager, server, options).then(function() {
|
||||
console.log("ServerSync succeeded to server: " + server.Id), syncNext(connectionManager, servers, index + 1, options, resolve, reject)
|
||||
}, function(err) {
|
||||
console.log("ServerSync failed to server: " + server.Id + ". " + err), syncNext(connectionManager, servers, index + 1, options, resolve, reject)
|
||||
})
|
||||
}
|
||||
|
||||
function MultiServerSync() {}
|
||||
return MultiServerSync.prototype.sync = function(connectionManager, options) {
|
||||
return console.log("MultiServerSync.sync starting..."), new Promise(function(resolve, reject) {
|
||||
var servers = connectionManager.getSavedServers();
|
||||
syncNext(connectionManager, servers, 0, options, resolve, reject)
|
||||
})
|
||||
}, MultiServerSync
|
||||
});
|
||||
@@ -1 +1,46 @@
|
||||
define([],function(){"use strict";function performSync(connectionManager,server,options){console.log("ServerSync.performSync to server: "+server.Id),options=options||{};var cameraUploadServers=options.cameraUploadServers||[];console.log("ServerSync cameraUploadServers: "+JSON.stringify(cameraUploadServers));var uploadPhotos=-1!==cameraUploadServers.indexOf(server.Id);return console.log("ServerSync uploadPhotos: "+uploadPhotos),(uploadPhotos?uploadContent(connectionManager,server,options):Promise.resolve()).then(function(){return syncMedia(connectionManager,server,options)})}function uploadContent(connectionManager,server,options){return new Promise(function(resolve,reject){require(["contentuploader"],function(ContentUploader){(new ContentUploader).uploadImages(connectionManager,server).then(resolve,reject)})})}function syncMedia(connectionManager,server,options){return new Promise(function(resolve,reject){require(["mediasync"],function(MediaSync){var apiClient=connectionManager.getApiClient(server.Id);(new MediaSync).sync(apiClient,server,options).then(resolve,reject)})})}function ServerSync(){}return ServerSync.prototype.sync=function(connectionManager,server,options){if(!server.AccessToken&&!server.ExchangeToken)return console.log("Skipping sync to server "+server.Id+" because there is no saved authentication information."),Promise.resolve();var connectionOptions={updateDateLastAccessed:!1,enableWebSocket:!1,reportCapabilities:!1,enableAutomaticBitrateDetection:!1};return connectionManager.connectToServer(server,connectionOptions).then(function(result){return"SignedIn"===result.State?performSync(connectionManager,server,options):(console.log("Unable to connect to server id: "+server.Id),Promise.reject())},function(err){throw console.log("Unable to connect to server id: "+server.Id),err})},ServerSync});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function performSync(connectionManager, server, options) {
|
||||
console.log("ServerSync.performSync to server: " + server.Id), options = options || {};
|
||||
var cameraUploadServers = options.cameraUploadServers || [];
|
||||
console.log("ServerSync cameraUploadServers: " + JSON.stringify(cameraUploadServers));
|
||||
var uploadPhotos = -1 !== cameraUploadServers.indexOf(server.Id);
|
||||
return console.log("ServerSync uploadPhotos: " + uploadPhotos), (uploadPhotos ? uploadContent(connectionManager, server, options) : Promise.resolve()).then(function() {
|
||||
return syncMedia(connectionManager, server, options)
|
||||
})
|
||||
}
|
||||
|
||||
function uploadContent(connectionManager, server, options) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
require(["contentuploader"], function(ContentUploader) {
|
||||
(new ContentUploader).uploadImages(connectionManager, server).then(resolve, reject)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function syncMedia(connectionManager, server, options) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
require(["mediasync"], function(MediaSync) {
|
||||
var apiClient = connectionManager.getApiClient(server.Id);
|
||||
(new MediaSync).sync(apiClient, server, options).then(resolve, reject)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function ServerSync() {}
|
||||
return ServerSync.prototype.sync = function(connectionManager, server, options) {
|
||||
if (!server.AccessToken && !server.ExchangeToken) return console.log("Skipping sync to server " + server.Id + " because there is no saved authentication information."), Promise.resolve();
|
||||
var connectionOptions = {
|
||||
updateDateLastAccessed: !1,
|
||||
enableWebSocket: !1,
|
||||
reportCapabilities: !1,
|
||||
enableAutomaticBitrateDetection: !1
|
||||
};
|
||||
return connectionManager.connectToServer(server, connectionOptions).then(function(result) {
|
||||
return "SignedIn" === result.State ? performSync(connectionManager, server, options) : (console.log("Unable to connect to server id: " + server.Id), Promise.reject())
|
||||
}, function(err) {
|
||||
throw console.log("Unable to connect to server id: " + server.Id), err
|
||||
})
|
||||
}, ServerSync
|
||||
});
|
||||
@@ -1 +1,30 @@
|
||||
define([],function(){"use strict";function downloadFile(url,folder,localItem,imageUrl){return Promise.reject()}function downloadSubtitles(url,folder,fileName){return Promise.reject()}function downloadImage(url,folder,fileName){return Promise.reject()}function resyncTransfers(){return Promise.resolve()}function getDownloadItemCount(){return Promise.resolve(0)}return{downloadFile:downloadFile,downloadSubtitles:downloadSubtitles,downloadImage:downloadImage,resyncTransfers:resyncTransfers,getDownloadItemCount:getDownloadItemCount}});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function downloadFile(url, folder, localItem, imageUrl) {
|
||||
return Promise.reject()
|
||||
}
|
||||
|
||||
function downloadSubtitles(url, folder, fileName) {
|
||||
return Promise.reject()
|
||||
}
|
||||
|
||||
function downloadImage(url, folder, fileName) {
|
||||
return Promise.reject()
|
||||
}
|
||||
|
||||
function resyncTransfers() {
|
||||
return Promise.resolve()
|
||||
}
|
||||
|
||||
function getDownloadItemCount() {
|
||||
return Promise.resolve(0)
|
||||
}
|
||||
return {
|
||||
downloadFile: downloadFile,
|
||||
downloadSubtitles: downloadSubtitles,
|
||||
downloadImage: downloadImage,
|
||||
resyncTransfers: resyncTransfers,
|
||||
getDownloadItemCount: getDownloadItemCount
|
||||
}
|
||||
});
|
||||
+108
-1
@@ -1 +1,108 @@
|
||||
define([],function(){"use strict";function getDb(callback){var db=databaseInstance;if(db)return void callback(db);var request=indexedDB.open(dbName,dbVersion);request.onerror=function(event){},request.onupgradeneeded=function(event){var db=event.target.result;db.createObjectStore(dbName).transaction.oncomplete=function(event){callback(db)}},request.onsuccess=function(event){var db=event.target.result;callback(db)}}function getByServerId(serverId){return getAll().then(function(items){return items.filter(function(item){return item.ServerId===serverId})})}function getAll(){return new Promise(function(resolve,reject){getDb(function(db){var request,storeName=dbName,transaction=db.transaction([storeName],"readonly"),objectStore=transaction.objectStore(storeName);if("getAll"in objectStore)request=objectStore.getAll(null,1e4),request.onsuccess=function(event){resolve(event.target.result)};else{var results=[];request=objectStore.openCursor(),request.onsuccess=function(event){var cursor=event.target.result;cursor?(results.push(cursor.value),cursor.continue()):resolve(results)}}request.onerror=reject})})}function get(key){return new Promise(function(resolve,reject){getDb(function(db){var storeName=dbName,transaction=db.transaction([storeName],"readonly"),objectStore=transaction.objectStore(storeName),request=objectStore.get(key);request.onerror=reject,request.onsuccess=function(event){resolve(request.result)}})})}function set(key,val){return new Promise(function(resolve,reject){getDb(function(db){var storeName=dbName,transaction=db.transaction([storeName],"readwrite"),objectStore=transaction.objectStore(storeName),request=objectStore.put(val,key);request.onerror=reject,request.onsuccess=resolve})})}function remove(key){return new Promise(function(resolve,reject){getDb(function(db){var storeName=dbName,transaction=db.transaction([storeName],"readwrite"),objectStore=transaction.objectStore(storeName),request=objectStore.delete(key);request.onerror=reject,request.onsuccess=resolve})})}function clear(){return new Promise(function(resolve,reject){getDb(function(db){var storeName=dbName,transaction=db.transaction([storeName],"readwrite"),objectStore=transaction.objectStore(storeName),request=objectStore.clear();request.onerror=reject,request.onsuccess=resolve})})}var databaseInstance,indexedDB=self.indexedDB||self.mozIndexedDB||self.webkitIndexedDB||self.msIndexedDB,dbName=(self.IDBTransaction||self.webkitIDBTransaction||self.msIDBTransaction,self.IDBKeyRange||self.webkitIDBKeyRange||self.msIDBKeyRange,"useractions"),dbVersion=1;return{get:get,set:set,remove:remove,clear:clear,getAll:getAll,getByServerId:getByServerId}});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function getDb(callback) {
|
||||
var db = databaseInstance;
|
||||
if (db) return void callback(db);
|
||||
var request = indexedDB.open(dbName, dbVersion);
|
||||
request.onerror = function(event) {}, request.onupgradeneeded = function(event) {
|
||||
var db = event.target.result;
|
||||
db.createObjectStore(dbName).transaction.oncomplete = function(event) {
|
||||
callback(db)
|
||||
}
|
||||
}, request.onsuccess = function(event) {
|
||||
var db = event.target.result;
|
||||
callback(db)
|
||||
}
|
||||
}
|
||||
|
||||
function getByServerId(serverId) {
|
||||
return getAll().then(function(items) {
|
||||
return items.filter(function(item) {
|
||||
return item.ServerId === serverId
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function getAll() {
|
||||
return new Promise(function(resolve, reject) {
|
||||
getDb(function(db) {
|
||||
var request, storeName = dbName,
|
||||
transaction = db.transaction([storeName], "readonly"),
|
||||
objectStore = transaction.objectStore(storeName);
|
||||
if ("getAll" in objectStore) request = objectStore.getAll(null, 1e4), request.onsuccess = function(event) {
|
||||
resolve(event.target.result)
|
||||
};
|
||||
else {
|
||||
var results = [];
|
||||
request = objectStore.openCursor(), request.onsuccess = function(event) {
|
||||
var cursor = event.target.result;
|
||||
cursor ? (results.push(cursor.value), cursor.continue()) : resolve(results)
|
||||
}
|
||||
}
|
||||
request.onerror = reject
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function get(key) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
getDb(function(db) {
|
||||
var storeName = dbName,
|
||||
transaction = db.transaction([storeName], "readonly"),
|
||||
objectStore = transaction.objectStore(storeName),
|
||||
request = objectStore.get(key);
|
||||
request.onerror = reject, request.onsuccess = function(event) {
|
||||
resolve(request.result)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function set(key, val) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
getDb(function(db) {
|
||||
var storeName = dbName,
|
||||
transaction = db.transaction([storeName], "readwrite"),
|
||||
objectStore = transaction.objectStore(storeName),
|
||||
request = objectStore.put(val, key);
|
||||
request.onerror = reject, request.onsuccess = resolve
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function remove(key) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
getDb(function(db) {
|
||||
var storeName = dbName,
|
||||
transaction = db.transaction([storeName], "readwrite"),
|
||||
objectStore = transaction.objectStore(storeName),
|
||||
request = objectStore.delete(key);
|
||||
request.onerror = reject, request.onsuccess = resolve
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function clear() {
|
||||
return new Promise(function(resolve, reject) {
|
||||
getDb(function(db) {
|
||||
var storeName = dbName,
|
||||
transaction = db.transaction([storeName], "readwrite"),
|
||||
objectStore = transaction.objectStore(storeName),
|
||||
request = objectStore.clear();
|
||||
request.onerror = reject, request.onsuccess = resolve
|
||||
})
|
||||
})
|
||||
}
|
||||
var databaseInstance, indexedDB = self.indexedDB || self.mozIndexedDB || self.webkitIndexedDB || self.msIndexedDB,
|
||||
dbName = (self.IDBTransaction || self.webkitIDBTransaction || self.msIDBTransaction, self.IDBKeyRange || self.webkitIDBKeyRange || self.msIDBKeyRange, "useractions"),
|
||||
dbVersion = 1;
|
||||
return {
|
||||
get: get,
|
||||
set: set,
|
||||
remove: remove,
|
||||
clear: clear,
|
||||
getAll: getAll,
|
||||
getByServerId: getByServerId
|
||||
}
|
||||
});
|
||||
+15
-1
@@ -1 +1,15 @@
|
||||
define([],function(){"use strict";function send(info){return Promise.reject()}function isSupported(){return!1}return{send:send,isSupported:isSupported}});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function send(info) {
|
||||
return Promise.reject()
|
||||
}
|
||||
|
||||
function isSupported() {
|
||||
return !1
|
||||
}
|
||||
return {
|
||||
send: send,
|
||||
isSupported: isSupported
|
||||
}
|
||||
});
|
||||
+93
-1
File diff suppressed because one or more lines are too long
@@ -1 +1,18 @@
|
||||
define(["dialog","globalize"],function(dialog,globalize){"use strict";return function(text,title){var options;options="string"==typeof text?{title:title,text:text}:text;var items=[];return items.push({name:globalize.translate("sharedcomponents#ButtonGotIt"),id:"ok",type:"submit"}),options.buttons=items,dialog(options).then(function(result){return"ok"===result?Promise.resolve():Promise.reject()})}});
|
||||
define(["dialog", "globalize"], function(dialog, globalize) {
|
||||
"use strict";
|
||||
return function(text, title) {
|
||||
var options;
|
||||
options = "string" == typeof text ? {
|
||||
title: title,
|
||||
text: text
|
||||
} : text;
|
||||
var items = [];
|
||||
return items.push({
|
||||
name: globalize.translate("sharedcomponents#ButtonGotIt"),
|
||||
id: "ok",
|
||||
type: "submit"
|
||||
}), options.buttons = items, dialog(options).then(function(result) {
|
||||
return "ok" === result ? Promise.resolve() : Promise.reject()
|
||||
})
|
||||
}
|
||||
});
|
||||
@@ -1 +1,14 @@
|
||||
define([],function(){"use strict";function replaceAll(str,find,replace){return str.split(find).join(replace)}return function(options){"string"==typeof options&&(options={text:options});var text=replaceAll(options.text||"","<br/>","\n");return alert(text),Promise.resolve()}});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function replaceAll(str, find, replace) {
|
||||
return str.split(find).join(replace)
|
||||
}
|
||||
return function(options) {
|
||||
"string" == typeof options && (options = {
|
||||
text: options
|
||||
});
|
||||
var text = replaceAll(options.text || "", "<br/>", "\n");
|
||||
return alert(text), Promise.resolve()
|
||||
}
|
||||
});
|
||||
Vendored
+59
-1
@@ -1 +1,59 @@
|
||||
define(["dom","focusManager"],function(dom,focusManager){"use strict";function onKeyDown(e){if(!e.ctrlKey&&!e.shiftKey&&!e.altKey){var key=e.key,chr=key?alphanumeric(key):null;chr&&(chr=chr.toString().toUpperCase(),1===chr.length&&(currentDisplayTextContainer=this.options.itemsContainer,onAlphanumericKeyPress(e,chr)))}}function alphanumeric(value){var letterNumber=/^[0-9a-zA-Z]+$/;return value.match(letterNumber)}function ensureInputDisplayElement(){inputDisplayElement||(inputDisplayElement=document.createElement("div"),inputDisplayElement.classList.add("alphanumeric-shortcut"),inputDisplayElement.classList.add("hide"),document.body.appendChild(inputDisplayElement))}function clearAlphaNumericShortcutTimeout(){alpanumericShortcutTimeout&&(clearTimeout(alpanumericShortcutTimeout),alpanumericShortcutTimeout=null)}function resetAlphaNumericShortcutTimeout(){clearAlphaNumericShortcutTimeout(),alpanumericShortcutTimeout=setTimeout(onAlphanumericShortcutTimeout,2e3)}function onAlphanumericKeyPress(e,chr){currentDisplayText.length>=3||(ensureInputDisplayElement(),currentDisplayText+=chr,inputDisplayElement.innerHTML=currentDisplayText,inputDisplayElement.classList.remove("hide"),resetAlphaNumericShortcutTimeout())}function onAlphanumericShortcutTimeout(){var value=currentDisplayText,container=currentDisplayTextContainer;currentDisplayText="",currentDisplayTextContainer=null,inputDisplayElement.innerHTML="",inputDisplayElement.classList.add("hide"),clearAlphaNumericShortcutTimeout(),selectByShortcutValue(container,value)}function selectByShortcutValue(container,value){value=value.toUpperCase();var focusElem;"#"===value&&(focusElem=container.querySelector("*[data-prefix]")),focusElem||(focusElem=container.querySelector("*[data-prefix^='"+value+"']")),focusElem&&focusManager.focus(focusElem)}function AlphaNumericShortcuts(options){this.options=options;var keyDownHandler=onKeyDown.bind(this);dom.addEventListener(window,"keydown",keyDownHandler,{passive:!0}),this.keyDownHandler=keyDownHandler}var inputDisplayElement,currentDisplayTextContainer,alpanumericShortcutTimeout,currentDisplayText="";return AlphaNumericShortcuts.prototype.destroy=function(){var keyDownHandler=this.keyDownHandler;keyDownHandler&&(dom.removeEventListener(window,"keydown",keyDownHandler,{passive:!0}),this.keyDownHandler=null),this.options=null},AlphaNumericShortcuts});
|
||||
define(["dom", "focusManager"], function(dom, focusManager) {
|
||||
"use strict";
|
||||
|
||||
function onKeyDown(e) {
|
||||
if (!e.ctrlKey && !e.shiftKey && !e.altKey) {
|
||||
var key = e.key,
|
||||
chr = key ? alphanumeric(key) : null;
|
||||
chr && (chr = chr.toString().toUpperCase(), 1 === chr.length && (currentDisplayTextContainer = this.options.itemsContainer, onAlphanumericKeyPress(e, chr)))
|
||||
}
|
||||
}
|
||||
|
||||
function alphanumeric(value) {
|
||||
var letterNumber = /^[0-9a-zA-Z]+$/;
|
||||
return value.match(letterNumber)
|
||||
}
|
||||
|
||||
function ensureInputDisplayElement() {
|
||||
inputDisplayElement || (inputDisplayElement = document.createElement("div"), inputDisplayElement.classList.add("alphanumeric-shortcut"), inputDisplayElement.classList.add("hide"), document.body.appendChild(inputDisplayElement))
|
||||
}
|
||||
|
||||
function clearAlphaNumericShortcutTimeout() {
|
||||
alpanumericShortcutTimeout && (clearTimeout(alpanumericShortcutTimeout), alpanumericShortcutTimeout = null)
|
||||
}
|
||||
|
||||
function resetAlphaNumericShortcutTimeout() {
|
||||
clearAlphaNumericShortcutTimeout(), alpanumericShortcutTimeout = setTimeout(onAlphanumericShortcutTimeout, 2e3)
|
||||
}
|
||||
|
||||
function onAlphanumericKeyPress(e, chr) {
|
||||
currentDisplayText.length >= 3 || (ensureInputDisplayElement(), currentDisplayText += chr, inputDisplayElement.innerHTML = currentDisplayText, inputDisplayElement.classList.remove("hide"), resetAlphaNumericShortcutTimeout())
|
||||
}
|
||||
|
||||
function onAlphanumericShortcutTimeout() {
|
||||
var value = currentDisplayText,
|
||||
container = currentDisplayTextContainer;
|
||||
currentDisplayText = "", currentDisplayTextContainer = null, inputDisplayElement.innerHTML = "", inputDisplayElement.classList.add("hide"), clearAlphaNumericShortcutTimeout(), selectByShortcutValue(container, value)
|
||||
}
|
||||
|
||||
function selectByShortcutValue(container, value) {
|
||||
value = value.toUpperCase();
|
||||
var focusElem;
|
||||
"#" === value && (focusElem = container.querySelector("*[data-prefix]")), focusElem || (focusElem = container.querySelector("*[data-prefix^='" + value + "']")), focusElem && focusManager.focus(focusElem)
|
||||
}
|
||||
|
||||
function AlphaNumericShortcuts(options) {
|
||||
this.options = options;
|
||||
var keyDownHandler = onKeyDown.bind(this);
|
||||
dom.addEventListener(window, "keydown", keyDownHandler, {
|
||||
passive: !0
|
||||
}), this.keyDownHandler = keyDownHandler
|
||||
}
|
||||
var inputDisplayElement, currentDisplayTextContainer, alpanumericShortcutTimeout, currentDisplayText = "";
|
||||
return AlphaNumericShortcuts.prototype.destroy = function() {
|
||||
var keyDownHandler = this.keyDownHandler;
|
||||
keyDownHandler && (dom.removeEventListener(window, "keydown", keyDownHandler, {
|
||||
passive: !0
|
||||
}), this.keyDownHandler = null), this.options = null
|
||||
}, AlphaNumericShortcuts
|
||||
});
|
||||
+127
-1
File diff suppressed because one or more lines are too long
@@ -1 +1,20 @@
|
||||
define(["browser","css!./appfooter"],function(browser){"use strict";function render(options){var elem=document.createElement("div");return elem.classList.add("appfooter"),browser.chrome||elem.classList.add("appfooter-blurred"),document.body.appendChild(elem),elem}function appFooter(options){var self=this;self.element=render(options),self.add=function(elem){self.element.appendChild(elem)},self.insert=function(elem){"string"==typeof elem?self.element.insertAdjacentHTML("afterbegin",elem):self.element.insertBefore(elem,self.element.firstChild)}}return appFooter.prototype.destroy=function(){this.element=null},appFooter});
|
||||
define(["browser", "css!./appfooter"], function(browser) {
|
||||
"use strict";
|
||||
|
||||
function render(options) {
|
||||
var elem = document.createElement("div");
|
||||
return elem.classList.add("appfooter"), browser.chrome || elem.classList.add("appfooter-blurred"), document.body.appendChild(elem), elem
|
||||
}
|
||||
|
||||
function appFooter(options) {
|
||||
var self = this;
|
||||
self.element = render(options), self.add = function(elem) {
|
||||
self.element.appendChild(elem)
|
||||
}, self.insert = function(elem) {
|
||||
"string" == typeof elem ? self.element.insertAdjacentHTML("afterbegin", elem) : self.element.insertBefore(elem, self.element.firstChild)
|
||||
}
|
||||
}
|
||||
return appFooter.prototype.destroy = function() {
|
||||
this.element = null
|
||||
}, appFooter
|
||||
});
|
||||
@@ -1 +1,39 @@
|
||||
define(["appStorage","events"],function(appStorage,events){"use strict";function getKey(name,userId){return userId&&(name=userId+"-"+name),name}function AppSettings(){}return AppSettings.prototype.enableAutoLogin=function(val){return null!=val&&this.set("enableAutoLogin",val.toString()),"false"!==this.get("enableAutoLogin")},AppSettings.prototype.enableAutomaticBitrateDetection=function(isInNetwork,mediaType,val){var key="enableautobitratebitrate-"+mediaType+"-"+isInNetwork;return null!=val&&(isInNetwork&&"Audio"===mediaType&&(val=!0),this.set(key,val.toString())),!(!isInNetwork||"Audio"!==mediaType)||"false"!==this.get(key)},AppSettings.prototype.maxStreamingBitrate=function(isInNetwork,mediaType,val){var key="maxbitrate-"+mediaType+"-"+isInNetwork;return null!=val&&(isInNetwork&&"Audio"===mediaType||this.set(key,val)),isInNetwork&&"Audio"===mediaType?15e7:parseInt(this.get(key)||"0")||15e5},AppSettings.prototype.maxStaticMusicBitrate=function(val){void 0!==val&&this.set("maxStaticMusicBitrate",val);var defaultValue=32e4;return parseInt(this.get("maxStaticMusicBitrate")||defaultValue.toString())||defaultValue},AppSettings.prototype.maxChromecastBitrate=function(val){return null!=val&&this.set("chromecastBitrate1",val),val=this.get("chromecastBitrate1"),val?parseInt(val):null},AppSettings.prototype.syncOnlyOnWifi=function(val){return null!=val&&this.set("syncOnlyOnWifi",val.toString()),"false"!==this.get("syncOnlyOnWifi")},AppSettings.prototype.syncPath=function(val){return null!=val&&this.set("syncPath",val),this.get("syncPath")},AppSettings.prototype.cameraUploadServers=function(val){return null!=val&&this.set("cameraUploadServers",val.join(",")),val=this.get("cameraUploadServers"),val?val.split(","):[]},AppSettings.prototype.runAtStartup=function(val){return null!=val&&this.set("runatstartup",val.toString()),"true"===this.get("runatstartup")},AppSettings.prototype.set=function(name,value,userId){var currentValue=this.get(name,userId);appStorage.setItem(getKey(name,userId),value),currentValue!==value&&events.trigger(this,"change",[name])},AppSettings.prototype.get=function(name,userId){return appStorage.getItem(getKey(name,userId))},AppSettings.prototype.enableSystemExternalPlayers=function(val){return null!=val&&this.set("enableSystemExternalPlayers",val.toString()),"true"===this.get("enableSystemExternalPlayers")},new AppSettings});
|
||||
define(["appStorage", "events"], function(appStorage, events) {
|
||||
"use strict";
|
||||
|
||||
function getKey(name, userId) {
|
||||
return userId && (name = userId + "-" + name), name
|
||||
}
|
||||
|
||||
function AppSettings() {}
|
||||
return AppSettings.prototype.enableAutoLogin = function(val) {
|
||||
return null != val && this.set("enableAutoLogin", val.toString()), "false" !== this.get("enableAutoLogin")
|
||||
}, AppSettings.prototype.enableAutomaticBitrateDetection = function(isInNetwork, mediaType, val) {
|
||||
var key = "enableautobitratebitrate-" + mediaType + "-" + isInNetwork;
|
||||
return null != val && (isInNetwork && "Audio" === mediaType && (val = !0), this.set(key, val.toString())), !(!isInNetwork || "Audio" !== mediaType) || "false" !== this.get(key)
|
||||
}, AppSettings.prototype.maxStreamingBitrate = function(isInNetwork, mediaType, val) {
|
||||
var key = "maxbitrate-" + mediaType + "-" + isInNetwork;
|
||||
return null != val && (isInNetwork && "Audio" === mediaType || this.set(key, val)), isInNetwork && "Audio" === mediaType ? 15e7 : parseInt(this.get(key) || "0") || 15e5
|
||||
}, AppSettings.prototype.maxStaticMusicBitrate = function(val) {
|
||||
void 0 !== val && this.set("maxStaticMusicBitrate", val);
|
||||
var defaultValue = 32e4;
|
||||
return parseInt(this.get("maxStaticMusicBitrate") || defaultValue.toString()) || defaultValue
|
||||
}, AppSettings.prototype.maxChromecastBitrate = function(val) {
|
||||
return null != val && this.set("chromecastBitrate1", val), val = this.get("chromecastBitrate1"), val ? parseInt(val) : null
|
||||
}, AppSettings.prototype.syncOnlyOnWifi = function(val) {
|
||||
return null != val && this.set("syncOnlyOnWifi", val.toString()), "false" !== this.get("syncOnlyOnWifi")
|
||||
}, AppSettings.prototype.syncPath = function(val) {
|
||||
return null != val && this.set("syncPath", val), this.get("syncPath")
|
||||
}, AppSettings.prototype.cameraUploadServers = function(val) {
|
||||
return null != val && this.set("cameraUploadServers", val.join(",")), val = this.get("cameraUploadServers"), val ? val.split(",") : []
|
||||
}, AppSettings.prototype.runAtStartup = function(val) {
|
||||
return null != val && this.set("runatstartup", val.toString()), "true" === this.get("runatstartup")
|
||||
}, AppSettings.prototype.set = function(name, value, userId) {
|
||||
var currentValue = this.get(name, userId);
|
||||
appStorage.setItem(getKey(name, userId), value), currentValue !== value && events.trigger(this, "change", [name])
|
||||
}, AppSettings.prototype.get = function(name, userId) {
|
||||
return appStorage.getItem(getKey(name, userId))
|
||||
}, AppSettings.prototype.enableSystemExternalPlayers = function(val) {
|
||||
return null != val && this.set("enableSystemExternalPlayers", val.toString()), "true" === this.get("enableSystemExternalPlayers")
|
||||
}, new AppSettings
|
||||
});
|
||||
File diff suppressed because one or more lines are too long
+69
-1
@@ -1 +1,69 @@
|
||||
define([],function(){"use strict";function supportsCssAnimation(allowPrefix){if(allowPrefix){if(!0===_supportsCssAnimationWithPrefix||!1===_supportsCssAnimationWithPrefix)return _supportsCssAnimationWithPrefix}else if(!0===_supportsCssAnimation||!1===_supportsCssAnimation)return _supportsCssAnimation;var animation=!1,domPrefixes=["Webkit","O","Moz"],pfx="",elm=document.createElement("div");if(void 0!==elm.style.animationName&&(animation=!0),!1===animation&&allowPrefix)for(var i=0;i<domPrefixes.length;i++)if(void 0!==elm.style[domPrefixes[i]+"AnimationName"]){pfx=domPrefixes[i],pfx+"Animation","-"+pfx.toLowerCase()+"-",animation=!0;break}return allowPrefix?_supportsCssAnimationWithPrefix=animation:_supportsCssAnimation=animation}var _supportsCssAnimation,_supportsCssAnimationWithPrefix,userAgent=navigator.userAgent,matched=function(ua){ua=ua.toLowerCase();var match=/(edge)[ \/]([\w.]+)/.exec(ua)||/(opera)[ \/]([\w.]+)/.exec(ua)||/(opr)[ \/]([\w.]+)/.exec(ua)||/(chrome)[ \/]([\w.]+)/.exec(ua)||/(safari)[ \/]([\w.]+)/.exec(ua)||/(firefox)[ \/]([\w.]+)/.exec(ua)||/(msie) ([\w.]+)/.exec(ua)||ua.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua)||[],versionMatch=/(version)[ \/]([\w.]+)/.exec(ua),platform_match=/(ipad)/.exec(ua)||/(iphone)/.exec(ua)||/(windows)/.exec(ua)||/(android)/.exec(ua)||[],browser=match[1]||"";"edge"===browser?platform_match=[""]:-1!==ua.indexOf("windows phone")||-1!==ua.indexOf("iemobile")?browser="msie":-1!==ua.indexOf("like gecko")&&-1===ua.indexOf("webkit")&&-1===ua.indexOf("opera")&&-1===ua.indexOf("chrome")&&-1===ua.indexOf("safari")&&(browser="msie"),"opr"===browser&&(browser="opera");var version;versionMatch&&versionMatch.length>2&&(version=versionMatch[2]),version=version||match[2]||"0";var versionMajor=parseInt(version.split(".")[0]);return isNaN(versionMajor)&&(versionMajor=0),{browser:browser,version:version,platform:platform_match[0]||"",versionMajor:versionMajor}}(userAgent),browser={};return matched.browser&&(browser[matched.browser]=!0,browser.version=matched.version,browser.versionMajor=matched.versionMajor),matched.platform&&(browser[matched.platform]=!0),browser.chrome||browser.msie||browser.edge||browser.opera||-1===userAgent.toLowerCase().indexOf("webkit")||(browser.safari=!0),-1!==userAgent.toLowerCase().indexOf("playstation 4")&&(browser.ps4=!0,browser.tv=!0),function(userAgent){for(var terms=["mobi","ipad","iphone","ipod","silk","gt-p1000","nexus 7","kindle fire","opera mini"],lower=userAgent.toLowerCase(),i=0,length=terms.length;i<length;i++)if(-1!==lower.indexOf(terms[i]))return!0;return!1}(userAgent)&&(browser.mobile=!0),browser.xboxOne=-1!==userAgent.toLowerCase().indexOf("xbox"),browser.animate="undefined"!=typeof document&&null!=document.documentElement.animate,browser.tizen=-1!==userAgent.toLowerCase().indexOf("tizen")||null!=self.tizen,browser.web0s=-1!==userAgent.toLowerCase().indexOf("Web0S".toLowerCase()),browser.edgeUwp=browser.edge&&(-1!==userAgent.toLowerCase().indexOf("msapphost")||-1!==userAgent.toLowerCase().indexOf("webview")),browser.tizen||(browser.orsay=-1!==userAgent.toLowerCase().indexOf("smarthub")),browser.edgeUwp&&(browser.edge=!0),browser.tv=function(){var userAgent=navigator.userAgent.toLowerCase();return-1!==userAgent.indexOf("tv")||(-1!==userAgent.indexOf("samsungbrowser")||(-1!==userAgent.indexOf("nintendo")||(-1!==userAgent.indexOf("viera")||-1!==userAgent.indexOf("webos"))))}(),browser.operaTv=browser.tv&&-1!==userAgent.toLowerCase().indexOf("opr/"),function(prop,value){if("undefined"==typeof window)return!1;if(value=2===arguments.length?value:"inherit","CSS"in window&&"supports"in window.CSS)return window.CSS.supports(prop,value);if("supportsCSS"in window)return window.supportsCSS(prop,value);try{var camel=prop.replace(/-([a-z]|[0-9])/gi,function(all,letter){return(letter+"").toUpperCase()}),support=camel in el.style,el=document.createElement("div");return el.style.cssText=prop+":"+value,support&&""!==el.style[camel]}catch(err){return!1}}("display","flex")||(browser.noFlex=!0),(browser.mobile||browser.tv)&&(browser.slow=!0),"undefined"!=typeof document&&("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)&&(browser.touch=!0),browser.keyboard=function(browser){return!!browser.touch||(!!browser.xboxOne||(!!browser.ps4||(!!browser.edgeUwp||!!browser.tv)))}(browser),browser.supportsCssAnimation=supportsCssAnimation,browser.osx=-1!==userAgent.toLowerCase().indexOf("os x"),browser.iOS=browser.ipad||browser.iphone||browser.ipod,browser.iOS&&(browser.iOSVersion=function(){if(/iP(hone|od|ad)/.test(navigator.platform)){var v=navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);return[parseInt(v[1],10),parseInt(v[2],10),parseInt(v[3]||0,10)]}}(),browser.iOSVersion=browser.iOSVersion[0]+browser.iOSVersion[1]/10),browser.chromecast=browser.chrome&&-1!==userAgent.toLowerCase().indexOf("crkey"),browser});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function supportsCssAnimation(allowPrefix) {
|
||||
if (allowPrefix) {
|
||||
if (!0 === _supportsCssAnimationWithPrefix || !1 === _supportsCssAnimationWithPrefix) return _supportsCssAnimationWithPrefix
|
||||
} else if (!0 === _supportsCssAnimation || !1 === _supportsCssAnimation) return _supportsCssAnimation;
|
||||
var animation = !1,
|
||||
domPrefixes = ["Webkit", "O", "Moz"],
|
||||
pfx = "",
|
||||
elm = document.createElement("div");
|
||||
if (void 0 !== elm.style.animationName && (animation = !0), !1 === animation && allowPrefix)
|
||||
for (var i = 0; i < domPrefixes.length; i++)
|
||||
if (void 0 !== elm.style[domPrefixes[i] + "AnimationName"]) {
|
||||
pfx = domPrefixes[i], pfx + "Animation", "-" + pfx.toLowerCase() + "-", animation = !0;
|
||||
break
|
||||
} return allowPrefix ? _supportsCssAnimationWithPrefix = animation : _supportsCssAnimation = animation
|
||||
}
|
||||
var _supportsCssAnimation, _supportsCssAnimationWithPrefix, userAgent = navigator.userAgent,
|
||||
matched = function(ua) {
|
||||
ua = ua.toLowerCase();
|
||||
var match = /(edge)[ \/]([\w.]+)/.exec(ua) || /(opera)[ \/]([\w.]+)/.exec(ua) || /(opr)[ \/]([\w.]+)/.exec(ua) || /(chrome)[ \/]([\w.]+)/.exec(ua) || /(safari)[ \/]([\w.]+)/.exec(ua) || /(firefox)[ \/]([\w.]+)/.exec(ua) || /(msie) ([\w.]+)/.exec(ua) || ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || [],
|
||||
versionMatch = /(version)[ \/]([\w.]+)/.exec(ua),
|
||||
platform_match = /(ipad)/.exec(ua) || /(iphone)/.exec(ua) || /(windows)/.exec(ua) || /(android)/.exec(ua) || [],
|
||||
browser = match[1] || "";
|
||||
"edge" === browser ? platform_match = [""] : -1 !== ua.indexOf("windows phone") || -1 !== ua.indexOf("iemobile") ? browser = "msie" : -1 !== ua.indexOf("like gecko") && -1 === ua.indexOf("webkit") && -1 === ua.indexOf("opera") && -1 === ua.indexOf("chrome") && -1 === ua.indexOf("safari") && (browser = "msie"), "opr" === browser && (browser = "opera");
|
||||
var version;
|
||||
versionMatch && versionMatch.length > 2 && (version = versionMatch[2]), version = version || match[2] || "0";
|
||||
var versionMajor = parseInt(version.split(".")[0]);
|
||||
return isNaN(versionMajor) && (versionMajor = 0), {
|
||||
browser: browser,
|
||||
version: version,
|
||||
platform: platform_match[0] || "",
|
||||
versionMajor: versionMajor
|
||||
}
|
||||
}(userAgent),
|
||||
browser = {};
|
||||
return matched.browser && (browser[matched.browser] = !0, browser.version = matched.version, browser.versionMajor = matched.versionMajor), matched.platform && (browser[matched.platform] = !0), browser.chrome || browser.msie || browser.edge || browser.opera || -1 === userAgent.toLowerCase().indexOf("webkit") || (browser.safari = !0), -1 !== userAgent.toLowerCase().indexOf("playstation 4") && (browser.ps4 = !0, browser.tv = !0),
|
||||
function(userAgent) {
|
||||
for (var terms = ["mobi", "ipad", "iphone", "ipod", "silk", "gt-p1000", "nexus 7", "kindle fire", "opera mini"], lower = userAgent.toLowerCase(), i = 0, length = terms.length; i < length; i++)
|
||||
if (-1 !== lower.indexOf(terms[i])) return !0;
|
||||
return !1
|
||||
}(userAgent) && (browser.mobile = !0), browser.xboxOne = -1 !== userAgent.toLowerCase().indexOf("xbox"), browser.animate = "undefined" != typeof document && null != document.documentElement.animate, browser.tizen = -1 !== userAgent.toLowerCase().indexOf("tizen") || null != self.tizen, browser.web0s = -1 !== userAgent.toLowerCase().indexOf("Web0S".toLowerCase()), browser.edgeUwp = browser.edge && (-1 !== userAgent.toLowerCase().indexOf("msapphost") || -1 !== userAgent.toLowerCase().indexOf("webview")), browser.tizen || (browser.orsay = -1 !== userAgent.toLowerCase().indexOf("smarthub")), browser.edgeUwp && (browser.edge = !0), browser.tv = function() {
|
||||
var userAgent = navigator.userAgent.toLowerCase();
|
||||
return -1 !== userAgent.indexOf("tv") || (-1 !== userAgent.indexOf("samsungbrowser") || (-1 !== userAgent.indexOf("nintendo") || (-1 !== userAgent.indexOf("viera") || -1 !== userAgent.indexOf("webos"))))
|
||||
}(), browser.operaTv = browser.tv && -1 !== userAgent.toLowerCase().indexOf("opr/"),
|
||||
function(prop, value) {
|
||||
if ("undefined" == typeof window) return !1;
|
||||
if (value = 2 === arguments.length ? value : "inherit", "CSS" in window && "supports" in window.CSS) return window.CSS.supports(prop, value);
|
||||
if ("supportsCSS" in window) return window.supportsCSS(prop, value);
|
||||
try {
|
||||
var camel = prop.replace(/-([a-z]|[0-9])/gi, function(all, letter) {
|
||||
return (letter + "").toUpperCase()
|
||||
}),
|
||||
support = camel in el.style,
|
||||
el = document.createElement("div");
|
||||
return el.style.cssText = prop + ":" + value, support && "" !== el.style[camel]
|
||||
} catch (err) {
|
||||
return !1
|
||||
}
|
||||
}("display", "flex") || (browser.noFlex = !0), (browser.mobile || browser.tv) && (browser.slow = !0), "undefined" != typeof document && ("ontouchstart" in window || window.DocumentTouch && document instanceof DocumentTouch) && (browser.touch = !0), browser.keyboard = function(browser) {
|
||||
return !!browser.touch || (!!browser.xboxOne || (!!browser.ps4 || (!!browser.edgeUwp || !!browser.tv)))
|
||||
}(browser), browser.supportsCssAnimation = supportsCssAnimation, browser.osx = -1 !== userAgent.toLowerCase().indexOf("os x"), browser.iOS = browser.ipad || browser.iphone || browser.ipod, browser.iOS && (browser.iOSVersion = function() {
|
||||
if (/iP(hone|od|ad)/.test(navigator.platform)) {
|
||||
var v = navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/);
|
||||
return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)]
|
||||
}
|
||||
}(), browser.iOSVersion = browser.iOSVersion[0] + browser.iOSVersion[1] / 10), browser.chromecast = browser.chrome && -1 !== userAgent.toLowerCase().indexOf("crkey"), browser
|
||||
});
|
||||
File diff suppressed because one or more lines are too long
+515
-2
File diff suppressed because one or more lines are too long
+59
-1
@@ -1 +1,59 @@
|
||||
define(["datetime","imageLoader","connectionManager","layoutManager","browser"],function(datetime,imageLoader,connectionManager,layoutManager,browser){"use strict";function buildChapterCardsHtml(item,chapters,options){var className="card itemAction chapterCard";layoutManager.tv&&(browser.animate||browser.edge)&&(className+=" card-focusscale");var mediaStreams=((item.MediaSources||[])[0]||{}).MediaStreams||[],videoStream=mediaStreams.filter(function(i){return"Video"===i.Type})[0]||{},shape=options.backdropShape||"backdrop";videoStream.Width&&videoStream.Height&&videoStream.Width/videoStream.Height<=1.2&&(shape=options.squareShape||"square"),className+=" "+shape+"Card",(options.block||options.rows)&&(className+=" block");for(var html="",itemsInRow=0,apiClient=connectionManager.getApiClient(item.ServerId),i=0,length=chapters.length;i<length;i++){options.rows&&0===itemsInRow&&(html+='<div class="cardColumn">');html+=buildChapterCard(item,apiClient,chapters[i],i,options,className,shape),itemsInRow++,options.rows&&itemsInRow>=options.rows&&(itemsInRow=0,html+="</div>")}return html}function getImgUrl(item,chapter,index,maxWidth,apiClient){return chapter.ImageTag?apiClient.getScaledImageUrl(item.Id,{maxWidth:maxWidth,tag:chapter.ImageTag,type:"Chapter",index:index}):null}function buildChapterCard(item,apiClient,chapter,index,options,className,shape){var imgUrl=getImgUrl(item,chapter,index,options.width||400,apiClient),cardImageContainerClass="cardContent cardContent-shadow cardImageContainer chapterCardImageContainer";options.coverImage&&(cardImageContainerClass+=" coveredImage");var dataAttributes=' data-action="play" data-isfolder="'+item.IsFolder+'" data-id="'+item.Id+'" data-serverid="'+item.ServerId+'" data-type="'+item.Type+'" data-mediatype="'+item.MediaType+'" data-positionticks="'+chapter.StartPositionTicks+'"',cardImageContainer=imgUrl?'<div class="'+cardImageContainerClass+' lazy" data-src="'+imgUrl+'">':'<div class="'+cardImageContainerClass+'">';imgUrl||(cardImageContainer+='<i class="md-icon cardImageIcon">local_movies</i>');var nameHtml="";nameHtml+='<div class="cardText">'+chapter.Name+"</div>",nameHtml+='<div class="cardText">'+datetime.getDisplayRunningTime(chapter.StartPositionTicks)+"</div>";var cardBoxCssClass="cardBox",cardScalableClass="cardScalable";if(layoutManager.tv){var enableFocusTransfrom=!browser.slow&&!browser.edge;cardScalableClass+=" card-focuscontent",enableFocusTransfrom?cardBoxCssClass+=" cardBox-focustransform cardBox-withfocuscontent":(cardBoxCssClass+=" cardBox-withfocuscontent-large",cardScalableClass+=" card-focuscontent-large")}return'<button type="button" class="'+className+'"'+dataAttributes+'><div class="'+cardBoxCssClass+'"><div class="'+cardScalableClass+'"><div class="cardPadder-'+shape+'"></div>'+cardImageContainer+'</div><div class="innerCardFooter">'+nameHtml+"</div></div></div></button>"}function buildChapterCards(item,chapters,options){if(options.parentContainer){if(!document.body.contains(options.parentContainer))return;if(!chapters.length)return void options.parentContainer.classList.add("hide");options.parentContainer.classList.remove("hide")}var html=buildChapterCardsHtml(item,chapters,options);options.itemsContainer.innerHTML=html,imageLoader.lazyChildren(options.itemsContainer)}return{buildChapterCards:buildChapterCards}});
|
||||
define(["datetime", "imageLoader", "connectionManager", "layoutManager", "browser"], function(datetime, imageLoader, connectionManager, layoutManager, browser) {
|
||||
"use strict";
|
||||
|
||||
function buildChapterCardsHtml(item, chapters, options) {
|
||||
var className = "card itemAction chapterCard";
|
||||
layoutManager.tv && (browser.animate || browser.edge) && (className += " card-focusscale");
|
||||
var mediaStreams = ((item.MediaSources || [])[0] || {}).MediaStreams || [],
|
||||
videoStream = mediaStreams.filter(function(i) {
|
||||
return "Video" === i.Type
|
||||
})[0] || {},
|
||||
shape = options.backdropShape || "backdrop";
|
||||
videoStream.Width && videoStream.Height && videoStream.Width / videoStream.Height <= 1.2 && (shape = options.squareShape || "square"), className += " " + shape + "Card", (options.block || options.rows) && (className += " block");
|
||||
for (var html = "", itemsInRow = 0, apiClient = connectionManager.getApiClient(item.ServerId), i = 0, length = chapters.length; i < length; i++) {
|
||||
options.rows && 0 === itemsInRow && (html += '<div class="cardColumn">');
|
||||
html += buildChapterCard(item, apiClient, chapters[i], i, options, className, shape), itemsInRow++, options.rows && itemsInRow >= options.rows && (itemsInRow = 0, html += "</div>")
|
||||
}
|
||||
return html
|
||||
}
|
||||
|
||||
function getImgUrl(item, chapter, index, maxWidth, apiClient) {
|
||||
return chapter.ImageTag ? apiClient.getScaledImageUrl(item.Id, {
|
||||
maxWidth: maxWidth,
|
||||
tag: chapter.ImageTag,
|
||||
type: "Chapter",
|
||||
index: index
|
||||
}) : null
|
||||
}
|
||||
|
||||
function buildChapterCard(item, apiClient, chapter, index, options, className, shape) {
|
||||
var imgUrl = getImgUrl(item, chapter, index, options.width || 400, apiClient),
|
||||
cardImageContainerClass = "cardContent cardContent-shadow cardImageContainer chapterCardImageContainer";
|
||||
options.coverImage && (cardImageContainerClass += " coveredImage");
|
||||
var dataAttributes = ' data-action="play" data-isfolder="' + item.IsFolder + '" data-id="' + item.Id + '" data-serverid="' + item.ServerId + '" data-type="' + item.Type + '" data-mediatype="' + item.MediaType + '" data-positionticks="' + chapter.StartPositionTicks + '"',
|
||||
cardImageContainer = imgUrl ? '<div class="' + cardImageContainerClass + ' lazy" data-src="' + imgUrl + '">' : '<div class="' + cardImageContainerClass + '">';
|
||||
imgUrl || (cardImageContainer += '<i class="md-icon cardImageIcon">local_movies</i>');
|
||||
var nameHtml = "";
|
||||
nameHtml += '<div class="cardText">' + chapter.Name + "</div>", nameHtml += '<div class="cardText">' + datetime.getDisplayRunningTime(chapter.StartPositionTicks) + "</div>";
|
||||
var cardBoxCssClass = "cardBox",
|
||||
cardScalableClass = "cardScalable";
|
||||
if (layoutManager.tv) {
|
||||
var enableFocusTransfrom = !browser.slow && !browser.edge;
|
||||
cardScalableClass += " card-focuscontent", enableFocusTransfrom ? cardBoxCssClass += " cardBox-focustransform cardBox-withfocuscontent" : (cardBoxCssClass += " cardBox-withfocuscontent-large", cardScalableClass += " card-focuscontent-large")
|
||||
}
|
||||
return '<button type="button" class="' + className + '"' + dataAttributes + '><div class="' + cardBoxCssClass + '"><div class="' + cardScalableClass + '"><div class="cardPadder-' + shape + '"></div>' + cardImageContainer + '</div><div class="innerCardFooter">' + nameHtml + "</div></div></div></button>"
|
||||
}
|
||||
|
||||
function buildChapterCards(item, chapters, options) {
|
||||
if (options.parentContainer) {
|
||||
if (!document.body.contains(options.parentContainer)) return;
|
||||
if (!chapters.length) return void options.parentContainer.classList.add("hide");
|
||||
options.parentContainer.classList.remove("hide")
|
||||
}
|
||||
var html = buildChapterCardsHtml(item, chapters, options);
|
||||
options.itemsContainer.innerHTML = html, imageLoader.lazyChildren(options.itemsContainer)
|
||||
}
|
||||
return {
|
||||
buildChapterCards: buildChapterCards
|
||||
}
|
||||
});
|
||||
+18
-1
@@ -1 +1,18 @@
|
||||
define(["cardBuilder"],function(cardBuilder){"use strict";function buildPeopleCards(items,options){options=Object.assign(options||{},{cardLayout:!1,centerText:!0,showTitle:!0,cardFooterAside:"none",showPersonRoleOrType:!0,cardCssClass:"personCard",defaultCardImageIcon:""}),cardBuilder.buildCards(items,options)}return{buildPeopleCards:buildPeopleCards}});
|
||||
define(["cardBuilder"], function(cardBuilder) {
|
||||
"use strict";
|
||||
|
||||
function buildPeopleCards(items, options) {
|
||||
options = Object.assign(options || {}, {
|
||||
cardLayout: !1,
|
||||
centerText: !0,
|
||||
showTitle: !0,
|
||||
cardFooterAside: "none",
|
||||
showPersonRoleOrType: !0,
|
||||
cardCssClass: "personCard",
|
||||
defaultCardImageIcon: ""
|
||||
}), cardBuilder.buildCards(items, options)
|
||||
}
|
||||
return {
|
||||
buildPeopleCards: buildPeopleCards
|
||||
}
|
||||
});
|
||||
+67
-1
@@ -1 +1,67 @@
|
||||
define(["events"],function(events){"use strict";function isValidIpAddress(address){return 1==LinkParser.parse(address).length}function isLocalIpAddress(address){return address=address.toLowerCase(),-1!==address.indexOf("127.0.0.1")||-1!==address.indexOf("localhost")}function getServerAddress(apiClient){var serverAddress=apiClient.serverAddress();if(isValidIpAddress(serverAddress)&&!isLocalIpAddress(serverAddress))return Promise.resolve(serverAddress);var cachedValue=getCachedValue(serverAddress);return cachedValue?Promise.resolve(cachedValue):apiClient.getEndpointInfo().then(function(endpoint){return endpoint.IsInNetwork?apiClient.getPublicSystemInfo().then(function(info){return addToCache(serverAddress,info.LocalAddress),info.LocalAddress}):(addToCache(serverAddress,serverAddress),serverAddress)})}function clearCache(){cache={}}function addToCache(key,value){cache[key]={value:value,time:(new Date).getTime()}}function getCachedValue(key){var obj=cache[key];return obj&&(new Date).getTime()-obj.time<18e4?obj.value:null}!function(){function ensureProtocol(url){return url.match(protocolRegExp)||(url="http://"+url),url}var protocols="(?:(?:http|https|rtsp|ftp):\\/\\/)",linkRegExp=RegExp("(?:(?:(?:http|https|rtsp|ftp):\\/\\/)?(?:(?:[a-z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-f0-9]{2})){1,64}(?:\\:(?:[a-z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-f0-9]{2})){1,25})?\\@)?(?:((([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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?|(?: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]|[0-9])))(?:\\:\\d{1,5})?(?:\\/(?:(?:[a-z0-9\\/\\@\\&\\#\\~\\*\\_\\-\\+])|(?:\\%[a-f0-9]{2})|(?:[\\;\\?\\:\\.\\!\\'\\(\\)\\,\\=]+(?=(?:[a-z0-9\\/\\@\\&\\#\\~\\*\\_\\-\\+])|(?:\\%[a-f0-9]{2}))))*|\\b|$)","gi"),protocolRegExp=RegExp("^"+protocols,"i"),LinkParser={parse:function(text){for(var match,links=[];match=linkRegExp.exec(text);){var txt=match[0],pos=match.index,len=txt.length,url=ensureProtocol(text);links.push({pos:pos,text:txt,len:len,url:url})}return links}};window.LinkParser=LinkParser}();var cache={};return events.on(ConnectionManager,"localusersignedin",clearCache),events.on(ConnectionManager,"localusersignedout",clearCache),{getServerAddress:getServerAddress}});
|
||||
define(["events"], function(events) {
|
||||
"use strict";
|
||||
|
||||
function isValidIpAddress(address) {
|
||||
return 1 == LinkParser.parse(address).length
|
||||
}
|
||||
|
||||
function isLocalIpAddress(address) {
|
||||
return address = address.toLowerCase(), -1 !== address.indexOf("127.0.0.1") || -1 !== address.indexOf("localhost")
|
||||
}
|
||||
|
||||
function getServerAddress(apiClient) {
|
||||
var serverAddress = apiClient.serverAddress();
|
||||
if (isValidIpAddress(serverAddress) && !isLocalIpAddress(serverAddress)) return Promise.resolve(serverAddress);
|
||||
var cachedValue = getCachedValue(serverAddress);
|
||||
return cachedValue ? Promise.resolve(cachedValue) : apiClient.getEndpointInfo().then(function(endpoint) {
|
||||
return endpoint.IsInNetwork ? apiClient.getPublicSystemInfo().then(function(info) {
|
||||
return addToCache(serverAddress, info.LocalAddress), info.LocalAddress
|
||||
}) : (addToCache(serverAddress, serverAddress), serverAddress)
|
||||
})
|
||||
}
|
||||
|
||||
function clearCache() {
|
||||
cache = {}
|
||||
}
|
||||
|
||||
function addToCache(key, value) {
|
||||
cache[key] = {
|
||||
value: value,
|
||||
time: (new Date).getTime()
|
||||
}
|
||||
}
|
||||
|
||||
function getCachedValue(key) {
|
||||
var obj = cache[key];
|
||||
return obj && (new Date).getTime() - obj.time < 18e4 ? obj.value : null
|
||||
}! function() {
|
||||
function ensureProtocol(url) {
|
||||
return url.match(protocolRegExp) || (url = "http://" + url), url
|
||||
}
|
||||
var protocols = "(?:(?:http|https|rtsp|ftp):\\/\\/)",
|
||||
linkRegExp = RegExp("(?:(?:(?:http|https|rtsp|ftp):\\/\\/)?(?:(?:[a-z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-f0-9]{2})){1,64}(?:\\:(?:[a-z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-f0-9]{2})){1,25})?\\@)?(?:((([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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[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|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?|(?: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]|[0-9])))(?:\\:\\d{1,5})?(?:\\/(?:(?:[a-z0-9\\/\\@\\&\\#\\~\\*\\_\\-\\+])|(?:\\%[a-f0-9]{2})|(?:[\\;\\?\\:\\.\\!\\'\\(\\)\\,\\=]+(?=(?:[a-z0-9\\/\\@\\&\\#\\~\\*\\_\\-\\+])|(?:\\%[a-f0-9]{2}))))*|\\b|$)", "gi"),
|
||||
protocolRegExp = RegExp("^" + protocols, "i"),
|
||||
LinkParser = {
|
||||
parse: function(text) {
|
||||
for (var match, links = []; match = linkRegExp.exec(text);) {
|
||||
var txt = match[0],
|
||||
pos = match.index,
|
||||
len = txt.length,
|
||||
url = ensureProtocol(text);
|
||||
links.push({
|
||||
pos: pos,
|
||||
text: txt,
|
||||
len: len,
|
||||
url: url
|
||||
})
|
||||
}
|
||||
return links
|
||||
}
|
||||
};
|
||||
window.LinkParser = LinkParser
|
||||
}();
|
||||
var cache = {};
|
||||
return events.on(ConnectionManager, "localusersignedin", clearCache), events.on(ConnectionManager, "localusersignedout", clearCache), {
|
||||
getServerAddress: getServerAddress
|
||||
}
|
||||
});
|
||||
+425
-1
File diff suppressed because one or more lines are too long
+119
-1
File diff suppressed because one or more lines are too long
@@ -1 +1,22 @@
|
||||
define(["dialog","globalize"],function(dialog,globalize){"use strict";return function(text,title){var options;options="string"==typeof text?{title:title,text:text}:text;var items=[];return items.push({name:options.cancelText||globalize.translate("sharedcomponents#ButtonCancel"),id:"cancel",type:"cancel"===options.primary?"submit":"cancel"}),items.push({name:options.confirmText||globalize.translate("sharedcomponents#ButtonOk"),id:"ok",type:"cancel"===options.primary?"cancel":"submit"}),options.buttons=items,dialog(options).then(function(result){return"ok"===result?Promise.resolve():Promise.reject()})}});
|
||||
define(["dialog", "globalize"], function(dialog, globalize) {
|
||||
"use strict";
|
||||
return function(text, title) {
|
||||
var options;
|
||||
options = "string" == typeof text ? {
|
||||
title: title,
|
||||
text: text
|
||||
} : text;
|
||||
var items = [];
|
||||
return items.push({
|
||||
name: options.cancelText || globalize.translate("sharedcomponents#ButtonCancel"),
|
||||
id: "cancel",
|
||||
type: "cancel" === options.primary ? "submit" : "cancel"
|
||||
}), items.push({
|
||||
name: options.confirmText || globalize.translate("sharedcomponents#ButtonOk"),
|
||||
id: "ok",
|
||||
type: "cancel" === options.primary ? "cancel" : "submit"
|
||||
}), options.buttons = items, dialog(options).then(function(result) {
|
||||
return "ok" === result ? Promise.resolve() : Promise.reject()
|
||||
})
|
||||
}
|
||||
});
|
||||
@@ -1 +1,15 @@
|
||||
define([],function(){"use strict";function replaceAll(str,find,replace){return str.split(find).join(replace)}return function(options){"string"==typeof options&&(options={title:"",text:options});var text=replaceAll(options.text||"","<br/>","\n");return confirm(text)?Promise.resolve():Promise.reject()}});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function replaceAll(str, find, replace) {
|
||||
return str.split(find).join(replace)
|
||||
}
|
||||
return function(options) {
|
||||
"string" == typeof options && (options = {
|
||||
title: "",
|
||||
text: options
|
||||
});
|
||||
var text = replaceAll(options.text || "", "<br/>", "\n");
|
||||
return confirm(text) ? Promise.resolve() : Promise.reject()
|
||||
}
|
||||
});
|
||||
+123
-1
@@ -1 +1,123 @@
|
||||
define(["globalize"],function(globalize){"use strict";function parseISO8601Date(s,toLocal){var re=/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(\.\d+)?(Z|([+-])(\d{2}):(\d{2}))?/,d=s.match(re);if(!d)throw"Couldn't parse ISO 8601 date string '"+s+"'";var a=[1,2,3,4,5,6,10,11];for(var i in a)d[a[i]]=parseInt(d[a[i]],10);d[7]=parseFloat(d[7]);var ms=Date.UTC(d[1],d[2]-1,d[3],d[4],d[5],d[6]);if(d[7]>0&&(ms+=Math.round(1e3*d[7])),"Z"!==d[8]&&d[10]){var offset=60*d[10]*60*1e3;d[11]&&(offset+=60*d[11]*1e3),"-"===d[9]?ms-=offset:ms+=offset}else!1===toLocal&&(ms+=6e4*(new Date).getTimezoneOffset());return new Date(ms)}function getDisplayRunningTime(ticks){var parts=[],hours=ticks/36e9;hours=Math.floor(hours),hours&&parts.push(hours),ticks-=36e9*hours;var minutes=ticks/6e8;minutes=Math.floor(minutes),ticks-=6e8*minutes,minutes<10&&hours&&(minutes="0"+minutes),parts.push(minutes);var seconds=ticks/1e7;return seconds=Math.floor(seconds),seconds<10&&(seconds="0"+seconds),parts.push(seconds),parts.join(":")}function getOptionList(options){var list=[];for(var i in options)list.push({name:i,value:options[i]});return list}function toLocaleString(date,options){if(!date)throw new Error("date cannot be null");if(options=options||{},toLocaleTimeStringSupportsLocales){var currentLocale=globalize.getCurrentDateTimeLocale();if(currentLocale)return date.toLocaleString(currentLocale,options)}return date.toLocaleString()}function toLocaleDateString(date,options){if(!date)throw new Error("date cannot be null");if(options=options||{},toLocaleTimeStringSupportsLocales){var currentLocale=globalize.getCurrentDateTimeLocale();if(currentLocale)return date.toLocaleDateString(currentLocale,options)}var optionList=getOptionList(options);if(1===optionList.length&&"weekday"===optionList[0].name){var weekday=[];return weekday[0]="Sun",weekday[1]="Mon",weekday[2]="Tue",weekday[3]="Wed",weekday[4]="Thu",weekday[5]="Fri",weekday[6]="Sat",weekday[date.getDay()]}return date.toLocaleDateString()}function toLocaleTimeString(date,options){if(!date)throw new Error("date cannot be null");if(options=options||{},toLocaleTimeStringSupportsLocales){var currentLocale=globalize.getCurrentDateTimeLocale();if(currentLocale)return date.toLocaleTimeString(currentLocale,options)}return date.toLocaleTimeString()}function getDisplayTime(date){if(!date)throw new Error("date cannot be null");if("string"===(typeof date).toString().toLowerCase())try{date=parseISO8601Date(date,!0)}catch(err){return date}if(toLocaleTimeStringSupportsLocales)return toLocaleTimeString(date,{hour:"numeric",minute:"2-digit"});var time=toLocaleTimeString(date),timeLower=time.toLowerCase();if(-1!==timeLower.indexOf("am")||-1!==timeLower.indexOf("pm")){time=timeLower;var hour=date.getHours()%12,suffix=date.getHours()>11?"pm":"am";hour||(hour=12);var minutes=date.getMinutes();minutes<10&&(minutes="0"+minutes),minutes=":"+minutes,time=hour+minutes+suffix}else{var timeParts=time.split(":");timeParts.length>2&&(timeParts.length=2,time=timeParts.join(":"))}return time}function isRelativeDay(date,offsetInDays){if(!date)throw new Error("date cannot be null");var yesterday=new Date,day=yesterday.getDate()+offsetInDays;return yesterday.setDate(day),date.getFullYear()===yesterday.getFullYear()&&date.getMonth()===yesterday.getMonth()&&date.getDate()===day}var toLocaleTimeStringSupportsLocales=function(){try{(new Date).toLocaleTimeString("i")}catch(e){return"RangeError"===e.name}return!1}();return{parseISO8601Date:parseISO8601Date,getDisplayRunningTime:getDisplayRunningTime,toLocaleDateString:toLocaleDateString,toLocaleString:toLocaleString,getDisplayTime:getDisplayTime,isRelativeDay:isRelativeDay,toLocaleTimeString:toLocaleTimeString,supportsLocalization:function(){return toLocaleTimeStringSupportsLocales}}});
|
||||
define(["globalize"], function(globalize) {
|
||||
"use strict";
|
||||
|
||||
function parseISO8601Date(s, toLocal) {
|
||||
var re = /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(\.\d+)?(Z|([+-])(\d{2}):(\d{2}))?/,
|
||||
d = s.match(re);
|
||||
if (!d) throw "Couldn't parse ISO 8601 date string '" + s + "'";
|
||||
var a = [1, 2, 3, 4, 5, 6, 10, 11];
|
||||
for (var i in a) d[a[i]] = parseInt(d[a[i]], 10);
|
||||
d[7] = parseFloat(d[7]);
|
||||
var ms = Date.UTC(d[1], d[2] - 1, d[3], d[4], d[5], d[6]);
|
||||
if (d[7] > 0 && (ms += Math.round(1e3 * d[7])), "Z" !== d[8] && d[10]) {
|
||||
var offset = 60 * d[10] * 60 * 1e3;
|
||||
d[11] && (offset += 60 * d[11] * 1e3), "-" === d[9] ? ms -= offset : ms += offset
|
||||
} else !1 === toLocal && (ms += 6e4 * (new Date).getTimezoneOffset());
|
||||
return new Date(ms)
|
||||
}
|
||||
|
||||
function getDisplayRunningTime(ticks) {
|
||||
var parts = [],
|
||||
hours = ticks / 36e9;
|
||||
hours = Math.floor(hours), hours && parts.push(hours), ticks -= 36e9 * hours;
|
||||
var minutes = ticks / 6e8;
|
||||
minutes = Math.floor(minutes), ticks -= 6e8 * minutes, minutes < 10 && hours && (minutes = "0" + minutes), parts.push(minutes);
|
||||
var seconds = ticks / 1e7;
|
||||
return seconds = Math.floor(seconds), seconds < 10 && (seconds = "0" + seconds), parts.push(seconds), parts.join(":")
|
||||
}
|
||||
|
||||
function getOptionList(options) {
|
||||
var list = [];
|
||||
for (var i in options) list.push({
|
||||
name: i,
|
||||
value: options[i]
|
||||
});
|
||||
return list
|
||||
}
|
||||
|
||||
function toLocaleString(date, options) {
|
||||
if (!date) throw new Error("date cannot be null");
|
||||
if (options = options || {}, toLocaleTimeStringSupportsLocales) {
|
||||
var currentLocale = globalize.getCurrentDateTimeLocale();
|
||||
if (currentLocale) return date.toLocaleString(currentLocale, options)
|
||||
}
|
||||
return date.toLocaleString()
|
||||
}
|
||||
|
||||
function toLocaleDateString(date, options) {
|
||||
if (!date) throw new Error("date cannot be null");
|
||||
if (options = options || {}, toLocaleTimeStringSupportsLocales) {
|
||||
var currentLocale = globalize.getCurrentDateTimeLocale();
|
||||
if (currentLocale) return date.toLocaleDateString(currentLocale, options)
|
||||
}
|
||||
var optionList = getOptionList(options);
|
||||
if (1 === optionList.length && "weekday" === optionList[0].name) {
|
||||
var weekday = [];
|
||||
return weekday[0] = "Sun", weekday[1] = "Mon", weekday[2] = "Tue", weekday[3] = "Wed", weekday[4] = "Thu", weekday[5] = "Fri", weekday[6] = "Sat", weekday[date.getDay()]
|
||||
}
|
||||
return date.toLocaleDateString()
|
||||
}
|
||||
|
||||
function toLocaleTimeString(date, options) {
|
||||
if (!date) throw new Error("date cannot be null");
|
||||
if (options = options || {}, toLocaleTimeStringSupportsLocales) {
|
||||
var currentLocale = globalize.getCurrentDateTimeLocale();
|
||||
if (currentLocale) return date.toLocaleTimeString(currentLocale, options)
|
||||
}
|
||||
return date.toLocaleTimeString()
|
||||
}
|
||||
|
||||
function getDisplayTime(date) {
|
||||
if (!date) throw new Error("date cannot be null");
|
||||
if ("string" === (typeof date).toString().toLowerCase()) try {
|
||||
date = parseISO8601Date(date, !0)
|
||||
} catch (err) {
|
||||
return date
|
||||
}
|
||||
if (toLocaleTimeStringSupportsLocales) return toLocaleTimeString(date, {
|
||||
hour: "numeric",
|
||||
minute: "2-digit"
|
||||
});
|
||||
var time = toLocaleTimeString(date),
|
||||
timeLower = time.toLowerCase();
|
||||
if (-1 !== timeLower.indexOf("am") || -1 !== timeLower.indexOf("pm")) {
|
||||
time = timeLower;
|
||||
var hour = date.getHours() % 12,
|
||||
suffix = date.getHours() > 11 ? "pm" : "am";
|
||||
hour || (hour = 12);
|
||||
var minutes = date.getMinutes();
|
||||
minutes < 10 && (minutes = "0" + minutes), minutes = ":" + minutes, time = hour + minutes + suffix
|
||||
} else {
|
||||
var timeParts = time.split(":");
|
||||
timeParts.length > 2 && (timeParts.length = 2, time = timeParts.join(":"))
|
||||
}
|
||||
return time
|
||||
}
|
||||
|
||||
function isRelativeDay(date, offsetInDays) {
|
||||
if (!date) throw new Error("date cannot be null");
|
||||
var yesterday = new Date,
|
||||
day = yesterday.getDate() + offsetInDays;
|
||||
return yesterday.setDate(day), date.getFullYear() === yesterday.getFullYear() && date.getMonth() === yesterday.getMonth() && date.getDate() === day
|
||||
}
|
||||
var toLocaleTimeStringSupportsLocales = function() {
|
||||
try {
|
||||
(new Date).toLocaleTimeString("i")
|
||||
} catch (e) {
|
||||
return "RangeError" === e.name
|
||||
}
|
||||
return !1
|
||||
}();
|
||||
return {
|
||||
parseISO8601Date: parseISO8601Date,
|
||||
getDisplayRunningTime: getDisplayRunningTime,
|
||||
toLocaleDateString: toLocaleDateString,
|
||||
toLocaleString: toLocaleString,
|
||||
getDisplayTime: getDisplayTime,
|
||||
isRelativeDay: isRelativeDay,
|
||||
toLocaleTimeString: toLocaleTimeString,
|
||||
supportsLocalization: function() {
|
||||
return toLocaleTimeStringSupportsLocales
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1 +1,39 @@
|
||||
define(["connectionManager","confirm","appRouter","globalize"],function(connectionManager,confirm,appRouter,globalize){"use strict";function alertText(options){return new Promise(function(resolve,reject){require(["alert"],function(alert){alert(options).then(resolve,resolve)})})}function deleteItem(options){var item=options.item,itemId=item.Id,parentId=item.SeasonId||item.SeriesId||item.ParentId,serverId=item.ServerId,msg=globalize.translate("sharedcomponents#ConfirmDeleteItem"),title=globalize.translate("sharedcomponents#HeaderDeleteItem"),apiClient=connectionManager.getApiClient(item.ServerId);return confirm({title:title,text:msg,confirmText:globalize.translate("sharedcomponents#Delete"),primary:"cancel"}).then(function(){return apiClient.deleteItem(itemId).then(function(){options.navigate&&(parentId?appRouter.showItem(parentId,serverId):appRouter.goHome())},function(err){var result=function(){return Promise.reject(err)};return alertText(globalize.translate("sharedcomponents#ErrorDeletingItem")).then(result,result)})})}return{deleteItem:deleteItem}});
|
||||
define(["connectionManager", "confirm", "appRouter", "globalize"], function(connectionManager, confirm, appRouter, globalize) {
|
||||
"use strict";
|
||||
|
||||
function alertText(options) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
require(["alert"], function(alert) {
|
||||
alert(options).then(resolve, resolve)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function deleteItem(options) {
|
||||
var item = options.item,
|
||||
itemId = item.Id,
|
||||
parentId = item.SeasonId || item.SeriesId || item.ParentId,
|
||||
serverId = item.ServerId,
|
||||
msg = globalize.translate("sharedcomponents#ConfirmDeleteItem"),
|
||||
title = globalize.translate("sharedcomponents#HeaderDeleteItem"),
|
||||
apiClient = connectionManager.getApiClient(item.ServerId);
|
||||
return confirm({
|
||||
title: title,
|
||||
text: msg,
|
||||
confirmText: globalize.translate("sharedcomponents#Delete"),
|
||||
primary: "cancel"
|
||||
}).then(function() {
|
||||
return apiClient.deleteItem(itemId).then(function() {
|
||||
options.navigate && (parentId ? appRouter.showItem(parentId, serverId) : appRouter.goHome())
|
||||
}, function(err) {
|
||||
var result = function() {
|
||||
return Promise.reject(err)
|
||||
};
|
||||
return alertText(globalize.translate("sharedcomponents#ErrorDeletingItem")).then(result, result)
|
||||
})
|
||||
})
|
||||
}
|
||||
return {
|
||||
deleteItem: deleteItem
|
||||
}
|
||||
});
|
||||
@@ -1 +1,46 @@
|
||||
define(["dialogHelper","dom","layoutManager","scrollHelper","globalize","require","material-icons","emby-button","paper-icon-button-light","emby-input","formDialogStyle","flexStyles"],function(dialogHelper,dom,layoutManager,scrollHelper,globalize,require){"use strict";function showDialog(options,template){function onButtonClick(){dialogResult=this.getAttribute("data-id"),dialogHelper.close(dlg)}var dialogOptions={removeOnClose:!0,scrollY:!1},enableTvLayout=layoutManager.tv;enableTvLayout&&(dialogOptions.size="fullscreen");var dlg=dialogHelper.createDialog(dialogOptions);dlg.classList.add("formDialog"),dlg.innerHTML=globalize.translateHtml(template,"sharedcomponents"),dlg.classList.add("align-items-center"),dlg.classList.add("justify-content-center");var formDialogContent=dlg.querySelector(".formDialogContent");formDialogContent.classList.add("no-grow"),enableTvLayout?(formDialogContent.style["max-width"]="50%",formDialogContent.style["max-height"]="60%",scrollHelper.centerFocus.on(formDialogContent,!1)):(formDialogContent.style.maxWidth=Math.min(150*options.buttons.length+200,dom.getWindowSize().innerWidth-50)+"px",dlg.classList.add("dialog-fullscreen-lowres")),options.title?dlg.querySelector(".formDialogHeaderTitle").innerHTML=options.title||"":dlg.querySelector(".formDialogHeaderTitle").classList.add("hide");var displayText=options.html||options.text||"";dlg.querySelector(".text").innerHTML=displayText,displayText||dlg.querySelector(".dialogContentInner").classList.add("hide");var i,length,html="",hasDescriptions=!1;for(i=0,length=options.buttons.length;i<length;i++){var item=options.buttons[i],autoFocus=0===i?" autofocus":"",buttonClass="btnOption raised formDialogFooterItem formDialogFooterItem-autosize";item.type&&(buttonClass+=" button-"+item.type),item.description&&(hasDescriptions=!0),hasDescriptions&&(buttonClass+=" formDialogFooterItem-vertical formDialogFooterItem-nomarginbottom"),html+='<button is="emby-button" type="button" class="'+buttonClass+'" data-id="'+item.id+'"'+autoFocus+">"+item.name+"</button>",item.description&&(html+='<div class="formDialogFooterItem formDialogFooterItem-autosize fieldDescription" style="margin-top:.25em!important;margin-bottom:1.25em!important;">'+item.description+"</div>")}dlg.querySelector(".formDialogFooter").innerHTML=html,hasDescriptions&&dlg.querySelector(".formDialogFooter").classList.add("formDialogFooter-vertical");var dialogResult,buttons=dlg.querySelectorAll(".btnOption");for(i=0,length=buttons.length;i<length;i++)buttons[i].addEventListener("click",onButtonClick);return dialogHelper.open(dlg).then(function(){return enableTvLayout&&scrollHelper.centerFocus.off(dlg.querySelector(".formDialogContent"),!1),dialogResult||Promise.reject()})}return function(text,title){var options;return options="string"==typeof text?{title:title,text:text}:text,new Promise(function(resolve,reject){require(["text!./dialog.template.html"],function(template){showDialog(options,template).then(resolve,reject)})})}});
|
||||
define(["dialogHelper", "dom", "layoutManager", "scrollHelper", "globalize", "require", "material-icons", "emby-button", "paper-icon-button-light", "emby-input", "formDialogStyle", "flexStyles"], function(dialogHelper, dom, layoutManager, scrollHelper, globalize, require) {
|
||||
"use strict";
|
||||
|
||||
function showDialog(options, template) {
|
||||
function onButtonClick() {
|
||||
dialogResult = this.getAttribute("data-id"), dialogHelper.close(dlg)
|
||||
}
|
||||
var dialogOptions = {
|
||||
removeOnClose: !0,
|
||||
scrollY: !1
|
||||
},
|
||||
enableTvLayout = layoutManager.tv;
|
||||
enableTvLayout && (dialogOptions.size = "fullscreen");
|
||||
var dlg = dialogHelper.createDialog(dialogOptions);
|
||||
dlg.classList.add("formDialog"), dlg.innerHTML = globalize.translateHtml(template, "sharedcomponents"), dlg.classList.add("align-items-center"), dlg.classList.add("justify-content-center");
|
||||
var formDialogContent = dlg.querySelector(".formDialogContent");
|
||||
formDialogContent.classList.add("no-grow"), enableTvLayout ? (formDialogContent.style["max-width"] = "50%", formDialogContent.style["max-height"] = "60%", scrollHelper.centerFocus.on(formDialogContent, !1)) : (formDialogContent.style.maxWidth = Math.min(150 * options.buttons.length + 200, dom.getWindowSize().innerWidth - 50) + "px", dlg.classList.add("dialog-fullscreen-lowres")), options.title ? dlg.querySelector(".formDialogHeaderTitle").innerHTML = options.title || "" : dlg.querySelector(".formDialogHeaderTitle").classList.add("hide");
|
||||
var displayText = options.html || options.text || "";
|
||||
dlg.querySelector(".text").innerHTML = displayText, displayText || dlg.querySelector(".dialogContentInner").classList.add("hide");
|
||||
var i, length, html = "",
|
||||
hasDescriptions = !1;
|
||||
for (i = 0, length = options.buttons.length; i < length; i++) {
|
||||
var item = options.buttons[i],
|
||||
autoFocus = 0 === i ? " autofocus" : "",
|
||||
buttonClass = "btnOption raised formDialogFooterItem formDialogFooterItem-autosize";
|
||||
item.type && (buttonClass += " button-" + item.type), item.description && (hasDescriptions = !0), hasDescriptions && (buttonClass += " formDialogFooterItem-vertical formDialogFooterItem-nomarginbottom"), html += '<button is="emby-button" type="button" class="' + buttonClass + '" data-id="' + item.id + '"' + autoFocus + ">" + item.name + "</button>", item.description && (html += '<div class="formDialogFooterItem formDialogFooterItem-autosize fieldDescription" style="margin-top:.25em!important;margin-bottom:1.25em!important;">' + item.description + "</div>")
|
||||
}
|
||||
dlg.querySelector(".formDialogFooter").innerHTML = html, hasDescriptions && dlg.querySelector(".formDialogFooter").classList.add("formDialogFooter-vertical");
|
||||
var dialogResult, buttons = dlg.querySelectorAll(".btnOption");
|
||||
for (i = 0, length = buttons.length; i < length; i++) buttons[i].addEventListener("click", onButtonClick);
|
||||
return dialogHelper.open(dlg).then(function() {
|
||||
return enableTvLayout && scrollHelper.centerFocus.off(dlg.querySelector(".formDialogContent"), !1), dialogResult || Promise.reject()
|
||||
})
|
||||
}
|
||||
return function(text, title) {
|
||||
var options;
|
||||
return options = "string" == typeof text ? {
|
||||
title: title,
|
||||
text: text
|
||||
} : text, new Promise(function(resolve, reject) {
|
||||
require(["text!./dialog.template.html"], function(template) {
|
||||
showDialog(options, template).then(resolve, reject)
|
||||
})
|
||||
})
|
||||
}
|
||||
});
|
||||
+225
-1
File diff suppressed because one or more lines are too long
+122
-1
File diff suppressed because one or more lines are too long
+105
-1
@@ -1 +1,105 @@
|
||||
define([],function(){"use strict";function parentWithAttribute(elem,name,value){for(;value?elem.getAttribute(name)!==value:!elem.getAttribute(name);)if(!(elem=elem.parentNode)||!elem.getAttribute)return null;return elem}function parentWithTag(elem,tagNames){for(Array.isArray(tagNames)||(tagNames=[tagNames]);-1===tagNames.indexOf(elem.tagName||"");)if(!(elem=elem.parentNode))return null;return elem}function containsAnyClass(classList,classNames){for(var i=0,length=classNames.length;i<length;i++)if(classList.contains(classNames[i]))return!0;return!1}function parentWithClass(elem,classNames){for(Array.isArray(classNames)||(classNames=[classNames]);!elem.classList||!containsAnyClass(elem.classList,classNames);)if(!(elem=elem.parentNode))return null;return elem}function addEventListenerWithOptions(target,type,handler,options){var optionsOrCapture=options;supportsCaptureOption||(optionsOrCapture=options.capture),target.addEventListener(type,handler,optionsOrCapture)}function removeEventListenerWithOptions(target,type,handler,options){var optionsOrCapture=options;supportsCaptureOption||(optionsOrCapture=options.capture),target.removeEventListener(type,handler,optionsOrCapture)}function clearWindowSize(){windowSize=null}function getWindowSize(){return windowSize||(windowSize={innerHeight:window.innerHeight,innerWidth:window.innerWidth},windowSizeEventsBound||(windowSizeEventsBound=!0,addEventListenerWithOptions(window,"orientationchange",clearWindowSize,{passive:!0}),addEventListenerWithOptions(window,"resize",clearWindowSize,{passive:!0}))),windowSize}function whichAnimationEvent(){if(_animationEvent)return _animationEvent;var t,el=document.createElement("div"),animations={animation:"animationend",OAnimation:"oAnimationEnd",MozAnimation:"animationend",WebkitAnimation:"webkitAnimationEnd"};for(t in animations)if(void 0!==el.style[t])return _animationEvent=animations[t],animations[t];return _animationEvent="animationend"}function whichAnimationCancelEvent(){return whichAnimationEvent().replace("animationend","animationcancel").replace("AnimationEnd","AnimationCancel")}function whichTransitionEvent(){if(_transitionEvent)return _transitionEvent;var t,el=document.createElement("div"),transitions={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(t in transitions)if(void 0!==el.style[t])return _transitionEvent=transitions[t],transitions[t];return _transitionEvent="transitionend"}var supportsCaptureOption=!1;try{var opts=Object.defineProperty({},"capture",{get:function(){supportsCaptureOption=!0}});window.addEventListener("test",null,opts)}catch(e){}var windowSize,windowSizeEventsBound,_animationEvent,_transitionEvent;return{parentWithAttribute:parentWithAttribute,parentWithClass:parentWithClass,parentWithTag:parentWithTag,addEventListener:addEventListenerWithOptions,removeEventListener:removeEventListenerWithOptions,getWindowSize:getWindowSize,whichTransitionEvent:whichTransitionEvent,whichAnimationEvent:whichAnimationEvent,whichAnimationCancelEvent:whichAnimationCancelEvent}});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function parentWithAttribute(elem, name, value) {
|
||||
for (; value ? elem.getAttribute(name) !== value : !elem.getAttribute(name);)
|
||||
if (!(elem = elem.parentNode) || !elem.getAttribute) return null;
|
||||
return elem
|
||||
}
|
||||
|
||||
function parentWithTag(elem, tagNames) {
|
||||
for (Array.isArray(tagNames) || (tagNames = [tagNames]); - 1 === tagNames.indexOf(elem.tagName || "");)
|
||||
if (!(elem = elem.parentNode)) return null;
|
||||
return elem
|
||||
}
|
||||
|
||||
function containsAnyClass(classList, classNames) {
|
||||
for (var i = 0, length = classNames.length; i < length; i++)
|
||||
if (classList.contains(classNames[i])) return !0;
|
||||
return !1
|
||||
}
|
||||
|
||||
function parentWithClass(elem, classNames) {
|
||||
for (Array.isArray(classNames) || (classNames = [classNames]); !elem.classList || !containsAnyClass(elem.classList, classNames);)
|
||||
if (!(elem = elem.parentNode)) return null;
|
||||
return elem
|
||||
}
|
||||
|
||||
function addEventListenerWithOptions(target, type, handler, options) {
|
||||
var optionsOrCapture = options;
|
||||
supportsCaptureOption || (optionsOrCapture = options.capture), target.addEventListener(type, handler, optionsOrCapture)
|
||||
}
|
||||
|
||||
function removeEventListenerWithOptions(target, type, handler, options) {
|
||||
var optionsOrCapture = options;
|
||||
supportsCaptureOption || (optionsOrCapture = options.capture), target.removeEventListener(type, handler, optionsOrCapture)
|
||||
}
|
||||
|
||||
function clearWindowSize() {
|
||||
windowSize = null
|
||||
}
|
||||
|
||||
function getWindowSize() {
|
||||
return windowSize || (windowSize = {
|
||||
innerHeight: window.innerHeight,
|
||||
innerWidth: window.innerWidth
|
||||
}, windowSizeEventsBound || (windowSizeEventsBound = !0, addEventListenerWithOptions(window, "orientationchange", clearWindowSize, {
|
||||
passive: !0
|
||||
}), addEventListenerWithOptions(window, "resize", clearWindowSize, {
|
||||
passive: !0
|
||||
}))), windowSize
|
||||
}
|
||||
|
||||
function whichAnimationEvent() {
|
||||
if (_animationEvent) return _animationEvent;
|
||||
var t, el = document.createElement("div"),
|
||||
animations = {
|
||||
animation: "animationend",
|
||||
OAnimation: "oAnimationEnd",
|
||||
MozAnimation: "animationend",
|
||||
WebkitAnimation: "webkitAnimationEnd"
|
||||
};
|
||||
for (t in animations)
|
||||
if (void 0 !== el.style[t]) return _animationEvent = animations[t], animations[t];
|
||||
return _animationEvent = "animationend"
|
||||
}
|
||||
|
||||
function whichAnimationCancelEvent() {
|
||||
return whichAnimationEvent().replace("animationend", "animationcancel").replace("AnimationEnd", "AnimationCancel")
|
||||
}
|
||||
|
||||
function whichTransitionEvent() {
|
||||
if (_transitionEvent) return _transitionEvent;
|
||||
var t, el = document.createElement("div"),
|
||||
transitions = {
|
||||
transition: "transitionend",
|
||||
OTransition: "oTransitionEnd",
|
||||
MozTransition: "transitionend",
|
||||
WebkitTransition: "webkitTransitionEnd"
|
||||
};
|
||||
for (t in transitions)
|
||||
if (void 0 !== el.style[t]) return _transitionEvent = transitions[t], transitions[t];
|
||||
return _transitionEvent = "transitionend"
|
||||
}
|
||||
var supportsCaptureOption = !1;
|
||||
try {
|
||||
var opts = Object.defineProperty({}, "capture", {
|
||||
get: function() {
|
||||
supportsCaptureOption = !0
|
||||
}
|
||||
});
|
||||
window.addEventListener("test", null, opts)
|
||||
} catch (e) {}
|
||||
var windowSize, windowSizeEventsBound, _animationEvent, _transitionEvent;
|
||||
return {
|
||||
parentWithAttribute: parentWithAttribute,
|
||||
parentWithClass: parentWithClass,
|
||||
parentWithTag: parentWithTag,
|
||||
addEventListener: addEventListenerWithOptions,
|
||||
removeEventListener: removeEventListenerWithOptions,
|
||||
getWindowSize: getWindowSize,
|
||||
whichTransitionEvent: whichTransitionEvent,
|
||||
whichAnimationEvent: whichAnimationEvent,
|
||||
whichAnimationCancelEvent: whichAnimationCancelEvent
|
||||
}
|
||||
});
|
||||
+29
-1
@@ -1 +1,29 @@
|
||||
define(["browser","dom","layoutManager","shell","appRouter","apphost","css!./emby-button","registerElement"],function(browser,dom,layoutManager,shell,appRouter,appHost){"use strict";function openPremiumInfo(){require(["registrationServices"],function(registrationServices){registrationServices.showPremiereInfo()})}function onAnchorClick(e){var href=this.getAttribute("href")||"";"#"!==href?this.getAttribute("target")?-1===href.indexOf("emby.media/premiere")||appHost.supports("externalpremium")?appHost.supports("targetblank")||(e.preventDefault(),shell.openUrl(href)):(e.preventDefault(),openPremiumInfo()):appRouter.handleAnchorClick(e):e.preventDefault()}var EmbyButtonPrototype=Object.create(HTMLButtonElement.prototype),EmbyLinkButtonPrototype=Object.create(HTMLAnchorElement.prototype);return EmbyButtonPrototype.createdCallback=function(){this.classList.contains("emby-button")||(this.classList.add("emby-button"),browser.firefox&&this.classList.add("button-link-inline"),layoutManager.tv&&("false"!==this.getAttribute("data-focusscale")&&this.classList.add("emby-button-focusscale"),this.classList.add("emby-button-tv")))},EmbyButtonPrototype.attachedCallback=function(){"A"===this.tagName&&(dom.removeEventListener(this,"click",onAnchorClick,{}),dom.addEventListener(this,"click",onAnchorClick,{}),"true"===this.getAttribute("data-autohide")&&(appHost.supports("externallinks")?this.classList.remove("hide"):this.classList.add("hide")))},EmbyButtonPrototype.detachedCallback=function(){dom.removeEventListener(this,"click",onAnchorClick,{})},EmbyLinkButtonPrototype.createdCallback=EmbyButtonPrototype.createdCallback,EmbyLinkButtonPrototype.attachedCallback=EmbyButtonPrototype.attachedCallback,document.registerElement("emby-button",{prototype:EmbyButtonPrototype,extends:"button"}),document.registerElement("emby-linkbutton",{prototype:EmbyLinkButtonPrototype,extends:"a"}),EmbyButtonPrototype});
|
||||
define(["browser", "dom", "layoutManager", "shell", "appRouter", "apphost", "css!./emby-button", "registerElement"], function(browser, dom, layoutManager, shell, appRouter, appHost) {
|
||||
"use strict";
|
||||
|
||||
function openPremiumInfo() {
|
||||
require(["registrationServices"], function(registrationServices) {
|
||||
registrationServices.showPremiereInfo()
|
||||
})
|
||||
}
|
||||
|
||||
function onAnchorClick(e) {
|
||||
var href = this.getAttribute("href") || "";
|
||||
"#" !== href ? this.getAttribute("target") ? -1 === href.indexOf("emby.media/premiere") || appHost.supports("externalpremium") ? appHost.supports("targetblank") || (e.preventDefault(), shell.openUrl(href)) : (e.preventDefault(), openPremiumInfo()) : appRouter.handleAnchorClick(e) : e.preventDefault()
|
||||
}
|
||||
var EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype),
|
||||
EmbyLinkButtonPrototype = Object.create(HTMLAnchorElement.prototype);
|
||||
return EmbyButtonPrototype.createdCallback = function() {
|
||||
this.classList.contains("emby-button") || (this.classList.add("emby-button"), browser.firefox && this.classList.add("button-link-inline"), layoutManager.tv && ("false" !== this.getAttribute("data-focusscale") && this.classList.add("emby-button-focusscale"), this.classList.add("emby-button-tv")))
|
||||
}, EmbyButtonPrototype.attachedCallback = function() {
|
||||
"A" === this.tagName && (dom.removeEventListener(this, "click", onAnchorClick, {}), dom.addEventListener(this, "click", onAnchorClick, {}), "true" === this.getAttribute("data-autohide") && (appHost.supports("externallinks") ? this.classList.remove("hide") : this.classList.add("hide")))
|
||||
}, EmbyButtonPrototype.detachedCallback = function() {
|
||||
dom.removeEventListener(this, "click", onAnchorClick, {})
|
||||
}, EmbyLinkButtonPrototype.createdCallback = EmbyButtonPrototype.createdCallback, EmbyLinkButtonPrototype.attachedCallback = EmbyButtonPrototype.attachedCallback, document.registerElement("emby-button", {
|
||||
prototype: EmbyButtonPrototype,
|
||||
extends: "button"
|
||||
}), document.registerElement("emby-linkbutton", {
|
||||
prototype: EmbyLinkButtonPrototype,
|
||||
extends: "a"
|
||||
}), EmbyButtonPrototype
|
||||
});
|
||||
+10
-1
@@ -1 +1,10 @@
|
||||
define(["layoutManager","css!./emby-button","registerElement"],function(layoutManager){"use strict";var EmbyButtonPrototype=Object.create(HTMLButtonElement.prototype);EmbyButtonPrototype.createdCallback=function(){this.classList.add("paper-icon-button-light"),layoutManager.tv&&this.classList.add("icon-button-focusscale")},document.registerElement("paper-icon-button-light",{prototype:EmbyButtonPrototype,extends:"button"})});
|
||||
define(["layoutManager", "css!./emby-button", "registerElement"], function(layoutManager) {
|
||||
"use strict";
|
||||
var EmbyButtonPrototype = Object.create(HTMLButtonElement.prototype);
|
||||
EmbyButtonPrototype.createdCallback = function() {
|
||||
this.classList.add("paper-icon-button-light"), layoutManager.tv && this.classList.add("icon-button-focusscale")
|
||||
}, document.registerElement("paper-icon-button-light", {
|
||||
prototype: EmbyButtonPrototype,
|
||||
extends: "button"
|
||||
})
|
||||
});
|
||||
+55
-1
@@ -1 +1,55 @@
|
||||
define(["browser","dom","css!./emby-checkbox","registerElement"],function(browser,dom){"use strict";function onKeyDown(e){if(13===e.keyCode)return e.preventDefault(),this.checked=!this.checked,this.dispatchEvent(new CustomEvent("change",{bubbles:!0})),!1}function forceRefresh(loading){var elem=this.parentNode;elem.style.webkitAnimationName="repaintChrome",elem.style.webkitAnimationDelay=!0===loading?"500ms":"",elem.style.webkitAnimationDuration="10ms",elem.style.webkitAnimationIterationCount="1",setTimeout(function(){elem.style.webkitAnimationName=""},!0===loading?520:20)}var EmbyCheckboxPrototype=Object.create(HTMLInputElement.prototype),enableRefreshHack=!!(browser.tizen||browser.orsay||browser.operaTv||browser.web0s);EmbyCheckboxPrototype.attachedCallback=function(){if("true"!==this.getAttribute("data-embycheckbox")){this.setAttribute("data-embycheckbox","true"),this.classList.add("emby-checkbox");var labelElement=this.parentNode;labelElement.classList.add("emby-checkbox-label");var labelTextElement=labelElement.querySelector("span"),outlineClass="checkboxOutline",customClass=this.getAttribute("data-outlineclass");customClass&&(outlineClass+=" "+customClass);var checkedIcon=this.getAttribute("data-checkedicon")||"",uncheckedIcon=this.getAttribute("data-uncheckedicon")||"",checkHtml='<i class="md-icon checkboxIcon checkboxIcon-checked">'+checkedIcon+"</i>",uncheckedHtml='<i class="md-icon checkboxIcon checkboxIcon-unchecked">'+uncheckedIcon+"</i>";labelElement.insertAdjacentHTML("beforeend",'<span class="emby-checkbox-focushelper"></span><span class="'+outlineClass+'">'+checkHtml+uncheckedHtml+"</span>"),labelTextElement.classList.add("checkboxLabel"),this.addEventListener("keydown",onKeyDown),enableRefreshHack&&(forceRefresh.call(this,!0),dom.addEventListener(this,"click",forceRefresh,{passive:!0}),dom.addEventListener(this,"blur",forceRefresh,{passive:!0}),dom.addEventListener(this,"focus",forceRefresh,{passive:!0}),dom.addEventListener(this,"change",forceRefresh,{passive:!0}))}},EmbyCheckboxPrototype.detachedCallback=function(){this.removeEventListener("keydown",onKeyDown),dom.removeEventListener(this,"click",forceRefresh,{passive:!0}),dom.removeEventListener(this,"blur",forceRefresh,{passive:!0}),dom.removeEventListener(this,"focus",forceRefresh,{passive:!0}),dom.removeEventListener(this,"change",forceRefresh,{passive:!0})},document.registerElement("emby-checkbox",{prototype:EmbyCheckboxPrototype,extends:"input"})});
|
||||
define(["browser", "dom", "css!./emby-checkbox", "registerElement"], function(browser, dom) {
|
||||
"use strict";
|
||||
|
||||
function onKeyDown(e) {
|
||||
if (13 === e.keyCode) return e.preventDefault(), this.checked = !this.checked, this.dispatchEvent(new CustomEvent("change", {
|
||||
bubbles: !0
|
||||
})), !1
|
||||
}
|
||||
|
||||
function forceRefresh(loading) {
|
||||
var elem = this.parentNode;
|
||||
elem.style.webkitAnimationName = "repaintChrome", elem.style.webkitAnimationDelay = !0 === loading ? "500ms" : "", elem.style.webkitAnimationDuration = "10ms", elem.style.webkitAnimationIterationCount = "1", setTimeout(function() {
|
||||
elem.style.webkitAnimationName = ""
|
||||
}, !0 === loading ? 520 : 20)
|
||||
}
|
||||
var EmbyCheckboxPrototype = Object.create(HTMLInputElement.prototype),
|
||||
enableRefreshHack = !!(browser.tizen || browser.orsay || browser.operaTv || browser.web0s);
|
||||
EmbyCheckboxPrototype.attachedCallback = function() {
|
||||
if ("true" !== this.getAttribute("data-embycheckbox")) {
|
||||
this.setAttribute("data-embycheckbox", "true"), this.classList.add("emby-checkbox");
|
||||
var labelElement = this.parentNode;
|
||||
labelElement.classList.add("emby-checkbox-label");
|
||||
var labelTextElement = labelElement.querySelector("span"),
|
||||
outlineClass = "checkboxOutline",
|
||||
customClass = this.getAttribute("data-outlineclass");
|
||||
customClass && (outlineClass += " " + customClass);
|
||||
var checkedIcon = this.getAttribute("data-checkedicon") || "",
|
||||
uncheckedIcon = this.getAttribute("data-uncheckedicon") || "",
|
||||
checkHtml = '<i class="md-icon checkboxIcon checkboxIcon-checked">' + checkedIcon + "</i>",
|
||||
uncheckedHtml = '<i class="md-icon checkboxIcon checkboxIcon-unchecked">' + uncheckedIcon + "</i>";
|
||||
labelElement.insertAdjacentHTML("beforeend", '<span class="emby-checkbox-focushelper"></span><span class="' + outlineClass + '">' + checkHtml + uncheckedHtml + "</span>"), labelTextElement.classList.add("checkboxLabel"), this.addEventListener("keydown", onKeyDown), enableRefreshHack && (forceRefresh.call(this, !0), dom.addEventListener(this, "click", forceRefresh, {
|
||||
passive: !0
|
||||
}), dom.addEventListener(this, "blur", forceRefresh, {
|
||||
passive: !0
|
||||
}), dom.addEventListener(this, "focus", forceRefresh, {
|
||||
passive: !0
|
||||
}), dom.addEventListener(this, "change", forceRefresh, {
|
||||
passive: !0
|
||||
}))
|
||||
}
|
||||
}, EmbyCheckboxPrototype.detachedCallback = function() {
|
||||
this.removeEventListener("keydown", onKeyDown), dom.removeEventListener(this, "click", forceRefresh, {
|
||||
passive: !0
|
||||
}), dom.removeEventListener(this, "blur", forceRefresh, {
|
||||
passive: !0
|
||||
}), dom.removeEventListener(this, "focus", forceRefresh, {
|
||||
passive: !0
|
||||
}), dom.removeEventListener(this, "change", forceRefresh, {
|
||||
passive: !0
|
||||
})
|
||||
}, document.registerElement("emby-checkbox", {
|
||||
prototype: EmbyCheckboxPrototype,
|
||||
extends: "input"
|
||||
})
|
||||
});
|
||||
+43
-1
@@ -1 +1,43 @@
|
||||
define(["browser","css!./emby-collapse","registerElement","emby-button"],function(browser){"use strict";function slideDownToShow(button,elem){elem.classList.remove("hide"),elem.classList.add("expanded"),elem.style.height="auto";var height=elem.offsetHeight+"px";elem.style.height="0";elem.offsetHeight;elem.style.height=height,setTimeout(function(){elem.classList.contains("expanded")?elem.classList.remove("hide"):elem.classList.add("hide"),elem.style.height="auto"},300),button.querySelector("i").classList.add("emby-collapse-expandIconExpanded")}function slideUpToHide(button,elem){elem.style.height=elem.offsetHeight+"px";elem.offsetHeight;elem.classList.remove("expanded"),elem.style.height="0",setTimeout(function(){elem.classList.contains("expanded")?elem.classList.remove("hide"):elem.classList.add("hide")},300),button.querySelector("i").classList.remove("emby-collapse-expandIconExpanded")}function onButtonClick(e){var button=this,collapseContent=button.parentNode.querySelector(".collapseContent");collapseContent.expanded?(collapseContent.expanded=!1,slideUpToHide(button,collapseContent)):(collapseContent.expanded=!0,slideDownToShow(button,collapseContent))}var EmbyButtonPrototype=Object.create(HTMLDivElement.prototype);EmbyButtonPrototype.attachedCallback=function(){if(!this.classList.contains("emby-collapse")){this.classList.add("emby-collapse");var collapseContent=this.querySelector(".collapseContent");collapseContent&&collapseContent.classList.add("hide");var title=this.getAttribute("title"),html='<button is="emby-button" type="button" on-click="toggleExpand" id="expandButton" class="emby-collapsible-button iconRight"><h3 class="emby-collapsible-title" title="'+title+'">'+title+'</h3><i class="md-icon emby-collapse-expandIcon">expand_more</i></button>';this.insertAdjacentHTML("afterbegin",html);var button=this.querySelector(".emby-collapsible-button");button.addEventListener("click",onButtonClick),"true"===this.getAttribute("data-expanded")&&onButtonClick.call(button)}},document.registerElement("emby-collapse",{prototype:EmbyButtonPrototype,extends:"div"})});
|
||||
define(["browser", "css!./emby-collapse", "registerElement", "emby-button"], function(browser) {
|
||||
"use strict";
|
||||
|
||||
function slideDownToShow(button, elem) {
|
||||
elem.classList.remove("hide"), elem.classList.add("expanded"), elem.style.height = "auto";
|
||||
var height = elem.offsetHeight + "px";
|
||||
elem.style.height = "0";
|
||||
elem.offsetHeight;
|
||||
elem.style.height = height, setTimeout(function() {
|
||||
elem.classList.contains("expanded") ? elem.classList.remove("hide") : elem.classList.add("hide"), elem.style.height = "auto"
|
||||
}, 300), button.querySelector("i").classList.add("emby-collapse-expandIconExpanded")
|
||||
}
|
||||
|
||||
function slideUpToHide(button, elem) {
|
||||
elem.style.height = elem.offsetHeight + "px";
|
||||
elem.offsetHeight;
|
||||
elem.classList.remove("expanded"), elem.style.height = "0", setTimeout(function() {
|
||||
elem.classList.contains("expanded") ? elem.classList.remove("hide") : elem.classList.add("hide")
|
||||
}, 300), button.querySelector("i").classList.remove("emby-collapse-expandIconExpanded")
|
||||
}
|
||||
|
||||
function onButtonClick(e) {
|
||||
var button = this,
|
||||
collapseContent = button.parentNode.querySelector(".collapseContent");
|
||||
collapseContent.expanded ? (collapseContent.expanded = !1, slideUpToHide(button, collapseContent)) : (collapseContent.expanded = !0, slideDownToShow(button, collapseContent))
|
||||
}
|
||||
var EmbyButtonPrototype = Object.create(HTMLDivElement.prototype);
|
||||
EmbyButtonPrototype.attachedCallback = function() {
|
||||
if (!this.classList.contains("emby-collapse")) {
|
||||
this.classList.add("emby-collapse");
|
||||
var collapseContent = this.querySelector(".collapseContent");
|
||||
collapseContent && collapseContent.classList.add("hide");
|
||||
var title = this.getAttribute("title"),
|
||||
html = '<button is="emby-button" type="button" on-click="toggleExpand" id="expandButton" class="emby-collapsible-button iconRight"><h3 class="emby-collapsible-title" title="' + title + '">' + title + '</h3><i class="md-icon emby-collapse-expandIcon">expand_more</i></button>';
|
||||
this.insertAdjacentHTML("afterbegin", html);
|
||||
var button = this.querySelector(".emby-collapsible-button");
|
||||
button.addEventListener("click", onButtonClick), "true" === this.getAttribute("data-expanded") && onButtonClick.call(button)
|
||||
}
|
||||
}, document.registerElement("emby-collapse", {
|
||||
prototype: EmbyButtonPrototype,
|
||||
extends: "div"
|
||||
})
|
||||
});
|
||||
+106
-1
@@ -1 +1,106 @@
|
||||
define(["globalize","apphost","loading","alert","emby-linkbutton"],function(globalize,appHost,loading,alert){"use strict";function resolvePromise(){return Promise.resolve()}function rejectPromise(){return Promise.reject()}function showNewUserInviteMessage(result){if(!result.IsNewUserInvitation&&!result.IsPending)return Promise.resolve();var message=result.IsNewUserInvitation?globalize.translate("sharedcomponents#MessageInvitationSentToNewUser",result.GuestDisplayName):globalize.translate("sharedcomponents#MessageInvitationSentToUser",result.GuestDisplayName);return alert({text:message,title:globalize.translate("sharedcomponents#HeaderInvitationSent")}).then(resolvePromise,resolvePromise)}function inviteGuest(options){var apiClient=options.apiClient;return loading.show(),apiClient.ajax({type:"POST",url:apiClient.getUrl("Connect/Invite"),dataType:"json",data:options.guestOptions||{}}).then(function(result){return loading.hide(),showNewUserInviteMessage(result)},function(response){loading.hide();var statusCode=response?response.status:0;return 502===statusCode?showConnectServerUnreachableErrorMessage().then(rejectPromise,rejectPromise):404===statusCode?alert({text:globalize.translate("sharedcomponents#GuestUserNotFound")}).then(rejectPromise,rejectPromise):(statusCode||0)>=500?alert({text:globalize.translate("sharedcomponents#ErrorReachingEmbyConnect")}).then(rejectPromise,rejectPromise):showGuestGeneralErrorMessage().then(rejectPromise,rejectPromise)})}function showGuestGeneralErrorMessage(){var html;appHost.supports("externallinks")&&(html=globalize.translate("sharedcomponents#ErrorAddingGuestAccount1",'<a is="emby-linkbutton" class="button-link" href="https://emby.media/connect" target="_blank">https://emby.media/connect</a>'),html+="<br/><br/>"+globalize.translate("sharedcomponents#ErrorAddingGuestAccount2","apps@emby.media"));var text=globalize.translate("sharedcomponents#ErrorAddingGuestAccount1","https://emby.media/connect");return text+="\n\n"+globalize.translate("sharedcomponents#ErrorAddingGuestAccount2","apps@emby.media"),alert({text:text,html:html})}function showConnectServerUnreachableErrorMessage(){var text=globalize.translate("sharedcomponents#ErrorConnectServerUnreachable","https://connect.emby.media");return alert({text:text})}function showLinkUserErrorMessage(username,statusCode){var html,text;return 502===statusCode?showConnectServerUnreachableErrorMessage():(username?(appHost.supports("externallinks")&&(html=globalize.translate("sharedcomponents#ErrorAddingEmbyConnectAccount1",'<a is="emby-linkbutton" class="button-link" href="https://emby.media/connect" target="_blank">https://emby.media/connect</a>'),html+="<br/><br/>"+globalize.translate("sharedcomponents#ErrorAddingEmbyConnectAccount2","apps@emby.media")),text=globalize.translate("sharedcomponents#ErrorAddingEmbyConnectAccount1","https://emby.media/connect"),text+="\n\n"+globalize.translate("sharedcomponents#ErrorAddingEmbyConnectAccount2","apps@emby.media")):html=text=globalize.translate("sharedcomponents#DefaultErrorMessage"),alert({text:text,html:html}))}function updateUserLink(apiClient,user,newConnectUsername){var currentConnectUsername=user.ConnectUserName||"",enteredConnectUsername=newConnectUsername,linkUrl=apiClient.getUrl("Users/"+user.Id+"/Connect/Link");return currentConnectUsername&&!enteredConnectUsername?apiClient.ajax({type:"DELETE",url:linkUrl}).then(function(){return alert({text:globalize.translate("sharedcomponents#MessageEmbyAccontRemoved"),title:globalize.translate("sharedcomponents#HeaderEmbyAccountRemoved")}).catch(resolvePromise)},function(response){return 502===(response?response.status:0)?showConnectServerUnreachableErrorMessage().then(rejectPromise):alert({text:globalize.translate("sharedcomponents#ErrorRemovingEmbyConnectAccount")}).then(rejectPromise)}):currentConnectUsername!==enteredConnectUsername?apiClient.ajax({type:"POST",url:linkUrl,data:{ConnectUsername:enteredConnectUsername},dataType:"json"}).then(function(result){var msgKey=result.IsPending?"sharedcomponents#MessagePendingEmbyAccountAdded":"sharedcomponents#MessageEmbyAccountAdded";return alert({text:globalize.translate(msgKey),title:globalize.translate("sharedcomponents#HeaderEmbyAccountAdded")}).catch(resolvePromise)},function(response){var statusCode=response?response.status:0;return 502===statusCode?showConnectServerUnreachableErrorMessage().then(rejectPromise):showLinkUserErrorMessage(".",statusCode).then(rejectPromise)}):Promise.reject()}return{inviteGuest:inviteGuest,updateUserLink:updateUserLink,showLinkUserErrorMessage:showLinkUserErrorMessage,showConnectServerUnreachableErrorMessage:showConnectServerUnreachableErrorMessage}});
|
||||
define(["globalize", "apphost", "loading", "alert", "emby-linkbutton"], function(globalize, appHost, loading, alert) {
|
||||
"use strict";
|
||||
|
||||
function resolvePromise() {
|
||||
return Promise.resolve()
|
||||
}
|
||||
|
||||
function rejectPromise() {
|
||||
return Promise.reject()
|
||||
}
|
||||
|
||||
function showNewUserInviteMessage(result) {
|
||||
if (!result.IsNewUserInvitation && !result.IsPending) return Promise.resolve();
|
||||
var message = result.IsNewUserInvitation ? globalize.translate("sharedcomponents#MessageInvitationSentToNewUser", result.GuestDisplayName) : globalize.translate("sharedcomponents#MessageInvitationSentToUser", result.GuestDisplayName);
|
||||
return alert({
|
||||
text: message,
|
||||
title: globalize.translate("sharedcomponents#HeaderInvitationSent")
|
||||
}).then(resolvePromise, resolvePromise)
|
||||
}
|
||||
|
||||
function inviteGuest(options) {
|
||||
var apiClient = options.apiClient;
|
||||
return loading.show(), apiClient.ajax({
|
||||
type: "POST",
|
||||
url: apiClient.getUrl("Connect/Invite"),
|
||||
dataType: "json",
|
||||
data: options.guestOptions || {}
|
||||
}).then(function(result) {
|
||||
return loading.hide(), showNewUserInviteMessage(result)
|
||||
}, function(response) {
|
||||
loading.hide();
|
||||
var statusCode = response ? response.status : 0;
|
||||
return 502 === statusCode ? showConnectServerUnreachableErrorMessage().then(rejectPromise, rejectPromise) : 404 === statusCode ? alert({
|
||||
text: globalize.translate("sharedcomponents#GuestUserNotFound")
|
||||
}).then(rejectPromise, rejectPromise) : (statusCode || 0) >= 500 ? alert({
|
||||
text: globalize.translate("sharedcomponents#ErrorReachingEmbyConnect")
|
||||
}).then(rejectPromise, rejectPromise) : showGuestGeneralErrorMessage().then(rejectPromise, rejectPromise)
|
||||
})
|
||||
}
|
||||
|
||||
function showGuestGeneralErrorMessage() {
|
||||
var html;
|
||||
appHost.supports("externallinks") && (html = globalize.translate("sharedcomponents#ErrorAddingGuestAccount1", '<a is="emby-linkbutton" class="button-link" href="https://emby.media/connect" target="_blank">https://emby.media/connect</a>'), html += "<br/><br/>" + globalize.translate("sharedcomponents#ErrorAddingGuestAccount2", "apps@emby.media"));
|
||||
var text = globalize.translate("sharedcomponents#ErrorAddingGuestAccount1", "https://emby.media/connect");
|
||||
return text += "\n\n" + globalize.translate("sharedcomponents#ErrorAddingGuestAccount2", "apps@emby.media"), alert({
|
||||
text: text,
|
||||
html: html
|
||||
})
|
||||
}
|
||||
|
||||
function showConnectServerUnreachableErrorMessage() {
|
||||
var text = globalize.translate("sharedcomponents#ErrorConnectServerUnreachable", "https://connect.emby.media");
|
||||
return alert({
|
||||
text: text
|
||||
})
|
||||
}
|
||||
|
||||
function showLinkUserErrorMessage(username, statusCode) {
|
||||
var html, text;
|
||||
return 502 === statusCode ? showConnectServerUnreachableErrorMessage() : (username ? (appHost.supports("externallinks") && (html = globalize.translate("sharedcomponents#ErrorAddingEmbyConnectAccount1", '<a is="emby-linkbutton" class="button-link" href="https://emby.media/connect" target="_blank">https://emby.media/connect</a>'), html += "<br/><br/>" + globalize.translate("sharedcomponents#ErrorAddingEmbyConnectAccount2", "apps@emby.media")), text = globalize.translate("sharedcomponents#ErrorAddingEmbyConnectAccount1", "https://emby.media/connect"), text += "\n\n" + globalize.translate("sharedcomponents#ErrorAddingEmbyConnectAccount2", "apps@emby.media")) : html = text = globalize.translate("sharedcomponents#DefaultErrorMessage"), alert({
|
||||
text: text,
|
||||
html: html
|
||||
}))
|
||||
}
|
||||
|
||||
function updateUserLink(apiClient, user, newConnectUsername) {
|
||||
var currentConnectUsername = user.ConnectUserName || "",
|
||||
enteredConnectUsername = newConnectUsername,
|
||||
linkUrl = apiClient.getUrl("Users/" + user.Id + "/Connect/Link");
|
||||
return currentConnectUsername && !enteredConnectUsername ? apiClient.ajax({
|
||||
type: "DELETE",
|
||||
url: linkUrl
|
||||
}).then(function() {
|
||||
return alert({
|
||||
text: globalize.translate("sharedcomponents#MessageEmbyAccontRemoved"),
|
||||
title: globalize.translate("sharedcomponents#HeaderEmbyAccountRemoved")
|
||||
}).catch(resolvePromise)
|
||||
}, function(response) {
|
||||
return 502 === (response ? response.status : 0) ? showConnectServerUnreachableErrorMessage().then(rejectPromise) : alert({
|
||||
text: globalize.translate("sharedcomponents#ErrorRemovingEmbyConnectAccount")
|
||||
}).then(rejectPromise)
|
||||
}) : currentConnectUsername !== enteredConnectUsername ? apiClient.ajax({
|
||||
type: "POST",
|
||||
url: linkUrl,
|
||||
data: {
|
||||
ConnectUsername: enteredConnectUsername
|
||||
},
|
||||
dataType: "json"
|
||||
}).then(function(result) {
|
||||
var msgKey = result.IsPending ? "sharedcomponents#MessagePendingEmbyAccountAdded" : "sharedcomponents#MessageEmbyAccountAdded";
|
||||
return alert({
|
||||
text: globalize.translate(msgKey),
|
||||
title: globalize.translate("sharedcomponents#HeaderEmbyAccountAdded")
|
||||
}).catch(resolvePromise)
|
||||
}, function(response) {
|
||||
var statusCode = response ? response.status : 0;
|
||||
return 502 === statusCode ? showConnectServerUnreachableErrorMessage().then(rejectPromise) : showLinkUserErrorMessage(".", statusCode).then(rejectPromise)
|
||||
}) : Promise.reject()
|
||||
}
|
||||
return {
|
||||
inviteGuest: inviteGuest,
|
||||
updateUserLink: updateUserLink,
|
||||
showLinkUserErrorMessage: showLinkUserErrorMessage,
|
||||
showConnectServerUnreachableErrorMessage: showConnectServerUnreachableErrorMessage
|
||||
}
|
||||
});
|
||||
@@ -1 +1,56 @@
|
||||
define(["layoutManager","browser","dom","css!./emby-input","registerElement"],function(layoutManager,browser,dom){"use strict";function onChange(){var label=this.labelElement;if(this.value)label.classList.remove("inputLabel-float");else{supportsFloatingLabel&&"date"!==this.type&&"time"!==this.type&&label.classList.add("inputLabel-float")}}var EmbyInputPrototype=Object.create(HTMLInputElement.prototype),inputId=0,supportsFloatingLabel=!1;if(Object.getOwnPropertyDescriptor&&Object.defineProperty){var descriptor=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value");if(descriptor&&descriptor.configurable){var baseSetMethod=descriptor.set;descriptor.set=function(value){baseSetMethod.call(this,value),this.dispatchEvent(new CustomEvent("valueset",{bubbles:!1,cancelable:!1}))},Object.defineProperty(HTMLInputElement.prototype,"value",descriptor),supportsFloatingLabel=!0}}EmbyInputPrototype.createdCallback=function(){if(this.id||(this.id="embyinput"+inputId,inputId++),!this.classList.contains("emby-input")){this.classList.add("emby-input");var parentNode=this.parentNode,document=this.ownerDocument,label=document.createElement("label");label.innerHTML=this.getAttribute("label")||"",label.classList.add("inputLabel"),label.classList.add("inputLabelUnfocused"),label.htmlFor=this.id,parentNode.insertBefore(label,this),this.labelElement=label,dom.addEventListener(this,"focus",function(){onChange.call(this),document.attachIME&&document.attachIME(this),label.classList.add("inputLabelFocused"),label.classList.remove("inputLabelUnfocused")},{passive:!0}),dom.addEventListener(this,"blur",function(){onChange.call(this),label.classList.remove("inputLabelFocused"),label.classList.add("inputLabelUnfocused")},{passive:!0}),dom.addEventListener(this,"change",onChange,{passive:!0}),dom.addEventListener(this,"input",onChange,{passive:!0}),dom.addEventListener(this,"valueset",onChange,{passive:!0}),browser.orsay&&this===document.activeElement&&document.attachIME&&document.attachIME(this)}},EmbyInputPrototype.attachedCallback=function(){this.labelElement.htmlFor=this.id,onChange.call(this)},EmbyInputPrototype.label=function(text){this.labelElement.innerHTML=text},document.registerElement("emby-input",{prototype:EmbyInputPrototype,extends:"input"})});
|
||||
define(["layoutManager", "browser", "dom", "css!./emby-input", "registerElement"], function(layoutManager, browser, dom) {
|
||||
"use strict";
|
||||
|
||||
function onChange() {
|
||||
var label = this.labelElement;
|
||||
if (this.value) label.classList.remove("inputLabel-float");
|
||||
else {
|
||||
supportsFloatingLabel && "date" !== this.type && "time" !== this.type && label.classList.add("inputLabel-float")
|
||||
}
|
||||
}
|
||||
var EmbyInputPrototype = Object.create(HTMLInputElement.prototype),
|
||||
inputId = 0,
|
||||
supportsFloatingLabel = !1;
|
||||
if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
|
||||
var descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value");
|
||||
if (descriptor && descriptor.configurable) {
|
||||
var baseSetMethod = descriptor.set;
|
||||
descriptor.set = function(value) {
|
||||
baseSetMethod.call(this, value), this.dispatchEvent(new CustomEvent("valueset", {
|
||||
bubbles: !1,
|
||||
cancelable: !1
|
||||
}))
|
||||
}, Object.defineProperty(HTMLInputElement.prototype, "value", descriptor), supportsFloatingLabel = !0
|
||||
}
|
||||
}
|
||||
EmbyInputPrototype.createdCallback = function() {
|
||||
if (this.id || (this.id = "embyinput" + inputId, inputId++), !this.classList.contains("emby-input")) {
|
||||
this.classList.add("emby-input");
|
||||
var parentNode = this.parentNode,
|
||||
document = this.ownerDocument,
|
||||
label = document.createElement("label");
|
||||
label.innerHTML = this.getAttribute("label") || "", label.classList.add("inputLabel"), label.classList.add("inputLabelUnfocused"), label.htmlFor = this.id, parentNode.insertBefore(label, this), this.labelElement = label, dom.addEventListener(this, "focus", function() {
|
||||
onChange.call(this), document.attachIME && document.attachIME(this), label.classList.add("inputLabelFocused"), label.classList.remove("inputLabelUnfocused")
|
||||
}, {
|
||||
passive: !0
|
||||
}), dom.addEventListener(this, "blur", function() {
|
||||
onChange.call(this), label.classList.remove("inputLabelFocused"), label.classList.add("inputLabelUnfocused")
|
||||
}, {
|
||||
passive: !0
|
||||
}), dom.addEventListener(this, "change", onChange, {
|
||||
passive: !0
|
||||
}), dom.addEventListener(this, "input", onChange, {
|
||||
passive: !0
|
||||
}), dom.addEventListener(this, "valueset", onChange, {
|
||||
passive: !0
|
||||
}), browser.orsay && this === document.activeElement && document.attachIME && document.attachIME(this)
|
||||
}
|
||||
}, EmbyInputPrototype.attachedCallback = function() {
|
||||
this.labelElement.htmlFor = this.id, onChange.call(this)
|
||||
}, EmbyInputPrototype.label = function(text) {
|
||||
this.labelElement.innerHTML = text
|
||||
}, document.registerElement("emby-input", {
|
||||
prototype: EmbyInputPrototype,
|
||||
extends: "input"
|
||||
})
|
||||
});
|
||||
+32
-1
@@ -1 +1,32 @@
|
||||
define(["emby-progressring","dom","serverNotifications","events","registerElement"],function(EmbyProgressRing,dom,serverNotifications,events){"use strict";function addNotificationEvent(instance,name,handler){var localHandler=handler.bind(instance);events.on(serverNotifications,name,localHandler),instance[name]=localHandler}function removeNotificationEvent(instance,name){var handler=instance[name];handler&&(events.off(serverNotifications,name,handler),instance[name]=null)}function onRefreshProgress(e,apiClient,info){var indicator=this;if(indicator.itemId||(indicator.itemId=dom.parentWithAttribute(indicator,"data-id").getAttribute("data-id")),info.ItemId===indicator.itemId){var progress=parseFloat(info.Progress);progress&&progress<100?this.classList.remove("hide"):this.classList.add("hide"),this.setProgress(progress)}}var EmbyItemRefreshIndicatorPrototype=Object.create(EmbyProgressRing);EmbyItemRefreshIndicatorPrototype.createdCallback=function(){EmbyProgressRing.createdCallback&&EmbyProgressRing.createdCallback.call(this),addNotificationEvent(this,"RefreshProgress",onRefreshProgress)},EmbyItemRefreshIndicatorPrototype.attachedCallback=function(){EmbyProgressRing.attachedCallback&&EmbyProgressRing.attachedCallback.call(this)},EmbyItemRefreshIndicatorPrototype.detachedCallback=function(){EmbyProgressRing.detachedCallback&&EmbyProgressRing.detachedCallback.call(this),removeNotificationEvent(this,"RefreshProgress"),this.itemId=null},document.registerElement("emby-itemrefreshindicator",{prototype:EmbyItemRefreshIndicatorPrototype,extends:"div"})});
|
||||
define(["emby-progressring", "dom", "serverNotifications", "events", "registerElement"], function(EmbyProgressRing, dom, serverNotifications, events) {
|
||||
"use strict";
|
||||
|
||||
function addNotificationEvent(instance, name, handler) {
|
||||
var localHandler = handler.bind(instance);
|
||||
events.on(serverNotifications, name, localHandler), instance[name] = localHandler
|
||||
}
|
||||
|
||||
function removeNotificationEvent(instance, name) {
|
||||
var handler = instance[name];
|
||||
handler && (events.off(serverNotifications, name, handler), instance[name] = null)
|
||||
}
|
||||
|
||||
function onRefreshProgress(e, apiClient, info) {
|
||||
var indicator = this;
|
||||
if (indicator.itemId || (indicator.itemId = dom.parentWithAttribute(indicator, "data-id").getAttribute("data-id")), info.ItemId === indicator.itemId) {
|
||||
var progress = parseFloat(info.Progress);
|
||||
progress && progress < 100 ? this.classList.remove("hide") : this.classList.add("hide"), this.setProgress(progress)
|
||||
}
|
||||
}
|
||||
var EmbyItemRefreshIndicatorPrototype = Object.create(EmbyProgressRing);
|
||||
EmbyItemRefreshIndicatorPrototype.createdCallback = function() {
|
||||
EmbyProgressRing.createdCallback && EmbyProgressRing.createdCallback.call(this), addNotificationEvent(this, "RefreshProgress", onRefreshProgress)
|
||||
}, EmbyItemRefreshIndicatorPrototype.attachedCallback = function() {
|
||||
EmbyProgressRing.attachedCallback && EmbyProgressRing.attachedCallback.call(this)
|
||||
}, EmbyItemRefreshIndicatorPrototype.detachedCallback = function() {
|
||||
EmbyProgressRing.detachedCallback && EmbyProgressRing.detachedCallback.call(this), removeNotificationEvent(this, "RefreshProgress"), this.itemId = null
|
||||
}, document.registerElement("emby-itemrefreshindicator", {
|
||||
prototype: EmbyItemRefreshIndicatorPrototype,
|
||||
extends: "div"
|
||||
})
|
||||
});
|
||||
Vendored
+220
-1
File diff suppressed because one or more lines are too long
+21
-1
@@ -1 +1,21 @@
|
||||
define(["require","css!./emby-progressring","registerElement"],function(require){"use strict";var EmbyProgressRing=Object.create(HTMLDivElement.prototype);return EmbyProgressRing.createdCallback=function(){this.classList.add("progressring");var instance=this;require(["text!./emby-progressring.template.html"],function(template){instance.innerHTML=template,instance.setProgress(parseFloat(instance.getAttribute("data-progress")||"0"))})},EmbyProgressRing.setProgress=function(progress){progress=Math.floor(progress);var angle;progress<25?(angle=progress/100*360-90,this.querySelector(".animate-0-25-b").style.transform="rotate("+angle+"deg)",this.querySelector(".animate-25-50-b").style.transform="rotate(-90deg)",this.querySelector(".animate-50-75-b").style.transform="rotate(-90deg)",this.querySelector(".animate-75-100-b").style.transform="rotate(-90deg)"):progress>=25&&progress<50?(angle=(progress-25)/100*360-90,this.querySelector(".animate-0-25-b").style.transform="none",this.querySelector(".animate-25-50-b").style.transform="rotate("+angle+"deg)",this.querySelector(".animate-50-75-b").style.transform="rotate(-90deg)",this.querySelector(".animate-75-100-b").style.transform="rotate(-90deg)"):progress>=50&&progress<75?(angle=(progress-50)/100*360-90,this.querySelector(".animate-0-25-b").style.transform="none",this.querySelector(".animate-25-50-b").style.transform="none",this.querySelector(".animate-50-75-b").style.transform="rotate("+angle+"deg)",this.querySelector(".animate-75-100-b").style.transform="rotate(-90deg)"):progress>=75&&progress<=100&&(angle=(progress-75)/100*360-90,this.querySelector(".animate-0-25-b").style.transform="none",this.querySelector(".animate-25-50-b").style.transform="none",this.querySelector(".animate-50-75-b").style.transform="none",this.querySelector(".animate-75-100-b").style.transform="rotate("+angle+"deg)"),this.querySelector(".progressring-text").innerHTML=progress+"%"},EmbyProgressRing.attachedCallback=function(){},EmbyProgressRing.detachedCallback=function(){var observer=this.observer;observer&&(observer.disconnect(),this.observer=null)},document.registerElement("emby-progressring",{prototype:EmbyProgressRing,extends:"div"}),EmbyProgressRing});
|
||||
define(["require", "css!./emby-progressring", "registerElement"], function(require) {
|
||||
"use strict";
|
||||
var EmbyProgressRing = Object.create(HTMLDivElement.prototype);
|
||||
return EmbyProgressRing.createdCallback = function() {
|
||||
this.classList.add("progressring");
|
||||
var instance = this;
|
||||
require(["text!./emby-progressring.template.html"], function(template) {
|
||||
instance.innerHTML = template, instance.setProgress(parseFloat(instance.getAttribute("data-progress") || "0"))
|
||||
})
|
||||
}, EmbyProgressRing.setProgress = function(progress) {
|
||||
progress = Math.floor(progress);
|
||||
var angle;
|
||||
progress < 25 ? (angle = progress / 100 * 360 - 90, this.querySelector(".animate-0-25-b").style.transform = "rotate(" + angle + "deg)", this.querySelector(".animate-25-50-b").style.transform = "rotate(-90deg)", this.querySelector(".animate-50-75-b").style.transform = "rotate(-90deg)", this.querySelector(".animate-75-100-b").style.transform = "rotate(-90deg)") : progress >= 25 && progress < 50 ? (angle = (progress - 25) / 100 * 360 - 90, this.querySelector(".animate-0-25-b").style.transform = "none", this.querySelector(".animate-25-50-b").style.transform = "rotate(" + angle + "deg)", this.querySelector(".animate-50-75-b").style.transform = "rotate(-90deg)", this.querySelector(".animate-75-100-b").style.transform = "rotate(-90deg)") : progress >= 50 && progress < 75 ? (angle = (progress - 50) / 100 * 360 - 90, this.querySelector(".animate-0-25-b").style.transform = "none", this.querySelector(".animate-25-50-b").style.transform = "none", this.querySelector(".animate-50-75-b").style.transform = "rotate(" + angle + "deg)", this.querySelector(".animate-75-100-b").style.transform = "rotate(-90deg)") : progress >= 75 && progress <= 100 && (angle = (progress - 75) / 100 * 360 - 90, this.querySelector(".animate-0-25-b").style.transform = "none", this.querySelector(".animate-25-50-b").style.transform = "none", this.querySelector(".animate-50-75-b").style.transform = "none", this.querySelector(".animate-75-100-b").style.transform = "rotate(" + angle + "deg)"), this.querySelector(".progressring-text").innerHTML = progress + "%"
|
||||
}, EmbyProgressRing.attachedCallback = function() {}, EmbyProgressRing.detachedCallback = function() {
|
||||
var observer = this.observer;
|
||||
observer && (observer.disconnect(), this.observer = null)
|
||||
}, document.registerElement("emby-progressring", {
|
||||
prototype: EmbyProgressRing,
|
||||
extends: "div"
|
||||
}), EmbyProgressRing
|
||||
});
|
||||
@@ -1 +1,20 @@
|
||||
define(["css!./emby-radio","registerElement"],function(){"use strict";function onKeyDown(e){if(13===e.keyCode)return e.preventDefault(),this.checked=!0,!1}var EmbyRadioPrototype=Object.create(HTMLInputElement.prototype);EmbyRadioPrototype.attachedCallback=function(){if("true"!==this.getAttribute("data-radio")){this.setAttribute("data-radio","true"),this.classList.add("mdl-radio__button");var labelElement=this.parentNode;labelElement.classList.add("mdl-radio"),labelElement.classList.add("mdl-js-radio"),labelElement.classList.add("mdl-js-ripple-effect");var labelTextElement=labelElement.querySelector("span");labelTextElement.classList.add("radioButtonLabel"),labelTextElement.classList.add("mdl-radio__label"),labelElement.insertAdjacentHTML("beforeend",'<span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span>'),this.addEventListener("keydown",onKeyDown)}},document.registerElement("emby-radio",{prototype:EmbyRadioPrototype,extends:"input"})});
|
||||
define(["css!./emby-radio", "registerElement"], function() {
|
||||
"use strict";
|
||||
|
||||
function onKeyDown(e) {
|
||||
if (13 === e.keyCode) return e.preventDefault(), this.checked = !0, !1
|
||||
}
|
||||
var EmbyRadioPrototype = Object.create(HTMLInputElement.prototype);
|
||||
EmbyRadioPrototype.attachedCallback = function() {
|
||||
if ("true" !== this.getAttribute("data-radio")) {
|
||||
this.setAttribute("data-radio", "true"), this.classList.add("mdl-radio__button");
|
||||
var labelElement = this.parentNode;
|
||||
labelElement.classList.add("mdl-radio"), labelElement.classList.add("mdl-js-radio"), labelElement.classList.add("mdl-js-ripple-effect");
|
||||
var labelTextElement = labelElement.querySelector("span");
|
||||
labelTextElement.classList.add("radioButtonLabel"), labelTextElement.classList.add("mdl-radio__label"), labelElement.insertAdjacentHTML("beforeend", '<span class="mdl-radio__outer-circle"></span><span class="mdl-radio__inner-circle"></span>'), this.addEventListener("keydown", onKeyDown)
|
||||
}
|
||||
}, document.registerElement("emby-radio", {
|
||||
prototype: EmbyRadioPrototype,
|
||||
extends: "input"
|
||||
})
|
||||
});
|
||||
+75
-1
@@ -1 +1,75 @@
|
||||
define(["layoutManager","dom","css!./emby-scrollbuttons","registerElement","paper-icon-button-light"],function(layoutManager,dom){"use strict";function getScrollButtonContainerHtml(direction){var html="";html+='<div class="scrollbuttoncontainer scrollbuttoncontainer-'+direction+("left"===direction?" hide":"")+'">';var icon="left"===direction?"":"";return html+='<button type="button" is="paper-icon-button-light" data-ripple="false" data-direction="'+direction+'" class="emby-scrollbuttons-scrollbutton">',html+='<i class="md-icon">'+icon+"</i>",html+="</button>",html+="</div>"}function getScrollPosition(parent){return parent.getScrollPosition?parent.getScrollPosition():0}function getScrollWidth(parent){return parent.getScrollSize?parent.getScrollSize():0}function onScrolledToPosition(scrollButtons,pos,scrollWidth){pos>0?scrollButtons.scrollButtonsLeft.classList.remove("hide"):scrollButtons.scrollButtonsLeft.classList.add("hide"),scrollWidth>0&&(pos+=scrollButtons.offsetWidth,pos>=scrollWidth?scrollButtons.scrollButtonsRight.classList.add("hide"):scrollButtons.scrollButtonsRight.classList.remove("hide"))}function onScroll(e){var scrollButtons=this,scroller=this.scroller;onScrolledToPosition(scrollButtons,getScrollPosition(scroller),getScrollWidth(scroller))}function getStyleValue(style,name){var value=style.getPropertyValue(name);return value&&(value=value.replace("px",""))?(value=parseInt(value),isNaN(value)?0:value):0}function getScrollSize(elem){var scrollSize=elem.offsetWidth,style=window.getComputedStyle(elem,null),paddingLeft=getStyleValue(style,"padding-left");paddingLeft&&(scrollSize-=paddingLeft);var paddingRight=getStyleValue(style,"padding-right");paddingRight&&(scrollSize-=paddingRight);var slider=elem.getScrollSlider();return style=window.getComputedStyle(slider,null),paddingLeft=getStyleValue(style,"padding-left"),paddingLeft&&(scrollSize-=paddingLeft),paddingRight=getStyleValue(style,"padding-right"),paddingRight&&(scrollSize-=paddingRight),scrollSize}function onScrollButtonClick(e){var newPos,parent=dom.parentWithAttribute(this,"is","emby-scroller"),direction=this.getAttribute("data-direction"),scrollSize=getScrollSize(parent),pos=getScrollPosition(parent);newPos="left"===direction?Math.max(0,pos-scrollSize):pos+scrollSize,parent.scrollToPosition(newPos,!1)}var EmbyScrollButtonsPrototype=Object.create(HTMLDivElement.prototype);EmbyScrollButtonsPrototype.createdCallback=function(){},EmbyScrollButtonsPrototype.attachedCallback=function(){var parent=dom.parentWithAttribute(this,"is","emby-scroller");this.scroller=parent,parent.classList.add("emby-scrollbuttons-scroller"),this.innerHTML=getScrollButtonContainerHtml("left")+getScrollButtonContainerHtml("right");var scrollHandler=onScroll.bind(this);this.scrollHandler=scrollHandler;var buttons=this.querySelectorAll(".emby-scrollbuttons-scrollbutton");buttons[0].addEventListener("click",onScrollButtonClick),buttons[1].addEventListener("click",onScrollButtonClick),buttons=this.querySelectorAll(".scrollbuttoncontainer"),this.scrollButtonsLeft=buttons[0],this.scrollButtonsRight=buttons[1],parent.addScrollEventListener(scrollHandler,{capture:!1,passive:!0})},EmbyScrollButtonsPrototype.detachedCallback=function(){var parent=this.scroller;this.scroller=null;var scrollHandler=this.scrollHandler;parent&&scrollHandler&&parent.removeScrollEventListener(scrollHandler,{capture:!1,passive:!0}),this.scrollHandler=null,this.scrollButtonsLeft=null,this.scrollButtonsRight=null},document.registerElement("emby-scrollbuttons",{prototype:EmbyScrollButtonsPrototype,extends:"div"})});
|
||||
define(["layoutManager", "dom", "css!./emby-scrollbuttons", "registerElement", "paper-icon-button-light"], function(layoutManager, dom) {
|
||||
"use strict";
|
||||
|
||||
function getScrollButtonContainerHtml(direction) {
|
||||
var html = "";
|
||||
html += '<div class="scrollbuttoncontainer scrollbuttoncontainer-' + direction + ("left" === direction ? " hide" : "") + '">';
|
||||
var icon = "left" === direction ? "" : "";
|
||||
return html += '<button type="button" is="paper-icon-button-light" data-ripple="false" data-direction="' + direction + '" class="emby-scrollbuttons-scrollbutton">', html += '<i class="md-icon">' + icon + "</i>", html += "</button>", html += "</div>"
|
||||
}
|
||||
|
||||
function getScrollPosition(parent) {
|
||||
return parent.getScrollPosition ? parent.getScrollPosition() : 0
|
||||
}
|
||||
|
||||
function getScrollWidth(parent) {
|
||||
return parent.getScrollSize ? parent.getScrollSize() : 0
|
||||
}
|
||||
|
||||
function onScrolledToPosition(scrollButtons, pos, scrollWidth) {
|
||||
pos > 0 ? scrollButtons.scrollButtonsLeft.classList.remove("hide") : scrollButtons.scrollButtonsLeft.classList.add("hide"), scrollWidth > 0 && (pos += scrollButtons.offsetWidth, pos >= scrollWidth ? scrollButtons.scrollButtonsRight.classList.add("hide") : scrollButtons.scrollButtonsRight.classList.remove("hide"))
|
||||
}
|
||||
|
||||
function onScroll(e) {
|
||||
var scrollButtons = this,
|
||||
scroller = this.scroller;
|
||||
onScrolledToPosition(scrollButtons, getScrollPosition(scroller), getScrollWidth(scroller))
|
||||
}
|
||||
|
||||
function getStyleValue(style, name) {
|
||||
var value = style.getPropertyValue(name);
|
||||
return value && (value = value.replace("px", "")) ? (value = parseInt(value), isNaN(value) ? 0 : value) : 0
|
||||
}
|
||||
|
||||
function getScrollSize(elem) {
|
||||
var scrollSize = elem.offsetWidth,
|
||||
style = window.getComputedStyle(elem, null),
|
||||
paddingLeft = getStyleValue(style, "padding-left");
|
||||
paddingLeft && (scrollSize -= paddingLeft);
|
||||
var paddingRight = getStyleValue(style, "padding-right");
|
||||
paddingRight && (scrollSize -= paddingRight);
|
||||
var slider = elem.getScrollSlider();
|
||||
return style = window.getComputedStyle(slider, null), paddingLeft = getStyleValue(style, "padding-left"), paddingLeft && (scrollSize -= paddingLeft), paddingRight = getStyleValue(style, "padding-right"), paddingRight && (scrollSize -= paddingRight), scrollSize
|
||||
}
|
||||
|
||||
function onScrollButtonClick(e) {
|
||||
var newPos, parent = dom.parentWithAttribute(this, "is", "emby-scroller"),
|
||||
direction = this.getAttribute("data-direction"),
|
||||
scrollSize = getScrollSize(parent),
|
||||
pos = getScrollPosition(parent);
|
||||
newPos = "left" === direction ? Math.max(0, pos - scrollSize) : pos + scrollSize, parent.scrollToPosition(newPos, !1)
|
||||
}
|
||||
var EmbyScrollButtonsPrototype = Object.create(HTMLDivElement.prototype);
|
||||
EmbyScrollButtonsPrototype.createdCallback = function() {}, EmbyScrollButtonsPrototype.attachedCallback = function() {
|
||||
var parent = dom.parentWithAttribute(this, "is", "emby-scroller");
|
||||
this.scroller = parent, parent.classList.add("emby-scrollbuttons-scroller"), this.innerHTML = getScrollButtonContainerHtml("left") + getScrollButtonContainerHtml("right");
|
||||
var scrollHandler = onScroll.bind(this);
|
||||
this.scrollHandler = scrollHandler;
|
||||
var buttons = this.querySelectorAll(".emby-scrollbuttons-scrollbutton");
|
||||
buttons[0].addEventListener("click", onScrollButtonClick), buttons[1].addEventListener("click", onScrollButtonClick), buttons = this.querySelectorAll(".scrollbuttoncontainer"), this.scrollButtonsLeft = buttons[0], this.scrollButtonsRight = buttons[1], parent.addScrollEventListener(scrollHandler, {
|
||||
capture: !1,
|
||||
passive: !0
|
||||
})
|
||||
}, EmbyScrollButtonsPrototype.detachedCallback = function() {
|
||||
var parent = this.scroller;
|
||||
this.scroller = null;
|
||||
var scrollHandler = this.scrollHandler;
|
||||
parent && scrollHandler && parent.removeScrollEventListener(scrollHandler, {
|
||||
capture: !1,
|
||||
passive: !0
|
||||
}), this.scrollHandler = null, this.scrollButtonsLeft = null, this.scrollButtonsRight = null
|
||||
}, document.registerElement("emby-scrollbuttons", {
|
||||
prototype: EmbyScrollButtonsPrototype,
|
||||
extends: "div"
|
||||
})
|
||||
});
|
||||
+101
-1
@@ -1 +1,101 @@
|
||||
define(["scroller","dom","layoutManager","inputManager","focusManager","browser","registerElement"],function(scroller,dom,layoutManager,inputManager,focusManager,browser){"use strict";function initCenterFocus(elem,scrollerInstance){dom.addEventListener(elem,"focus",function(e){var focused=focusManager.focusableParent(e.target);focused&&scrollerInstance.toCenter(focused)},{capture:!0,passive:!0})}function onInputCommand(e){var cmd=e.detail.command;"end"===cmd?(focusManager.focusLast(this,"."+this.getAttribute("data-navcommands")),e.preventDefault(),e.stopPropagation()):"pageup"===cmd?(focusManager.moveFocus(e.target,this,"."+this.getAttribute("data-navcommands"),-12),e.preventDefault(),e.stopPropagation()):"pagedown"===cmd&&(focusManager.moveFocus(e.target,this,"."+this.getAttribute("data-navcommands"),12),e.preventDefault(),e.stopPropagation())}function initHeadroom(elem){require(["headroom"],function(Headroom){var headroom=new Headroom([],{scroller:elem});headroom.init(),headroom.add(document.querySelector(".skinHeader")),elem.headroom=headroom})}function loadScrollButtons(scroller){require(["emby-scrollbuttons"],function(){scroller.insertAdjacentHTML("beforeend",'<div is="emby-scrollbuttons"></div>')})}var ScrollerProtoType=Object.create(HTMLDivElement.prototype);ScrollerProtoType.createdCallback=function(){this.classList.add("emby-scroller")},ScrollerProtoType.scrollToBeginning=function(){this.scroller&&this.scroller.slideTo(0,!0)},ScrollerProtoType.toStart=function(elem,immediate){this.scroller&&this.scroller.toStart(elem,immediate)},ScrollerProtoType.toCenter=function(elem,immediate){this.scroller&&this.scroller.toCenter(elem,immediate)},ScrollerProtoType.scrollToPosition=function(pos,immediate){this.scroller&&this.scroller.slideTo(pos,immediate)},ScrollerProtoType.getScrollPosition=function(){if(this.scroller)return this.scroller.getScrollPosition()},ScrollerProtoType.getScrollSize=function(){if(this.scroller)return this.scroller.getScrollSize()},ScrollerProtoType.getScrollEventName=function(){if(this.scroller)return this.scroller.getScrollEventName()},ScrollerProtoType.getScrollSlider=function(){if(this.scroller)return this.scroller.getScrollSlider()},ScrollerProtoType.addScrollEventListener=function(fn,options){this.scroller&&dom.addEventListener(this.scroller.getScrollFrame(),this.scroller.getScrollEventName(),fn,options)},ScrollerProtoType.removeScrollEventListener=function(fn,options){this.scroller&&dom.removeEventListener(this.scroller.getScrollFrame(),this.scroller.getScrollEventName(),fn,options)},ScrollerProtoType.attachedCallback=function(){this.getAttribute("data-navcommands")&&inputManager.on(this,onInputCommand);var horizontal="false"!==this.getAttribute("data-horizontal"),slider=this.querySelector(".scrollSlider");horizontal&&(slider.style["white-space"]="nowrap");var bindHeader="true"===this.getAttribute("data-bindheader"),scrollFrame=this,enableScrollButtons=layoutManager.desktop&&horizontal&&"false"!==this.getAttribute("data-scrollbuttons"),options={horizontal:horizontal,mouseDragging:1,mouseWheel:"false"!==this.getAttribute("data-mousewheel"),touchDragging:1,slidee:slider,scrollBy:200,speed:horizontal?270:240,elasticBounds:1,dragHandle:1,scrollWidth:"auto"===this.getAttribute("data-scrollsize")?null:5e6,autoImmediate:!0,skipSlideToWhenVisible:"true"===this.getAttribute("data-skipfocuswhenvisible"),dispatchScrollEvent:enableScrollButtons||bindHeader||"true"===this.getAttribute("data-scrollevent"),hideScrollbar:enableScrollButtons||"true"===this.getAttribute("data-hidescrollbar"),allowNativeSmoothScroll:"true"===this.getAttribute("data-allownativesmoothscroll")&&!enableScrollButtons,allowNativeScroll:!enableScrollButtons,forceHideScrollbars:enableScrollButtons,requireAnimation:enableScrollButtons&&browser.edge};this.scroller=new scroller(scrollFrame,options),this.scroller.init(),layoutManager.tv&&this.getAttribute("data-centerfocus")&&initCenterFocus(this,this.scroller),bindHeader&&initHeadroom(this),enableScrollButtons&&loadScrollButtons(this)},ScrollerProtoType.pause=function(){var headroom=this.headroom;headroom&&headroom.pause()},ScrollerProtoType.resume=function(){var headroom=this.headroom;headroom&&headroom.resume()},ScrollerProtoType.detachedCallback=function(){this.getAttribute("data-navcommands")&&inputManager.off(this,onInputCommand);var headroom=this.headroom;headroom&&(headroom.destroy(),this.headroom=null);var scrollerInstance=this.scroller;scrollerInstance&&(scrollerInstance.destroy(),this.scroller=null)},document.registerElement("emby-scroller",{prototype:ScrollerProtoType,extends:"div"})});
|
||||
define(["scroller", "dom", "layoutManager", "inputManager", "focusManager", "browser", "registerElement"], function(scroller, dom, layoutManager, inputManager, focusManager, browser) {
|
||||
"use strict";
|
||||
|
||||
function initCenterFocus(elem, scrollerInstance) {
|
||||
dom.addEventListener(elem, "focus", function(e) {
|
||||
var focused = focusManager.focusableParent(e.target);
|
||||
focused && scrollerInstance.toCenter(focused)
|
||||
}, {
|
||||
capture: !0,
|
||||
passive: !0
|
||||
})
|
||||
}
|
||||
|
||||
function onInputCommand(e) {
|
||||
var cmd = e.detail.command;
|
||||
"end" === cmd ? (focusManager.focusLast(this, "." + this.getAttribute("data-navcommands")), e.preventDefault(), e.stopPropagation()) : "pageup" === cmd ? (focusManager.moveFocus(e.target, this, "." + this.getAttribute("data-navcommands"), -12), e.preventDefault(), e.stopPropagation()) : "pagedown" === cmd && (focusManager.moveFocus(e.target, this, "." + this.getAttribute("data-navcommands"), 12), e.preventDefault(), e.stopPropagation())
|
||||
}
|
||||
|
||||
function initHeadroom(elem) {
|
||||
require(["headroom"], function(Headroom) {
|
||||
var headroom = new Headroom([], {
|
||||
scroller: elem
|
||||
});
|
||||
headroom.init(), headroom.add(document.querySelector(".skinHeader")), elem.headroom = headroom
|
||||
})
|
||||
}
|
||||
|
||||
function loadScrollButtons(scroller) {
|
||||
require(["emby-scrollbuttons"], function() {
|
||||
scroller.insertAdjacentHTML("beforeend", '<div is="emby-scrollbuttons"></div>')
|
||||
})
|
||||
}
|
||||
var ScrollerProtoType = Object.create(HTMLDivElement.prototype);
|
||||
ScrollerProtoType.createdCallback = function() {
|
||||
this.classList.add("emby-scroller")
|
||||
}, ScrollerProtoType.scrollToBeginning = function() {
|
||||
this.scroller && this.scroller.slideTo(0, !0)
|
||||
}, ScrollerProtoType.toStart = function(elem, immediate) {
|
||||
this.scroller && this.scroller.toStart(elem, immediate)
|
||||
}, ScrollerProtoType.toCenter = function(elem, immediate) {
|
||||
this.scroller && this.scroller.toCenter(elem, immediate)
|
||||
}, ScrollerProtoType.scrollToPosition = function(pos, immediate) {
|
||||
this.scroller && this.scroller.slideTo(pos, immediate)
|
||||
}, ScrollerProtoType.getScrollPosition = function() {
|
||||
if (this.scroller) return this.scroller.getScrollPosition()
|
||||
}, ScrollerProtoType.getScrollSize = function() {
|
||||
if (this.scroller) return this.scroller.getScrollSize()
|
||||
}, ScrollerProtoType.getScrollEventName = function() {
|
||||
if (this.scroller) return this.scroller.getScrollEventName()
|
||||
}, ScrollerProtoType.getScrollSlider = function() {
|
||||
if (this.scroller) return this.scroller.getScrollSlider()
|
||||
}, ScrollerProtoType.addScrollEventListener = function(fn, options) {
|
||||
this.scroller && dom.addEventListener(this.scroller.getScrollFrame(), this.scroller.getScrollEventName(), fn, options)
|
||||
}, ScrollerProtoType.removeScrollEventListener = function(fn, options) {
|
||||
this.scroller && dom.removeEventListener(this.scroller.getScrollFrame(), this.scroller.getScrollEventName(), fn, options)
|
||||
}, ScrollerProtoType.attachedCallback = function() {
|
||||
this.getAttribute("data-navcommands") && inputManager.on(this, onInputCommand);
|
||||
var horizontal = "false" !== this.getAttribute("data-horizontal"),
|
||||
slider = this.querySelector(".scrollSlider");
|
||||
horizontal && (slider.style["white-space"] = "nowrap");
|
||||
var bindHeader = "true" === this.getAttribute("data-bindheader"),
|
||||
scrollFrame = this,
|
||||
enableScrollButtons = layoutManager.desktop && horizontal && "false" !== this.getAttribute("data-scrollbuttons"),
|
||||
options = {
|
||||
horizontal: horizontal,
|
||||
mouseDragging: 1,
|
||||
mouseWheel: "false" !== this.getAttribute("data-mousewheel"),
|
||||
touchDragging: 1,
|
||||
slidee: slider,
|
||||
scrollBy: 200,
|
||||
speed: horizontal ? 270 : 240,
|
||||
elasticBounds: 1,
|
||||
dragHandle: 1,
|
||||
scrollWidth: "auto" === this.getAttribute("data-scrollsize") ? null : 5e6,
|
||||
autoImmediate: !0,
|
||||
skipSlideToWhenVisible: "true" === this.getAttribute("data-skipfocuswhenvisible"),
|
||||
dispatchScrollEvent: enableScrollButtons || bindHeader || "true" === this.getAttribute("data-scrollevent"),
|
||||
hideScrollbar: enableScrollButtons || "true" === this.getAttribute("data-hidescrollbar"),
|
||||
allowNativeSmoothScroll: "true" === this.getAttribute("data-allownativesmoothscroll") && !enableScrollButtons,
|
||||
allowNativeScroll: !enableScrollButtons,
|
||||
forceHideScrollbars: enableScrollButtons,
|
||||
requireAnimation: enableScrollButtons && browser.edge
|
||||
};
|
||||
this.scroller = new scroller(scrollFrame, options), this.scroller.init(), layoutManager.tv && this.getAttribute("data-centerfocus") && initCenterFocus(this, this.scroller), bindHeader && initHeadroom(this), enableScrollButtons && loadScrollButtons(this)
|
||||
}, ScrollerProtoType.pause = function() {
|
||||
var headroom = this.headroom;
|
||||
headroom && headroom.pause()
|
||||
}, ScrollerProtoType.resume = function() {
|
||||
var headroom = this.headroom;
|
||||
headroom && headroom.resume()
|
||||
}, ScrollerProtoType.detachedCallback = function() {
|
||||
this.getAttribute("data-navcommands") && inputManager.off(this, onInputCommand);
|
||||
var headroom = this.headroom;
|
||||
headroom && (headroom.destroy(), this.headroom = null);
|
||||
var scrollerInstance = this.scroller;
|
||||
scrollerInstance && (scrollerInstance.destroy(), this.scroller = null)
|
||||
}, document.registerElement("emby-scroller", {
|
||||
prototype: ScrollerProtoType,
|
||||
extends: "div"
|
||||
})
|
||||
});
|
||||
+75
-1
@@ -1 +1,75 @@
|
||||
define(["layoutManager","browser","actionsheet","css!./emby-select","registerElement"],function(layoutManager,browser,actionsheet){"use strict";function enableNativeMenu(){return!(!browser.edgeUwp&&!browser.xboxOne)||!(browser.tizen||browser.orsay||browser.web0s)&&(!!browser.tv||!layoutManager.tv)}function triggerChange(select){var evt=document.createEvent("HTMLEvents");evt.initEvent("change",!1,!0),select.dispatchEvent(evt)}function setValue(select,value){select.value=value}function showActionSheet(select){var labelElem=getLabel(select),title=labelElem?labelElem.textContent||labelElem.innerText:null;actionsheet.show({items:select.options,positionTo:select,title:title}).then(function(value){setValue(select,value),triggerChange(select)})}function getLabel(select){for(var elem=select.previousSibling;elem&&"LABEL"!==elem.tagName;)elem=elem.previousSibling;return elem}function onFocus(e){var label=getLabel(this);label&&label.classList.add("selectLabelFocused")}function onBlur(e){var label=getLabel(this);label&&label.classList.remove("selectLabelFocused")}function onMouseDown(e){e.button||enableNativeMenu()||(e.preventDefault(),showActionSheet(this))}function onKeyDown(e){switch(e.keyCode){case 13:return void(enableNativeMenu()||(e.preventDefault(),showActionSheet(this)));case 37:case 38:case 39:case 40:return void(layoutManager.tv&&e.preventDefault())}}var EmbySelectPrototype=Object.create(HTMLSelectElement.prototype),inputId=0;EmbySelectPrototype.createdCallback=function(){this.id||(this.id="embyselect"+inputId,inputId++),browser.firefox||(this.classList.add("emby-select-withcolor"),layoutManager.tv&&this.classList.add("emby-select-tv-withcolor")),layoutManager.tv&&this.classList.add("emby-select-focusscale"),this.addEventListener("mousedown",onMouseDown),this.addEventListener("keydown",onKeyDown),this.addEventListener("focus",onFocus),this.addEventListener("blur",onBlur)},EmbySelectPrototype.attachedCallback=function(){if(!this.classList.contains("emby-select")){this.classList.add("emby-select");var label=this.ownerDocument.createElement("label");label.innerHTML=this.getAttribute("label")||"",label.classList.add("selectLabel"),label.htmlFor=this.id,this.parentNode.insertBefore(label,this),this.classList.contains("emby-select-withcolor")&&this.parentNode.insertAdjacentHTML("beforeend",'<div class="selectArrowContainer"><div style="visibility:hidden;">0</div><i class="selectArrow md-icon"></i></div>')}},EmbySelectPrototype.setLabel=function(text){this.parentNode.querySelector("label").innerHTML=text},document.registerElement("emby-select",{prototype:EmbySelectPrototype,extends:"select"})});
|
||||
define(["layoutManager", "browser", "actionsheet", "css!./emby-select", "registerElement"], function(layoutManager, browser, actionsheet) {
|
||||
"use strict";
|
||||
|
||||
function enableNativeMenu() {
|
||||
return !(!browser.edgeUwp && !browser.xboxOne) || !(browser.tizen || browser.orsay || browser.web0s) && (!!browser.tv || !layoutManager.tv)
|
||||
}
|
||||
|
||||
function triggerChange(select) {
|
||||
var evt = document.createEvent("HTMLEvents");
|
||||
evt.initEvent("change", !1, !0), select.dispatchEvent(evt)
|
||||
}
|
||||
|
||||
function setValue(select, value) {
|
||||
select.value = value
|
||||
}
|
||||
|
||||
function showActionSheet(select) {
|
||||
var labelElem = getLabel(select),
|
||||
title = labelElem ? labelElem.textContent || labelElem.innerText : null;
|
||||
actionsheet.show({
|
||||
items: select.options,
|
||||
positionTo: select,
|
||||
title: title
|
||||
}).then(function(value) {
|
||||
setValue(select, value), triggerChange(select)
|
||||
})
|
||||
}
|
||||
|
||||
function getLabel(select) {
|
||||
for (var elem = select.previousSibling; elem && "LABEL" !== elem.tagName;) elem = elem.previousSibling;
|
||||
return elem
|
||||
}
|
||||
|
||||
function onFocus(e) {
|
||||
var label = getLabel(this);
|
||||
label && label.classList.add("selectLabelFocused")
|
||||
}
|
||||
|
||||
function onBlur(e) {
|
||||
var label = getLabel(this);
|
||||
label && label.classList.remove("selectLabelFocused")
|
||||
}
|
||||
|
||||
function onMouseDown(e) {
|
||||
e.button || enableNativeMenu() || (e.preventDefault(), showActionSheet(this))
|
||||
}
|
||||
|
||||
function onKeyDown(e) {
|
||||
switch (e.keyCode) {
|
||||
case 13:
|
||||
return void(enableNativeMenu() || (e.preventDefault(), showActionSheet(this)));
|
||||
case 37:
|
||||
case 38:
|
||||
case 39:
|
||||
case 40:
|
||||
return void(layoutManager.tv && e.preventDefault())
|
||||
}
|
||||
}
|
||||
var EmbySelectPrototype = Object.create(HTMLSelectElement.prototype),
|
||||
inputId = 0;
|
||||
EmbySelectPrototype.createdCallback = function() {
|
||||
this.id || (this.id = "embyselect" + inputId, inputId++), browser.firefox || (this.classList.add("emby-select-withcolor"), layoutManager.tv && this.classList.add("emby-select-tv-withcolor")), layoutManager.tv && this.classList.add("emby-select-focusscale"), this.addEventListener("mousedown", onMouseDown), this.addEventListener("keydown", onKeyDown), this.addEventListener("focus", onFocus), this.addEventListener("blur", onBlur)
|
||||
}, EmbySelectPrototype.attachedCallback = function() {
|
||||
if (!this.classList.contains("emby-select")) {
|
||||
this.classList.add("emby-select");
|
||||
var label = this.ownerDocument.createElement("label");
|
||||
label.innerHTML = this.getAttribute("label") || "", label.classList.add("selectLabel"), label.htmlFor = this.id, this.parentNode.insertBefore(label, this), this.classList.contains("emby-select-withcolor") && this.parentNode.insertAdjacentHTML("beforeend", '<div class="selectArrowContainer"><div style="visibility:hidden;">0</div><i class="selectArrow md-icon"></i></div>')
|
||||
}
|
||||
}, EmbySelectPrototype.setLabel = function(text) {
|
||||
this.parentNode.querySelector("label").innerHTML = text
|
||||
}, document.registerElement("emby-select", {
|
||||
prototype: EmbySelectPrototype,
|
||||
extends: "select"
|
||||
})
|
||||
});
|
||||
+101
-1
@@ -1 +1,101 @@
|
||||
define(["browser","dom","layoutManager","css!./emby-slider","registerElement","emby-input"],function(browser,dom,layoutManager){"use strict";function updateValues(){var range=this,value=range.value;requestAnimationFrame(function(){var backgroundLower=range.backgroundLower;if(backgroundLower){var fraction=(value-range.min)/(range.max-range.min);enableWidthWithTransform?backgroundLower.style.transform="scaleX("+fraction+")":(fraction*=100,backgroundLower.style.width=fraction+"%")}})}function updateBubble(range,value,bubble,bubbleText){requestAnimationFrame(function(){bubble.style.left=value+"%",range.getBubbleHtml?value=range.getBubbleHtml(value):(value=range.getBubbleText?range.getBubbleText(value):Math.round(value),value='<h1 class="sliderBubbleText">'+value+"</h1>"),bubble.innerHTML=value})}function setRange(elem,startPercent,endPercent){var style=elem.style;style.left=Math.max(startPercent,0)+"%";var widthPercent=endPercent-startPercent;style.width=Math.max(Math.min(widthPercent,100),0)+"%"}function mapRangesFromRuntimeToPercent(ranges,runtime){return runtime?ranges.map(function(r){return{start:r.start/runtime*100,end:r.end/runtime*100}}):[]}function startInterval(range){var interval=range.interval;interval&&clearInterval(interval),range.interval=setInterval(updateValues.bind(range),100)}var enableWidthWithTransform,EmbySliderPrototype=Object.create(HTMLInputElement.prototype),supportsNativeProgressStyle=browser.firefox,supportsValueSetOverride=!1;if(Object.getOwnPropertyDescriptor&&Object.defineProperty){var descriptor=Object.getOwnPropertyDescriptor(HTMLInputElement.prototype,"value");descriptor&&descriptor.configurable&&(supportsValueSetOverride=!0)}EmbySliderPrototype.attachedCallback=function(){if("true"!==this.getAttribute("data-embyslider")){this.setAttribute("data-embyslider","true"),this.classList.add("mdl-slider"),this.classList.add("mdl-js-slider"),browser.noFlex&&this.classList.add("slider-no-webkit-thumb"),layoutManager.mobile||this.classList.add("mdl-slider-hoverthumb");var containerElement=this.parentNode;containerElement.classList.add("mdl-slider-container");var htmlToInsert="";supportsNativeProgressStyle||(htmlToInsert+='<div class="mdl-slider-background-flex">',htmlToInsert+='<div class="mdl-slider-background-flex-inner">',htmlToInsert+='<div class="mdl-slider-background-upper"></div>',htmlToInsert+=enableWidthWithTransform?'<div class="mdl-slider-background-lower mdl-slider-background-lower-withtransform"></div>':'<div class="mdl-slider-background-lower"></div>',htmlToInsert+="</div>",htmlToInsert+="</div>"),htmlToInsert+='<div class="sliderBubble hide"></div>',containerElement.insertAdjacentHTML("beforeend",htmlToInsert),this.backgroundLower=containerElement.querySelector(".mdl-slider-background-lower"),this.backgroundUpper=containerElement.querySelector(".mdl-slider-background-upper");var sliderBubble=containerElement.querySelector(".sliderBubble"),hasHideClass=sliderBubble.classList.contains("hide");dom.addEventListener(this,"input",function(e){this.dragging=!0,updateBubble(this,this.value,sliderBubble),hasHideClass&&(sliderBubble.classList.remove("hide"),hasHideClass=!1)},{passive:!0}),dom.addEventListener(this,"change",function(){this.dragging=!1,updateValues.call(this),sliderBubble.classList.add("hide"),hasHideClass=!0},{passive:!0}),browser.firefox||(dom.addEventListener(this,window.PointerEvent?"pointermove":"mousemove",function(e){if(!this.dragging){var rect=this.getBoundingClientRect(),clientX=e.clientX,bubbleValue=(clientX-rect.left)/rect.width;bubbleValue*=100,updateBubble(this,bubbleValue,sliderBubble),hasHideClass&&(sliderBubble.classList.remove("hide"),hasHideClass=!1)}},{passive:!0}),dom.addEventListener(this,window.PointerEvent?"pointerleave":"mouseleave",function(){sliderBubble.classList.add("hide"),hasHideClass=!0},{passive:!0})),supportsNativeProgressStyle||(supportsValueSetOverride?this.addEventListener("valueset",updateValues):startInterval(this))}},EmbySliderPrototype.setBufferedRanges=function(ranges,runtime,position){var elem=this.backgroundUpper;if(elem){null!=runtime&&(ranges=mapRangesFromRuntimeToPercent(ranges,runtime),position=position/runtime*100);for(var i=0,length=ranges.length;i<length;i++){var range=ranges[i];if(!(null!=position&&position>=range.end))return void setRange(elem,range.start,range.end)}setRange(elem,0,0)}},EmbySliderPrototype.setIsClear=function(isClear){var backgroundLower=this.backgroundLower;backgroundLower&&(isClear?backgroundLower.classList.add("mdl-slider-background-lower-clear"):backgroundLower.classList.remove("mdl-slider-background-lower-clear"))},EmbySliderPrototype.detachedCallback=function(){var interval=this.interval;interval&&clearInterval(interval),this.interval=null,this.backgroundUpper=null,this.backgroundLower=null},document.registerElement("emby-slider",{prototype:EmbySliderPrototype,extends:"input"})});
|
||||
define(["browser", "dom", "layoutManager", "css!./emby-slider", "registerElement", "emby-input"], function(browser, dom, layoutManager) {
|
||||
"use strict";
|
||||
|
||||
function updateValues() {
|
||||
var range = this,
|
||||
value = range.value;
|
||||
requestAnimationFrame(function() {
|
||||
var backgroundLower = range.backgroundLower;
|
||||
if (backgroundLower) {
|
||||
var fraction = (value - range.min) / (range.max - range.min);
|
||||
enableWidthWithTransform ? backgroundLower.style.transform = "scaleX(" + fraction + ")" : (fraction *= 100, backgroundLower.style.width = fraction + "%")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function updateBubble(range, value, bubble, bubbleText) {
|
||||
requestAnimationFrame(function() {
|
||||
bubble.style.left = value + "%", range.getBubbleHtml ? value = range.getBubbleHtml(value) : (value = range.getBubbleText ? range.getBubbleText(value) : Math.round(value), value = '<h1 class="sliderBubbleText">' + value + "</h1>"), bubble.innerHTML = value
|
||||
})
|
||||
}
|
||||
|
||||
function setRange(elem, startPercent, endPercent) {
|
||||
var style = elem.style;
|
||||
style.left = Math.max(startPercent, 0) + "%";
|
||||
var widthPercent = endPercent - startPercent;
|
||||
style.width = Math.max(Math.min(widthPercent, 100), 0) + "%"
|
||||
}
|
||||
|
||||
function mapRangesFromRuntimeToPercent(ranges, runtime) {
|
||||
return runtime ? ranges.map(function(r) {
|
||||
return {
|
||||
start: r.start / runtime * 100,
|
||||
end: r.end / runtime * 100
|
||||
}
|
||||
}) : []
|
||||
}
|
||||
|
||||
function startInterval(range) {
|
||||
var interval = range.interval;
|
||||
interval && clearInterval(interval), range.interval = setInterval(updateValues.bind(range), 100)
|
||||
}
|
||||
var enableWidthWithTransform, EmbySliderPrototype = Object.create(HTMLInputElement.prototype),
|
||||
supportsNativeProgressStyle = browser.firefox,
|
||||
supportsValueSetOverride = !1;
|
||||
if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
|
||||
var descriptor = Object.getOwnPropertyDescriptor(HTMLInputElement.prototype, "value");
|
||||
descriptor && descriptor.configurable && (supportsValueSetOverride = !0)
|
||||
}
|
||||
EmbySliderPrototype.attachedCallback = function() {
|
||||
if ("true" !== this.getAttribute("data-embyslider")) {
|
||||
this.setAttribute("data-embyslider", "true"), this.classList.add("mdl-slider"), this.classList.add("mdl-js-slider"), browser.noFlex && this.classList.add("slider-no-webkit-thumb"), layoutManager.mobile || this.classList.add("mdl-slider-hoverthumb");
|
||||
var containerElement = this.parentNode;
|
||||
containerElement.classList.add("mdl-slider-container");
|
||||
var htmlToInsert = "";
|
||||
supportsNativeProgressStyle || (htmlToInsert += '<div class="mdl-slider-background-flex">', htmlToInsert += '<div class="mdl-slider-background-flex-inner">', htmlToInsert += '<div class="mdl-slider-background-upper"></div>', htmlToInsert += enableWidthWithTransform ? '<div class="mdl-slider-background-lower mdl-slider-background-lower-withtransform"></div>' : '<div class="mdl-slider-background-lower"></div>', htmlToInsert += "</div>", htmlToInsert += "</div>"), htmlToInsert += '<div class="sliderBubble hide"></div>', containerElement.insertAdjacentHTML("beforeend", htmlToInsert), this.backgroundLower = containerElement.querySelector(".mdl-slider-background-lower"), this.backgroundUpper = containerElement.querySelector(".mdl-slider-background-upper");
|
||||
var sliderBubble = containerElement.querySelector(".sliderBubble"),
|
||||
hasHideClass = sliderBubble.classList.contains("hide");
|
||||
dom.addEventListener(this, "input", function(e) {
|
||||
this.dragging = !0, updateBubble(this, this.value, sliderBubble), hasHideClass && (sliderBubble.classList.remove("hide"), hasHideClass = !1)
|
||||
}, {
|
||||
passive: !0
|
||||
}), dom.addEventListener(this, "change", function() {
|
||||
this.dragging = !1, updateValues.call(this), sliderBubble.classList.add("hide"), hasHideClass = !0
|
||||
}, {
|
||||
passive: !0
|
||||
}), browser.firefox || (dom.addEventListener(this, window.PointerEvent ? "pointermove" : "mousemove", function(e) {
|
||||
if (!this.dragging) {
|
||||
var rect = this.getBoundingClientRect(),
|
||||
clientX = e.clientX,
|
||||
bubbleValue = (clientX - rect.left) / rect.width;
|
||||
bubbleValue *= 100, updateBubble(this, bubbleValue, sliderBubble), hasHideClass && (sliderBubble.classList.remove("hide"), hasHideClass = !1)
|
||||
}
|
||||
}, {
|
||||
passive: !0
|
||||
}), dom.addEventListener(this, window.PointerEvent ? "pointerleave" : "mouseleave", function() {
|
||||
sliderBubble.classList.add("hide"), hasHideClass = !0
|
||||
}, {
|
||||
passive: !0
|
||||
})), supportsNativeProgressStyle || (supportsValueSetOverride ? this.addEventListener("valueset", updateValues) : startInterval(this))
|
||||
}
|
||||
}, EmbySliderPrototype.setBufferedRanges = function(ranges, runtime, position) {
|
||||
var elem = this.backgroundUpper;
|
||||
if (elem) {
|
||||
null != runtime && (ranges = mapRangesFromRuntimeToPercent(ranges, runtime), position = position / runtime * 100);
|
||||
for (var i = 0, length = ranges.length; i < length; i++) {
|
||||
var range = ranges[i];
|
||||
if (!(null != position && position >= range.end)) return void setRange(elem, range.start, range.end)
|
||||
}
|
||||
setRange(elem, 0, 0)
|
||||
}
|
||||
}, EmbySliderPrototype.setIsClear = function(isClear) {
|
||||
var backgroundLower = this.backgroundLower;
|
||||
backgroundLower && (isClear ? backgroundLower.classList.add("mdl-slider-background-lower-clear") : backgroundLower.classList.remove("mdl-slider-background-lower-clear"))
|
||||
}, EmbySliderPrototype.detachedCallback = function() {
|
||||
var interval = this.interval;
|
||||
interval && clearInterval(interval), this.interval = null, this.backgroundUpper = null, this.backgroundLower = null
|
||||
}, document.registerElement("emby-slider", {
|
||||
prototype: EmbySliderPrototype,
|
||||
extends: "input"
|
||||
})
|
||||
});
|
||||
File diff suppressed because one or more lines are too long
+55
-1
@@ -1 +1,55 @@
|
||||
define(["layoutManager","browser","css!./emby-textarea","registerElement","emby-input"],function(layoutManager,browser){"use strict";function autoGrow(textarea,maxLines){function reset(){textarea.rows=1,offset=self.getOffset(textarea),self.rows=textarea.rows||1,self.lineHeight=textarea.scrollHeight/self.rows-offset/self.rows,self.maxAllowedHeight=self.lineHeight*maxLines-offset}function autogrowFn(){if((!self.lineHeight||self.lineHeight<=0)&&reset(),self.lineHeight<=0)return textarea.style.overflowY="scroll",textarea.style.height="auto",void(textarea.rows=3);var newHeight=0;textarea.scrollHeight-offset>self.maxAllowedHeight?(textarea.style.overflowY="scroll",newHeight=self.maxAllowedHeight):(textarea.style.overflowY="hidden",textarea.style.height="auto",newHeight=textarea.scrollHeight),textarea.style.height=newHeight+"px"}var self=this;void 0===maxLines&&(maxLines=999),self.getOffset=function(textarea){for(var style=window.getComputedStyle(textarea,null),props=["paddingTop","paddingBottom"],offset=0,i=0;i<props.length;i++)offset+=parseInt(style[props[i]]);return offset};var offset;textarea.addEventListener("input",autogrowFn),textarea.addEventListener("focus",autogrowFn),textarea.addEventListener("valueset",autogrowFn),autogrowFn()}var EmbyTextAreaPrototype=Object.create(HTMLTextAreaElement.prototype),elementId=0;if(Object.getOwnPropertyDescriptor&&Object.defineProperty){var descriptor=Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype,"value");if(descriptor&&descriptor.configurable){var baseSetMethod=descriptor.set;descriptor.set=function(value){baseSetMethod.call(this,value),this.dispatchEvent(new CustomEvent("valueset",{bubbles:!1,cancelable:!1}))},Object.defineProperty(HTMLTextAreaElement.prototype,"value",descriptor)}}EmbyTextAreaPrototype.createdCallback=function(){this.id||(this.id="embytextarea"+elementId,elementId++)},EmbyTextAreaPrototype.attachedCallback=function(){if(!this.classList.contains("emby-textarea")){this.rows=1,this.classList.add("emby-textarea");var parentNode=this.parentNode,label=this.ownerDocument.createElement("label");label.innerHTML=this.getAttribute("label")||"",label.classList.add("textareaLabel"),label.htmlFor=this.id,parentNode.insertBefore(label,this),this.addEventListener("focus",function(){label.classList.add("textareaLabelFocused"),label.classList.remove("textareaLabelUnfocused")}),this.addEventListener("blur",function(){label.classList.remove("textareaLabelFocused"),label.classList.add("textareaLabelUnfocused")}),this.label=function(text){label.innerHTML=text},new autoGrow(this)}},document.registerElement("emby-textarea",{prototype:EmbyTextAreaPrototype,extends:"textarea"})});
|
||||
define(["layoutManager", "browser", "css!./emby-textarea", "registerElement", "emby-input"], function(layoutManager, browser) {
|
||||
"use strict";
|
||||
|
||||
function autoGrow(textarea, maxLines) {
|
||||
function reset() {
|
||||
textarea.rows = 1, offset = self.getOffset(textarea), self.rows = textarea.rows || 1, self.lineHeight = textarea.scrollHeight / self.rows - offset / self.rows, self.maxAllowedHeight = self.lineHeight * maxLines - offset
|
||||
}
|
||||
|
||||
function autogrowFn() {
|
||||
if ((!self.lineHeight || self.lineHeight <= 0) && reset(), self.lineHeight <= 0) return textarea.style.overflowY = "scroll", textarea.style.height = "auto", void(textarea.rows = 3);
|
||||
var newHeight = 0;
|
||||
textarea.scrollHeight - offset > self.maxAllowedHeight ? (textarea.style.overflowY = "scroll", newHeight = self.maxAllowedHeight) : (textarea.style.overflowY = "hidden", textarea.style.height = "auto", newHeight = textarea.scrollHeight), textarea.style.height = newHeight + "px"
|
||||
}
|
||||
var self = this;
|
||||
void 0 === maxLines && (maxLines = 999), self.getOffset = function(textarea) {
|
||||
for (var style = window.getComputedStyle(textarea, null), props = ["paddingTop", "paddingBottom"], offset = 0, i = 0; i < props.length; i++) offset += parseInt(style[props[i]]);
|
||||
return offset
|
||||
};
|
||||
var offset;
|
||||
textarea.addEventListener("input", autogrowFn), textarea.addEventListener("focus", autogrowFn), textarea.addEventListener("valueset", autogrowFn), autogrowFn()
|
||||
}
|
||||
var EmbyTextAreaPrototype = Object.create(HTMLTextAreaElement.prototype),
|
||||
elementId = 0;
|
||||
if (Object.getOwnPropertyDescriptor && Object.defineProperty) {
|
||||
var descriptor = Object.getOwnPropertyDescriptor(HTMLTextAreaElement.prototype, "value");
|
||||
if (descriptor && descriptor.configurable) {
|
||||
var baseSetMethod = descriptor.set;
|
||||
descriptor.set = function(value) {
|
||||
baseSetMethod.call(this, value), this.dispatchEvent(new CustomEvent("valueset", {
|
||||
bubbles: !1,
|
||||
cancelable: !1
|
||||
}))
|
||||
}, Object.defineProperty(HTMLTextAreaElement.prototype, "value", descriptor)
|
||||
}
|
||||
}
|
||||
EmbyTextAreaPrototype.createdCallback = function() {
|
||||
this.id || (this.id = "embytextarea" + elementId, elementId++)
|
||||
}, EmbyTextAreaPrototype.attachedCallback = function() {
|
||||
if (!this.classList.contains("emby-textarea")) {
|
||||
this.rows = 1, this.classList.add("emby-textarea");
|
||||
var parentNode = this.parentNode,
|
||||
label = this.ownerDocument.createElement("label");
|
||||
label.innerHTML = this.getAttribute("label") || "", label.classList.add("textareaLabel"), label.htmlFor = this.id, parentNode.insertBefore(label, this), this.addEventListener("focus", function() {
|
||||
label.classList.add("textareaLabelFocused"), label.classList.remove("textareaLabelUnfocused")
|
||||
}), this.addEventListener("blur", function() {
|
||||
label.classList.remove("textareaLabelFocused"), label.classList.add("textareaLabelUnfocused")
|
||||
}), this.label = function(text) {
|
||||
label.innerHTML = text
|
||||
}, new autoGrow(this)
|
||||
}
|
||||
}, document.registerElement("emby-textarea", {
|
||||
prototype: EmbyTextAreaPrototype,
|
||||
extends: "textarea"
|
||||
})
|
||||
});
|
||||
+22
-1
@@ -1 +1,22 @@
|
||||
define(["css!./emby-toggle","registerElement"],function(){"use strict";function onKeyDown(e){if(13===e.keyCode)return e.preventDefault(),this.checked=!this.checked,this.dispatchEvent(new CustomEvent("change",{bubbles:!0})),!1}var EmbyTogglePrototype=Object.create(HTMLInputElement.prototype);EmbyTogglePrototype.attachedCallback=function(){if("true"!==this.getAttribute("data-embytoggle")){this.setAttribute("data-embytoggle","true"),this.classList.add("mdl-switch__input");var labelElement=this.parentNode;labelElement.classList.add("mdl-switch"),labelElement.classList.add("mdl-js-switch");var labelTextElement=labelElement.querySelector("span");labelElement.insertAdjacentHTML("beforeend",'<div class="mdl-switch__trackContainer"><div class="mdl-switch__track"></div><div class="mdl-switch__thumb"><span class="mdl-switch__focus-helper"></span></div></div>'),labelTextElement.classList.add("toggleButtonLabel"),labelTextElement.classList.add("mdl-switch__label"),this.addEventListener("keydown",onKeyDown)}},document.registerElement("emby-toggle",{prototype:EmbyTogglePrototype,extends:"input"})});
|
||||
define(["css!./emby-toggle", "registerElement"], function() {
|
||||
"use strict";
|
||||
|
||||
function onKeyDown(e) {
|
||||
if (13 === e.keyCode) return e.preventDefault(), this.checked = !this.checked, this.dispatchEvent(new CustomEvent("change", {
|
||||
bubbles: !0
|
||||
})), !1
|
||||
}
|
||||
var EmbyTogglePrototype = Object.create(HTMLInputElement.prototype);
|
||||
EmbyTogglePrototype.attachedCallback = function() {
|
||||
if ("true" !== this.getAttribute("data-embytoggle")) {
|
||||
this.setAttribute("data-embytoggle", "true"), this.classList.add("mdl-switch__input");
|
||||
var labelElement = this.parentNode;
|
||||
labelElement.classList.add("mdl-switch"), labelElement.classList.add("mdl-js-switch");
|
||||
var labelTextElement = labelElement.querySelector("span");
|
||||
labelElement.insertAdjacentHTML("beforeend", '<div class="mdl-switch__trackContainer"><div class="mdl-switch__track"></div><div class="mdl-switch__thumb"><span class="mdl-switch__focus-helper"></span></div></div>'), labelTextElement.classList.add("toggleButtonLabel"), labelTextElement.classList.add("mdl-switch__label"), this.addEventListener("keydown", onKeyDown)
|
||||
}
|
||||
}, document.registerElement("emby-toggle", {
|
||||
prototype: EmbyTogglePrototype,
|
||||
extends: "input"
|
||||
})
|
||||
});
|
||||
@@ -1 +1,54 @@
|
||||
define([],function(){"use strict";function getFetchPromise(request){var headers=request.headers||{};"json"===request.dataType&&(headers.accept="application/json");var fetchRequest={headers:headers,method:request.type,credentials:"same-origin"},contentType=request.contentType;request.data&&("string"==typeof request.data?fetchRequest.body=request.data:(fetchRequest.body=paramsToString(request.data),contentType=contentType||"application/x-www-form-urlencoded; charset=UTF-8")),contentType&&(headers["Content-Type"]=contentType);var url=request.url;if(request.query){var paramString=paramsToString(request.query);paramString&&(url+="?"+paramString)}return request.timeout?fetchWithTimeout(url,fetchRequest,request.timeout):fetch(url,fetchRequest)}function fetchWithTimeout(url,options,timeoutMs){return console.log("fetchWithTimeout: timeoutMs: "+timeoutMs+", url: "+url),new Promise(function(resolve,reject){var timeout=setTimeout(reject,timeoutMs);options=options||{},options.credentials="same-origin",fetch(url,options).then(function(response){clearTimeout(timeout),console.log("fetchWithTimeout: succeeded connecting to url: "+url),resolve(response)},function(error){clearTimeout(timeout),console.log("fetchWithTimeout: timed out connecting to url: "+url),reject()})})}function paramsToString(params){var values=[];for(var key in params){var value=params[key];null!==value&&void 0!==value&&""!==value&&values.push(encodeURIComponent(key)+"="+encodeURIComponent(value))}return values.join("&")}function ajax(request){if(!request)throw new Error("Request cannot be null");return request.headers=request.headers||{},console.log("requesting url: "+request.url),getFetchPromise(request).then(function(response){return console.log("response status: "+response.status+", url: "+request.url),response.status<400?"json"===request.dataType||"application/json"===request.headers.accept?response.json():"text"===request.dataType||0===(response.headers.get("Content-Type")||"").toLowerCase().indexOf("text/")?response.text():response:Promise.reject(response)},function(err){throw console.log("request failed to url: "+request.url),err})}return{getFetchPromise:getFetchPromise,ajax:ajax}});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
|
||||
function getFetchPromise(request) {
|
||||
var headers = request.headers || {};
|
||||
"json" === request.dataType && (headers.accept = "application/json");
|
||||
var fetchRequest = {
|
||||
headers: headers,
|
||||
method: request.type,
|
||||
credentials: "same-origin"
|
||||
},
|
||||
contentType = request.contentType;
|
||||
request.data && ("string" == typeof request.data ? fetchRequest.body = request.data : (fetchRequest.body = paramsToString(request.data), contentType = contentType || "application/x-www-form-urlencoded; charset=UTF-8")), contentType && (headers["Content-Type"] = contentType);
|
||||
var url = request.url;
|
||||
if (request.query) {
|
||||
var paramString = paramsToString(request.query);
|
||||
paramString && (url += "?" + paramString)
|
||||
}
|
||||
return request.timeout ? fetchWithTimeout(url, fetchRequest, request.timeout) : fetch(url, fetchRequest)
|
||||
}
|
||||
|
||||
function fetchWithTimeout(url, options, timeoutMs) {
|
||||
return console.log("fetchWithTimeout: timeoutMs: " + timeoutMs + ", url: " + url), new Promise(function(resolve, reject) {
|
||||
var timeout = setTimeout(reject, timeoutMs);
|
||||
options = options || {}, options.credentials = "same-origin", fetch(url, options).then(function(response) {
|
||||
clearTimeout(timeout), console.log("fetchWithTimeout: succeeded connecting to url: " + url), resolve(response)
|
||||
}, function(error) {
|
||||
clearTimeout(timeout), console.log("fetchWithTimeout: timed out connecting to url: " + url), reject()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function paramsToString(params) {
|
||||
var values = [];
|
||||
for (var key in params) {
|
||||
var value = params[key];
|
||||
null !== value && void 0 !== value && "" !== value && values.push(encodeURIComponent(key) + "=" + encodeURIComponent(value))
|
||||
}
|
||||
return values.join("&")
|
||||
}
|
||||
|
||||
function ajax(request) {
|
||||
if (!request) throw new Error("Request cannot be null");
|
||||
return request.headers = request.headers || {}, console.log("requesting url: " + request.url), getFetchPromise(request).then(function(response) {
|
||||
return console.log("response status: " + response.status + ", url: " + request.url), response.status < 400 ? "json" === request.dataType || "application/json" === request.headers.accept ? response.json() : "text" === request.dataType || 0 === (response.headers.get("Content-Type") || "").toLowerCase().indexOf("text/") ? response.text() : response : Promise.reject(response)
|
||||
}, function(err) {
|
||||
throw console.log("request failed to url: " + request.url), err
|
||||
})
|
||||
}
|
||||
return {
|
||||
getFetchPromise: getFetchPromise,
|
||||
ajax: ajax
|
||||
}
|
||||
});
|
||||
@@ -1 +1,10 @@
|
||||
define(["multi-download"],function(multiDownload){"use strict";return{download:function(items){multiDownload(items.map(function(item){return item.url}))}}});
|
||||
define(["multi-download"], function(multiDownload) {
|
||||
"use strict";
|
||||
return {
|
||||
download: function(items) {
|
||||
multiDownload(items.map(function(item) {
|
||||
return item.url
|
||||
}))
|
||||
}
|
||||
}
|
||||
});
|
||||
@@ -1 +1,11 @@
|
||||
define([],function(){"use strict";return{fileExists:function(path){return Promise.reject()},directoryExists:function(path){return Promise.reject()}}});
|
||||
define([], function() {
|
||||
"use strict";
|
||||
return {
|
||||
fileExists: function(path) {
|
||||
return Promise.reject()
|
||||
},
|
||||
directoryExists: function(path) {
|
||||
return Promise.reject()
|
||||
}
|
||||
}
|
||||
});
|
||||
+125
-1
File diff suppressed because one or more lines are too long
+6277
-7
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+12
-1
@@ -1 +1,12 @@
|
||||
define(["dom","fullscreenManager"],function(dom,fullscreenManager){"use strict";function isTargetValid(target){return!dom.parentWithTag(target,["BUTTON","INPUT","TEXTAREA"])}dom.addEventListener(window,"dblclick",function(e){isTargetValid(e.target)&&(fullscreenManager.isFullScreen()?fullscreenManager.exitFullscreen():fullscreenManager.requestFullscreen())},{passive:!0})});
|
||||
define(["dom", "fullscreenManager"], function(dom, fullscreenManager) {
|
||||
"use strict";
|
||||
|
||||
function isTargetValid(target) {
|
||||
return !dom.parentWithTag(target, ["BUTTON", "INPUT", "TEXTAREA"])
|
||||
}
|
||||
dom.addEventListener(window, "dblclick", function(e) {
|
||||
isTargetValid(e.target) && (fullscreenManager.isFullScreen() ? fullscreenManager.exitFullscreen() : fullscreenManager.requestFullscreen())
|
||||
}, {
|
||||
passive: !0
|
||||
})
|
||||
});
|
||||
+24
-1
@@ -1 +1,24 @@
|
||||
define(["events","dom"],function(events,dom){"use strict";function fullscreenManager(){}function onFullScreenChange(){events.trigger(manager,"fullscreenchange")}fullscreenManager.prototype.requestFullscreen=function(element){return element=element||document.documentElement,element.requestFullscreen?void element.requestFullscreen():element.mozRequestFullScreen?void element.mozRequestFullScreen():element.webkitRequestFullscreen?void element.webkitRequestFullscreen():element.msRequestFullscreen?void element.msRequestFullscreen():("VIDEO"!==element.tagName&&(element=document.querySelector("video")||element),void(element.webkitEnterFullscreen&&element.webkitEnterFullscreen()))},fullscreenManager.prototype.exitFullscreen=function(){document.exitFullscreen?document.exitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen?document.webkitExitFullscreen():document.webkitCancelFullscreen?document.webkitCancelFullscreen():document.msExitFullscreen&&document.msExitFullscreen()},fullscreenManager.prototype.isFullScreen=function(){return!!(document.fullscreen||document.mozFullScreen||document.webkitIsFullScreen||document.msFullscreenElement)};var manager=new fullscreenManager;return dom.addEventListener(document,"fullscreenchange",onFullScreenChange,{passive:!0}),dom.addEventListener(document,"webkitfullscreenchange",onFullScreenChange,{passive:!0}),dom.addEventListener(document,"mozfullscreenchange",onFullScreenChange,{passive:!0}),manager});
|
||||
define(["events", "dom"], function(events, dom) {
|
||||
"use strict";
|
||||
|
||||
function fullscreenManager() {}
|
||||
|
||||
function onFullScreenChange() {
|
||||
events.trigger(manager, "fullscreenchange")
|
||||
}
|
||||
fullscreenManager.prototype.requestFullscreen = function(element) {
|
||||
return element = element || document.documentElement, element.requestFullscreen ? void element.requestFullscreen() : element.mozRequestFullScreen ? void element.mozRequestFullScreen() : element.webkitRequestFullscreen ? void element.webkitRequestFullscreen() : element.msRequestFullscreen ? void element.msRequestFullscreen() : ("VIDEO" !== element.tagName && (element = document.querySelector("video") || element), void(element.webkitEnterFullscreen && element.webkitEnterFullscreen()))
|
||||
}, fullscreenManager.prototype.exitFullscreen = function() {
|
||||
document.exitFullscreen ? document.exitFullscreen() : document.mozCancelFullScreen ? document.mozCancelFullScreen() : document.webkitExitFullscreen ? document.webkitExitFullscreen() : document.webkitCancelFullscreen ? document.webkitCancelFullscreen() : document.msExitFullscreen && document.msExitFullscreen()
|
||||
}, fullscreenManager.prototype.isFullScreen = function() {
|
||||
return !!(document.fullscreen || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement)
|
||||
};
|
||||
var manager = new fullscreenManager;
|
||||
return dom.addEventListener(document, "fullscreenchange", onFullScreenChange, {
|
||||
passive: !0
|
||||
}), dom.addEventListener(document, "webkitfullscreenchange", onFullScreenChange, {
|
||||
passive: !0
|
||||
}), dom.addEventListener(document, "mozfullscreenchange", onFullScreenChange, {
|
||||
passive: !0
|
||||
}), manager
|
||||
});
|
||||
+135
-1
@@ -1 +1,135 @@
|
||||
define(["connectionManager","userSettings","events"],function(connectionManager,userSettings,events){"use strict";function getCurrentLocale(){return currentCulture}function getCurrentDateTimeLocale(){return currentDateTimeCulture}function getDefaultLanguage(){var culture=document.documentElement.getAttribute("data-culture");return culture||(navigator.language?navigator.language:navigator.userLanguage?navigator.userLanguage:navigator.languages&&navigator.languages.length?navigator.languages[0]:"en-us")}function updateCurrentCulture(){var culture;try{culture=userSettings.language()}catch(err){}culture=culture||getDefaultLanguage(),currentCulture=normalizeLocaleName(culture);var dateTimeCulture;try{dateTimeCulture=userSettings.dateTimeLocale()}catch(err){}currentDateTimeCulture=dateTimeCulture?normalizeLocaleName(dateTimeCulture):currentCulture,ensureTranslations(currentCulture)}function ensureTranslations(culture){for(var i in allTranslations)ensureTranslation(allTranslations[i],culture)}function ensureTranslation(translationInfo,culture){return translationInfo.dictionaries[culture]?Promise.resolve():loadTranslation(translationInfo.translations,culture).then(function(dictionary){translationInfo.dictionaries[culture]=dictionary})}function normalizeLocaleName(culture){culture=culture.replace("_","-");var parts=culture.split("-");2===parts.length&&parts[0].toLowerCase()===parts[1].toLowerCase()&&(culture=parts[0].toLowerCase());var lower=culture.toLowerCase();return"ca-es"===lower?"ca":"sv-se"===lower?"sv":lower}function getDictionary(module){module||(module=defaultModule());var translations=allTranslations[module];return translations?translations.dictionaries[getCurrentLocale()]:{}}function register(options){allTranslations[options.name]={translations:options.strings||options.translations,dictionaries:{}}}function loadStrings(options){var locale=getCurrentLocale();return"string"==typeof options?ensureTranslation(allTranslations[options],locale):(register(options),ensureTranslation(allTranslations[options.name],locale))}function loadTranslation(translations,lang){lang=normalizeLocaleName(lang);var filtered=translations.filter(function(t){return normalizeLocaleName(t.lang)===lang});return filtered.length||(filtered=translations.filter(function(t){return"en-us"===normalizeLocaleName(t.lang)})),new Promise(function(resolve,reject){if(!filtered.length)return void resolve();var url=filtered[0].path;url+=-1===url.indexOf("?")?"?":"&",url+="v="+cacheParam;var xhr=new XMLHttpRequest;xhr.open("GET",url,!0),xhr.onload=function(e){resolve(this.status<400?JSON.parse(this.response):{})},xhr.onerror=function(){resolve({})},xhr.send()})}function translateKey(key){var module,parts=key.split("#");return parts.length>1&&(module=parts[0],key=parts[1]),translateKeyFromModule(key,module)}function translateKeyFromModule(key,module){var dictionary=getDictionary(module);return dictionary?dictionary[key]||key:key}function replaceAll(str,find,replace){return str.split(find).join(replace)}function translate(key){for(var val=translateKey(key),i=1;i<arguments.length;i++)val=replaceAll(val,"{"+(i-1)+"}",arguments[i]);return val}function translateHtml(html,module){if(module||(module=defaultModule()),!module)throw new Error("module cannot be null or empty");var startIndex=html.indexOf("${");if(-1===startIndex)return html;startIndex+=2;var endIndex=html.indexOf("}",startIndex);if(-1===endIndex)return html;var key=html.substring(startIndex,endIndex),val=translateKeyFromModule(key,module);return html=html.replace("${"+key+"}",val),translateHtml(html,module)}function defaultModule(val){return val&&(_defaultModule=val),_defaultModule}var currentCulture,currentDateTimeCulture,_defaultModule,allTranslations={},cacheParam=(new Date).getTime();return updateCurrentCulture(),events.on(connectionManager,"localusersignedin",updateCurrentCulture),events.on(userSettings,"change",function(e,name){"language"!==name&&"datetimelocale"!==name||updateCurrentCulture()}),{getString:translate,translate:translate,translateDocument:translateHtml,translateHtml:translateHtml,loadStrings:loadStrings,defaultModule:defaultModule,getCurrentLocale:getCurrentLocale,getCurrentDateTimeLocale:getCurrentDateTimeLocale,register:register}});
|
||||
define(["connectionManager", "userSettings", "events"], function(connectionManager, userSettings, events) {
|
||||
"use strict";
|
||||
|
||||
function getCurrentLocale() {
|
||||
return currentCulture
|
||||
}
|
||||
|
||||
function getCurrentDateTimeLocale() {
|
||||
return currentDateTimeCulture
|
||||
}
|
||||
|
||||
function getDefaultLanguage() {
|
||||
var culture = document.documentElement.getAttribute("data-culture");
|
||||
return culture || (navigator.language ? navigator.language : navigator.userLanguage ? navigator.userLanguage : navigator.languages && navigator.languages.length ? navigator.languages[0] : "en-us")
|
||||
}
|
||||
|
||||
function updateCurrentCulture() {
|
||||
var culture;
|
||||
try {
|
||||
culture = userSettings.language()
|
||||
} catch (err) {}
|
||||
culture = culture || getDefaultLanguage(), currentCulture = normalizeLocaleName(culture);
|
||||
var dateTimeCulture;
|
||||
try {
|
||||
dateTimeCulture = userSettings.dateTimeLocale()
|
||||
} catch (err) {}
|
||||
currentDateTimeCulture = dateTimeCulture ? normalizeLocaleName(dateTimeCulture) : currentCulture, ensureTranslations(currentCulture)
|
||||
}
|
||||
|
||||
function ensureTranslations(culture) {
|
||||
for (var i in allTranslations) ensureTranslation(allTranslations[i], culture)
|
||||
}
|
||||
|
||||
function ensureTranslation(translationInfo, culture) {
|
||||
return translationInfo.dictionaries[culture] ? Promise.resolve() : loadTranslation(translationInfo.translations, culture).then(function(dictionary) {
|
||||
translationInfo.dictionaries[culture] = dictionary
|
||||
})
|
||||
}
|
||||
|
||||
function normalizeLocaleName(culture) {
|
||||
culture = culture.replace("_", "-");
|
||||
var parts = culture.split("-");
|
||||
2 === parts.length && parts[0].toLowerCase() === parts[1].toLowerCase() && (culture = parts[0].toLowerCase());
|
||||
var lower = culture.toLowerCase();
|
||||
return "ca-es" === lower ? "ca" : "sv-se" === lower ? "sv" : lower
|
||||
}
|
||||
|
||||
function getDictionary(module) {
|
||||
module || (module = defaultModule());
|
||||
var translations = allTranslations[module];
|
||||
return translations ? translations.dictionaries[getCurrentLocale()] : {}
|
||||
}
|
||||
|
||||
function register(options) {
|
||||
allTranslations[options.name] = {
|
||||
translations: options.strings || options.translations,
|
||||
dictionaries: {}
|
||||
}
|
||||
}
|
||||
|
||||
function loadStrings(options) {
|
||||
var locale = getCurrentLocale();
|
||||
return "string" == typeof options ? ensureTranslation(allTranslations[options], locale) : (register(options), ensureTranslation(allTranslations[options.name], locale))
|
||||
}
|
||||
|
||||
function loadTranslation(translations, lang) {
|
||||
lang = normalizeLocaleName(lang);
|
||||
var filtered = translations.filter(function(t) {
|
||||
return normalizeLocaleName(t.lang) === lang
|
||||
});
|
||||
return filtered.length || (filtered = translations.filter(function(t) {
|
||||
return "en-us" === normalizeLocaleName(t.lang)
|
||||
})), new Promise(function(resolve, reject) {
|
||||
if (!filtered.length) return void resolve();
|
||||
var url = filtered[0].path;
|
||||
url += -1 === url.indexOf("?") ? "?" : "&", url += "v=" + cacheParam;
|
||||
var xhr = new XMLHttpRequest;
|
||||
xhr.open("GET", url, !0), xhr.onload = function(e) {
|
||||
resolve(this.status < 400 ? JSON.parse(this.response) : {})
|
||||
}, xhr.onerror = function() {
|
||||
resolve({})
|
||||
}, xhr.send()
|
||||
})
|
||||
}
|
||||
|
||||
function translateKey(key) {
|
||||
var module, parts = key.split("#");
|
||||
return parts.length > 1 && (module = parts[0], key = parts[1]), translateKeyFromModule(key, module)
|
||||
}
|
||||
|
||||
function translateKeyFromModule(key, module) {
|
||||
var dictionary = getDictionary(module);
|
||||
return dictionary ? dictionary[key] || key : key
|
||||
}
|
||||
|
||||
function replaceAll(str, find, replace) {
|
||||
return str.split(find).join(replace)
|
||||
}
|
||||
|
||||
function translate(key) {
|
||||
for (var val = translateKey(key), i = 1; i < arguments.length; i++) val = replaceAll(val, "{" + (i - 1) + "}", arguments[i]);
|
||||
return val
|
||||
}
|
||||
|
||||
function translateHtml(html, module) {
|
||||
if (module || (module = defaultModule()), !module) throw new Error("module cannot be null or empty");
|
||||
var startIndex = html.indexOf("${");
|
||||
if (-1 === startIndex) return html;
|
||||
startIndex += 2;
|
||||
var endIndex = html.indexOf("}", startIndex);
|
||||
if (-1 === endIndex) return html;
|
||||
var key = html.substring(startIndex, endIndex),
|
||||
val = translateKeyFromModule(key, module);
|
||||
return html = html.replace("${" + key + "}", val), translateHtml(html, module)
|
||||
}
|
||||
|
||||
function defaultModule(val) {
|
||||
return val && (_defaultModule = val), _defaultModule
|
||||
}
|
||||
var currentCulture, currentDateTimeCulture, _defaultModule, allTranslations = {},
|
||||
cacheParam = (new Date).getTime();
|
||||
return updateCurrentCulture(), events.on(connectionManager, "localusersignedin", updateCurrentCulture), events.on(userSettings, "change", function(e, name) {
|
||||
"language" !== name && "datetimelocale" !== name || updateCurrentCulture()
|
||||
}), {
|
||||
getString: translate,
|
||||
translate: translate,
|
||||
translateDocument: translateHtml,
|
||||
translateHtml: translateHtml,
|
||||
loadStrings: loadStrings,
|
||||
defaultModule: defaultModule,
|
||||
getCurrentLocale: getCurrentLocale,
|
||||
getCurrentDateTimeLocale: getCurrentDateTimeLocale,
|
||||
register: register
|
||||
}
|
||||
});
|
||||
@@ -1 +1,71 @@
|
||||
define(["dialogHelper","globalize","userSettings","layoutManager","connectionManager","require","loading","scrollHelper","emby-checkbox","emby-radio","css!./../formdialog","material-icons"],function(dialogHelper,globalize,userSettings,layoutManager,connectionManager,require,loading,scrollHelper){"use strict";function saveCategories(context,options){for(var categories=[],chkCategorys=context.querySelectorAll(".chkCategory"),i=0,length=chkCategorys.length;i<length;i++){var type=chkCategorys[i].getAttribute("data-type");chkCategorys[i].checked&&categories.push(type)}categories.length>=4&&categories.push("series"),categories.push("all"),options.categories=categories}function loadCategories(context,options){for(var selectedCategories=options.categories||[],chkCategorys=context.querySelectorAll(".chkCategory"),i=0,length=chkCategorys.length;i<length;i++){var type=chkCategorys[i].getAttribute("data-type");chkCategorys[i].checked=!selectedCategories.length||-1!==selectedCategories.indexOf(type)}}function save(context){var i,length,chkIndicators=context.querySelectorAll(".chkIndicator");for(i=0,length=chkIndicators.length;i<length;i++){var type=chkIndicators[i].getAttribute("data-type");userSettings.set("guide-indicator-"+type,chkIndicators[i].checked)}userSettings.set("guide-colorcodedbackgrounds",context.querySelector(".chkColorCodedBackgrounds").checked),userSettings.set("livetv-favoritechannelsattop",context.querySelector(".chkFavoriteChannelsAtTop").checked);var sortBys=context.querySelectorAll(".chkSortOrder");for(i=0,length=sortBys.length;i<length;i++)if(sortBys[i].checked){userSettings.set("livetv-channelorder",sortBys[i].value);break}}function load(context){var i,length,chkIndicators=context.querySelectorAll(".chkIndicator");for(i=0,length=chkIndicators.length;i<length;i++){var type=chkIndicators[i].getAttribute("data-type");"true"===chkIndicators[i].getAttribute("data-default")?chkIndicators[i].checked="false"!==userSettings.get("guide-indicator-"+type):chkIndicators[i].checked="true"===userSettings.get("guide-indicator-"+type)}context.querySelector(".chkColorCodedBackgrounds").checked="true"===userSettings.get("guide-colorcodedbackgrounds"),context.querySelector(".chkFavoriteChannelsAtTop").checked="false"!==userSettings.get("livetv-favoritechannelsattop");var sortByValue=userSettings.get("livetv-channelorder")||"Number",sortBys=context.querySelectorAll(".chkSortOrder");for(i=0,length=sortBys.length;i<length;i++)sortBys[i].checked=sortBys[i].value===sortByValue}function showEditor(options){return new Promise(function(resolve,reject){var settingsChanged=!1;require(["text!./guide-settings.template.html"],function(template){var dialogOptions={removeOnClose:!0,scrollY:!1};layoutManager.tv?dialogOptions.size="fullscreen":dialogOptions.size="small";var dlg=dialogHelper.createDialog(dialogOptions);dlg.classList.add("formDialog");var html="";html+=globalize.translateDocument(template,"sharedcomponents"),dlg.innerHTML=html,dlg.addEventListener("change",function(){settingsChanged=!0}),dlg.addEventListener("close",function(){layoutManager.tv&&scrollHelper.centerFocus.off(dlg.querySelector(".formDialogContent"),!1),save(dlg),saveCategories(dlg,options),settingsChanged?resolve():reject()}),dlg.querySelector(".btnCancel").addEventListener("click",function(){dialogHelper.close(dlg)}),layoutManager.tv&&scrollHelper.centerFocus.on(dlg.querySelector(".formDialogContent"),!1),load(dlg),loadCategories(dlg,options),dialogHelper.open(dlg)})})}return{show:showEditor}});
|
||||
define(["dialogHelper", "globalize", "userSettings", "layoutManager", "connectionManager", "require", "loading", "scrollHelper", "emby-checkbox", "emby-radio", "css!./../formdialog", "material-icons"], function(dialogHelper, globalize, userSettings, layoutManager, connectionManager, require, loading, scrollHelper) {
|
||||
"use strict";
|
||||
|
||||
function saveCategories(context, options) {
|
||||
for (var categories = [], chkCategorys = context.querySelectorAll(".chkCategory"), i = 0, length = chkCategorys.length; i < length; i++) {
|
||||
var type = chkCategorys[i].getAttribute("data-type");
|
||||
chkCategorys[i].checked && categories.push(type)
|
||||
}
|
||||
categories.length >= 4 && categories.push("series"), categories.push("all"), options.categories = categories
|
||||
}
|
||||
|
||||
function loadCategories(context, options) {
|
||||
for (var selectedCategories = options.categories || [], chkCategorys = context.querySelectorAll(".chkCategory"), i = 0, length = chkCategorys.length; i < length; i++) {
|
||||
var type = chkCategorys[i].getAttribute("data-type");
|
||||
chkCategorys[i].checked = !selectedCategories.length || -1 !== selectedCategories.indexOf(type)
|
||||
}
|
||||
}
|
||||
|
||||
function save(context) {
|
||||
var i, length, chkIndicators = context.querySelectorAll(".chkIndicator");
|
||||
for (i = 0, length = chkIndicators.length; i < length; i++) {
|
||||
var type = chkIndicators[i].getAttribute("data-type");
|
||||
userSettings.set("guide-indicator-" + type, chkIndicators[i].checked)
|
||||
}
|
||||
userSettings.set("guide-colorcodedbackgrounds", context.querySelector(".chkColorCodedBackgrounds").checked), userSettings.set("livetv-favoritechannelsattop", context.querySelector(".chkFavoriteChannelsAtTop").checked);
|
||||
var sortBys = context.querySelectorAll(".chkSortOrder");
|
||||
for (i = 0, length = sortBys.length; i < length; i++)
|
||||
if (sortBys[i].checked) {
|
||||
userSettings.set("livetv-channelorder", sortBys[i].value);
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
function load(context) {
|
||||
var i, length, chkIndicators = context.querySelectorAll(".chkIndicator");
|
||||
for (i = 0, length = chkIndicators.length; i < length; i++) {
|
||||
var type = chkIndicators[i].getAttribute("data-type");
|
||||
"true" === chkIndicators[i].getAttribute("data-default") ? chkIndicators[i].checked = "false" !== userSettings.get("guide-indicator-" + type) : chkIndicators[i].checked = "true" === userSettings.get("guide-indicator-" + type)
|
||||
}
|
||||
context.querySelector(".chkColorCodedBackgrounds").checked = "true" === userSettings.get("guide-colorcodedbackgrounds"), context.querySelector(".chkFavoriteChannelsAtTop").checked = "false" !== userSettings.get("livetv-favoritechannelsattop");
|
||||
var sortByValue = userSettings.get("livetv-channelorder") || "Number",
|
||||
sortBys = context.querySelectorAll(".chkSortOrder");
|
||||
for (i = 0, length = sortBys.length; i < length; i++) sortBys[i].checked = sortBys[i].value === sortByValue
|
||||
}
|
||||
|
||||
function showEditor(options) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
var settingsChanged = !1;
|
||||
require(["text!./guide-settings.template.html"], function(template) {
|
||||
var dialogOptions = {
|
||||
removeOnClose: !0,
|
||||
scrollY: !1
|
||||
};
|
||||
layoutManager.tv ? dialogOptions.size = "fullscreen" : dialogOptions.size = "small";
|
||||
var dlg = dialogHelper.createDialog(dialogOptions);
|
||||
dlg.classList.add("formDialog");
|
||||
var html = "";
|
||||
html += globalize.translateDocument(template, "sharedcomponents"), dlg.innerHTML = html, dlg.addEventListener("change", function() {
|
||||
settingsChanged = !0
|
||||
}), dlg.addEventListener("close", function() {
|
||||
layoutManager.tv && scrollHelper.centerFocus.off(dlg.querySelector(".formDialogContent"), !1), save(dlg), saveCategories(dlg, options), settingsChanged ? resolve() : reject()
|
||||
}), dlg.querySelector(".btnCancel").addEventListener("click", function() {
|
||||
dialogHelper.close(dlg)
|
||||
}), layoutManager.tv && scrollHelper.centerFocus.on(dlg.querySelector(".formDialogContent"), !1), load(dlg), loadCategories(dlg, options), dialogHelper.open(dlg)
|
||||
})
|
||||
})
|
||||
}
|
||||
return {
|
||||
show: showEditor
|
||||
}
|
||||
});
|
||||
+517
-1
File diff suppressed because one or more lines are too long
@@ -1 +1,136 @@
|
||||
define(["dom","layoutManager","browser","css!./headroom"],function(dom,layoutManager,browser){"use strict";function Debouncer(callback){this.callback=callback,this.ticking=!1}function onHeadroomClearedExternally(){this.state=null}function Headroom(elems,options){options=Object.assign(Headroom.options,options||{}),this.lastKnownScrollY=0,this.elems=elems,this.scroller=options.scroller,this.debouncer=onScroll.bind(this),this.offset=options.offset,this.initialised=!1,this.initialClass=options.initialClass,this.unPinnedClass=options.unPinnedClass,this.pinnedClass=options.pinnedClass,this.state="clear"}function onScroll(){this.paused||requestAnimationFrame(this.rafCallback||(this.rafCallback=this.update.bind(this)))}var requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame;return Debouncer.prototype={constructor:Debouncer,update:function(){this.callback&&this.callback(),this.ticking=!1},handleEvent:function(){this.ticking||(requestAnimationFrame(this.rafCallback||(this.rafCallback=this.update.bind(this))),this.ticking=!0)}},Headroom.prototype={constructor:Headroom,init:function(){if(browser.supportsCssAnimation()){for(var i=0,length=this.elems.length;i<length;i++)this.elems[i].classList.add(this.initialClass),this.elems[i].addEventListener("clearheadroom",onHeadroomClearedExternally.bind(this));this.attachEvent()}return this},add:function(elem){browser.supportsCssAnimation()&&(elem.classList.add(this.initialClass),elem.addEventListener("clearheadroom",onHeadroomClearedExternally.bind(this)),this.elems.push(elem))},remove:function(elem){elem.classList.remove(this.unPinnedClass),elem.classList.remove(this.initialClass),elem.classList.remove(this.pinnedClass);var i=this.elems.indexOf(elem);-1!==i&&this.elems.splice(i,1)},pause:function(){this.paused=!0},resume:function(){this.paused=!1},destroy:function(){this.initialised=!1;for(var i=0,length=this.elems.length;i<length;i++){var classList=this.elems[i].classList;classList.remove(this.unPinnedClass),classList.remove(this.initialClass),classList.remove(this.pinnedClass)}var scrollEventName=this.scroller.getScrollEventName?this.scroller.getScrollEventName():"scroll";dom.removeEventListener(this.scroller,scrollEventName,this.debouncer,{capture:!1,passive:!0})},attachEvent:function(){if(!this.initialised){this.lastKnownScrollY=this.getScrollY(),this.initialised=!0;var scrollEventName=this.scroller.getScrollEventName?this.scroller.getScrollEventName():"scroll";dom.addEventListener(this.scroller,scrollEventName,this.debouncer,{capture:!1,passive:!0}),this.update()}},clear:function(){if("clear"!==this.state){this.state="clear";for(var unpinnedClass=this.unPinnedClass,i=(this.pinnedClass,0),length=this.elems.length;i<length;i++){this.elems[i].classList.remove(unpinnedClass)}}},pin:function(){if("pin"!==this.state){this.state="pin";for(var unpinnedClass=this.unPinnedClass,pinnedClass=this.pinnedClass,i=0,length=this.elems.length;i<length;i++){var classList=this.elems[i].classList;classList.remove(unpinnedClass),classList.add(pinnedClass)}}},unpin:function(){if("unpin"!==this.state){this.state="unpin";for(var unpinnedClass=this.unPinnedClass,i=(this.pinnedClass,0),length=this.elems.length;i<length;i++){this.elems[i].classList.add(unpinnedClass)}}},getScrollY:function(){var scroller=this.scroller;if(scroller.getScrollPosition)return scroller.getScrollPosition();var pageYOffset=scroller.pageYOffset;if(void 0!==pageYOffset)return pageYOffset;var scrollTop=scroller.scrollTop;return void 0!==scrollTop?scrollTop:(document.documentElement||document.body).scrollTop},shouldUnpin:function(currentScrollY){var scrollingDown=currentScrollY>this.lastKnownScrollY,pastOffset=currentScrollY>=this.offset;return scrollingDown&&pastOffset},shouldPin:function(currentScrollY){var scrollingUp=currentScrollY<this.lastKnownScrollY,pastOffset=currentScrollY<=this.offset;return scrollingUp||pastOffset},update:function(){if(!this.paused){var currentScrollY=this.getScrollY(),lastKnownScrollY=this.lastKnownScrollY,isTv=layoutManager.tv;if(currentScrollY<=(isTv?120:10))this.clear();else if(this.shouldUnpin(currentScrollY))this.unpin();else if(this.shouldPin(currentScrollY)){var toleranceExceeded=Math.abs(currentScrollY-lastKnownScrollY)>=14;currentScrollY&&isTv?this.unpin():toleranceExceeded&&this.clear()}this.lastKnownScrollY=currentScrollY}}},Headroom.options={offset:0,scroller:window,initialClass:"headroom",unPinnedClass:"headroom--unpinned",pinnedClass:"headroom--pinned"},Headroom});
|
||||
define(["dom", "layoutManager", "browser", "css!./headroom"], function(dom, layoutManager, browser) {
|
||||
"use strict";
|
||||
|
||||
function Debouncer(callback) {
|
||||
this.callback = callback, this.ticking = !1
|
||||
}
|
||||
|
||||
function onHeadroomClearedExternally() {
|
||||
this.state = null
|
||||
}
|
||||
|
||||
function Headroom(elems, options) {
|
||||
options = Object.assign(Headroom.options, options || {}), this.lastKnownScrollY = 0, this.elems = elems, this.scroller = options.scroller, this.debouncer = onScroll.bind(this), this.offset = options.offset, this.initialised = !1, this.initialClass = options.initialClass, this.unPinnedClass = options.unPinnedClass, this.pinnedClass = options.pinnedClass, this.state = "clear"
|
||||
}
|
||||
|
||||
function onScroll() {
|
||||
this.paused || requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this)))
|
||||
}
|
||||
var requestAnimationFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;
|
||||
return Debouncer.prototype = {
|
||||
constructor: Debouncer,
|
||||
update: function() {
|
||||
this.callback && this.callback(), this.ticking = !1
|
||||
},
|
||||
handleEvent: function() {
|
||||
this.ticking || (requestAnimationFrame(this.rafCallback || (this.rafCallback = this.update.bind(this))), this.ticking = !0)
|
||||
}
|
||||
}, Headroom.prototype = {
|
||||
constructor: Headroom,
|
||||
init: function() {
|
||||
if (browser.supportsCssAnimation()) {
|
||||
for (var i = 0, length = this.elems.length; i < length; i++) this.elems[i].classList.add(this.initialClass), this.elems[i].addEventListener("clearheadroom", onHeadroomClearedExternally.bind(this));
|
||||
this.attachEvent()
|
||||
}
|
||||
return this
|
||||
},
|
||||
add: function(elem) {
|
||||
browser.supportsCssAnimation() && (elem.classList.add(this.initialClass), elem.addEventListener("clearheadroom", onHeadroomClearedExternally.bind(this)), this.elems.push(elem))
|
||||
},
|
||||
remove: function(elem) {
|
||||
elem.classList.remove(this.unPinnedClass), elem.classList.remove(this.initialClass), elem.classList.remove(this.pinnedClass);
|
||||
var i = this.elems.indexOf(elem); - 1 !== i && this.elems.splice(i, 1)
|
||||
},
|
||||
pause: function() {
|
||||
this.paused = !0
|
||||
},
|
||||
resume: function() {
|
||||
this.paused = !1
|
||||
},
|
||||
destroy: function() {
|
||||
this.initialised = !1;
|
||||
for (var i = 0, length = this.elems.length; i < length; i++) {
|
||||
var classList = this.elems[i].classList;
|
||||
classList.remove(this.unPinnedClass), classList.remove(this.initialClass), classList.remove(this.pinnedClass)
|
||||
}
|
||||
var scrollEventName = this.scroller.getScrollEventName ? this.scroller.getScrollEventName() : "scroll";
|
||||
dom.removeEventListener(this.scroller, scrollEventName, this.debouncer, {
|
||||
capture: !1,
|
||||
passive: !0
|
||||
})
|
||||
},
|
||||
attachEvent: function() {
|
||||
if (!this.initialised) {
|
||||
this.lastKnownScrollY = this.getScrollY(), this.initialised = !0;
|
||||
var scrollEventName = this.scroller.getScrollEventName ? this.scroller.getScrollEventName() : "scroll";
|
||||
dom.addEventListener(this.scroller, scrollEventName, this.debouncer, {
|
||||
capture: !1,
|
||||
passive: !0
|
||||
}), this.update()
|
||||
}
|
||||
},
|
||||
clear: function() {
|
||||
if ("clear" !== this.state) {
|
||||
this.state = "clear";
|
||||
for (var unpinnedClass = this.unPinnedClass, i = (this.pinnedClass, 0), length = this.elems.length; i < length; i++) {
|
||||
this.elems[i].classList.remove(unpinnedClass)
|
||||
}
|
||||
}
|
||||
},
|
||||
pin: function() {
|
||||
if ("pin" !== this.state) {
|
||||
this.state = "pin";
|
||||
for (var unpinnedClass = this.unPinnedClass, pinnedClass = this.pinnedClass, i = 0, length = this.elems.length; i < length; i++) {
|
||||
var classList = this.elems[i].classList;
|
||||
classList.remove(unpinnedClass), classList.add(pinnedClass)
|
||||
}
|
||||
}
|
||||
},
|
||||
unpin: function() {
|
||||
if ("unpin" !== this.state) {
|
||||
this.state = "unpin";
|
||||
for (var unpinnedClass = this.unPinnedClass, i = (this.pinnedClass, 0), length = this.elems.length; i < length; i++) {
|
||||
this.elems[i].classList.add(unpinnedClass)
|
||||
}
|
||||
}
|
||||
},
|
||||
getScrollY: function() {
|
||||
var scroller = this.scroller;
|
||||
if (scroller.getScrollPosition) return scroller.getScrollPosition();
|
||||
var pageYOffset = scroller.pageYOffset;
|
||||
if (void 0 !== pageYOffset) return pageYOffset;
|
||||
var scrollTop = scroller.scrollTop;
|
||||
return void 0 !== scrollTop ? scrollTop : (document.documentElement || document.body).scrollTop
|
||||
},
|
||||
shouldUnpin: function(currentScrollY) {
|
||||
var scrollingDown = currentScrollY > this.lastKnownScrollY,
|
||||
pastOffset = currentScrollY >= this.offset;
|
||||
return scrollingDown && pastOffset
|
||||
},
|
||||
shouldPin: function(currentScrollY) {
|
||||
var scrollingUp = currentScrollY < this.lastKnownScrollY,
|
||||
pastOffset = currentScrollY <= this.offset;
|
||||
return scrollingUp || pastOffset
|
||||
},
|
||||
update: function() {
|
||||
if (!this.paused) {
|
||||
var currentScrollY = this.getScrollY(),
|
||||
lastKnownScrollY = this.lastKnownScrollY,
|
||||
isTv = layoutManager.tv;
|
||||
if (currentScrollY <= (isTv ? 120 : 10)) this.clear();
|
||||
else if (this.shouldUnpin(currentScrollY)) this.unpin();
|
||||
else if (this.shouldPin(currentScrollY)) {
|
||||
var toleranceExceeded = Math.abs(currentScrollY - lastKnownScrollY) >= 14;
|
||||
currentScrollY && isTv ? this.unpin() : toleranceExceeded && this.clear()
|
||||
}
|
||||
this.lastKnownScrollY = currentScrollY
|
||||
}
|
||||
}
|
||||
}, Headroom.options = {
|
||||
offset: 0,
|
||||
scroller: window,
|
||||
initialClass: "headroom",
|
||||
unPinnedClass: "headroom--unpinned",
|
||||
pinnedClass: "headroom--pinned"
|
||||
}, Headroom
|
||||
});
|
||||
+233
-1
File diff suppressed because one or more lines are too long
Vendored
+47
-1
@@ -1 +1,47 @@
|
||||
define(["dialogHelper","layoutManager","globalize","require","events","homescreenSettings","paper-icon-button-light","css!./../formdialog"],function(dialogHelper,layoutManager,globalize,require,events,HomescreenSettings){"use strict";function centerFocus(elem,horiz,on){require(["scrollHelper"],function(scrollHelper){var fn=on?"on":"off";scrollHelper.centerFocus[fn](elem,horiz)})}function show(options){return new Promise(function(resolve,reject){require(["text!./homescreensettingsdialog.template.html"],function(template){var dialogOptions={removeOnClose:!0,scrollY:!1};layoutManager.tv?dialogOptions.size="fullscreen":dialogOptions.size="medium-tall";var dlg=dialogHelper.createDialog(dialogOptions);dlg.classList.add("formDialog");var html="",submitted=!1;html+=globalize.translateDocument(template,"sharedcomponents"),dlg.innerHTML=html,layoutManager.tv&¢erFocus(dlg.querySelector(".formDialogContent"),!1,!0);var homescreenSettingsInstance=new HomescreenSettings({serverId:options.serverId,userId:options.userId,element:dlg.querySelector(".settingsContent"),userSettings:options.userSettings,enableSaveButton:!1,enableSaveConfirmation:!1});dialogHelper.open(dlg),dlg.addEventListener("close",function(){layoutManager.tv&¢erFocus(dlg.querySelector(".formDialogContent"),!1,!1),submitted?resolve():reject()}),dlg.querySelector(".btnCancel").addEventListener("click",function(e){dialogHelper.close(dlg)}),dlg.querySelector(".btnSave").addEventListener("click",function(e){submitted=!0,homescreenSettingsInstance.submit()}),events.on(homescreenSettingsInstance,"saved",function(){submitted=!0,dialogHelper.close(dlg)})})})}return{show:show}});
|
||||
define(["dialogHelper", "layoutManager", "globalize", "require", "events", "homescreenSettings", "paper-icon-button-light", "css!./../formdialog"], function(dialogHelper, layoutManager, globalize, require, events, HomescreenSettings) {
|
||||
"use strict";
|
||||
|
||||
function centerFocus(elem, horiz, on) {
|
||||
require(["scrollHelper"], function(scrollHelper) {
|
||||
var fn = on ? "on" : "off";
|
||||
scrollHelper.centerFocus[fn](elem, horiz)
|
||||
})
|
||||
}
|
||||
|
||||
function show(options) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
require(["text!./homescreensettingsdialog.template.html"], function(template) {
|
||||
var dialogOptions = {
|
||||
removeOnClose: !0,
|
||||
scrollY: !1
|
||||
};
|
||||
layoutManager.tv ? dialogOptions.size = "fullscreen" : dialogOptions.size = "medium-tall";
|
||||
var dlg = dialogHelper.createDialog(dialogOptions);
|
||||
dlg.classList.add("formDialog");
|
||||
var html = "",
|
||||
submitted = !1;
|
||||
html += globalize.translateDocument(template, "sharedcomponents"), dlg.innerHTML = html, layoutManager.tv && centerFocus(dlg.querySelector(".formDialogContent"), !1, !0);
|
||||
var homescreenSettingsInstance = new HomescreenSettings({
|
||||
serverId: options.serverId,
|
||||
userId: options.userId,
|
||||
element: dlg.querySelector(".settingsContent"),
|
||||
userSettings: options.userSettings,
|
||||
enableSaveButton: !1,
|
||||
enableSaveConfirmation: !1
|
||||
});
|
||||
dialogHelper.open(dlg), dlg.addEventListener("close", function() {
|
||||
layoutManager.tv && centerFocus(dlg.querySelector(".formDialogContent"), !1, !1), submitted ? resolve() : reject()
|
||||
}), dlg.querySelector(".btnCancel").addEventListener("click", function(e) {
|
||||
dialogHelper.close(dlg)
|
||||
}), dlg.querySelector(".btnSave").addEventListener("click", function(e) {
|
||||
submitted = !0, homescreenSettingsInstance.submit()
|
||||
}), events.on(homescreenSettingsInstance, "saved", function() {
|
||||
submitted = !0, dialogHelper.close(dlg)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
return {
|
||||
show: show
|
||||
}
|
||||
});
|
||||
+618
-1
File diff suppressed because one or more lines are too long
+218
-1
File diff suppressed because one or more lines are too long
+218
-1
File diff suppressed because one or more lines are too long
+699
-1
File diff suppressed because one or more lines are too long
+126
-1
File diff suppressed because one or more lines are too long
+220
-1
File diff suppressed because one or more lines are too long
+18
-1
@@ -1 +1,18 @@
|
||||
define(["dom"],function(dom){"use strict";function loadImage(elem,url){return elem?"IMG"!==elem.tagName?(elem.style.backgroundImage="url('"+url+"')",Promise.resolve()):loadImageIntoImg(elem,url):Promise.reject("elem cannot be null")}function loadImageIntoImg(elem,url){return new Promise(function(resolve,reject){dom.addEventListener(elem,"load",resolve,{once:!0}),elem.setAttribute("src",url)})}return{loadImage:loadImage}});
|
||||
define(["dom"], function(dom) {
|
||||
"use strict";
|
||||
|
||||
function loadImage(elem, url) {
|
||||
return elem ? "IMG" !== elem.tagName ? (elem.style.backgroundImage = "url('" + url + "')", Promise.resolve()) : loadImageIntoImg(elem, url) : Promise.reject("elem cannot be null")
|
||||
}
|
||||
|
||||
function loadImageIntoImg(elem, url) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
dom.addEventListener(elem, "load", resolve, {
|
||||
once: !0
|
||||
}), elem.setAttribute("src", url)
|
||||
})
|
||||
}
|
||||
return {
|
||||
loadImage: loadImage
|
||||
}
|
||||
});
|
||||
@@ -1 +1,82 @@
|
||||
define(["lazyLoader","imageFetcher","layoutManager","browser","appSettings","require","css!./style"],function(lazyLoader,imageFetcher,layoutManager,browser,appSettings,require){"use strict";function fillImage(elem,source,enableEffects){if(!elem)throw new Error("elem cannot be null");source||(source=elem.getAttribute("data-src")),source&&fillImageElement(elem,source,enableEffects)}function fillImageElement(elem,source,enableEffects){imageFetcher.loadImage(elem,source).then(function(){enableFade&&!1!==enableEffects&&fadeIn(elem),elem.removeAttribute("data-src")})}function getVibrantInfoFromElement(elem,url){return new Promise(function(resolve,reject){require(["vibrant"],function(){if("IMG"===elem.tagName)return void resolve(getVibrantInfo(elem,url));var img=new Image;img.onload=function(){resolve(getVibrantInfo(img,url))},img.src=url})})}function getSettingsKey(url){var parts=url.split("://");url=parts[parts.length-1],url=url.substring(url.indexOf("/")+1),url=url.split("?")[0];return"vibrant31"+url}function getCachedVibrantInfo(url){return appSettings.get(getSettingsKey(url))}function getVibrantInfo(img,url){var value=getCachedVibrantInfo(url);if(value)return value;var vibrant=new Vibrant(img),swatches=vibrant.swatches();return value="",value+=getSwatchString(swatches.DarkVibrant),appSettings.set(getSettingsKey(url),value),value}function getSwatchString(swatch){return swatch?swatch.getHex()+"|"+swatch.getBodyTextColor()+"|"+swatch.getTitleTextColor():"||"}function fadeIn(elem){elem.classList.add("lazy-image-fadein")}function lazyChildren(elem){lazyLoader.lazyChildren(elem,fillImage)}function getPrimaryImageAspectRatio(items){for(var values=[],i=0,length=items.length;i<length;i++){var ratio=items[i].PrimaryImageAspectRatio||0;ratio&&(values[values.length]=ratio)}if(!values.length)return null;values.sort(function(a,b){return a-b});var result,half=Math.floor(values.length/2);result=values.length%2?values[half]:(values[half-1]+values[half])/2;if(Math.abs(2/3-result)<=.15)return 2/3;if(Math.abs(16/9-result)<=.2)return 16/9;if(Math.abs(1-result)<=.15)return 1;return Math.abs(4/3-result)<=.15?4/3:result}function fillImages(elems){for(var i=0,length=elems.length;i<length;i++){fillImage(elems[0])}}var self=(window.requestIdleCallback,{}),enableFade=!1;return self.fillImages=fillImages,self.lazyImage=fillImage,self.lazyChildren=lazyChildren,self.getPrimaryImageAspectRatio=getPrimaryImageAspectRatio,self.getCachedVibrantInfo=getCachedVibrantInfo,self.getVibrantInfoFromElement=getVibrantInfoFromElement,self});
|
||||
define(["lazyLoader", "imageFetcher", "layoutManager", "browser", "appSettings", "require", "css!./style"], function(lazyLoader, imageFetcher, layoutManager, browser, appSettings, require) {
|
||||
"use strict";
|
||||
|
||||
function fillImage(elem, source, enableEffects) {
|
||||
if (!elem) throw new Error("elem cannot be null");
|
||||
source || (source = elem.getAttribute("data-src")), source && fillImageElement(elem, source, enableEffects)
|
||||
}
|
||||
|
||||
function fillImageElement(elem, source, enableEffects) {
|
||||
imageFetcher.loadImage(elem, source).then(function() {
|
||||
enableFade && !1 !== enableEffects && fadeIn(elem), elem.removeAttribute("data-src")
|
||||
})
|
||||
}
|
||||
|
||||
function getVibrantInfoFromElement(elem, url) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
require(["vibrant"], function() {
|
||||
if ("IMG" === elem.tagName) return void resolve(getVibrantInfo(elem, url));
|
||||
var img = new Image;
|
||||
img.onload = function() {
|
||||
resolve(getVibrantInfo(img, url))
|
||||
}, img.src = url
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function getSettingsKey(url) {
|
||||
var parts = url.split("://");
|
||||
url = parts[parts.length - 1], url = url.substring(url.indexOf("/") + 1), url = url.split("?")[0];
|
||||
return "vibrant31" + url
|
||||
}
|
||||
|
||||
function getCachedVibrantInfo(url) {
|
||||
return appSettings.get(getSettingsKey(url))
|
||||
}
|
||||
|
||||
function getVibrantInfo(img, url) {
|
||||
var value = getCachedVibrantInfo(url);
|
||||
if (value) return value;
|
||||
var vibrant = new Vibrant(img),
|
||||
swatches = vibrant.swatches();
|
||||
return value = "", value += getSwatchString(swatches.DarkVibrant), appSettings.set(getSettingsKey(url), value), value
|
||||
}
|
||||
|
||||
function getSwatchString(swatch) {
|
||||
return swatch ? swatch.getHex() + "|" + swatch.getBodyTextColor() + "|" + swatch.getTitleTextColor() : "||"
|
||||
}
|
||||
|
||||
function fadeIn(elem) {
|
||||
elem.classList.add("lazy-image-fadein")
|
||||
}
|
||||
|
||||
function lazyChildren(elem) {
|
||||
lazyLoader.lazyChildren(elem, fillImage)
|
||||
}
|
||||
|
||||
function getPrimaryImageAspectRatio(items) {
|
||||
for (var values = [], i = 0, length = items.length; i < length; i++) {
|
||||
var ratio = items[i].PrimaryImageAspectRatio || 0;
|
||||
ratio && (values[values.length] = ratio)
|
||||
}
|
||||
if (!values.length) return null;
|
||||
values.sort(function(a, b) {
|
||||
return a - b
|
||||
});
|
||||
var result, half = Math.floor(values.length / 2);
|
||||
result = values.length % 2 ? values[half] : (values[half - 1] + values[half]) / 2;
|
||||
if (Math.abs(2 / 3 - result) <= .15) return 2 / 3;
|
||||
if (Math.abs(16 / 9 - result) <= .2) return 16 / 9;
|
||||
if (Math.abs(1 - result) <= .15) return 1;
|
||||
return Math.abs(4 / 3 - result) <= .15 ? 4 / 3 : result
|
||||
}
|
||||
|
||||
function fillImages(elems) {
|
||||
for (var i = 0, length = elems.length; i < length; i++) {
|
||||
fillImage(elems[0])
|
||||
}
|
||||
}
|
||||
var self = (window.requestIdleCallback, {}),
|
||||
enableFade = !1;
|
||||
return self.fillImages = fillImages, self.lazyImage = fillImage, self.lazyChildren = lazyChildren, self.getPrimaryImageAspectRatio = getPrimaryImageAspectRatio, self.getCachedVibrantInfo = getCachedVibrantInfo, self.getVibrantInfoFromElement = getVibrantInfoFromElement, self
|
||||
});
|
||||
+80
-1
@@ -1 +1,80 @@
|
||||
define(["dialogHelper","connectionManager","dom","loading","scrollHelper","layoutManager","globalize","require","emby-button","emby-select","formDialogStyle","css!./style"],function(dialogHelper,connectionManager,dom,loading,scrollHelper,layoutManager,globalize,require){"use strict";function onFileReaderError(evt){switch(loading.hide(),evt.target.error.code){case evt.target.error.NOT_FOUND_ERR:require(["toast"],function(toast){toast(globalize.translate("sharedcomponents#MessageFileReadError"))});break;case evt.target.error.ABORT_ERR:break;default:require(["toast"],function(toast){toast(globalize.translate("sharedcomponents#MessageFileReadError"))})}}function setFiles(page,files){var file=files[0];if(!file||!file.type.match("image.*"))return page.querySelector("#imageOutput").innerHTML="",page.querySelector("#fldUpload").classList.add("hide"),void(currentFile=null);currentFile=file;var reader=new FileReader;reader.onerror=onFileReaderError,reader.onloadstart=function(){page.querySelector("#fldUpload").classList.add("hide")},reader.onabort=function(){loading.hide(),console.log("File read cancelled")},reader.onload=function(theFile){return function(e){var html=['<img style="max-width:100%;max-height:100%;" src="',e.target.result,'" title="',escape(theFile.name),'"/>'].join("");page.querySelector("#imageOutput").innerHTML=html,page.querySelector("#fldUpload").classList.remove("hide")}}(file),reader.readAsDataURL(file)}function onSubmit(e){var file=currentFile;if(!file)return!1;if("image/png"!==file.type&&"image/jpeg"!==file.type&&"image/jpeg"!==file.type)return!1;loading.show();var dlg=dom.parentWithClass(this,"dialog"),imageType=dlg.querySelector("#selectImageType").value;return connectionManager.getApiClient(currentServerId).uploadItemImage(currentItemId,imageType,file).then(function(){dlg.querySelector("#uploadImage").value="",loading.hide(),hasChanges=!0,dialogHelper.close(dlg)}),e.preventDefault(),!1}function initEditor(page){page.querySelector("form").addEventListener("submit",onSubmit),page.querySelector("#uploadImage").addEventListener("change",function(){setFiles(page,this.files)}),page.querySelector(".btnBrowse").addEventListener("click",function(){page.querySelector("#uploadImage").click()})}function showEditor(options,resolve,reject){options=options||{},require(["text!./imageuploader.template.html"],function(template){currentItemId=options.itemId,currentServerId=options.serverId;var dialogOptions={removeOnClose:!0};layoutManager.tv?dialogOptions.size="fullscreen":dialogOptions.size="fullscreen-border";var dlg=dialogHelper.createDialog(dialogOptions);dlg.classList.add("formDialog"),dlg.innerHTML=globalize.translateDocument(template,"sharedcomponents"),layoutManager.tv&&scrollHelper.centerFocus.on(dlg,!1),dlg.addEventListener("close",function(){layoutManager.tv&&scrollHelper.centerFocus.off(dlg,!1),loading.hide(),resolve(hasChanges)}),dialogHelper.open(dlg),initEditor(dlg),dlg.querySelector("#selectImageType").value=options.imageType||"Primary",dlg.querySelector(".btnCancel").addEventListener("click",function(){dialogHelper.close(dlg)})})}var currentItemId,currentServerId,currentFile,hasChanges=!1;return{show:function(options){return new Promise(function(resolve,reject){hasChanges=!1,showEditor(options,resolve,reject)})}}});
|
||||
define(["dialogHelper", "connectionManager", "dom", "loading", "scrollHelper", "layoutManager", "globalize", "require", "emby-button", "emby-select", "formDialogStyle", "css!./style"], function(dialogHelper, connectionManager, dom, loading, scrollHelper, layoutManager, globalize, require) {
|
||||
"use strict";
|
||||
|
||||
function onFileReaderError(evt) {
|
||||
switch (loading.hide(), evt.target.error.code) {
|
||||
case evt.target.error.NOT_FOUND_ERR:
|
||||
require(["toast"], function(toast) {
|
||||
toast(globalize.translate("sharedcomponents#MessageFileReadError"))
|
||||
});
|
||||
break;
|
||||
case evt.target.error.ABORT_ERR:
|
||||
break;
|
||||
default:
|
||||
require(["toast"], function(toast) {
|
||||
toast(globalize.translate("sharedcomponents#MessageFileReadError"))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function setFiles(page, files) {
|
||||
var file = files[0];
|
||||
if (!file || !file.type.match("image.*")) return page.querySelector("#imageOutput").innerHTML = "", page.querySelector("#fldUpload").classList.add("hide"), void(currentFile = null);
|
||||
currentFile = file;
|
||||
var reader = new FileReader;
|
||||
reader.onerror = onFileReaderError, reader.onloadstart = function() {
|
||||
page.querySelector("#fldUpload").classList.add("hide")
|
||||
}, reader.onabort = function() {
|
||||
loading.hide(), console.log("File read cancelled")
|
||||
}, reader.onload = function(theFile) {
|
||||
return function(e) {
|
||||
var html = ['<img style="max-width:100%;max-height:100%;" src="', e.target.result, '" title="', escape(theFile.name), '"/>'].join("");
|
||||
page.querySelector("#imageOutput").innerHTML = html, page.querySelector("#fldUpload").classList.remove("hide")
|
||||
}
|
||||
}(file), reader.readAsDataURL(file)
|
||||
}
|
||||
|
||||
function onSubmit(e) {
|
||||
var file = currentFile;
|
||||
if (!file) return !1;
|
||||
if ("image/png" !== file.type && "image/jpeg" !== file.type && "image/jpeg" !== file.type) return !1;
|
||||
loading.show();
|
||||
var dlg = dom.parentWithClass(this, "dialog"),
|
||||
imageType = dlg.querySelector("#selectImageType").value;
|
||||
return connectionManager.getApiClient(currentServerId).uploadItemImage(currentItemId, imageType, file).then(function() {
|
||||
dlg.querySelector("#uploadImage").value = "", loading.hide(), hasChanges = !0, dialogHelper.close(dlg)
|
||||
}), e.preventDefault(), !1
|
||||
}
|
||||
|
||||
function initEditor(page) {
|
||||
page.querySelector("form").addEventListener("submit", onSubmit), page.querySelector("#uploadImage").addEventListener("change", function() {
|
||||
setFiles(page, this.files)
|
||||
}), page.querySelector(".btnBrowse").addEventListener("click", function() {
|
||||
page.querySelector("#uploadImage").click()
|
||||
})
|
||||
}
|
||||
|
||||
function showEditor(options, resolve, reject) {
|
||||
options = options || {}, require(["text!./imageuploader.template.html"], function(template) {
|
||||
currentItemId = options.itemId, currentServerId = options.serverId;
|
||||
var dialogOptions = {
|
||||
removeOnClose: !0
|
||||
};
|
||||
layoutManager.tv ? dialogOptions.size = "fullscreen" : dialogOptions.size = "fullscreen-border";
|
||||
var dlg = dialogHelper.createDialog(dialogOptions);
|
||||
dlg.classList.add("formDialog"), dlg.innerHTML = globalize.translateDocument(template, "sharedcomponents"), layoutManager.tv && scrollHelper.centerFocus.on(dlg, !1), dlg.addEventListener("close", function() {
|
||||
layoutManager.tv && scrollHelper.centerFocus.off(dlg, !1), loading.hide(), resolve(hasChanges)
|
||||
}), dialogHelper.open(dlg), initEditor(dlg), dlg.querySelector("#selectImageType").value = options.imageType || "Primary", dlg.querySelector(".btnCancel").addEventListener("click", function() {
|
||||
dialogHelper.close(dlg)
|
||||
})
|
||||
})
|
||||
}
|
||||
var currentItemId, currentServerId, currentFile, hasChanges = !1;
|
||||
return {
|
||||
show: function(options) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
hasChanges = !1, showEditor(options, resolve, reject)
|
||||
})
|
||||
}
|
||||
}
|
||||
});
|
||||
+120
-1
File diff suppressed because one or more lines are too long
+145
-1
@@ -1 +1,145 @@
|
||||
define(["connectionManager","playbackManager","events","inputManager","focusManager","appRouter"],function(connectionManager,playbackManager,events,inputManager,focusManager,appRouter){"use strict";function notifyApp(){inputManager.notify()}function displayMessage(cmd){var args=cmd.Arguments;args.TimeoutMs?require(["toast"],function(toast){toast({title:args.Header,text:args.Text})}):require(["alert"],function(alert){alert({title:args.Header,text:args.Text})})}function displayContent(cmd,apiClient){playbackManager.isPlayingLocally(["Video","Book","Game"])||appRouter.showItem(cmd.Arguments.ItemId,apiClient.serverId())}function playTrailers(apiClient,itemId){apiClient.getItem(apiClient.getCurrentUserId(),itemId).then(function(item){playbackManager.playTrailers(item)})}function processGeneralCommand(cmd,apiClient){switch(cmd.Name){case"Select":return void inputManager.trigger("select");case"Back":return void inputManager.trigger("back");case"MoveUp":return void inputManager.trigger("up");case"MoveDown":return void inputManager.trigger("down");case"MoveLeft":return void inputManager.trigger("left");case"MoveRight":return void inputManager.trigger("right");case"PageUp":return void inputManager.trigger("pageup");case"PageDown":return void inputManager.trigger("pagedown");case"PlayTrailers":playTrailers(apiClient,cmd.Arguments.ItemId);break;case"SetRepeatMode":playbackManager.setRepeatMode(cmd.Arguments.RepeatMode);break;case"VolumeUp":return void inputManager.trigger("volumeup");case"VolumeDown":return void inputManager.trigger("volumedown");case"ChannelUp":return void inputManager.trigger("channelup");case"ChannelDown":return void inputManager.trigger("channeldown");case"Mute":return void inputManager.trigger("mute");case"Unmute":return void inputManager.trigger("unmute");case"ToggleMute":return void inputManager.trigger("togglemute");case"SetVolume":notifyApp(),playbackManager.setVolume(cmd.Arguments.Volume);break;case"SetAudioStreamIndex":notifyApp(),playbackManager.setAudioStreamIndex(parseInt(cmd.Arguments.Index));break;case"SetSubtitleStreamIndex":notifyApp(),playbackManager.setSubtitleStreamIndex(parseInt(cmd.Arguments.Index));break;case"ToggleFullscreen":return void inputManager.trigger("togglefullscreen");case"GoHome":return void inputManager.trigger("home");case"GoToSettings":return void inputManager.trigger("settings");case"DisplayContent":displayContent(cmd,apiClient);break;case"GoToSearch":return void inputManager.trigger("search");case"DisplayMessage":displayMessage(cmd);break;case"ToggleOsd":case"ToggleContextMenu":case"TakeScreenShot":case"SendKey":break;case"SendString":focusManager.sendText(cmd.Arguments.String);break;default:console.log("processGeneralCommand does not recognize: "+cmd.Name)}notifyApp()}function onMessageReceived(e,msg){var apiClient=this;if("Play"===msg.MessageType){notifyApp();var serverId=apiClient.serverInfo().Id;"PlayNext"===msg.Data.PlayCommand?playbackManager.queueNext({ids:msg.Data.ItemIds,serverId:serverId}):"PlayLast"===msg.Data.PlayCommand?playbackManager.queue({ids:msg.Data.ItemIds,serverId:serverId}):playbackManager.play({ids:msg.Data.ItemIds,startPositionTicks:msg.Data.StartPositionTicks,mediaSourceId:msg.Data.MediaSourceId,audioStreamIndex:msg.Data.AudioStreamIndex,subtitleStreamIndex:msg.Data.SubtitleStreamIndex,startIndex:msg.Data.StartIndex,serverId:serverId})}else if("Playstate"===msg.MessageType)"Stop"===msg.Data.Command?inputManager.trigger("stop"):"Pause"===msg.Data.Command?inputManager.trigger("pause"):"Unpause"===msg.Data.Command?inputManager.trigger("play"):"PlayPause"===msg.Data.Command?inputManager.trigger("playpause"):"Seek"===msg.Data.Command?playbackManager.seek(msg.Data.SeekPositionTicks):"NextTrack"===msg.Data.Command?inputManager.trigger("next"):"PreviousTrack"===msg.Data.Command?inputManager.trigger("previous"):notifyApp();else if("GeneralCommand"===msg.MessageType){var cmd=msg.Data;processGeneralCommand(cmd,apiClient)}else if("UserDataChanged"===msg.MessageType){if(msg.Data.UserId===apiClient.getCurrentUserId())for(var i=0,length=msg.Data.UserDataList.length;i<length;i++)events.trigger(serverNotifications,"UserDataChanged",[apiClient,msg.Data.UserDataList[i]])}else events.trigger(serverNotifications,msg.MessageType,[apiClient,msg.Data])}function bindEvents(apiClient){events.off(apiClient,"message",onMessageReceived),events.on(apiClient,"message",onMessageReceived)}var serverNotifications={};return connectionManager.getApiClients().forEach(bindEvents),events.on(connectionManager,"apiclientcreated",function(e,newApiClient){bindEvents(newApiClient)}),serverNotifications});
|
||||
define(["connectionManager", "playbackManager", "events", "inputManager", "focusManager", "appRouter"], function(connectionManager, playbackManager, events, inputManager, focusManager, appRouter) {
|
||||
"use strict";
|
||||
|
||||
function notifyApp() {
|
||||
inputManager.notify()
|
||||
}
|
||||
|
||||
function displayMessage(cmd) {
|
||||
var args = cmd.Arguments;
|
||||
args.TimeoutMs ? require(["toast"], function(toast) {
|
||||
toast({
|
||||
title: args.Header,
|
||||
text: args.Text
|
||||
})
|
||||
}) : require(["alert"], function(alert) {
|
||||
alert({
|
||||
title: args.Header,
|
||||
text: args.Text
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
function displayContent(cmd, apiClient) {
|
||||
playbackManager.isPlayingLocally(["Video", "Book", "Game"]) || appRouter.showItem(cmd.Arguments.ItemId, apiClient.serverId())
|
||||
}
|
||||
|
||||
function playTrailers(apiClient, itemId) {
|
||||
apiClient.getItem(apiClient.getCurrentUserId(), itemId).then(function(item) {
|
||||
playbackManager.playTrailers(item)
|
||||
})
|
||||
}
|
||||
|
||||
function processGeneralCommand(cmd, apiClient) {
|
||||
switch (cmd.Name) {
|
||||
case "Select":
|
||||
return void inputManager.trigger("select");
|
||||
case "Back":
|
||||
return void inputManager.trigger("back");
|
||||
case "MoveUp":
|
||||
return void inputManager.trigger("up");
|
||||
case "MoveDown":
|
||||
return void inputManager.trigger("down");
|
||||
case "MoveLeft":
|
||||
return void inputManager.trigger("left");
|
||||
case "MoveRight":
|
||||
return void inputManager.trigger("right");
|
||||
case "PageUp":
|
||||
return void inputManager.trigger("pageup");
|
||||
case "PageDown":
|
||||
return void inputManager.trigger("pagedown");
|
||||
case "PlayTrailers":
|
||||
playTrailers(apiClient, cmd.Arguments.ItemId);
|
||||
break;
|
||||
case "SetRepeatMode":
|
||||
playbackManager.setRepeatMode(cmd.Arguments.RepeatMode);
|
||||
break;
|
||||
case "VolumeUp":
|
||||
return void inputManager.trigger("volumeup");
|
||||
case "VolumeDown":
|
||||
return void inputManager.trigger("volumedown");
|
||||
case "ChannelUp":
|
||||
return void inputManager.trigger("channelup");
|
||||
case "ChannelDown":
|
||||
return void inputManager.trigger("channeldown");
|
||||
case "Mute":
|
||||
return void inputManager.trigger("mute");
|
||||
case "Unmute":
|
||||
return void inputManager.trigger("unmute");
|
||||
case "ToggleMute":
|
||||
return void inputManager.trigger("togglemute");
|
||||
case "SetVolume":
|
||||
notifyApp(), playbackManager.setVolume(cmd.Arguments.Volume);
|
||||
break;
|
||||
case "SetAudioStreamIndex":
|
||||
notifyApp(), playbackManager.setAudioStreamIndex(parseInt(cmd.Arguments.Index));
|
||||
break;
|
||||
case "SetSubtitleStreamIndex":
|
||||
notifyApp(), playbackManager.setSubtitleStreamIndex(parseInt(cmd.Arguments.Index));
|
||||
break;
|
||||
case "ToggleFullscreen":
|
||||
return void inputManager.trigger("togglefullscreen");
|
||||
case "GoHome":
|
||||
return void inputManager.trigger("home");
|
||||
case "GoToSettings":
|
||||
return void inputManager.trigger("settings");
|
||||
case "DisplayContent":
|
||||
displayContent(cmd, apiClient);
|
||||
break;
|
||||
case "GoToSearch":
|
||||
return void inputManager.trigger("search");
|
||||
case "DisplayMessage":
|
||||
displayMessage(cmd);
|
||||
break;
|
||||
case "ToggleOsd":
|
||||
case "ToggleContextMenu":
|
||||
case "TakeScreenShot":
|
||||
case "SendKey":
|
||||
break;
|
||||
case "SendString":
|
||||
focusManager.sendText(cmd.Arguments.String);
|
||||
break;
|
||||
default:
|
||||
console.log("processGeneralCommand does not recognize: " + cmd.Name)
|
||||
}
|
||||
notifyApp()
|
||||
}
|
||||
|
||||
function onMessageReceived(e, msg) {
|
||||
var apiClient = this;
|
||||
if ("Play" === msg.MessageType) {
|
||||
notifyApp();
|
||||
var serverId = apiClient.serverInfo().Id;
|
||||
"PlayNext" === msg.Data.PlayCommand ? playbackManager.queueNext({
|
||||
ids: msg.Data.ItemIds,
|
||||
serverId: serverId
|
||||
}) : "PlayLast" === msg.Data.PlayCommand ? playbackManager.queue({
|
||||
ids: msg.Data.ItemIds,
|
||||
serverId: serverId
|
||||
}) : playbackManager.play({
|
||||
ids: msg.Data.ItemIds,
|
||||
startPositionTicks: msg.Data.StartPositionTicks,
|
||||
mediaSourceId: msg.Data.MediaSourceId,
|
||||
audioStreamIndex: msg.Data.AudioStreamIndex,
|
||||
subtitleStreamIndex: msg.Data.SubtitleStreamIndex,
|
||||
startIndex: msg.Data.StartIndex,
|
||||
serverId: serverId
|
||||
})
|
||||
} else if ("Playstate" === msg.MessageType) "Stop" === msg.Data.Command ? inputManager.trigger("stop") : "Pause" === msg.Data.Command ? inputManager.trigger("pause") : "Unpause" === msg.Data.Command ? inputManager.trigger("play") : "PlayPause" === msg.Data.Command ? inputManager.trigger("playpause") : "Seek" === msg.Data.Command ? playbackManager.seek(msg.Data.SeekPositionTicks) : "NextTrack" === msg.Data.Command ? inputManager.trigger("next") : "PreviousTrack" === msg.Data.Command ? inputManager.trigger("previous") : notifyApp();
|
||||
else if ("GeneralCommand" === msg.MessageType) {
|
||||
var cmd = msg.Data;
|
||||
processGeneralCommand(cmd, apiClient)
|
||||
} else if ("UserDataChanged" === msg.MessageType) {
|
||||
if (msg.Data.UserId === apiClient.getCurrentUserId())
|
||||
for (var i = 0, length = msg.Data.UserDataList.length; i < length; i++) events.trigger(serverNotifications, "UserDataChanged", [apiClient, msg.Data.UserDataList[i]])
|
||||
} else events.trigger(serverNotifications, msg.MessageType, [apiClient, msg.Data])
|
||||
}
|
||||
|
||||
function bindEvents(apiClient) {
|
||||
events.off(apiClient, "message", onMessageReceived), events.on(apiClient, "message", onMessageReceived)
|
||||
}
|
||||
var serverNotifications = {};
|
||||
return connectionManager.getApiClients().forEach(bindEvents), events.on(connectionManager, "apiclientcreated", function(e, newApiClient) {
|
||||
bindEvents(newApiClient)
|
||||
}), serverNotifications
|
||||
});
|
||||
File diff suppressed because one or more lines are too long
@@ -1 +1,75 @@
|
||||
define(["inputManager","focusManager","browser","layoutManager","events","dom"],function(inputmanager,focusManager,browser,layoutManager,events,dom){"use strict";function mouseIdleTime(){return(new Date).getTime()-lastMouseInputTime}function notifyApp(){inputmanager.notifyMouseMove()}function removeIdleClasses(){var classList=document.body.classList;classList.remove("mouseIdle"),classList.remove("mouseIdle-tv")}function addIdleClasses(){var classList=document.body.classList;classList.add("mouseIdle"),layoutManager.tv&&classList.add("mouseIdle-tv")}function onPointerMove(e){var eventX=e.screenX,eventY=e.screenY;if(void 0!==eventX||void 0!==eventY){var obj=lastPointerMoveData;if(!obj)return void(lastPointerMoveData={x:eventX,y:eventY});Math.abs(eventX-obj.x)<10&&Math.abs(eventY-obj.y)<10||(obj.x=eventX,obj.y=eventY,lastMouseInputTime=(new Date).getTime(),notifyApp(),isMouseIdle&&(isMouseIdle=!1,removeIdleClasses(),events.trigger(self,"mouseactive")))}}function onPointerEnter(e){if("mouse"===(e.pointerType||(layoutManager.mobile?"touch":"mouse"))&&!isMouseIdle){var parent=focusManager.focusableParent(e.target);parent&&focusManager.focus(parent)}}function enableFocusWithMouse(){return!!layoutManager.tv&&(!browser.web0s&&!!browser.tv)}function onMouseInterval(){!isMouseIdle&&mouseIdleTime()>=5e3&&(isMouseIdle=!0,addIdleClasses(),events.trigger(self,"mouseidle"))}function startMouseInterval(){mouseInterval||(mouseInterval=setInterval(onMouseInterval,5e3))}function stopMouseInterval(){var interval=mouseInterval;interval&&(clearInterval(interval),mouseInterval=null),removeIdleClasses()}function initMouse(){stopMouseInterval(),dom.removeEventListener(document,window.PointerEvent?"pointermove":"mousemove",onPointerMove,{passive:!0}),layoutManager.mobile||(startMouseInterval(),dom.addEventListener(document,window.PointerEvent?"pointermove":"mousemove",onPointerMove,{passive:!0})),dom.removeEventListener(document,window.PointerEvent?"pointerenter":"mouseenter",onPointerEnter,{capture:!0,passive:!0}),enableFocusWithMouse()&&dom.addEventListener(document,window.PointerEvent?"pointerenter":"mouseenter",onPointerEnter,{capture:!0,passive:!0})}var isMouseIdle,lastPointerMoveData,mouseInterval,self={},lastMouseInputTime=(new Date).getTime();return initMouse(),events.on(layoutManager,"modechange",initMouse),self});
|
||||
define(["inputManager", "focusManager", "browser", "layoutManager", "events", "dom"], function(inputmanager, focusManager, browser, layoutManager, events, dom) {
|
||||
"use strict";
|
||||
|
||||
function mouseIdleTime() {
|
||||
return (new Date).getTime() - lastMouseInputTime
|
||||
}
|
||||
|
||||
function notifyApp() {
|
||||
inputmanager.notifyMouseMove()
|
||||
}
|
||||
|
||||
function removeIdleClasses() {
|
||||
var classList = document.body.classList;
|
||||
classList.remove("mouseIdle"), classList.remove("mouseIdle-tv")
|
||||
}
|
||||
|
||||
function addIdleClasses() {
|
||||
var classList = document.body.classList;
|
||||
classList.add("mouseIdle"), layoutManager.tv && classList.add("mouseIdle-tv")
|
||||
}
|
||||
|
||||
function onPointerMove(e) {
|
||||
var eventX = e.screenX,
|
||||
eventY = e.screenY;
|
||||
if (void 0 !== eventX || void 0 !== eventY) {
|
||||
var obj = lastPointerMoveData;
|
||||
if (!obj) return void(lastPointerMoveData = {
|
||||
x: eventX,
|
||||
y: eventY
|
||||
});
|
||||
Math.abs(eventX - obj.x) < 10 && Math.abs(eventY - obj.y) < 10 || (obj.x = eventX, obj.y = eventY, lastMouseInputTime = (new Date).getTime(), notifyApp(), isMouseIdle && (isMouseIdle = !1, removeIdleClasses(), events.trigger(self, "mouseactive")))
|
||||
}
|
||||
}
|
||||
|
||||
function onPointerEnter(e) {
|
||||
if ("mouse" === (e.pointerType || (layoutManager.mobile ? "touch" : "mouse")) && !isMouseIdle) {
|
||||
var parent = focusManager.focusableParent(e.target);
|
||||
parent && focusManager.focus(parent)
|
||||
}
|
||||
}
|
||||
|
||||
function enableFocusWithMouse() {
|
||||
return !!layoutManager.tv && (!browser.web0s && !!browser.tv)
|
||||
}
|
||||
|
||||
function onMouseInterval() {
|
||||
!isMouseIdle && mouseIdleTime() >= 5e3 && (isMouseIdle = !0, addIdleClasses(), events.trigger(self, "mouseidle"))
|
||||
}
|
||||
|
||||
function startMouseInterval() {
|
||||
mouseInterval || (mouseInterval = setInterval(onMouseInterval, 5e3))
|
||||
}
|
||||
|
||||
function stopMouseInterval() {
|
||||
var interval = mouseInterval;
|
||||
interval && (clearInterval(interval), mouseInterval = null), removeIdleClasses()
|
||||
}
|
||||
|
||||
function initMouse() {
|
||||
stopMouseInterval(), dom.removeEventListener(document, window.PointerEvent ? "pointermove" : "mousemove", onPointerMove, {
|
||||
passive: !0
|
||||
}), layoutManager.mobile || (startMouseInterval(), dom.addEventListener(document, window.PointerEvent ? "pointermove" : "mousemove", onPointerMove, {
|
||||
passive: !0
|
||||
})), dom.removeEventListener(document, window.PointerEvent ? "pointerenter" : "mouseenter", onPointerEnter, {
|
||||
capture: !0,
|
||||
passive: !0
|
||||
}), enableFocusWithMouse() && dom.addEventListener(document, window.PointerEvent ? "pointerenter" : "mouseenter", onPointerEnter, {
|
||||
capture: !0,
|
||||
passive: !0
|
||||
})
|
||||
}
|
||||
var isMouseIdle, lastPointerMoveData, mouseInterval, self = {},
|
||||
lastMouseInputTime = (new Date).getTime();
|
||||
return initMouse(), events.on(layoutManager, "modechange", initMouse), self
|
||||
});
|
||||
@@ -1 +1,217 @@
|
||||
define(["playbackManager","focusManager","appRouter","dom"],function(playbackManager,focusManager,appRouter,dom){"use strict";function notify(){lastInputTime=(new Date).getTime(),handleCommand("unknown")}function notifyMouseMove(){lastInputTime=(new Date).getTime()}function idleTime(){return(new Date).getTime()-lastInputTime}function select(sourceElement){sourceElement.click()}function on(scope,fn){eventListenerCount++,dom.addEventListener(scope,"command",fn,{})}function off(scope,fn){eventListenerCount&&eventListenerCount--,dom.removeEventListener(scope,"command",fn,{})}function checkCommandTime(command){var last=commandTimes[command]||0,now=(new Date).getTime();return!(now-last<1e3)&&(commandTimes[command]=now,!0)}function handleCommand(name,options){lastInputTime=(new Date).getTime();var sourceElement=options?options.sourceElement:null;if(sourceElement&&(sourceElement=focusManager.focusableParent(sourceElement)),sourceElement=sourceElement||document.activeElement||window,eventListenerCount){var customEvent=new CustomEvent("command",{detail:{command:name},bubbles:!0,cancelable:!0});if(!sourceElement.dispatchEvent(customEvent))return}switch(name){case"up":focusManager.moveUp(sourceElement);break;case"down":focusManager.moveDown(sourceElement);break;case"left":focusManager.moveLeft(sourceElement);break;case"right":focusManager.moveRight(sourceElement);break;case"home":appRouter.goHome();break;case"settings":appRouter.showSettings();break;case"back":appRouter.back();break;case"forward":break;case"select":select(sourceElement);break;case"pageup":case"pagedown":case"end":break;case"menu":case"info":break;case"nextchapter":playbackManager.nextChapter();break;case"next":case"nexttrack":playbackManager.nextTrack();break;case"previous":case"previoustrack":playbackManager.previousTrack();break;case"previouschapter":playbackManager.previousChapter();break;case"guide":appRouter.showGuide();break;case"recordedtv":appRouter.showRecordedTV();break;case"record":break;case"livetv":appRouter.showLiveTV();break;case"mute":playbackManager.setMute(!0);break;case"unmute":playbackManager.setMute(!1);break;case"togglemute":playbackManager.toggleMute();break;case"channelup":playbackManager.channelUp();break;case"channeldown":playbackManager.channelDown();break;case"volumedown":playbackManager.volumeDown();break;case"volumeup":playbackManager.volumeUp();break;case"play":playbackManager.unpause();break;case"pause":playbackManager.pause();break;case"playpause":playbackManager.playPause();break;case"stop":checkCommandTime("stop")&&playbackManager.stop();break;case"changezoom":playbackManager.toggleAspectRatio();break;case"changeaudiotrack":playbackManager.changeAudioStream();break;case"changesubtitletrack":playbackManager.changeSubtitleStream();break;case"search":appRouter.showSearch();break;case"favorites":appRouter.showFavorites();break;case"fastforward":playbackManager.fastForward();break;case"rewind":playbackManager.rewind();break;case"togglefullscreen":playbackManager.toggleFullscreen();break;case"disabledisplaymirror":playbackManager.enableDisplayMirroring(!1);break;case"enabledisplaymirror":playbackManager.enableDisplayMirroring(!0);break;case"toggledisplaymirror":playbackManager.toggleDisplayMirroring();break;case"togglestats":break;case"movies":case"music":case"tv":appRouter.goHome();break;case"nowplaying":appRouter.showNowPlaying();break;case"save":case"screensaver":case"refresh":case"changebrightness":case"red":case"green":case"yellow":case"blue":case"grey":case"brown":break;case"repeatnone":playbackManager.setRepeatMode("RepeatNone");break;case"repeatall":playbackManager.setRepeatMode("RepeatAll");break;case"repeatone":playbackManager.setRepeatMode("RepeatOne")}}var lastInputTime=(new Date).getTime(),eventListenerCount=0,commandTimes={};return dom.addEventListener(document,"click",notify,{passive:!0}),{trigger:handleCommand,handle:handleCommand,notify:notify,notifyMouseMove:notifyMouseMove,idleTime:idleTime,on:on,off:off}});
|
||||
define(["playbackManager", "focusManager", "appRouter", "dom"], function(playbackManager, focusManager, appRouter, dom) {
|
||||
"use strict";
|
||||
|
||||
function notify() {
|
||||
lastInputTime = (new Date).getTime(), handleCommand("unknown")
|
||||
}
|
||||
|
||||
function notifyMouseMove() {
|
||||
lastInputTime = (new Date).getTime()
|
||||
}
|
||||
|
||||
function idleTime() {
|
||||
return (new Date).getTime() - lastInputTime
|
||||
}
|
||||
|
||||
function select(sourceElement) {
|
||||
sourceElement.click()
|
||||
}
|
||||
|
||||
function on(scope, fn) {
|
||||
eventListenerCount++, dom.addEventListener(scope, "command", fn, {})
|
||||
}
|
||||
|
||||
function off(scope, fn) {
|
||||
eventListenerCount && eventListenerCount--, dom.removeEventListener(scope, "command", fn, {})
|
||||
}
|
||||
|
||||
function checkCommandTime(command) {
|
||||
var last = commandTimes[command] || 0,
|
||||
now = (new Date).getTime();
|
||||
return !(now - last < 1e3) && (commandTimes[command] = now, !0)
|
||||
}
|
||||
|
||||
function handleCommand(name, options) {
|
||||
lastInputTime = (new Date).getTime();
|
||||
var sourceElement = options ? options.sourceElement : null;
|
||||
if (sourceElement && (sourceElement = focusManager.focusableParent(sourceElement)), sourceElement = sourceElement || document.activeElement || window, eventListenerCount) {
|
||||
var customEvent = new CustomEvent("command", {
|
||||
detail: {
|
||||
command: name
|
||||
},
|
||||
bubbles: !0,
|
||||
cancelable: !0
|
||||
});
|
||||
if (!sourceElement.dispatchEvent(customEvent)) return
|
||||
}
|
||||
switch (name) {
|
||||
case "up":
|
||||
focusManager.moveUp(sourceElement);
|
||||
break;
|
||||
case "down":
|
||||
focusManager.moveDown(sourceElement);
|
||||
break;
|
||||
case "left":
|
||||
focusManager.moveLeft(sourceElement);
|
||||
break;
|
||||
case "right":
|
||||
focusManager.moveRight(sourceElement);
|
||||
break;
|
||||
case "home":
|
||||
appRouter.goHome();
|
||||
break;
|
||||
case "settings":
|
||||
appRouter.showSettings();
|
||||
break;
|
||||
case "back":
|
||||
appRouter.back();
|
||||
break;
|
||||
case "forward":
|
||||
break;
|
||||
case "select":
|
||||
select(sourceElement);
|
||||
break;
|
||||
case "pageup":
|
||||
case "pagedown":
|
||||
case "end":
|
||||
break;
|
||||
case "menu":
|
||||
case "info":
|
||||
break;
|
||||
case "nextchapter":
|
||||
playbackManager.nextChapter();
|
||||
break;
|
||||
case "next":
|
||||
case "nexttrack":
|
||||
playbackManager.nextTrack();
|
||||
break;
|
||||
case "previous":
|
||||
case "previoustrack":
|
||||
playbackManager.previousTrack();
|
||||
break;
|
||||
case "previouschapter":
|
||||
playbackManager.previousChapter();
|
||||
break;
|
||||
case "guide":
|
||||
appRouter.showGuide();
|
||||
break;
|
||||
case "recordedtv":
|
||||
appRouter.showRecordedTV();
|
||||
break;
|
||||
case "record":
|
||||
break;
|
||||
case "livetv":
|
||||
appRouter.showLiveTV();
|
||||
break;
|
||||
case "mute":
|
||||
playbackManager.setMute(!0);
|
||||
break;
|
||||
case "unmute":
|
||||
playbackManager.setMute(!1);
|
||||
break;
|
||||
case "togglemute":
|
||||
playbackManager.toggleMute();
|
||||
break;
|
||||
case "channelup":
|
||||
playbackManager.channelUp();
|
||||
break;
|
||||
case "channeldown":
|
||||
playbackManager.channelDown();
|
||||
break;
|
||||
case "volumedown":
|
||||
playbackManager.volumeDown();
|
||||
break;
|
||||
case "volumeup":
|
||||
playbackManager.volumeUp();
|
||||
break;
|
||||
case "play":
|
||||
playbackManager.unpause();
|
||||
break;
|
||||
case "pause":
|
||||
playbackManager.pause();
|
||||
break;
|
||||
case "playpause":
|
||||
playbackManager.playPause();
|
||||
break;
|
||||
case "stop":
|
||||
checkCommandTime("stop") && playbackManager.stop();
|
||||
break;
|
||||
case "changezoom":
|
||||
playbackManager.toggleAspectRatio();
|
||||
break;
|
||||
case "changeaudiotrack":
|
||||
playbackManager.changeAudioStream();
|
||||
break;
|
||||
case "changesubtitletrack":
|
||||
playbackManager.changeSubtitleStream();
|
||||
break;
|
||||
case "search":
|
||||
appRouter.showSearch();
|
||||
break;
|
||||
case "favorites":
|
||||
appRouter.showFavorites();
|
||||
break;
|
||||
case "fastforward":
|
||||
playbackManager.fastForward();
|
||||
break;
|
||||
case "rewind":
|
||||
playbackManager.rewind();
|
||||
break;
|
||||
case "togglefullscreen":
|
||||
playbackManager.toggleFullscreen();
|
||||
break;
|
||||
case "disabledisplaymirror":
|
||||
playbackManager.enableDisplayMirroring(!1);
|
||||
break;
|
||||
case "enabledisplaymirror":
|
||||
playbackManager.enableDisplayMirroring(!0);
|
||||
break;
|
||||
case "toggledisplaymirror":
|
||||
playbackManager.toggleDisplayMirroring();
|
||||
break;
|
||||
case "togglestats":
|
||||
break;
|
||||
case "movies":
|
||||
case "music":
|
||||
case "tv":
|
||||
appRouter.goHome();
|
||||
break;
|
||||
case "nowplaying":
|
||||
appRouter.showNowPlaying();
|
||||
break;
|
||||
case "save":
|
||||
case "screensaver":
|
||||
case "refresh":
|
||||
case "changebrightness":
|
||||
case "red":
|
||||
case "green":
|
||||
case "yellow":
|
||||
case "blue":
|
||||
case "grey":
|
||||
case "brown":
|
||||
break;
|
||||
case "repeatnone":
|
||||
playbackManager.setRepeatMode("RepeatNone");
|
||||
break;
|
||||
case "repeatall":
|
||||
playbackManager.setRepeatMode("RepeatAll");
|
||||
break;
|
||||
case "repeatone":
|
||||
playbackManager.setRepeatMode("RepeatOne")
|
||||
}
|
||||
}
|
||||
var lastInputTime = (new Date).getTime(),
|
||||
eventListenerCount = 0,
|
||||
commandTimes = {};
|
||||
return dom.addEventListener(document, "click", notify, {
|
||||
passive: !0
|
||||
}), {
|
||||
trigger: handleCommand,
|
||||
handle: handleCommand,
|
||||
notify: notify,
|
||||
notifyMouseMove: notifyMouseMove,
|
||||
idleTime: idleTime,
|
||||
on: on,
|
||||
off: off
|
||||
}
|
||||
});
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user