1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

update translations

This commit is contained in:
Luke Pulverenti 2015-07-08 20:20:01 -04:00
parent 8030454e19
commit 22586c7a8f
41 changed files with 17432 additions and 17417 deletions

View file

@ -138,16 +138,7 @@
}]);
}
/**
* Wraps around jQuery ajax methods to add additional info to the request.
*/
self.ajax = function (request, includeAuthorization) {
if (!request) {
throw new Error("Request cannot be null");
}
if (includeAuthorization !== false) {
self.setRequestHeaders = function(headers) {
var currentServerInfo = self.serverInfo();
@ -161,16 +152,29 @@
auth += ', UserId="' + userId + '"';
}
request.headers = {
Authorization: auth
};
headers.Authorization = auth;
}
var accessToken = currentServerInfo.AccessToken;
if (accessToken) {
request.headers['X-MediaBrowser-Token'] = accessToken;
headers['X-MediaBrowser-Token'] = accessToken;
}
};
/**
* Wraps around jQuery ajax methods to add additional info to the request.
*/
self.ajax = function (request, includeAuthorization) {
if (!request) {
throw new Error("Request cannot be null");
}
if (includeAuthorization !== false) {
request.headers = {};
self.setRequestHeaders(request.headers);
}
if (self.enableAutomaticNetworking === false || request.type != "GET") {
@ -521,7 +525,7 @@
} else {
// If that produced a fairly high speed, try again with a larger size to get a more accurate result
self.getDownloadSpeed(2000000).done(function (bitrate) {
self.getDownloadSpeed(3000000).done(function (bitrate) {
deferred.resolveWith(null, [Math.round(bitrate * .8)]);

View file

@ -1,6 +1,6 @@
{
"name": "iron-a11y-announcer",
"version": "1.0.1",
"version": "1.0.2",
"description": "A singleton element that simplifies announcing text to screen readers.",
"keywords": [
"web-components",
@ -30,11 +30,11 @@
"web-component-tester": "*"
},
"homepage": "https://github.com/polymerelements/iron-a11y-announcer",
"_release": "1.0.1",
"_release": "1.0.2",
"_resolution": {
"type": "version",
"tag": "v1.0.1",
"commit": "699697fe8935400ab11e3e33cd6a5a54d762300e"
"tag": "v1.0.2",
"commit": "6010b30a67a12333f76394a558c820db727f7c84"
},
"_source": "git://github.com/polymerelements/iron-a11y-announcer.git",
"_target": "^1.0.0",

View file

@ -1,6 +1,6 @@
{
"name": "iron-a11y-announcer",
"version": "1.0.1",
"version": "1.0.2",
"description": "A singleton element that simplifies announcing text to screen readers.",
"keywords": [
"web-components",

View file

@ -114,7 +114,7 @@ Note: announcements are only audible if you have a screen reader enabled.
Polymer.IronA11yAnnouncer.requestAvailability = function() {
if (!Polymer.IronA11yAnnouncer.instance) {
document.createElement('iron-a11y-announcer');
Polymer.IronA11yAnnouncer.instance = document.createElement('iron-a11y-announcer');
}
document.body.appendChild(Polymer.IronA11yAnnouncer.instance);

View file

@ -1,6 +1,6 @@
{
"name": "iron-form-element-behavior",
"version": "1.0.1",
"version": "1.0.2",
"license": "http://polymer.github.io/LICENSE.txt",
"private": true,
"main": "iron-form-element-behavior",
@ -22,14 +22,15 @@
"iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
"test-fixture": "PolymerElements/test-fixture#^1.0.0",
"web-component-tester": "*",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
"paper-styles": "PolymerElements/paper-styles#^1.0.0"
},
"homepage": "https://github.com/PolymerElements/iron-form-element-behavior",
"_release": "1.0.1",
"_release": "1.0.2",
"_resolution": {
"type": "version",
"tag": "v1.0.1",
"commit": "f386143e866c320025589f3d79798c12103377a4"
"tag": "v1.0.2",
"commit": "3d46178a7cd9e4025004476a8fd0eef7a5416cd3"
},
"_source": "git://github.com/PolymerElements/iron-form-element-behavior.git",
"_target": "^1.0.0",

View file

@ -1,6 +1,6 @@
{
"name": "iron-form-element-behavior",
"version": "1.0.1",
"version": "1.0.2",
"license": "http://polymer.github.io/LICENSE.txt",
"private": true,
"main": "iron-form-element-behavior",
@ -22,6 +22,7 @@
"iron-component-page": "PolymerElements/iron-component-page#^1.0.0",
"test-fixture": "PolymerElements/test-fixture#^1.0.0",
"web-component-tester": "*",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0",
"paper-styles": "PolymerElements/paper-styles#^1.0.0"
}
}

View file

@ -19,35 +19,50 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
<script src="../../webcomponentsjs/webcomponents-lite.js"></script>
<link rel="stylesheet" href="../../paper-styles/paper-styles.html">
<link rel="import" href="../../paper-styles/demo-pages.html">
<link rel="import" href="simple-form.html">
<link rel="import" href="simple-element.html">
</head>
<style>
input {
margin-bottom: 24px;
width: 200px;
}
</style>
<body>
<div class="vertical-section-container centered">
<div class="vertical-section">
<form is="simple-form" id="form">
Element the form is tracking: <input is="simple-element" type="text" name="one" value="one">
Element with iron-form-element-behavior <input is="simple-element" type="text" name="one" value="one">
<br>
Element the form isn't tracking: <input type="text" name="two" value="two">
Element without iron-form-element-behavior <input type="text" name="two" value="two">
<br>
Another one the form is tracking: <input is="simple-element" type="text" name="three" value="three">
Element with iron-form-element-behavior <input is="simple-element" type="text" name="three" value="three">
</form>
<h4>Elements tracked by the form: </h4>
<h4>Elements tracked by the form: <button onclick="update()">Update</button> </h4>
<ul id="output">
</ul>
</body>
</div>
</div>
<script>
function update() {
var output = document.getElementById('output');
var elements = document.getElementById('form').formElements;
document.getElementById('output').innerHTML = '';
for (var i = 0; i < elements.length; i++) {
var li = document.createElement('li');
var text = document.createTextNode(elements[i].value);
li.appendChild(text);
output.appendChild(li);
}
}
</script>
</body>
</html>

View file

@ -25,7 +25,8 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
},
listeners: {
'iron-form-element-register': '_elementRegistered'
'iron-form-element-register': '_elementRegistered',
'iron-form-element-unregister': '_elementUnregistered'
},
ready: function() {
@ -34,7 +35,16 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
_elementRegistered: function(e) {
this.formElements.push(e.target);
this.fire('element-registered');
},
_elementUnregistered: function(e) {
var target = e.detail.target;
if (target) {
var index = this.formElements.indexOf(target);
if (index > -1) {
this.formElements.splice(index, 1);
}
}
}
});

View file

@ -24,6 +24,17 @@ Enables a custom element to be included in an `iron-form`.
Polymer.IronFormElementBehavior = {
properties: {
/**
* Fired when the element is added to an `iron-form`.
*
* @event iron-form-element-register
*/
/**
* Fired when the element is removed from an `iron-form`.
*
* @event iron-form-element-unregister
*/
/**
* The name of this element.
@ -39,10 +50,25 @@ Enables a custom element to be included in an `iron-form`.
notify: true,
type: String
},
/**
* Need to keep a reference to the form this element is registered
* to, so that it can unregister if detached.
*/
_parentForm: {
type: Object
}
},
attached: function() {
this._parentForm = Polymer.dom(this).parentNode;
this.fire('iron-form-element-register');
},
detached: function() {
if (this._parentForm) {
this._parentForm.fire('iron-form-element-unregister', {target: this});
}
}
};

View file

@ -35,7 +35,7 @@
"tag": "v1.0.1",
"commit": "3809f0eb7461c8ca63640aaa238775b3a25aa578"
},
"_source": "git://github.com/PolymerElements/iron-menu-behavior.git",
"_source": "git://github.com/polymerelements/iron-menu-behavior.git",
"_target": "^1.0.0",
"_originalSource": "PolymerElements/iron-menu-behavior"
"_originalSource": "polymerelements/iron-menu-behavior"
}

View file

@ -28,14 +28,14 @@
"web-component-tester": "*",
"webcomponentsjs": "webcomponents/webcomponentsjs#^0.7.0"
},
"homepage": "https://github.com/polymerelements/iron-selector",
"homepage": "https://github.com/PolymerElements/iron-selector",
"_release": "1.0.2",
"_resolution": {
"type": "version",
"tag": "v1.0.2",
"commit": "ea22d91d11ba6f72c01faa952d5e600f9d1773cf"
},
"_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"
}

View file

@ -1,6 +1,6 @@
{
"name": "neon-animation",
"version": "1.0.4",
"version": "1.0.5",
"authors": [
"The Polymer Authors"
],
@ -34,7 +34,7 @@
"iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
"iron-selector": "PolymerElements/iron-selector#^1.0.0",
"paper-styles": "PolymerElements/paper-styles#^1.0.0",
"web-animations-js": "web-animations/web-animations-js#^2.0.0"
"web-animations-js": "web-animations/web-animations-js#2.1.0"
},
"devDependencies": {
"iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",
@ -48,11 +48,11 @@
"iron-icons": "PolymerElements/iron-icons#^1.0.0",
"paper-icon-button": "PolymerElements/paper-icon-button#^1.0.0"
},
"_release": "1.0.4",
"_release": "1.0.5",
"_resolution": {
"type": "version",
"tag": "v1.0.4",
"commit": "8016c4f082250af41a08d30c2b8eae295c24f874"
"tag": "v1.0.5",
"commit": "d5305b9acc9924c5dd4fcb0098c21840d6ec5b7e"
},
"_source": "git://github.com/PolymerElements/neon-animation.git",
"_target": "^1.0.0",

View file

@ -66,6 +66,7 @@ Configuration:
return;
}
this._animations = [];
var nodes = config.nodes;
var effects = [];
var nodeDelay = config.nodeDelay || 50;
@ -81,12 +82,19 @@ Configuration:
var animation = new animationConstructor();
var effect = animation.configure(config);
this._animations.push(animation);
effects.push(effect);
}
config.timing.delay = oldDelay;
this._effect = new GroupEffect(effects);
return this._effect;
},
complete: function() {
for (var animation, index = 0; animation = this._animations[index]; index++) {
animation.complete(animation.config);
}
}
});

View file

@ -43,8 +43,8 @@ Configuration:
Polymer.NeonSharedElementAnimationBehavior
],
configure: function(config, fromPage, toPage) {
var shared = this.findSharedElements(config, fromPage, toPage);
configure: function(config) {
var shared = this.findSharedElements(config);
if (!shared) {
return null;
}

View file

@ -13,13 +13,13 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
<link rel="import" href="../web-animations.html">
<!--
`<slide-down-animation>` animates a custom transform on an element. Use this to animate multiple
`<transform-animation>` animates a custom transform on an element. Use this to animate multiple
transform properties, or to apply a custom transform value.
Configuration:
```
{
name: 'slide-down-animation',
name: 'transform-animation',
node: <node>,
transformOrigin: <transform-origin>,
transformFrom: <transform-from-string>,

View file

@ -34,7 +34,7 @@
"iron-resizable-behavior": "PolymerElements/iron-resizable-behavior#^1.0.0",
"iron-selector": "PolymerElements/iron-selector#^1.0.0",
"paper-styles": "PolymerElements/paper-styles#^1.0.0",
"web-animations-js": "web-animations/web-animations-js#^2.0.0"
"web-animations-js": "web-animations/web-animations-js#2.1.0"
},
"devDependencies": {
"iron-flex-layout": "PolymerElements/iron-flex-layout#^1.0.0",

View file

@ -9,7 +9,6 @@ subject to an additional IP rights grant found at http://polymer.github.io/PATEN
<link rel="import" href="../polymer/polymer.html">
<link rel="import" href="../iron-resizable-behavior/iron-resizable-behavior.html">
<link rel="import" href="../iron-selector/iron-selectable.html">
<link rel="import" href="../paper-styles/paper-styles.html">
<link rel="import" href="neon-animation-runner-behavior.html">
<link rel="import" href="animations/opaque-animation.html">
@ -33,7 +32,11 @@ animations to be run when switching to or switching out of the page.
}
:host > ::content > * {
@apply(--layout-fit);
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
height: 100%;
}

View file

@ -28,14 +28,14 @@
"web-animations-next-lite.dev.html",
"web-animations-next-lite.dev.js"
],
"version": "2.1.1",
"_release": "2.1.1",
"version": "2.1.0",
"_release": "2.1.0",
"_resolution": {
"type": "version",
"tag": "2.1.1",
"commit": "6ed4038f5793d9f024876911515d1826b3f07b1d"
"tag": "2.1.0",
"commit": "7215de49976c233fb7abe2c19ee31a1009acc655"
},
"_source": "git://github.com/web-animations/web-animations-js.git",
"_target": "^2.0.0",
"_target": "2.1.0",
"_originalSource": "web-animations/web-animations-js"
}

View file

@ -1,28 +1,3 @@
### 2.1.1 - *July 1 2015*
* Add Animation.timeline getter
* Add AnimationEffect.parent getter
* Make AnimationEffectTiming (returned by AnimationEffect.timing) attributes mutable
* Expose the Animation constructor
* Change custom effects from AnimationEffects to onsample functions. Custom effects should now be created by setting the onsample attribute of a KeyframeEffect.
For example, this is deprecated:
var myEffect = new KeyframeEffect(
element,
function(timeFraction, target, effect) {
target.style.opacity = timeFraction;
},
1000);
var myAnimation = document.timeline.play(myEffect);
and this should be used insead:
var myEffect = new KeyframeEffect(element, [], 1000);
effect.onsample = function(timeFraction, effect, animation) {
effect.target.style.opacity = timeFraction;
};
var myAnimation = document.timeline.play(myEffect);
### 2.1.0 - *June 15 2015*
* Fix bug affecting GroupEffects with infinite iteration children
* Add GroupEffect.firstChild and GroupEffect.lastChild

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -88,7 +88,44 @@
}
};
self.setCurrentSrc = function (val, tracks, item, mediaSource) {
function getPlaybackStartInfoForVideoActivity(videoUrl, mediaSource, item) {
var state = {
PlayState: {}
};
var audioStreamIndex = getParameterByName('AudioStreamIndex', videoUrl);
if (audioStreamIndex) {
state.PlayState.AudioStreamIndex = parseInt(audioStreamIndex);
}
state.PlayState.SubtitleStreamIndex = self.currentSubtitleStreamIndex;
state.PlayState.PlayMethod = getParameterByName('static', videoUrl) == 'true' ?
'DirectStream' :
'Transcode';
state.PlayState.LiveStreamId = getParameterByName('LiveStreamId', videoUrl);
state.PlayState.PlaySessionId = getParameterByName('PlaySessionId', videoUrl);
state.PlayState.MediaSourceId = mediaSource.Id;
state.NowPlayingItem = {
RunTimeTicks: mediaSource.RunTimeTicks
};
state.PlayState.CanSeek = mediaSource.RunTimeTicks && mediaSource.RunTimeTicks > 0;
var playbackStartInfo = {
QueueableMediaTypes: item.MediaType,
ItemId: item.Id,
NowPlayingItem: state.NowPlayingItem
};
return $.extend(playbackStartInfo, state.PlayState);
}
self.setCurrentSrc = function (val, item, mediaSource, tracks) {
if (!val) {
self.destroy();
@ -105,15 +142,22 @@
if (options.type == 'audio') {
AndroidVlcPlayer.playAudioVlc(val, JSON.stringify(item), JSON.stringify(mediaSource), posterUrl);
AndroidVlcPlayer.playAudioVlc(val, JSON.stringify(item), JSON.stringify(mediaSource), options.poster);
} else {
var playbackStartInfo = {};
var playbackStartInfo = getPlaybackStartInfoForVideoActivity(val, mediaSource, item);
AndroidVlcPlayer.playVideoVlc(val, startPosMs, item.Name, JSON.stringify(mediaSource), JSON.stringify(playbackStartInfo));
}
var serverUrl = ApiClient.serverAddress();
var requestHeaders = {};
ApiClient.setRequestHeaders(requestHeaders);
AndroidVlcPlayer.playVideoVlc(val, startPosMs, item.Name, JSON.stringify(mediaSource), JSON.stringify(playbackStartInfo), serverUrl, JSON.stringify(requestHeaders));
playerState.currentSrc = val;
self.report('playing', null, startPosMs, false, 100);
playerState.currentSrc = val;
}
};
self.currentSrc = function () {
@ -145,11 +189,6 @@
return false;
};
var posterUrl;
self.setPoster = function (url) {
posterUrl = url;
};
self.report = function (eventName, duration, position, isPaused, volume) {
var state = playerState;

View file

@ -64,8 +64,20 @@
}
}
var lastUpdateTime = 0;
function onStateChanged(e, state) {
if (e.type == 'positionchange') {
// Try to avoid hammering the document with changes
var now = new Date().getTime();
if ((now - lastUpdateTime) < 700) {
return;
}
lastUpdateTime = now;
}
updatePlayerState(state);
}

View file

@ -1,7 +1,7 @@
.tvGuideHeader {
white-space: nowrap;
position: fixed;
top: 98px;
top: 96px;
left: 0;
z-index: 100;
max-width: 100%;

View file

@ -46,7 +46,7 @@
}
.nowPlayingBar, .nowPlayingImage img {
height: 90px;
height: 80px;
}
.nowPlayingBarText {
@ -95,12 +95,12 @@
.nowPlayingBarCenter {
vertical-align: middle;
text-align: center;
margin-top: 17px;
margin-top: 12px;
}
.nowPlayingBarPositionContainer {
position: absolute;
left: 90px;
left: 80px;
top: 0;
right: 0;
z-index: 1;
@ -138,7 +138,7 @@
.nowPlayingBarRight {
position: absolute;
bottom: 17px;
bottom: 12px;
right: 10px;
vertical-align: middle;
}
@ -151,7 +151,7 @@
vertical-align: middle;
font-weight: normal;
position: absolute;
bottom: 36px;
bottom: 31px;
text-align: center;
display: inline-block;
margin: 0 auto;
@ -187,7 +187,7 @@
}
.nowPlayingBarRight {
bottom: 22px;
bottom: 18px;
}
}

View file

@ -4,7 +4,7 @@
<title></title>
</head>
<body>
<div id="itemListPage" data-role="page" class="page libraryPage folderListPage noSecondaryNavPage" data-require="scripts/itemlistpage">
<div id="itemListPage" data-role="page" class="page libraryPage folderListPage noSecondaryNavPage" data-require="scripts/itemlistpage,jqmicons">
<div class="alphabetPicker">
</div>
<div data-role="content" class="itemListContent">

View file

@ -7,7 +7,7 @@
{ name: Globalize.translate('HeaderFavoriteShows'), types: "Series", id: "favoriteShows", shape: 'backdrop', preferThumb: true, showTitle: false },
{ name: Globalize.translate('HeaderFavoriteEpisodes'), types: "Episode", id: "favoriteEpisode", shape: 'backdrop', preferThumb: false, showTitle: true, showParentTitle: true },
{ name: Globalize.translate('HeaderFavoriteGames'), types: "Game", id: "favoriteGames", shape: 'autohome', preferThumb: false, showTitle: true },
{ name: Globalize.translate('HeaderFavoriteAlbums'), types: "MusicAlbum", id: "favoriteAlbums", shape: 'square', preferThumb: false, showTitle: true, overlayText: false, showParentTitle: true }
{ name: Globalize.translate('HeaderFavoriteAlbums'), types: "MusicAlbum", id: "favoriteAlbums", shape: 'square', preferThumb: false, showTitle: true, overlayText: false, showParentTitle: true, centerText: true, overlayPlayButton: true }
];
}
@ -48,7 +48,9 @@
showTitle: section.showTitle,
showParentTitle: section.showParentTitle,
lazy: true,
showDetailsMenu: true
showDetailsMenu: true,
centerText: section.centerText,
overlayPlayButton: section.overlayPlayButton
});
html += '</div>';

View file

@ -234,7 +234,7 @@
};
var currentSrc;
self.setCurrentSrc = function (val, tracks, item, mediaSource) {
self.setCurrentSrc = function (val, item, mediaSource, tracks) {
var elem = mediaElement;
@ -359,14 +359,6 @@
}
};
self.setPoster = function (url) {
var elem = mediaElement;
if (elem) {
elem.poster = url;
}
};
self.supportsTextTracks = function () {
if (supportsTextTracks == null) {

View file

@ -2,23 +2,47 @@
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
// The base query options
var query = {
var currentItem;
var data = {};
function getQuery() {
var key = getSavedQueryKey();
var pageData = data[key];
if (!pageData) {
pageData = data[key] = {
query: {
SortBy: "SortName",
SortOrder: "Ascending",
Fields: "DateCreated,PrimaryImageAspectRatio,MediaSourceCount,SyncInfo",
StartIndex: 0,
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
StartIndex: 0,
Limit: LibraryBrowser.getDefaultPageSize()
}
};
var currentItem;
pageData.query.Filters = "";
pageData.query.NameStartsWithOrGreater = '';
pageData.query.ParentId = getParameterByName('parentId');
LibraryBrowser.loadSavedQueryValues(key, pageData.query);
}
return pageData.query;
}
function getSavedQueryKey() {
return getWindowUrl();
}
function reloadItems(page) {
Dashboard.showLoadingMsg();
var query = getQuery();
var userId = Dashboard.getCurrentUserId();
var parentItemPromise = query.ParentId ?
@ -120,6 +144,7 @@
item: item
}]);
LibraryBrowser.setLastRefreshed(page);
Dashboard.hideLoadingMsg();
});
@ -136,6 +161,7 @@
function updateFilterControls(page) {
var query = getQuery();
// Reset form values using the last used query
$('.radioSortBy', page).each(function () {
@ -166,6 +192,7 @@
function onListItemClick(e) {
var query = getQuery();
var page = $(this).parents('.page');
var info = LibraryBrowser.getListItemInfo(this);
@ -180,12 +207,14 @@
var page = this;
$('.radioSortBy', this).on('click', function () {
var query = getQuery();
query.StartIndex = 0;
query.SortBy = this.getAttribute('data-sortby');
reloadItems(page);
});
$('.radioSortOrder', this).on('click', function () {
var query = getQuery();
query.StartIndex = 0;
query.SortOrder = this.getAttribute('data-sortorder');
reloadItems(page);
@ -193,6 +222,7 @@
$('.chkStandardFilter', this).on('change', function () {
var query = getQuery();
var filterName = this.getAttribute('data-filter');
var filters = query.Filters || "";
@ -224,6 +254,7 @@
$('.alphabetPicker', this).on('alphaselect', function (e, character) {
var query = getQuery();
query.NameStartsWithOrGreater = character;
query.StartIndex = 0;
@ -231,12 +262,14 @@
}).on('alphaclear', function (e) {
var query = getQuery();
query.NameStartsWithOrGreater = '';
reloadItems(page);
});
$('#selectPageSize', page).on('change', function () {
var query = getQuery();
query.Limit = parseInt(this.value);
query.StartIndex = 0;
reloadItems(page);
@ -248,18 +281,8 @@
var page = this;
query.Limit = LibraryBrowser.getDefaultPageSize();
query.ParentId = getParameterByName('parentId');
query.Filters = "";
query.SortBy = "SortName";
query.SortOrder = "Ascending";
query.StartIndex = 0;
query.NameStartsWithOrGreater = '';
var key = getParameterByName('parentId');
LibraryBrowser.loadSavedQueryValues(key, query);
LibraryBrowser.getSavedViewSetting(key).done(function (val) {
if (LibraryBrowser.needsRefresh(page)) {
LibraryBrowser.getSavedViewSetting(getSavedQueryKey()).done(function (val) {
if (val) {
$('#selectView', page).val(val).selectmenu('refresh').trigger('change');
@ -267,6 +290,7 @@
reloadItems(page);
}
});
}
updateFilterControls(page);

View file

@ -101,7 +101,7 @@
}
else {
cacheDuration = 60000;
cacheDuration = 180000;
}
if ((now - last) < cacheDuration) {

View file

@ -8,7 +8,10 @@
var html = '<div class="viewMenuBar ui-bar-b">';
if (AppInfo.enableBackButton) {
html += '<paper-icon-button icon="chevron-left" class="headerButton headerButtonLeft headerBackButton"></paper-icon-button>';
var icon = $.browser.safari ? 'chevron-left' : 'arrow-back';
html += '<paper-icon-button icon="' + icon + '" class="headerButton headerButtonLeft headerBackButton"></paper-icon-button>';
}
html += '<paper-icon-button icon="menu" class="headerButton mainDrawerButton barsMenuButton headerButtonLeft"></paper-icon-button>';
@ -38,7 +41,7 @@
}
if (!$.browser.mobile && !AppInfo.isNativeApp) {
html += '<paper-icon-button icon="settings" class="headerButton headerButtonRight dashboardEntryHeaderButton hide" onclick="Dashboard.navigate(\'dashboard.html\');"></paper-icon-button>';
html += '<paper-icon-button icon="settings" class="headerButton headerButtonRight dashboardEntryHeaderButton hide" onclick="return LibraryMenu.onSettingsClicked(event);"></paper-icon-button>';
}
html += '</div>';
@ -277,18 +280,18 @@
html += '</div>';
html += '</div>';
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="remote" href="index.html" onclick="return LibraryMenu.onLinkClicked(this);"><iron-icon icon="home" class="sidebarLinkIcon" style="color:#2196F3;"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonHome') + '</span></a>';
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="remote" href="index.html" onclick="return LibraryMenu.onLinkClicked(event, this);"><iron-icon icon="home" class="sidebarLinkIcon" style="color:#2196F3;"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonHome') + '</span></a>';
} else {
html += '<div style="margin-top:5px;"></div>';
html += '<a class="lnkMediaFolder sidebarLink" href="' + homeHref + '" onclick="return LibraryMenu.onLinkClicked(this);">';
html += '<a class="lnkMediaFolder sidebarLink" href="' + homeHref + '" onclick="return LibraryMenu.onLinkClicked(event, this);">';
html += '<div style="background-image:url(\'css/images/mblogoicon.png\');width:' + 28 + 'px;height:' + 28 + 'px;background-size:contain;background-repeat:no-repeat;background-position:center center;border-radius:1000px;vertical-align:middle;margin:0 1.6em 0 1.5em;display:inline-block;"></div>';
html += Globalize.translate('ButtonHome');
html += '</a>';
}
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="remote" href="nowplaying.html" onclick="return LibraryMenu.onLinkClicked(this);"><iron-icon icon="tablet-android" class="sidebarLinkIcon" style="color:#673AB7;"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonRemote') + '</span></a>';
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="remote" href="nowplaying.html" onclick="return LibraryMenu.onLinkClicked(event, this);"><iron-icon icon="tablet-android" class="sidebarLinkIcon" style="color:#673AB7;"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonRemote') + '</span></a>';
var userHeader = drawer.querySelector('.userheader');
@ -317,7 +320,7 @@
html += Dashboard.getToolsMenuHtml(page);
html = html.split('href=').join('onclick="return LibraryMenu.onLinkClicked(this);" href=');
html = html.split('href=').join('onclick="return LibraryMenu.onLinkClicked(event, this);" href=');
drawer.querySelector('.dashboardDrawerContent').innerHTML = html;
}
@ -338,29 +341,29 @@
html += '</div>';
html += '<a class="sidebarLink lnkMediaFolder lnkManageServer" data-itemid="dashboard" href="#"><iron-icon icon="dashboard" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonManageServer') + '</span></a>';
html += '<a class="sidebarLink lnkMediaFolder editorViewMenu" data-itemid="editor" onclick="return LibraryMenu.onLinkClicked(this);" href="edititemmetadata.html"><iron-icon icon="mode-edit" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonMetadataManager') + '</span></a>';
html += '<a class="sidebarLink lnkMediaFolder editorViewMenu" data-itemid="editor" onclick="return LibraryMenu.onLinkClicked(event, this);" href="edititemmetadata.html"><iron-icon icon="mode-edit" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonMetadataManager') + '</span></a>';
if (!$.browser.mobile && !AppInfo.isTouchPreferred) {
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="reports" onclick="return LibraryMenu.onLinkClicked(this);" href="reports.html"><iron-icon icon="insert-chart" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonReports') + '</span></a>';
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="reports" onclick="return LibraryMenu.onLinkClicked(event, this);" href="reports.html"><iron-icon icon="insert-chart" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonReports') + '</span></a>';
}
html += '</div>';
html += '<div class="userMenuOptions">';
html += '<div class="sidebarDivider"></div>';
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="inbox" onclick="return LibraryMenu.onLinkClicked(this);" href="notificationlist.html"><iron-icon icon="inbox" class="sidebarLinkIcon"></iron-icon>';
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="inbox" onclick="return LibraryMenu.onLinkClicked(event, this);" href="notificationlist.html"><iron-icon icon="inbox" class="sidebarLinkIcon"></iron-icon>';
html += Globalize.translate('ButtonInbox');
html += '<div class="btnNotifications"><div class="btnNotificationsInner">0</div></div>';
html += '</a>';
if (user.localUser && showUserAtTop()) {
html += '<a class="sidebarLink lnkMediaFolder lnkMySettings" onclick="return LibraryMenu.onLinkClicked(this);" data-itemid="mysync" href="mypreferencesdisplay.html?userId=' + user.localUser.Id + '"><iron-icon icon="settings" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonSettings') + '</span></a>';
html += '<a class="sidebarLink lnkMediaFolder lnkMySettings" onclick="return LibraryMenu.onLinkClicked(event, this);" data-itemid="mysync" href="mypreferencesdisplay.html?userId=' + user.localUser.Id + '"><iron-icon icon="settings" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonSettings') + '</span></a>';
}
html += '<a class="sidebarLink lnkMediaFolder lnkMySync" data-itemid="mysync" onclick="return LibraryMenu.onLinkClicked(this);" href="mysync.html"><iron-icon icon="refresh" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonSync') + '</span></a>';
html += '<a class="sidebarLink lnkMediaFolder lnkMySync" data-itemid="mysync" onclick="return LibraryMenu.onLinkClicked(event, this);" href="mysync.html"><iron-icon icon="refresh" class="sidebarLinkIcon"></iron-icon><span class="sidebarLinkText">' + Globalize.translate('ButtonSync') + '</span></a>';
if (Dashboard.isConnectMode()) {
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="selectserver" onclick="return LibraryMenu.onLinkClicked(this);" href="selectserver.html"><span class="fa fa-globe sidebarLinkIcon"></span><span class="sidebarLinkText">' + Globalize.translate('ButtonSelectServer') + '</span></a>';
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="selectserver" onclick="return LibraryMenu.onLinkClicked(event, this);" href="selectserver.html"><span class="fa fa-globe sidebarLinkIcon"></span><span class="sidebarLinkText">' + Globalize.translate('ButtonSelectServer') + '</span></a>';
}
if (showUserAtTop()) {
@ -457,7 +460,7 @@
color = "#293AAE";
}
return '<a data-itemid="' + itemId + '" class="lnkMediaFolder sidebarLink" onclick="return LibraryMenu.onLinkClicked(this);" href="' + getItemHref(i, i.CollectionType) + '"><iron-icon icon="' + icon + '" class="sidebarLinkIcon" style="color:' + color + '"></iron-icon><span class="sectionName">' + i.Name + '</span></a>';
return '<a data-itemid="' + itemId + '" class="lnkMediaFolder sidebarLink" onclick="return LibraryMenu.onLinkClicked(event, this);" href="' + getItemHref(i, i.CollectionType) + '"><iron-icon icon="' + icon + '" class="sidebarLinkIcon" style="color:' + color + '"></iron-icon><span class="sectionName">' + i.Name + '</span></a>';
}).join('');
@ -516,7 +519,11 @@
setText: setLibraryMenuText,
onLinkClicked: function (link) {
onLinkClicked: function (event, link) {
if (event.which != 1) {
return true;
}
// There doesn't seem to be a way to detect if the drawer is in the process of opening, so try to handle that here
if ((new Date().getTime() - lastOpenTime) > 200) {
@ -549,6 +556,17 @@
onHardwareMenuButtonClick: function () {
openMainDrawer();
},
onSettingsClicked: function (event) {
if (event.which != 1) {
return true;
}
// There doesn't seem to be a way to detect if the drawer is in the process of opening, so try to handle that here
Dashboard.navigate('dashboard.html');
return false;
}
};

View file

@ -1163,7 +1163,7 @@
});
}
mediaRenderer.setCurrentSrc(videoUrl, tracks, item, mediaSource);
mediaRenderer.setCurrentSrc(videoUrl, item, mediaSource, tracks);
// IE wont autoplay without this
if (videoUrl.indexOf('.m3u8') == -1) {

View file

@ -481,6 +481,10 @@
clearProgressInterval();
var intervalTime = ApiClient.isWebSocketOpen() ? 1200 : 5000;
// Ease up with safari because it doesn't perform as well
if ($.browser.safari) {
intervalTime = Math.max(intervalTime, 5000);
}
self.lastProgressReport = 0;
currentProgressInterval = setInterval(function () {
@ -1705,11 +1709,6 @@
return true;
};
function getAudioRenderer() {
return new AudioRenderer();
}
function onTimeUpdate() {
var currentTicks = self.getCurrentTicks(this);
@ -1735,11 +1734,12 @@
var initialVolume = self.getSavedVolume();
var mediaRenderer = getAudioRenderer();
var mediaRenderer = new AudioRenderer({
poster: self.getPosterUrl(item)
});
// Set volume first to avoid an audible change
mediaRenderer.volume(initialVolume);
mediaRenderer.setPoster(self.getPosterUrl(item));
mediaRenderer.setCurrentSrc(audioUrl, item, mediaSource);
Events.on(mediaRenderer, "volumechange.mediaplayerevent", function () {

View file

@ -4,27 +4,43 @@
var view = LibraryBrowser.getDefaultItemsView('Poster', 'Poster');
// The base query options
var query = {
var data = {};
function getQuery() {
var key = getSavedQueryKey();
var pageData = data[key];
if (!pageData) {
pageData = data[key] = {
query: {
SortBy: "SortName",
SortOrder: "Ascending",
Recursive: true,
Fields: "PrimaryImageAspectRatio,SortName,DateCreated,SyncInfo,ItemCounts",
StartIndex: 0,
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"
EnableImageTypes: "Primary,Backdrop,Banner,Thumb",
Limit: LibraryBrowser.getDefaultPageSize()
}
};
pageData.query.ParentId = LibraryMenu.getTopParentId();
LibraryBrowser.loadSavedQueryValues(key, pageData.query);
}
return pageData.query;
}
function getSavedQueryKey() {
return 'musicartists' + (query.ParentId || '');
return getWindowUrl();
}
function reloadItems(page) {
Dashboard.showLoadingMsg();
var query = getQuery();
ApiClient.getArtists(Dashboard.getCurrentUserId(), query).done(function (result) {
// Scroll back up so they can see the results from the beginning
@ -101,13 +117,14 @@
});
LibraryBrowser.saveQueryValues(getSavedQueryKey(), query);
LibraryBrowser.setLastRefreshed(page);
Dashboard.hideLoadingMsg();
});
}
function updateFilterControls(page) {
var query = getQuery();
$('.chkStandardFilter', page).each(function () {
var filters = "," + (query.Filters || "");
@ -126,6 +143,7 @@
var filtersLoaded;
function reloadFiltersIfNeeded(page) {
var query = getQuery();
if (!filtersLoaded) {
filtersLoaded = true;
@ -148,6 +166,7 @@
$('.chkStandardFilter', this).on('change', function () {
var query = getQuery();
var filterName = this.getAttribute('data-filter');
var filters = query.Filters || "";
@ -165,6 +184,7 @@
$('.alphabetPicker', this).on('alphaselect', function (e, character) {
var query = getQuery();
query.NameStartsWithOrGreater = character;
query.StartIndex = 0;
@ -172,6 +192,7 @@
}).on('alphaclear', function (e) {
var query = getQuery();
query.NameStartsWithOrGreater = '';
reloadItems(page);
@ -187,6 +208,7 @@
});
$('#selectPageSize', page).on('change', function () {
var query = getQuery();
query.Limit = parseInt(this.value);
query.StartIndex = 0;
reloadItems(page);
@ -196,22 +218,12 @@
var page = this;
query.ParentId = LibraryMenu.getTopParentId();
var query = getQuery();
var limit = LibraryBrowser.getDefaultPageSize(pageSizeKey, 100);
// If the default page size has changed, the start index will have to be reset
if (limit != query.Limit) {
query.Limit = limit;
query.StartIndex = 0;
}
var viewkey = getSavedQueryKey();
LibraryBrowser.loadSavedQueryValues(viewkey, query);
QueryFilters.onPageShow(page, query);
LibraryBrowser.getSavedViewSetting(viewkey).done(function (val) {
if (LibraryBrowser.needsRefresh(page)) {
LibraryBrowser.getSavedViewSetting(getSavedQueryKey()).done(function (val) {
if (val) {
$('#selectView', page).val(val).selectmenu('refresh').trigger('change');
@ -219,6 +231,7 @@
reloadItems(page);
}
});
}
updateFilterControls(this);
});

View file

@ -202,7 +202,9 @@
button.addClass('hide');
}
function updatePlayerState(state) {
var lastUpdateTime = 0;
function updatePlayerState(event, state) {
if (state.NowPlayingItem) {
showNowPlayingBar();
@ -211,6 +213,19 @@
return;
}
if (event.type == 'positionchange') {
// Try to avoid hammering the document with changes
var now = new Date().getTime();
if ((now - lastUpdateTime) < 700) {
console.log('skipping UI update');
return;
}
lastUpdateTime = now;
}
console.log(new Date().getTime());
lastPlayerState = state;
if (!muteButton) {
@ -343,7 +358,7 @@
nowPlayingTextElement.html(nameHtml);
var url;
var imgHeight = 90;
var imgHeight = 80;
var nowPlayingItem = state.NowPlayingItem;
@ -451,7 +466,7 @@
return;
}
updatePlayerState(state);
updatePlayerState(e, state);
}
function releaseCurrentPlayer() {

View file

@ -375,8 +375,20 @@
loadPlaylist($($.mobile.activePage)[0]);
}
var lastUpdateTime = 0;
function onStateChanged(e, state) {
if (e.type == 'positionchange') {
// Try to avoid hammering the document with changes
var now = new Date().getTime();
if ((now - lastUpdateTime) < 700) {
return;
}
lastUpdateTime = now;
}
updatePlayerState($($.mobile.activePage)[0], state);
}

File diff suppressed because one or more lines are too long