@@ -114,12 +114,6 @@ def get_fullnames(): | |||||
return d | return d | ||||
def get_startup_js(): | |||||
startup_js = [] | |||||
for method in frappe.get_hooks().startup_js or []: | |||||
startup_js.append(frappe.get_attr(method)() or "") | |||||
return "\n".join(startup_js) | |||||
def get_user(bootinfo): | def get_user(bootinfo): | ||||
"""get user info""" | """get user info""" | ||||
bootinfo.user = frappe.user.load_user() | bootinfo.user = frappe.user.load_user() | ||||
@@ -4,8 +4,8 @@ | |||||
<div class="list-group all-applications-list"> | <div class="list-group all-applications-list"> | ||||
{% for(var i=0, l=all_modules.length; i < l; i++) { | {% for(var i=0, l=all_modules.length; i < l; i++) { | ||||
var module_name = all_modules[i]; | var module_name = all_modules[i]; | ||||
if (desktop_items.indexOf(module_name)===-1 || module_name==="All Applications") { continue; } | |||||
var module = frappe.get_module(module_name); | var module = frappe.get_module(module_name); | ||||
if (desktop_items.indexOf(module_name)===-1 || module.force_show) { continue; } | |||||
%} | %} | ||||
<div class="list-group-item" data-label="{%= module.label %}" data-name="{%= module.name %}"> | <div class="list-group-item" data-label="{%= module.label %}" data-name="{%= module.name %}"> | ||||
<div class="checkbox"> | <div class="checkbox"> | ||||
@@ -23,7 +23,7 @@ $.extend(frappe.desktop, { | |||||
this.wrapper.html(frappe.render_template("desktop_icon_grid", { | this.wrapper.html(frappe.render_template("desktop_icon_grid", { | ||||
// all visible icons | // all visible icons | ||||
desktop_items: frappe.user.get_desktop_items(), | |||||
desktop_items: this.get_desktop_items(), | |||||
// user visible icons | // user visible icons | ||||
user_desktop_items: this.get_user_desktop_items(), | user_desktop_items: this.get_user_desktop_items(), | ||||
@@ -40,6 +40,25 @@ $.extend(frappe.desktop, { | |||||
$(document).trigger("desktop-render"); | $(document).trigger("desktop-render"); | ||||
}, | }, | ||||
get_desktop_items: function() { | |||||
var me = this; | |||||
frappe.modules["All Applications"] = { | |||||
icon: "octicon octicon-three-bars", | |||||
label: "All Applications", | |||||
_label: __("All Applications"), | |||||
_id: "all_applications", | |||||
color: "#4aa3df", | |||||
link: "", | |||||
force_show: true, | |||||
onclick: function() { | |||||
me.all_applications.show(); | |||||
} | |||||
} | |||||
return frappe.user.get_desktop_items(); | |||||
}, | |||||
get_user_desktop_items: function() { | get_user_desktop_items: function() { | ||||
var me = this; | var me = this; | ||||
@@ -56,20 +75,13 @@ $.extend(frappe.desktop, { | |||||
user_desktop_items.push('Core'); | user_desktop_items.push('Core'); | ||||
} | } | ||||
frappe.modules["All Applications"] = { | |||||
icon: "octicon octicon-three-bars", | |||||
label: "All Applications", | |||||
_label: __("All Applications"), | |||||
_id: "all_applications", | |||||
color: "#4aa3df", | |||||
link: "", | |||||
onclick: function() { | |||||
me.all_applications.show(); | |||||
for (var m in frappe.modules) { | |||||
var module = frappe.modules[m]; | |||||
if (module.force_show && user_desktop_items.indexOf(m)===-1) { | |||||
user_desktop_items.push(m); | |||||
} | } | ||||
} | } | ||||
user_desktop_items.push("All Applications") | |||||
// filter valid icons | // filter valid icons | ||||
for (var i=0, l=user_desktop_items.length; i < l; i++) { | for (var i=0, l=user_desktop_items.length; i < l; i++) { | ||||
var m = user_desktop_items[i]; | var m = user_desktop_items[i]; | ||||
@@ -91,10 +103,11 @@ $.extend(frappe.desktop, { | |||||
var parent = $(this).parent(); | var parent = $(this).parent(); | ||||
var link = parent.attr("data-link"); | var link = parent.attr("data-link"); | ||||
if(link) { | if(link) { | ||||
if(link.substr(0, 1)==="/") { | |||||
window.open(link.substr(1)) | |||||
if(link.substr(0, 1)==="/" || link.substr(0, 4)==="http") { | |||||
window.open(link, "_blank"); | |||||
} else { | |||||
frappe.set_route(link); | |||||
} | } | ||||
frappe.set_route(link); | |||||
return false; | return false; | ||||
} else { | } else { | ||||
module = frappe.get_module(parent.attr("data-name")); | module = frappe.get_module(parent.attr("data-name")); | ||||
@@ -2,7 +2,7 @@ | |||||
<div id="icon-grid"> | <div id="icon-grid"> | ||||
{% for (var i=0, l=desktop_items.length; i < l; i++) { | {% for (var i=0, l=desktop_items.length; i < l; i++) { | ||||
var module = frappe.get_module(desktop_items[i]); | var module = frappe.get_module(desktop_items[i]); | ||||
if (user_desktop_items.indexOf(module.name)===-1) { continue; } | |||||
if (user_desktop_items.indexOf(module.name)===-1 && !module.force_show) { continue; } | |||||
%} | %} | ||||
{%= frappe.render_template("desktop_module_icon", module) %} | {%= frappe.render_template("desktop_module_icon", module) %} | ||||
{% } %} | {% } %} | ||||
@@ -6,6 +6,7 @@ frappe.provide("frappe.activity"); | |||||
frappe.pages['activity'].on_page_load = function(wrapper) { | frappe.pages['activity'].on_page_load = function(wrapper) { | ||||
var me = this; | var me = this; | ||||
frappe.assets.views["List"](); | |||||
frappe.require('assets/frappe/js/lib/flot/jquery.flot.js'); | frappe.require('assets/frappe/js/lib/flot/jquery.flot.js'); | ||||
frappe.require('assets/frappe/js/lib/flot/jquery.flot.downsample.js'); | frappe.require('assets/frappe/js/lib/flot/jquery.flot.downsample.js'); | ||||
@@ -10,10 +10,6 @@ import frappe.utils.file_manager | |||||
import frappe.desk.form.run_method | import frappe.desk.form.run_method | ||||
from frappe.utils.response import build_response | from frappe.utils.response import build_response | ||||
@frappe.whitelist(allow_guest=True) | |||||
def startup(): | |||||
frappe.response.update(frappe.sessions.get()) | |||||
@frappe.whitelist() | @frappe.whitelist() | ||||
def runserverobj(method, docs=None, dt=None, dn=None, arg=None, args=None): | def runserverobj(method, docs=None, dt=None, dn=None, arg=None, args=None): | ||||
frappe.desk.form.run_method.runserverobj(method, docs=docs, dt=dt, dn=dn, arg=arg, args=args) | frappe.desk.form.run_method.runserverobj(method, docs=docs, dt=dt, dn=dn, arg=arg, args=args) | ||||
@@ -46,6 +46,7 @@ body[data-route="desktop"] .navbar-default { | |||||
display: inline-block; | display: inline-block; | ||||
transition: 0.2s; | transition: 0.2s; | ||||
-webkit-transition: 0.2s; | -webkit-transition: 0.2s; | ||||
text-shadow: -1px 1px 5px rgba(0, 0, 0, 0.15); | |||||
} | } | ||||
.app-icon svg, | .app-icon svg, | ||||
.app-icon img { | .app-icon img { | ||||
@@ -13,23 +13,7 @@ frappe.Application = Class.extend({ | |||||
}, | }, | ||||
load_startup: function() { | load_startup: function() { | ||||
var me = this; | |||||
if(window.app) { | |||||
return frappe.call({ | |||||
method: 'startup', | |||||
callback: function(r, rt) { | |||||
frappe.provide('frappe.boot'); | |||||
frappe.boot = r; | |||||
if(frappe.boot.user.name==='Guest' || frappe.boot.user.user_type==="Website User") { | |||||
window.location = 'index'; | |||||
return; | |||||
} | |||||
me.startup(); | |||||
} | |||||
}); | |||||
} else { | |||||
this.startup(); | |||||
} | |||||
this.startup(); | |||||
}, | }, | ||||
startup: function() { | startup: function() { | ||||
this.load_bootinfo(); | this.load_bootinfo(); | ||||
@@ -37,7 +21,6 @@ frappe.Application = Class.extend({ | |||||
this.make_nav_bar(); | this.make_nav_bar(); | ||||
this.set_favicon(); | this.set_favicon(); | ||||
this.setup_keyboard_shortcuts(); | this.setup_keyboard_shortcuts(); | ||||
this.run_startup_js(); | |||||
if(frappe.boot) { | if(frappe.boot) { | ||||
if(localStorage.getItem("session_lost_route")) { | if(localStorage.getItem("session_lost_route")) { | ||||
@@ -268,11 +251,6 @@ frappe.Application = Class.extend({ | |||||
frappe.ui.toolbar.clear_cache(); | frappe.ui.toolbar.clear_cache(); | ||||
}); | }); | ||||
}, | |||||
run_startup_js: function() { | |||||
if(frappe.boot.startup_js) | |||||
eval(frappe.boot.startup_js); | |||||
} | } | ||||
}); | }); | ||||
@@ -288,10 +266,13 @@ frappe.get_module = function(m) { | |||||
module.link = "Module/" + m; | module.link = "Module/" + m; | ||||
} | } | ||||
if(module.link) { | |||||
if (!module.link) module.link = ""; | |||||
if (!module._id) { | |||||
module._id = module.link.toLowerCase().replace("/", "-"); | module._id = module.link.toLowerCase().replace("/", "-"); | ||||
} | } | ||||
if(!module.label) { | if(!module.label) { | ||||
module.label = m; | module.label = m; | ||||
} | } | ||||
@@ -80,7 +80,7 @@ $.extend(frappe.user, { | |||||
// add missing modules - they will be hidden anyways by the view | // add missing modules - they will be hidden anyways by the view | ||||
$.each(frappe.modules, function(m, module) { | $.each(frappe.modules, function(m, module) { | ||||
var module = frappe.get_module(m); | var module = frappe.get_module(m); | ||||
if(module.link && modules_list.indexOf(m)==-1) { | |||||
if(modules_list.indexOf(m)==-1) { | |||||
modules_list.push(m); | modules_list.push(m); | ||||
} | } | ||||
}); | }); | ||||
@@ -96,7 +96,7 @@ $.extend(frappe.user, { | |||||
if(frappe.boot.hidden_modules && modules_list) { | if(frappe.boot.hidden_modules && modules_list) { | ||||
var hidden_list = JSON.parse(frappe.boot.hidden_modules); | var hidden_list = JSON.parse(frappe.boot.hidden_modules); | ||||
var modules_list = $.map(modules_list, function(m) { | var modules_list = $.map(modules_list, function(m) { | ||||
if(hidden_list.indexOf(m)==-1) return m; else return null; | |||||
if(hidden_list.indexOf(m)==-1 || frappe.modules[m].force_show) return m; else return null; | |||||
}); | }); | ||||
} | } | ||||
@@ -4,6 +4,7 @@ | |||||
// provide a namespace | // provide a namespace | ||||
if(!window.frappe) | if(!window.frappe) | ||||
window.frappe = {}; | window.frappe = {}; | ||||
frappe.provide = function(namespace) { | frappe.provide = function(namespace) { | ||||
// docs: create a namespace // | // docs: create a namespace // | ||||
var nsl = namespace.split('.'); | var nsl = namespace.split('.'); | ||||
@@ -8,7 +8,7 @@ | |||||
</form> | </form> | ||||
<ul class="list-unstyled sidebar-menu"> | <ul class="list-unstyled sidebar-menu"> | ||||
<li class="divider"></li> | <li class="divider"></li> | ||||
<li><a href="#" class="all-applications strong">{%= __("All Applications") %}</a></li> | |||||
<li><a href="#" class="strong">{%= __("Home") %}</a></li> | |||||
</ul> | </ul> | ||||
<div class="form-sidebar" style="display: none"> | <div class="form-sidebar" style="display: none"> | ||||
@@ -141,7 +141,7 @@ frappe.ui.toolbar.clear_cache = function() { | |||||
$c('frappe.sessions.clear',{},function(r,rt){ | $c('frappe.sessions.clear',{},function(r,rt){ | ||||
if(!r.exc) { | if(!r.exc) { | ||||
show_alert(r.message); | show_alert(r.message); | ||||
location.reload(); | |||||
location.reload(true); | |||||
} | } | ||||
}); | }); | ||||
return false; | return false; | ||||
@@ -55,6 +55,7 @@ body[data-route=""] .navbar-default, body[data-route="desktop"] .navbar-default | |||||
display: inline-block; | display: inline-block; | ||||
transition: 0.2s; | transition: 0.2s; | ||||
-webkit-transition: 0.2s; | -webkit-transition: 0.2s; | ||||
text-shadow: -1px 1px 5px rgba(0, 0, 0, 0.15); | |||||
} | } | ||||
.app-icon svg, .app-icon img { | .app-icon svg, .app-icon img { | ||||
@@ -73,7 +73,7 @@ def get(): | |||||
"""get session boot info""" | """get session boot info""" | ||||
from frappe.desk.notifications import \ | from frappe.desk.notifications import \ | ||||
get_notification_info_for_boot, get_notifications | get_notification_info_for_boot, get_notifications | ||||
from frappe.boot import get_bootinfo, get_startup_js | |||||
from frappe.boot import get_bootinfo | |||||
bootinfo = None | bootinfo = None | ||||
if not getattr(frappe.conf,'disable_session_cache', None): | if not getattr(frappe.conf,'disable_session_cache', None): | ||||
@@ -81,9 +81,9 @@ def get(): | |||||
bootinfo = frappe.cache().get_value("bootinfo", user=True) | bootinfo = frappe.cache().get_value("bootinfo", user=True) | ||||
if bootinfo: | if bootinfo: | ||||
bootinfo['from_cache'] = 1 | bootinfo['from_cache'] = 1 | ||||
bootinfo["user"]["recent"] = \ | |||||
json.dumps(frappe.cache().get_value("recent", user=True)) | |||||
bootinfo["notification_info"].update(get_notifications()) | bootinfo["notification_info"].update(get_notifications()) | ||||
# bootinfo["user"]["recent"] = \ | |||||
# json.dumps(frappe.cache().get_value("recent", user=True)) | |||||
if not bootinfo: | if not bootinfo: | ||||
@@ -96,7 +96,6 @@ def get(): | |||||
if not bootinfo["metadata_version"]: | if not bootinfo["metadata_version"]: | ||||
bootinfo["metadata_version"] = frappe.reset_metadata_version() | bootinfo["metadata_version"] = frappe.reset_metadata_version() | ||||
bootinfo["startup_js"] = get_startup_js() | |||||
for hook in frappe.get_hooks("extend_bootinfo"): | for hook in frappe.get_hooks("extend_bootinfo"): | ||||
frappe.get_attr(hook)(bootinfo=bootinfo) | frappe.get_attr(hook)(bootinfo=bootinfo) | ||||
@@ -35,10 +35,16 @@ | |||||
</div> | </div> | ||||
<script type="text/javascript" src="/assets/frappe/js/lib/jquery/jquery.min.js"></script> | <script type="text/javascript" src="/assets/frappe/js/lib/jquery/jquery.min.js"></script> | ||||
<script type="text/javascript"> | <script type="text/javascript"> | ||||
window._version_number = "{{ build_version }}"; | window._version_number = "{{ build_version }}"; | ||||
// browser support | // browser support | ||||
window.app = true; | window.app = true; | ||||
if(!window.frappe) window.frappe = {}; | |||||
frappe.boot = {{ boot }}; | |||||
</script> | </script> | ||||
{% for include in include_js -%} | {% for include in include_js -%} | ||||
@@ -7,13 +7,23 @@ no_sitemap = 1 | |||||
no_cache = 1 | no_cache = 1 | ||||
base_template_path = "templates/pages/desk.html" | base_template_path = "templates/pages/desk.html" | ||||
import frappe, os | |||||
import os, json | |||||
import frappe | |||||
from frappe import _ | |||||
import frappe.sessions | |||||
from frappe.utils.response import json_handler | |||||
def get_context(context): | def get_context(context): | ||||
if (frappe.session.user == "Guest" or | |||||
frappe.db.get_value("User", frappe.session.user, "user_type")=="Website User"): | |||||
frappe.throw(_("You are not permitted to access this page."), frappe.PermissionError) | |||||
hooks = frappe.get_hooks() | hooks = frappe.get_hooks() | ||||
return { | return { | ||||
"build_version": str(os.path.getmtime(os.path.join(frappe.local.sites_path, "assets", "js", | "build_version": str(os.path.getmtime(os.path.join(frappe.local.sites_path, "assets", "js", | ||||
"frappe.min.js"))), | "frappe.min.js"))), | ||||
"include_js": hooks["app_include_js"], | "include_js": hooks["app_include_js"], | ||||
"include_css": hooks["app_include_css"] | |||||
"include_css": hooks["app_include_css"], | |||||
"boot": json.dumps(frappe.sessions.get(), default=json_handler, indent=1, sort_keys=True) | |||||
} | } |