seitime-frappe/frappe/core/page/desktop/desktop.js
2015-08-14 14:22:18 +05:30

253 lines
6.2 KiB
JavaScript

frappe.provide('frappe.desktop');
frappe.pages['desktop'].on_page_load = function(wrapper) {
// load desktop
if(!frappe.list_desktop) {
frappe.desktop.set_background();
}
frappe.desktop.refresh(wrapper);
};
frappe.pages['desktop'].on_page_show = function(wrapper) {
if(frappe.list_desktop) {
$("body").attr("data-route", "list-desktop");
}
};
$.extend(frappe.desktop, {
refresh: function(wrapper) {
if (wrapper) {
this.wrapper = $(wrapper);
}
this.render();
this.make_sortable();
},
render: function() {
var me = this;
frappe.utils.set_title("Desktop");
var template = frappe.list_desktop ? "desktop_list_view" : "desktop_icon_grid";
this.wrapper.html(frappe.render_template(template, {
// all visible icons
desktop_items: this.get_desktop_items(),
// user visible icons
user_desktop_items: this.get_user_desktop_items(),
}));
this.setup_module_click();
// notifications
this.show_pending_notifications();
$(document).on("notification-update", function() {
me.show_pending_notifications();
});
$(document).trigger("desktop-render");
},
get_desktop_items: function(global) {
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();
}
}
var desktop_items = [].concat(frappe.user.get_desktop_items(global));
remove_from_list(desktop_items, "Setup");
if(user_roles.indexOf('System Manager')!=-1) {
desktop_items.push('Setup');
}
remove_from_list(desktop_items, "Core");
if(user_roles.indexOf('Administrator')!=-1) {
desktop_items.push('Core');
}
return desktop_items;
},
get_user_desktop_items: function() {
var me = this;
var user_desktop_items = [].concat(frappe.user.get_user_desktop_items());
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);
}
}
// filter valid icons
var out = [];
for (var i=0, l=user_desktop_items.length; i < l; i++) {
var m = user_desktop_items[i];
var module = frappe.get_module(m);
if (module) {
module.app_icon = frappe.ui.app_icon.get_html(m);
out.push(m);
}
}
return out;
},
setup_module_click: function() {
var me = this;
if(frappe.list_desktop) {
this.wrapper.on("click", ".desktop-list-item", function() {
me.open_module($(this));
});
} else {
this.wrapper.on("click", ".app-icon", function() {
me.open_module($(this).parent());
});
}
},
open_module: function(parent) {
var link = parent.attr("data-link");
if(link) {
if(link.substr(0, 1)==="/" || link.substr(0, 4)==="http") {
window.open(link, "_blank");
} else {
frappe.set_route(link);
}
return false;
} else {
module = frappe.get_module(parent.attr("data-name"));
if (module && module.onclick) {
module.onclick();
return false;
}
}
},
make_sortable: function() {
if (frappe.dom.is_touchscreen() || frappe.list_desktop) {
return;
}
new Sortable($("#icon-grid").get(0), {
onUpdate: function(event) {
new_order = [];
$("#icon-grid .case-wrapper").each(function(i, e) {
new_order.push($(this).attr("data-name"));
});
frappe.defaults.set_default("_desktop_items", new_order);
}
});
},
set_background: function() {
frappe.ui.set_user_background(frappe.boot.user.background_image, null,
frappe.boot.user.background_style);
},
all_applications: {
show: function() {
if(!this.dialog) {
this.make_dialog();
}
$(this.dialog.body).find(".desktop-app-search").val("").trigger("keyup");
this.dialog.show();
},
make_dialog: function() {
this.dialog = new frappe.ui.Dialog({
title: __("All Applications")
});
this.dialog.$wrapper.addClass("all-applications-dialog");
this.dialog_body = $(this.dialog.body);
$(frappe.render_template("all_applications_dialog", {
all_modules: keys(frappe.modules).sort(),
desktop_items: frappe.desktop.get_desktop_items(true),
user_desktop_items: frappe.desktop.get_user_desktop_items()
})).appendTo(this.dialog_body);
this.bind_events();
},
bind_events: function() {
var me = this;
this.dialog_body.find(".desktop-app-search").on("keyup", function() {
var val = ($(this).val() || "").toLowerCase();
me.dialog_body.find(".list-group-item").each(function() {
$(this).toggle($(this).attr("data-label").toLowerCase().indexOf(val)!==-1
|| $(this).attr("data-name").toLowerCase().indexOf(val)!==-1);
})
});
this.dialog_body.find('input[type="checkbox"]').on("click", function() {
me.save_user_desktop_items();
});
},
save_user_desktop_items: function() {
var user_desktop_items = [];
this.dialog_body.find('input[type="checkbox"]:checked').each(function(i, element) {
user_desktop_items.push($(element).attr("data-name"));
});
frappe.defaults.set_default("_user_desktop_items", user_desktop_items);
frappe.desktop.refresh();
}
},
show_pending_notifications: function() {
if (!frappe.boot.notification_info.module_doctypes) {
return;
}
var modules_list = frappe.user.get_desktop_items();
for (var i=0, l=modules_list.length; i < l; i++) {
var module = modules_list[i];
var module_doctypes = frappe.boot.notification_info.module_doctypes[module];
var sum = 0;
if(module_doctypes) {
if(frappe.boot.notification_info.open_count_doctype) {
for (var j=0, k=module_doctypes.length; j < k; j++) {
var doctype = module_doctypes[j];
sum += (frappe.boot.notification_info.open_count_doctype[doctype] || 0);
}
}
} else if(frappe.boot.notification_info.open_count_module
&& frappe.boot.notification_info.open_count_module[module]!=null) {
sum = frappe.boot.notification_info.open_count_module[module];
}
if (frappe.modules[module]) {
var notifier = $(".module-count-" + frappe.get_module(module)._id);
if(notifier.length) {
notifier.toggle(sum ? true : false);
var circle = notifier.find(".circle-text");
if(circle.length) {
circle.html(sum || "");
} else {
notifier.html(sum);
}
}
}
}
}
});