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

update xbox one profile

This commit is contained in:
Luke Pulverenti 2015-05-07 18:27:01 -04:00
parent f515eab01b
commit b28e9b73bb
24 changed files with 624 additions and 532 deletions

View file

@ -9,7 +9,7 @@
<div class="libraryViewNav scopedLibraryViewNav movieTabs">
<a href="moviesrecommended.html">${TabSuggestions}</a>
<a href="movies.html">${TabMovies}</a>
<a href="movietrailers.html">${TabTrailers}</a>
<a href="movietrailers.html" class="movieTrailersTab">${TabTrailers}</a>
<a href="#" class="ui-btn-active">${TabCollections}</a>
<a href="moviegenres.html">${TabGenres}</a>
<a href="moviepeople.html" class="moviePeopleTab">${TabPeople}</a>

View file

@ -238,11 +238,6 @@
height: 100%;
}
.cardImage canvas {
width: 100%;
height: 100%;
}
.coveredCardImage {
background-size: cover;
}

View file

@ -114,14 +114,6 @@
background-image: url("images/icons/subtitles.png");
}
.ui-icon-wireless:after {
background-image: url("images/icons/wireless.png");
}
/* Fallback */
.ui-nosvg .ui-icon-wireless:after {
background-image: url("images/icons/wireless.png");
}
.ui-icon-expand:after {
background-image: url("data:image/svg+xml;charset=US-ASCII,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-8%22%3F%3E%3C!DOCTYPE%20svg%20PUBLIC%20%22-%2F%2FW3C%2F%2FDTD%20SVG%201.1%20Tiny%2F%2FEN%22%20%22http%3A%2F%2Fwww.w3.org%2FGraphics%2FSVG%2F1.1%2FDTD%2Fsvg11-tiny.dtd%22%3E%3Csvg%20version%3D%221.1%22%20baseProfile%3D%22tiny%22%20id%3D%22Layer_1%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%20x%3D%220px%22%20y%3D%220px%22%20width%3D%2216px%22%20height%3D%2216px%22%20viewBox%3D%220%200%20500%20500%22%20xml%3Aspace%3D%22preserve%22%3E%20%3Cpath%20d%3D%22M210.659%20294.643q0%203.627-2.79%206.417l-92.634%2092.634%2040.179%2040.179q5.301%205.301%205.301%2012.556t-5.301%2012.556-12.556%205.301h-125q-7.254%200-12.556-5.301t-5.301-12.556v-125q0-7.254%205.301-12.556t12.556-5.301%2012.556%205.301l40.179%2040.179%2092.634-92.634q2.79-2.79%206.417-2.79t6.417%202.79l31.808%2031.808q2.79%202.79%202.79%206.417zM428.571%2053.571v125q0%207.254-5.301%2012.556t-12.556%205.301-12.556-5.301l-40.179-40.179-92.634%2092.634q-2.79%202.79-6.417%202.79t-6.417-2.79l-31.808-31.808q-2.79-2.79-2.79-6.417t2.79-6.417l92.634-92.634-40.179-40.179q-5.301-5.301-5.301-12.556t5.301-12.556%2012.556-5.301h125q7.254%200%2012.556%205.301t5.301%2012.556z%22%20fill%3D%22%23ffffff%22%20%2F%3E%3C%2Fsvg%3E");
background-repeat: no-repeat;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 345 B

View file

@ -1443,14 +1443,14 @@ span.itemCommunityRating:not(:empty) + .userDataIcons {
}
.userProfileSettingsForm .detailSectionContent {
padding: 0 1em;
padding: 0 .5em;
}
@media all and (max-width: 700px) {
.userProfileSettingsForm .detailSection {
margin-left: 1em;
margin-right: 1em;
margin-left: .5em;
margin-right: .5em;
}
}
@ -1505,3 +1505,6 @@ span.itemCommunityRating:not(:empty) + .userDataIcons {
.homeLatestTabDisabled .homeLatestTab {
display: none !important;
}
.movieTrailersTabDisabled .movieTrailersTab {
display: none !important;
}

View file

@ -1,9 +1,9 @@
.libraryPage {
padding-top: 49px !important;
padding-top: 50px !important;
}
.libraryPage:not(.metadataEditorPage):not(.noSecondaryNavPage) {
padding-top: 99px !important;
padding-top: 98px !important;
}
.libraryMenuDivider {
@ -118,9 +118,7 @@
left: 0;
z-index: 999;
top: 0;
border-top: 0;
border-left: 0;
border-right: 0;
border: 0;
}
.libraryViewNav {
@ -133,6 +131,7 @@
z-index: 999;
text-align: center;
font-size: 14px;
text-transform: uppercase;
white-space: nowrap;
padding: 0 0 0;
overflow-x: scroll;
@ -141,6 +140,13 @@
-webkit-overflow-scrolling: touch;
}
.bottomLibraryViewNav {
top: initial;
bottom: 0;
border-top: 1px solid #444;
height: 51px;
}
.viewMenuBar {
background-color: #111;
}
@ -232,9 +238,13 @@
border-bottom: 5px solid transparent;
}
.libraryViewNav a:not(.ui-btn-active):hover {
color: #2ad !important;
}
.bottomLibraryViewNav a {
padding: 12px 0 12px;
}
.libraryViewNav a:not(.ui-btn-active):hover {
color: #2ad !important;
}
.libraryViewNavLinkContent {
display: inline-block;

View file

@ -176,7 +176,7 @@ h1 a:hover {
transform: translateY(0%);
}
.headroom--unpinned {
.headroom--unpinned:not(.headroomDisabled) {
-webkit-transform: translateY(-100%);
transform: translateY(-100%);
}
@ -613,9 +613,9 @@ h1 .imageLink {
/* Footer */
#footer {
position: fixed;
bottom: -2px;
left: -2px;
right: -2px;
bottom: 0;
left: 0;
right: 0;
/* Above everything, except for the video player and popup overlays */
z-index: 1097;
color: #fff;
@ -623,6 +623,10 @@ h1 .imageLink {
background-color: rgba(26,26,26,.9);
}
.footerOverBottomTabs {
bottom: 50px;
}
.footerNotification {
padding: .75em 1em;
margin: 0;

View file

@ -10,7 +10,7 @@
<div class="libraryViewNav scopedLibraryViewNav">
<a href="moviesrecommended.html">${TabSuggestions}</a>
<a href="movies.html">${TabMovies}</a>
<a href="movietrailers.html">${TabTrailers}</a>
<a href="movietrailers.html" class="movieTrailersTab">${TabTrailers}</a>
<a href="collections.html?context=movies">${TabCollections}</a>
<a href="moviegenres.html" class="ui-btn-active">${TabGenres}</a>
<a href="moviepeople.html" class="moviePeopleTab">${TabPeople}</a>
@ -21,7 +21,7 @@
<div class="libraryViewNav scopedLibraryViewNav">
<a href="moviesrecommended.html">${TabSuggestions}</a>
<a href="movies.html">${TabMovies}</a>
<a href="movietrailers.html">${TabTrailers}</a>
<a href="movietrailers.html" class="movieTrailersTab">${TabTrailers}</a>
<a href="collections.html?context=movies">${TabCollections}</a>
<a href="moviegenres.html">${TabGenres}</a>
<a href="moviepeople.html" class="ui-btn-active moviePeopleTab">${TabPeople}</a>
@ -32,7 +32,7 @@
<div class="libraryViewNav scopedLibraryViewNav">
<a href="moviesrecommended.html">${TabSuggestions}</a>
<a href="movies.html">${TabMovies}</a>
<a href="movietrailers.html">${TabTrailers}</a>
<a href="movietrailers.html" class="movieTrailersTab">${TabTrailers}</a>
<a href="collections.html?context=movies">${TabCollections}</a>
<a href="moviegenres.html">${TabGenres}</a>
<a href="moviepeople.html" class="moviePeopleTab">${TabPeople}</a>

View file

@ -33,7 +33,7 @@
<div class="libraryViewNav scopedLibraryViewNav">
<a href="moviesrecommended.html">${TabSuggestions}</a>
<a href="movies.html" class="lnkMovies">${TabMovies}</a>
<a href="movietrailers.html" class="lnkMovieTrailers">${TabTrailers}</a>
<a href="movietrailers.html" class="lnkMovieTrailers movieTrailersTab">${TabTrailers}</a>
<a href="collections.html?context=movies" class="lnkCollections">${TabCollections}</a>
<a href="moviegenres.html">${TabGenres}</a>
<a href="moviepeople.html" class="moviePeopleTab">${TabPeople}</a>

View file

@ -9,7 +9,7 @@
<div class="libraryViewNav scopedLibraryViewNav">
<a href="moviesrecommended.html">${TabSuggestions}</a>
<a href="movies.html">${TabMovies}</a>
<a href="movietrailers.html">${TabTrailers}</a>
<a href="movietrailers.html" class="movieTrailersTab">${TabTrailers}</a>
<a href="collections.html?context=movies">${TabCollections}</a>
<a href="#" class="ui-btn-active">${TabGenres}</a>
<a href="moviepeople.html" class="moviePeopleTab">${TabPeople}</a>

View file

@ -9,7 +9,7 @@
<div class="libraryViewNav scopedLibraryViewNav">
<a href="moviesrecommended.html">${TabSuggestions}</a>
<a href="movies.html">${TabMovies}</a>
<a href="movietrailers.html">${TabTrailers}</a>
<a href="movietrailers.html" class="movieTrailersTab">${TabTrailers}</a>
<a href="collections.html?context=movies">${TabCollections}</a>
<a href="moviegenres.html">${TabGenres}</a>
<a href="#" class="ui-btn-active">${TabPeople}</a>

View file

@ -9,7 +9,7 @@
<div class="libraryViewNav scopedLibraryViewNav">
<a href="moviesrecommended.html">${TabSuggestions}</a>
<a href="#" class="ui-btn-active">${TabMovies}</a>
<a href="movietrailers.html">${TabTrailers}</a>
<a href="movietrailers.html" class="movieTrailersTab">${TabTrailers}</a>
<a href="collections.html?context=movies">${TabCollections}</a>
<a href="moviegenres.html">${TabGenres}</a>
<a href="moviepeople.html" class="moviePeopleTab">${TabPeople}</a>

View file

@ -9,7 +9,7 @@
<div class="libraryViewNav scopedLibraryViewNav">
<a href="#" class="ui-btn-active">${TabSuggestions}</a>
<a href="movies.html">${TabMovies}</a>
<a href="movietrailers.html">${TabTrailers}</a>
<a href="movietrailers.html" class="movieTrailersTab">${TabTrailers}</a>
<a href="collections.html?context=movies">${TabCollections}</a>
<a href="moviegenres.html">${TabGenres}</a>
<a href="moviepeople.html" class="moviePeopleTab">${TabPeople}</a>

View file

@ -9,7 +9,7 @@
<div class="libraryViewNav scopedLibraryViewNav">
<a href="moviesrecommended.html">${TabSuggestions}</a>
<a href="movies.html">${TabMovies}</a>
<a href="movietrailers.html">${TabTrailers}</a>
<a href="movietrailers.html" class="movieTrailersTab">${TabTrailers}</a>
<a href="collections.html?context=movies">${TabCollections}</a>
<a href="moviegenres.html">${TabGenres}</a>
<a href="moviepeople.html" class="moviePeopleTab">${TabPeople}</a>

View file

@ -13,142 +13,144 @@
<a href="#" class="lnkWebClientPreferences">${TabAppSettings}</a>
</div>
<br />
<form class="displayPreferencesForm userProfileSettingsForm" style="margin: 0 auto;">
<div data-role="content">
<br />
<form class="displayPreferencesForm userProfileSettingsForm" style="margin: 0 auto;">
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderMyViews}
</div>
<div class="detailSectionContent">
<div>
<p>${LabelSelectFolderGroups}</p>
<div class="folderGroupList"></div>
<div class="fieldDescription">${LabelSelectFolderGroupsHelp}</div>
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderMyViews}
</div>
<br />
<div>
<div data-role="controlgroup">
<label for="chkDisplayCollectionView">${LabelDisplayCollectionsView}</label>
<input id="chkDisplayCollectionView" type="checkbox" />
</div>
<div class="fieldDescription">${LabelDisplayCollectionsViewHelp}</div>
</div>
<br />
<div data-role="controlgroup">
<label for="chkDisplayFolderView">${LabelDisplayFoldersView}</label>
<input id="chkDisplayFolderView" type="checkbox" />
</div>
<br />
<div data-role="collapsible">
<h2>${HeaderChannels}</h2>
<div class="detailSectionContent">
<div>
<p>${LabelGroupChannelsIntoViews}</p>
<div class="channelGroupList"></div>
<div class="fieldDescription">${LabelGroupChannelsIntoViewsHelp}</div>
<p>${LabelSelectFolderGroups}</p>
<div class="folderGroupList"></div>
<div class="fieldDescription">${LabelSelectFolderGroupsHelp}</div>
</div>
</div>
</div>
</div>
<br />
<div class="detailSection viewStylesSection" style="display:none;">
<div class="detailSectionHeader">
${HeaderViewStyles}
</div>
<div class="detailSectionContent">
<p>${LabelSelectViewStyles}</p>
<div class="viewStylesList">
</div>
<div class="fieldDescription">${LabelSelectViewStylesHelp}</div>
</div>
</div>
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderViewOrder}
</div>
<div class="detailSectionContent">
<p>${LabelSelectUserViewOrder}</p>
<div class="viewOrderList">
</div>
</div>
</div>
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderLatestItems}
</div>
<div class="detailSectionContent">
<p>${LabelSelectLastestItemsFolders}</p>
<div class="latestItemsList">
</div>
<br />
<div data-role="controlgroup">
<label for="chkHidePlayedFromLatest">${OptionHideWatchedContentFromLatestMedia}</label>
<input id="chkHidePlayedFromLatest" type="checkbox" />
</div>
</div>
</div>
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderOtherDisplaySettings}
</div>
<div class="detailSectionContent">
<br />
<div data-role="controlgroup">
<div>
<input type="checkbox" id="chkDisplayMissingEpisodes" />
<label for="chkDisplayMissingEpisodes">${LabelDisplayMissingEpisodesWithinSeasons}</label>
<div data-role="controlgroup">
<label for="chkDisplayCollectionView">${LabelDisplayCollectionsView}</label>
<input id="chkDisplayCollectionView" type="checkbox" />
</div>
<div class="fieldDescription">${LabelDisplayCollectionsViewHelp}</div>
</div>
<div>
<input type="checkbox" id="chkDisplayUnairedEpisodes" />
<label for="chkDisplayUnairedEpisodes">${LabelUnairedMissingEpisodesWithinSeasons}</label>
</div>
</div>
<br />
<div>
<br />
<div data-role="controlgroup">
<input type="checkbox" id="chkDisplayTrailersWithinMovieSuggestions" />
<label for="chkDisplayTrailersWithinMovieSuggestions">${LabelDisplayTrailersWithinMovieSuggestions}</label>
<label for="chkDisplayFolderView">${LabelDisplayFoldersView}</label>
<input id="chkDisplayFolderView" type="checkbox" />
</div>
<div class="fieldDescription">${LabelDisplayTrailersWithinMovieSuggestionsHelp}</div>
</div>
<br />
<div>
<div data-role="controlgroup">
<input type="checkbox" id="chkGroupMoviesIntoCollections" />
<label for="chkGroupMoviesIntoCollections">${LabelGroupMoviesIntoCollections}</label>
<br />
<div data-role="collapsible">
<h2>${HeaderChannels}</h2>
<div>
<p>${LabelGroupChannelsIntoViews}</p>
<div class="channelGroupList"></div>
<div class="fieldDescription">${LabelGroupChannelsIntoViewsHelp}</div>
</div>
</div>
<div class="fieldDescription">${LabelGroupMoviesIntoCollectionsHelp}</div>
</div>
</div>
</div>
<div class="detailSection viewStylesSection" style="display:none;">
<div class="detailSectionHeader">
${HeaderViewStyles}
</div>
<div class="detailSectionContent">
<p>${LabelSelectViewStyles}</p>
<div class="viewStylesList">
<ul data-role="listview" class="ulForm">
<li>
<button type="submit" data-theme="a" data-icon="check" data-mini="true">
${ButtonOk}
</button>
<button type="button" onclick="history.back();" data-icon="delete" data-mini="true">
${ButtonCancel}
</button>
</li>
</ul>
</form>
<script type="text/javascript">
$('.displayPreferencesForm').off('submit', DisplayPreferencesPage.onSubmit).on('submit', DisplayPreferencesPage.onSubmit);
</script>
</div>
<div class="fieldDescription">${LabelSelectViewStylesHelp}</div>
</div>
</div>
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderViewOrder}
</div>
<div class="detailSectionContent">
<p>${LabelSelectUserViewOrder}</p>
<div class="viewOrderList">
</div>
</div>
</div>
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderLatestItems}
</div>
<div class="detailSectionContent">
<p>${LabelSelectLastestItemsFolders}</p>
<div class="latestItemsList">
</div>
<br />
<div data-role="controlgroup">
<label for="chkHidePlayedFromLatest">${OptionHideWatchedContentFromLatestMedia}</label>
<input id="chkHidePlayedFromLatest" type="checkbox" />
</div>
</div>
</div>
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderOtherDisplaySettings}
</div>
<div class="detailSectionContent">
<br />
<div data-role="controlgroup">
<div>
<input type="checkbox" id="chkDisplayMissingEpisodes" />
<label for="chkDisplayMissingEpisodes">${LabelDisplayMissingEpisodesWithinSeasons}</label>
</div>
<div>
<input type="checkbox" id="chkDisplayUnairedEpisodes" />
<label for="chkDisplayUnairedEpisodes">${LabelUnairedMissingEpisodesWithinSeasons}</label>
</div>
</div>
<br />
<div>
<div data-role="controlgroup">
<input type="checkbox" id="chkDisplayTrailersWithinMovieSuggestions" />
<label for="chkDisplayTrailersWithinMovieSuggestions">${LabelDisplayTrailersWithinMovieSuggestions}</label>
</div>
<div class="fieldDescription">${LabelDisplayTrailersWithinMovieSuggestionsHelp}</div>
</div>
<br />
<div>
<div data-role="controlgroup">
<input type="checkbox" id="chkGroupMoviesIntoCollections" />
<label for="chkGroupMoviesIntoCollections">${LabelGroupMoviesIntoCollections}</label>
</div>
<div class="fieldDescription">${LabelGroupMoviesIntoCollectionsHelp}</div>
</div>
</div>
</div>
<ul data-role="listview" class="ulForm">
<li>
<button type="submit" data-theme="a" data-icon="check">
${ButtonOk}
</button>
<button type="button" onclick="history.back();" data-icon="delete">
${ButtonCancel}
</button>
</li>
</ul>
</form>
<script type="text/javascript">
$('.displayPreferencesForm').off('submit', DisplayPreferencesPage.onSubmit).on('submit', DisplayPreferencesPage.onSubmit);
</script>
</div>
</div>
</body>
</html>

