disable chunked encoding for images

This commit is contained in:
Luke Pulverenti 2014-07-17 18:21:35 -04:00
parent 433cee5164
commit b23a0a14c1
14 changed files with 196 additions and 130 deletions

View File

@ -117,7 +117,7 @@
}
}
@media all and (min-width: 1920px) {
@media all and (min-width: 1600px) {
.ehsContent {
width: 1200px;

View File

@ -1,9 +1,17 @@
.btnNotifications {
text-decoration: none!important;
.notificationsFlyout {
width: 250px;
}
.notificationsPanelModelOpen {
right: 250px!important;
}
.btnNotifications {
text-decoration: none !important;
}
.btnNotificationsInner {
text-decoration: none!important;
text-decoration: none !important;
vertical-align: middle;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
@ -35,14 +43,14 @@
background-image: -o-linear-gradient(top,#4d90fe,#4787ed);
background-image: linear-gradient(top,#4d90fe,#4787ed);
border-color: #3079ed;
color: #fff!important;
color: #fff !important;
}
.levelWarning {
background-color: #FF7537;
background-image: none;
border-color: #FF7537;
color: #fff!important;
color: #fff !important;
}
.levelError {
@ -54,20 +62,12 @@
background-image: -o-linear-gradient(top,#dd4b39,#d14836);
background-image: linear-gradient(top,#dd4b39,#d14836);
border-color: #c6322a;
color: #fff!important;
}
.notificationsFlyout {
width: 300px;
color: #fff !important;
}
.flyoutNotification {
border-top: 1px solid #ccc;
background: #f8f8f8;
color: #555;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
border-top: 1px solid #eee;
padding: 0 0 .5em;
}
.flyoutNotification p {
@ -77,35 +77,38 @@
}
.flyoutNotification:last-child {
border-bottom: 1px solid #ccc;
border-bottom: 1px solid #eee;
}
.notificationName {
font-weight: bold;
color: #555;
}
.notificationTime {
color: green;
}
.notificationImage {
margin: 0 .5em 0 1em;
padding: .5em 0;
display: inline-block;
vertical-align: top;
display: none;
}
.unreadFlyoutNotification {
background-color: #ECEEF4;
.notificationContent {
display: inline-block;
vertical-align: top;
overflow: hidden;
}
.btnMarkReadContainer, .btnNotificationListContainer {
padding: 0 .5em;
.unreadFlyoutNotification {
color: blue;
}
.notificationsList {
border-bottom: 1px solid #ddd;
}
.notificationsList .flyoutNotification {
border-left: 1px solid #ddd;
border-right: 1px solid #ddd;
}
.imgNotification, .imgNotificationInner {
width: 40px;
height: 40px;
@ -121,7 +124,6 @@
background-size: 50% auto;
}
.imgNotificationNormal {
background-color: #4d90fe;
background-image: -webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#4787ed));
@ -157,48 +159,3 @@
.imgNotificationWarning .imgNotificationInner {
background-image: url(images/notifications/error.png);
}
.notificationContent {
padding: 0 .5em;
}
@media all and (min-width: 350px) {
.notificationsFlyout {
width: 320px;
}
}
@media all and (min-width: 400px) {
.notificationsFlyout {
width: 370px;
}
}
@media all and (min-width: 450px) {
.notificationsFlyout {
width: 400px;
}
.notificationImage {
margin: 0 .5em 0 1em;
padding: .5em 0;
display: inline-block;
vertical-align: top;
}
.notificationContent {
display: inline-block;
vertical-align: top;
overflow: hidden;
}
}
@media all and (min-width: 500px) {
.notificationsFlyout {
width: 450px;
}
.notificationContent p {
max-width: 350px;
}
}

View File

@ -488,7 +488,7 @@
}
}
@media all and (min-width: 1920px) {
@media all and (min-width: 1600px) {
.backdropPosterItem {
width: 290px;

View File

@ -257,6 +257,11 @@
</li>
</ul>
<h2>
<span style="vertical-align:middle;">${HeaderHttpHeaders}</span>
<button class="btnAddIdentificationHttpHeader" data-icon="plus" data-iconpos="notext" data-inline="true" type="button" style="vertical-align:middle;margin-left:.25em;">${ButtonAdd}</button>
</h2>
<div class="httpHeaderIdentificationList"></div>
</div>
<div class="tabContent tabDirectPlayProfiles">
@ -566,6 +571,46 @@
</form>
</div>
</div>
<div data-role="popup" id="identificationHeaderPopup" class="popup">
<div class="ui-bar-a" style="text-align: center; padding: 0 20px;">
<h3>${HeaderIdentificationHeader}</h3>
</div>
<div data-role="content">
<form class="identificationHeaderForm">
<div style="margin: 1em 0;">
<label for="txtIdentificationHeaderName">${LabelName}</label>
<input type="text" id="txtIdentificationHeaderName" data-mini="true" required="required" />
</div>
<div style="margin: 1em 0;">
<label for="txtIdentificationHeaderValue">${LabelValue}</label>
<input type="text" id="txtIdentificationHeaderValue" data-mini="true" required="required" />
</div>
<div style="margin: 1em 0;">
<label for="selectMatchType">${LabelMatchType}</label>
<select id="selectMatchType" data-mini="true">
<option value="Equals">${OptionEquals}</option>
<option value="Regex">${OptionRegex}</option>
<option value="Substring">${OptionSubstring}</option>
</select>
</div>
<p>
<button type="submit" data-theme="b" data-icon="check" data-mini="true">
${ButtonOk}
</button>
<button type="button" data-icon="delete" onclick="$(this).parents('.popup').popup('close');" data-mini="true">
${ButtonCancel}
</button>
</p>
</form>
</div>
</div>
<script type="text/javascript">
$('.dlnaProfileForm').off('submit', DlnaProfilePage.onSubmit).on('submit', DlnaProfilePage.onSubmit);
@ -574,7 +619,8 @@
$('.containerProfileForm').off('submit', DlnaProfilePage.onContainerProfileFormSubmit).on('submit', DlnaProfilePage.onContainerProfileFormSubmit);
$('.codecProfileForm').off('submit', DlnaProfilePage.onCodecProfileFormSubmit).on('submit', DlnaProfilePage.onCodecProfileFormSubmit);
$('.editResponseProfileForm').off('submit', DlnaProfilePage.onResponseProfileFormSubmit).on('submit', DlnaProfilePage.onResponseProfileFormSubmit);
</script>
$('.identificationHeaderForm').off('submit', DlnaProfilePage.onIdentificationHeaderFormSubmit).on('submit', DlnaProfilePage.onIdentificationHeaderFormSubmit);
</script>
</div>
</body>
</html>

View File

@ -47,6 +47,8 @@
var idInfo = profile.Identification || {};
renderIdentificationHeaders(page, idInfo.Headers || []);
$('#txtInfoFriendlyName', page).val(profile.FriendlyName || '');
$('#txtInfoModelName', page).val(profile.ModelName || '');
$('#txtInfoModelNumber', page).val(profile.ModelNumber || '');
@ -97,6 +99,76 @@
renderSubProfiles(page, profile);
}
function renderIdentificationHeaders(page, headers) {
var index = 0;
var html = '<ul data-role="listview" data-inset="true" data-split-icon="delete">' + headers.map(function (h) {
var li = '<li>';
li += '<a href="#">';
li += '<div style="font-weight:normal;">' + h.Name + ': ' + (h.Value || '') + '</div>';
li += '<div style="font-weight:normal;">' + (h.Match || '') + '</div>';
li += '</a>';
li += '<a class="btnDeleteIdentificationHeader" href="#" data-index="' + index + '"></a>';
li += '</li>';
index++;
return li;
}).join('') + '</ul>';
var elem = $('.httpHeaderIdentificationList', page).html(html).trigger('create');
$('.btnDeleteIdentificationHeader', elem).on('click', function () {
var itemIndex = parseInt(this.getAttribute('data-index'));
currentProfile.Identification.Headers.splice(itemIndex, 1);
renderIdentificationHeaders(page, currentProfile.Identification.Headers);
});
}
function editIdentificationHeader(page, header) {
isSubProfileNew = header == null;
header = header || {};
currentSubProfile = header;
var popup = $('#identificationHeaderPopup', page);
$('#txtIdentificationHeaderName', popup).val(header.Name || '');
$('#txtIdentificationHeaderValue', popup).val(header.Value || '');
$('#selectMatchType', popup).val(header.Match || 'Equals').selectmenu('refresh');
popup.popup('open');
}
function saveIdentificationHeader(page) {
currentSubProfile.Name = $('#txtIdentificationHeaderName', page).val();
currentSubProfile.Value = $('#txtIdentificationHeaderValue', page).val();
currentSubProfile.Match = $('#selectMatchType', page).val();
if (isSubProfileNew) {
currentProfile.Identification.Headers.push(currentSubProfile);
}
renderIdentificationHeaders(page, currentProfile.Identification.Headers);
currentSubProfile = null;
$('#identificationHeaderPopup', page).popup('close');
}
function renderSubProfiles(page, profile) {
renderDirectPlayProfiles(page, profile.DirectPlayProfiles);
@ -816,6 +888,11 @@
});
$('.btnAddIdentificationHttpHeader', page).on('click', function () {
editIdentificationHeader(page);
});
}).on('pageshow', "#dlnaProfilePage", function () {
var page = this;
@ -890,6 +967,16 @@
saveResponseProfile(page);
return false;
},
onIdentificationHeaderFormSubmit: function() {
var form = this;
var page = $(form).parents('.page');
saveIdentificationHeader(page);
return false;
}
};

View File

@ -129,7 +129,7 @@
var options = {
Limit: screenWidth >= 2400 ? 24 : (screenWidth >= 1920 ? 20 : (screenWidth >= 1440 ? 12 : (screenWidth >= 800 ? 9 : 8))),
Limit: screenWidth >= 2400 ? 24 : (screenWidth >= 1600 ? 20 : (screenWidth >= 1440 ? 12 : (screenWidth >= 800 ? 9 : 8))),
Fields: "PrimaryImageAspectRatio",
IsPlayed: false,
IsFolder: false
@ -164,7 +164,7 @@
var options = {
Limit: screenWidth >= 2400 ? 10 : (screenWidth >= 1920 ? 10 : (screenWidth >= 1440 ? 8 : (screenWidth >= 800 ? 7 : 6))),
Limit: screenWidth >= 2400 ? 10 : (screenWidth >= 1600 ? 10 : (screenWidth >= 1440 ? 8 : (screenWidth >= 800 ? 7 : 6))),
Fields: "PrimaryImageAspectRatio",
Filters: "IsUnplayed",
UserId: userId
@ -279,7 +279,7 @@
SortOrder: "Descending",
MediaTypes: "Video",
Filters: "IsResumable",
Limit: screenWidth >= 1920 ? 8 : (screenWidth >= 1200 ? 9 : 6),
Limit: screenWidth >= 1600 ? 8 : (screenWidth >= 1200 ? 9 : 6),
Recursive: true,
Fields: "PrimaryImageAspectRatio",
CollapseBoxSetItems: false,
@ -356,7 +356,7 @@
var options = {
Limit: screenWidth >= 1920 ? 5 : (screenWidth >= 1440 ? 5 : (screenWidth >= 800 ? 6 : 6)),
Limit: screenWidth >= 1600 ? 5 : (screenWidth >= 1440 ? 5 : (screenWidth >= 800 ? 6 : 6)),
Fields: "PrimaryImageAspectRatio",
Filters: "IsUnplayed",
UserId: Dashboard.getCurrentUserId(),

View File

@ -1185,11 +1185,6 @@
$("#pause", videoElement).hide().removeClass("fadeOut");
}, 300);
// Pause stop timer
self.pauseStop = setTimeout(function () {
self.stop();
}, 5 * 60 * 1000); // 5 minutes
}).on("playing.mediaplayerevent", function (e) {
$('#video-playButton', videoControls).hide();
@ -1199,9 +1194,6 @@
$("#play", videoElement).hide().removeClass("fadeOut");
}, 300);
// Remove pause setop timer
self.clearPauseStop();
}).on("timeupdate.mediaplayerevent", function () {
if (!isPositionSliderActive) {
@ -1248,7 +1240,7 @@
unbindEventsForPlayback();
}).on('ended.playnext', self.playNextAfterEnded);
}).one('ended.playnext', self.playNextAfterEnded);
bindEventsForPlayback();

View File

@ -53,19 +53,8 @@
return playerTime;
};
self.clearPauseStop = function () {
if (self.pauseStop) {
console.log('clearing pause stop timer');
window.clearTimeout(self.pauseStop);
self.pauseStop = null;
}
};
self.playNextAfterEnded = function () {
$(this).off('ended.playnext');
self.nextTrack();
};
@ -177,7 +166,7 @@
self.updateCanClientSeek(this);
$(this).on('ended.playbackstopped', self.onPlaybackStopped).on('ended.playnext', self.playNextAfterEnded);
$(this).on('ended.playbackstopped', self.onPlaybackStopped).one('ended.playnext', self.playNextAfterEnded);
self.startProgressInterval();
sendProgressUpdate();
@ -595,6 +584,7 @@
var newItem = self.playlist[newIndex];
if (newItem) {
Dashboard.getCurrentUser().done(function (user) {
self.playInternal(newItem, 0, user);
@ -899,6 +889,7 @@
$(this).remove();
}
elem.src = null;
elem.src = "";
self.currentMediaElement = null;
self.currentItem = null;
@ -1077,8 +1068,6 @@
$('body').removeClass('bodyWithPopupOpen');
self.clearPauseStop();
var playerElement = this;
$(playerElement).off('.mediaplayerevent').off('ended.playbackstopped');
@ -1256,7 +1245,7 @@
self.setCurrentTime(self.getCurrentTicks(this));
}).on("ended.playbackstopped", self.onPlaybackStopped).on('ended.playnext', self.playNextAfterEnded)[0];
}).on("ended.playbackstopped", self.onPlaybackStopped).one('ended.playnext', self.playNextAfterEnded)[0];
};
function canPlayAudioStreamDirect(audioStream) {

View File

@ -12,7 +12,7 @@
var options = {
IncludeItemTypes: "Movie",
Limit: screenWidth >= 1920 ? 28 : (screenWidth >= 1440 ? 30 : (screenWidth >= 800 ? 28 : 18)),
Limit: screenWidth >= 1600 ? 28 : (screenWidth >= 1440 ? 30 : (screenWidth >= 800 ? 28 : 18)),
Fields: "PrimaryImageAspectRatio",
ParentId: parentId,
IsPlayed: false

View File

@ -50,7 +50,7 @@
SortOrder: "Descending",
IncludeItemTypes: "Movie",
Filters: "IsResumable",
Limit: screenWidth >= 1920 ? 8 : (screenWidth >= 1200 ? 6 : 3),
Limit: screenWidth >= 1600 ? 8 : (screenWidth >= 1200 ? 6 : 3),
Recursive: true,
Fields: "PrimaryImageAspectRatio",
CollapseBoxSetItems: false,
@ -81,7 +81,7 @@
userId: Dashboard.getCurrentUserId(),
categoryLimit: screenWidth >= 1200 ? 4 : 3,
ItemLimit: screenWidth >= 1920 ? 7 : (screenWidth >= 1200 ? 6 : 5),
ItemLimit: screenWidth >= 1600 ? 7 : (screenWidth >= 1200 ? 6 : 5),
Fields: "PrimaryImageAspectRatio"
});

View File

@ -11,7 +11,7 @@
var options = {
IncludeItemTypes: "Audio",
Limit: screenWidth >= 1920 ? 18 : (screenWidth >= 1200 ? 10 : 12),
Limit: screenWidth >= 1600 ? 18 : (screenWidth >= 1200 ? 10 : 12),
Fields: "PrimaryImageAspectRatio",
ParentId: parentId
};
@ -34,7 +34,7 @@
SortBy: "DatePlayed",
SortOrder: "Descending",
IncludeItemTypes: "Audio",
Limit: screenWidth >= 1920 ? 6 : (screenWidth >= 1200 ? 5 : 6),
Limit: screenWidth >= 1600 ? 6 : (screenWidth >= 1200 ? 5 : 6),
Recursive: true,
Fields: "PrimaryImageAspectRatio,AudioInfo",
Filters: "IsPlayed",
@ -64,7 +64,7 @@
SortBy: "PlayCount",
SortOrder: "Descending",
IncludeItemTypes: "Audio",
Limit: screenWidth >= 1920 ? 12 : (screenWidth >= 1200 ? 10 : 12),
Limit: screenWidth >= 1600 ? 12 : (screenWidth >= 1200 ? 10 : 12),
Recursive: true,
Fields: "PrimaryImageAspectRatio,AudioInfo",
Filters: "IsPlayed",

View File

@ -33,35 +33,30 @@
self.showNotificationsFlyout = function () {
var context = this;
var html = '<div data-role="panel" data-position="right" data-display="overlay" class="notificationsFlyout" data-position-fixed="true" data-theme="a">';
var html = '<div data-role="popup" class="notificationsFlyout" style="min-width:250px;margin-top:30px;margin-right:20px;" data-theme="a">';
html += '<h1 style="margin: .25em 0;">';
html += '<span style="vertical-align:middle;">' + Globalize.translate('HeaderNotifications') + '</span>';
html += '<a data-role="button" data-inline="true" data-icon="arrow-r" href="notificationlist.html" data-iconpos="notext" style="vertical-align:middle;margin-left:.5em;">' + Globalize.translate('ButtonViewNotifications') + '</a>';
html += '</h1>';
html += '<a href="#" data-rel="back" data-role="button" data-theme="b" data-icon="delete" data-iconpos="notext" class="ui-btn-right">' + Globalize.translate('ButtonClose') + '</a>';
html += '<div>';
html += '<div class="notificationsFlyoutlist">Loading...';
html += '<div class="ui-bar-a" style="text-align:center;">';
html += '<h3 style="margin: .5em 0;">Notifications</h3>';
html += '</div>';
html += '<div style="padding: 0;">';
html += '<p class="notificationsFlyoutlist">Loading...';
html += '</p>';
html += '<div class="btnNotificationListContainer"><a data-role="button" href="notificationlist.html" data-icon="action" data-mini="true">' + Globalize.translate('ButtonViewNotifications') + '</a></div>';
html += '<div style="display:none;" class="btnMarkReadContainer"><button class="btnMarkRead" type="button" data-icon="check" data-mini="true">' + Globalize.translate('ButtonMarkTheseRead') + '</button></div>';
html += '</div>';
html += '</div>';
$(document.body).append(html);
$('.notificationsFlyout').popup({ positionTo: context }).trigger('create').popup("open").on("popupafterclose", function () {
$('.notificationsFlyout').panel({}).panel('option', 'classes.modalOpen', 'notificationsPanelModelOpen ui-panel-dismiss-open').trigger('create').panel("open").on("panelclose", function () {
$(this).off("popupafterclose").remove();
$(this).off("panelclose").remove();
}).on('click', '.btnMarkRead', function () {
@ -73,7 +68,7 @@
self.markNotificationsRead(ids, function () {
$('.notificationsFlyout').popup("close");
$('.notificationsFlyout').panel("close");
});
@ -175,7 +170,7 @@
html += '<p style="margin: .4em 0 .25em;" class="notificationName">' + notification.Name + '</p>';
html += '<p style="margin: .25em 0;">' + humane_date(notification.Date) + '</p>';
html += '<p class="notificationTime" style="margin: .25em 0;">' + humane_date(notification.Date) + '</p>';
if (notification.Description) {
html += '<p style="margin: .25em 0;">' + notification.Description + '</p>';

View File

@ -494,7 +494,7 @@ var Dashboard = {
Dashboard.getCurrentUser().done(function (user) {
var html = '<div data-role="panel" data-position="right" data-display="overlay" id="userFlyout" data-position-fixed="true" data-theme="b">';
var html = '<div data-role="panel" data-position="right" data-display="overlay" id="userFlyout" data-position-fixed="true" data-theme="a">';
html += '<h3>';

View File

@ -12,7 +12,7 @@
var options = {
IncludeItemTypes: "Episode",
Limit: screenWidth >= 1920 ? 24 : (screenWidth >= 1440 ? 16 : 15),
Limit: screenWidth >= 1600 ? 24 : (screenWidth >= 1440 ? 16 : 15),
Fields: "PrimaryImageAspectRatio",
ParentId: parentId,
IsPlayed: false