Explorar el Código

Merge branch 'latest' of github.com:webnotes/wnframework into latest

version-14
Anand Doshi hace 13 años
padre
commit
c91c276f9d
Se han modificado 13 ficheros con 379 adiciones y 346 borrados
  1. +0
    -19
      css/legacy/build.json
  2. +0
    -1
      css/legacy/user.css
  3. +9
    -0
      js/core.js
  4. +1
    -0
      js/core.min.js
  5. +1
    -9
      js/legacy/globals.js
  6. +4
    -0
      js/legacy/webpage/loaders.js
  7. +2
    -2
      js/legacy/webpage/page_header.js
  8. +5
    -0
      js/legacy/widgets/form/form_grid.js
  9. +0
    -1
      js/legacy/widgets/form/grid.js
  10. +301
    -0
      js/wn/pages/doclistview-tmp.js
  11. +31
    -299
      js/wn/pages/doclistview.js
  12. +7
    -1
      py/webnotes/__init__.py
  13. +18
    -14
      py/webnotes/model/import_docs.py

+ 0
- 19
css/legacy/build.json Ver fichero

@@ -1,19 +0,0 @@
{
"default.css": [
"body.css",
"menus.css",
"messages.css",
"forms.css",
"grid.css",
"listing.css",
"report.css",
"calendar.css",
"autosuggest.css",
"dialog.css",
"wntoolbar.css",
"tabs.css",
"bw-icons.css",
"sidebar.css",
"bootstrap-buttons.css"
]
}

+ 0
- 1
css/legacy/user.css Ver fichero

@@ -1 +0,0 @@
/* User CSS */

+ 9
- 0
js/core.js Ver fichero

@@ -1,4 +1,13 @@
// find files changed since last version

if(!console) {
var console = {
log: function(txt) {
errprint(txt);
}
}
}

wn.versions.check();

/* overload links for ajax pages */


+ 1
- 0
js/core.min.js Ver fichero

@@ -90,4 +90,5 @@ throw new SyntaxError('JSON.parse');};}}());
/*
* lib/js/core.js
*/
if(!console){var console={log:function(txt){errprint(txt);}}}
wn.versions.check();$(document).bind('ready',function(){var base=window.location.href.split('#')[0];$.each($('a[softlink!="false"]'),function(i,v){if(v.href.substr(0,base.length)==base){var path=(v.href.substr(base.length));if(path.substr(0,1)!='#'){v.href=base+'#'+path;}}});if(!wn.settings.no_history&&window.location.hash){wn.page.set(window.location.hash.substr(1));}});

+ 1
- 9
js/legacy/globals.js Ver fichero

@@ -75,12 +75,4 @@ var pscript = {};
var validated = true;
var validation_message = '';
var tinymce_loaded = null;
var cur_autosug = null;

if(!console) {
var console = {
log: function(txt) {
errprint(txt);
}
}
}
var cur_autosug = null;

+ 4
- 0
js/legacy/webpage/loaders.js Ver fichero

