update shared components

This commit is contained in:
Luke Pulverenti 2016-05-17 13:44:17 -04:00
parent 30db5a009c
commit 489dc97aab
33 changed files with 368 additions and 212 deletions

View File

@ -16,12 +16,12 @@
},
"devDependencies": {},
"ignore": [],
"version": "1.3.40",
"_release": "1.3.40",
"version": "1.3.41",
"_release": "1.3.41",
"_resolution": {
"type": "version",
"tag": "1.3.40",
"commit": "f5d6ceea8a3fccab8b2794df5aabb78309ca57a5"
"tag": "1.3.41",
"commit": "b99e1de0001cc6c56af28b79cf0561f1cb25743f"
},
"_source": "https://github.com/MediaBrowser/emby-webcomponents.git",
"_target": "^1.2.0",

View File

@ -0,0 +1,55 @@
{
"ValueSpecialEpisodeName": "Special - {0}",
"Share": "Del",
"ServerUpdateNeeded": "Denne Emby server b\u00f8r opdateres. For at downloade den nyeste version bes\u00f8g venligst {0}",
"LiveTvGuideRequiresUnlock": "Live TV Guiden er p\u00e5 nuv\u00e6rende tidspunkt begr\u00e6nset til {0} kanaler. Klik p\u00e5 \"L\u00e5s op\" knappen for at f\u00e5 mere at vide omkring hvordan du kan f\u00e5 den fulde oplevelse.",
"AttributeNew": "Ny",
"AttributePremiere": "Premiere",
"AttributeLive": "Live",
"TrackCount": "{0} numre",
"ItemCount": "{0} elementer",
"ValueSeriesYearToPresent": "{0}-Nu",
"ReleaseYearValue": "Udgivelses\u00e5r: {0}",
"OriginalAirDateValue": "Originalt sendt: {0}",
"EndsAtValue": "Slutter {0}",
"OptionSundayShort": "S\u00f8n.",
"OptionMondayShort": "Man.",
"OptionTuesdayShort": "Tirs.",
"OptionWednesdayShort": "Ons.",
"OptionThursdayShort": "Tors.",
"OptionFridayShort": "Fre.",
"OptionSaturdayShort": "L\u00f8r.",
"HeaderSelectDate": "V\u00e6lg dato",
"ButtonOk": "Ok",
"ButtonCancel": "Annuller",
"ButtonGotIt": "Forst\u00e5et",
"RecordingScheduled": "Optagelse planlagt.",
"HeaderNewRecording": "Ny optagelse",
"Sunday": "S\u00f8ndag",
"Monday": "Mandag",
"Tuesday": "Tirsdag",
"Wednesday": "Onsdag",
"Thursday": "Torsdag",
"Friday": "Fredag",
"Saturday": "L\u00f8rdag",
"Days": "Dage",
"RecordSeries": "Optag serie",
"LabelPrePaddingMinutes": "Start minutter f\u00f8r:",
"LabelPostPaddingMinutes": "Stop optagelse minutter efter:",
"RecordOnAllChannels": "Optag fra alle kanaler",
"RecordAnytime": "Optag p\u00e5 ethvert tidspunkt",
"RecordOnlyNewEpisodes": "Optag kun nye episoder",
"HeaderBecomeProjectSupporter": "F\u00e5 Emby Premiere",
"HeaderEnjoyDayTrial": "Nyd en 14-dages gratis pr\u00f8veperiode",
"MessageActiveSubscriptionRequiredSeriesRecordings": "Et aktivt Emby Premiere abonnement er n\u00f8dvendigt for at oprette automatiserede optagelser af serier.",
"OptionConvertRecordingsToStreamingFormat": "Konverter automatisk optagelser til et streamingvenligt format",
"OptionConvertRecordingsToStreamingFormatHelp": "Optagelser vil l\u00f8bende blive konverteret til MP4 for nemmere afspilning p\u00e5 dine enheder.",
"FeatureRequiresEmbyPremiere": "Denne funktion kr\u00e6ver et aktivt Emby Premiere abonnement.",
"Record": "Optag",
"Save": "Gem",
"Edit": "Rediger",
"Download": "Hent",
"Advanced": "Avanceret",
"Refresh": "Opdater",
"RefreshQueued": "Opdatering sat i k\u00f8"
}

View File

