diff --git a/dashboard-ui/apiclient/alt/bean.js b/dashboard-ui/apiclient/alt/bean.js
deleted file mode 100644
index 2a200cf27e..0000000000
--- a/dashboard-ui/apiclient/alt/bean.js
+++ /dev/null
@@ -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
-});
diff --git a/dashboard-ui/apiclient/alt/events.js b/dashboard-ui/apiclient/alt/events.js
deleted file mode 100644
index 401879681b..0000000000
--- a/dashboard-ui/apiclient/alt/events.js
+++ /dev/null
@@ -1,31 +0,0 @@
-(function (globalScope) {
-
- globalScope.Events = {
-
- on: function (obj, eventName, selector, fn) {
-
- bean.on(obj, eventName, selector, fn);
- },
-
- off: function (obj, eventName, selector, fn) {
-
- bean.off(obj, eventName, selector);
- },
-
- trigger: function (obj, eventName, params) {
-
- // 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);
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/doc-ready/.bower.json b/dashboard-ui/bower_components/doc-ready/.bower.json
index d4d75eca65..adda4287b4 100644
--- a/dashboard-ui/bower_components/doc-ready/.bower.json
+++ b/dashboard-ui/bower_components/doc-ready/.bower.json
@@ -39,6 +39,6 @@
"commit": "cec8e49744a1e18b14a711eea77e201bb70de544"
},
"_source": "git://github.com/desandro/doc-ready.git",
- "_target": "~1.0.4",
+ "_target": "1.0.x",
"_originalSource": "doc-ready"
}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/get-style-property/.bower.json b/dashboard-ui/bower_components/get-style-property/.bower.json
index d943fa3b04..973f1966c0 100644
--- a/dashboard-ui/bower_components/get-style-property/.bower.json
+++ b/dashboard-ui/bower_components/get-style-property/.bower.json
@@ -31,6 +31,6 @@
"commit": "34fc5e4a0f252964ed2790138b8d7d30d04b55c1"
},
"_source": "git://github.com/desandro/get-style-property.git",
- "_target": "~1.0.4",
+ "_target": "1.x",
"_originalSource": "get-style-property"
}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/iron-media-query/.bower.json b/dashboard-ui/bower_components/iron-media-query/.bower.json
index 545011f11c..d9ad827eb6 100644
--- a/dashboard-ui/bower_components/iron-media-query/.bower.json
+++ b/dashboard-ui/bower_components/iron-media-query/.bower.json
@@ -1,6 +1,6 @@
{
"name": "iron-media-query",
- "version": "1.0.7",
+ "version": "1.0.8",
"description": "Lets you bind to a CSS media query",
"authors": [
"The Polymer Authors"
@@ -29,11 +29,11 @@
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
"main": "iron-media-query.html",
- "_release": "1.0.7",
+ "_release": "1.0.8",
"_resolution": {
"type": "version",
- "tag": "v1.0.7",
- "commit": "a78cdbadb6de48857d176b964ab906a12872f2d3"
+ "tag": "v1.0.8",
+ "commit": "3f916be171af7a3e03eb019acdfea71055d3c744"
},
"_source": "git://github.com/PolymerElements/iron-media-query.git",
"_target": "^1.0.0",
diff --git a/dashboard-ui/bower_components/iron-media-query/.travis.yml b/dashboard-ui/bower_components/iron-media-query/.travis.yml
index 1b56c5ad57..b680b6900d 100644
--- a/dashboard-ui/bower_components/iron-media-query/.travis.yml
+++ b/dashboard-ui/bower_components/iron-media-query/.travis.yml
@@ -11,7 +11,7 @@ env:
- secure: LgnZP4BNGBkTZhf8Vr7r9LdrOwq2/58TqqYkFFloEGBRT6HmumNSRwNbIwOh1U9jSTVkqjC2rn4G27u4XlEIs+QTD2PVSSEKy7Vbn0KxSNCvCGaOB1ZaxWTwZa7nkg09ZFRCHGh+WIbuV+BxyzsjOqlN82GSzFNSb3rxhqDM6dU=
node_js: 4
addons:
- firefox: '42.0'
+ firefox: latest
apt:
sources:
- google-chrome
diff --git a/dashboard-ui/bower_components/iron-media-query/bower.json b/dashboard-ui/bower_components/iron-media-query/bower.json
index 9b2f3ae5a8..c69307215b 100644
--- a/dashboard-ui/bower_components/iron-media-query/bower.json
+++ b/dashboard-ui/bower_components/iron-media-query/bower.json
@@ -1,6 +1,6 @@
{
"name": "iron-media-query",
- "version": "1.0.7",
+ "version": "1.0.8",
"description": "Lets you bind to a CSS media query",
"authors": [
"The Polymer Authors"
diff --git a/dashboard-ui/bower_components/iron-media-query/index.html b/dashboard-ui/bower_components/iron-media-query/index.html
index 7aee5c1a2c..174afb5b5e 100644
--- a/dashboard-ui/bower_components/iron-media-query/index.html
+++ b/dashboard-ui/bower_components/iron-media-query/index.html
@@ -1,11 +1,11 @@
diff --git a/dashboard-ui/bower_components/iron-media-query/iron-media-query.html b/dashboard-ui/bower_components/iron-media-query/iron-media-query.html
index 8631bab190..60cb84b89b 100644
--- a/dashboard-ui/bower_components/iron-media-query/iron-media-query.html
+++ b/dashboard-ui/bower_components/iron-media-query/iron-media-query.html
@@ -58,25 +58,26 @@ Example:
type: Boolean,
value: false
},
-
+
/**
* @type {function(MediaQueryList)}
- */
+ */
_boundMQHandler: {
value: function() {
return this.queryHandler.bind(this);
}
},
-
+
/**
* @type {MediaQueryList}
- */
+ */
_mq: {
value: null
}
},
attached: function() {
+ this.style.display = 'none';
this.queryChanged();
},
diff --git a/dashboard-ui/bower_components/iron-media-query/test/index.html b/dashboard-ui/bower_components/iron-media-query/test/index.html
index 7baa57f6df..30e527f53c 100644
--- a/dashboard-ui/bower_components/iron-media-query/test/index.html
+++ b/dashboard-ui/bower_components/iron-media-query/test/index.html
@@ -1,15 +1,11 @@
-
-
-
-
-
+-->
Tests
@@ -19,12 +15,12 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
-
-
+
+
+
diff --git a/dashboard-ui/bower_components/iron-selector/.bower.json b/dashboard-ui/bower_components/iron-selector/.bower.json
index ebb18c5b7b..52d44c1907 100644
--- a/dashboard-ui/bower_components/iron-selector/.bower.json
+++ b/dashboard-ui/bower_components/iron-selector/.bower.json
@@ -36,7 +36,7 @@
"tag": "v1.0.8",
"commit": "e9a66727f3da0446f04956d4e4f1dcd51cdec2ff"
},
- "_source": "git://github.com/polymerelements/iron-selector.git",
+ "_source": "git://github.com/PolymerElements/iron-selector.git",
"_target": "^1.0.0",
- "_originalSource": "polymerelements/iron-selector"
+ "_originalSource": "PolymerElements/iron-selector"
}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/paper-collapse-item/.bower.json b/dashboard-ui/bower_components/paper-collapse-item/.bower.json
new file mode 100644
index 0000000000..c6ac242663
--- /dev/null
+++ b/dashboard-ui/bower_components/paper-collapse-item/.bower.json
@@ -0,0 +1,46 @@
+{
+ "name": "paper-collapse-item",
+ "version": "1.0.5",
+ "authors": [
+ "collaborne"
+ ],
+ "description": "A Material Design item with header and collapsible content (Polymer 1.x)",
+ "main": "paper-collapse-item.html",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "paper",
+ "material design",
+ "lists",
+ "item"
+ ],
+ "license": "Apache 2",
+ "homepage": "http://www.apache.org/licenses/LICENSE-2.0",
+ "ignore": [
+ "**/.*"
+ ],
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-icons": "PolymerElements/iron-icons#^1.0.0",
+ "iron-collapse": "PolymerElements/iron-collapse#^1.0.0",
+ "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
+ "paper-item": "PolymerElements/paper-item#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0"
+ },
+ "devDependencies": {
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "*",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ },
+ "_release": "1.0.5",
+ "_resolution": {
+ "type": "version",
+ "tag": "1.0.5",
+ "commit": "26aef07fcfd1c09265916f6a384cb2adfbb34727"
+ },
+ "_source": "git://github.com/Collaborne/paper-collapse-item.git",
+ "_target": "~1.0.5",
+ "_originalSource": "paper-collapse-item",
+ "_direct": true
+}
\ No newline at end of file
diff --git a/dashboard-ui/bower_components/paper-collapse-item/LICENSE b/dashboard-ui/bower_components/paper-collapse-item/LICENSE
new file mode 100644
index 0000000000..8f71f43fee
--- /dev/null
+++ b/dashboard-ui/bower_components/paper-collapse-item/LICENSE
@@ -0,0 +1,202 @@
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "{}"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright {yyyy} {name of copyright owner}
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
diff --git a/dashboard-ui/bower_components/paper-collapse-item/bower.json b/dashboard-ui/bower_components/paper-collapse-item/bower.json
new file mode 100644
index 0000000000..36ce7b1a03
--- /dev/null
+++ b/dashboard-ui/bower_components/paper-collapse-item/bower.json
@@ -0,0 +1,36 @@
+{
+ "name": "paper-collapse-item",
+ "version": "1.0.5",
+ "authors": [
+ "collaborne"
+ ],
+ "description": "A Material Design item with header and collapsible content (Polymer 1.x)",
+ "main": "paper-collapse-item.html",
+ "keywords": [
+ "web-components",
+ "polymer",
+ "paper",
+ "material design",
+ "lists",
+ "item"
+ ],
+ "license": "Apache 2",
+ "homepage": "http://www.apache.org/licenses/LICENSE-2.0",
+ "ignore": [
+ "**/.*"
+ ],
+ "dependencies": {
+ "polymer": "Polymer/polymer#^1.0.0",
+ "iron-icon": "PolymerElements/iron-icon#^1.0.0",
+ "iron-icons": "PolymerElements/iron-icons#^1.0.0",
+ "iron-collapse": "PolymerElements/iron-collapse#^1.0.0",
+ "paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0",
+ "paper-item": "PolymerElements/paper-item#^1.0.0",
+ "paper-styles": "PolymerElements/paper-styles#^1.0.0"
+ },
+ "devDependencies": {
+ "test-fixture": "PolymerElements/test-fixture#^1.0.0",
+ "web-component-tester": "*",
+ "webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
+ }
+}
diff --git a/dashboard-ui/bower_components/paper-collapse-item/demo/index.html b/dashboard-ui/bower_components/paper-collapse-item/demo/index.html
new file mode 100644
index 0000000000..cb814cf8b2
--- /dev/null
+++ b/dashboard-ui/bower_components/paper-collapse-item/demo/index.html
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+ Lots of very interesting content.
+
+
+ Lots of very interesting content.
+
+
+ Lots of very interesting content.
+
+
+
diff --git a/dashboard-ui/bower_components/paper-collapse-item/doc/screenshot.png b/dashboard-ui/bower_components/paper-collapse-item/doc/screenshot.png
new file mode 100644
index 0000000000..f7321c4e4c
Binary files /dev/null and b/dashboard-ui/bower_components/paper-collapse-item/doc/screenshot.png differ
diff --git a/dashboard-ui/bower_components/paper-collapse-item/paper-collapse-item.html b/dashboard-ui/bower_components/paper-collapse-item/paper-collapse-item.html
new file mode 100644
index 0000000000..4e5830a10e
--- /dev/null
+++ b/dashboard-ui/bower_components/paper-collapse-item/paper-collapse-item.html
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+