Bhumi Thakkar (Open ERP) has proposed merging
lp:~openerp-dev/openerp-web/trunk-bug-890619-bth into lp:openerp-web.
Requested reviews:
OpenERP R&D Web Team (openerp-dev-web)
Related bugs:
Bug #890619 in OpenERP Web: "strange menu behaviour if left menu is closed"
https://bugs.launchpad.net/openerp-web/+bug/890619
For more details, see:
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-bug-890619-bth/+merge/83914
Hello,
fetch the height of sub menu div and stored into one variable and also stored
parent menu name of sub menu. next time when click on menu compared height of
sub menu div with previous height of sub menu div for the same parent menu. If
height is smaller then previous stored height then stored do not change value
of variable and if it is not less than change value of variable.
On mouse leave event, If height of previous sub menu which is stored into
variable is less than height of current clicked sub menu div, then hide the sub
menu div else not hide.
Thanks & Regards,
Bhumi Thakkar
--
https://code.launchpad.net/~openerp-dev/openerp-web/trunk-bug-890619-bth/+merge/83914
Your team OpenERP R&D Team is subscribed to branch
lp:~openerp-dev/openerp-web/trunk-bug-890619-bth.
=== modified file 'addons/web/controllers/main.py'
--- addons/web/controllers/main.py 2011-11-24 15:46:01 +0000
+++ addons/web/controllers/main.py 2011-11-30 10:49:24 +0000
@@ -268,7 +268,7 @@
params['db_lang'],
params['create_admin_pwd']
)
-
+
try:
return req.session.proxy("db").create(*create_attrs)
except xmlrpclib.Fault, e:
@@ -641,6 +641,7 @@
# make a tree using parent_id
menu_items_map = dict((menu_item["id"], menu_item) for menu_item in menu_items)
+
for menu_item in menu_items:
if menu_item['parent_id']:
parent = menu_item['parent_id'][0]
=== modified file 'addons/web/static/src/css/base.css'
--- addons/web/static/src/css/base.css 2011-11-23 10:05:42 +0000
+++ addons/web/static/src/css/base.css 2011-11-30 10:49:24 +0000
@@ -1544,3 +1544,12 @@
display: block;
}
+/* Dialog traceback cases */
+.expandcase {
+ background: transparent url(/web/static/src/img/expand.gif) 0 50% no-repeat;
+ margin-top:10px;
+}
+.collapsecase {
+ background: transparent url(/web/static/src/img/collapse.gif) 0 50% no-repeat;
+ margin-top:10px;
+}
\ No newline at end of file
=== modified file 'addons/web/static/src/js/chrome.js'
--- addons/web/static/src/js/chrome.js 2011-11-22 10:19:50 +0000
+++ addons/web/static/src/js/chrome.js 2011-11-30 10:49:24 +0000
@@ -167,23 +167,60 @@
});
},
on_traceback: function(error) {
+ this.servererror = new openerp.web.ServerError(error);
+ this.servererror.start();
+ }
+});
+openerp.web.ServerError = openerp.web.Widget.extend({
+ template: 'DialogTraceback',
+ init: function(parent) {
+ this._super();
+ this.parent = parent;
+ },
+ start: function() {
+ var self = this;
var dialog = new openerp.web.Dialog(this, {
- title: "OpenERP " + _.str.capitalize(error.type),
+ title: "OpenERP " + _.str.capitalize(this.parent.type),
autoOpen: true,
- width: '90%',
- height: '90%',
+ width: '80%',
+ height: '80%',
min_width: '800px',
- min_height: '600px',
+ min_height: '800px',
buttons: {
Ok: function() {
$(this).dialog("close");
}
}
}).start();
- dialog.$element.html(QWeb.render('DialogTraceback', {error: error}));
+ dialog.$element.html(QWeb.render('DialogTraceback', {error: this.parent}));
+ dialog.$element.find('#case1').click(function(){
+ dialog.$element.find('#showerror').toggle().prev().toggleClass("expandcase collapsecase");
+ });
+ dialog.$element.find('#case2').click(function(){
+
+ new openerp.web.DataSetSearch(self, 'publisher_warranty.contract').call_and_eval('status', []).then(function(res) {
+ var hasacontract = res.status == "full";
+ if(!hasacontract){
+ dialog.$element.find('#case2').find('a').attr({href:'http://www.openerp.com/support-or-publisher-warranty-contract',target: "_blank"});
+ dialog.$element.find('#case2').find('a').css('text-decoration','none');
+ }else{
+ dialog.$element.find('#fixerror').toggle().prev().toggleClass("expandcase collapsecase");
+ dialog.$element.find('#fixerror').find('#tracebacksend').click(function(){
+ new openerp.web.DataSetSearch(self, 'publisher_warranty.contract').call_and_eval('status', []).then(function(res) {
+ var hasacontract = res.status == "full";
+ if(hasacontract){
+ var issuename = $('#issuename').val();
+ var explanation = $('#explanation').val();
+ var remark = $('#remark').val();
+ new openerp.web.DataSetSearch(self, 'publisher_warranty.contract').call_and_eval('send', [self.parent.data,explanation,remark,issuename]);
+ }
+ });
+ });
+ }
+ });
+ });
}
});
-
openerp.web.Loading = openerp.web.Widget.extend(/** @lends openerp.web.Loading# */{
template: 'Loading',
/**
@@ -265,7 +302,7 @@
this.$element.find('#db-backup').click(this.do_backup);
this.$element.find('#db-restore').click(this.do_restore);
this.$element.find('#db-change-password').click(this.do_change_password);
- this.$element.find('#back-to-login').click(function() {
+ this.$element.find('#back-to-login').click(function() {
self.hide();
});
},
@@ -362,7 +399,7 @@
},
do_create: function() {
var self = this;
- self.$option_id.html(QWeb.render("Database.CreateDB", self));
+ self.$option_id.html(QWeb.render("Database.CreateDB", self));
self.$option_id.find("form[name=create_db_form]").validate({
submitHandler: function (form) {
var fields = $(form).serializeArray();
@@ -387,14 +424,13 @@
},
do_drop: function() {
var self = this;
- self.$option_id.html(QWeb.render("DropDB", self));
- self.$option_id.find("form[name=drop_db_form]").validate({
+ self.$option_id.html(QWeb.render("DropDB", self));
+ self.$option_id.find("form[name=drop_db_form]").validate({
submitHandler: function (form) {
var $form = $(form),
fields = $form.serializeArray(),
$db_list = $form.find('select[name=drop_db]'),
db = $db_list.val();
-
if (!confirm("Do you really want to delete the database: " + db + " ?")) {
return;
}
@@ -413,7 +449,7 @@
},
do_backup: function() {
var self = this;
- self.$option_id
+ self.$option_id
.html(QWeb.render("BackupDB", self))
.find("form[name=backup_db_form]").validate({
submitHandler: function (form) {
@@ -434,9 +470,8 @@
},
do_restore: function() {
var self = this;
- self.$option_id.html(QWeb.render("RestoreDB", self));
-
- self.$option_id.find("form[name=restore_db_form]").validate({
+ self.$option_id.html(QWeb.render("RestoreDB", self));
+ self.$option_id.find("form[name=restore_db_form]").validate({
submitHandler: function (form) {
$.blockUI();
$(form).ajaxSubmit({
@@ -450,7 +485,6 @@
// If empty body, everything went fine
if (!body) { return; }
-
if (body.indexOf('403 Forbidden') !== -1) {
self.display_error({
title: 'Access Denied',
@@ -472,8 +506,7 @@
},
do_change_password: function() {
var self = this;
- self.$option_id.html(QWeb.render("Change_DB_Pwd", self));
-
+ self.$option_id.html(QWeb.render("Change_DB_Pwd", self));
self.$option_id.find("form[name=change_pwd_form]").validate({
messages: {
old_pwd: "Please enter your previous password",
@@ -500,7 +533,7 @@
openerp.web.Login = openerp.web.Widget.extend(/** @lends openerp.web.Login# */{
remember_credentials: true,
-
+
template: "Login",
identifier_prefix: 'oe-app-login-',
/**
@@ -516,7 +549,6 @@
this.has_local_storage = typeof(localStorage) != 'undefined';
this.selected_db = null;
this.selected_login = null;
-
if (this.has_local_storage && this.remember_credentials) {
this.selected_db = localStorage.getItem('last_db_login_success');
this.selected_login = localStorage.getItem('last_login_login_success');
@@ -524,7 +556,6 @@
this.selected_password = localStorage.getItem('last_password_login_success');
}
}
-
var qs = jQuery.deparam(jQuery.param.querystring());
if (qs.db) {
this.selected_db = qs.db;
@@ -532,7 +563,6 @@
if (qs.login) {
this.selected_login = qs.login;
}
-
},
start: function() {
var self = this;
@@ -543,18 +573,15 @@
this.$element.find('#oe-db-config').click(function() {
self.database.show();
});
-
this.$element.find("form").submit(this.on_submit);
-
this.rpc("/web/database/get_list", {}, function(result) {
self.set_db_list(result.db_list);
- },
+ },
function(error, event) {
if (error.data.fault_code === 'AccessDenied') {
event.preventDefault();
}
});
-
},
stop: function () {
this.database.stop();
@@ -577,7 +604,6 @@
var db = $e.find("form [name=db]").val();
var login = $e.find("form input[name=login]").val();
var password = $e.find("form input[name=password]").val();
-
this.do_login(db, login, password);
},
/**
@@ -893,8 +919,22 @@
} else {
$sub_menu = this.$secondary_menu.find('.oe_secondary_menu[data-menu-parent=' + $clicked_menu.attr('data-menu') + ']');
$main_menu = $clicked_menu;
+
+ if (this.prevheight && this.prevmenu) {
+ if (this.prevmenu == $main_menu) {
+ if (this.prevheight>$sub_menu.height()) {
+ this.prevheight = this.prevheight;
+ } else {
+ this.prevheight = $sub_menu.height();
+ }
+ }else{
+ this.prevheight = $sub_menu.height();
+ }
+ }else{
+ this.prevheight = $sub_menu.height();
+ this.prevmenu = $main_menu;
+ }
}
-
sub_menu_visible = $sub_menu.is(':visible');
this.$secondary_menu.find('.oe_secondary_menu').hide();
@@ -912,6 +952,7 @@
$(this).removeClass('opened').next().hide();
}
});
+ $clicked_menu.next().find('a.leaf').focus();
$clicked_menu.toggleClass('opened').next().toggle();
} else if ($clicked_menu.is('.leaf')) {
$sub_menu.toggle(!this.folded);
@@ -944,10 +985,12 @@
$sub_menu.css(css);
$sub_menu.mouseenter(function() {
clearTimeout($sub_menu.data('timeoutId'));
- }).mouseleave(function(evt) {
+ }).mouseleave(function() {
var timeoutId = setTimeout(function() {
if (self.folded) {
- $sub_menu.hide();
+ if (self.prevheight < $sub_menu.height()) {
+ $sub_menu.hide();
+ }
}
}, self.float_timeout);
$sub_menu.data('timeoutId', timeoutId);
@@ -999,7 +1042,6 @@
this.menu = new openerp.web.Menu(this, "oe_menu", "oe_secondary_menu");
this.menu.on_action.add(this.on_menu_action);
-
this.url_internal_hashchange = false;
this.url_external_hashchange = false;
jQuery(window).bind('hashchange', this.on_url_hashchange);
=== modified file 'addons/web/static/src/js/data.js'
--- addons/web/static/src/js/data.js 2011-11-22 10:18:13 +0000
+++ addons/web/static/src/js/data.js 2011-11-30 10:49:24 +0000
@@ -300,8 +300,8 @@
* @param {Function} callback function called with read_slice result
* @returns {$.Deferred}
*/
- read_slice: function (fields, options, callback) {
- return null;
+ read_slice: function (fields, options, callback) {
+ return null;
},
/**
* Reads the current dataset record (from its index)
@@ -448,7 +448,7 @@
return this.call_and_eval('name_get', [ids, this.get_context()], null, 1, callback);
},
/**
- *
+ *
* @param {String} name name to perform a search for/on
* @param {Array} [domain=[]] filters for the objects returned, OpenERP domain
* @param {String} [operator='ilike'] matching operator to use with the provided name value
=== modified file 'addons/web/static/src/js/view_form.js'
--- addons/web/static/src/js/view_form.js 2011-11-24 13:46:27 +0000
+++ addons/web/static/src/js/view_form.js 2011-11-30 10:49:24 +0000
@@ -155,6 +155,7 @@
}
},
on_record_loaded: function(record) {
+
var self = this,
deferred_stack = $.Deferred.queue();
if (!record) {
@@ -543,6 +544,7 @@
return $.Deferred().reject();
} else {
this.datarecord.id = r.result;
+
if (!prepend_on_create) {
this.dataset.ids.push(this.datarecord.id);
this.dataset.index = this.dataset.ids.length - 1;
@@ -2084,7 +2086,7 @@
},
load_views: function() {
var self = this;
-
+
var modes = this.node.attrs.mode;
modes = !!modes ? modes.split(",") : ["tree"];
var views = [];
@@ -2109,7 +2111,7 @@
views.push(view);
});
this.views = views;
-
+
this.viewmanager = new openerp.web.ViewManager(this, this.dataset, views);
this.viewmanager.registry = openerp.web.views.clone({
list: 'openerp.web.form.One2ManyListView',
@@ -2393,7 +2395,7 @@
this.dataset.on_unlink.add_last(function(ids) {
self.on_ui_change();
});
-
+
this.is_setted.then(function() {
self.load_view();
});
=== modified file 'addons/web/static/src/js/view_list_editable.js'
--- addons/web/static/src/js/view_list_editable.js 2011-11-23 09:33:13 +0000
+++ addons/web/static/src/js/view_list_editable.js 2011-11-30 10:49:24 +0000
@@ -292,7 +292,6 @@
var edited_record = self.records.get(self.edition_id),
next_record = self.records.at(
self.records.indexOf(edited_record) + 1);
-
$.when(
self.handle_onwrite(self.edition_id),
self.cancel_pending_edition().then(function () {
@@ -406,7 +405,7 @@
});
list_form_widgets.add(key, new_path);
});
-
+
openerp.web.ListEditableFormView = openerp.web.FormView.extend({
init_view: function() {},
_render_and_insert: function () {
=== modified file 'addons/web/static/src/xml/base.xml'
--- addons/web/static/src/xml/base.xml 2011-11-24 13:46:27 +0000
+++ addons/web/static/src/xml/base.xml 2011-11-30 10:49:24 +0000
@@ -1332,9 +1332,47 @@
</table>
</t>
<t t-name="DialogTraceback">
- <pre><t t-esc="error.message"/></pre>
- <hr/>
- <pre><t t-esc="error.data.debug"/></pre>
+ <div style="width:100%">
+ <div id="case1" class="expandcase">
+ <span style="padding-left:18px;margin-top:5px;"><t t-esc="'Let me fix it'" /></span>
+ </div>
+ <div id="showerror" style="display:none;border:1px solid #999999;overflow:auto;">
+ <pre><t t-esc="error.message"/></pre>
+ <hr/>
+ <pre><t t-esc="error.data.debug"/></pre>
+ </div>
+ </div>
+ <div style="width:100%">
+ <div id="case2" class="expandcase">
+ <span style="padding-left:18px;margin-top:5px;"><a><t t-esc="'Fix it for me'" /></a></span>
+ </div>
+ <div id="fixerror" style="display:none">
+ <table style="width:80%;text-align:center;">
+ <tr>
+ <td colspan="2" style="text-align:center;"><b>Publisher Warranty Contract.</b></td>
+ </tr>
+ <tr>
+ <td colspan="2" style="text-align:center;">Your request will be sent to OpenERP and publisher warranty team will reply you shortly.</td>
+ </tr>
+ <tr>
+ <td style="text-align:right;">Summary :</td>
+ <td><input id="issuename" type="text" size="15" style="width:100%"/></td>
+ </tr>
+ <tr>
+ <td style="text-align:right;">Description :</td>
+ <td><textarea id="explanation" rows="6" style="width:100%"></textarea></td>
+ </tr>
+ <tr>
+ <td style="text-align:right;">What you did :</td>
+ <td><textarea id="remark" rows="6" style="width:100%"></textarea></td>
+ </tr>
+ <tr>
+ <td></td>
+ <td><input id="tracebacksend" type="button" value="Send To Publisher Warranty Team" /></td>
+ </tr>
+ </table>
+ </div>
+ </div>
</t>
<t t-name="SelectCreatePopup">
<div t-att-id="element_id">
_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help : https://help.launchpad.net/ListHelp