diff --git a/frappe/core/doctype/user/user.js b/frappe/core/doctype/user/user.js
index a611a4d122..3c5464d5e3 100644
--- a/frappe/core/doctype/user/user.js
+++ b/frappe/core/doctype/user/user.js
@@ -38,7 +38,7 @@ cur_frm.cscript.refresh = function(doc) {
msgprint("Refreshing...");
window.location.reload();
}
-
+
cur_frm.toggle_display('change_password', !doc.__islocal);
cur_frm.toggle_display(['sb1', 'sb3'], false);
@@ -55,9 +55,9 @@ cur_frm.cscript.refresh = function(doc) {
cur_frm.toggle_display(['sb1', 'sb3'], true);
}
cur_frm.cscript.enabled(doc);
-
+
cur_frm.roles_editor && cur_frm.roles_editor.show();
-
+
if(user==doc.name) {
// update display settings
if(doc.background_image) {
@@ -72,11 +72,11 @@ cur_frm.cscript.refresh = function(doc) {
cur_frm.cscript.enabled = function(doc) {
if(!doc.__islocal && has_common(user_roles, ["Administrator", "System Manager"])) {
- cur_frm.toggle_display(['sb1', 'sb3'], doc.enabled);
+ cur_frm.toggle_display(['sb1', 'sb3'], doc.enabled);
cur_frm.toggle_enable('*', doc.enabled);
cur_frm.set_df_property('enabled', 'read_only', 0);
}
-
+
if(user!="Administrator") {
cur_frm.toggle_enable('email', doc.__islocal);
}
@@ -98,8 +98,8 @@ frappe.RoleEditor = Class.extend({
callback: function(r) {
me.roles = r.message;
me.show_roles();
-
- // refresh call could've already happened
+
+ // refresh call could've already happened
// when all role checkboxes weren't created
if(cur_frm.doc) {
cur_frm.roles_editor.show();
@@ -127,14 +127,14 @@ frappe.RoleEditor = Class.extend({
}
});
});
-
- for(var i in this.roles) {
+
+ $.each(this.roles, function(i, role) {
$(this.wrapper).append(repl('
', {role: this.roles[i]}));
- }
+ ', {role: role}));
+ })
$(this.wrapper).find('input[type="checkbox"]').change(function() {
cur_frm.dirty();
});
@@ -145,11 +145,11 @@ frappe.RoleEditor = Class.extend({
},
show: function() {
var me = this;
-
+
// uncheck all roles
$(this.wrapper).find('input[type="checkbox"]')
.each(function(i, checkbox) { checkbox.checked = false; });
-
+
// set user roles as checked
$.each((cur_frm.doc.user_roles || []), function(i, user_role) {
var checkbox = $(me.wrapper)
@@ -161,19 +161,19 @@ frappe.RoleEditor = Class.extend({
var opts = this.get_roles();
var existing_roles_map = {};
var existing_roles_list = [];
-
- $.each((cur_frm.doc.user_roles || []), function(i, user_role) {
+
+ $.each((cur_frm.doc.user_roles || []), function(i, user_role) {
existing_roles_map[user_role.role] = user_role.name;
existing_roles_list.push(user_role.role);
});
-
+
// remove unchecked roles
$.each(opts.unchecked_roles, function(i, role) {
if(existing_roles_list.indexOf(role)!=-1) {
frappe.model.clear_doc("UserRole", existing_roles_map[role]);
}
});
-
+
// add new roles that are checked
$.each(opts.checked_roles, function(i, role) {
if(existing_roles_list.indexOf(role)==-1) {
@@ -181,7 +181,7 @@ frappe.RoleEditor = Class.extend({
user_role.role = role;
}
});
-
+
refresh_field("user_roles");
},
get_roles: function() {
@@ -194,7 +194,7 @@ frappe.RoleEditor = Class.extend({
unchecked_roles.push($(this).attr('data-user-role'));
}
});
-
+
return {
checked_roles: checked_roles,
unchecked_roles: unchecked_roles
@@ -221,7 +221,7 @@ frappe.RoleEditor = Class.extend({
Amend | ');
for(var i in r.message) {
var perm = r.message[i];
-
+
// if permission -> icon
for(key in perm) {
if(key!='parent' && key!='permlevel') {
@@ -229,10 +229,10 @@ frappe.RoleEditor = Class.extend({
perm[key] = '';
} else {
perm[key] = '';
- }
+ }
}
}
-
+
$body.find('tbody').append(repl('\
| %(parent)s | \
%(permlevel)s | \
@@ -243,11 +243,11 @@ frappe.RoleEditor = Class.extend({
%(amend)s | \
', perm))
}
-
+
me.perm_dialog.show();
}
});
-
+
},
make_perm_dialog: function() {
this.perm_dialog = new frappe.ui.Dialog({
@@ -255,4 +255,4 @@ frappe.RoleEditor = Class.extend({
width: 500
});
}
-});
\ No newline at end of file
+});
diff --git a/frappe/core/page/desktop/desktop.css b/frappe/core/page/desktop/desktop.css
index 7c3e2ab08c..710882b873 100644
--- a/frappe/core/page/desktop/desktop.css
+++ b/frappe/core/page/desktop/desktop.css
@@ -1,5 +1,5 @@
#icon-grid {
- padding-bottom: 30px;
+ padding-bottom: 30px;
}
.case-wrapper {
@@ -12,7 +12,8 @@
.case-label {
color: white;
- padding-top: 5px;
+ font-size: 90%;
+ line-height: 1.1;
text-align: center;
text-shadow: 1px 1px 3px rgba(0, 0, 0, 1), 0px 3px 15px rgba(0, 0, 0, 0.5);
}
@@ -76,4 +77,4 @@
padding-top: 14px;
padding-bottom: 50px;
margin-bottom: -50px;
-}
\ No newline at end of file
+}
diff --git a/frappe/model/base_document.py b/frappe/model/base_document.py
index 900a649150..b3cd5154ff 100644
--- a/frappe/model/base_document.py
+++ b/frappe/model/base_document.py
@@ -150,6 +150,9 @@ class BaseDocument(object):
if doc[k] is None:
del doc[k]
+ if self.get("__islocal"):
+ doc["__islocal"] = 1
+
return doc
def get_table_field_doctype(self, fieldname):
diff --git a/frappe/public/js/frappe/dom.js b/frappe/public/js/frappe/dom.js
index b0b6127845..3d2323244b 100644
--- a/frappe/public/js/frappe/dom.js
+++ b/frappe/public/js/frappe/dom.js
@@ -1,5 +1,5 @@
// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
-// MIT License. See license.txt
+// MIT License. See license.txt
// add a new dom element
frappe.provide('frappe.dom');
@@ -33,7 +33,7 @@ frappe.dom = {
} else {
se.appendChild(document.createTextNode(txt));
}
- document.getElementsByTagName('head')[0].appendChild(se);
+ document.getElementsByTagName('head')[0].appendChild(se);
},
add: function(parent, newtag, className, cs, innerHTML, onclick) {
if(parent && parent.substr)parent = frappe.dom.by_id(parent);
@@ -46,17 +46,17 @@ frappe.dom = {
if(newtag.toLowerCase()=='img')
c.src = className
else
- c.className = className;
+ c.className = className;
}
if(cs) frappe.dom.css(c,cs);
if(innerHTML) c.innerHTML = innerHTML;
if(onclick) c.onclick = onclick;
return c;
},
- css: function(ele, s) {
- if(ele && s) {
- for(var i in s) ele.style[i]=s[i];
- };
+ css: function(ele, s) {
+ if(ele && s) {
+ $.extend(ele.style, s);
+ };
return ele;
},
freeze: function() {
@@ -72,7 +72,7 @@ frappe.dom = {
frappe.dom.freeze_count--;
if(!frappe.dom.freeze_count) {
$('#freeze').toggle(false);
- }
+ }
},
save_selection: function() {
// via http://stackoverflow.com/questions/5605401/insert-link-in-contenteditable-element
@@ -102,7 +102,7 @@ frappe.dom = {
savedSel.select();
}
}
- }
+ }
}
frappe.get_modal = function(title, body_html) {
@@ -119,7 +119,7 @@ frappe.get_modal = function(title, body_html) {
\
\
').appendTo(document.body);
-
+
return modal;
};
@@ -163,7 +163,7 @@ frappe.get_shade = function(color, factor) {
}
var get_int = function(hex) {
- return parseInt(hex,16);
+ return parseInt(hex,16);
}
return get_hex(get_int(color.substr(0,2)) + factor)
+ get_hex(get_int(color.substr(2,2)) + factor)
@@ -189,7 +189,7 @@ $.fn.gradientify = function(col) {
if(!col) col = this.css("background-color");
var col1 = frappe.get_shade(col, 1.05);
var col2 = frappe.get_shade(col, 0.95);
-
+
this.css({
"background": "-moz-linear-gradient(top, #"+col1+" 0%, #"+col2+" 99%)"
});
@@ -230,7 +230,7 @@ frappe.dom.set_box_shadow = function(ele, spread) {
$(ele).css('-moz-box-shadow', '0px 0px '+ spread +'px rgba(0,0,0,0.3);')
$(ele).css('-webkit-box-shadow', '0px 0px '+ spread +'px rgba(0,0,0,0.3);')
$(ele).css('-box-shadow', '0px 0px '+ spread +'px rgba(0,0,0,0.3);')
-
+
};
// add