[breadcrumbs] refactor, add preferred

This commit is contained in:
Rushabh Mehta 2015-03-09 15:46:27 +05:30
parent 3081b2df77
commit 24d19a4ab8
21 changed files with 6729 additions and 71 deletions

View file

@ -6,7 +6,7 @@ frappe.pages['modules_setup'].on_page_load = function(wrapper) {
single_column: true
});
frappe.add_breadcrumbs("Setup");
frappe.breadcrumbs.add("Setup");
wrapper.page.set_primary_action(__("Update"), function() {
frappe.modules_setup.update(this);

View file

@ -6,7 +6,7 @@ frappe.pages['permission-manager'].on_page_load = function(wrapper) {
single_column: true
});
frappe.add_breadcrumbs("Setup");
frappe.breadcrumbs.add("Setup");
$("<div class='perm-engine' style='min-height: 200px; padding: 15px;'></div>").appendTo(page.main);
$(frappe.render_template("permission_manager_help", {})).appendTo(page.main);

View file

@ -6,7 +6,7 @@ frappe.pages['user-permissions'].on_page_load = function(wrapper) {
single_column: true
});
frappe.add_breadcrumbs("Setup");
frappe.breadcrumbs.add("Setup");
$("<div class='user-settings' \
style='min-height: 200px; padding: 15px;'></div>\

View file

@ -100,6 +100,7 @@
"public/js/frappe/ui/tree.js",
"public/js/frappe/views/container.js",
"public/js/frappe/views/breadcrumbs.js",
"public/js/frappe/views/factory.js",
"public/js/frappe/views/pageview.js",

File diff suppressed because one or more lines are too long

View file

@ -57,13 +57,18 @@ a.grey:hover,
.sidebar-section a:hover,
.nav-pills a:hover,
.control-value a:hover,
.data-row a:hover {
.data-row a:hover,
a.grey:focus,
.sidebar-section a:focus,
.nav-pills a:focus,
.control-value a:focus,
.data-row a:focus {
border-bottom: 1px solid #212a33;
color: #212a33;
}
a.text-muted,
a.text-extra-muted {
border-bottom: 1px solid transparent;
text-underline: none;
}
a.text-muted:hover,
a.text-muted:focus,

View file

@ -57,13 +57,18 @@ a.grey:hover,
.sidebar-section a:hover,
.nav-pills a:hover,
.control-value a:hover,
.data-row a:hover {
.data-row a:hover,
a.grey:focus,
.sidebar-section a:focus,
.nav-pills a:focus,
.control-value a:focus,
.data-row a:focus {
border-bottom: 1px solid #212a33;
color: #212a33;
}
a.text-muted,
a.text-extra-muted {
border-bottom: 1px solid transparent;
text-underline: none;
}
a.text-muted:hover,
a.text-muted:focus,

View file

@ -57,13 +57,18 @@ a.grey:hover,
.sidebar-section a:hover,
.nav-pills a:hover,
.control-value a:hover,
.data-row a:hover {
.data-row a:hover,
a.grey:focus,
.sidebar-section a:focus,
.nav-pills a:focus,
.control-value a:focus,
.data-row a:focus {
border-bottom: 1px solid #212a33;
color: #212a33;
}
a.text-muted,
a.text-extra-muted {
border-bottom: 1px solid transparent;
text-underline: none;
}
a.text-muted:hover,
a.text-muted:focus,

View file

@ -80,7 +80,7 @@ frappe.views.DocListView = frappe.ui.Listing.extend({
var module = locals.DocType[this.doctype].module;
this.page.set_title(__("{0} List", [__(this.doctype)]));
frappe.add_breadcrumbs(module);
frappe.breadcrumbs.add(module, this.doctype);
},
setup: function() {

View file

@ -0,0 +1,72 @@
// Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
// MIT License. See license.txt
frappe.breadcrumbs = {
all: {},
preferred: {},
set_doctype_module: function(doctype, module) {
localStorage["preferred_breadcrumbs" + ":" + doctype] = module;
},
get_doctype_module: function(doctype) {
return localStorage["preferred_breadcrumbs" + ":" + doctype];
},
add: function(module, doctype, type) {
frappe.breadcrumbs.all[frappe.get_route_str()] = {module:module, doctype:doctype, type:type};
frappe.breadcrumbs.update();
},
update: function() {
var breadcrumbs = frappe.breadcrumbs.all[frappe.get_route_str()];
var $breadcrumbs = $("#navbar-breadcrumbs").empty();
if(!breadcrumbs) {
$("body").addClass("no-breadcrumbs");
return;
}
// get preferred module for breadcrumbs, based on sent via module
var from_module = frappe.breadcrumbs.get_doctype_module(breadcrumbs.doctype);
if(from_module) {
breadcrumbs.module = from_module;
} else if(frappe.breadcrumbs.preferred[breadcrumbs.doctype]) {
// get preferred module for breadcrumbs
breadcrumbs.module = frappe.breadcrumbs.preferred[breadcrumbs.doctype];
}
if(breadcrumbs.module && breadcrumbs.module != "Desk") {
if(in_list(["Core", "Email", "Custom", "Workflow"], breadcrumbs.module))
breadcrumbs.module = "Setup";
var module_info = frappe.get_module(breadcrumbs.module),
icon = module_info && module_info.icon,
label = module_info ? module_info.label : breadcrumbs.module;
if(module_info) {
$(repl('<li><a href="#Module/%(module)s">%(label)s</a></li>',
{ module: breadcrumbs.module, label: __(label) }))
.appendTo($breadcrumbs);
}
}
if(breadcrumbs.doctype && frappe.get_route()[0]==="Form") {
$(repl('<li><a href="#List/%(doctype)s">%(label)s</a></li>',
{doctype: breadcrumbs.doctype, label: __(breadcrumbs.doctype)}))
.appendTo($breadcrumbs);
}
$("body").removeClass("no-breadcrumbs");
},
rename: function(doctype, old_name, new_name) {
var old_route_str = ["Form", doctype, old_name].join("/");
var new_route_str = ["Form", doctype, new_name].join("/");
frappe.breadcrumbs[new_route_str] = frappe.breadcrumbs[old_route_str];
delete frappe.breadcrumbs[old_route_str];
}
}

View file

@ -43,7 +43,7 @@ frappe.views.Calendar = frappe.views.CalendarBase.extend({
this.page.set_title(__("Calendar") + " - " + __(this.doctype));
if (module !== "Desk") {
frappe.add_breadcrumbs(module, this.doctype)
frappe.breadcrumbs.add(module, this.doctype)
}
this.add_filters();

View file

@ -4,7 +4,6 @@
// page container
frappe.provide('frappe.pages');
frappe.provide('frappe.views');
frappe.provide('frappe.breadcrumbs');
frappe.views.Container = Class.extend({
_intro: "Container contains pages inside `#container` and manages \
@ -23,7 +22,7 @@ frappe.views.Container = Class.extend({
});
$(document).bind('rename', function(event, dt, old_name, new_name) {
me.rename_breadcrumbs(dt, old_name, new_name)
frappe.breadcrumbs.rename(dt, old_name, new_name);
});
},
add_page: function(label) {
@ -78,50 +77,10 @@ frappe.views.Container = Class.extend({
this.page._route = window.location.hash;
$(this.page).trigger('show');
scroll(0,0);
this.update_breadcrumbs();
frappe.breadcrumbs.update();
return this.page;
},
update_breadcrumbs: function() {
var breadcrumbs = frappe.breadcrumbs[frappe.get_route_str()];
var $breadcrumbs = $("#navbar-breadcrumbs").empty();
if(!breadcrumbs) {
$("body").addClass("no-breadcrumbs");
return;
}
if(breadcrumbs.module && breadcrumbs.module != "Desk") {
if(in_list(["Core", "Email", "Custom", "Workflow"], breadcrumbs.module))
breadcrumbs.module = "Setup";
var module_info = frappe.get_module(breadcrumbs.module),
icon = module_info && module_info.icon,
label = module_info ? module_info.label : breadcrumbs.module;
if(module_info) {
$(repl('<li><a href="#Module/%(module)s">%(label)s</a></li>',
{ module: breadcrumbs.module, label: __(label) }))
.appendTo($breadcrumbs);
}
}
if(breadcrumbs.doctype) {
$(repl('<li><a href="#List/%(doctype)s">%(label)s</a></li>',
{doctype: breadcrumbs.doctype, label: __(breadcrumbs.doctype)}))
.appendTo($breadcrumbs);
}
$("body").removeClass("no-breadcrumbs");
},
rename_breadcrumbs: function(doctype, old_name, new_name) {
var old_route_str = ["Form", doctype, old_name].join("/");
var new_route_str = ["Form", doctype, new_name].join("/");
frappe.breadcrumbs[new_route_str] = frappe.breadcrumbs[old_route_str];
delete frappe.breadcrumbs[old_route_str];
}
});
frappe.add_breadcrumbs = function(module, doctype) {
frappe.breadcrumbs[frappe.get_route_str()] = {module:module, doctype:doctype};
frappe.container.update_breadcrumbs();
}

View file

@ -41,7 +41,7 @@ frappe.views.Gantt = frappe.views.CalendarBase.extend({
this.page = this.parent.page;
this.page.set_title(__("Gantt Chart") + " - " + __(this.doctype));
frappe.add_breadcrumbs(module, this.doctype);
frappe.breadcrumbs.add(module, this.doctype);
this.page.set_secondary_action(__("Refresh"),
function() { me.refresh(); }, "icon-refresh")

View file

@ -105,6 +105,8 @@ frappe.views.moduleview.ModuleView = Class.extend({
var route = [item.route || item.link];
if (!route[0]) {
if (item.type == "doctype") {
// save the last page from the breadcrumb was accessed
frappe.breadcrumbs.set_doctype_module(item.name, this.module);
route = ["List", item.name];
} else if (item.type == "page") {
route = [item.name]

View file

@ -96,7 +96,7 @@ frappe.views.QueryReport = Class.extend({
frappe.model.with_doctype(me.report_doc.ref_doctype, function() {
var module = locals.DocType[me.report_doc.ref_doctype].module;
frappe.add_breadcrumbs(module)
frappe.breadcrumbs.add(module)
if(!frappe.query_reports[me.report_name]) {
return frappe.call({

View file

@ -51,7 +51,7 @@ frappe.views.ReportViewPage = Class.extend({
make_report_view: function() {
this.page.set_title(__(this.doctype));
var module = locals.DocType[this.doctype].module;
frappe.add_breadcrumbs(module, this.doctype)
frappe.breadcrumbs.add(module, this.doctype)
this.parent.reportview = new frappe.views.ReportView({
doctype: this.doctype,

View file

@ -496,7 +496,7 @@ _f.Frm.prototype.setnewdoc = function() {
me.script_manager.trigger("onload");
me.opendocs[me.docname] = true;
me.render_form();
frappe.add_breadcrumbs(me.meta.module, me.doctype)
frappe.breadcrumbs.add(me.meta.module, me.doctype)
})
}

View file

@ -48,15 +48,16 @@ a.disabled, a.disabled:hover {
}
a.grey, .sidebar-section a, .nav-pills a, .control-value a, .data-row a {
.underline;
.underline();
}
a.grey:hover, .sidebar-section a:hover, .nav-pills a:hover, .control-value a:hover, .data-row a:hover {
.underline-hover;
a.grey:hover, .sidebar-section a:hover, .nav-pills a:hover, .control-value a:hover, .data-row a:hover,
a.grey:focus, .sidebar-section a:focus, .nav-pills a:focus, .control-value a:focus, .data-row a:focus {
.underline-hover();
}
a.text-muted, a.text-extra-muted {
border-bottom: 1px solid transparent;
text-underline: none;
}
a.text-muted:hover,

View file

@ -1,14 +1,11 @@
@import "variables.less";
.underline() {
color: inherit;
border-bottom: 1px solid transparent;
margin-bottom: 0.4em;
text-decoration: underline;
}
.underline-hover() {
border-bottom: 1px solid @grey-link-color;
color: @grey-link-color;
text-decoration: underline;
}
.breadcrumb-divider() {

View file

@ -51,9 +51,11 @@
{%- endblock -%}
{%- block navbar -%}{% include "templates/includes/navbar/navbar.html" %}{%- endblock -%}
<div class="container" data-html-block="content">
{% block content %}
<div class="container" data-html-block="content">
{{ content }}
</div>
</div>
{% endblock %}
<footer class="page-footer">
<div class="container" data-html-block="footer">
{%- if footer is defined -%}{{ footer }}{%- endif -%}

View file

@ -28,7 +28,7 @@ class sync(object):
frappe.db.sql("delete from `tabWeb Page` where ifnull(template_path, '')!=''")
for app in frappe.get_installed_apps():
print app
print "Syncing for {0}".format(app)
self.sync_for_app(app)
self.cleanup()