View file

@ -12,78 +12,80 @@
<a href="#" class="lnkMyProfile">${TabProfile}</a>
<a href="#" class="lnkWebClientPreferences">${TabAppSettings}</a>
</div>
<div data-role="content">
<br />
<form style="margin: 0 auto;" class="languagePreferencesForm userProfileSettingsForm">
<br />
<form style="margin: 0 auto;" class="languagePreferencesForm userProfileSettingsForm">
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderLanguagePreferences}
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderLanguagePreferences}
</div>
<div class="detailSectionContent">
<br />
<div>
<label for="selectAudioLanguage">${LabelAudioLanguagePreference}</label>
<select id="selectAudioLanguage" data-mini="true"></select>
</div>
<br />
<div data-role="controlgroup">
<input type="checkbox" id="chkPlayDefaultAudioTrack" />
<label for="chkPlayDefaultAudioTrack">${LabelPlayDefaultAudioTrack}</label>
</div>
<br />
<div>
<label for="selectSubtitleLanguage">${LabelSubtitleLanguagePreference}</label>
<select id="selectSubtitleLanguage" data-mini="true"></select>
</div>
<br />
<div>
<label for="selectSubtitlePlaybackMode">${LabelSubtitlePlaybackMode}</label>
<select id="selectSubtitlePlaybackMode" data-mini="true">
<option value="Default">${OptionDefaultSubtitles}</option>
<option value="OnlyForced">${OptionOnlyForcedSubtitles}</option>
<option value="Always">${OptionAlwaysPlaySubtitles}</option>
<option value="None">${OptionNoSubtitles}</option>
</select>
<div class="fieldDescription subtitlesDefaultHelp subtitlesHelp" style="display: none;">${OptionDefaultSubtitlesHelp}</div>
<div class="fieldDescription subtitlesAlwaysHelp subtitlesHelp" style="display: none;">${OptionAlwaysPlaySubtitlesHelp}</div>
<div class="fieldDescription subtitlesOnlyForcedHelp subtitlesHelp" style="display: none;">${OptionOnlyForcedSubtitlesHelp}</div>
<div class="fieldDescription subtitlesNoneHelp subtitlesHelp" style="display: none;">${OptionNoSubtitlesHelp}</div>
</div>
</div>
</div>
<div class="detailSectionContent">
<br />
<div>
<label for="selectAudioLanguage">${LabelAudioLanguagePreference}</label>
<select id="selectAudioLanguage" data-mini="true"></select>
<div class="detailSection cinemaModeOptions" style="display:none;">
<div class="detailSectionHeader">
${HeaderCinemaMode}
</div>
<br />
<div data-role="controlgroup">
<input type="checkbox" id="chkPlayDefaultAudioTrack" />
<label for="chkPlayDefaultAudioTrack">${LabelPlayDefaultAudioTrack}</label>
</div>
<br />
<div>
<label for="selectSubtitleLanguage">${LabelSubtitleLanguagePreference}</label>
<select id="selectSubtitleLanguage" data-mini="true"></select>
</div>
<br />
<div>
<label for="selectSubtitlePlaybackMode">${LabelSubtitlePlaybackMode}</label>
<select id="selectSubtitlePlaybackMode" data-mini="true">
<option value="Default">${OptionDefaultSubtitles}</option>
<option value="OnlyForced">${OptionOnlyForcedSubtitles}</option>
<option value="Always">${OptionAlwaysPlaySubtitles}</option>
<option value="None">${OptionNoSubtitles}</option>
</select>
<div class="fieldDescription subtitlesDefaultHelp subtitlesHelp" style="display: none;">${OptionDefaultSubtitlesHelp}</div>
<div class="fieldDescription subtitlesAlwaysHelp subtitlesHelp" style="display: none;">${OptionAlwaysPlaySubtitlesHelp}</div>
<div class="fieldDescription subtitlesOnlyForcedHelp subtitlesHelp" style="display: none;">${OptionOnlyForcedSubtitlesHelp}</div>
<div class="fieldDescription subtitlesNoneHelp subtitlesHelp" style="display: none;">${OptionNoSubtitlesHelp}</div>
<div class="detailSectionContent">
<br />
<div data-role="controlgroup">
<input type="checkbox" id="chkEnableCinemaMode" />
<label for="chkEnableCinemaMode">${LabelEnableCinemaMode}</label>
</div>
<div class="fieldDescription">${CinemaModeConfigurationHelp}</div>
</div>
</div>
</div>
<div class="detailSection cinemaModeOptions" style="display:none;">
<div class="detailSectionHeader">
${HeaderCinemaMode}
</div>
<div class="detailSectionContent">
<br />
<div data-role="controlgroup">
<input type="checkbox" id="chkEnableCinemaMode" />
<label for="chkEnableCinemaMode">${LabelEnableCinemaMode}</label>
</div>
<div class="fieldDescription">${CinemaModeConfigurationHelp}</div>
</div>
</div>
<ul data-role="listview" class="ulForm">
<li>
<button type="submit" data-theme="a" data-icon="check" data-mini="true">
${ButtonOk}
</button>
<button type="button" onclick="history.back();" data-icon="delete" data-mini="true">
${ButtonCancel}
</button>
</li>
</ul>
</form>
<script type="text/javascript">
$('.languagePreferencesForm').off('submit', LanguagePreferencesPage.onSubmit).on('submit', LanguagePreferencesPage.onSubmit);
</script>
<ul data-role="listview" class="ulForm">
<li>
<button type="submit" data-theme="a" data-icon="check">
${ButtonOk}
</button>
<button type="button" onclick="history.back();" data-icon="delete">
${ButtonCancel}
</button>
</li>
</ul>
</form>
<script type="text/javascript">
$('.languagePreferencesForm').off('submit', LanguagePreferencesPage.onSubmit).on('submit', LanguagePreferencesPage.onSubmit);
</script>
</div>
</div>
</body>
</html>

View file

@ -13,188 +13,190 @@
<a href="#" class="ui-btn-active lnkWebClientPreferences">${TabAppSettings}</a>
</div>
<br />
<form class="webClientPreferencesForm userProfileSettingsForm" style="margin: 0 auto;">
<div data-role="content">
<br />
<form class="webClientPreferencesForm userProfileSettingsForm" style="margin: 0 auto;">
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderHomePage}
<div class="detailSection homePageConfigurationSection" style="display:none;">
<div class="detailSectionHeader">
${HeaderHomePage}
</div>
<div class="detailSectionContent">
<br />
<div>
<label for="selectHomeSection1">${LabelHomePageSection1}</label>
<select id="selectHomeSection1" data-mini="true">
<option value="">${OptionAuto}</option>
<option value="latestmedia">${OptionLatestMedia}</option>
<option value="latestchannelmedia">${OptionLatestChannelMedia}</option>
<option value="latesttvrecordings">${OptionLatestTvRecordings}</option>
<option value="librarytiles">${OptionMyMedia}</option>
<option value="smalllibrarytiles">${OptionMyMediaSmall}</option>
<option value="librarybuttons">${OptionMyMediaButtons}</option>
<option value="resume">${OptionResumablemedia}</option>
</select>
</div>
<br />
<div>
<label for="selectHomeSection2">${LabelHomePageSection2}</label>
<select id="selectHomeSection2" data-mini="true">
<option value="">${OptionAuto}</option>
<option value="latestmedia">${OptionLatestMedia}</option>
<option value="latestchannelmedia">${OptionLatestChannelMedia}</option>
<option value="latesttvrecordings">${OptionLatestTvRecordings}</option>
<option value="librarytiles">${OptionMyMedia}</option>
<option value="smalllibrarytiles">${OptionMyMediaSmall}</option>
<option value="librarybuttons">${OptionMyMediaButtons}</option>
<option value="resume">${OptionResumablemedia}</option>
<option value="none">${OptionNone}</option>
</select>
</div>
<br />
<div>
<label for="selectHomeSection3">${LabelHomePageSection3}</label>
<select id="selectHomeSection3" data-mini="true">
<option value="">${OptionAuto}</option>
<option value="latestmedia">${OptionLatestMedia}</option>
<option value="latestchannelmedia">${OptionLatestChannelMedia}</option>
<option value="latesttvrecordings">${OptionLatestTvRecordings}</option>
<option value="librarytiles">${OptionMyMedia}</option>
<option value="smalllibrarytiles">${OptionMyMediaSmall}</option>
<option value="librarybuttons">${OptionMyMediaButtons}</option>
<option value="resume">${OptionResumablemedia}</option>
<option value="none">${OptionNone}</option>
</select>
</div>
<br />
<div>
<label for="selectHomeSection4">${LabelHomePageSection4}</label>
<select id="selectHomeSection4" data-mini="true">
<option value="">${OptionAuto}</option>
<option value="latestmedia">${OptionLatestMedia}</option>
<option value="latestchannelmedia">${OptionLatestChannelMedia}</option>
<option value="latesttvrecordings">${OptionLatestTvRecordings}</option>
<option value="librarytiles">${OptionMyMedia}</option>
<option value="smalllibrarytiles">${OptionMyMediaSmall}</option>
<option value="librarybuttons">${OptionMyMediaButtons}</option>
<option value="resume">${OptionResumablemedia}</option>
<option value="none">${OptionNone}</option>
</select>
</div>
<br />
<div>
<label for="chkEnableLibraryTileNames">${LabelShowLibraryTileNames}</label>
<input type="checkbox" id="chkEnableLibraryTileNames" data-mini="true">
<div class="fieldDescription">${LabelShowLibraryTileNamesHelp}</div>
</div>
</div>
</div>
<div class="detailSectionContent">
<br />
<div>
<label for="selectHomeSection1">${LabelHomePageSection1}</label>
<select id="selectHomeSection1" data-mini="true">
<option value="">${OptionAuto}</option>
<option value="latestmedia">${OptionLatestMedia}</option>
<option value="latestchannelmedia">${OptionLatestChannelMedia}</option>
<option value="latesttvrecordings">${OptionLatestTvRecordings}</option>
<option value="librarytiles">${OptionMyMedia}</option>
<option value="smalllibrarytiles">${OptionMyMediaSmall}</option>
<option value="librarybuttons">${OptionMyMediaButtons}</option>
<option value="resume">${OptionResumablemedia}</option>
</select>
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderSettingsForThisDevice}
</div>
<br />
<div>
<label for="selectHomeSection2">${LabelHomePageSection2}</label>
<select id="selectHomeSection2" data-mini="true">
<option value="">${OptionAuto}</option>
<option value="latestmedia">${OptionLatestMedia}</option>
<option value="latestchannelmedia">${OptionLatestChannelMedia}</option>
<option value="latesttvrecordings">${OptionLatestTvRecordings}</option>
<option value="librarytiles">${OptionMyMedia}</option>
<option value="smalllibrarytiles">${OptionMyMediaSmall}</option>
<option value="librarybuttons">${OptionMyMediaButtons}</option>
<option value="resume">${OptionResumablemedia}</option>
<option value="none">${OptionNone}</option>
</select>
</div>
<br />
<div>
<label for="selectHomeSection3">${LabelHomePageSection3}</label>
<select id="selectHomeSection3" data-mini="true">
<option value="">${OptionAuto}</option>
<option value="latestmedia">${OptionLatestMedia}</option>
<option value="latestchannelmedia">${OptionLatestChannelMedia}</option>
<option value="latesttvrecordings">${OptionLatestTvRecordings}</option>
<option value="librarytiles">${OptionMyMedia}</option>
<option value="smalllibrarytiles">${OptionMyMediaSmall}</option>
<option value="librarybuttons">${OptionMyMediaButtons}</option>
<option value="resume">${OptionResumablemedia}</option>
<option value="none">${OptionNone}</option>
</select>
</div>
<br />
<div>
<label for="selectHomeSection4">${LabelHomePageSection4}</label>
<select id="selectHomeSection4" data-mini="true">
<option value="">${OptionAuto}</option>
<option value="latestmedia">${OptionLatestMedia}</option>
<option value="latestchannelmedia">${OptionLatestChannelMedia}</option>
<option value="latesttvrecordings">${OptionLatestTvRecordings}</option>
<option value="librarytiles">${OptionMyMedia}</option>
<option value="smalllibrarytiles">${OptionMyMediaSmall}</option>
<option value="librarybuttons">${OptionMyMediaButtons}</option>
<option value="resume">${OptionResumablemedia}</option>
<option value="none">${OptionNone}</option>
</select>
</div>
<br />
<div>
<label for="chkEnableLibraryTileNames">${LabelShowLibraryTileNames}</label>
<input type="checkbox" id="chkEnableLibraryTileNames" data-mini="true">
<div class="fieldDescription">${LabelShowLibraryTileNamesHelp}</div>
<div class="detailSectionContent">
<br />
<div>
<label for="selectMaxBitrate">${LabelMaxStreamingBitrate}</label>
<select id="selectMaxBitrate" data-mini="true">
<option value="30000000">30Mbps</option>
<option value="25000000">25Mbps</option>
<option value="20000000">20Mbps</option>
<option value="15000000">15Mbps</option>
<option value="10000000">10Mbps</option>
<option value="8000000">8Mbps</option>
<option value="6000000">6Mbps</option>
<option value="5000000">5Mbps</option>
<option value="4000000">4Mbps</option>
<option value="3000000">3Mbps</option>
<option value="2500000">2.5Mbps</option>
<option value="2000000">2Mbps</option>
<option value="1500000">1.5Mbps</option>
<option value="1000000">1Mbps</option>
<option value="720000">720kbps</option>
<option value="420000">420kbps</option>
<option value="400000">400kbps</option>
<option value="320000">320kbps</option>
<option value="192000">192kbps</option>
</select>
</div>
<br />
<div>
<label for="selectMaxChromecastBitrate">${LabelMaxChromecastBitrate}</label>
<select id="selectMaxChromecastBitrate" data-mini="true">
<option value="30000000">30Mbps</option>
<option value="25000000">25Mbps</option>
<option value="20000000">20Mbps</option>
<option value="15000000">15Mbps</option>
<option value="12000000">12Mbps</option>
<option value="11000000">11Mbps</option>
<option value="10000000">10Mbps</option>
<option value="9000000">9Mbps</option>
<option value="8000000">8Mbps</option>
<option value="7000000">7Mbps</option>
<option value="6000000">6Mbps</option>
<option value="5000000">5Mbps</option>
<option value="4000000">4Mbps</option>
<option value="3000000">3Mbps</option>
<option value="2500000">2.5Mbps</option>
<option value="2000000">2Mbps</option>
<option value="1500000">1.5Mbps</option>
<option value="1000000">1Mbps</option>
<option value="720000">720kbps</option>
<option value="420000">420kbps</option>
<option value="400000">400kbps</option>
<option value="320000">320kbps</option>
<option value="192000">192kbps</option>
</select>
</div>
<br />
<div>
<label for="selectThemeSong">${LabelEnableThemeSongs}</label>
<select id="selectThemeSong" data-mini="true">
<option value="">${OptionAuto}</option>
<option value="1">${OptionYes}</option>
<option value="0">${OptionNo}</option>
</select>
<div class="fieldDescription">${LabelEnableThemeSongsHelp}</div>
</div>
<br />
<div class="fldEnableBackdrops" style="display:none;">
<label for="selectBackdrop">${LabelEnableBackdrops}</label>
<select id="selectBackdrop" data-mini="true">
<option value="">${OptionAuto}</option>
<option value="1">${OptionYes}</option>
<option value="0">${OptionNo}</option>
</select>
<div class="fieldDescription">${LabelEnableBackdropsHelp}</div>
</div>
<br />
<div>
<fieldset data-role="controlgroup">
<legend>${LabelExternalPlayers}</legend>
<!--<input type="checkbox" id="chkGoodplayer" class="chkExternalPlayer" data-name="GoodPlayer" data-scheme="goodplayer://{0}" />
<label for="chkGoodplayer">GoodPlayer</label>-->
<input type="checkbox" id="chkVlc" class="chkExternalPlayer" data-name="Vlc" data-scheme="vlc://{0}" />
<label for="chkVlc">Vlc</label>
</fieldset>
<div style="padding: 0 2px;">${LabelExternalPlayersHelp}</div>
</div>
</div>
</div>
</div>
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderSettingsForThisDevice}
</div>
<div class="detailSectionContent">
<br />
<div>
<label for="selectMaxBitrate">${LabelMaxStreamingBitrate}</label>
<select id="selectMaxBitrate" data-mini="true">
<option value="30000000">30Mbps</option>
<option value="25000000">25Mbps</option>
<option value="20000000">20Mbps</option>
<option value="15000000">15Mbps</option>
<option value="10000000">10Mbps</option>
<option value="8000000">8Mbps</option>
<option value="6000000">6Mbps</option>
<option value="5000000">5Mbps</option>
<option value="4000000">4Mbps</option>
<option value="3000000">3Mbps</option>
<option value="2500000">2.5Mbps</option>
<option value="2000000">2Mbps</option>
<option value="1500000">1.5Mbps</option>
<option value="1000000">1Mbps</option>
<option value="720000">720kbps</option>
<option value="420000">420kbps</option>
<option value="400000">400kbps</option>
<option value="320000">320kbps</option>
<option value="192000">192kbps</option>
</select>
</div>
<br />
<div>
<label for="selectMaxChromecastBitrate">${LabelMaxChromecastBitrate}</label>
<select id="selectMaxChromecastBitrate" data-mini="true">
<option value="30000000">30Mbps</option>
<option value="25000000">25Mbps</option>
<option value="20000000">20Mbps</option>
<option value="15000000">15Mbps</option>
<option value="12000000">12Mbps</option>
<option value="11000000">11Mbps</option>
<option value="10000000">10Mbps</option>
<option value="9000000">9Mbps</option>
<option value="8000000">8Mbps</option>
<option value="7000000">7Mbps</option>
<option value="6000000">6Mbps</option>
<option value="5000000">5Mbps</option>
<option value="4000000">4Mbps</option>
<option value="3000000">3Mbps</option>
<option value="2500000">2.5Mbps</option>
<option value="2000000">2Mbps</option>
<option value="1500000">1.5Mbps</option>
<option value="1000000">1Mbps</option>
<option value="720000">720kbps</option>
<option value="420000">420kbps</option>
<option value="400000">400kbps</option>
<option value="320000">320kbps</option>
<option value="192000">192kbps</option>
</select>
</div>
<br />
<div>
<label for="selectThemeSong">${LabelEnableThemeSongs}</label>
<select id="selectThemeSong" data-mini="true">
<option value="">${OptionAuto}</option>
<option value="1">${OptionYes}</option>
<option value="0">${OptionNo}</option>
</select>
<div class="fieldDescription">${LabelEnableThemeSongsHelp}</div>
</div>
<br />
<div class="fldEnableBackdrops" style="display:none;">
<label for="selectBackdrop">${LabelEnableBackdrops}</label>
<select id="selectBackdrop" data-mini="true">
<option value="">${OptionAuto}</option>
<option value="1">${OptionYes}</option>
<option value="0">${OptionNo}</option>
</select>
<div class="fieldDescription">${LabelEnableBackdropsHelp}</div>
</div>
<br />
<div>
<fieldset data-role="controlgroup">
<legend>${LabelExternalPlayers}</legend>
<!--<input type="checkbox" id="chkGoodplayer" class="chkExternalPlayer" data-name="GoodPlayer" data-scheme="goodplayer://{0}" />
<label for="chkGoodplayer">GoodPlayer</label>-->
<input type="checkbox" id="chkVlc" class="chkExternalPlayer" data-name="Vlc" data-scheme="vlc://{0}" />
<label for="chkVlc">Vlc</label>
</fieldset>
<div style="padding: 0 2px;">${LabelExternalPlayersHelp}</div>
</div>
</div>
</div>
<ul data-role="listview" class="ulForm">
<li>
<button type="submit" data-theme="a" data-icon="check" data-mini="true">
${ButtonOk}
</button>
<button type="button" onclick="history.back();" data-icon="delete" data-mini="true">
${ButtonCancel}
</button>
</li>
</ul>
</form>
<ul data-role="listview" class="ulForm">
<li>
<button type="submit" data-theme="a" data-icon="check">
${ButtonOk}
</button>
<button type="button" onclick="history.back();" data-icon="delete">
${ButtonCancel}
</button>
</li>
</ul>
</form>
</div>
<script type="text/javascript">
$('.webClientPreferencesForm').off('submit', WebClientPreferencesPage.onSubmit).on('submit', WebClientPreferencesPage.onSubmit);
</script>

View file

@ -13,116 +13,117 @@
<a href="#" class="lnkWebClientPreferences">${TabAppSettings}</a>
</div>
<br />
<div class="readOnlyContent" style="margin: 0 auto; padding: 0 1em;">
<div id="fldImage" style="display:inline-block;"></div>
<div data-role="content">
<br />
<div class="readOnlyContent" style="margin: 0 auto; padding: 0 1em;">
<div id="fldImage" style="display:inline-block;"></div>
<div style="vertical-align:top;margin: .5em 0 0 1em;display:inline-block;">
<h2 class="username" style="margin: 0;"></h2>
<button id="btnDeleteImage" type="button" data-icon="delete" style="display: none;margin-top:1em;">
${ButtonDeleteImage}
</button>
<div style="vertical-align:top;margin: .5em 0 0 1em;display:inline-block;">
<h2 class="username" style="margin: 0;"></h2>
<button id="btnDeleteImage" type="button" data-icon="delete" style="display: none;margin-top:1em;">
${ButtonDeleteImage}
</button>
</div>
</div>
</div>
<div class="connectMessage readOnlyContent" style="display:none;margin: 0 auto; padding: 0 1em; text-align:center;">
<p>${MessageProfileInfoSynced}</p>
<div style="margin-top: .75em;"><a href="http://emby.media/connect" target="_blank">${ButtonLearnMoreAboutEmbyConnect}</a></div>
</div>
<div class="connectMessage readOnlyContent" style="display:none;margin: 0 auto; padding: 0 1em; text-align:center;">
<p>${MessageProfileInfoSynced}</p>
<div style="margin-top: .75em;"><a href="http://emby.media/connect" target="_blank">${ButtonLearnMoreAboutEmbyConnect}</a></div>
</div>
<form class="newImageForm userProfileSettingsForm" style="display:none;margin: 1em auto 0;">
<form class="newImageForm userProfileSettingsForm" style="display:none;margin: 1em auto 0;">
<div data-role="collapsible">
<h2 id="headerUploadNewImage" style="display: none;">${HeaderUploadNewImage}</h2>
<div>
<div id="fldNewImage">
<p>${ImageUploadAspectRatioHelp}</p>
<input type="file" accept="image/*" id="uploadUserImage" name="uploadUserImage" onchange="MyProfilePage.onFileUploadChange(this);" />
<div data-role="collapsible">
<h2 id="headerUploadNewImage" style="display: none;">${HeaderUploadNewImage}</h2>
<div>
<div id="fldNewImage">
<p>${ImageUploadAspectRatioHelp}</p>
<input type="file" accept="image/*" id="uploadUserImage" name="uploadUserImage" onchange="MyProfilePage.onFileUploadChange(this);" />
<div id="userImageDropZone" class="imageDropZone">
<h3>${LabelDropImageHere}</h3>
<output id="userImageOutput"></output>
<div id="userImageDropZone" class="imageDropZone">
<h3>${LabelDropImageHere}</h3>
<output id="userImageOutput"></output>
</div>
</div>
<div id="fldNewImagePreview"></div>
<div id="fldUpload" style="display: none;">
<button type="submit" data-icon="check" data-theme="a">${ButtonUpload}</button>
</div>
</div>
<div id="fldNewImagePreview"></div>
<div id="fldUpload" style="display: none;">
<button type="submit" data-icon="check" data-theme="a">${ButtonUpload}</button>
</div>
</form>
<br />
<form class="updatePasswordForm passwordSection userProfileSettingsForm" style="display:none;margin: 0 auto 2em;">
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderPassword}
</div>
<div class="detailSectionContent">
<br />
<div id="fldCurrentPassword" style="display: none;">
<label for="txtCurrentPassword">${LabelCurrentPassword}</label>
<input type="password" id="txtCurrentPassword" name="txtCurrentPassword" />
</div>
<br />
<div>
<label for="txtNewPassword">${LabelNewPassword}</label>
<input type="password" id="txtNewPassword" name="txtNewPassword" />
</div>
<br />
<div>
<label for="txtNewPasswordConfirm">${LabelNewPasswordConfirm}</label>
<input type="password" id="txtNewPasswordConfirm" name="txtNewPasswordConfirm" />
</div>
<br />
<div>
<button type="submit" data-theme="b" data-icon="check" data-mini="true">
${ButtonSave}
</button>
<div id="btnResetPassword" style="display: none;">
<button type="button" data-icon="lock" onclick="UpdatePasswordPage.resetPassword();" data-mini="true">
${ButtonResetPassword}
</button>
</div>
</div>
</div>
</div>
</div>
</form>
<br />
<form class="updatePasswordForm passwordSection userProfileSettingsForm" style="display:none;margin: 0 auto 2em;">
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderPassword}
</div>
<div class="detailSectionContent">
<br />
<div id="fldCurrentPassword" style="display: none;">
<label for="txtCurrentPassword">${LabelCurrentPassword}</label>
<input type="password" id="txtCurrentPassword" name="txtCurrentPassword" />
</form>
<form class="localAccessForm localAccessSection userProfileSettingsForm" style="margin: 0 auto;">
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderEasyPinCode}
</div>
<br />
<div>
<label for="txtNewPassword">${LabelNewPassword}</label>
<input type="password" id="txtNewPassword" name="txtNewPassword" />
</div>
<br />
<div>
<label for="txtNewPasswordConfirm">${LabelNewPasswordConfirm}</label>
<input type="password" id="txtNewPasswordConfirm" name="txtNewPasswordConfirm" />
</div>
<br />
<div>
<button type="submit" data-theme="b" data-icon="check" data-mini="true">
${ButtonSave}
</button>
<div id="btnResetPassword" style="display: none;">
<button type="button" data-icon="lock" onclick="UpdatePasswordPage.resetPassword();" data-mini="true">
${ButtonResetPassword}
<div class="detailSectionContent">
<br />
<div>${EasyPasswordHelp}</div>
<br />
<div>
<label for="txtEasyPassword">${LabelEasyPinCode}</label>
<input type="password" id="txtEasyPassword" />
</div>
<br />
<div>
<label for="chkEnableLocalEasyPassword">${LabelInNetworkSignInWithEasyPassword}</label>
<input type="checkbox" id="chkEnableLocalEasyPassword" />
<div class="fieldDescription">${LabelInNetworkSignInWithEasyPasswordHelp}</div>
</div>
<br />
<div>
<button type="submit" data-theme="b" data-icon="check" data-mini="true">
${ButtonSave}
</button>
<button id="btnResetEasyPassword" style="display:none;" type="button" data-icon="lock" onclick="UpdatePasswordPage.resetEasyPassword();" data-mini="true">
${ButtonResetEasyPassword}
</button>
</div>
</div>
</div>
</div>
</form>
<form class="localAccessForm localAccessSection userProfileSettingsForm" style="margin: 0 auto;">
<div class="detailSection">
<div class="detailSectionHeader">
${HeaderEasyPinCode}
</div>
<div class="detailSectionContent">
<br />
<div>${EasyPasswordHelp}</div>
<br />
<div>
<label for="txtEasyPassword">${LabelEasyPinCode}</label>
<input type="password" id="txtEasyPassword" />
</div>
<br />
<div>
<label for="chkEnableLocalEasyPassword">${LabelInNetworkSignInWithEasyPassword}</label>
<input type="checkbox" id="chkEnableLocalEasyPassword" />
<div class="fieldDescription">${LabelInNetworkSignInWithEasyPasswordHelp}</div>
</div>
<br />
<div>
<button type="submit" data-theme="b" data-icon="check" data-mini="true">
${ButtonSave}
</button>
<button id="btnResetEasyPassword" style="display:none;" type="button" data-icon="lock" onclick="UpdatePasswordPage.resetEasyPassword();" data-mini="true">
${ButtonResetEasyPassword}
</button>
</div>
</div>
</div>
</form>
</form>
</div>
<script type="text/javascript">
$('.newImageForm').off('submit', MyProfilePage.onImageSubmit).on('submit', MyProfilePage.onImageSubmit);
$('.updatePasswordForm').off('submit', UpdatePasswordPage.onSubmit).on('submit', UpdatePasswordPage.onSubmit);

View file

@ -123,9 +123,13 @@
function loadRecentlyAdded(elem, user, context) {
var limit = AppInfo.hasLowImageBandwidth ?
16 :
24;
var options = {
Limit: 24,
Limit: limit,
Fields: "PrimaryImageAspectRatio,SyncInfo",
ImageTypeLimit: 1,
EnableImageTypes: "Primary,Backdrop,Banner,Thumb"

View file

@ -71,6 +71,8 @@
html += '</div>';
html = normalizeLinksHtml(html);
$(document.body).prepend(html);
$('.viewMenuBar').trigger('create');
@ -78,6 +80,18 @@
bindMenuEvents();
}
function replaceAll(str, find, replace) {
return str.replace(new RegExp(find, 'g'), replace);
}
function normalizeLinksHtml(html) {
if (AppInfo.resetOnLibraryChange) {
html = replaceAll(html, '<a ', '<a data-ajax="false"');
}
return html;
}
function bindMenuEvents() {
if (AppInfo.isTouchPreferred) {
@ -99,6 +113,15 @@
initHeadRoom(viewMenuBar);
}
function updateViewMenuBarHeadroom(page, viewMenuBar) {
if ($(page).hasClass('libraryPage')) {
viewMenuBar.removeClass('headroomDisabled');
} else {
viewMenuBar.addClass('headroomDisabled');
}
}
function getItemHref(item, context) {
return LibraryBrowser.getHref(item, context);
@ -114,7 +137,7 @@
html += '<div class="libraryMenuDivider"></div>';
html += '<div class="adminMenuOptions">';
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="dashboard" href="dashboard.html"><span class="fa fa-cog sidebarLinkIcon"></span>' + Globalize.translate('ButtonDashboard') + '</a>';
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="dashboard" data-rel="none" href="dashboard.html"><span class="fa fa-cog sidebarLinkIcon"></span>' + Globalize.translate('ButtonDashboard') + '</a>';
html += '<a class="sidebarLink lnkMediaFolder editorViewMenu" data-itemid="editor" href="edititemmetadata.html"><span class="fa fa-edit sidebarLinkIcon"></span>' + Globalize.translate('ButtonMetadataManager') + '</a>';
html += '<a class="sidebarLink lnkMediaFolder" data-itemid="reports" href="reports.html"><span class="fa fa-bar-chart sidebarLinkIcon"></span>' + Globalize.translate('ButtonReports') + '</a>';
html += '</div>';
@ -218,6 +241,8 @@
}).join('');
html = normalizeLinksHtml(html);
var elem = $('.libraryMenuOptions').html(html);
$('.sidebarLink', elem).on('click', function () {
@ -308,6 +333,7 @@
}
html += getViewsHtml();
html = normalizeLinksHtml(html);
html += '</div>';
html += '</div>';
@ -492,11 +518,13 @@
}).on('pagebeforeshow', ".page:not(.standalonePage)", function () {
var page = this;
var viewMenuBar = $('.viewMenuBar');
if (!$('.viewMenuBar').length) {
ConnectionManager.user().done(function (user) {
renderHeader(user);
updateViewMenuBarHeadroom(page, $('.viewMenuBar'));
updateCastIcon();
@ -506,6 +534,7 @@
} else {
updateContextText(page);
updateLibraryNavLinks(page);
updateViewMenuBarHeadroom(page, viewMenuBar);
}
var jpage = $(page);
@ -519,14 +548,20 @@
$(document.body).removeClass('dashboardDocument').removeClass('libraryDocument');
}
}).on('pagebeforeshow', ".page", function () {
}).on('pagebeforeshow', ".libraryPage", function () {
var page = this;
if ($(page).hasClass('standalonePage')) {
$('.viewMenuBar').hide();
if (AppInfo.enableBottomTabs) {
$('.libraryViewNav', page).addClass('bottomLibraryViewNav');
$(page).addClass('noSecondaryNavPage');
} else {
$('.viewMenuBar').show();
$('.libraryViewNav', page).each(function () {
initHeadRoom(this);
});
}
}).on('pageshow', ".libraryPage", function () {
@ -541,12 +576,6 @@
// Scroll back up so in case vertical scroll was messed with
$(document).scrollTop(0);
}
$('.libraryViewNav', page).each(function () {
initHeadRoom(this);
});
});
function initHeadRoom(elem) {

View file

@ -100,6 +100,12 @@
});
$('.fldEnableBackdrops', page).show();
if (Dashboard.isRunningInCordova()) {
$('.homePageConfigurationSection', page).hide();
} else {
$('.homePageConfigurationSection', page).show();
}
});
window.WebClientPreferencesPage = {

View file

@ -108,9 +108,7 @@ var Dashboard = {
if (!Dashboard.getUserPromise) {
var userId = Dashboard.getCurrentUserId();
Dashboard.getUserPromise = ConnectionManager.currentApiClient().getUser(userId).fail(Dashboard.logout);
Dashboard.getUserPromise = ConnectionManager.currentApiClient().getCurrentUser().fail(Dashboard.logout);
}
return Dashboard.getUserPromise;
@ -368,7 +366,7 @@ var Dashboard = {
showFooterNotification: function (options) {
if (Dashboard.isRunningInCordova()) {
if (!AppInfo.enableFooterNotifications) {
return;
}
@ -376,7 +374,7 @@ var Dashboard = {
options.id = options.id || "notification" + new Date().getTime() + parseInt(Math.random());
var footer = $("#footer").css("top", "initial").show();
var footer = $(".footer").css("top", "initial").show();
var parentElem = $('#footerNotifications', footer);
@ -572,10 +570,14 @@ var Dashboard = {
refreshSystemInfoFromServer: function () {
if (Dashboard.getAccessToken()) {
ApiClient.getSystemInfo().done(function (info) {
if (AppInfo.enableFooterNotifications) {
ApiClient.getSystemInfo().done(function (info) {
Dashboard.updateSystemInfo(info);
});
Dashboard.updateSystemInfo(info);
});
} else {
Dashboard.ensureWebSocket();
}
}
},
@ -702,7 +704,6 @@ var Dashboard = {
resetPluginSecurityInfo: function () {
Dashboard.getPluginSecurityInfoPromise = null;
Dashboard.validateCurrentUser();
},
ensureHeader: function (page) {
@ -922,7 +923,10 @@ var Dashboard = {
}
ApiClient.openWebSocket();
ApiClient.reportCapabilities(Dashboard.capabilities());
if (!Dashboard.isConnectMode()) {
ApiClient.reportCapabilities(Dashboard.capabilities());
}
},
processGeneralCommand: function (cmd) {
@ -1480,6 +1484,11 @@ var AppInfo = {};
if ($.browser.mobile) {
AppInfo.hasLowImageBandwidth = true;
}
if (Dashboard.isRunningInCordova()) {
AppInfo.enableBottomTabs = true;
AppInfo.resetOnLibraryChange = true;
}
}
else {
@ -1496,6 +1505,11 @@ var AppInfo = {};
AppInfo.enableMusicSongsTab = true;
AppInfo.enableMusicArtistsTab = true;
AppInfo.enableHomeLatestTab = true;
AppInfo.enableMovieTrailersTab = true;
}
if (!Dashboard.isRunningInCordova()) {
AppInfo.enableFooterNotifications = true;
}
}
@ -1557,7 +1571,9 @@ var AppInfo = {};
if (window.ApiClient) {
ApiClient.getDefaultImageQuality = Dashboard.getDefaultImageQuality;
Dashboard.importCss(ApiClient.getUrl('Branding/Css'));
if (!Dashboard.isRunningInCordova()) {
Dashboard.importCss(ApiClient.getUrl('Branding/Css'));
}
}
}
@ -1597,6 +1613,10 @@ var AppInfo = {};
$(document.body).addClass('homeLatestTabDisabled');
}
if (!AppInfo.enableMovieTrailersTab) {
$(document.body).addClass('movieTrailersTabDisabled');
}
if (Dashboard.isRunningInCordova()) {
$(document).addClass('nativeApp');
}
@ -1674,14 +1694,14 @@ var AppInfo = {};
var mediaPlayerElem = $('#mediaPlayer', document.body);
mediaPlayerElem.trigger('create');
var footerHtml = '<div id="footer" data-theme="b" class="ui-bar-b">';
var footerHtml = '<div id="footer" class="footer" data-theme="b" class="ui-bar-b">';
footerHtml += '<div id="footerNotifications"></div>';
footerHtml += '</div>';
$(document.body).append(footerHtml);
var footerElem = $('#footer', document.body);
var footerElem = $('.footer', document.body);
footerElem.trigger('create');
$(window).on("beforeunload", function () {

View file

@ -27,7 +27,7 @@
function loadNextUp(page, context) {
var limit = AppInfo.hasLowImageBandwidth ?
18 :
16 :
24;
var query = {
@ -69,13 +69,17 @@
var parentId = LibraryMenu.getTopParentId();
var limit = AppInfo.hasLowImageBandwidth ?
4 :
6;
var options = {
SortBy: "DatePlayed",
SortOrder: "Descending",
IncludeItemTypes: "Episode",
Filters: "IsResumable",
Limit: 6,
Limit: limit,
Recursive: true,
Fields: "PrimaryImageAspectRatio,SeriesInfo,UserData,SyncInfo",
ExcludeLocationTypes: "Virtual",

View file

@ -54,23 +54,24 @@
return serverInfo;
};
var currentUser;
var currentUserPromise;
/**
* Gets or sets the current user id.
*/
self.getCurrentUser = function () {
if (currentUser != null) {
var promise = currentUserPromise;
var deferred = DeferredBuilder.Deferred();
deferred.resolveWith(null, [currentUser]);
return deferred.promise();
if (promise == null) {
promise = self.getUser(self.getCurrentUserId()).fail(function () {
currentUserPromise = null;
});
currentUserPromise = promise;
}
return self.getUser(self.getCurrentUserId()).done(function (user) {
currentUser = user;
});
return promise;
};
/**
@ -88,7 +89,7 @@
self.setCurrentUserId = function (userId, token) {
currentUserId = userId;
currentUser = null;
currentUserPromise = null;
accessToken = token;
};
@ -376,7 +377,7 @@
webSocket.onmessage = function (msg) {
msg = JSON.parse(msg.data);
Events.trigger(self, 'websocketmessage', [msg]);
onWebSocketMessage(msg);
};
webSocket.onopen = function () {
@ -404,6 +405,23 @@
}
};
function onWebSocketMessage(msg) {
if (msg.MessageType === "UserDeleted") {
currentUserPromise = null;
}
else if (msg.MessageType === "UserUpdated" || msg.MessageType === "UserConfigurationUpdated") {
var user = msg.Data;
if (user.Id == self.getCurrentUserId()) {
currentUserPromise = null;
}
}
Events.trigger(self, 'websocketmessage', [msg]);
}
self.sendWebSocketMessage = function (name, data) {
logger.log('Sending web socket message: ' + name);