[breadcrumbs] refactor, add preferred
This commit is contained in:
parent
3081b2df77
commit
24d19a4ab8
21 changed files with 6729 additions and 71 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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>\
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
||||
|
|
|
|||
6611
frappe/public/css/bootstrap.css
vendored
6611
frappe/public/css/bootstrap.css
vendored
File diff suppressed because one or more lines are too long
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
72
frappe/public/js/frappe/views/breadcrumbs.js
Normal file
72
frappe/public/js/frappe/views/breadcrumbs.js
Normal 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];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
|
|
|
|||
|
|
@ -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({
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
})
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
|
|
|
|||
|
|
@ -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 -%}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue