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

3.0.5641.4

This commit is contained in:
Luke Pulverenti 2015-06-15 00:17:12 -04:00
parent 3b403bc22d
commit 46776f1eac
9 changed files with 122 additions and 282 deletions

View file

@ -2,6 +2,7 @@
<html> <html>
<head> <head>
<title>${TitleSignIn}</title> <title>${TitleSignIn}</title>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head> </head>
<body class="serverlessPage"> <body class="serverlessPage">
<div id="connectLoginPage" data-role="page" class="page standalonePage connectLoginPage" data-theme="b" data-require="scripts/connectlogin"> <div id="connectLoginPage" data-role="page" class="page standalonePage connectLoginPage" data-theme="b" data-require="scripts/connectlogin">
@ -45,7 +46,7 @@
<div class="newUsers"> <div class="newUsers">
<h2 style="text-align: left;">${HeaderNewUsers}</h2> <h2 style="text-align: left;">${HeaderNewUsers}</h2>
<a class="btn" href="connectlogin.html?mode=signup"> <a class="btn btnSignupForConnect" href="http://emby.media/community/index.php?app=core&module=global&section=register" target="_blank">
<span> <span>
${ButtonSignUp} ${ButtonSignUp}
</span> </span>
@ -106,6 +107,9 @@
</div> </div>
<br /> <br />
<div class="g-recaptcha" id="recaptchaWidget" data-sitekey="6Le2LAgTAAAAAK06Wvttt_yUnbISTy6q3Azqp9po" data-theme="dark"></div>
<br />
<button class="btn btnActionAccent" data-role="none" type="submit"> <button class="btn btnActionAccent" data-role="none" type="submit">
<span> <span>
${ButtonSignUp} ${ButtonSignUp}

View file

@ -119,6 +119,7 @@
$('.connectLoginForm', page).hide(); $('.connectLoginForm', page).hide();
$('.welcomeContainer', page).hide(); $('.welcomeContainer', page).hide();
$('.signupForm', page).show(); $('.signupForm', page).show();
initSignup(page);
} }
} }
@ -145,6 +146,10 @@
function onSignupFormSubmit() { function onSignupFormSubmit() {
if (!supportInAppSignup()) {
return false;
}
var page = $(this).parents('.page'); var page = $(this).parents('.page');
ConnectionManager.signupForConnect($('#txtSignupEmail', page).val(), $('#txtSignupUsername', page).val(), $('#txtSignupPassword', page).val(), $('#txtSignupPasswordConfirm', page).val()).done(function () { ConnectionManager.signupForConnect($('#txtSignupEmail', page).val(), $('#txtSignupUsername', page).val(), $('#txtSignupPassword', page).val(), $('#txtSignupPasswordConfirm', page).val()).done(function () {
@ -183,6 +188,30 @@
return false; return false;
} }
function requireCaptcha() {
return !AppInfo.isNativeApp && getWindowUrl().toLowerCase().indexOf('https') == 0;
}
function supportInAppSignup() {
return AppInfo.isNativeApp;
return AppInfo.isNativeApp || getWindowUrl().toLowerCase().indexOf('https') == 0;
}
function initSignup(page) {
if (!supportInAppSignup()) {
return;
}
if (!requireCaptcha()) {
return;
}
require(['https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit'], function () {
});
}
$(document).on('pageinitdepends', "#connectLoginPage", function () { $(document).on('pageinitdepends', "#connectLoginPage", function () {
var page = this; var page = this;
@ -195,6 +224,14 @@
$('.manualServerForm').off('submit', onManualServerSubmit).on('submit', onManualServerSubmit); $('.manualServerForm').off('submit', onManualServerSubmit).on('submit', onManualServerSubmit);
$('.signupForm').off('submit', onSignupFormSubmit).on('submit', onSignupFormSubmit); $('.signupForm').off('submit', onSignupFormSubmit).on('submit', onSignupFormSubmit);
$('.btnSignupForConnect', page).on('click', function () {
if (supportInAppSignup()) {
Dashboard.navigate('connectlogin.html?mode=signup');
return false;
}
});
}).on('pagebeforeshowready', "#connectLoginPage", function () { }).on('pagebeforeshowready', "#connectLoginPage", function () {
var page = this; var page = this;

View file

@ -2968,7 +2968,7 @@
renderDetailPageBackdrop: function (page, item) { renderDetailPageBackdrop: function (page, item) {
var screenWidth = Math.max(screen.height, screen.width); var screenWidth = screen.availWidth;
var imgUrl; var imgUrl;

View file

@ -687,7 +687,7 @@
function getBackdropUrl(item) { function getBackdropUrl(item) {
var screenWidth = Math.max(screen.height, screen.width); var screenWidth = screen.availWidth;
if (item.BackdropImageTags && item.BackdropImageTags.length) { if (item.BackdropImageTags && item.BackdropImageTags.length) {

View file

@ -1643,7 +1643,7 @@ var AppInfo = {};
AppInfo.enableUserImage = true; AppInfo.enableUserImage = true;
AppInfo.hasPhysicalVolumeButtons = isCordova || isMobile; AppInfo.hasPhysicalVolumeButtons = isCordova || isMobile;
AppInfo.enableBackButton = (isIOS && window.navigator.standalone) || (isCordova && isIOS); AppInfo.enableBackButton = isIOS && window.navigator.standalone && !AppInfo.isNativeApp;
AppInfo.supportsFullScreen = isCordova && isAndroid; AppInfo.supportsFullScreen = isCordova && isAndroid;
AppInfo.supportsSyncPathSetting = isCordova && isAndroid; AppInfo.supportsSyncPathSetting = isCordova && isAndroid;
@ -1725,6 +1725,10 @@ var AppInfo = {};
function onDocumentReady() { function onDocumentReady() {
if (AppInfo.enableBottomTabs) {
$(document.body).addClass('bottomSecondaryNav');
}
if (AppInfo.isTouchPreferred) { if (AppInfo.isTouchPreferred) {
$(document.body).addClass('touch'); $(document.body).addClass('touch');
} }
@ -1765,10 +1769,6 @@ var AppInfo = {};
$(document.body).addClass('movieTrailersTabDisabled'); $(document.body).addClass('movieTrailersTabDisabled');
} }
if (AppInfo.enableBottomTabs) {
$(document.body).addClass('bottomSecondaryNav');
}
if (!AppInfo.enableSupporterMembership) { if (!AppInfo.enableSupporterMembership) {
$(document.body).addClass('supporterMembershipDisabled'); $(document.body).addClass('supporterMembershipDisabled');
} }
@ -2008,11 +2008,7 @@ var AppInfo = {};
function initCordovaWithDeviceId(deferred, deviceId) { function initCordovaWithDeviceId(deferred, deviceId) {
if ($.browser.android) { requirejs(['thirdparty/cordova/imagestore.js']);
requirejs(['thirdparty/cordova/android/imagestore.js']);
} else {
requirejs(['thirdparty/cordova/imagestore.js']);
}
var capablities = Dashboard.capabilities(); var capablities = Dashboard.capabilities();

View file

@ -1131,40 +1131,35 @@
return deferred.promise(); return deferred.promise();
} }
require(['connectservice'], function () { AjaxApi.ajax({
type: "POST",
url: "https://connect.mediabrowser.tv/service/register",
data: {
email: email,
userName: username,
password: password
},
dataType: "json",
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
headers: {
"X-Application": appName + "/" + appVersion,
"X-CONNECT-TOKEN": "CONNECT-REGISTER"
}
var md5 = self.getConnectPasswordHash(password); }).done(function (result) {
AjaxApi.ajax({ deferred.resolve(null, []);
type: "POST",
url: "https://connect.mediabrowser.tv/service/register",
data: {
email: email,
userName: username,
password: md5
},
dataType: "json",
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
headers: {
"X-Application": appName + "/" + appVersion,
"X-CONNECT-TOKEN": "CONNECT-REGISTER"
}
}).done(function (result) { }).fail(function (e) {
deferred.resolve(null, []); try {
}).fail(function (e) { var result = JSON.parse(e.responseText);
try { deferred.rejectWith(null, [{ errorCode: result.Status }]);
} catch (err) {
var result = JSON.parse(e.responseText); deferred.rejectWith(null, [{}]);
}
deferred.rejectWith(null, [{ errorCode: result.Status }]);
} catch (err) {
deferred.rejectWith(null, [{}]);
}
});
}); });
return deferred.promise(); return deferred.promise();

View file

@ -1,109 +0,0 @@
(function () {
function setImageIntoElement(elem, url) {
if (elem.tagName === "DIV") {
elem.style.backgroundImage = "url('" + url + "')";
} else {
elem.setAttribute("src", url);
}
}
var fileSystem;
function getFileSystem() {
var deferred = DeferredBuilder.Deferred();
if (fileSystem) {
deferred.resolveWith(null, [fileSystem]);
} else {
requestFileSystem(PERSISTENT, 0, function (fs) {
fileSystem = fs;
deferred.resolveWith(null, [fileSystem]);
});
}
return deferred.promise();
}
function indexedDbBlobImageStore() {
var self = this;
function getCacheKey(url) {
// Try to strip off the domain to share the cache between local and remote connections
var index = url.indexOf('://');
if (index != -1) {
url = url.substring(index + 3);
index = url.indexOf('/');
if (index != -1) {
url = url.substring(index + 1);
}
}
return CryptoJS.MD5(url).toString();
}
self.getImageUrl = function (originalUrl) {
if ($.browser.android && originalUrl.indexOf('tag=') != -1) {
originalUrl += "&format=webp";
}
var deferred = DeferredBuilder.Deferred();
var key = getCacheKey(originalUrl);
console.log('getImageUrl:' + originalUrl);
getFileSystem().done(function (fileSystem) {
var path = fileSystem.root.toURL() + "/emby/cache/" + key;
resolveLocalFileSystemURL(path, function (fileEntry) {
var localUrl = fileEntry.toURL();
console.log('returning cached file: ' + localUrl);
console.log(localUrl);
deferred.resolveWith(null, [localUrl]);
}, function () {
console.log('downloading: ' + originalUrl);
var ft = new FileTransfer();
ft.download(originalUrl, path, function (entry) {
var localUrl = entry.toURL();
console.log(localUrl);
deferred.resolveWith(null, [localUrl]);
});
});
});
return deferred.promise();
};
self.setImageInto = function (elem, url) {
function onFail() {
setImageIntoElement(elem, url);
}
self.getImageUrl(url).done(function (localUrl) {
setImageIntoElement(elem, localUrl);
}).fail(onFail);
};
window.ImageStore = self;
}
new indexedDbBlobImageStore();
})();

View file

@ -11,73 +11,29 @@
} }
} }
function onDbOpened(imageStore, db) { var fileSystem;
function getFileSystem() {
imageStore._db = db; var deferred = DeferredBuilder.Deferred();
window.ImageStore = imageStore;
if (fileSystem) {
deferred.resolveWith(null, [fileSystem]);
} else {
requestFileSystem(PERSISTENT, 0, function (fs) {
fileSystem = fs;
deferred.resolveWith(null, [fileSystem]);
});
}
return deferred.promise();
} }
function openDb(imageStore) { function indexedDbBlobImageStore() {
// Create/open database
var db = window.sqlitePlugin.openDatabase({ name: "my.db" });
db.transaction(function (tx) {
tx.executeSql('CREATE TABLE IF NOT EXISTS images (id text primary key, data text)');
tx.executeSql('create index if not exists idx_images on images(id)');
onDbOpened(imageStore, db);
});
}
function sqliteImageStore() {
var self = this; var self = this;
self.addImageToDatabase = function (blob, key, deferred) {
console.log("addImageToDatabase");
self.db().transaction(function (tx) {
tx.executeSql("REPLACE INTO images (id, data) VALUES (?,?)", [key, blob], function (tx, res) {
deferred.resolve();
}, function (e) {
deferred.reject();
});
});
};
self.db = function () {
return self._db;
};
self.get = function (key) {
var deferred = DeferredBuilder.Deferred();
self.db().transaction(function (tx) {
tx.executeSql("SELECT data from images where id=?", [key], function (tx, res) {
if (res.rows.length) {
deferred.resolveWith(null, [res.rows.item(0).data]);
} else {
deferred.reject();
}
}, function (e) {
deferred.reject();
});
});
return deferred.promise();
};
function getCacheKey(url) { function getCacheKey(url) {
// Try to strip off the domain to share the cache between local and remote connections // Try to strip off the domain to share the cache between local and remote connections
var index = url.indexOf('://'); var index = url.indexOf('://');
@ -91,89 +47,53 @@
} }
} }
return CryptoJS.MD5(url).toString(); return CryptoJS.MD5(url).toString();
} }
function normalizeReturnUrl(url) {
if ($.browser.safari) {
return url.replace('file://', '');
}
return url;
}
self.getImageUrl = function (originalUrl) { self.getImageUrl = function (originalUrl) {
console.log('getImageUrl:' + originalUrl); if ($.browser.android && originalUrl.indexOf('tag=') != -1) {
originalUrl += "&format=webp";
var key = getCacheKey(originalUrl); }
var deferred = DeferredBuilder.Deferred(); var deferred = DeferredBuilder.Deferred();
var key = getCacheKey(originalUrl);
self.get(key).done(function (url) { console.log('getImageUrl:' + originalUrl);
deferred.resolveWith(null, [url]); getFileSystem().done(function (fileSystem) {
var path = fileSystem.root.toURL() + "/emby/cache/" + key;
}).fail(function () { resolveLocalFileSystemURL(path, function (fileEntry) {
var localUrl = normalizeReturnUrl(fileEntry.toURL());
console.log('returning cached file: ' + localUrl);
deferred.resolveWith(null, [localUrl]);
self.downloadImage(originalUrl, key).done(function () { }, function () {
self.get(key).done(function (url) {
deferred.resolveWith(null, [url]); console.log('downloading: ' + originalUrl);
var ft = new FileTransfer();
ft.download(originalUrl, path, function (entry) {
}).fail(function () { var localUrl = normalizeReturnUrl(entry.toURL());
deferred.reject(); console.log(localUrl);
deferred.resolveWith(null, [localUrl]);
}); });
}).fail(function () {
deferred.reject();
}); });
}); });
return deferred.promise(); return deferred.promise();
}; };
self.downloadImage = function (url, key) {
var deferred = DeferredBuilder.Deferred();
console.log('downloadImage:' + url);
// Create XHR
var xhr = new XMLHttpRequest();
xhr.open("GET", url, true);
// Set the responseType to blob
xhr.responseType = "arraybuffer";
xhr.addEventListener("load", function () {
if (xhr.status === 200) {
console.log("Image retrieved");
try {
var arr = new Uint8Array(this.response);
// Convert the int array to a binary string
// We have to use apply() as we are converting an *array*
// and String.fromCharCode() takes one or more single values, not
// an array.
var raw = String.fromCharCode.apply(null, arr);
// This works!!!
var b64 = btoa(raw);
var dataURL = "data:image/jpeg;base64," + b64;
// Put the received blob into the database
self.addImageToDatabase(dataURL, key, deferred);
} catch (err) {
console.log("Error adding image to database");
deferred.reject();
}
} else {
deferred.reject();
}
}, false);
// Send XHR
xhr.send();
return deferred.promise();
};
self.setImageInto = function (elem, url) { self.setImageInto = function (elem, url) {
function onFail() { function onFail() {
@ -181,14 +101,15 @@
} }
self.getImageUrl(url).done(function (localUrl) { self.getImageUrl(url).done(function (localUrl) {
setImageIntoElement(elem, localUrl); setImageIntoElement(elem, localUrl);
}).fail(onFail); }).fail(onFail);
}; };
openDb(self); window.ImageStore = self;
} }
new sqliteImageStore(); new indexedDbBlobImageStore();
})(); })();

View file

@ -19,14 +19,10 @@
// If less than 200, this happens on the home page // If less than 200, this happens on the home page
// Need to fix those before this can be set to 0 // Need to fix those before this can be set to 0
// Non-ios browsers can generally handle a higher value and still perform well var screens = $.browser.mobile ? 2 : 1;
// This helps eliminate the draw-in effect as you scroll
if (!$.browser.ipad && !$.browser.iphone) {
return 1000;
//return Math.max(screen.height, screen.width, 1000);
}
return 500; // This helps eliminate the draw-in effect as you scroll
return screen.availHeight * screens;
} }
$.fn.unveil = function () { $.fn.unveil = function () {