merge from dev
This commit is contained in:
parent
1c8f02ce0f
commit
33b01d778c
911 changed files with 34157 additions and 57125 deletions
|
@ -1,24 +0,0 @@
|
|||
(function (globalScope) {
|
||||
|
||||
globalScope.HttpClient = {
|
||||
|
||||
param: function (params) {
|
||||
return jQuery.param(params);
|
||||
},
|
||||
|
||||
send: function (request) {
|
||||
|
||||
request.timeout = request.timeout || 30000;
|
||||
|
||||
try {
|
||||
return jQuery.ajax(request);
|
||||
} catch (err) {
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.reject();
|
||||
return deferred.promise();
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
})(window);
|
|
@ -1,736 +0,0 @@
|
|||
(function (name, context, definition) {
|
||||
if (typeof module != 'undefined' && module.exports) module.exports = definition()
|
||||
else if (typeof define == 'function' && define.amd) define(definition)
|
||||
else context[name] = definition()
|
||||
})('bean', this, function (name, context) {
|
||||
name = name || 'bean'
|
||||
context = context || this
|
||||
|
||||
var win = window
|
||||
, old = context[name]
|
||||
, namespaceRegex = /[^\.]*(?=\..*)\.|.*/
|
||||
, nameRegex = /\..*/
|
||||
, addEvent = 'addEventListener'
|
||||
, removeEvent = 'removeEventListener'
|
||||
, doc = document || {}
|
||||
, root = doc.documentElement || {}
|
||||
, W3C_MODEL = root[addEvent]
|
||||
, eventSupport = W3C_MODEL ? addEvent : 'attachEvent'
|
||||
, ONE = {} // singleton for quick matching making add() do one()
|
||||
|
||||
, slice = Array.prototype.slice
|
||||
, str2arr = function (s, d) { return s.split(d || ' ') }
|
||||
, isString = function (o) { return typeof o == 'string' }
|
||||
, isFunction = function (o) { return typeof o == 'function' }
|
||||
|
||||
// events that we consider to be 'native', anything not in this list will
|
||||
// be treated as a custom event
|
||||
, standardNativeEvents =
|
||||
'click dblclick mouseup mousedown contextmenu ' + // mouse buttons
|
||||
'mousewheel mousemultiwheel DOMMouseScroll ' + // mouse wheel
|
||||
'mouseover mouseout mousemove selectstart selectend ' + // mouse movement
|
||||
'keydown keypress keyup ' + // keyboard
|
||||
'orientationchange ' + // mobile
|
||||
'focus blur change reset select submit ' + // form elements
|
||||
'load unload beforeunload resize move DOMContentLoaded ' + // window
|
||||
'readystatechange message ' + // window
|
||||
'error abort scroll ' // misc
|
||||
// element.fireEvent('onXYZ'... is not forgiving if we try to fire an event
|
||||
// that doesn't actually exist, so make sure we only do these on newer browsers
|
||||
, w3cNativeEvents =
|
||||
'show ' + // mouse buttons
|
||||
'input invalid ' + // form elements
|
||||
'touchstart touchmove touchend touchcancel ' + // touch
|
||||
'gesturestart gesturechange gestureend ' + // gesture
|
||||
'textinput ' + // TextEvent
|
||||
'readystatechange pageshow pagehide popstate ' + // window
|
||||
'hashchange offline online ' + // window
|
||||
'afterprint beforeprint ' + // printing
|
||||
'dragstart dragenter dragover dragleave drag drop dragend ' + // dnd
|
||||
'loadstart progress suspend emptied stalled loadmetadata ' + // media
|
||||
'loadeddata canplay canplaythrough playing waiting seeking ' + // media
|
||||
'seeked ended durationchange timeupdate play pause ratechange ' + // media
|
||||
'volumechange cuechange ' + // media
|
||||
'checking noupdate downloading cached updateready obsolete ' // appcache
|
||||
|
||||
// convert to a hash for quick lookups
|
||||
, nativeEvents = (function (hash, events, i) {
|
||||
for (i = 0; i < events.length; i++) events[i] && (hash[events[i]] = 1)
|
||||
return hash
|
||||
}({}, str2arr(standardNativeEvents + (W3C_MODEL ? w3cNativeEvents : ''))))
|
||||
|
||||
// custom events are events that we *fake*, they are not provided natively but
|
||||
// we can use native events to generate them
|
||||
, customEvents = (function () {
|
||||
var isAncestor = 'compareDocumentPosition' in root
|
||||
? function (element, container) {
|
||||
return container.compareDocumentPosition && (container.compareDocumentPosition(element) & 16) === 16
|
||||
}
|
||||
: 'contains' in root
|
||||
? function (element, container) {
|
||||
container = container.nodeType === 9 || container === window ? root : container
|
||||
return container !== element && container.contains(element)
|
||||
}
|
||||
: function (element, container) {
|
||||
while (element = element.parentNode) if (element === container) return 1
|
||||
return 0
|
||||
}
|
||||
, check = function (event) {
|
||||
var related = event.relatedTarget
|
||||
return !related
|
||||
? related == null
|
||||
: (related !== this && related.prefix !== 'xul' && !/document/.test(this.toString())
|
||||
&& !isAncestor(related, this))
|
||||
}
|
||||
|
||||
return {
|
||||
mouseenter: { base: 'mouseover', condition: check }
|
||||
, mouseleave: { base: 'mouseout', condition: check }
|
||||
, mousewheel: { base: /Firefox/.test(navigator.userAgent) ? 'DOMMouseScroll' : 'mousewheel' }
|
||||
}
|
||||
}())
|
||||
|
||||
// we provide a consistent Event object across browsers by taking the actual DOM
|
||||
// event object and generating a new one from its properties.
|
||||
, Event = (function () {
|
||||
// a whitelist of properties (for different event types) tells us what to check for and copy
|
||||
var commonProps = str2arr('altKey attrChange attrName bubbles cancelable ctrlKey currentTarget ' +
|
||||
'detail eventPhase getModifierState isTrusted metaKey relatedNode relatedTarget shiftKey ' +
|
||||
'srcElement target timeStamp type view which propertyName path')
|
||||
, mouseProps = commonProps.concat(str2arr('button buttons clientX clientY dataTransfer ' +
|
||||
'fromElement offsetX offsetY pageX pageY screenX screenY toElement movementX movementY region'))
|
||||
, mouseWheelProps = mouseProps.concat(str2arr('wheelDelta wheelDeltaX wheelDeltaY wheelDeltaZ ' +
|
||||
'axis')) // 'axis' is FF specific
|
||||
, keyProps = commonProps.concat(str2arr('char charCode key keyCode keyIdentifier ' +
|
||||
'keyLocation location isComposing code'))
|
||||
, textProps = commonProps.concat(str2arr('data'))
|
||||
, touchProps = commonProps.concat(str2arr('touches targetTouches changedTouches scale rotation'))
|
||||
, messageProps = commonProps.concat(str2arr('data origin source'))
|
||||
, stateProps = commonProps.concat(str2arr('state'))
|
||||
, overOutRegex = /over|out/
|
||||
// some event types need special handling and some need special properties, do that all here
|
||||
, typeFixers = [
|
||||
{ // key events
|
||||
reg: /key/i
|
||||
, fix: function (event, newEvent) {
|
||||
newEvent.keyCode = event.keyCode || event.which
|
||||
return keyProps
|
||||
}
|
||||
}
|
||||
, { // mouse events
|
||||
reg: /click|mouse(?!(.*wheel|scroll))|menu|drag|drop/i
|
||||
, fix: function (event, newEvent, type) {
|
||||
newEvent.rightClick = event.which === 3 || event.button === 2
|
||||
newEvent.pos = { x: 0, y: 0 }
|
||||
if (event.pageX || event.pageY) {
|
||||
newEvent.clientX = event.pageX
|
||||
newEvent.clientY = event.pageY
|
||||
} else if (event.clientX || event.clientY) {
|
||||
newEvent.clientX = event.clientX + doc.body.scrollLeft + root.scrollLeft
|
||||
newEvent.clientY = event.clientY + doc.body.scrollTop + root.scrollTop
|
||||
}
|
||||
if (overOutRegex.test(type)) {
|
||||
newEvent.relatedTarget = event.relatedTarget
|
||||
|| event[(type == 'mouseover' ? 'from' : 'to') + 'Element']
|
||||
}
|
||||
return mouseProps
|
||||
}
|
||||
}
|
||||
, { // mouse wheel events
|
||||
reg: /mouse.*(wheel|scroll)/i
|
||||
, fix: function () { return mouseWheelProps }
|
||||
}
|
||||
, { // TextEvent
|
||||
reg: /^text/i
|
||||
, fix: function () { return textProps }
|
||||
}
|
||||
, { // touch and gesture events
|
||||
reg: /^touch|^gesture/i
|
||||
, fix: function () { return touchProps }
|
||||
}
|
||||
, { // message events
|
||||
reg: /^message$/i
|
||||
, fix: function () { return messageProps }
|
||||
}
|
||||
, { // popstate events
|
||||
reg: /^popstate$/i
|
||||
, fix: function () { return stateProps }
|
||||
}
|
||||
, { // everything else
|
||||
reg: /.*/
|
||||
, fix: function () { return commonProps }
|
||||
}
|
||||
]
|
||||
, typeFixerMap = {} // used to map event types to fixer functions (above), a basic cache mechanism
|
||||
|
||||
, Event = function (event, element, isNative) {
|
||||
if (!arguments.length) return
|
||||
event = event || ((element.ownerDocument || element.document || element).parentWindow || win).event
|
||||
this.originalEvent = event
|
||||
this.isNative = isNative
|
||||
this.isBean = true
|
||||
|
||||
if (!event) return
|
||||
|
||||
var type = event.type
|
||||
, target = event.target || event.srcElement
|
||||
, i, l, p, props, fixer
|
||||
|
||||
this.target = target && target.nodeType === 3 ? target.parentNode : target
|
||||
|
||||
if (isNative) { // we only need basic augmentation on custom events, the rest expensive & pointless
|
||||
fixer = typeFixerMap[type]
|
||||
if (!fixer) { // haven't encountered this event type before, map a fixer function for it
|
||||
for (i = 0, l = typeFixers.length; i < l; i++) {
|
||||
if (typeFixers[i].reg.test(type)) { // guaranteed to match at least one, last is .*
|
||||
typeFixerMap[type] = fixer = typeFixers[i].fix
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
props = fixer(event, this, type)
|
||||
for (i = props.length; i--;) {
|
||||
if (!((p = props[i]) in this) && p in event) this[p] = event[p]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// preventDefault() and stopPropagation() are a consistent interface to those functions
|
||||
// on the DOM, stop() is an alias for both of them together
|
||||
Event.prototype.preventDefault = function () {
|
||||
if (this.originalEvent.preventDefault) this.originalEvent.preventDefault()
|
||||
else this.originalEvent.returnValue = false
|
||||
}
|
||||
Event.prototype.stopPropagation = function () {
|
||||
if (this.originalEvent.stopPropagation) this.originalEvent.stopPropagation()
|
||||
else this.originalEvent.cancelBubble = true
|
||||
}
|
||||
Event.prototype.stop = function () {
|
||||
this.preventDefault()
|
||||
this.stopPropagation()
|
||||
this.stopped = true
|
||||
}
|
||||
// stopImmediatePropagation() has to be handled internally because we manage the event list for
|
||||
// each element
|
||||
// note that originalElement may be a Bean#Event object in some situations
|
||||
Event.prototype.stopImmediatePropagation = function () {
|
||||
if (this.originalEvent.stopImmediatePropagation) this.originalEvent.stopImmediatePropagation()
|
||||
this.isImmediatePropagationStopped = function () { return true }
|
||||
}
|
||||
Event.prototype.isImmediatePropagationStopped = function () {
|
||||
return this.originalEvent.isImmediatePropagationStopped && this.originalEvent.isImmediatePropagationStopped()
|
||||
}
|
||||
Event.prototype.clone = function (currentTarget) {
|
||||
//TODO: this is ripe for optimisation, new events are *expensive*
|
||||
// improving this will speed up delegated events
|
||||
var ne = new Event(this, this.element, this.isNative)
|
||||
ne.currentTarget = currentTarget
|
||||
return ne
|
||||
}
|
||||
|
||||
return Event
|
||||
}())
|
||||
|
||||
// if we're in old IE we can't do onpropertychange on doc or win so we use doc.documentElement for both
|
||||
, targetElement = function (element, isNative) {
|
||||
return !W3C_MODEL && !isNative && (element === doc || element === win) ? root : element
|
||||
}
|
||||
|
||||
/**
|
||||
* Bean maintains an internal registry for event listeners. We don't touch elements, objects
|
||||
* or functions to identify them, instead we store everything in the registry.
|
||||
* Each event listener has a RegEntry object, we have one 'registry' for the whole instance.
|
||||
*/
|
||||
, RegEntry = (function () {
|
||||
// each handler is wrapped so we can handle delegation and custom events
|
||||
var wrappedHandler = function (element, fn, condition, args) {
|
||||
var call = function (event, eargs) {
|
||||
return fn.apply(element, args ? slice.call(eargs, event ? 0 : 1).concat(args) : eargs)
|
||||
}
|
||||
, findTarget = function (event, eventElement) {
|
||||
return fn.__beanDel ? fn.__beanDel.ft(event.target, element) : eventElement
|
||||
}
|
||||
, handler = condition
|
||||
? function (event) {
|
||||
var target = findTarget(event, this) // deleated event
|
||||
if (condition.apply(target, arguments)) {
|
||||
if (event) event.currentTarget = target
|
||||
return call(event, arguments)
|
||||
}
|
||||
}
|
||||
: function (event) {
|
||||
if (fn.__beanDel) event = event.clone(findTarget(event)) // delegated event, fix the fix
|
||||
return call(event, arguments)
|
||||
}
|
||||
handler.__beanDel = fn.__beanDel
|
||||
return handler
|
||||
}
|
||||
|
||||
, RegEntry = function (element, type, handler, original, namespaces, args, root) {
|
||||
var customType = customEvents[type]
|
||||
, isNative
|
||||
|
||||
if (type == 'unload') {
|
||||
// self clean-up
|
||||
handler = once(removeListener, element, type, handler, original)
|
||||
}
|
||||
|
||||
if (customType) {
|
||||
if (customType.condition) {
|
||||
handler = wrappedHandler(element, handler, customType.condition, args)
|
||||
}
|
||||
type = customType.base || type
|
||||
}
|
||||
|
||||
this.isNative = isNative = nativeEvents[type] && !!element[eventSupport]
|
||||
this.customType = !W3C_MODEL && !isNative && type
|
||||
this.element = element
|
||||
this.type = type
|
||||
this.original = original
|
||||
this.namespaces = namespaces
|
||||
this.eventType = W3C_MODEL || isNative ? type : 'propertychange'
|
||||
this.target = targetElement(element, isNative)
|
||||
this[eventSupport] = !!this.target[eventSupport]
|
||||
this.root = root
|
||||
this.handler = wrappedHandler(element, handler, null, args)
|
||||
}
|
||||
|
||||
// given a list of namespaces, is our entry in any of them?
|
||||
RegEntry.prototype.inNamespaces = function (checkNamespaces) {
|
||||
var i, j, c = 0
|
||||
if (!checkNamespaces) return true
|
||||
if (!this.namespaces) return false
|
||||
for (i = checkNamespaces.length; i--;) {
|
||||
for (j = this.namespaces.length; j--;) {
|
||||
if (checkNamespaces[i] == this.namespaces[j]) c++
|
||||
}
|
||||
}
|
||||
return checkNamespaces.length === c
|
||||
}
|
||||
|
||||
// match by element, original fn (opt), handler fn (opt)
|
||||
RegEntry.prototype.matches = function (checkElement, checkOriginal, checkHandler) {
|
||||
return this.element === checkElement &&
|
||||
(!checkOriginal || this.original === checkOriginal) &&
|
||||
(!checkHandler || this.handler === checkHandler)
|
||||
}
|
||||
|
||||
return RegEntry
|
||||
}())
|
||||
|
||||
, registry = (function () {
|
||||
// our map stores arrays by event type, just because it's better than storing
|
||||
// everything in a single array.
|
||||
// uses '$' as a prefix for the keys for safety and 'r' as a special prefix for
|
||||
// rootListeners so we can look them up fast
|
||||
var map = {}
|
||||
|
||||
// generic functional search of our registry for matching listeners,
|
||||
// `fn` returns false to break out of the loop
|
||||
, forAll = function (element, type, original, handler, root, fn) {
|
||||
var pfx = root ? 'r' : '$'
|
||||
if (!type || type == '*') {
|
||||
// search the whole registry
|
||||
for (var t in map) {
|
||||
if (t.charAt(0) == pfx) {
|
||||
forAll(element, t.substr(1), original, handler, root, fn)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
var i = 0, l, list = map[pfx + type], all = element == '*'
|
||||
if (!list) return
|
||||
for (l = list.length; i < l; i++) {
|
||||
if ((all || list[i].matches(element, original, handler)) && !fn(list[i], list, i, type)) return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
, has = function (element, type, original, root) {
|
||||
// we're not using forAll here simply because it's a bit slower and this
|
||||
// needs to be fast
|
||||
var i, list = map[(root ? 'r' : '$') + type]
|
||||
if (list) {
|
||||
for (i = list.length; i--;) {
|
||||
if (!list[i].root && list[i].matches(element, original, null)) return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
, get = function (element, type, original, root) {
|
||||
var entries = []
|
||||
forAll(element, type, original, null, root, function (entry) {
|
||||
return entries.push(entry)
|
||||
})
|
||||
return entries
|
||||
}
|
||||
|
||||
, put = function (entry) {
|
||||
var has = !entry.root && !this.has(entry.element, entry.type, null, false)
|
||||
, key = (entry.root ? 'r' : '$') + entry.type
|
||||
;(map[key] || (map[key] = [])).push(entry)
|
||||
return has
|
||||
}
|
||||
|
||||
, del = function (entry) {
|
||||
forAll(entry.element, entry.type, null, entry.handler, entry.root, function (entry, list, i) {
|
||||
list.splice(i, 1)
|
||||
entry.removed = true
|
||||
if (list.length === 0) delete map[(entry.root ? 'r' : '$') + entry.type]
|
||||
return false
|
||||
})
|
||||
}
|
||||
|
||||
// dump all entries, used for onunload
|
||||
, entries = function () {
|
||||
var t, entries = []
|
||||
for (t in map) {
|
||||
if (t.charAt(0) == '$') entries = entries.concat(map[t])
|
||||
}
|
||||
return entries
|
||||
}
|
||||
|
||||
return { has: has, get: get, put: put, del: del, entries: entries }
|
||||
}())
|
||||
|
||||
// we need a selector engine for delegated events, use querySelectorAll if it exists
|
||||
// but for older browsers we need Qwery, Sizzle or similar
|
||||
, selectorEngine
|
||||
, setSelectorEngine = function (e) {
|
||||
if (!arguments.length) {
|
||||
selectorEngine = doc.querySelectorAll
|
||||
? function (s, r) {
|
||||
return r.querySelectorAll(s)
|
||||
}
|
||||
: function () {
|
||||
throw new Error('Bean: No selector engine installed') // eeek
|
||||
}
|
||||
} else {
|
||||
selectorEngine = e
|
||||
}
|
||||
}
|
||||
|
||||
// we attach this listener to each DOM event that we need to listen to, only once
|
||||
// per event type per DOM element
|
||||
, rootListener = function (event, type) {
|
||||
if (!W3C_MODEL && type && event && event.propertyName != '_on' + type) return
|
||||
|
||||
var listeners = registry.get(this, type || event.type, null, false)
|
||||
, l = listeners.length
|
||||
, i = 0
|
||||
|
||||
event = new Event(event, this, true)
|
||||
if (type) event.type = type
|
||||
|
||||
// iterate through all handlers registered for this type, calling them unless they have
|
||||
// been removed by a previous handler or stopImmediatePropagation() has been called
|
||||
for (; i < l && !event.isImmediatePropagationStopped(); i++) {
|
||||
if (!listeners[i].removed) listeners[i].handler.call(this, event)
|
||||
}
|
||||
}
|
||||
|
||||
// add and remove listeners to DOM elements
|
||||
, listener = W3C_MODEL
|
||||
? function (element, type, add) {
|
||||
// new browsers
|
||||
element[add ? addEvent : removeEvent](type, rootListener, false)
|
||||
}
|
||||
: function (element, type, add, custom) {
|
||||
// IE8 and below, use attachEvent/detachEvent and we have to piggy-back propertychange events
|
||||
// to simulate event bubbling etc.
|
||||
var entry
|
||||
if (add) {
|
||||
registry.put(entry = new RegEntry(
|
||||
element
|
||||
, custom || type
|
||||
, function (event) { // handler
|
||||
rootListener.call(element, event, custom)
|
||||
}
|
||||
, rootListener
|
||||
, null
|
||||
, null
|
||||
, true // is root
|
||||
))
|
||||
if (custom && element['_on' + custom] == null) element['_on' + custom] = 0
|
||||
entry.target.attachEvent('on' + entry.eventType, entry.handler)
|
||||
} else {
|
||||
entry = registry.get(element, custom || type, rootListener, true)[0]
|
||||
if (entry) {
|
||||
entry.target.detachEvent('on' + entry.eventType, entry.handler)
|
||||
registry.del(entry)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
, once = function (rm, element, type, fn, originalFn) {
|
||||
// wrap the handler in a handler that does a remove as well
|
||||
return function () {
|
||||
fn.apply(this, arguments)
|
||||
rm(element, type, originalFn)
|
||||
}
|
||||
}
|
||||
|
||||
, removeListener = function (element, orgType, handler, namespaces) {
|
||||
var type = orgType && orgType.replace(nameRegex, '')
|
||||
, handlers = registry.get(element, type, null, false)
|
||||
, removed = {}
|
||||
, i, l
|
||||
|
||||
for (i = 0, l = handlers.length; i < l; i++) {
|
||||
if ((!handler || handlers[i].original === handler) && handlers[i].inNamespaces(namespaces)) {
|
||||
// TODO: this is problematic, we have a registry.get() and registry.del() that
|
||||
// both do registry searches so we waste cycles doing this. Needs to be rolled into
|
||||
// a single registry.forAll(fn) that removes while finding, but the catch is that
|
||||
// we'll be splicing the arrays that we're iterating over. Needs extra tests to
|
||||
// make sure we don't screw it up. @rvagg
|
||||
registry.del(handlers[i])
|
||||
if (!removed[handlers[i].eventType] && handlers[i][eventSupport])
|
||||
removed[handlers[i].eventType] = { t: handlers[i].eventType, c: handlers[i].type }
|
||||
}
|
||||
}
|
||||
// check each type/element for removed listeners and remove the rootListener where it's no longer needed
|
||||
for (i in removed) {
|
||||
if (!registry.has(element, removed[i].t, null, false)) {
|
||||
// last listener of this type, remove the rootListener
|
||||
listener(element, removed[i].t, false, removed[i].c)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// set up a delegate helper using the given selector, wrap the handler function
|
||||
, delegate = function (selector, fn) {
|
||||
//TODO: findTarget (therefore $) is called twice, once for match and once for
|
||||
// setting e.currentTarget, fix this so it's only needed once
|
||||
var findTarget = function (target, root) {
|
||||
var i, array = isString(selector) ? selectorEngine(selector, root) : selector
|
||||
for (; target && target !== root; target = target.parentNode) {
|
||||
for (i = array.length; i--;) {
|
||||
if (array[i] === target) return target
|
||||
}
|
||||
}
|
||||
}
|
||||
, handler = function (e) {
|
||||
var match = findTarget(e.target, this)
|
||||
if (match) fn.apply(match, arguments)
|
||||
}
|
||||
|
||||
// __beanDel isn't pleasant but it's a private function, not exposed outside of Bean
|
||||
handler.__beanDel = {
|
||||
ft : findTarget // attach it here for customEvents to use too
|
||||
, selector : selector
|
||||
}
|
||||
return handler
|
||||
}
|
||||
|
||||
, fireListener = W3C_MODEL ? function (isNative, type, element) {
|
||||
// modern browsers, do a proper dispatchEvent()
|
||||
var evt = doc.createEvent(isNative ? 'HTMLEvents' : 'UIEvents')
|
||||
evt[isNative ? 'initEvent' : 'initUIEvent'](type, true, true, win, 1)
|
||||
element.dispatchEvent(evt)
|
||||
} : function (isNative, type, element) {
|
||||
// old browser use onpropertychange, just increment a custom property to trigger the event
|
||||
element = targetElement(element, isNative)
|
||||
isNative ? element.fireEvent('on' + type, doc.createEventObject()) : element['_on' + type]++
|
||||
}
|
||||
|
||||
/**
|
||||
* Public API: off(), on(), add(), (remove()), one(), fire(), clone()
|
||||
*/
|
||||
|
||||
/**
|
||||
* off(element[, eventType(s)[, handler ]])
|
||||
*/
|
||||
, off = function (element, typeSpec, fn) {
|
||||
var isTypeStr = isString(typeSpec)
|
||||
, k, type, namespaces, i
|
||||
|
||||
if (isTypeStr && typeSpec.indexOf(' ') > 0) {
|
||||
// off(el, 't1 t2 t3', fn) or off(el, 't1 t2 t3')
|
||||
typeSpec = str2arr(typeSpec)
|
||||
for (i = typeSpec.length; i--;)
|
||||
off(element, typeSpec[i], fn)
|
||||
return element
|
||||
}
|
||||
|
||||
type = isTypeStr && typeSpec.replace(nameRegex, '')
|
||||
if (type && customEvents[type]) type = customEvents[type].base
|
||||
|
||||
if (!typeSpec || isTypeStr) {
|
||||
// off(el) or off(el, t1.ns) or off(el, .ns) or off(el, .ns1.ns2.ns3)
|
||||
if (namespaces = isTypeStr && typeSpec.replace(namespaceRegex, '')) namespaces = str2arr(namespaces, '.')
|
||||
removeListener(element, type, fn, namespaces)
|
||||
} else if (isFunction(typeSpec)) {
|
||||
// off(el, fn)
|
||||
removeListener(element, null, typeSpec)
|
||||
} else {
|
||||
// off(el, { t1: fn1, t2, fn2 })
|
||||
for (k in typeSpec) {
|
||||
if (typeSpec.hasOwnProperty(k)) off(element, k, typeSpec[k])
|
||||
}
|
||||
}
|
||||
|
||||
return element
|
||||
}
|
||||
|
||||
/**
|
||||
* on(element, eventType(s)[, selector], handler[, args ])
|
||||
*/
|
||||
, on = function(element, events, selector, fn) {
|
||||
var originalFn, type, types, i, args, entry, first
|
||||
|
||||
//TODO: the undefined check means you can't pass an 'args' argument, fix this perhaps?
|
||||
if (selector === undefined && typeof events == 'object') {
|
||||
//TODO: this can't handle delegated events
|
||||
for (type in events) {
|
||||
if (events.hasOwnProperty(type)) {
|
||||
on.call(this, element, type, events[type])
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if (!isFunction(selector)) {
|
||||
// delegated event
|
||||
originalFn = fn
|
||||
args = slice.call(arguments, 4)
|
||||
fn = delegate(selector, originalFn, selectorEngine)
|
||||
} else {
|
||||
args = slice.call(arguments, 3)
|
||||
fn = originalFn = selector
|
||||
}
|
||||
|
||||
types = str2arr(events)
|
||||
|
||||
// special case for one(), wrap in a self-removing handler
|
||||
if (this === ONE) {
|
||||
fn = once(off, element, events, fn, originalFn)
|
||||
}
|
||||
|
||||
for (i = types.length; i--;) {
|
||||
// add new handler to the registry and check if it's the first for this element/type
|
||||
first = registry.put(entry = new RegEntry(
|
||||
element
|
||||
, types[i].replace(nameRegex, '') // event type
|
||||
, fn
|
||||
, originalFn
|
||||
, str2arr(types[i].replace(namespaceRegex, ''), '.') // namespaces
|
||||
, args
|
||||
, false // not root
|
||||
))
|
||||
if (entry[eventSupport] && first) {
|
||||
// first event of this type on this element, add root listener
|
||||
listener(element, entry.eventType, true, entry.customType)
|
||||
}
|
||||
}
|
||||
|
||||
return element
|
||||
}
|
||||
|
||||
/**
|
||||
* add(element[, selector], eventType(s), handler[, args ])
|
||||
*
|
||||
* Deprecated: kept (for now) for backward-compatibility
|
||||
*/
|
||||
, add = function (element, events, fn, delfn) {
|
||||
return on.apply(
|
||||
null
|
||||
, !isString(fn)
|
||||
? slice.call(arguments)
|
||||
: [ element, fn, events, delfn ].concat(arguments.length > 3 ? slice.call(arguments, 5) : [])
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* one(element, eventType(s)[, selector], handler[, args ])
|
||||
*/
|
||||
, one = function () {
|
||||
return on.apply(ONE, arguments)
|
||||
}
|
||||
|
||||
/**
|
||||
* fire(element, eventType(s)[, args ])
|
||||
*
|
||||
* The optional 'args' argument must be an array, if no 'args' argument is provided
|
||||
* then we can use the browser's DOM event system, otherwise we trigger handlers manually
|
||||
*/
|
||||
, fire = function (element, type, args) {
|
||||
var types = str2arr(type)
|
||||
, i, j, l, names, handlers
|
||||
|
||||
for (i = types.length; i--;) {
|
||||
type = types[i].replace(nameRegex, '')
|
||||
if (names = types[i].replace(namespaceRegex, '')) names = str2arr(names, '.')
|
||||
if (!names && !args && element[eventSupport]) {
|
||||
fireListener(nativeEvents[type], type, element)
|
||||
} else {
|
||||
// non-native event, either because of a namespace, arguments or a non DOM element
|
||||
// iterate over all listeners and manually 'fire'
|
||||
handlers = registry.get(element, type, null, false)
|
||||
args = [false].concat(args)
|
||||
for (j = 0, l = handlers.length; j < l; j++) {
|
||||
if (handlers[j].inNamespaces(names)) {
|
||||
handlers[j].handler.apply(element, args)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return element
|
||||
}
|
||||
|
||||
/**
|
||||
* clone(dstElement, srcElement[, eventType ])
|
||||
*
|
||||
* TODO: perhaps for consistency we should allow the same flexibility in type specifiers?
|
||||
*/
|
||||
, clone = function (element, from, type) {
|
||||
var handlers = registry.get(from, type, null, false)
|
||||
, l = handlers.length
|
||||
, i = 0
|
||||
, args, beanDel
|
||||
|
||||
for (; i < l; i++) {
|
||||
if (handlers[i].original) {
|
||||
args = [ element, handlers[i].type ]
|
||||
if (beanDel = handlers[i].handler.__beanDel) args.push(beanDel.selector)
|
||||
args.push(handlers[i].original)
|
||||
on.apply(null, args)
|
||||
}
|
||||
}
|
||||
return element
|
||||
}
|
||||
|
||||
, bean = {
|
||||
'on' : on
|
||||
, 'add' : add
|
||||
, 'one' : one
|
||||
, 'off' : off
|
||||
, 'remove' : off
|
||||
, 'clone' : clone
|
||||
, 'fire' : fire
|
||||
, 'Event' : Event
|
||||
, 'setSelectorEngine' : setSelectorEngine
|
||||
, 'noConflict' : function () {
|
||||
context[name] = old
|
||||
return this
|
||||
}
|
||||
}
|
||||
|
||||
// for IE, clean up on unload to avoid leaks
|
||||
if (win.attachEvent) {
|
||||
var cleanup = function () {
|
||||
var i, entries = registry.entries()
|
||||
for (i in entries) {
|
||||
if (entries[i].type && entries[i].type !== 'unload') off(entries[i].element, entries[i].type)
|
||||
}
|
||||
win.detachEvent('onunload', cleanup)
|
||||
win.CollectGarbage && win.CollectGarbage()
|
||||
}
|
||||
win.attachEvent('onunload', cleanup)
|
||||
}
|
||||
|
||||
// initialize selector engine to internal default (qSA or throw Error)
|
||||
setSelectorEngine()
|
||||
|
||||
return bean
|
||||
});
|
|
@ -1,314 +0,0 @@
|
|||
(function (global) {
|
||||
function isArray(arr) {
|
||||
return Object.prototype.toString.call(arr) === '[object Array]';
|
||||
}
|
||||
|
||||
function foreach(arr, handler) {
|
||||
if (isArray(arr)) {
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
handler(arr[i]);
|
||||
}
|
||||
}
|
||||
else
|
||||
handler(arr);
|
||||
}
|
||||
|
||||
function D(fn) {
|
||||
var status = 'pending',
|
||||
doneFuncs = [],
|
||||
failFuncs = [],
|
||||
progressFuncs = [],
|
||||
resultArgs = null,
|
||||
|
||||
promise = {
|
||||
done: function () {
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
// skip any undefined or null arguments
|
||||
if (!arguments[i]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isArray(arguments[i])) {
|
||||
var arr = arguments[i];
|
||||
for (var j = 0; j < arr.length; j++) {
|
||||
// immediately call the function if the deferred has been resolved
|
||||
if (status === 'resolved') {
|
||||
arr[j].apply(this, resultArgs);
|
||||
}
|
||||
|
||||
doneFuncs.push(arr[j]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// immediately call the function if the deferred has been resolved
|
||||
if (status === 'resolved') {
|
||||
arguments[i].apply(this, resultArgs);
|
||||
}
|
||||
|
||||
doneFuncs.push(arguments[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
fail: function () {
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
// skip any undefined or null arguments
|
||||
if (!arguments[i]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isArray(arguments[i])) {
|
||||
var arr = arguments[i];
|
||||
for (var j = 0; j < arr.length; j++) {
|
||||
// immediately call the function if the deferred has been resolved
|
||||
if (status === 'rejected') {
|
||||
arr[j].apply(this, resultArgs);
|
||||
}
|
||||
|
||||
failFuncs.push(arr[j]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// immediately call the function if the deferred has been resolved
|
||||
if (status === 'rejected') {
|
||||
arguments[i].apply(this, resultArgs);
|
||||
}
|
||||
|
||||
failFuncs.push(arguments[i]);
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
always: function () {
|
||||
return this.done.apply(this, arguments).fail.apply(this, arguments);
|
||||
},
|
||||
|
||||
progress: function () {
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
// skip any undefined or null arguments
|
||||
if (!arguments[i]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isArray(arguments[i])) {
|
||||
var arr = arguments[i];
|
||||
for (var j = 0; j < arr.length; j++) {
|
||||
// immediately call the function if the deferred has been resolved
|
||||
if (status === 'pending') {
|
||||
progressFuncs.push(arr[j]);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// immediately call the function if the deferred has been resolved
|
||||
if (status === 'pending') {
|
||||
progressFuncs.push(arguments[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return this;
|
||||
},
|
||||
|
||||
then: function () {
|
||||
// fail callbacks
|
||||
if (arguments.length > 1 && arguments[1]) {
|
||||
this.fail(arguments[1]);
|
||||
}
|
||||
|
||||
// done callbacks
|
||||
if (arguments.length > 0 && arguments[0]) {
|
||||
this.done(arguments[0]);
|
||||
}
|
||||
|
||||
// notify callbacks
|
||||
if (arguments.length > 2 && arguments[2]) {
|
||||
this.progress(arguments[2]);
|
||||
}
|
||||
},
|
||||
|
||||
promise: function (obj) {
|
||||
if (obj == null) {
|
||||
return promise;
|
||||
} else {
|
||||
for (var i in promise) {
|
||||
obj[i] = promise[i];
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
},
|
||||
|
||||
state: function () {
|
||||
return status;
|
||||
},
|
||||
|
||||
debug: function () {
|
||||
console.log('[debug]', doneFuncs, failFuncs, status);
|
||||
},
|
||||
|
||||
isRejected: function () {
|
||||
return status === 'rejected';
|
||||
},
|
||||
|
||||
isResolved: function () {
|
||||
return status === 'resolved';
|
||||
},
|
||||
|
||||
pipe: function (done, fail, progress) {
|
||||
return D(function (def) {
|
||||
foreach(done, function (func) {
|
||||
// filter function
|
||||
if (typeof func === 'function') {
|
||||
deferred.done(function () {
|
||||
var returnval = func.apply(this, arguments);
|
||||
// if a new deferred/promise is returned, its state is passed to the current deferred/promise
|
||||
if (returnval && typeof returnval === 'function') {
|
||||
returnval.promise().then(def.resolve, def.reject, def.notify);
|
||||
}
|
||||
else { // if new return val is passed, it is passed to the piped done
|
||||
def.resolve(returnval);
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
deferred.done(def.resolve);
|
||||
}
|
||||
});
|
||||
|
||||
foreach(fail, function (func) {
|
||||
if (typeof func === 'function') {
|
||||
deferred.fail(function () {
|
||||
var returnval = func.apply(this, arguments);
|
||||
|
||||
if (returnval && typeof returnval === 'function') {
|
||||
returnval.promise().then(def.resolve, def.reject, def.notify);
|
||||
} else {
|
||||
def.reject(returnval);
|
||||
}
|
||||
});
|
||||
}
|
||||
else {
|
||||
deferred.fail(def.reject);
|
||||
}
|
||||
});
|
||||
}).promise();
|
||||
}
|
||||
},
|
||||
|
||||
deferred = {
|
||||
resolveWith: function (context) {
|
||||
if (status === 'pending') {
|
||||
status = 'resolved';
|
||||
var args = resultArgs = (arguments.length > 1) ? arguments[1] : [];
|
||||
for (var i = 0; i < doneFuncs.length; i++) {
|
||||
doneFuncs[i].apply(context, args);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
},
|
||||
|
||||
rejectWith: function (context) {
|
||||
if (status === 'pending') {
|
||||
status = 'rejected';
|
||||
var args = resultArgs = (arguments.length > 1) ? arguments[1] : [];
|
||||
for (var i = 0; i < failFuncs.length; i++) {
|
||||
failFuncs[i].apply(context, args);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
},
|
||||
|
||||
notifyWith: function (context) {
|
||||
if (status === 'pending') {
|
||||
var args = resultArgs = (arguments.length > 1) ? arguments[1] : [];
|
||||
for (var i = 0; i < progressFuncs.length; i++) {
|
||||
progressFuncs[i].apply(context, args);
|
||||
}
|
||||
}
|
||||
return this;
|
||||
},
|
||||
|
||||
resolve: function () {
|
||||
return this.resolveWith(this, arguments);
|
||||
},
|
||||
|
||||
reject: function () {
|
||||
return this.rejectWith(this, arguments);
|
||||
},
|
||||
|
||||
notify: function () {
|
||||
return this.notifyWith(this, arguments);
|
||||
}
|
||||
}
|
||||
|
||||
var obj = promise.promise(deferred);
|
||||
|
||||
if (fn) {
|
||||
fn.apply(obj, [obj]);
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
D.when = function () {
|
||||
if (arguments.length < 2) {
|
||||
var obj = arguments.length ? arguments[0] : undefined;
|
||||
if (obj && (typeof obj.isResolved === 'function' && typeof obj.isRejected === 'function')) {
|
||||
return obj.promise();
|
||||
}
|
||||
else {
|
||||
return D().resolve(obj).promise();
|
||||
}
|
||||
}
|
||||
else {
|
||||
return (function (args) {
|
||||
var df = D(),
|
||||
size = args.length,
|
||||
done = 0,
|
||||
rp = new Array(size); // resolve params: params of each resolve, we need to track down them to be able to pass them in the correct order if the master needs to be resolved
|
||||
|
||||
for (var i = 0; i < args.length; i++) {
|
||||
(function (j) {
|
||||
var obj = null;
|
||||
|
||||
if (args[j].done) {
|
||||
args[j].done(function () { rp[j] = (arguments.length < 2) ? arguments[0] : arguments; if (++done == size) { df.resolve.apply(df, rp); } })
|
||||
.fail(function () { df.reject(arguments); });
|
||||
} else {
|
||||
obj = args[j];
|
||||
args[j] = new Deferred();
|
||||
|
||||
args[j].done(function () { rp[j] = (arguments.length < 2) ? arguments[0] : arguments; if (++done == size) { df.resolve.apply(df, rp); } })
|
||||
.fail(function () { df.reject(arguments); }).resolve(obj);
|
||||
}
|
||||
})(i);
|
||||
}
|
||||
|
||||
return df.promise();
|
||||
})(arguments);
|
||||
}
|
||||
}
|
||||
|
||||
global.Deferred = D;
|
||||
})(window);
|
||||
|
||||
(function (globalScope) {
|
||||
|
||||
globalScope.DeferredBuilder = {
|
||||
|
||||
Deferred: function () {
|
||||
return new globalScope.Deferred();
|
||||
},
|
||||
|
||||
when: function (promises) {
|
||||
|
||||
return globalScope.Deferred.when(promises);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
})(window);
|
|
@ -1,35 +0,0 @@
|
|||
(function (globalScope) {
|
||||
|
||||
globalScope.Events = {
|
||||
|
||||
on: function (obj, eventName, selector, fn) {
|
||||
|
||||
Logger.log('event.on ' + eventName);
|
||||
bean.on(obj, eventName, selector, fn);
|
||||
},
|
||||
|
||||
off: function (obj, eventName, selector, fn) {
|
||||
|
||||
Logger.log('event.off ' + eventName);
|
||||
bean.off(obj, eventName, selector);
|
||||
},
|
||||
|
||||
trigger: function (obj, eventName, params) {
|
||||
|
||||
Logger.log('event.trigger ' + eventName);
|
||||
|
||||
// Need to push an extra param to make the argument order consistent with jquery
|
||||
var newParams = [];
|
||||
newParams.push({});
|
||||
|
||||
if (params && params.length) {
|
||||
for (var i = 0, length = params.length; i < length; i++) {
|
||||
newParams.push(params[i]);
|
||||
}
|
||||
}
|
||||
|
||||
bean.fire(obj, eventName, newParams);
|
||||
}
|
||||
};
|
||||
|
||||
})(window);
|
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
@ -1,35 +0,0 @@
|
|||
(function (globalScope) {
|
||||
|
||||
if (!globalScope.MediaBrowser) {
|
||||
globalScope.MediaBrowser = {};
|
||||
}
|
||||
|
||||
globalScope.MediaBrowser.generateDeviceId = function (keyName, seed) {
|
||||
|
||||
keyName = keyName || 'randomId';
|
||||
|
||||
var keys = [];
|
||||
|
||||
keys.push(navigator.userAgent);
|
||||
keys.push((navigator.cpuClass || ""));
|
||||
|
||||
if (seed) {
|
||||
keys.push(seed);
|
||||
}
|
||||
var randomId = '';
|
||||
|
||||
// Since the above is not guaranteed to be unique per device, add a little more
|
||||
randomId = appStorage.getItem(keyName);
|
||||
|
||||
if (!randomId) {
|
||||
|
||||
randomId = new Date().getTime();
|
||||
|
||||
appStorage.setItem(keyName, randomId.toString());
|
||||
}
|
||||
|
||||
keys.push(randomId);
|
||||
return CryptoJS.SHA1(keys.join('|')).toString();
|
||||
};
|
||||
|
||||
})(window);
|
|
@ -13,87 +13,8 @@
|
|||
},
|
||||
|
||||
trigger: function (obj, eventName, params) {
|
||||
Logger.log('event.trigger ' + eventName);
|
||||
jQuery(obj).trigger(eventName, params);
|
||||
}
|
||||
};
|
||||
|
||||
})(window);
|
||||
|
||||
//(function () {
|
||||
|
||||
// function useJqueryEvents(elems, eventName) {
|
||||
|
||||
// eventName = eventName.type || eventName;
|
||||
|
||||
// if (typeof eventName == 'string') {
|
||||
// if (eventName.indexOf('page') == 0) {
|
||||
// return true;
|
||||
// }
|
||||
// if (eventName.indexOf('loadercreate') == 0) {
|
||||
// return true;
|
||||
// }
|
||||
// } else {
|
||||
// return true;
|
||||
// }
|
||||
|
||||
// //console.log('bean: ' + eventName);
|
||||
// return false;
|
||||
// }
|
||||
|
||||
// $.fn.jTrigger = $.fn.trigger;
|
||||
// $.fn.jOn = $.fn.on;
|
||||
// $.fn.jOff = $.fn.off;
|
||||
|
||||
// $.fn.off = function (eventName, selector, fn, ex1, ex2, ex3) {
|
||||
|
||||
// if (arguments.length > 3 || useJqueryEvents(this, eventName)) {
|
||||
// this.jOff(eventName, selector, fn, ex1, ex2, ex3);
|
||||
// return this;
|
||||
// }
|
||||
|
||||
// for (var i = 0, length = this.length; i < length; i++) {
|
||||
// bean.off(this[i], eventName, selector, fn);
|
||||
// }
|
||||
// return this;
|
||||
// };
|
||||
|
||||
// $.fn.on = function (eventName, selector, fn, ex1, ex2, ex3) {
|
||||
|
||||
// if (arguments.length > 3 || useJqueryEvents(this, eventName)) {
|
||||
// this.jOn(eventName, selector, fn, ex1, ex2, ex3);
|
||||
// return this;
|
||||
// }
|
||||
|
||||
// for (var i = 0, length = this.length; i < length; i++) {
|
||||
// bean.on(this[i], eventName, selector, fn);
|
||||
// }
|
||||
// return this;
|
||||
// };
|
||||
|
||||
// $.fn.trigger = function (eventName, params) {
|
||||
|
||||
// if (useJqueryEvents(this, eventName)) {
|
||||
// this.jTrigger(eventName, params);
|
||||
// return this;
|
||||
// }
|
||||
|
||||
// var i, length;
|
||||
|
||||
// // Need to push an extra param to make the argument order consistent with jquery
|
||||
// var newParams = [];
|
||||
// newParams.push({});
|
||||
|
||||
// if (params && params.length) {
|
||||
// for (i = 0, length = params.length; i < length; i++) {
|
||||
// newParams.push(params[i]);
|
||||
// }
|
||||
// }
|
||||
|
||||
// for (i = 0, length = this.length; i < length; i++) {
|
||||
// bean.fire(this[i], eventName, newParams);
|
||||
// }
|
||||
// return this;
|
||||
// };
|
||||
|
||||
//})();
|
||||
})(window);
|
|
@ -6,11 +6,10 @@
|
|||
|
||||
self.upload = function (file, name, url) {
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
return new Promise(function (resolve, reject) {
|
||||
|
||||
deferred.reject();
|
||||
|
||||
return deferred.promise();
|
||||
reject();
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -1,112 +1,110 @@
|
|||
(function () {
|
||||
|
||||
function getLocalMediaSource(serverId, itemId) {
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, [null]);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve(null);
|
||||
});
|
||||
}
|
||||
|
||||
function saveOfflineUser(user) {
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolve();
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
function deleteOfflineUser(id) {
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolve();
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
function getCameraPhotos() {
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, [[]]);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve([]);
|
||||
});
|
||||
}
|
||||
|
||||
function getOfflineActions(serverId) {
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, [[]]);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve([]);
|
||||
});
|
||||
}
|
||||
|
||||
function deleteOfflineActions(actions) {
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, [[]]);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve([]);
|
||||
});
|
||||
}
|
||||
|
||||
function getServerItemIds(serverId) {
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, [[]]);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve([]);
|
||||
});
|
||||
}
|
||||
|
||||
function removeLocalItem(itemId, serverId) {
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, []);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
function getLocalItem(itemId, serverId) {
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, []);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
function addOrUpdateLocalItem(localItem) {
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, []);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
function createLocalItem(libraryItem, serverInfo, originalFileName) {
|
||||
|
||||
var item = {};
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, [item]);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve({});
|
||||
});
|
||||
}
|
||||
|
||||
function downloadFile(url, localPath) {
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, []);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
function downloadSubtitles(url, localItem, subtitleStreamh) {
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, [""]);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve("");
|
||||
});
|
||||
}
|
||||
|
||||
function hasImage(serverId, itemId, imageTag) {
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, [false]);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve(false);
|
||||
});
|
||||
}
|
||||
|
||||
function downloadImage(url, serverId, itemId, imageTag) {
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, [false]);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve(false);
|
||||
});
|
||||
}
|
||||
|
||||
function fileExists(path) {
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, [false]);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve(false);
|
||||
});
|
||||
}
|
||||
|
||||
function translateFilePath(path) {
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolveWith(null, [path]);
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
resolve(path);
|
||||
});
|
||||
}
|
||||
|
||||
window.LocalAssetManager = {
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
/*
|
||||
CryptoJS v3.1.2
|
||||
code.google.com/p/crypto-js
|
||||
(c) 2009-2013 by Jeff Mott. All rights reserved.
|
||||
code.google.com/p/crypto-js/wiki/License
|
||||
*/
|
||||
var CryptoJS=CryptoJS||function(s,p){var m={},l=m.lib={},n=function(){},r=l.Base={extend:function(b){n.prototype=this;var h=new n;b&&h.mixIn(b);h.hasOwnProperty("init")||(h.init=function(){h.$super.init.apply(this,arguments)});h.init.prototype=h;h.$super=this;return h},create:function(){var b=this.extend();b.init.apply(b,arguments);return b},init:function(){},mixIn:function(b){for(var h in b)b.hasOwnProperty(h)&&(this[h]=b[h]);b.hasOwnProperty("toString")&&(this.toString=b.toString)},clone:function(){return this.init.prototype.extend(this)}},
|
||||
q=l.WordArray=r.extend({init:function(b,h){b=this.words=b||[];this.sigBytes=h!=p?h:4*b.length},toString:function(b){return(b||t).stringify(this)},concat:function(b){var h=this.words,a=b.words,j=this.sigBytes;b=b.sigBytes;this.clamp();if(j%4)for(var g=0;g<b;g++)h[j+g>>>2]|=(a[g>>>2]>>>24-8*(g%4)&255)<<24-8*((j+g)%4);else if(65535<a.length)for(g=0;g<b;g+=4)h[j+g>>>2]=a[g>>>2];else h.push.apply(h,a);this.sigBytes+=b;return this},clamp:function(){var b=this.words,h=this.sigBytes;b[h>>>2]&=4294967295<<
|
||||
32-8*(h%4);b.length=s.ceil(h/4)},clone:function(){var b=r.clone.call(this);b.words=this.words.slice(0);return b},random:function(b){for(var h=[],a=0;a<b;a+=4)h.push(4294967296*s.random()|0);return new q.init(h,b)}}),v=m.enc={},t=v.Hex={stringify:function(b){var a=b.words;b=b.sigBytes;for(var g=[],j=0;j<b;j++){var k=a[j>>>2]>>>24-8*(j%4)&255;g.push((k>>>4).toString(16));g.push((k&15).toString(16))}return g.join("")},parse:function(b){for(var a=b.length,g=[],j=0;j<a;j+=2)g[j>>>3]|=parseInt(b.substr(j,
|
||||
2),16)<<24-4*(j%8);return new q.init(g,a/2)}},a=v.Latin1={stringify:function(b){var a=b.words;b=b.sigBytes;for(var g=[],j=0;j<b;j++)g.push(String.fromCharCode(a[j>>>2]>>>24-8*(j%4)&255));return g.join("")},parse:function(b){for(var a=b.length,g=[],j=0;j<a;j++)g[j>>>2]|=(b.charCodeAt(j)&255)<<24-8*(j%4);return new q.init(g,a)}},u=v.Utf8={stringify:function(b){try{return decodeURIComponent(escape(a.stringify(b)))}catch(g){throw Error("Malformed UTF-8 data");}},parse:function(b){return a.parse(unescape(encodeURIComponent(b)))}},
|
||||
g=l.BufferedBlockAlgorithm=r.extend({reset:function(){this._data=new q.init;this._nDataBytes=0},_append:function(b){"string"==typeof b&&(b=u.parse(b));this._data.concat(b);this._nDataBytes+=b.sigBytes},_process:function(b){var a=this._data,g=a.words,j=a.sigBytes,k=this.blockSize,m=j/(4*k),m=b?s.ceil(m):s.max((m|0)-this._minBufferSize,0);b=m*k;j=s.min(4*b,j);if(b){for(var l=0;l<b;l+=k)this._doProcessBlock(g,l);l=g.splice(0,b);a.sigBytes-=j}return new q.init(l,j)},clone:function(){var b=r.clone.call(this);
|
||||
b._data=this._data.clone();return b},_minBufferSize:0});l.Hasher=g.extend({cfg:r.extend(),init:function(b){this.cfg=this.cfg.extend(b);this.reset()},reset:function(){g.reset.call(this);this._doReset()},update:function(b){this._append(b);this._process();return this},finalize:function(b){b&&this._append(b);return this._doFinalize()},blockSize:16,_createHelper:function(b){return function(a,g){return(new b.init(g)).finalize(a)}},_createHmacHelper:function(b){return function(a,g){return(new k.HMAC.init(b,
|
||||
g)).finalize(a)}}});var k=m.algo={};return m}(Math);
|
||||
(function(s){function p(a,k,b,h,l,j,m){a=a+(k&b|~k&h)+l+m;return(a<<j|a>>>32-j)+k}function m(a,k,b,h,l,j,m){a=a+(k&h|b&~h)+l+m;return(a<<j|a>>>32-j)+k}function l(a,k,b,h,l,j,m){a=a+(k^b^h)+l+m;return(a<<j|a>>>32-j)+k}function n(a,k,b,h,l,j,m){a=a+(b^(k|~h))+l+m;return(a<<j|a>>>32-j)+k}for(var r=CryptoJS,q=r.lib,v=q.WordArray,t=q.Hasher,q=r.algo,a=[],u=0;64>u;u++)a[u]=4294967296*s.abs(s.sin(u+1))|0;q=q.MD5=t.extend({_doReset:function(){this._hash=new v.init([1732584193,4023233417,2562383102,271733878])},
|
||||
_doProcessBlock:function(g,k){for(var b=0;16>b;b++){var h=k+b,w=g[h];g[h]=(w<<8|w>>>24)&16711935|(w<<24|w>>>8)&4278255360}var b=this._hash.words,h=g[k+0],w=g[k+1],j=g[k+2],q=g[k+3],r=g[k+4],s=g[k+5],t=g[k+6],u=g[k+7],v=g[k+8],x=g[k+9],y=g[k+10],z=g[k+11],A=g[k+12],B=g[k+13],C=g[k+14],D=g[k+15],c=b[0],d=b[1],e=b[2],f=b[3],c=p(c,d,e,f,h,7,a[0]),f=p(f,c,d,e,w,12,a[1]),e=p(e,f,c,d,j,17,a[2]),d=p(d,e,f,c,q,22,a[3]),c=p(c,d,e,f,r,7,a[4]),f=p(f,c,d,e,s,12,a[5]),e=p(e,f,c,d,t,17,a[6]),d=p(d,e,f,c,u,22,a[7]),
|
||||
c=p(c,d,e,f,v,7,a[8]),f=p(f,c,d,e,x,12,a[9]),e=p(e,f,c,d,y,17,a[10]),d=p(d,e,f,c,z,22,a[11]),c=p(c,d,e,f,A,7,a[12]),f=p(f,c,d,e,B,12,a[13]),e=p(e,f,c,d,C,17,a[14]),d=p(d,e,f,c,D,22,a[15]),c=m(c,d,e,f,w,5,a[16]),f=m(f,c,d,e,t,9,a[17]),e=m(e,f,c,d,z,14,a[18]),d=m(d,e,f,c,h,20,a[19]),c=m(c,d,e,f,s,5,a[20]),f=m(f,c,d,e,y,9,a[21]),e=m(e,f,c,d,D,14,a[22]),d=m(d,e,f,c,r,20,a[23]),c=m(c,d,e,f,x,5,a[24]),f=m(f,c,d,e,C,9,a[25]),e=m(e,f,c,d,q,14,a[26]),d=m(d,e,f,c,v,20,a[27]),c=m(c,d,e,f,B,5,a[28]),f=m(f,c,
|
||||
d,e,j,9,a[29]),e=m(e,f,c,d,u,14,a[30]),d=m(d,e,f,c,A,20,a[31]),c=l(c,d,e,f,s,4,a[32]),f=l(f,c,d,e,v,11,a[33]),e=l(e,f,c,d,z,16,a[34]),d=l(d,e,f,c,C,23,a[35]),c=l(c,d,e,f,w,4,a[36]),f=l(f,c,d,e,r,11,a[37]),e=l(e,f,c,d,u,16,a[38]),d=l(d,e,f,c,y,23,a[39]),c=l(c,d,e,f,B,4,a[40]),f=l(f,c,d,e,h,11,a[41]),e=l(e,f,c,d,q,16,a[42]),d=l(d,e,f,c,t,23,a[43]),c=l(c,d,e,f,x,4,a[44]),f=l(f,c,d,e,A,11,a[45]),e=l(e,f,c,d,D,16,a[46]),d=l(d,e,f,c,j,23,a[47]),c=n(c,d,e,f,h,6,a[48]),f=n(f,c,d,e,u,10,a[49]),e=n(e,f,c,d,
|
||||
C,15,a[50]),d=n(d,e,f,c,s,21,a[51]),c=n(c,d,e,f,A,6,a[52]),f=n(f,c,d,e,q,10,a[53]),e=n(e,f,c,d,y,15,a[54]),d=n(d,e,f,c,w,21,a[55]),c=n(c,d,e,f,v,6,a[56]),f=n(f,c,d,e,D,10,a[57]),e=n(e,f,c,d,t,15,a[58]),d=n(d,e,f,c,B,21,a[59]),c=n(c,d,e,f,r,6,a[60]),f=n(f,c,d,e,z,10,a[61]),e=n(e,f,c,d,j,15,a[62]),d=n(d,e,f,c,x,21,a[63]);b[0]=b[0]+c|0;b[1]=b[1]+d|0;b[2]=b[2]+e|0;b[3]=b[3]+f|0},_doFinalize:function(){var a=this._data,k=a.words,b=8*this._nDataBytes,h=8*a.sigBytes;k[h>>>5]|=128<<24-h%32;var l=s.floor(b/
|
||||
4294967296);k[(h+64>>>9<<4)+15]=(l<<8|l>>>24)&16711935|(l<<24|l>>>8)&4278255360;k[(h+64>>>9<<4)+14]=(b<<8|b>>>24)&16711935|(b<<24|b>>>8)&4278255360;a.sigBytes=4*(k.length+1);this._process();a=this._hash;k=a.words;for(b=0;4>b;b++)h=k[b],k[b]=(h<<8|h>>>24)&16711935|(h<<24|h>>>8)&4278255360;return a},clone:function(){var a=t.clone.call(this);a._hash=this._hash.clone();return a}});r.MD5=t._createHelper(q);r.HmacMD5=t._createHmacHelper(q)})(Math);
|
|
@ -1,19 +1,18 @@
|
|||
(function (globalScope) {
|
||||
define([], function () {
|
||||
|
||||
globalScope.ServerDiscovery = {
|
||||
return {
|
||||
|
||||
findServers: function (timeoutMs) {
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
return new Promise(function (resolve, reject) {
|
||||
|
||||
var servers = [];
|
||||
var servers = [];
|
||||
|
||||
// Expected server properties
|
||||
// Name, Id, Address, EndpointAddress (optional)
|
||||
|
||||
deferred.resolveWith(null, [servers]);
|
||||
return deferred.promise();
|
||||
// Expected server properties
|
||||
// Name, Id, Address, EndpointAddress (optional)
|
||||
resolve(servers);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
})(window);
|
||||
});
|
|
@ -1,43 +0,0 @@
|
|||
/*
|
||||
CryptoJS v3.1.2
|
||||
code.google.com/p/crypto-js
|
||||
(c) 2009-2013 by Jeff Mott. All rights reserved.
|
||||
code.google.com/p/crypto-js/wiki/License
|
||||
*/
|
||||
var CryptoJS = CryptoJS || function (e, m) {
|
||||
var p = {}, j = p.lib = {}, l = function () { }, f = j.Base = { extend: function (a) { l.prototype = this; var c = new l; a && c.mixIn(a); c.hasOwnProperty("init") || (c.init = function () { c.$super.init.apply(this, arguments) }); c.init.prototype = c; c.$super = this; return c }, create: function () { var a = this.extend(); a.init.apply(a, arguments); return a }, init: function () { }, mixIn: function (a) { for (var c in a) a.hasOwnProperty(c) && (this[c] = a[c]); a.hasOwnProperty("toString") && (this.toString = a.toString) }, clone: function () { return this.init.prototype.extend(this) } },
|
||||
n = j.WordArray = f.extend({
|
||||
init: function (a, c) { a = this.words = a || []; this.sigBytes = c != m ? c : 4 * a.length }, toString: function (a) { return (a || h).stringify(this) }, concat: function (a) { var c = this.words, q = a.words, d = this.sigBytes; a = a.sigBytes; this.clamp(); if (d % 4) for (var b = 0; b < a; b++) c[d + b >>> 2] |= (q[b >>> 2] >>> 24 - 8 * (b % 4) & 255) << 24 - 8 * ((d + b) % 4); else if (65535 < q.length) for (b = 0; b < a; b += 4) c[d + b >>> 2] = q[b >>> 2]; else c.push.apply(c, q); this.sigBytes += a; return this }, clamp: function () {
|
||||
var a = this.words, c = this.sigBytes; a[c >>> 2] &= 4294967295 <<
|
||||
32 - 8 * (c % 4); a.length = e.ceil(c / 4)
|
||||
}, clone: function () { var a = f.clone.call(this); a.words = this.words.slice(0); return a }, random: function (a) { for (var c = [], b = 0; b < a; b += 4) c.push(4294967296 * e.random() | 0); return new n.init(c, a) }
|
||||
}), b = p.enc = {}, h = b.Hex = {
|
||||
stringify: function (a) { var c = a.words; a = a.sigBytes; for (var b = [], d = 0; d < a; d++) { var f = c[d >>> 2] >>> 24 - 8 * (d % 4) & 255; b.push((f >>> 4).toString(16)); b.push((f & 15).toString(16)) } return b.join("") }, parse: function (a) {
|
||||
for (var c = a.length, b = [], d = 0; d < c; d += 2) b[d >>> 3] |= parseInt(a.substr(d,
|
||||
2), 16) << 24 - 4 * (d % 8); return new n.init(b, c / 2)
|
||||
}
|
||||
}, g = b.Latin1 = { stringify: function (a) { var c = a.words; a = a.sigBytes; for (var b = [], d = 0; d < a; d++) b.push(String.fromCharCode(c[d >>> 2] >>> 24 - 8 * (d % 4) & 255)); return b.join("") }, parse: function (a) { for (var c = a.length, b = [], d = 0; d < c; d++) b[d >>> 2] |= (a.charCodeAt(d) & 255) << 24 - 8 * (d % 4); return new n.init(b, c) } }, r = b.Utf8 = { stringify: function (a) { try { return decodeURIComponent(escape(g.stringify(a))) } catch (c) { throw Error("Malformed UTF-8 data"); } }, parse: function (a) { return g.parse(unescape(encodeURIComponent(a))) } },
|
||||
k = j.BufferedBlockAlgorithm = f.extend({
|
||||
reset: function () { this._data = new n.init; this._nDataBytes = 0 }, _append: function (a) { "string" == typeof a && (a = r.parse(a)); this._data.concat(a); this._nDataBytes += a.sigBytes }, _process: function (a) { var c = this._data, b = c.words, d = c.sigBytes, f = this.blockSize, h = d / (4 * f), h = a ? e.ceil(h) : e.max((h | 0) - this._minBufferSize, 0); a = h * f; d = e.min(4 * a, d); if (a) { for (var g = 0; g < a; g += f) this._doProcessBlock(b, g); g = b.splice(0, a); c.sigBytes -= d } return new n.init(g, d) }, clone: function () {
|
||||
var a = f.clone.call(this);
|
||||
a._data = this._data.clone(); return a
|
||||
}, _minBufferSize: 0
|
||||
}); j.Hasher = k.extend({
|
||||
cfg: f.extend(), init: function (a) { this.cfg = this.cfg.extend(a); this.reset() }, reset: function () { k.reset.call(this); this._doReset() }, update: function (a) { this._append(a); this._process(); return this }, finalize: function (a) { a && this._append(a); return this._doFinalize() }, blockSize: 16, _createHelper: function (a) { return function (c, b) { return (new a.init(b)).finalize(c) } }, _createHmacHelper: function (a) {
|
||||
return function (b, f) {
|
||||
return (new s.HMAC.init(a,
|
||||
f)).finalize(b)
|
||||
}
|
||||
}
|
||||
}); var s = p.algo = {}; return p
|
||||
}(Math);
|
||||
(function () {
|
||||
var e = CryptoJS, m = e.lib, p = m.WordArray, j = m.Hasher, l = [], m = e.algo.SHA1 = j.extend({
|
||||
_doReset: function () { this._hash = new p.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520]) }, _doProcessBlock: function (f, n) {
|
||||
for (var b = this._hash.words, h = b[0], g = b[1], e = b[2], k = b[3], j = b[4], a = 0; 80 > a; a++) {
|
||||
if (16 > a) l[a] = f[n + a] | 0; else { var c = l[a - 3] ^ l[a - 8] ^ l[a - 14] ^ l[a - 16]; l[a] = c << 1 | c >>> 31 } c = (h << 5 | h >>> 27) + j + l[a]; c = 20 > a ? c + ((g & e | ~g & k) + 1518500249) : 40 > a ? c + ((g ^ e ^ k) + 1859775393) : 60 > a ? c + ((g & e | g & k | e & k) - 1894007588) : c + ((g ^ e ^
|
||||
k) - 899497514); j = k; k = e; e = g << 30 | g >>> 2; g = h; h = c
|
||||
} b[0] = b[0] + h | 0; b[1] = b[1] + g | 0; b[2] = b[2] + e | 0; b[3] = b[3] + k | 0; b[4] = b[4] + j | 0
|
||||
}, _doFinalize: function () { var f = this._data, e = f.words, b = 8 * this._nDataBytes, h = 8 * f.sigBytes; e[h >>> 5] |= 128 << 24 - h % 32; e[(h + 64 >>> 9 << 4) + 14] = Math.floor(b / 4294967296); e[(h + 64 >>> 9 << 4) + 15] = b; f.sigBytes = 4 * e.length; this._process(); return this._hash }, clone: function () { var e = j.clone.call(this); e._hash = this._hash.clone(); return e }
|
||||
}); e.SHA1 = j._createHelper(m); e.HmacSHA1 = j._createHmacHelper(m)
|
||||
})();
|
|
@ -10,6 +10,7 @@
|
|||
if (defaultObject) {
|
||||
try {
|
||||
defaultObject.setItem('_test', '0');
|
||||
defaultObject.removeItem('_test');
|
||||
isDefaultAvailable = true;
|
||||
} catch (e) {
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
|
||||
LocalAssetManager.getCameraPhotos().done(function (photos) {
|
||||
LocalAssetManager.getCameraPhotos().then(function (photos) {
|
||||
|
||||
if (!photos.length) {
|
||||
deferred.resolve();
|
||||
|
@ -17,7 +17,7 @@
|
|||
|
||||
var apiClient = connectionManager.getApiClient(server.Id);
|
||||
|
||||
apiClient.getContentUploadHistory().done(function (uploadHistory) {
|
||||
apiClient.getContentUploadHistory().then(function (uploadHistory) {
|
||||
|
||||
photos = getFilesToUpload(photos, uploadHistory);
|
||||
|
||||
|
@ -25,11 +25,11 @@
|
|||
|
||||
uploadNext(photos, 0, server, apiClient, deferred);
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
deferred.reject();
|
||||
});
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
deferred.reject();
|
||||
});
|
||||
|
||||
|
@ -67,10 +67,10 @@
|
|||
return;
|
||||
}
|
||||
|
||||
uploadFile(files[index], apiClient).done(function () {
|
||||
uploadFile(files[index], apiClient).then(function () {
|
||||
|
||||
uploadNext(files, index + 1, server, apiClient, deferred);
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
uploadNext(files, index + 1, server, apiClient, deferred);
|
||||
});
|
||||
}
|
||||
|
@ -93,12 +93,12 @@
|
|||
|
||||
Logger.log('Uploading file to ' + url);
|
||||
|
||||
new MediaBrowser.FileUpload().upload(file, name, url).done(function () {
|
||||
new MediaBrowser.FileUpload().upload(file, name, url).then(function () {
|
||||
|
||||
Logger.log('File upload succeeded');
|
||||
deferred.resolve();
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
Logger.log('File upload failed');
|
||||
deferred.reject();
|
||||
|
|
|
@ -8,26 +8,26 @@
|
|||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
|
||||
reportOfflineActions(apiClient, serverInfo).done(function () {
|
||||
reportOfflineActions(apiClient, serverInfo).then(function () {
|
||||
|
||||
// Do the first data sync
|
||||
syncData(apiClient, serverInfo, false).done(function () {
|
||||
syncData(apiClient, serverInfo, false).then(function () {
|
||||
|
||||
// Download new content
|
||||
getNewMedia(apiClient, serverInfo, options).done(function () {
|
||||
getNewMedia(apiClient, serverInfo, options).then(function () {
|
||||
|
||||
// Do the second data sync
|
||||
syncData(apiClient, serverInfo, false).done(function () {
|
||||
syncData(apiClient, serverInfo, false).then(function () {
|
||||
|
||||
deferred.resolve();
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
return deferred.promise();
|
||||
};
|
||||
|
@ -40,24 +40,24 @@
|
|||
|
||||
require(['localassetmanager'], function () {
|
||||
|
||||
LocalAssetManager.getOfflineActions(serverInfo.Id).done(function (actions) {
|
||||
LocalAssetManager.getOfflineActions(serverInfo.Id).then(function (actions) {
|
||||
|
||||
if (!actions.length) {
|
||||
deferred.resolve();
|
||||
return;
|
||||
}
|
||||
|
||||
apiClient.reportOfflineActions(actions).done(function () {
|
||||
apiClient.reportOfflineActions(actions).then(function () {
|
||||
|
||||
LocalAssetManager.deleteOfflineActions(actions).done(function () {
|
||||
LocalAssetManager.deleteOfflineActions(actions).then(function () {
|
||||
|
||||
deferred.resolve();
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
|
@ -71,7 +71,7 @@
|
|||
|
||||
require(['localassetmanager'], function () {
|
||||
|
||||
LocalAssetManager.getServerItemIds(serverInfo.Id).done(function (localIds) {
|
||||
LocalAssetManager.getServerItemIds(serverInfo.Id).then(function (localIds) {
|
||||
|
||||
var request = {
|
||||
TargetId: apiClient.deviceId(),
|
||||
|
@ -79,13 +79,13 @@
|
|||
OfflineUserIds: (serverInfo.Users || []).map(function (u) { return u.Id; })
|
||||
};
|
||||
|
||||
apiClient.syncData(request).done(function (result) {
|
||||
apiClient.syncData(request).then(function (result) {
|
||||
|
||||
afterSyncData(apiClient, serverInfo, syncUserItemAccess, result, deferred);
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
|
@ -95,20 +95,20 @@
|
|||
|
||||
Logger.log('Begin afterSyncData');
|
||||
|
||||
removeLocalItems(syncDataResult, serverInfo.Id).done(function (result) {
|
||||
removeLocalItems(syncDataResult, serverInfo.Id).then(function (result) {
|
||||
|
||||
if (enableSyncUserItemAccess) {
|
||||
syncUserItemAccess(syncDataResult, serverInfo.Id).done(function () {
|
||||
syncUserItemAccess(syncDataResult, serverInfo.Id).then(function () {
|
||||
|
||||
deferred.resolve();
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
}
|
||||
else {
|
||||
deferred.resolve();
|
||||
}
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
deferred.resolve();
|
||||
}
|
||||
|
@ -134,10 +134,10 @@
|
|||
return;
|
||||
}
|
||||
|
||||
removeLocalItem(itemIdsToRemove[index], serverId).done(function () {
|
||||
removeLocalItem(itemIdsToRemove[index], serverId).then(function () {
|
||||
|
||||
removeNextLocalItem(itemIdsToRemove, index + 1, serverId, deferred);
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
removeNextLocalItem(itemIdsToRemove, index + 1, serverId, deferred);
|
||||
});
|
||||
}
|
||||
|
@ -150,11 +150,11 @@
|
|||
|
||||
require(['localassetmanager'], function () {
|
||||
|
||||
LocalAssetManager.removeLocalItem(itemId, serverId).done(function (localIds) {
|
||||
LocalAssetManager.removeLocalItem(itemId, serverId).then(function (localIds) {
|
||||
|
||||
deferred.resolve();
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
|
@ -166,11 +166,11 @@
|
|||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
|
||||
apiClient.getReadySyncItems(apiClient.deviceId()).done(function (jobItems) {
|
||||
apiClient.getReadySyncItems(apiClient.deviceId()).then(function (jobItems) {
|
||||
|
||||
getNextNewItem(jobItems, 0, apiClient, serverInfo, options, deferred);
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
return deferred.promise();
|
||||
}
|
||||
|
@ -194,7 +194,7 @@
|
|||
}
|
||||
};
|
||||
|
||||
getNewItem(jobItems[index], apiClient, serverInfo, options).done(goNext).fail(goNext);
|
||||
getNewItem(jobItems[index], apiClient, serverInfo, options).then(goNext, goNext);
|
||||
}
|
||||
|
||||
function getNewItem(jobItem, apiClient, serverInfo, options) {
|
||||
|
@ -206,32 +206,32 @@
|
|||
require(['localassetmanager'], function () {
|
||||
|
||||
var libraryItem = jobItem.Item;
|
||||
LocalAssetManager.createLocalItem(libraryItem, serverInfo, jobItem.OriginalFileName).done(function (localItem) {
|
||||
LocalAssetManager.createLocalItem(libraryItem, serverInfo, jobItem.OriginalFileName).then(function (localItem) {
|
||||
|
||||
downloadMedia(apiClient, jobItem, localItem, options).done(function (isQueued) {
|
||||
downloadMedia(apiClient, jobItem, localItem, options).then(function (isQueued) {
|
||||
|
||||
if (isQueued) {
|
||||
deferred.resolve();
|
||||
return;
|
||||
}
|
||||
|
||||
getImages(apiClient, jobItem, localItem).done(function () {
|
||||
getImages(apiClient, jobItem, localItem).then(function () {
|
||||
|
||||
getSubtitles(apiClient, jobItem, localItem).done(function () {
|
||||
getSubtitles(apiClient, jobItem, localItem).then(function () {
|
||||
|
||||
apiClient.reportSyncJobItemTransferred(jobItem.SyncJobItemId).done(function () {
|
||||
apiClient.reportSyncJobItemTransferred(jobItem.SyncJobItemId).then(function () {
|
||||
|
||||
deferred.resolve();
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
|
@ -254,19 +254,19 @@
|
|||
|
||||
options = options || {};
|
||||
|
||||
LocalAssetManager.downloadFile(url, localPath, options.enableBackgroundTransfer, options.enableNewDownloads).done(function (path, isQueued) {
|
||||
LocalAssetManager.downloadFile(url, localPath, options.enableBackgroundTransfer, options.enableNewDownloads).then(function (path, isQueued) {
|
||||
|
||||
if (isQueued) {
|
||||
deferred.resolveWith(null, [true]);
|
||||
return;
|
||||
}
|
||||
LocalAssetManager.addOrUpdateLocalItem(localItem).done(function () {
|
||||
LocalAssetManager.addOrUpdateLocalItem(localItem).then(function () {
|
||||
|
||||
deferred.resolveWith(null, [false]);
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
});
|
||||
|
||||
|
@ -334,7 +334,7 @@
|
|||
return;
|
||||
}
|
||||
|
||||
downloadImage(apiClient, serverId, itemId, imageTag, imageType).done(function () {
|
||||
downloadImage(apiClient, serverId, itemId, imageTag, imageType).then(function () {
|
||||
|
||||
// For the sake of simplicity, limit to one image
|
||||
deferred.resolve();
|
||||
|
@ -342,7 +342,7 @@
|
|||
|
||||
getNextImage(index + 1, apiClient, localItem, deferred);
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
}
|
||||
|
||||
function downloadImage(apiClient, serverId, itemId, imageTag, imageType) {
|
||||
|
@ -352,7 +352,7 @@
|
|||
|
||||
require(['localassetmanager'], function () {
|
||||
|
||||
LocalAssetManager.hasImage(serverId, itemId, imageTag).done(function (hasImage) {
|
||||
LocalAssetManager.hasImage(serverId, itemId, imageTag).then(function (hasImage) {
|
||||
|
||||
if (hasImage) {
|
||||
deferred.resolve();
|
||||
|
@ -365,11 +365,11 @@
|
|||
api_key: apiClient.accessToken()
|
||||
});
|
||||
|
||||
LocalAssetManager.downloadImage(imageUrl, serverId, itemId, imageTag).done(function () {
|
||||
LocalAssetManager.downloadImage(imageUrl, serverId, itemId, imageTag).then(function () {
|
||||
|
||||
deferred.resolve();
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
});
|
||||
});
|
||||
|
@ -412,11 +412,11 @@
|
|||
return;
|
||||
}
|
||||
|
||||
getItemSubtitle(file, apiClient, jobItem, localItem, mediaSource).done(function () {
|
||||
getItemSubtitle(file, apiClient, jobItem, localItem, mediaSource).then(function () {
|
||||
|
||||
getNextSubtitle(files, index + 1, apiClient, jobItem, localItem, mediaSource, deferred);
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
getNextSubtitle(files, index + 1, apiClient, jobItem, localItem, mediaSource, deferred);
|
||||
});
|
||||
}
|
||||
|
@ -445,14 +445,14 @@
|
|||
|
||||
require(['localassetmanager'], function () {
|
||||
|
||||
LocalAssetManager.downloadSubtitles(url, localItem, subtitleStream).done(function (subtitlePath) {
|
||||
LocalAssetManager.downloadSubtitles(url, localItem, subtitleStream).then(function (subtitlePath) {
|
||||
|
||||
subtitleStream.Path = subtitlePath;
|
||||
LocalAssetManager.addOrUpdateLocalItem(localItem).done(function () {
|
||||
LocalAssetManager.addOrUpdateLocalItem(localItem).then(function () {
|
||||
deferred.resolve();
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
|
@ -483,10 +483,10 @@
|
|||
return;
|
||||
}
|
||||
|
||||
syncUserAccessForItem(itemIds[index], syncDataResult).done(function () {
|
||||
syncUserAccessForItem(itemIds[index], syncDataResult).then(function () {
|
||||
|
||||
syncNextUserAccessForItem(itemIds, index + 1, syncDataResult, serverId, deferred);
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
syncNextUserAccessForItem(itemIds, index + 1, syncDataResult, serverId, deferred);
|
||||
});
|
||||
}
|
||||
|
@ -498,7 +498,7 @@
|
|||
|
||||
require(['localassetmanager'], function () {
|
||||
|
||||
LocalAssetManager.getUserIdsWithAccess(itemId, serverId).done(function (savedUserIdsWithAccess) {
|
||||
LocalAssetManager.getUserIdsWithAccess(itemId, serverId).then(function (savedUserIdsWithAccess) {
|
||||
|
||||
var userIdsWithAccess = syncDataResult.ItemUserAccess[itemId];
|
||||
|
||||
|
@ -508,12 +508,12 @@
|
|||
}
|
||||
else {
|
||||
|
||||
LocalAssetManager.saveUserIdsWithAccess(itemId, serverId, userIdsWithAccess).done(function () {
|
||||
LocalAssetManager.saveUserIdsWithAccess(itemId, serverId, userIdsWithAccess).then(function () {
|
||||
deferred.resolve();
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
}
|
||||
|
||||
}).fail(getOnFail(deferred));
|
||||
}, getOnFail(deferred));
|
||||
});
|
||||
|
||||
return deferred.promise();
|
||||
|
|
|
@ -31,11 +31,11 @@
|
|||
|
||||
require(['serversync'], function () {
|
||||
|
||||
new MediaBrowser.ServerSync(connectionManager).sync(server, options).done(function () {
|
||||
new MediaBrowser.ServerSync(connectionManager).sync(server, options).then(function () {
|
||||
|
||||
syncNext(servers, index + 1, options, deferred);
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
syncNext(servers, index + 1, options, deferred);
|
||||
});
|
||||
|
|
|
@ -24,10 +24,10 @@
|
|||
return;
|
||||
}
|
||||
|
||||
syncUser(users[index], apiClient).done(function () {
|
||||
syncUser(users[index], apiClient).then(function () {
|
||||
|
||||
syncNext(users, index + 1, deferred, apiClient, server);
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
syncNext(users, index + 1, deferred, apiClient, server);
|
||||
});
|
||||
}
|
||||
|
@ -36,26 +36,26 @@
|
|||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
|
||||
apiClient.getOfflineUser(user.Id).done(function (result) {
|
||||
apiClient.getOfflineUser(user.Id).then(function (result) {
|
||||
|
||||
require(['localassetmanager'], function () {
|
||||
|
||||
LocalAssetManager.saveOfflineUser(result).done(function () {
|
||||
LocalAssetManager.saveOfflineUser(result).then(function () {
|
||||
deferred.resolve();
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
deferred.resolve();
|
||||
});
|
||||
});
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
// TODO: We should only delete if there's a 401 response
|
||||
|
||||
require(['localassetmanager'], function () {
|
||||
|
||||
LocalAssetManager.deleteOfflineUser(user.Id).done(function () {
|
||||
LocalAssetManager.deleteOfflineUser(user.Id).then(function () {
|
||||
deferred.resolve();
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
deferred.resolve();
|
||||
});
|
||||
});
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
reportCapabilities: false
|
||||
};
|
||||
|
||||
connectionManager.connectToServer(server, connectionOptions).done(function (result) {
|
||||
connectionManager.connectToServer(server, connectionOptions).then(function (result) {
|
||||
|
||||
if (result.State == MediaBrowser.ConnectionState.SignedIn) {
|
||||
performSync(server, options, deferred);
|
||||
|
@ -30,7 +30,7 @@
|
|||
deferred.reject();
|
||||
}
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
Logger.log('Unable to connect to server id: ' + server.Id);
|
||||
deferred.reject();
|
||||
|
@ -62,13 +62,13 @@
|
|||
|
||||
require(['contentuploader'], function () {
|
||||
|
||||
new MediaBrowser.ContentUploader(connectionManager).uploadImages(server).done(function () {
|
||||
new MediaBrowser.ContentUploader(connectionManager).uploadImages(server).then(function () {
|
||||
|
||||
Logger.log("ContentUploaded succeeded to server: " + server.Id);
|
||||
|
||||
nextAction();
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
Logger.log("ContentUploaded failed to server: " + server.Id);
|
||||
|
||||
|
@ -88,13 +88,13 @@
|
|||
|
||||
var apiClient = connectionManager.getApiClient(server.Id);
|
||||
|
||||
new MediaBrowser.OfflineUserSync().sync(apiClient, server).done(function () {
|
||||
new MediaBrowser.OfflineUserSync().sync(apiClient, server).then(function () {
|
||||
|
||||
Logger.log("OfflineUserSync succeeded to server: " + server.Id);
|
||||
|
||||
syncMedia(server, options, deferred);
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
Logger.log("OfflineUserSync failed to server: " + server.Id);
|
||||
|
||||
|
@ -109,13 +109,13 @@
|
|||
|
||||
var apiClient = connectionManager.getApiClient(server.Id);
|
||||
|
||||
new MediaBrowser.MediaSync().sync(apiClient, server, options).done(function () {
|
||||
new MediaBrowser.MediaSync().sync(apiClient, server, options).then(function () {
|
||||
|
||||
Logger.log("MediaSync succeeded to server: " + server.Id);
|
||||
|
||||
deferred.resolve();
|
||||
|
||||
}).fail(function () {
|
||||
}, function () {
|
||||
|
||||
Logger.log("MediaSync failed to server: " + server.Id);
|
||||
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
(function (globalScope) {
|
||||
define([], function () {
|
||||
|
||||
function send(info) {
|
||||
|
||||
var deferred = DeferredBuilder.Deferred();
|
||||
deferred.resolve();
|
||||
return deferred.promise();
|
||||
return new Promise(function (resolve, reject) {
|
||||
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
|
||||
globalScope.WakeOnLan = {
|
||||
return {
|
||||
send: send
|
||||
};
|
||||
|
||||
})(window);
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue