瀏覽代碼

fixed login and added script_lib in template for one time script loading

version-14
Rushabh Mehta 11 年之前
父節點
當前提交
c95e051ed8
共有 6 個檔案被更改,包括 243 行新增173 行删除
  1. +15
    -8
      frappe/templates/base.html
  2. +43
    -0
      frappe/templates/includes/login.css
  3. +151
    -157
      frappe/templates/includes/login.js
  4. +2
    -3
      frappe/templates/pages/login.html
  5. +5
    -2
      frappe/website/context.py
  6. +27
    -3
      frappe/website/js/website.js

+ 15
- 8
frappe/templates/base.html 查看文件

@@ -10,31 +10,38 @@
<link rel="shortcut icon" href="{{ favicon or "" }}" type="image/x-icon">
<link rel="icon" href="{{ favicon or "" }}" type="image/x-icon">
{% block head -%}
{%- if meta_description is defined -%}
{%- block head -%}
{%- if meta_description is defined %}
<meta name="description" content="{{ meta_description }}">
{%- endif -%}
{%- for link in web_include_js -%}
{%- for link in web_include_js %}
<script type="text/javascript" src="{{ link }}"></script>
{%- endfor -%}
{%- for link in web_include_css -%}
{%- for link in web_include_css %}
<link type="text/css" rel="stylesheet" href="{{ link }}">
{%- endfor -%}
{% block style -%}
{%- block style %}
<style data-html-block="style">
{%- if style is defined -%}{{ style }}{%- endif -%}
</style>
{%- endblock %}
{%- endblock -%}

{% block script -%}
{%- block script %}
<script data-html-block="script">
{%- if script is defined -%}{{ script }}{%- endif -%}
</script>
{%- endblock %}
{%- endblock %}

{%- block script_lib %}
<script data-html-block="script_lib" data-name="{{ name }}">
{%- if script_lib is defined -%}{{ script_lib }}{%- endif -%}
</script>
{%- endblock -%}

{%- endblock -%}
</head>
<body>
<div id="wrap">


+ 43
- 0
frappe/templates/includes/login.css 查看文件

@@ -0,0 +1,43 @@
.page-header { display: none; }
.page-sidebar {
display: none;
}
.page-content {
right: 0%;
width: 100%;
}

.form-signin {
max-width: 330px;
padding: 15px;
margin: 0 auto;
}
.form-signin .form-signin-heading,
.form-signin .checkbox {
margin-bottom: 10px;
}
.form-signin .checkbox {
font-weight: normal;
}
.form-signin .form-control {
position: relative;
height: auto;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
padding: 10px;
font-size: 16px;
}
.form-signin .form-control:focus {
z-index: 2;
}
input#login_email, input#signup_fullname {
margin-bottom: -1px;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
input#login_password, input#signup_email {
margin-bottom: 10px;
border-top-left-radius: 0;
border-top-right-radius: 0;
}

+ 151
- 157
frappe/templates/includes/login.js 查看文件

@@ -1,182 +1,176 @@
if(!login) {
var disable_signup = {{ disable_signup and "true" or "false" }};
var login = {};

$(document).ready(function() {
window.location.hash = "#login";
login.login();
$(".btn-signup").click(function() {
var args = {};
args.cmd = "frappe.core.doctype.profile.profile.sign_up";
args.email = ($("#signup_email").val() || "").trim();
args.full_name = ($("#signup_fullname").val() || "").trim();

if(!args.email || !valid_email(args.email) || !args.full_name) {
login.set_message("Valid email and name required.");
return false;
}
login.call(args);
});
$(".btn-login").click(function() {
var args = {};
args.cmd = "login";
args.usr = ($("#login_email").val() || "").trim();
args.pwd = $("#login_password").val();

if(!args.usr || !args.pwd) {
login.set_message("Both login and password required.");
return false;
}
login.call(args);
});
$(".btn-forgot").click(function() {
var args = {};
args.cmd = "frappe.core.doctype.profile.profile.reset_password";
args.user = ($("#forgot_email").val() || "").trim();
if(!args.user) {
login.set_message("Valid Login id required.");
return false;
}
window.disable_signup = {{ disable_signup and "true" or "false" }};

login.call(args);
});
$(document).trigger('login_rendered');
})

window.login = {};

login.bind_events = function() {
$(window).on("hashchange", function() {
login.route();
});

$(document).on("page_change", function() {
if(location.pathname && location.pathname.split("/")[1].split(".")[0]==="login")
login.route();
$(".form-login").on("submit", function(event) {
event.preventDefault();
var args = {};
args.cmd = "login";
args.usr = ($("#login_email").val() || "").trim();
args.pwd = $("#login_password").val();
if(!args.usr || !args.pwd) {
frappe.msgprint("Both login and password required.");
return false;
}
login.call(args);
});

login.route = function() {
var route = window.location.hash.slice(1);
if(!route) route = "login";
login[route]();
}
$(".form-signup").on("submit", function() {
event.preventDefault();
var args = {};
args.cmd = "frappe.core.doctype.profile.profile.sign_up";
args.email = ($("#signup_email").val() || "").trim();
args.full_name = ($("#signup_fullname").val() || "").trim();
if(!args.email || !valid_email(args.email) || !args.full_name) {
frappe.msgprint("Valid email and name required.");
return false;
}
login.call(args);
});

login.login = function() {
$("form").toggle(false);
$(".form-login").toggle(true);
}
$(".form-forgot").on("submit", function() {
event.preventDefault();
var args = {};
args.cmd = "frappe.core.doctype.profile.profile.reset_password";
args.user = ($("#forgot_email").val() || "").trim();
if(!args.user) {
frappe.msgprint("Valid Login id required.");
return false;
}
login.call(args);
});
}

login.forgot = function() {
$("form").toggle(false);
$(".form-forgot").toggle(true);
}

login.signup = function() {
$("form").toggle(false);
$(".form-signup").toggle(true);
}
login.route = function() {
var route = window.location.hash.slice(1);
if(!route) route = "login";
login[route]();
}

login.login = function() {
$("form").toggle(false);
$(".form-login").toggle(true);
}

// Login
login.call = function(args) {
$('.btn-primary').prop("disabled", true);

$.ajax({
type: "POST",
url: "/",
data: args,
dataType: "json",
statusCode: login.login_handlers
}).always(function(){
$('.btn-primary').prop("disabled", false);
})
}
login.forgot = function() {
$("form").toggle(false);
$(".form-forgot").toggle(true);
}

login.signup = function() {
$("form").toggle(false);
$(".form-signup").toggle(true);
}

login.login_handlers = {
200: function(data) {
if(data.message=="Logged In") {
window.location.href = "app";
} else if(data.message=="No App") {
if(localStorage) {
var last_visited = localStorage.getItem("last_visited") || "/index";
localStorage.removeItem("last_visited");
window.location.href = last_visited;
} else {
window.location.href = "/index";
}
} else if(window.is_sign_up) {
frappe.msgprint(data.message);
}
},
401: function(xhr, data) {
login.set_message("Invalid Login");
}

// Login
login.call = function(args) {
$('.btn-primary').prop("disabled", true);

$.ajax({
type: "POST",
url: "/",
data: args,
dataType: "json",
statusCode: login.login_handlers
}).always(function(){
$('.btn-primary').prop("disabled", false);
})
}

login.login_handlers = {
200: function(data) {
if(data.message=="Logged In") {
window.location.href = "app";
} else if(data.message=="No App") {
if(localStorage) {
var last_visited = localStorage.getItem("last_visited") || "/index";
localStorage.removeItem("last_visited");
window.location.href = last_visited;
} else {
window.location.href = "/index";
}
} else if(window.is_sign_up) {
frappe.msgprint(data.message);
}
},
401: function(xhr, data) {
frappe.msgprint("Invalid Login");
}
}

frappe.ready(function() {
window.location.hash = "#login";
login.bind_events();
login.login();
$(document).trigger('login_rendered');
});

{% if fb_app_id is defined -%}
{% if fb_app_id is defined -%}
// facebook login
$(document).ready(function() {
var user_id = frappe.get_cookie("user_id");
var sid = frappe.get_cookie("sid");
// logged in?
if(!sid || sid==="Guest") {
// fallback on facebook login -- no login again
$(".btn-facebook").removeAttr("disabled");
} else {
// get private stuff (if access)
// app.setup_user({"user": user_id});
}
});

$(function() {
$login = $(".btn-facebook").prop("disabled", true);
$.getScript('//connect.facebook.net/en_UK/all.js', function() {
$login.prop("disabled", false);
FB.init({
appId: '{{ fb_app_id }}',
});
$login.click(function() {
$login.prop("disabled", true).html("Logging In...");
login.via_facebook();
});
$(function() {
$login = $(".btn-facebook").prop("disabled", true);
$.getScript('//connect.facebook.net/en_UK/all.js', function() {
$login.prop("disabled", false);
FB.init({
appId: '{{ fb_app_id }}',
});
$login.click(function() {
$login.prop("disabled", true).html("Logging In...");
login.via_facebook();
});
});
});

login.via_facebook = function() {
// not logged in to facebook either
FB.login(function(response) {
if (response.authResponse) {
// yes logged in via facebook
console.log('Welcome! Fetching your information.... ');
var fb_access_token = response.authResponse.accessToken;

// get user graph
FB.api('/me', function(response) {
response.fb_access_token = fb_access_token || "[none]";
$.ajax({
url:"/",
type: "POST",
data: {
cmd:"frappe.core.doctype.profile.profile.facebook_login",
data: JSON.stringify(response)
},
statusCode: login.login_handlers
})
});
} else {
frappe.msgprint("You have denied access to this application via Facebook. \
Please change your privacy settings in Facebook and try again. \
If you do not want to use Facebook login, <a href='/login'>sign-up</a> here");
}
},{scope:"email"});
}

login.via_facebook = function() {
// not logged in to facebook either
FB.login(function(response) {
if (response.authResponse) {
// yes logged in via facebook
console.log('Welcome! Fetching your information.... ');
var fb_access_token = response.authResponse.accessToken;

// get user graph
FB.api('/me', function(response) {
response.fb_access_token = fb_access_token || "[none]";
$.ajax({
url:"/",
type: "POST",
data: {
cmd:"frappe.core.doctype.profile.profile.facebook_login",
data: JSON.stringify(response)
},
statusCode: login.login_handlers
})
});
} else {
frappe.msgprint("You have denied access to this application via Facebook. \
Please change your privacy settings in Facebook and try again. \
If you do not want to use Facebook login, <a href='/login'>sign-up</a> here");
}
},{scope:"email"});
frappe.ready(function() {
var user_id = frappe.get_cookie("user_id");
var sid = frappe.get_cookie("sid");

// logged in?
if(!sid || sid==="Guest") {
// fallback on facebook login -- no login again
$(".btn-facebook").removeAttr("disabled");
} else {
// get private stuff (if access)
// app.setup_user({"user": user_id});
}
{%- endif %}
}
});

{%- endif %}

+ 2
- 3
frappe/templates/pages/login.html 查看文件

@@ -55,9 +55,8 @@
</form>
</div>
<script>
{% include "templates/includes/login.js" %}
</script>
{% endblock %}

{% block script_lib %}{% include "templates/includes/login.js" %}{% endblock %}

{% block sidebar %}{% endblock %}

+ 5
- 2
frappe/website/context.py 查看文件

@@ -33,9 +33,12 @@ def get_context(path):

else:
context["access"] = get_access(context.pathname)
context.update(context.data or {})
if not context.data:
context.data = {}
context.data["path"] = path
context.update(context.data or {})
# TODO private pages
return context


+ 27
- 3
frappe/website/js/website.js 查看文件

@@ -263,13 +263,21 @@ $.extend(frappe, {
} else {
$('[data-html-block]').each(function(i, section) {
var $section = $(section);
if($section.attr("data-html-block")==="script") {
var stype = $section.attr("data-html-block");
if(stype==="script") {
$section.remove();
$("<script data-html-block='script'></script>")
.html(data[$section.attr("data-html-block")] || "")
.html(data[stype] || "")
.appendTo("body");
} else if(stype==="script_lib") {
// render once
if(!$("[data-block-html='script_lib'][data-path='"+data.path+"']").length) {
$("<script data-block-html='script_lib' data-path='"+data.path+"'></script>")
.html(data.script_lib)
.appendTo("body");
}
} else {
$section.html(data[$section.attr("data-html-block")] || "");
$section.html(data[stype] || "");
}
});
if(data.title) $("title").html(data.title);
@@ -286,6 +294,21 @@ $.extend(frappe, {
return (window.history && window.history.pushState && window.history.replaceState &&
// pushState isn't reliable on iOS until 5.
!navigator.userAgent.match(/((iPod|iPhone|iPad).+\bOS\s+[1-4]|WebApps\/.+CFNetwork)/))
},
get_pathname: function() {
return location.pathname && location.pathname.split("/")[1].split(".")[0];
},
page_ready_events: {},
ready: function(fn) {
if(!frappe.page_ready_events[frappe.get_pathname()]) {
frappe.page_ready_events[frappe.get_pathname()] = [];
}
frappe.page_ready_events[frappe.get_pathname()].push(fn);
},
trigger_ready: function() {
$.each((frappe.page_ready_events[frappe.get_pathname()] || []), function(i, fn) {
fn();
})
}
});

@@ -445,4 +468,5 @@ $(document).on("page_change", function() {
$(document).trigger("apply_permissions");
frappe.datetime.refresh_when();
frappe.trigger_ready();
});

Loading…
取消
儲存