mirror of
https://github.com/jellyfin/jellyfin-web
synced 2025-03-30 19:56:21 +00:00
support in-app connect signup
This commit is contained in:
parent
5187a0d558
commit
496add35b9
8 changed files with 188 additions and 20 deletions
|
@ -44,9 +44,13 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="newUsers">
|
<div class="newUsers">
|
||||||
<br />
|
|
||||||
<h2 style="text-align: left;">${HeaderNewUsers}</h2>
|
<h2 style="text-align: left;">${HeaderNewUsers}</h2>
|
||||||
<a data-role="button" data-icon="action" href="http://emby.media/community/index.php?app=core&module=global§ion=register" target="_blank">${ButtonSignUp}</a>
|
<a class="btn" href="connectlogin.html?mode=signup">
|
||||||
|
<span>
|
||||||
|
${ButtonSignUp}
|
||||||
|
</span>
|
||||||
|
<i class="fa fa-plus-circle"></i>
|
||||||
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
@ -64,7 +68,7 @@
|
||||||
<label for="txtServerPort" style="text-align: left;">${LabelServerPort}</label>
|
<label for="txtServerPort" style="text-align: left;">${LabelServerPort}</label>
|
||||||
<input type="number" id="txtServerPort" step="1" min="0" />
|
<input type="number" id="txtServerPort" step="1" min="0" />
|
||||||
</div>
|
</div>
|
||||||
<br /><br />
|
<br />
|
||||||
|
|
||||||
<button class="btn btnActionAccent" data-role="none" type="submit">
|
<button class="btn btnActionAccent" data-role="none" type="submit">
|
||||||
<span>
|
<span>
|
||||||
|
@ -80,6 +84,42 @@
|
||||||
</a>
|
</a>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
<form class="signupForm" style="text-align: center; margin: 0 auto;display:none;">
|
||||||
|
|
||||||
|
<h1 style="text-align: left;">${HeaderSignUp}</h1>
|
||||||
|
<br />
|
||||||
|
<div>
|
||||||
|
<label for="txtSignupEmail" style="text-align: left;">${LabelEmail}</label>
|
||||||
|
<input type="email" id="txtSignupEmail" required="required" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="txtSignupUsername" style="text-align: left;">${LabelUsername}</label>
|
||||||
|
<input type="text" id="txtSignupUsername" required="required" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="txtSignupPassword" style="text-align: left;">${LabelPassword}</label>
|
||||||
|
<input type="password" id="txtSignupPassword" required="required" autocomplete="off" />
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="txtSignupPasswordConfirm" style="text-align: left;">${LabelPasswordConfirm}</label>
|
||||||
|
<input type="password" id="txtSignupPasswordConfirm" required="required" autocomplete="off" />
|
||||||
|
</div>
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<button class="btn btnActionAccent" data-role="none" type="submit">
|
||||||
|
<span>
|
||||||
|
${ButtonSignUp}
|
||||||
|
</span>
|
||||||
|
<i class="fa fa-check"></i>
|
||||||
|
</button>
|
||||||
|
<a class="btn btnDarkAccent" href="#" data-rel="back">
|
||||||
|
<span>
|
||||||
|
${ButtonCancel}
|
||||||
|
</span>
|
||||||
|
<i class="fa fa-close"></i>
|
||||||
|
</a>
|
||||||
|
</form>
|
||||||
|
|
||||||
<div class="welcomeContainer readOnlyContent" style="text-align: center; margin: 0 auto;display:none;">
|
<div class="welcomeContainer readOnlyContent" style="text-align: center; margin: 0 auto;display:none;">
|
||||||
|
|
||||||
<div style="text-align: left;">
|
<div style="text-align: left;">
|
||||||
|
|
|
@ -123,6 +123,16 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.nowPlayingPageTitle {
|
||||||
|
margin: .5em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nowPlayingInfoButtons {
|
||||||
|
padding-top: .5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media all and (min-height: 600px) {
|
||||||
|
|
||||||
.nowPlayingPageTitle {
|
.nowPlayingPageTitle {
|
||||||
margin: 1em 0;
|
margin: 1em 0;
|
||||||
}
|
}
|
||||||
|
@ -130,6 +140,7 @@
|
||||||
.nowPlayingInfoButtons {
|
.nowPlayingInfoButtons {
|
||||||
padding-top: 1em;
|
padding-top: 1em;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@media (orientation: landscape) {
|
@media (orientation: landscape) {
|
||||||
.nowPlayingInfoMetadata, .nowPlayingInfoButtons {
|
.nowPlayingInfoMetadata, .nowPlayingInfoButtons {
|
||||||
|
|
|
@ -306,7 +306,7 @@ pre, textarea.pre {
|
||||||
}
|
}
|
||||||
|
|
||||||
.imgLogoIcon {
|
.imgLogoIcon {
|
||||||
height: 45px;
|
height: 40px;
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -543,13 +543,6 @@ h1 .imageLink {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@media all and (min-width: 650px) {
|
|
||||||
|
|
||||||
.imgLogoIcon {
|
|
||||||
height: 50px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media all and (min-width: 800px) {
|
@media all and (min-width: 800px) {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -100,16 +100,25 @@
|
||||||
$('.connectLoginForm', page).hide();
|
$('.connectLoginForm', page).hide();
|
||||||
$('.welcomeContainer', page).show();
|
$('.welcomeContainer', page).show();
|
||||||
$('.manualServerForm', page).hide();
|
$('.manualServerForm', page).hide();
|
||||||
|
$('.signupForm', page).hide();
|
||||||
}
|
}
|
||||||
else if (mode == 'connect') {
|
else if (mode == 'connect') {
|
||||||
$('.connectLoginForm', page).show();
|
$('.connectLoginForm', page).show();
|
||||||
$('.welcomeContainer', page).hide();
|
$('.welcomeContainer', page).hide();
|
||||||
$('.manualServerForm', page).hide();
|
$('.manualServerForm', page).hide();
|
||||||
|
$('.signupForm', page).hide();
|
||||||
}
|
}
|
||||||
else if (mode == 'manualserver') {
|
else if (mode == 'manualserver') {
|
||||||
$('.manualServerForm', page).show();
|
$('.manualServerForm', page).show();
|
||||||
$('.connectLoginForm', page).hide();
|
$('.connectLoginForm', page).hide();
|
||||||
$('.welcomeContainer', page).hide();
|
$('.welcomeContainer', page).hide();
|
||||||
|
$('.signupForm', page).hide();
|
||||||
|
}
|
||||||
|
else if (mode == 'signup') {
|
||||||
|
$('.manualServerForm', page).hide();
|
||||||
|
$('.connectLoginForm', page).hide();
|
||||||
|
$('.welcomeContainer', page).hide();
|
||||||
|
$('.signupForm', page).show();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,6 +143,46 @@
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function onSignupFormSubmit() {
|
||||||
|
|
||||||
|
var page = $(this).parents('.page');
|
||||||
|
|
||||||
|
ConnectionManager.signupForConnect($('#txtSignupEmail', page).val(), $('#txtSignupUsername', page).val(), $('#txtSignupPassword', page).val(), $('#txtSignupPasswordConfirm', page).val()).done(function () {
|
||||||
|
|
||||||
|
Dashboard.alert({
|
||||||
|
message: Globalize.translate('MessageThankYouForConnectSignUp'),
|
||||||
|
callback: function () {
|
||||||
|
Dashboard.navigate('connectlogin.html?mode=welcome');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}).fail(function (result) {
|
||||||
|
|
||||||
|
if (result.errorCode == 'passwordmatch') {
|
||||||
|
Dashboard.alert({
|
||||||
|
message: Globalize.translate('ErrorMessagePasswordNotMatchConfirm')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (result.errorCode == 'USERNAME_IN_USE') {
|
||||||
|
Dashboard.alert({
|
||||||
|
message: Globalize.translate('ErrorMessageUsernameInUse')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (result.errorCode == 'EMAIL_IN_USE') {
|
||||||
|
Dashboard.alert({
|
||||||
|
message: Globalize.translate('ErrorMessageEmailInUse')
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Dashboard.alert({
|
||||||
|
message: Globalize.translate('DefaultErrorMessage')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
$(document).on('pageinitdepends', "#connectLoginPage", function () {
|
$(document).on('pageinitdepends', "#connectLoginPage", function () {
|
||||||
|
|
||||||
var page = this;
|
var page = this;
|
||||||
|
@ -144,21 +193,31 @@
|
||||||
|
|
||||||
$('.connectLoginForm').off('submit', onSubmit).on('submit', onSubmit);
|
$('.connectLoginForm').off('submit', onSubmit).on('submit', onSubmit);
|
||||||
$('.manualServerForm').off('submit', onManualServerSubmit).on('submit', onManualServerSubmit);
|
$('.manualServerForm').off('submit', onManualServerSubmit).on('submit', onManualServerSubmit);
|
||||||
|
$('.signupForm').off('submit', onSignupFormSubmit).on('submit', onSignupFormSubmit);
|
||||||
|
|
||||||
}).on('pageshowready', "#connectLoginPage", function () {
|
}).on('pagebeforeshowready', "#connectLoginPage", function () {
|
||||||
|
|
||||||
var page = this;
|
var page = this;
|
||||||
|
|
||||||
loadPage(page);
|
$('#txtSignupEmail', page).val('');
|
||||||
|
$('#txtSignupUsername', page).val('');
|
||||||
var link = '<a href="http://emby.media" target="_blank">http://emby.media</a>';
|
$('#txtSignupPassword', page).val('');
|
||||||
$('.embyIntroDownloadMessage', page).html(Globalize.translate('EmbyIntroDownloadMessage', link));
|
$('#txtSignupPasswordConfirm', page).val('');
|
||||||
|
|
||||||
if (AppInfo.isNativeApp) {
|
if (AppInfo.isNativeApp) {
|
||||||
$('.skip', page).show();
|
$('.skip', page).show();
|
||||||
} else {
|
} else {
|
||||||
$('.skip', page).hide();
|
$('.skip', page).hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var link = '<a href="http://emby.media" target="_blank">http://emby.media</a>';
|
||||||
|
$('.embyIntroDownloadMessage', page).html(Globalize.translate('EmbyIntroDownloadMessage', link));
|
||||||
|
|
||||||
|
}).on('pageshowready', "#connectLoginPage", function () {
|
||||||
|
|
||||||
|
var page = this;
|
||||||
|
|
||||||
|
loadPage(page);
|
||||||
});
|
});
|
||||||
|
|
||||||
function submitManualServer(page) {
|
function submitManualServer(page) {
|
||||||
|
|
|
@ -567,7 +567,7 @@ function ticks_to_human(str) {
|
||||||
$this.unbind(touchMoveEvent, moveHandler);
|
$this.unbind(touchMoveEvent, moveHandler);
|
||||||
if (start && stop) {
|
if (start && stop) {
|
||||||
if (stop.time - start.time < 1000 &&
|
if (stop.time - start.time < 1000 &&
|
||||||
Math.abs(start.coords[1] - stop.coords[1]) > 30 &&
|
Math.abs(start.coords[1] - stop.coords[1]) > 100 &&
|
||||||
Math.abs(start.coords[0] - stop.coords[0]) < 75) {
|
Math.abs(start.coords[0] - stop.coords[0]) < 75) {
|
||||||
start.origin
|
start.origin
|
||||||
.trigger("swipeupdown")
|
.trigger("swipeupdown")
|
||||||
|
|
|
@ -522,7 +522,7 @@
|
||||||
|
|
||||||
var item = state.NowPlayingItem;
|
var item = state.NowPlayingItem;
|
||||||
|
|
||||||
$('.itemName', page).html(item ? MediaController.getNowPlayingNameHtml(item) : '');
|
$('.itemName', page).html(item ? MediaController.getNowPlayingNameHtml(item).replace('<br/>', ' - ') : '');
|
||||||
|
|
||||||
var url;
|
var url;
|
||||||
var backdropUrl = null;
|
var backdropUrl = null;
|
||||||
|
|
|
@ -55,6 +55,7 @@ var Dashboard = {
|
||||||
|
|
||||||
isConnectMode: function () {
|
isConnectMode: function () {
|
||||||
|
|
||||||
|
return true;
|
||||||
if (AppInfo.isNativeApp) {
|
if (AppInfo.isNativeApp) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1106,6 +1106,70 @@
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self.signupForConnect = function (email, username, password, passwordConfirm) {
|
||||||
|
|
||||||
|
var deferred = DeferredBuilder.Deferred();
|
||||||
|
|
||||||
|
if (!email) {
|
||||||
|
deferred.rejectWith(null, [{ errorCode: 'invalidinput' }]);
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
if (!username) {
|
||||||
|
deferred.rejectWith(null, [{ errorCode: 'invalidinput' }]);
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
if (!password) {
|
||||||
|
deferred.rejectWith(null, [{ errorCode: 'invalidinput' }]);
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
if (!passwordConfirm) {
|
||||||
|
deferred.rejectWith(null, [{ errorCode: 'passwordmatch' }]);
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
if (password != passwordConfirm) {
|
||||||
|
deferred.rejectWith(null, [{ errorCode: 'passwordmatch' }]);
|
||||||
|
return deferred.promise();
|
||||||
|
}
|
||||||
|
|
||||||
|
require(['connectservice'], function () {
|
||||||
|
|
||||||
|
var md5 = self.getConnectPasswordHash(password);
|
||||||
|
|
||||||
|
AjaxApi.ajax({
|
||||||
|
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) {
|
||||||
|
|
||||||
|
deferred.resolve(null, []);
|
||||||
|
|
||||||
|
}).fail(function (e) {
|
||||||
|
|
||||||
|
try {
|
||||||
|
|
||||||
|
var result = JSON.parse(e.responseText);
|
||||||
|
|
||||||
|
deferred.rejectWith(null, [{ errorCode: result.Status }]);
|
||||||
|
} catch (err) {
|
||||||
|
deferred.rejectWith(null, [{}]);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
return deferred.promise();
|
||||||
|
};
|
||||||
|
|
||||||
self.getConnectPasswordHash = function (password) {
|
self.getConnectPasswordHash = function (password) {
|
||||||
|
|
||||||
password = globalScope.MediaBrowser.ConnectService.cleanPassword(password);
|
password = globalScope.MediaBrowser.ConnectService.cleanPassword(password);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue