From 4201f1065d9b84375dedaa9651bd9534ecdc2429 Mon Sep 17 00:00:00 2001 From: Luke Pulverenti Date: Sun, 27 Nov 2016 14:36:56 -0500 Subject: [PATCH] update caching headers --- .../emby-webcomponents/.bower.json | 8 +- .../emby-webcomponents/browser.js | 34 ++++- .../dialoghelper/dialoghelper.js | 4 + .../emby-button/emby-button.js | 2 +- .../emby-slider/emby-slider.css | 124 +++++++++--------- .../emby-slider/emby-slider.js | 4 + .../emby-webcomponents/guide/guide.css | 1 + .../viewmanager/viewcontainer-lite.js | 12 +- dashboard-ui/components/chromecasthelpers.js | 92 +------------ dashboard-ui/scripts/itemdetailpage.js | 2 +- 10 files changed, 118 insertions(+), 165 deletions(-) diff --git a/dashboard-ui/bower_components/emby-webcomponents/.bower.json b/dashboard-ui/bower_components/emby-webcomponents/.bower.json index feb70b56c..340f24d71 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/.bower.json +++ b/dashboard-ui/bower_components/emby-webcomponents/.bower.json @@ -14,12 +14,12 @@ }, "devDependencies": {}, "ignore": [], - "version": "1.4.351", - "_release": "1.4.351", + "version": "1.4.354", + "_release": "1.4.354", "_resolution": { "type": "version", - "tag": "1.4.351", - "commit": "0369e11308d178da80ef85d261cc75b84a273f13" + "tag": "1.4.354", + "commit": "3d8a04970adc76c6197984d6c2e29967cfa6b25e" }, "_source": "https://github.com/MediaBrowser/emby-webcomponents.git", "_target": "^1.2.1", diff --git a/dashboard-ui/bower_components/emby-webcomponents/browser.js b/dashboard-ui/bower_components/emby-webcomponents/browser.js index 8f4fb0d54..75131c8ae 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/browser.js +++ b/dashboard-ui/bower_components/emby-webcomponents/browser.js @@ -116,6 +116,38 @@ return false; } + var _supportsCssAnimation; + function supportsCssAnimation() { + + if (_supportsCssAnimation === true || _supportsCssAnimation === false) { + return _supportsCssAnimation; + } + + var animation = false, + animationstring = 'animation', + keyframeprefix = '', + domPrefixes = 'Webkit Moz O ms Khtml'.split(' '), + pfx = '', + elm = document.createElement('div'); + + if (elm.style.animationName !== undefined) { animation = true; } + + if (animation === false) { + for (var i = 0; i < domPrefixes.length; i++) { + if (elm.style[domPrefixes[i] + 'AnimationName'] !== undefined) { + pfx = domPrefixes[i]; + animationstring = pfx + 'Animation'; + keyframeprefix = '-' + pfx.toLowerCase() + '-'; + animation = true; + break; + } + } + } + + _supportsCssAnimation = animation; + return _supportsCssAnimation; + } + var uaMatch = function (ua) { ua = ua.toLowerCase(); @@ -196,7 +228,6 @@ if (userAgent.toLowerCase().indexOf("playstation 4") !== -1) { browser.ps4 = true; - browser.tv = true; } if (isMobile(userAgent)) { @@ -225,6 +256,7 @@ } browser.keyboard = hasKeyboard(browser); + browser.supportsCssAnimation = supportsCssAnimation; return browser; }); \ No newline at end of file diff --git a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js index 9dc002043..cab9e604d 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js +++ b/dashboard-ui/bower_components/emby-webcomponents/dialoghelper/dialoghelper.js @@ -13,6 +13,10 @@ return true; } + if (!browser.supportsCssAnimation()) { + return false; + } + // An indication of an older browser if (browser.noFlex) { return false; diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.js b/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.js index 64e7c19f6..473390175 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.js +++ b/dashboard-ui/bower_components/emby-webcomponents/emby-button/emby-button.js @@ -73,7 +73,7 @@ this.classList.add('emby-button'); - if (browser.safari || browser.firefox || browser.noFlex) { + if (browser.safari || browser.firefox) { this.classList.add('emby-button-noflex'); } diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.css b/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.css index bc8c64198..da14f584a 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.css +++ b/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.css @@ -83,78 +83,82 @@ _:-ms-input-placeholder, :root .mdl-slider { transition: transform 0.18s cubic-bezier(0.4, 0, 0.2, 1), border 0.18s cubic-bezier(0.4, 0, 0.2, 1), box-shadow 0.18s cubic-bezier(0.4, 0, 0.2, 1), background 0.28s cubic-bezier(0.4, 0, 0.2, 1); } - .mdl-slider::-moz-range-thumb { - -moz-appearance: none; - width: 1em; - height: 1em; - box-sizing: border-box; - border-radius: 50%; - background-image: none; - background: #52B54B; - border: none; - } +.slider-no-webkit-thumb::-webkit-slider-thumb { + opacity: 0 !important; +} - .mdl-slider:active::-webkit-slider-thumb { - background-image: none; - background: #52B54B; - -webkit-transform: scale(1.5); - transform: scale(1.5); - } +.mdl-slider::-moz-range-thumb { + -moz-appearance: none; + width: 1em; + height: 1em; + box-sizing: border-box; + border-radius: 50%; + background-image: none; + background: #52B54B; + border: none; +} - .mdl-slider:active::-moz-range-thumb { - background-image: none; - background: #52B54B; - transform: scale(1.5); - } +.mdl-slider:active::-webkit-slider-thumb { + background-image: none; + background: #52B54B; + -webkit-transform: scale(1.5); + transform: scale(1.5); +} - .mdl-slider:focus::-webkit-slider-thumb { - box-shadow: 0 0 0 10px rgba(82, 181, 75, 0.26); - } +.mdl-slider:active::-moz-range-thumb { + background-image: none; + background: #52B54B; + transform: scale(1.5); +} - .mdl-slider:focus::-moz-range-thumb { - box-shadow: 0 0 0 10px rgba(82, 181, 75, 0.26); - } +.mdl-slider:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 10px rgba(82, 181, 75, 0.26); +} - .mdl-slider::-ms-thumb { - width: 16px; - height: 16px; - border: none; - border-radius: 50%; - background: #52B54B; - } +.mdl-slider:focus::-moz-range-thumb { + box-shadow: 0 0 0 10px rgba(82, 181, 75, 0.26); +} - .mdl-slider[disabled]::-ms-thumb { - background: gray; - } +.mdl-slider::-ms-thumb { + width: 16px; + height: 16px; + border: none; + border-radius: 50%; + background: #52B54B; +} - .mdl-slider:disabled:focus::-webkit-slider-thumb, .mdl-slider:disabled:active::-webkit-slider-thumb, .mdl-slider:disabled::-webkit-slider-thumb { - -webkit-transform: scale(0.667); - transform: scale(0.667); - background: rgba(0,0,0, 0.26); - } +.mdl-slider[disabled]::-ms-thumb { + background: gray; +} - .mdl-slider:disabled:focus::-moz-range-thumb, .mdl-slider:disabled:active::-moz-range-thumb, .mdl-slider:disabled::-moz-range-thumb { - transform: scale(0.667); - background: rgba(0,0,0, 0.26); - } +.mdl-slider:disabled:focus::-webkit-slider-thumb, .mdl-slider:disabled:active::-webkit-slider-thumb, .mdl-slider:disabled::-webkit-slider-thumb { + -webkit-transform: scale(0.667); + transform: scale(0.667); + background: rgba(0,0,0, 0.26); +} - .mdl-slider:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower { - background-color: #444; - left: -6px; - } +.mdl-slider:disabled:focus::-moz-range-thumb, .mdl-slider:disabled:active::-moz-range-thumb, .mdl-slider:disabled::-moz-range-thumb { + transform: scale(0.667); + background: rgba(0,0,0, 0.26); +} - .mdl-slider:disabled + .mdl-slider__background-flex > .mdl-slider__background-upper { - left: 6px; - } +.mdl-slider:disabled + .mdl-slider__background-flex > .mdl-slider__background-lower { + background-color: #444; + left: -6px; +} - .mdl-slider:disabled::-ms-fill-lower { - margin-right: 6px; - background: linear-gradient(to right, transparent, transparent 25px, rgba(30,30,30, 0.7) 25px, rgba(30,30,30, 0.7) 0); - } +.mdl-slider:disabled + .mdl-slider__background-flex > .mdl-slider__background-upper { + left: 6px; +} - .mdl-slider:disabled::-ms-fill-upper { - margin-left: 6px; - } +.mdl-slider:disabled::-ms-fill-lower { + margin-right: 6px; + background: linear-gradient(to right, transparent, transparent 25px, rgba(30,30,30, 0.7) 25px, rgba(30,30,30, 0.7) 0); +} + +.mdl-slider:disabled::-ms-fill-upper { + margin-left: 6px; +} .mdl-slider__ie-container { height: 18px; diff --git a/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.js b/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.js index 152d842d7..258aaaa12 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.js +++ b/dashboard-ui/bower_components/emby-webcomponents/emby-slider/emby-slider.js @@ -57,6 +57,10 @@ this.classList.add('mdl-slider'); this.classList.add('mdl-js-slider'); + if (browser.noFlex) { + this.classList.add('slider-no-webkit-thumb') + } + var containerElement = this.parentNode; containerElement.classList.add('mdl-slider__container'); diff --git a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css index 73a7957f6..52efbb2bb 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css +++ b/dashboard-ui/bower_components/emby-webcomponents/guide/guide.css @@ -270,6 +270,7 @@ .programGrid { padding-bottom: 4px; + flex-grow: 1; } .timeslotHeader { diff --git a/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js b/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js index ff33a60cc..dff7a7657 100644 --- a/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js +++ b/dashboard-ui/bower_components/emby-webcomponents/viewmanager/viewcontainer-lite.js @@ -9,10 +9,6 @@ define(['browser', 'dom', 'css!./viewcontainer-lite'], function (browser, dom) { function enableAnimation() { - if (browser.animate) { - return true; - } - if (browser.tv) { return false; } @@ -21,7 +17,7 @@ define(['browser', 'dom', 'css!./viewcontainer-lite'], function (browser, dom) { return false; } - return browser.edge && !browser.mobile; + return browser.supportsCssAnimation(); } function loadView(options) { @@ -102,7 +98,7 @@ define(['browser', 'dom', 'css!./viewcontainer-lite'], function (browser, dom) { function animate(newAnimatedPage, oldAnimatedPage, transition, isBack) { - if (enableAnimation() && oldAnimatedPage && newAnimatedPage.animate) { + if (enableAnimation() && oldAnimatedPage) { if (transition === 'slide') { return slide(newAnimatedPage, oldAnimatedPage, transition, isBack); } else if (transition === 'fade') { @@ -262,10 +258,6 @@ define(['browser', 'dom', 'css!./viewcontainer-lite'], function (browser, dom) { selectedPageIndex = -1; } - if (enableAnimation()) { - require(['webAnimations']); - } - return { loadView: loadView, tryRestoreView: tryRestoreView, diff --git a/dashboard-ui/components/chromecasthelpers.js b/dashboard-ui/components/chromecasthelpers.js index 0dae48cdf..def7031de 100644 --- a/dashboard-ui/components/chromecasthelpers.js +++ b/dashboard-ui/components/chromecasthelpers.js @@ -1,4 +1,4 @@ -define([], function () { +define(['events'], function (events) { 'use strict'; // LinkParser @@ -42,52 +42,6 @@ + "(?:\\:(?:[a-z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-f0-9]{2})){1,25})?" // followed by optional password (: + 1-25 normal or url escaped characters) + "\\@)"; - var hostnames = "(?:[a-z0-9][a-z0-9\\-]{0,64}\\.)+"; // named host - var unknownTLDs = "(?:[a-z]{2,})"; - - // unicode regexp isn't really supported in JS. It can be emulated with XRegExp - // but that creates a pretty big performance hit that - // is very noticable on mobile devices. We'll add an option in the future to - // support them. - var XRegExp_hostnames = "(?:[\\p{L}0-9][\\p{L}0-9\\-]{0,64}\\.)+"; // named host - var XRegExp_unknownTLDs = "(?:[\\p{L}]{2,})"; // top level domain - - // strings that start with one of these are more likely to be URLs - var knownSubdomains = "(?:(?:www|ftp)\\.)"; - - // update from here when needed: https://data.iana.org/TLD/tlds-alpha-by-domain.txt - var knownTLDs = "(?:" - + "A[CDEFGILMNOQRSTUWXZ]|ACADEMY|ACCOUNTANTS|ACTOR|AERO|AGENCY|AIRFORCE|ARCHI|ARPA|ASIA|ASSOCIATES|AUDIO|AUTOS|AXA" - + "|B[ABDEFGHIJMNORSTVWYZ]|BAR|BARGAINS|BAYERN|BEER|BERLIN|BEST|BID|BIKE|BIZ|BLACK|BLACKFRIDAY|BLUE|BOUTIQUE|BUILD|BUILDERS|BUZZ" - + "|C[ACDFGHIKLMNORUVWXYZ]|CAB|CAMERA|CAMP|CAPITAL|CARDS|CARE|CAREER|CAREERS|CASH|CAT|CATERING|CENTER|CEO|CHEAP|CHRISTMAS|CHURCH|CITIC|CLAIMS|CLEANING|CLINIC|CLOTHING|CLUB|CODES|COFFEE|COLLEGE|COLOGNE|COM|COMMUNITY|COMPANYCOMPUTER|CONDOS|CONSTRUCTION|CONSULTING|CONTRACTORS|COOKING|COOL|COOP|COUNTRY|CREDIT|CREDITCARD|CRUISES" - + "|D[EJKMOZ]|DANCE|DATING|DEMOCRAT|DENTAL|DESI|DIAMONDS|DIGITAL|DIRECTORY|DISCOUNT|DNP|DOMAINS" - + "|E[CEGRSTU]|EDU|EDUCATION|EMAIL|ENGINEERING|ENTERPRISES|EQUIPMENT|ESTATE|EUS|EVENTS|EXCHANGE|EXPERT|EXPOSED" - + "|F[IJKMOR]|FAIL|FARM|FEEDBACK|FINANCE|FINANCIAL|FISH|FISHING|FITNESS|FLIGHTS|FLORIST|FOO|FOUNDATION|FROGANS|FUND|FURNITURE|FUTBOL" - + "|G[ABDEFGHILMNPQRSTUWY]|GAL|GALLERY|GIFT|GLASS|GLOBO|GMO|GOP|GOV|GRAPHICS|GRATIS|GRIPE|GUIDE|GUITARS|GURU" - + "|H[KMNRTU]|HAUS|HIPHOP|HOLDINGS|HOLIDAY|HOMES|HORSE|HOUSE" - + "|I[DELMNOQRST]|IMMOBILIEN|INDUSTRIES|INFO|INK|INSTITUTE|INSURE|INT|INTERNATIONAL|INVESTMENTS" - + "|J[EMOP]|JETZT|JOBS|JUEGOS" - + "|K[EGHIMNPRWYZ]|KAUFEN|KIM|KITCHEN|KIWI|KOELN|KRED" - + "|L[ABCIKRSTUVY]|LAND|LEASE|LIFE|LIGHTING|LIMITED|LIMO|LINK|LOANS|LONDON|LUXE|LUXURY" - + "|M[ACDEGHKLMNOPQRSTUVWXYZ]|MAISON|MANAGEMENT|MANGO|MARKETING|MEDIA|MEET|MENU|MIAMI|MIL|MOBI|MODA|MOE|MONASH|MOSCOW|MOTORCYCLES|MUSEUM" - + "|N[ACEFGILOPRUZ]|NAGOYA|NAME|NET|NEUSTAR|NINJA|NYC" - + "|O[M]|OKINAWA|ONL|ORG" - + "|P[AEFGHKLMNRSTWY]|PARIS|PARTNERS|PARTS|PHOTO|PHOTOGRAPHY|PHOTOS|PICS|PICTURES|PINK|PLUMBING|POST|PRO|PRODUCTIONS|PROPERTIES|PUB" - + "|Q[A]|QPON|QUEBEC" - + "|R[EOSUW]|RECIPES|RED|REISE|REISEN|REN|RENTALS|REPAIR|REPORT|REST|REVIEWS|RICH|RIO|ROCKS|RODEO|RUHR|RYUKYU" - + "|S[ABCDEGHIJKLMNORTUVXYZ]|SAARLAND|SCHULE|SERVICES|SEXY|SHIKSHA|SHOES|SINGLES|SOCIAL|SOHU|SOLAR|SOLUTIONS|SOY|SUPPLIES|SUPPLY|SUPPORT|SURGERY|SYSTEMS" - + "|T[CDFGHJKLMNOPRTVWZ]|TATTOO|TAX|TECHNOLOGY|TEL|TIENDA|TIPS|TODAY|TOKYO|TOOLS|TOWN|TOYS|TRADE|TRAINING|TRAVEL" - + "|U[AGKSYZ]|UNIVERSITY|UNO" - + "|V[ACEGINU]|VACATIONS|VEGAS|VENTURES|VERSICHERUNG|VIAJES|VILLAS|VISION|VODKA|VOTE|VOTING|VOTO|VOYAGE" - + "|W[FS]|WANG|WATCH|WEBCAM|WED|WIEN|WIKI|WORKS|WTC|WTF" - + "|XXX|XYZ" - + "|Y[ET]|YACHTS|YOKOHAMA" - + "|Z[AMW]|ZONE" - // IDN TLDs in both punycode and unicode format - + "|XN--(?:3BST00M|3DS443G|3E0B707E|45BRJ9C|55QW42G|55QX5D|6FRZ82G|6QQ986B3XL|80ADXHKS|80AO21A|80ASEHDB|80ASWG|90A3AC|C1AVG|CG4BKI|CLCHC0EA0B2G2A9GCD|CZR694B|CZRU2D|D1ACJ3B|FIQ228C5HS|FIQ64B|FIQS8S|FIQZ9S|FPCRJ9C3D|FZC2C9E2C|GECRJ9C|H2BRJ9C|I1B6B1A6A2E|IO0A7I|J1AMH|J6W193G|KPRW13D|KPRY57D|L1ACC|LGBBAT1AD8J|MGB9AWBF|MGBA3A4F16A|MGBAAM7A8H|MGBAB2BD|MGBAYH7GPA|MGBBH1A71E|MGBC0A9AZCG|MGBERP4A5D4AR|MGBX4CD0AB|NGBC5AZD|NQV7F|NQV7FS00EMA|O3CW4H|OGBPF8FL|P1AI|PGBS0DH|Q9JYB4C|RHQV96G|S9BRJ9C|SES554G|UNUP4Y|WGBH1C|WGBL6A|XKC2AL3HYE2A|XKC2DL3A5EE0H|YFRO4I67O|YGBI2AMMX|ZFR164B)" - + "|\u0627\u0644\u0627\u0631\u062F\u0646|\u4E2D\u570B|\u4E2D\u56FD|\u0627\u0645\u0627\u0631\u0627\u062A|\u9999\u6E2F|\u0627\u06CC\u0631\u0627\u0646|\u0DBD\u0D82\u0D9A\u0DCF|\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8|\u0645\u0635\u0631|\u0642\u0637\u0631|\u0420\u0424|\u0633\u0648\u0631\u064A\u0629|\u53F0\u7063|\u53F0\u6E7E" - + ")"; - // IPv6 Regex http://forums.intermapper.com/viewtopic.php?t=452 // by Dartware, LLC is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License // http://intermapper.com/ @@ -117,45 +71,7 @@ // If we have a recognized protocol at the beginning of the URL, we're // more relaxed about what we accept, because we assume the user wants // this to be a URL, and we're not accidentally matching human language - + protocols - - // optional username:password@ - + credentials + "?" - - // loose definition of a host name - // any valid unicode sequence is ok for domain - // this is our failsafe. If we don't recognize a TLD (because new TLDs are - // constantly being added) and the host name doesn't start with a common - // prefix like www, then this should catch anything that begins with a - // valid protocol (above) - + hostnames + unknownTLDs - - // ============================ - // OR no protocol and a stricter form of a host name, with something that - // we recognize as a likely URL. This will hopefully keep us from matching - // typos like.this as a URL. - + "|(?!" + protocols + ")" - - // optional username:password@ - + credentials + "?" - - + "(?:" - - // ends with known TLD - + hostnames + knownTLDs - - // OR begins with a known common subdomain - + "|" + knownSubdomains + hostnames + unknownTLDs - - // OR contains a slash after the TLD (very likely a URL, unlikely to exist in common language) - + "|" + hostnames + unknownTLDs + "(?=\\/)" // use a lookahead so we don't pre-match the path below - - + ")" - - // ============================ - // OR we'll also accept IPv6 and IPv4 addresses, with or without a protocol, since it's highly - // unlikely that these would appear in normal language without being intended as a URL - + "|" + protocols + "?" + + protocols + "?" // optional username:password@ + credentials + "?" @@ -309,8 +225,8 @@ return null; } - Events.on(ConnectionManager, 'localusersignedin', clearCache); - Events.on(ConnectionManager, 'localusersignedout', clearCache); + events.on(ConnectionManager, 'localusersignedin', clearCache); + events.on(ConnectionManager, 'localusersignedout', clearCache); return { getServerAddress: getServerAddress diff --git a/dashboard-ui/scripts/itemdetailpage.js b/dashboard-ui/scripts/itemdetailpage.js index 77af3ed51..1bd77bb7a 100644 --- a/dashboard-ui/scripts/itemdetailpage.js +++ b/dashboard-ui/scripts/itemdetailpage.js @@ -994,7 +994,7 @@ var context = inferContext(item); - var href = LibraryBrowser.getHref(item.Studios[i], context); + var href = LibraryBrowser.getHref(item.Studios[0], context); html += ' on ' + item.Studios[0].Name + ''; } }