@@ -270,6 +270,10 @@ function loadscript(src, call_back) {

var doc_browser_page;
function loaddocbrowser(dt, label, fields) {
//wn.require('lib/js/wn/pages/doclistview.js');
//wn.pages.doclistview.show(dt);
//return;
wn.require('lib/js/legacy/webpage/docbrowser.js');
dt = get_label_doctype(dt);
if(!doc_browser_page)


+ 2
- 2
js/legacy/webpage/page_header.js Ver fichero

@@ -16,7 +16,7 @@ var def_ph_style = {
wrapper: {marginBottom:'16px', backgroundColor:'#EEE'}
,main_heading: { }
,sub_heading: { marginBottom:'8px', color:'#555', display:'none' }
,separator: { borderTop:'3px solid #444' } // show this when there is no toolbar
,separator: { borderTop:'3px solid #777' } // show this when there is no toolbar
,toolbar_area: { padding:'3px 0px', display:'none',borderBottom:'1px solid #AAA'}
}

@@ -36,7 +36,7 @@ function PageHeader(parent, main_text, sub_text) {

// close btn
$y($td(this.t1, 0, 1),{textAlign:'right', padding:'3px'});
this.close_btn = $a($td(this.t1, 0, 1), 'span', 'close', {}, '×');
this.close_btn = $a($td(this.t1, 0, 1), 'span', 'close', {}, '×');
this.close_btn.onclick = function() { nav_obj.show_last_open(); };

if(main_text) this.main_head.innerHTML = main_text;


+ 5
- 0
js/legacy/widgets/form/form_grid.js Ver fichero

@@ -99,6 +99,11 @@ _f.FormGrid.prototype.refresh = function() {
data[data.length] = docset[i].name;
}
this.set_data(data);
// if form open, refresh form
if(_f.frm_dialog && _f.frm_dialog.dialog.display && _f.frm_dialog.cur_frm) {
_f.frm_dialog.cur_frm.refresh();
}
}

_f.FormGrid.prototype.set_unsaved = function() {


+ 0
- 1
js/legacy/widgets/form/grid.js Ver fichero

@@ -443,5 +443,4 @@ _f.Grid.prototype.refresh_row = function(ridx, docname) {
for(var cidx=0; cidx<row.cells.length; cidx++) {
this.set_cell_value(row.cells[cidx]);
}

}

+ 301
- 0
js/wn/pages/doclistview-tmp.js Ver fichero

@@ -0,0 +1,301 @@
wn.provide('wn.body');
wn.provide('wn.list_views');

wn.body.ListPage = function(doctype) {
wn.require('lib/css/body/list.css');
wn.require('lib/js/wn/body/tags.js');
wn.require('lib/js/wn/utils/datetime.js');

var me = this;
$.extend(this, {
make: function() {
// page
me.label = 'List/' + doctype;
wn.require('lib/js/wn/body/page.js');
me.page = new wn.body.Page(me.label, 1);
me.page.update_history = function() {
window.location.hash = 'List/' + encodeURIComponent(doctype);
}
var $w = $(me.page.wrapper);
$w.append("<div></div><div></div>")
me.page_head =
new wn.body.PageHead($w.find('> div:eq(0)').get(0),
wn.model.label_of(doctype) + ' List');
me.list =
new wn.body.List(me, $w.find('> div:eq(1)').get(0), doctype);
me.make_sidebar();
},
make_sidebar: function() {
me.page.sidebar.style.marginTop = '13px';
if(wn.profile.can_read.indexOf(doctype)!=-1) {
new wn.ui.Button({
parent: me.page.sidebar,
css_class: 'blue-pill',
label: '+ New ' + wn.model.label_of(doctype),
style: {fontSize:'11px', margin: '13px', marginTop:'0px'},
onclick: function() {
wn.open('Form', doctype);
}
})
}
// sidebar
wn.require('lib/js/wn/body/page_sidebar.js')
me.sidebar = new wn.body.page_sidebar.Sidebar(me.page.sidebar, {
sections: [
{
title: 'Top Tags',
render: function(body) {
new wn.body.tags.TagCloud(body, doctype, function(tag) {
me.set_tag_filter(tag) });
}
}
]
});
},
// add a filter when a tag is clicked
set_tag_filter: function(tag) {
me.list.flist.set_filter_display();
var l = tag.label;
if(tag.fieldname=='_user_tags') l = '%' + tag.label
me.list.flist.add_filter(tag.fieldname, 'like', l);
me.list.refresh();
}
});
me.make();
}


// args (list name)
wn.body.List = function(list_page, parent, doctype) {
var me = this;
me.start = 0;
me.page_len = 20;
$.extend(this, {
setup: function() {
wn.require('lib/js/wn/model/list.js');
// doctype for rendering
var dt = wn.model.get_doctype(doctype);

me.preloaded = wn.list.has(doctype);

// get the list
var res = wn.list.get(doctype, null, me.start, me.page_len, 1);
me.list = res.message || [];
if(res.list_view_js) {
eval('me.list_view_obj=' + res.list_view_js);
}
},
make: function() {
// body
me.make_body();
me.make_filters();
me.setup();
me.render(me.list);
if(me.preloaded)
me.reload();
},
make_body: function() {
// new / refresh area
me.toolbar_area = wn.dom.add(parent, 'div');
// list area
me.list_area = wn.dom.add(parent, 'div');
// more btn
me.more_btn_area = wn.dom.add(parent, 'div', 'more_btn_area');
me.nothing_more = wn.dom.add(parent, 'div', 'nothing_more round');
},
make_filters: function() {
me.filter_area = wn.dom.add(me.toolbar_area, 'div');
wn.require('lib/js/wn/body/filter.js');
me.flist = new wn.body.FilterList(me, me.filter_area, doctype);
},
reload: function() {
list_page.page_head.set_status('Checking for updates...');
wn.list.diff(doctype, (me.list.length ? me.list[0].modified : null),
me.render_reload);
},
render_reload: function(res) {
me.list = res.new_list;
me.list_area.innerHTML = ''

if(res.list_view_js) {
eval('me.list_view_obj=' + res.list_view_js);
}

me.render(me.list);
// update heading
list_page.page_head.set_status('');
},
refresh: function() {
// get the list
me.start = 0;
me.list = wn.list.get(doctype,
me.flist.get_filters(),
me.start, me.page_len);
me.render(me.list);
},
extend: function() {
me.start += me.page_len
var add = wn.list.get(doctype, me.flist.get_filters(), me.start, me.page_len);
me.list = me.list.concat(add);
me.render(add);
},
// render the list
render: function(list) {
if(me.start==0)
me.list_area.innerHTML = '';

$.each(list, function(i, d) {
d.doctype = doctype;
if(!d.__deleted)
new wn.body.ListItem(me, me.list_area, d);
});

// show filters, they may be hidden later
wn.dom.show(me.filter_area);

if(list.length >= me.page_len) {
me.show_more_btn();
} else {
me.hide_more_btn();
}
},
show_more_btn: function() {
if(!me.more_btn) {
me.more_btn = new wn.ui.Button({
parent: me.more_btn_area,
label: 'Show more results',
onclick: function() {
me.extend();
},
style: {
width: '200px',
fontSize:'14px'
}
})
}
wn.dom.show(me.more_btn_area);
wn.dom.hide(me.nothing_more);
},
hide_more_btn: function() {
wn.dom.hide(me.more_btn_area);
wn.dom.show(me.nothing_more);
if(me.list.length) {
me.nothing_more.innerHTML = 'Thats it';
} else {
me.nothing_more.innerHTML = 'No matches :( Try again.';
if(!me.flist.get_filters().length) {
wn.dom.hide(me.filter_area);

// new link
if(wn.profile.can_create.indexOf(doctype)!=-1) {
$(me.nothing_more).html('<div class="new_link">\
<span class="link_type" onclick="wn.open(\'Form\', \'%(doctype)s\')">\
Click here to create your first %(doctype_label)s\
</span>\
</div>'.repl({
doctype:doctype,
doctype_label: wn.model.label_of(doctype)
}));
}
}
}
}
});
me.make();
}

// title (link), owner, last update, delete / archive, tags
wn.body.ListItem = function(list, parent, args) {
var me = this;
$.extend(this, {
make: function() {
me.wrapper = wn.dom.add(parent, 'div', 'list_item');
me.wrapper.innerHTML = '<div>\
<span class="pre_subject"></span>\
<span class="link_type subject">%(label)s</span>\
<span class="post_subject"></span>\
<span class="wn-icon ic-round_minus delete_btn"></span>\
<span class="user_info">%(owner)s %(timestamp)s</span>\
</div>\
<div class="list_view"></div>'.repl({
label: args.label || args.name,
owner: args.owner,
timestamp: wn.utils.datetime.when(args.modified)
});
$w = $(me.wrapper);
// hide delete if no perms
if(!(wn.model.get_doctype(args.doctype).get_perm()[0] || {}).cancel) {
$w.find('.delete_btn').css('display','none');
} else {
$w.find('.delete_btn').click(function() {
wn.require('lib/js/wn/ui/confirm.js');
if(wn.ui.confirm('You sure you want to delete?', function() {
wn.http.post({
args: {
cmd:'webnotes.widgets.menus.delete_doc',
doctype:args.doctype,
name:args.name
}
});
$w.slideUp();
}));
})
}
// open
$w.find('.subject')
.bind('click', function() {
wn.open('Form', args.doctype, args.name);
});
// render body
me.render_body($w);
},
render_body: function($w) {
var lv = list.list_view_obj
if(lv) {
if(lv.subject) {
$w.find('.subject').html(lv.subject.repl(args));
}
if(lv.render) {
lv.render($w, args);
}
}
},

render_tag: function() {

}

});
me.make();
}

+ 31
- 299
js/wn/pages/doclistview.js Ver fichero

@@ -1,301 +1,33 @@
wn.provide('wn.body');
wn.provide('wn.list_views');

wn.body.ListPage = function(doctype) {
wn.require('lib/css/body/list.css');
wn.require('lib/js/wn/body/tags.js');
wn.require('lib/js/wn/utils/datetime.js');

var me = this;
$.extend(this, {
make: function() {
// page
me.label = 'List/' + doctype;
wn.require('lib/js/wn/body/page.js');
me.page = new wn.body.Page(me.label, 1);
me.page.update_history = function() {
window.location.hash = 'List/' + encodeURIComponent(doctype);
}
var $w = $(me.page.wrapper);
$w.append("<div></div><div></div>")
me.page_head =
new wn.body.PageHead($w.find('> div:eq(0)').get(0),
wn.model.label_of(doctype) + ' List');
me.list =
new wn.body.List(me, $w.find('> div:eq(1)').get(0), doctype);
me.make_sidebar();
},
make_sidebar: function() {
me.page.sidebar.style.marginTop = '13px';
if(wn.profile.can_read.indexOf(doctype)!=-1) {
new wn.ui.Button({
parent: me.page.sidebar,
css_class: 'blue-pill',
label: '+ New ' + wn.model.label_of(doctype),
style: {fontSize:'11px', margin: '13px', marginTop:'0px'},
onclick: function() {
wn.open('Form', doctype);
}
})
}
// sidebar
wn.require('lib/js/wn/body/page_sidebar.js')
me.sidebar = new wn.body.page_sidebar.Sidebar(me.page.sidebar, {
sections: [
{
title: 'Top Tags',
render: function(body) {
new wn.body.tags.TagCloud(body, doctype, function(tag) {
me.set_tag_filter(tag) });
}
}
]
});
},
// add a filter when a tag is clicked
set_tag_filter: function(tag) {
me.list.flist.set_filter_display();
var l = tag.label;
if(tag.fieldname=='_user_tags') l = '%' + tag.label
me.list.flist.add_filter(tag.fieldname, 'like', l);
me.list.refresh();
}
});
me.make();
}


// args (list name)
wn.body.List = function(list_page, parent, doctype) {
var me = this;
me.start = 0;
me.page_len = 20;
$.extend(this, {
setup: function() {
wn.require('lib/js/wn/model/list.js');
// doctype for rendering
var dt = wn.model.get_doctype(doctype);

me.preloaded = wn.list.has(doctype);

// get the list
var res = wn.list.get(doctype, null, me.start, me.page_len, 1);
me.list = res.message || [];
if(res.list_view_js) {
eval('me.list_view_obj=' + res.list_view_js);
}
},
make: function() {
// body
me.make_body();
me.make_filters();
me.setup();
me.render(me.list);
if(me.preloaded)
me.reload();
},
make_body: function() {
// new / refresh area
me.toolbar_area = wn.dom.add(parent, 'div');
// list area
me.list_area = wn.dom.add(parent, 'div');
// more btn
me.more_btn_area = wn.dom.add(parent, 'div', 'more_btn_area');
me.nothing_more = wn.dom.add(parent, 'div', 'nothing_more round');
},
make_filters: function() {
me.filter_area = wn.dom.add(me.toolbar_area, 'div');
wn.require('lib/js/wn/body/filter.js');
me.flist = new wn.body.FilterList(me, me.filter_area, doctype);
},
reload: function() {
list_page.page_head.set_status('Checking for updates...');
wn.list.diff(doctype, (me.list.length ? me.list[0].modified : null),
me.render_reload);
},
render_reload: function(res) {
me.list = res.new_list;
me.list_area.innerHTML = ''

if(res.list_view_js) {
eval('me.list_view_obj=' + res.list_view_js);
}

me.render(me.list);
// update heading
list_page.page_head.set_status('');
},
refresh: function() {
// get the list
me.start = 0;
me.list = wn.list.get(doctype,
me.flist.get_filters(),
me.start, me.page_len);
me.render(me.list);
},
extend: function() {
me.start += me.page_len
var add = wn.list.get(doctype, me.flist.get_filters(), me.start, me.page_len);
me.list = me.list.concat(add);
me.render(add);
},
// render the list
render: function(list) {
if(me.start==0)
me.list_area.innerHTML = '';

$.each(list, function(i, d) {
d.doctype = doctype;
if(!d.__deleted)
new wn.body.ListItem(me, me.list_area, d);
});

// show filters, they may be hidden later
wn.dom.show(me.filter_area);

if(list.length >= me.page_len) {
me.show_more_btn();
} else {
me.hide_more_btn();
}
},
show_more_btn: function() {
if(!me.more_btn) {
me.more_btn = new wn.ui.Button({
parent: me.more_btn_area,
label: 'Show more results',
onclick: function() {
me.extend();
},
style: {
width: '200px',
fontSize:'14px'
}
})
}
wn.dom.show(me.more_btn_area);
wn.dom.hide(me.nothing_more);
},
hide_more_btn: function() {
wn.dom.hide(me.more_btn_area);
wn.dom.show(me.nothing_more);
if(me.list.length) {
me.nothing_more.innerHTML = 'Thats it';
} else {
me.nothing_more.innerHTML = 'No matches :( Try again.';
if(!me.flist.get_filters().length) {
wn.dom.hide(me.filter_area);

// new link
if(wn.profile.can_create.indexOf(doctype)!=-1) {
$(me.nothing_more).html('<div class="new_link">\
<span class="link_type" onclick="wn.open(\'Form\', \'%(doctype)s\')">\
Click here to create your first %(doctype_label)s\
</span>\
</div>'.repl({
doctype:doctype,
doctype_label: wn.model.label_of(doctype)
}));
}
}
}
}
});
me.make();
wn.provide('wn.pages.doclistview');

wn.pages.doclistview.pages = {};
wn.pages.doclistview.show = function(doctype) {
var pagename = doctype + ' List';
if(!wn.pages.doclistview.pages[pagename]) {
var page = page_body.add_page(pagename);
page.doclistview = new wn.pages.DocListView(doctype, page);
wn.pages.doclistview.pages[pagename] = page;
}
page_body.change_to(pagename);
}

// title (link), owner, last update, delete / archive, tags
wn.body.ListItem = function(list, parent, args) {
var me = this;
$.extend(this, {
make: function() {
me.wrapper = wn.dom.add(parent, 'div', 'list_item');
me.wrapper.innerHTML = '<div>\
<span class="pre_subject"></span>\
<span class="link_type subject">%(label)s</span>\
<span class="post_subject"></span>\
<span class="wn-icon ic-round_minus delete_btn"></span>\
<span class="user_info">%(owner)s %(timestamp)s</span>\
</div>\
<div class="list_view"></div>'.repl({
label: args.label || args.name,
owner: args.owner,
timestamp: wn.utils.datetime.when(args.modified)
});
$w = $(me.wrapper);
// hide delete if no perms
if(!(wn.model.get_doctype(args.doctype).get_perm()[0] || {}).cancel) {
$w.find('.delete_btn').css('display','none');
} else {
$w.find('.delete_btn').click(function() {
wn.require('lib/js/wn/ui/confirm.js');
if(wn.ui.confirm('You sure you want to delete?', function() {
wn.http.post({
args: {
cmd:'webnotes.widgets.menus.delete_doc',
doctype:args.doctype,
name:args.name
}
});
$w.slideUp();
}));
})
}
// open
$w.find('.subject')
.bind('click', function() {
wn.open('Form', args.doctype, args.name);
});
// render body
me.render_body($w);
},
render_body: function($w) {
var lv = list.list_view_obj
if(lv) {
if(lv.subject) {
$w.find('.subject').html(lv.subject.repl(args));
}
if(lv.render) {
lv.render($w, args);
}
}
},

render_tag: function() {

}

});
me.make();
}
wn.pages.DocListView = Class.extend({
init: function(doctype, page) {
this.doctype = doctype;
this.wrapper = page;
this.label = get_doctype_label(doctype);
this.label = (this.label.toLowerCase().substr(-4) == 'list') ?
this.label : (this.label + ' List')
this.make();
},
make: function() {
$(this.wrapper).html('<div class="layout_wrapper">\
<div class="header"></div>\
<div class="filters">[filters]</div>\
<div class="body">[body]</div>\
</div>');
new PageHeader($(this.wrapper).find('.header').get(0), this.label)
}
})

+ 7
- 1
py/webnotes/__init__.py Ver fichero

@@ -36,7 +36,13 @@ class ValidationError(Exception):
class AuthenticationError(Exception):
pass

class UnknownDomainError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
def getTraceback():
import utils
return utils.getTraceback()


+ 18
- 14
py/webnotes/model/import_docs.py Ver fichero

@@ -90,12 +90,12 @@ class CSVImport:

def validate_fields(self, lb_list):
self.msg.append('<p><b>Checking fieldnames for %s</b></p>' % self.dt_list[0])
if len(self.dt_list) > 1 and self.overwrite:
self.msg.append('<div style="color:RED"> Error: Overwrite is not possible for Document %s </div>' % self.dt_list[0])
self.validate_success = 0
return
#if len(self.dt_list) > 1 and self.overwrite:
# self.msg.append('<div style="color:RED"> Error: Overwrite is not possible for Document %s </div>' % self.dt_list[0])
# self.validate_success = 0
# return
elif self.overwrite and 'Name' != lb_list[0]:
if self.overwrite and len(self.dt_list) == 1 and 'Name' != lb_list[0]:
self.msg.append('<div style="color:RED"> Error : At Row 4 and Column 1: To Overwrite fieldname should be Name </div>')
self.validate_success = 0
return
@@ -107,7 +107,7 @@ class CSVImport:
lb_list.pop(lb_list.index(self.dt_list[1]))

dtd = sql("select autoname from `tabDocType` where name = '%s' " % self.dt_list[0])[0][0]
if self.prompt_autoname_flag or self.overwrite:
if (self.prompt_autoname_flag or self.overwrite) and len(self.dt_list) == 1:
self.fields.append('name')
res.append('Name')
lb_list.pop(lb_list.index('Name'))
@@ -243,7 +243,12 @@ class CSVImport:
self.msg.append('<p><b>Checking Data for %s</b></p>' % self.dt_list[0])
date_list, link_list, select_list, reqd_list = self.get_field_type_list()


# Delete all data of child tables before over-writing
if len(self.dt_list) > 1 and self.overwrite:
webnotes.conn.sql("delete from `tab%s`" % self.dt_list[0])
self.msg.append('<div style="color: ORANGE">Deleted all data from %s before re-importing</div>' % self.dt_list[0])
# load data
row = 5
for d in self.data:
@@ -304,13 +309,12 @@ class CSVImport:
self.msg.append('<div style="color: ORANGE">Row %s => Over-written: %s</div>' % (row, cur_doc.name))
else:
self.msg.append('<div style="color: ORANGE">Row %s => Ignored: %s</div>' % (row, cur_doc.name))
else:
if cur_doc.parent and webnotes.conn.exists(cur_doc.parenttype, cur_doc.parent) or not cur_doc.parent:
cur_doc.save(1)
obj = webnotes.model.code.get_obj(cur_doc.parent and cur_doc.parenttype or cur_doc.doctype, cur_doc.parent or cur_doc.name, with_children = 1)
self.msg.append('<div style="color: GREEN">Row %s => Created: %s</div>' % (row, cur_doc.name))
else:
self.msg.append('<div style="color: RED">Row %s => Invalid %s : %s</div>' % (row, cur_doc.parenttype, cur_doc.parent))
elif cur_doc.parent and webnotes.conn.exists(cur_doc.parenttype, cur_doc.parent) or not cur_doc.parent:
cur_doc.save(1)
obj = webnotes.model.code.get_obj(cur_doc.parent and cur_doc.parenttype or cur_doc.doctype, cur_doc.parent or cur_doc.name, with_children = 1)
self.msg.append('<div style="color: GREEN">Row %s => Created: %s</div>' % (row, cur_doc.name))
else:
self.msg.append('<div style="color: RED">Row %s => Invalid %s : %s</div>' % (row, cur_doc.parenttype, cur_doc.parent))
except Exception:
self.msg.append('<div style="color: RED"> Validation: %s</div>' % str(webnotes.utils.getTraceback()))
try:


Cargando…
Cancelar
Guardar