@ -34,8 +34,8 @@
"Saturday": "\u0441\u0435\u043d\u0431\u0456",
"Days": "\u041a\u04af\u043d\u0434\u0435\u0440",
"RecordSeries": "\u0422\u0435\u043b\u0435\u0445\u0438\u043a\u0430\u044f\u043d\u044b \u0436\u0430\u0437\u0443",
"PrePaddingMinutes": "\u0410\u043b\u0493\u0430 \u0448\u0435\u0433\u0456\u043d\u0456\u0441, \u043c\u0438\u043d:",
"PostPaddingMinutes": "\u0410\u0440\u0442\u049b\u0430 \u0448\u0435\u0433\u0456\u043d\u0456\u0441, \u043c\u0438\u043d",
"LabelPrePaddingMinutes": "\u0410\u043b\u0493\u0430 \u0448\u0435\u0433\u0456\u043d\u0456\u0441, \u043c\u0438\u043d:",
"LabelPostPaddingMinutes": "\u0410\u0440\u0442\u049b\u0430 \u0448\u0435\u0433\u0456\u043d\u0456\u0441, \u043c\u0438\u043d:",
"RecordOnAllChannels": "\u0411\u0430\u0440\u043b\u044b\u049b \u0430\u0440\u043d\u0430\u043b\u0430\u0440\u0434\u0430\u043d \u0436\u0430\u0437\u044b\u043f \u0430\u043b\u0443",
"RecordAnytime": "\u04d8\u0440 \u0443\u0430\u049b\u044b\u0442\u0442\u0430 \u0436\u0430\u0437\u044b\u043f \u0430\u043b\u0443",
"RecordOnlyNewEpisodes": "\u0422\u0435\u043a \u049b\u0430\u043d\u0430 \u0436\u0430\u04a3\u0430 \u0431\u04e9\u043b\u0456\u043c\u0434\u0435\u0440\u0434\u0456 \u0436\u0430\u0437\u044b\u043f \u0430\u043b\u0443",
@ -46,8 +46,10 @@
"OptionConvertRecordingsToStreamingFormatHelp": "\u0416\u0430\u0437\u0431\u0430\u043b\u0430\u0440 \u049b\u04b1\u0440\u044b\u043b\u0493\u044b\u043b\u0430\u0440\u044b\u04a3\u044b\u0437\u0434\u0430 \u043e\u04a3\u0430\u0439 \u043e\u0439\u043d\u0430\u0442\u0443 \u04af\u0448\u0456\u043d \u043d\u0430\u049b\u0442\u044b \u0443\u0430\u049b\u044b\u0442\u0442\u0430 MP4 \u043f\u0456\u0448\u0456\u043c\u0456\u043d\u0435 \u0442\u04af\u0440\u043b\u0435\u043d\u0434\u0456\u0440\u0456\u043b\u0435\u0434\u0456.",
"FeatureRequiresEmbyPremiere": "\u041e\u0441\u044b \u049b\u04b1\u0440\u0430\u043c\u0434\u0430\u0441 \u04af\u0448\u0456\u043d \u0431\u0435\u043b\u0441\u0435\u043d\u0434\u0456 Emby Premiere \u0436\u0430\u0437\u044b\u043b\u044b\u043c\u044b \u049b\u0430\u0436\u0435\u0442",
"Record": "\u0416\u0430\u0437\u0443",
"Save": "\u0421\u0430\u049b\u0442\u0430\u0443",
"Edit": "\u04e8\u04a3\u0434\u0435\u0443",
"Download": "\u0416\u04af\u043a\u0442\u0435\u043f \u0430\u043b\u0443",
"Advanced": "\u041a\u0435\u04a3\u0435\u0439\u0442\u0456\u043b\u0433\u0435\u043d",
"Refresh": "\u0416\u0430\u04a3\u0493\u044b\u0440\u0442\u0443",
"RefreshQueued": "\u0416\u0430\u04a3\u0493\u044b\u0440\u0442\u0443 \u043a\u0435\u0437\u0435\u043a\u0442\u0435"
"RefreshQueued": "\u0416\u0430\u04a3\u0493\u044b\u0440\u0442\u0443 \u043a\u0435\u0437\u0435\u043a\u0442\u0435."
}

View File

@ -0,0 +1,55 @@
{
"ValueSpecialEpisodeName": "Speciaal - {0}",
"Share": "Delen",
"ServerUpdateNeeded": "Deze Emby Server moet worden bijgewerkt. Om de laatste versie te downloaden, gaat u naar {0}",
"LiveTvGuideRequiresUnlock": "De Live TV Gids is momenteel gelimiteerd tot {0} kanalen. Klik op de Geef vrij knop om te zien hoe u deze limiet op kunt heffen.",
"AttributeNew": "Nieuw",
"AttributePremiere": "Premi\u00e8re",
"AttributeLive": "Live",
"TrackCount": "{0} nummers",
"ItemCount": "{0} items",
"ValueSeriesYearToPresent": "{0}-Heden",
"ReleaseYearValue": "Jaar van uitgifte: {0}",
"OriginalAirDateValue": "Originele uitzenddatum: {0}",
"EndsAtValue": "Eindigt om: {0}",
"OptionSundayShort": "Zo",
"OptionMondayShort": "Ma",
"OptionTuesdayShort": "Di",
"OptionWednesdayShort": "Wo",
"OptionThursdayShort": "Do",
"OptionFridayShort": "Vr",
"OptionSaturdayShort": "Za",
"HeaderSelectDate": "Selecteer Datum",
"ButtonOk": "Ok",
"ButtonCancel": "Annuleren",
"ButtonGotIt": "Begrepen",
"RecordingScheduled": "Opname schema",
"HeaderNewRecording": "Nieuwe opname",
"Sunday": "Zondag",
"Monday": "Maandag",
"Tuesday": "Dinsdag",
"Wednesday": "Woensdag",
"Thursday": "Donderdag",
"Friday": "Vrijdag",
"Saturday": "Zaterdag",
"Days": "Dagen",
"RecordSeries": "Series Opnemen",
"LabelPrePaddingMinutes": "Tijd voor het programma (Minuten):",
"LabelPostPaddingMinutes": "Tijd na het programma (Minuten):",
"RecordOnAllChannels": "Op alle kanalen opnemen",
"RecordAnytime": "Op elk tijdstip opnemen",
"RecordOnlyNewEpisodes": "Alleen nieuwe afleveringen opnemen",
"HeaderBecomeProjectSupporter": "Verkrijg Emby Premiere",
"HeaderEnjoyDayTrial": "Geniet van een 14-daagse gratis proefversie",
"MessageActiveSubscriptionRequiredSeriesRecordings": "Er is een actief Emby Premiere abonnement benodigd om een automatische serie opname aan te maken.",
"OptionConvertRecordingsToStreamingFormat": "Opnamen automatisch converteren naar een streaming formaat",
"OptionConvertRecordingsToStreamingFormatHelp": "Opnames zullen direct worden omgezet naar MP4 voor het eenvoudig afspelen op uw apparaten.",
"FeatureRequiresEmbyPremiere": "Deze functie vereist een actieve Emby Premiere abonnement.",
"Record": "Opnemen",
"Save": "Opslaan",
"Edit": "Bewerken",
"Download": "Downloaden",
"Advanced": "Geavanceerd",
"Refresh": "Vernieuwen",
"RefreshQueued": "Vernieuwen wachtrij"
}

View File

@ -34,8 +34,8 @@
"Saturday": "\u0441\u0443\u0431\u0431\u043e\u0442\u0430",
"Days": "\u0414\u043d\u0438",
"RecordSeries": "\u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0435\u0440\u0438\u0430\u043b",
"PrePaddingMinutes": "\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0442\u0431\u0438\u0432\u043a\u0430, \u043c\u0438\u043d:",
"PostPaddingMinutes": "\u041a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u043e\u0442\u0431\u0438\u0432\u043a\u0430, \u043c\u0438\u043d:",
"LabelPrePaddingMinutes": "\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u043e\u0442\u0431\u0438\u0432\u043a\u0430, \u043c\u0438\u043d:",
"LabelPostPaddingMinutes": "\u041a\u043e\u043d\u0435\u0447\u043d\u0430\u044f \u043e\u0442\u0431\u0438\u0432\u043a\u0430, \u043c\u0438\u043d:",
"RecordOnAllChannels": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u043e \u0432\u0441\u0435\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432",
"RecordAnytime": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0435 \u0432\u0440\u0435\u043c\u044f",
"RecordOnlyNewEpisodes": "\u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0432\u044b\u0435 \u044d\u043f\u0438\u0437\u043e\u0434\u044b",
@ -46,8 +46,10 @@
"OptionConvertRecordingsToStreamingFormatHelp": "\u0417\u0430\u043f\u0438\u0441\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432 MP4 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043d\u0430 \u0432\u0430\u0448\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445.",
"FeatureRequiresEmbyPremiere": "\u0414\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u043f\u043e\u0434\u043f\u0438\u0441\u043a\u0430 Emby Premiere.",
"Record": "\u0417\u0430\u043f\u0438\u0441\u0430\u0442\u044c",
"Save": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c",
"Edit": "\u041f\u0440\u0430\u0432\u0438\u0442\u044c",
"Download": "\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c",
"Advanced": "\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0435",
"Refresh": "\u041f\u043e\u0434\u043d\u043e\u0432\u0438\u0442\u044c",
"RefreshQueued": "\u041f\u043e\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438"
"RefreshQueued": "\u041f\u043e\u0434\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u0438."
}

View File

@ -264,7 +264,7 @@ define(['browser'], function (browser) {
currentUrls = [];
}
if (enableAnimation() && !browser.animate) {
if (enableAnimation() && !document.documentElement.animate) {
require(['webAnimations']);
}

View File

@ -30,14 +30,14 @@
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
"ignore": [],
"homepage": "https://github.com/PolymerElements/iron-a11y-keys-behavior",
"homepage": "https://github.com/polymerelements/iron-a11y-keys-behavior",
"_release": "1.1.2",
"_resolution": {
"type": "version",
"tag": "v1.1.2",
"commit": "0c2330c229a6fd3d200e2b84147ec6f94f17c22d"
},
"_source": "git://github.com/PolymerElements/iron-a11y-keys-behavior.git",
"_source": "git://github.com/polymerelements/iron-a11y-keys-behavior.git",
"_target": "^1.0.0",
"_originalSource": "PolymerElements/iron-a11y-keys-behavior"
"_originalSource": "polymerelements/iron-a11y-keys-behavior"
}

View File

@ -32,14 +32,14 @@
"web-component-tester": "^4.0.0",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
"homepage": "https://github.com/polymerelements/iron-icon",
"homepage": "https://github.com/PolymerElements/iron-icon",
"_release": "1.0.8",
"_resolution": {
"type": "version",
"tag": "v1.0.8",
"commit": "f36b38928849ef3853db727faa8c9ef104d611eb"
},
"_source": "git://github.com/polymerelements/iron-icon.git",
"_source": "git://github.com/PolymerElements/iron-icon.git",
"_target": "^1.0.0",
"_originalSource": "polymerelements/iron-icon"
"_originalSource": "PolymerElements/iron-icon"
}

View File

@ -1,6 +1,6 @@
{
"name": "iron-menu-behavior",
"version": "1.1.6",
"version": "1.1.7",
"description": "Provides accessible menu behavior",
"authors": "The Polymer Authors",
"keywords": [
@ -34,11 +34,11 @@
"web-component-tester": "^4.0.0",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
"_release": "1.1.6",
"_release": "1.1.7",
"_resolution": {
"type": "version",
"tag": "v1.1.6",
"commit": "940c2769c7d6fefd5685e0200c3dfd0742c2a52f"
"tag": "v1.1.7",
"commit": "ea59e6ce5644d8f7a20c22f13f614ea60604a812"
},
"_source": "git://github.com/polymerelements/iron-menu-behavior.git",
"_target": "^1.0.0",

View File

@ -1,6 +1,6 @@
{
"name": "iron-menu-behavior",
"version": "1.1.6",
"version": "1.1.7",
"description": "Provides accessible menu behavior",
"authors": "The Polymer Authors",
"keywords": [

View File

@ -128,7 +128,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
var attr = this.attrForItemTitle || 'textContent';
var title = item[attr] || item.getAttribute(attr);
if (!item.hasAttribute('disabled') && title &&
if (!item.hasAttribute('disabled') && title &&
title.trim().charAt(0).toLowerCase() === String.fromCharCode(event.keyCode).toLowerCase()) {
this._setFocusedItem(item);
break;
@ -209,17 +209,8 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
* detail.
*/
_onIronItemsChanged: function(event) {
var mutations = event.detail;
var mutation;
var index;
for (index = 0; index < mutations.length; ++index) {
mutation = mutations[index];
if (mutation.addedNodes.length) {
this._resetTabindices();
break;
}
if (event.detail.addedNodes.length) {
this._resetTabindices();
}
},

View File

@ -338,6 +338,47 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
done();
});
});
test('`tabIndex` properties of all items are updated when items change', function(done) {
var menu = fixture('basic');
function assertTabIndexCounts(nodes, expected) {
var tabIndexCounts = {};
for (var i = 0; i < nodes.length; i++) {
var tabIndex = nodes[i].tabIndex;
if (tabIndexCounts[tabIndex]) {
tabIndexCounts[tabIndex]++;
} else {
tabIndexCounts[tabIndex] = 1;
}
}
assert.equal(Object.keys(tabIndexCounts).length, Object.keys(expected).length);
Object.keys(expected).forEach(function(key) {
assert.equal(tabIndexCounts[key], expected[key]);
});
}
function divWithTabIndex(tabIndex) {
var div = document.createElement('div');
div.tabIndex = tabIndex;
return div;
}
// Only the selected item will have tabIndex 0.
menu.select(0);
assertTabIndexCounts(menu.items, {"-1": 2, "0": 1});
Polymer.dom(menu).appendChild(divWithTabIndex(1));
Polymer.dom(menu).appendChild(divWithTabIndex(2));
Polymer.dom(menu).appendChild(divWithTabIndex(3));
// Async wait for `observeNodes`.
Polymer.Base.async(function() {
assertTabIndexCounts(menu.items, {"-1": 5, "0": 1});
done();
});
});
});
</script>
</body>

View File

@ -28,14 +28,14 @@
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
"ignore": [],
"homepage": "https://github.com/PolymerElements/iron-resizable-behavior",
"homepage": "https://github.com/polymerelements/iron-resizable-behavior",
"_release": "1.0.3",
"_resolution": {
"type": "version",
"tag": "v1.0.3",
"commit": "dda1df6aaf452aedf3e52ff0cf69e72439452216"
},
"_source": "git://github.com/PolymerElements/iron-resizable-behavior.git",
"_source": "git://github.com/polymerelements/iron-resizable-behavior.git",
"_target": "^1.0.0",
"_originalSource": "PolymerElements/iron-resizable-behavior"
"_originalSource": "polymerelements/iron-resizable-behavior"
}

View File

@ -1,6 +1,6 @@
{
"name": "iron-selector",
"version": "1.5.1",
"version": "1.5.2",
"description": "Manages a set of elements that can be selected",
"private": true,
"license": "http://polymer.github.io/LICENSE.txt",
@ -30,11 +30,11 @@
"web-component-tester": "^4.0.0",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
"_release": "1.5.1",
"_release": "1.5.2",
"_resolution": {
"type": "version",
"tag": "v1.5.1",
"commit": "e3e34408fad8f7cde59c4255cf3fe90f7dcf91d8"
"tag": "v1.5.2",
"commit": "18e8e12dcd9a4560de480562f65935feed334b86"
},
"_source": "git://github.com/PolymerElements/iron-selector.git",
"_target": "^1.0.0",

View File

@ -1,6 +1,6 @@
{
"name": "iron-selector",
"version": "1.5.1",
"version": "1.5.2",
"description": "Manages a set of elements that can be selected",
"private": true,
"license": "http://polymer.github.io/LICENSE.txt",

View File

@ -38,8 +38,8 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
/**
* Fired when the list of selectable items changes (e.g., items are
* added or removed). The detail of the event is a list of mutation
* records that describe what changed.
* added or removed). The detail of the event is a mutation record that
* describes what changed.
*
* @event iron-items-changed
*/
@ -346,7 +346,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
// observe items change under the given node.
_observeItems: function(node) {
return Polymer.dom(node).observeNodes(function(mutations) {
return Polymer.dom(node).observeNodes(function(mutation) {
this._updateItems();
if (this._shouldUpdateSelection) {
@ -355,7 +355,7 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
// Let other interested parties know about the change so that
// we don't have to recreate mutation observers everywhere.
this.fire('iron-items-changed', mutations, {
this.fire('iron-items-changed', mutation, {
bubbles: false,
cancelable: false
});

View File

@ -196,8 +196,12 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
newItem.id = 'item999';
s2.addEventListener('iron-items-changed', function() {
s2.addEventListener('iron-items-changed', function(event) {
changeCount++;
var mutation = event.detail;
assert.notEqual(mutation, undefined);
assert.notEqual(mutation.addedNodes, undefined);
assert.notEqual(mutation.removedNodes, undefined);
});
Polymer.dom(s2).appendChild(newItem);

View File

@ -12,7 +12,7 @@
<label for="selectLanguage" class="selectLabel">${LabelLanguage}</label>
<select autofocus id="selectLanguage" required="required" data-mini="true"></select>
</div>
<button is="paper-icon-button-light" title="${ButtonSearch}" class="btnSearchSubtitles"><iron-icon icon="search"></iron-icon></button>
<button type="button" is="paper-icon-button-light" title="${ButtonSearch}" class="btnSearchSubtitles"><iron-icon icon="search"></iron-icon></button>
</form>
<br />
<div class="subtitleResults"></div>

View File

@ -108,8 +108,10 @@ define(['browser'], function (browser) {
// The views need to be updated to start loading data in beforeshow, but not render until show
document.dispatchEvent(new CustomEvent('scroll', {}));
$.mobile = $.mobile || {};
$.mobile.activePage = view;
if (window.$) {
$.mobile = $.mobile || {};
$.mobile.activePage = view;
}
resolve(view);
});
@ -353,8 +355,10 @@ define(['browser'], function (browser) {
// The views need to be updated to start loading data in beforeshow, but not render until show
document.dispatchEvent(new CustomEvent('scroll', {}));
$.mobile = $.mobile || {};
$.mobile.activePage = view;
if (window.$) {
$.mobile = $.mobile || {};
$.mobile.activePage = view;
}
return view;
});

View File

@ -221,14 +221,6 @@
width: 30px;
}
.criticRating {
display: inline-block;
margin-left: 1px;
position: relative;
top: -1px;
vertical-align: middle;
}
.criticRatingScore {
margin-bottom: .5em;
}

View File

@ -226,13 +226,13 @@
overflow: hidden;
}
.libraryViewNav .pageTabButton:hover {
/*.libraryViewNav .pageTabButton:hover {
background-color: transparent;
}
.libraryViewNav .pageTabButton:active {
background-color: rgba(100,100,100, 0.20);
}
}*/
.libraryViewNav .pageTabButton:focus {
font-weight: 500 !important;

View File

@ -57,13 +57,13 @@ body:not(.dashboardDocument) .mainDrawerButton {
text-transform: none;
}
.libraryViewNav .pageTabButton.is-active:after {
display: none !important;
}
.pageTabButton.is-active .pageTabButtonSelectionBar {
display: none !important;
}
.libraryViewNav .pageTabButton.is-active {
color: #52B54B !important;
}
.libraryViewNav .pageTabButton.is-active {
color: #52B54B !important;
}
.ui-body-b .paperList:not(.criticReviewPaperList) {
background-color: transparent;

View File

@ -9,14 +9,14 @@
font-size: 220%;
}
.libraryViewNav .mdl-tabs__tab {
font-weight: 400 !important;
}
.background-theme-b, .dialog.background-theme-b {
background: #161616;
}
.pageTabButton.is-active .pageTabButtonSelectionBar {
display: none !important;
}
.libraryViewNav .pageTabButton.is-active {
color: #52B54B !important;
}

View File

@ -1,4 +1,4 @@
<div id="loginPage" data-role="page" class="page standalonePage" data-theme="b" data-require="scripts/loginpage,humanedate,paper-input,paper-button">
<div id="loginPage" data-role="page" class="page standalonePage" data-theme="b">
<div data-role="content">
@ -19,7 +19,7 @@
<paper-button raised class="accent block"><iron-icon icon="check"></iron-icon><span>${ButtonSignIn}</span></paper-button>
</button>
<div style="margin-top:.5em;">
<paper-button raised class="cancel block btnCancel" onclick="LoginPage.cancelLogin();"><iron-icon icon="close"></iron-icon><span>${ButtonCancel}</span></paper-button>
<paper-button raised class="cancel block btnCancel"><iron-icon icon="close"></iron-icon><span>${ButtonCancel}</span></paper-button>
</div>
<br />
<br />
@ -32,12 +32,12 @@
<br />
<div class="readOnlyContent" style="margin: 2em auto 0;">
<paper-button raised class="cancel block" onclick="LoginPage.showManualForm(jQuery.mobile.activePage, true);"><iron-icon icon="lock"></iron-icon><span>${ButtonManualLogin}</span></paper-button>
<paper-button raised class="cancel block btnManual"><iron-icon icon="lock"></iron-icon><span>${ButtonManualLogin}</span></paper-button>
</div>
</div>
<div class="readOnlyContent" style="margin: .5em auto 1em;">
<paper-button raised class="cancel block btnForgotPassword" onclick="LoginPage.cancelLogin();"><iron-icon icon="info"></iron-icon><span>${ButtonForgotPassword}</span></paper-button>
<paper-button raised class="cancel block btnForgotPassword"><iron-icon icon="info"></iron-icon><span>${ButtonForgotPassword}</span></paper-button>
<div class="connectButtons" style="display:none;">
<a href="selectserver.html" class="clearLink">

View File

@ -10,7 +10,7 @@
<div class="fldSyncPath hide">
<paper-input type="text" id="txtSyncPath" label="${LabelSyncPath}" style="display:inline-block;width:80%;"></paper-input>
<button is="paper-icon-button-light" class="btnSelectSyncPath"><iron-icon icon="search"></iron-icon></button>
<button type="button" is="paper-icon-button-light" class="btnSelectSyncPath"><iron-icon icon="search"></iron-icon></button>
</div>
<br />

View File

@ -249,9 +249,9 @@
}
function scrollToNode(page, id) {
function scrollToNode(id) {
var elem = $('#' + id, page)[0];
var elem = $('#' + id)[0];
if (elem) {
// commenting out for now because it's causing the whole window to scroll in chrome
@ -365,7 +365,7 @@
setTimeout(function () {
scrollToNode($.mobile.activePage, selectedNodeId);
scrollToNode(selectedNodeId);
}, 500);
}
}

View File

@ -1252,7 +1252,7 @@
hideSelections();
break;
case 'groupvideos':
combineVersions($.mobile.activePage, items);
combineVersions(parentWithClass(e.target, 'page'), items);
break;
case 'markplayed':
items.forEach(function (itemId) {

View File

@ -22,7 +22,7 @@
html += '<button is="paper-icon-button-light" class="btnCast headerButton headerButtonRight hide"><iron-icon icon="cast"></iron-icon></button>';
if (AppInfo.enableSearchInTopMenu) {
html += '<button is="paper-icon-button-light" class=headerButton headerButtonRight headerSearchButton hide" onclick="Search.showSearchPanel();"><iron-icon icon="search"></iron-icon></button>';
html += '<button type="button" is="paper-icon-button-light" class=headerButton headerButtonRight headerSearchButton hide" onclick="Search.showSearchPanel();"><iron-icon icon="search"></iron-icon></button>';
html += '<div class="viewMenuSearch hide">';
html += '<form class="viewMenuSearchForm">';
html += '<input type="text" data-role="none" data-type="search" class="headerSearchInput" autocomplete="off" spellcheck="off" />';

View File

@ -1,135 +1,104 @@
var LoginPage = {
define(['jQuery'], function ($) {
getApiClient: function () {
var LoginPage = {
var serverId = getParameterByName('serverid');
showVisualForm: function (page) {
$('.visualLoginForm', page).show();
$('.manualLoginForm', page).hide();
},
return new Promise(function (resolve, reject) {
getLastSeenText: function (lastActivityDate) {
if (serverId) {
resolve(ConnectionManager.getOrCreateApiClient(serverId));
} else {
resolve(ApiClient);
if (!lastActivityDate) {
return "";
}
});
},
onPageShow: function () {
return "Last seen " + humane_date(lastActivityDate);
},
Dashboard.showLoadingMsg();
authenticateUserByName: function (page, apiClient, username, password) {
var page = this;
Dashboard.showLoadingMsg();
LoginPage.getApiClient().then(function (apiClient) {
apiClient.authenticateUserByName(username, password).then(function (result) {
apiClient.getPublicUsers().then(function (users) {
var user = result.User;
var showManualForm = !users.length;
var serverId = getParameterByName('serverid');
if (showManualForm) {
LoginPage.showManualForm(page, false, false);
var newUrl;
if (user.Policy.IsAdministrator && !serverId) {
newUrl = "dashboard.html";
} else {
LoginPage.showVisualForm(page);
LoginPage.loadUserList(page, apiClient, users);
newUrl = "home.html";
}
Dashboard.hideLoadingMsg();
Dashboard.onServerChanged(user.Id, result.AccessToken, apiClient);
Dashboard.navigate(newUrl);
}, function () {
$('#pw', page).val('');
$('#txtManualName', page).val('');
$('#txtManualPassword', page).val('');
Dashboard.hideLoadingMsg();
setTimeout(function () {
require(['toast'], function (toast) {
toast(Globalize.translate('MessageInvalidUser'));
});
}, 300);
});
apiClient.getJSON(apiClient.getUrl('Branding/Configuration')).then(function (options) {
}
$('.disclaimer', page).html(options.LoginDisclaimer || '');
});
};
function getApiClient() {
var serverId = getParameterByName('serverid');
if (serverId) {
return Promise.resolve(ConnectionManager.getOrCreateApiClient(serverId));
} else {
return Promise.resolve(ApiClient);
}
}
function onManualSubmit() {
var page = $(this).parents('.page');
getApiClient().then(function (apiClient) {
LoginPage.authenticateUserByName(page, apiClient, $('#txtManualName', page).val(), $('#txtManualPassword', page).val());
});
if (Dashboard.isConnectMode()) {
$('.connectButtons', page).show();
} else {
$('.connectButtons', page).hide();
}
},
// Disable default form submission
return false;
}
cancelLogin: function () {
LoginPage.showVisualForm($.mobile.activePage);
},
showManualForm: function (page, showCancel, focusPassword) {
$('.visualLoginForm', page).hide();
$('.manualLoginForm', page).show();
function showManualForm(context, showCancel, focusPassword) {
$('.visualLoginForm', context).hide();
$('.manualLoginForm', context).show();
if (focusPassword) {
$('#txtManualPassword input', page).focus();
$('#txtManualPassword input', context).focus();
} else {
$('#txtManualName input', page).focus();
$('#txtManualName input', context).focus();
}
if (showCancel) {
$('.btnCancel', page).show();
$('.btnCancel', context).show();
} else {
$('.btnCancel', page).hide();
$('.btnCancel', context).hide();
}
},
}
showVisualForm: function (page) {
$('.visualLoginForm', page).show();
$('.manualLoginForm', page).hide();
},
getLastSeenText: function (lastActivityDate) {
if (!lastActivityDate) {
return "";
}
return "Last seen " + humane_date(lastActivityDate);
},
authenticateUserByName: function (page, apiClient, username, password) {
Dashboard.showLoadingMsg();
apiClient.authenticateUserByName(username, password).then(function (result) {
var user = result.User;
var serverId = getParameterByName('serverid');
var newUrl;
if (user.Policy.IsAdministrator && !serverId) {
newUrl = "dashboard.html";
} else {
newUrl = "home.html";
}
Dashboard.hideLoadingMsg();
Dashboard.onServerChanged(user.Id, result.AccessToken, apiClient);
Dashboard.navigate(newUrl);
}, function () {
$('#pw', page).val('');
$('#txtManualName', page).val('');
$('#txtManualPassword', page).val('');
Dashboard.hideLoadingMsg();
setTimeout(function () {
require(['toast'], function (toast) {
toast(Globalize.translate('MessageInvalidUser'));
});
}, 300);
});
},
loadUserList: function (page, apiClient, users) {
function loadUserList(context, apiClient, users) {
var html = "";
for (var i = 0, length = users.length; i < length; i++) {
@ -184,7 +153,7 @@
html += '</div>';
}
var elem = $('#divUsers', page).html(html);
var elem = $('#divUsers', context).html(html);
$('a', elem).on('click', function () {
@ -193,39 +162,69 @@
var haspw = this.getAttribute('data-haspw');
if (id == 'manual') {
LoginPage.showManualForm(page, true);
showManualForm(context, true);
}
else if (haspw == 'false') {
LoginPage.authenticateUserByName(page, apiClient, name, '');
LoginPage.authenticateUserByName(context, apiClient, name, '');
} else {
$('#txtManualName', page).val(name);
$('#txtManualPassword', page).val('');
LoginPage.showManualForm(page, true, true);
$('#txtManualName', context).val(name);
$('#txtManualPassword', context).val('');
showManualForm(context, true, true);
}
});
},
}
onManualSubmit: function () {
return function (view, params) {
var page = $(this).parents('.page');
var self = this;
LoginPage.getApiClient().then(function (apiClient) {
LoginPage.authenticateUserByName(page, apiClient, $('#txtManualName', page).val(), $('#txtManualPassword', page).val());
$('.manualLoginForm', view).on('submit', onManualSubmit);
view.querySelector('.btnForgotPassword').addEventListener('click', function () {
Dashboard.navigate('forgotpassword.html');
});
// Disable default form submission
return false;
}
};
view.querySelector('.btnCancel').addEventListener('click', function () {
LoginPage.showVisualForm(view);
});
$(document).on('pageinit', "#loginPage", function () {
view.querySelector('.btnManual').addEventListener('click', function () {
showManualForm(view, true);
});
var page = this;
view.addEventListener('viewshow', function (e) {
Dashboard.showLoadingMsg();
$('.manualLoginForm', page).off('submit', LoginPage.onManualSubmit).on('submit', LoginPage.onManualSubmit);
getApiClient().then(function (apiClient) {
$('.btnForgotPassword', page).on('click', function () {
Dashboard.navigate('forgotpassword.html');
});
apiClient.getPublicUsers().then(function (users) {
}).on('pageshow', "#loginPage", LoginPage.onPageShow);
var showManualForm = !users.length;
if (showManualForm) {
showManualForm(view, false, false);
} else {
LoginPage.showVisualForm(view);
loadUserList(view, apiClient, users);
}
Dashboard.hideLoadingMsg();
});
apiClient.getJSON(apiClient.getUrl('Branding/Configuration')).then(function (options) {
$('.disclaimer', view).html(options.LoginDisclaimer || '');
});
});
if (Dashboard.isConnectMode()) {
$('.connectButtons', view).show();
} else {
$('.connectButtons', view).hide();
}
});
};
});

View File

@ -21,22 +21,32 @@
function saveUser(page, user) {
appSettings.syncPath(page.querySelector('#txtSyncPath').value);
var syncPath = page.querySelector('#txtSyncPath').value;
appSettings.syncPath(syncPath);
appSettings.syncOnlyOnWifi(page.querySelector('#chkWifi').checked);
appSettings.cameraUploadServers($(".chkUploadServer", page).get().filter(function (i) {
var cameraUploadServers = $(".chkUploadServer", page).get().filter(function (i) {
return i.checked;
}).map(function (i) {
return i.getAttribute('data-id');
}));
});
appSettings.cameraUploadServers(cameraUploadServers);
Dashboard.hideLoadingMsg();
require(['toast'], function (toast) {
toast(Globalize.translate('SettingsSaved'));
});
if (cameraUploadServers.length || syncPath) {
if (window.MainActivity) {
MainActivity.authorizeStorage();
}
}
}
function onSubmit() {

View File

@ -166,7 +166,7 @@
var frequency = 86400000;
if (AppInfo.isNativeApp) {
frequency = 259200000;
frequency = 172800000;
}
var cacheKey = 'lastappinfopresent5';

View File

@ -2243,7 +2243,7 @@ var AppInfo = {};
var baseUrl = 'bower_components/emby-webcomponents/strings/';
var languages = ['en-US', 'kk', 'ru'];
var languages = ['da', 'en-US', 'kk', 'nl', 'ru'];
var translations = languages.map(function (i) {
return {
@ -2655,9 +2655,10 @@ var AppInfo = {};
defineRoute({
path: '/login.html',
dependencies: ['paper-button'],
dependencies: ['paper-button', 'humanedate', 'paper-input'],
autoFocus: false,
anonymous: true
anonymous: true,
controller: 'scripts/loginpage'
});
defineRoute({

View File

@ -17,7 +17,7 @@
</div>
<div class="addServer" style="margin:0 0 1em;">
<a href="connectlogin.html?mode=manualserver" class="clearLink"><paper-button raised class="submit block"><iron-icon icon="add"></iron-icon><span>${ButtonAddServer}</span></paper-button></a>
<a href="connectlogin.html?mode=manualserver" class="clearLink"><paper-button raised class="cancel block"><iron-icon icon="add"></iron-icon><span>${ButtonAddServer}</span></paper-button></a>
</div>
<div class="connectLogin" style="margin:1em 0;display:none;">