From 09efcee290e2ec4efcbbe3a4092ef8eb48546ed7 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 20 Feb 2012 12:35:31 +0530 Subject: [PATCH] form bugfix and otehr minor fixes --- css/legacy/build.json | 19 -- css/legacy/user.css | 1 - js/core.js | 9 + js/core.min.js | 1 + js/legacy/globals.js | 10 +- js/legacy/webpage/loaders.js | 4 + js/legacy/webpage/page_header.js | 4 +- js/legacy/widgets/form/form_grid.js | 5 + js/legacy/widgets/form/grid.js | 1 - js/wn/pages/doclistview-tmp.js | 301 ++++++++++++++++++++++++++ js/wn/pages/doclistview.js | 324 +++------------------------- py/webnotes/__init__.py | 8 +- 12 files changed, 358 insertions(+), 329 deletions(-) delete mode 100644 css/legacy/build.json delete mode 100644 css/legacy/user.css create mode 100644 js/wn/pages/doclistview-tmp.js diff --git a/css/legacy/build.json b/css/legacy/build.json deleted file mode 100644 index 090a20f42d..0000000000 --- a/css/legacy/build.json +++ /dev/null @@ -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" - ] -} \ No newline at end of file diff --git a/css/legacy/user.css b/css/legacy/user.css deleted file mode 100644 index 17d7e1088b..0000000000 --- a/css/legacy/user.css +++ /dev/null @@ -1 +0,0 @@ -/* User CSS */ \ No newline at end of file diff --git a/js/core.js b/js/core.js index d4114558b3..94f827b0ce 100644 --- a/js/core.js +++ b/js/core.js @@ -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 */ diff --git a/js/core.min.js b/js/core.min.js index b57a0b4d9f..3077287c38 100644 --- a/js/core.min.js +++ b/js/core.min.js @@ -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));}}); \ No newline at end of file diff --git a/js/legacy/globals.js b/js/legacy/globals.js index e01a2b6a75..a3f48d11e0 100644 --- a/js/legacy/globals.js +++ b/js/legacy/globals.js @@ -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; \ No newline at end of file diff --git a/js/legacy/webpage/loaders.js b/js/legacy/webpage/loaders.js index 68b67b48d8..fd250dce2c 100644 --- a/js/legacy/webpage/loaders.js +++ b/js/legacy/webpage/loaders.js @@ -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) diff --git a/js/legacy/webpage/page_header.js b/js/legacy/webpage/page_header.js index 9dfce98068..0cb173d41e 100644 --- a/js/legacy/webpage/page_header.js +++ b/js/legacy/webpage/page_header.js @@ -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; diff --git a/js/legacy/widgets/form/form_grid.js b/js/legacy/widgets/form/form_grid.js index 142815ec7c..8f39007727 100644 --- a/js/legacy/widgets/form/form_grid.js +++ b/js/legacy/widgets/form/form_grid.js @@ -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() { diff --git a/js/legacy/widgets/form/grid.js b/js/legacy/widgets/form/grid.js index 18ac4924a8..4cb279b4dc 100644 --- a/js/legacy/widgets/form/grid.js +++ b/js/legacy/widgets/form/grid.js @@ -443,5 +443,4 @@ _f.Grid.prototype.refresh_row = function(ridx, docname) { for(var cidx=0; cidx
") + 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(''.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 = '
\ + \ + %(label)s\ + \ + \ + \ +
\ +
'.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(); +} \ No newline at end of file diff --git a/js/wn/pages/doclistview.js b/js/wn/pages/doclistview.js index b66af28b94..943dc88347 100644 --- a/js/wn/pages/doclistview.js +++ b/js/wn/pages/doclistview.js @@ -1,301 +1,33 @@ -wn.provide('wn.body'); -wn.provide('wn.list_views'); +wn.provide('wn.pages.doclistview'); -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("
") - 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(); +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); } - -// 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); - } - }, +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') - make: function() { - // body - me.make_body(); - me.make_filters(); - me.setup(); - me.render(me.list); - if(me.preloaded) - me.reload(); - }, + this.make(); + }, + make: function() { + $(this.wrapper).html('
\ +
\ +
[filters]
\ +
[body]
\ +
'); - 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(''.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 = '
\ - \ - %(label)s\ - \ - \ - \ -
\ -
'.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(); -} \ No newline at end of file + new PageHeader($(this.wrapper).find('.header').get(0), this.label) + } +}) diff --git a/py/webnotes/__init__.py b/py/webnotes/__init__.py index b6015c5fd8..91d172915a 100644 --- a/py/webnotes/__init__.py +++ b/py/webnotes/__init__.py @@ -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()