diff --git a/dashboard-ui/bower_components/polymer/polymer.html b/dashboard-ui/bower_components/polymer/polymer.html index de1a20bc98..c3add1f243 100644 --- a/dashboard-ui/bower_components/polymer/polymer.html +++ b/dashboard-ui/bower_components/polymer/polymer.html @@ -586,7 +586,8 @@ prevent = dy > dx; prevent = dx > dy; } if (prevent) { -ev.preventDefault(); +// This prevents side scrolling in safari +//ev.preventDefault(); } else { Gestures.prevent('track'); } diff --git a/dashboard-ui/livetvchannels.html b/dashboard-ui/livetvchannels.html index 8b2e4bdd94..c4b36c85d6 100644 --- a/dashboard-ui/livetvchannels.html +++ b/dashboard-ui/livetvchannels.html @@ -18,43 +18,33 @@
-
- +
-
- -
-
-
${HeaderFilters} - -
-
- diff --git a/dashboard-ui/scripts/librarybrowser.js b/dashboard-ui/scripts/librarybrowser.js index 7c2c1ce8df..40e55ad497 100644 --- a/dashboard-ui/scripts/librarybrowser.js +++ b/dashboard-ui/scripts/librarybrowser.js @@ -2508,10 +2508,12 @@ var tooltipPlayed = Globalize.translate('TooltipPlayed'); if (item.MediaType == 'Video' || item.Type == 'Series' || item.Type == 'Season' || item.Type == 'BoxSet' || item.Type == 'Playlist') { - if (userData.Played) { - html += LibraryBrowser.getUserDataButtonHtml('markPlayed', itemId, 'btnUserItemRating btnUserItemRatingOn', 'check', tooltipPlayed); - } else { - html += LibraryBrowser.getUserDataButtonHtml('markPlayed', itemId, 'btnUserItemRating', 'check', tooltipPlayed); + if (item.Type != 'TvChannel') { + if (userData.Played) { + html += LibraryBrowser.getUserDataButtonHtml('markPlayed', itemId, 'btnUserItemRating btnUserItemRatingOn', 'check', tooltipPlayed); + } else { + html += LibraryBrowser.getUserDataButtonHtml('markPlayed', itemId, 'btnUserItemRating', 'check', tooltipPlayed); + } } } } diff --git a/dashboard-ui/scripts/livetvchannels.js b/dashboard-ui/scripts/livetvchannels.js index 855d41474f..4855086b37 100644 --- a/dashboard-ui/scripts/livetvchannels.js +++ b/dashboard-ui/scripts/livetvchannels.js @@ -8,11 +8,9 @@ function getChannelsHtml(channels) { - return LibraryBrowser.getPosterViewHtml({ + return LibraryBrowser.getListViewHtml({ items: channels, - shape: "smallBackdrop", - centerText: true, - lazy: true + smallIcon: true }); } @@ -42,6 +40,7 @@ var elem = page.querySelector('#items'); elem.innerHTML = html; ImageLoader.lazyChildren(elem); + $(elem).trigger('create'); $('.btnNextPage', page).on('click', function () { query.StartIndex += query.Limit; diff --git a/dashboard-ui/scripts/livetvsuggested.js b/dashboard-ui/scripts/livetvsuggested.js index 500424a6bb..9dcdcc3daf 100644 --- a/dashboard-ui/scripts/livetvsuggested.js +++ b/dashboard-ui/scripts/livetvsuggested.js @@ -1,26 +1,26 @@ (function ($, document) { function loadRecommendedPrograms(page) { - + Dashboard.showLoadingMsg(); ApiClient.getLiveTvRecommendedPrograms({ userId: Dashboard.getCurrentUserId(), IsAiring: true, - limit: 18 + limit: 16 }).done(function (result) { var html = LibraryBrowser.getPosterViewHtml({ - items: result.Items, shape: "auto", showTitle: true, showParentTitle: true, overlayText: true, coverImage: true, - lazy: true + lazy: true, + overlayPlayButton: true }); @@ -42,7 +42,7 @@ userId: Dashboard.getCurrentUserId(), IsAiring: false, HasAired: false, - limit: 9, + limit: 8, IsMovie: false, IsSports: false @@ -56,7 +56,8 @@ showParentTitle: true, overlayText: true, coverImage: true, - lazy: true + lazy: true, + overlayMoreButton: true }); @@ -70,7 +71,7 @@ userId: Dashboard.getCurrentUserId(), IsAiring: false, HasAired: false, - limit: 9, + limit: 8, IsMovie: true }).done(function (result) { @@ -81,7 +82,8 @@ showTitle: false, coverImage: true, overlayText: false, - lazy: true + lazy: true, + overlayMoreButton: true }); var elem = page.querySelector('.upcomingTvMovieItems'); @@ -94,7 +96,7 @@ userId: Dashboard.getCurrentUserId(), IsAiring: false, HasAired: false, - limit: 9, + limit: 8, IsSports: true }).done(function (result) { @@ -105,7 +107,8 @@ showTitle: false, coverImage: true, overlayText: false, - lazy: true + lazy: true, + overlayMoreButton: true }); var elem = page.querySelector('.upcomingSportsItems'); diff --git a/dashboard-ui/scripts/sections.js b/dashboard-ui/scripts/sections.js index 528bd44531..3aa20e1861 100644 --- a/dashboard-ui/scripts/sections.js +++ b/dashboard-ui/scripts/sections.js @@ -407,7 +407,8 @@ centerText: true, context: 'channels', lazy: true, - showDetailsMenu: true + showDetailsMenu: true, + overlayPlayButton: true }); html += ''; html += ''; diff --git a/dashboard-ui/vulcanize-out.html b/dashboard-ui/vulcanize-out.html index a6173fed05..e7277318d6 100644 --- a/dashboard-ui/vulcanize-out.html +++ b/dashboard-ui/vulcanize-out.html @@ -199,25 +199,30 @@ var DomModule = function () { return document.createElement('dom-module'); }; DomModule.prototype = Object.create(HTMLElement.prototype); -DomModule.prototype.constructor = DomModule; -DomModule.prototype.createdCallback = function () { -var id = this.id || this.getAttribute('name') || this.getAttribute('is'); +Polymer.Base.extend(DomModule.prototype, { +constructor: DomModule, +createdCallback: function () { +this.register(); +}, +register: function (id) { +var id = id || this.id || this.getAttribute('name') || this.getAttribute('is'); if (id) { this.id = id; modules[id] = this; } -}; -DomModule.prototype.import = function (id, slctr) { +}, +import: function (id, selector) { var m = modules[id]; if (!m) { forceDocumentUpgrade(); m = modules[id]; } -if (m && slctr) { -m = m.querySelector(slctr); +if (m && selector) { +m = m.querySelector(selector); } return m; -}; +} +}); var cePolyfill = window.CustomElements && !CustomElements.useNative; if (cePolyfill) { var ready = CustomElements.ready; @@ -513,7 +518,7 @@ _setupDebouncers: function () { this._debouncers = {}; }, debounce: function (jobName, callback, wait) { -this._debouncers[jobName] = Polymer.Debounce.call(this, this._debouncers[jobName], callback, wait); +return this._debouncers[jobName] = Polymer.Debounce.call(this, this._debouncers[jobName], callback, wait); }, isDebouncerActive: function (jobName) { var debouncer = this._debouncers[jobName]; @@ -532,7 +537,7 @@ debouncer.stop(); } } }); -Polymer.version = '1.0.7'; +Polymer.version = '1.0.8'; Polymer.Base._addFeature({ _registerFeatures: function () { this._prepIs(); @@ -972,7 +977,6 @@ var nativeRemoveChild = Element.prototype.removeChild; var nativeAppendChild = Element.prototype.appendChild; var nativeCloneNode = Element.prototype.cloneNode; var nativeImportNode = Document.prototype.importNode; -var dirtyRoots = []; var DomApi = function (node) { this.node = node; if (this.patch) { @@ -981,17 +985,12 @@ this.patch(); }; DomApi.prototype = { flush: function () { -for (var i = 0, host; i < dirtyRoots.length; i++) { -host = dirtyRoots[i]; -host.flushDebouncer('_distribute'); -} -dirtyRoots = []; +Polymer.dom.flush(); }, _lazyDistribute: function (host) { if (host.shadyRoot && host.shadyRoot._distributionClean) { host.shadyRoot._distributionClean = false; -host.debounce('_distribute', host._distributeContent); -dirtyRoots.push(host); +Polymer.dom.addDebouncer(host.debounce('_distribute', host._distributeContent)); } }, appendChild: function (node) { @@ -1427,32 +1426,44 @@ configurable: true }, textContent: { get: function () { -if (this.node.nodeType === Node.TEXT_NODE) { +var nt = this.node.nodeType; +if (nt === Node.TEXT_NODE || nt === Node.COMMENT_NODE) { return this.node.textContent; } else { -return Array.prototype.map.call(this.childNodes, function (c) { -return c.textContent; -}).join(''); +var tc = []; +for (var i = 0, cn = this.childNodes, c; c = cn[i]; i++) { +if (c.nodeType !== Node.COMMENT_NODE) { +tc.push(c.textContent); +} +} +return tc.join(''); } }, set: function (text) { +var nt = this.node.nodeType; +if (nt === Node.TEXT_NODE || nt === Node.COMMENT_NODE) { +this.node.textContent = text; +} else { this._clear(); if (text) { this.appendChild(document.createTextNode(text)); } +} }, configurable: true }, innerHTML: { get: function () { -if (this.node.nodeType === Node.TEXT_NODE) { +var nt = this.node.nodeType; +if (nt === Node.TEXT_NODE || nt === Node.COMMENT_NODE) { return null; } else { return getInnerHTML(this.node); } }, set: function (text) { -if (this.node.nodeType !== Node.TEXT_NODE) { +var nt = this.node.nodeType; +if (nt !== Node.TEXT_NODE || nt !== Node.COMMENT_NODE) { this._clear(); var d = document.createElement('div'); d.innerHTML = text; @@ -1565,7 +1576,43 @@ return Polymer.EventApi.factory(obj); return factory(obj, patch); } }; -Polymer.dom.flush = DomApi.prototype.flush; +Polymer.Base.extend(Polymer.dom, { +_flushGuard: 0, +_FLUSH_MAX: 100, +_needsTakeRecords: !Polymer.Settings.useNativeCustomElements, +_debouncers: [], +_finishDebouncer: null, +flush: function () { +for (var i = 0; i < this._debouncers.length; i++) { +this._debouncers[i].complete(); +} +if (this._finishDebouncer) { +this._finishDebouncer.complete(); +} +this._flushPolyfills(); +if (this._debouncers.length && this._flushGuard < this._FLUSH_MAX) { +this._flushGuard++; +this.flush(); +} else { +if (this._flushGuard >= this._FLUSH_MAX) { +console.warn('Polymer.dom.flush aborted. Flush may not be complete.'); +} +this._flushGuard = 0; +} +}, +_flushPolyfills: function () { +if (this._needsTakeRecords) { +CustomElements.takeRecords(); +} +}, +addDebouncer: function (debouncer) { +this._debouncers.push(debouncer); +this._finishDebouncer = Polymer.Debounce(this._finishDebouncer, this._finishFlush); +}, +_finishFlush: function () { +Polymer.dom._debouncers = []; +} +}); function getLightChildren(node) { var children = node._lightChildren; return children ? children : node.childNodes; @@ -1691,6 +1738,7 @@ this.shadyRoot._dirtyRoots = []; }, _finishDistribute: function () { if (this._useContent) { +this.shadyRoot._distributionClean = true; if (hasInsertionPoint(this.shadyRoot)) { this._composeTree(); } else { @@ -1704,7 +1752,6 @@ this._updateChildNodes(this, children); } } this.shadyRoot._hasDistributed = true; -this.shadyRoot._distributionClean = true; } }, elementMatches: function (selector, node) { @@ -2502,6 +2549,16 @@ var recognizers = Gestures.recognizers; for (var i = 0, r; i < recognizers.length; i++) { r = recognizers[i]; if (gs[r.name] && !handled[r.name]) { +if (r.flow && r.flow.start.indexOf(ev.type) > -1) { +if (r.reset) { +r.reset(); +} +} +} +} +for (var i = 0, r; i < recognizers.length; i++) { +r = recognizers[i]; +if (gs[r.name] && !handled[r.name]) { handled[r.name] = true; r[type](ev); } @@ -2532,8 +2589,10 @@ prevent = dy > dx; prevent = dx > dy; } if (prevent) { - //This breaks scrolling in safari - //ev.preventDefault(); +// This prevents side scrolling in safari +//ev.preventDefault(); +} else { +Gestures.prevent('track'); } } }, @@ -2675,6 +2734,16 @@ deps: [ 'touchmove', 'touchend' ], +flow: { +start: [ +'mousedown', +'touchstart' +], +end: [ +'mouseup', +'touchend' +] +}, emits: ['track'], info: { x: 0, @@ -2690,7 +2759,7 @@ this.moves.push(move); }, prevent: false }, -clearInfo: function () { +reset: function () { this.info.state = 'start'; this.info.started = false; this.info.moves = []; @@ -2729,7 +2798,6 @@ if (self.info.started) { Gestures.prevent('tap'); movefn(e); } -self.clearInfo(); document.removeEventListener('mousemove', movefn); document.removeEventListener('mouseup', upfn); }; @@ -2769,7 +2837,6 @@ y: ct.clientY }); this.fire(t, ct); } -this.clearInfo(); }, fire: function (target, touch) { var secondlast = this.info.moves[this.info.moves.length - 2]; @@ -2804,6 +2871,16 @@ deps: [ 'touchstart', 'touchend' ], +flow: { +start: [ +'mousedown', +'touchstart' +], +end: [ +'click', +'touchend' +] +}, emits: ['tap'], info: { x: NaN, @@ -2844,7 +2921,6 @@ sourceEvent: e }); } } -this.reset(); } }); var DIRECTION_MAP = { @@ -3541,7 +3617,12 @@ this._effectEffects('__static__', null, this._propertyEffects.__static__); }); Polymer.Base._addFeature({ _setupConfigure: function (initialConfig) { -this._config = initialConfig || {}; +this._config = {}; +for (var i in initialConfig) { +if (initialConfig[i] !== undefined) { +this._config[i] = initialConfig[i]; +} +} this._handlers = []; }, _marshalAttributes: function () { @@ -3670,8 +3751,9 @@ var array; var last = parts[parts.length - 1]; if (parts.length > 1) { for (var i = 0; i < parts.length - 1; i++) { -prop = prop[parts[i]]; -if (array) { +var part = parts[i]; +prop = prop[part]; +if (array && parseInt(part) == part) { parts[i] = Polymer.Collection.get(array).getKey(prop); } if (!prop) { @@ -3679,15 +3761,13 @@ return; } array = Array.isArray(prop) ? prop : null; } -if (array) { +if (array && parseInt(last) == last) { var coll = Polymer.Collection.get(array); var old = prop[last]; var key = coll.getKey(old); -if (key) { parts[i] = key; coll.setItem(key, value); } -} prop[last] = value; if (!root) { this.notifyPath(parts.join('.'), value); @@ -4783,6 +4863,7 @@ Polymer.Base._addFeature({ _prepStyleProperties: function () { this._ownStylePropertyNames = this._styles ? propertyUtils.decorateStyles(this._styles) : []; }, +customStyle: {}, _setupStyleProperties: function () { this.customStyle = {}; }, @@ -5014,15 +5095,8 @@ styleTransformer.documentRule(rule); }()); Polymer.Templatizer = { properties: { __hideTemplateChildren__: { observer: '_showHideChildren' } }, -_templatizerStatic: { -count: 0, -callbacks: {}, -debouncer: null -}, _instanceProps: Polymer.nob, -created: function () { -this._templatizerId = this._templatizerStatic.count++; -}, +_parentPropPrefix: '_parent_', templatize: function (template) { if (!template._content) { template._content = template.content; @@ -5066,20 +5140,10 @@ n.__hideTemplateChildren__ = hide; } }, _debounceTemplate: function (fn) { -this._templatizerStatic.callbacks[this._templatizerId] = fn.bind(this); -this._templatizerStatic.debouncer = Polymer.Debounce(this._templatizerStatic.debouncer, this._flushTemplates.bind(this, true)); +Polymer.dom.addDebouncer(this.debounce('_debounceTemplate', fn)); }, _flushTemplates: function (debouncerExpired) { -var db = this._templatizerStatic.debouncer; -while (debouncerExpired || db && db.finish) { -db.stop(); -var cbs = this._templatizerStatic.callbacks; -this._templatizerStatic.callbacks = {}; -for (var id in cbs) { -cbs[id](); -} -debouncerExpired = false; -} +Polymer.dom.flush(); }, _customPrepEffects: function (archetype) { var parentProps = archetype._parentProps; @@ -5119,7 +5183,7 @@ if (template != this) { Polymer.Bind.prepareModel(proto); } for (prop in parentProps) { -var parentProp = '_parent_' + prop; +var parentProp = this._parentPropPrefix + prop; var effects = [ { kind: 'function', @@ -5143,8 +5207,9 @@ this._forwardParentProp(prop, value); }; }, _createHostPropEffector: function (prop) { +var prefix = this._parentPropPrefix; return function (source, value) { -this.dataHost['_parent_' + prop] = value; +this.dataHost[prefix + prop] = value; }; }, _createInstancePropEffector: function (prop) { @@ -5176,12 +5241,12 @@ var dot = path.indexOf('.'); var root = dot < 0 ? path : path.slice(0, dot); dataHost._forwardInstancePath.call(dataHost, this, path, value); if (root in dataHost._parentProps) { -dataHost.notifyPath('_parent_' + path, value); +dataHost.notifyPath(dataHost._parentPropPrefix + path, value); } }, _pathEffector: function (path, value, fromAbove) { if (this._forwardParentPath) { -if (path.indexOf('_parent_') === 0) { +if (path.indexOf(this._parentPropPrefix) === 0) { this._forwardParentPath(path.substring(8), value); } } @@ -5229,7 +5294,7 @@ stamp: function (model) { model = model || {}; if (this._parentProps) { for (var prop in this._parentProps) { -model[prop] = this['_parent_' + prop]; +model[prop] = this[this._parentPropPrefix + prop]; } } return new this.ctor(model, this); @@ -5945,7 +6010,16 @@ Polymer({ is: 'dom-bind', extends: 'template', created: function () { -Polymer.ImportStatus.whenLoaded(this._readySelf.bind(this)); +Polymer.ImportStatus.whenLoaded(this._markImportsReady.bind(this)); +}, +_ensureReady: function () { +if (!this._readied) { +this._readySelf(); +} +}, +_markImportsReady: function () { +this._importsReady = true; +this._ensureReady(); }, _registerFeatures: function () { this._prepConstructor(); @@ -5978,6 +6052,15 @@ config[prop] = this[prop]; this._setupConfigure = this._setupConfigure.bind(this, config); }, attached: function () { +if (this._importsReady) { +this.render(); +} +}, +detached: function () { +this._removeChildren(); +}, +render: function () { +this._ensureReady(); if (!this._children) { this._template = this; this._prepAnnotations(); @@ -5990,9 +6073,6 @@ this._children = Array.prototype.slice.call(this.root.childNodes); } this._insertChildren(); this.fire('dom-change'); -}, -detached: function () { -this._removeChildren(); } });