From 9ec99940e73d3474d0fd86f9e12072ea97538440 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Wed, 8 Apr 2015 08:46:02 +0200 Subject: [PATCH 1/6] [ADD] backport web_widget_color fixes #51 --- web_widget_color/__init__.py | 25 + web_widget_color/__openerp__.py | 140 +++ web_widget_color/static/lib/jscolor/arrow.gif | Bin 0 -> 66 bytes web_widget_color/static/lib/jscolor/cross.gif | Bin 0 -> 83 bytes web_widget_color/static/lib/jscolor/demo.html | 12 + web_widget_color/static/lib/jscolor/hs.png | Bin 0 -> 2684 bytes web_widget_color/static/lib/jscolor/hv.png | Bin 0 -> 2865 bytes .../static/lib/jscolor/jscolor.js | 1010 +++++++++++++++++ web_widget_color/static/src/css/widget.css | 23 + web_widget_color/static/src/img/form_view.png | Bin 0 -> 1826 bytes web_widget_color/static/src/img/icon.png | Bin 0 -> 3454 bytes web_widget_color/static/src/img/list_view.png | Bin 0 -> 13773 bytes web_widget_color/static/src/img/picker.png | Bin 0 -> 5998 bytes web_widget_color/static/src/js/widget.js | 59 + web_widget_color/static/src/xml/widget.xml | 24 + 15 files changed, 1293 insertions(+) create mode 100644 web_widget_color/__init__.py create mode 100644 web_widget_color/__openerp__.py create mode 100644 web_widget_color/static/lib/jscolor/arrow.gif create mode 100644 web_widget_color/static/lib/jscolor/cross.gif create mode 100644 web_widget_color/static/lib/jscolor/demo.html create mode 100644 web_widget_color/static/lib/jscolor/hs.png create mode 100644 web_widget_color/static/lib/jscolor/hv.png create mode 100644 web_widget_color/static/lib/jscolor/jscolor.js create mode 100644 web_widget_color/static/src/css/widget.css create mode 100644 web_widget_color/static/src/img/form_view.png create mode 100644 web_widget_color/static/src/img/icon.png create mode 100644 web_widget_color/static/src/img/list_view.png create mode 100644 web_widget_color/static/src/img/picker.png create mode 100644 web_widget_color/static/src/js/widget.js create mode 100644 web_widget_color/static/src/xml/widget.xml diff --git a/web_widget_color/__init__.py b/web_widget_color/__init__.py new file mode 100644 index 00000000..c18661e9 --- /dev/null +++ b/web_widget_color/__init__.py @@ -0,0 +1,25 @@ +# -*- encoding: utf-8 -*- +############################################################################ +# +# Odoo, Open Source Web Color +# Copyright (C) 2012 Savoir-faire Linux (). +# Copyright (C) 2014 Anybox +# Copyright (C) 2015 Taktik SA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# @author Étienne Beaudry Auger +# @author Adil Houmadi +# +############################################################################## diff --git a/web_widget_color/__openerp__.py b/web_widget_color/__openerp__.py new file mode 100644 index 00000000..4d00eb83 --- /dev/null +++ b/web_widget_color/__openerp__.py @@ -0,0 +1,140 @@ +# -*- encoding: utf-8 -*- +############################################################################ +# +# Odoo, Open Source Web Widget Color +# Copyright (C) 2012 Savoir-faire Linux (). +# Copyright (C) 2014 Anybox +# Copyright (C) 2015 Taktik SA +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# @author Étienne Beaudry Auger +# @author Adil Houmadi +# +############################################################################## +{ + 'name': "Web Widget Color", + 'category': "web", + 'version': "1.0", + 'depends': ['base', 'web'], + 'description': ''' +Color widget for Odoo web client +================================ + +This module aims to add a color picker to Odoo. + +It's a `jsColor `_ lib integration. + + +Features +======== + +* The picker allow the user to quickly select a color on edit mode + + |picker| + + .. note:: + + Notice how html code and the background color is updating when selecting + a color. + + +* Display the color on form view when you are not editing it + + |formview| + +* Display the color on list view to quickly find what's wrong! + + |listview| + + +Requirements +============ + +This module has been ported to 8.0 + + +Usage +===== + +You need to declare a char field of at least size 7:: + + _columns = { + 'color': fields.char( + u"Couleur", + help=u"Toutes couleur valid css, exemple blue ou #f57900" + ), + } + + OR + + color = fields.Char( + string="Color", + help="Choose your color" + ) + + +In the view declaration, put widget='color' attribute in the field tag:: + + ... + + + ... + + + ... + + + ... + +.. |picker| image:: /web_widget_color/static/src/img/picker.png +.. |formview| image:: /web_widget_color/static/src/img/form_view.png +.. |listview| image:: /web_widget_color/static/src/img/list_view.png + +Credits +======= + +Contributors +------------ + +* Adil Houmadi + +Maintainer +---------- + +.. image:: http://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: http://odoo-community.org + +This module is maintained by the OCA. + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +To contribute to this module, please visit http://odoo-community.org.''', + 'qweb': [ + 'static/src/xml/widget.xml', + ], + 'css': [ + 'static/src/css/widget.css', + ], + 'js': [ + 'static/lib/jscolor/jscolor.js', + 'static/src/js/widget.js', + ], + 'auto_install': False, + 'installable': True, + 'web_preload': True, +} diff --git a/web_widget_color/static/lib/jscolor/arrow.gif b/web_widget_color/static/lib/jscolor/arrow.gif new file mode 100644 index 0000000000000000000000000000000000000000..246478a864f812d93d4cd0e0d0ad1c8e2d09c825 GIT binary patch literal 66 zcmZ?wbhEHbWM|-JSjfZx1poj4Utv=LM2bII7`Ygj7<53QAbAERVV@R>f}L*~a`L;Z PKCZl?^}@uHk--`OML81Y literal 0 HcmV?d00001 diff --git a/web_widget_color/static/lib/jscolor/cross.gif b/web_widget_color/static/lib/jscolor/cross.gif new file mode 100644 index 0000000000000000000000000000000000000000..0ee9c7ac517bee40b78aea03afa809631f0b69fa GIT binary patch literal 83 zcmZ?wbhEHb + + jscolor demo + + + + + + Click here: + + + diff --git a/web_widget_color/static/lib/jscolor/hs.png b/web_widget_color/static/lib/jscolor/hs.png new file mode 100644 index 0000000000000000000000000000000000000000..3d94486cedaf7111d010fdaf2cefad45fd1f878b GIT binary patch literal 2684 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 YzFqsNg>|5V=vOIWZ|#VBZRvIQe;Bk#LI3~& literal 0 HcmV?d00001 diff --git a/web_widget_color/static/lib/jscolor/hv.png b/web_widget_color/static/lib/jscolor/hv.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5e01f8bcecc4cf835e8eeeaa43ef2c06789022 GIT binary patch literal 2865 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 E0LKozl>h($ literal 0 HcmV?d00001 diff --git a/web_widget_color/static/lib/jscolor/jscolor.js b/web_widget_color/static/lib/jscolor/jscolor.js new file mode 100644 index 00000000..47c89616 --- /dev/null +++ b/web_widget_color/static/lib/jscolor/jscolor.js @@ -0,0 +1,1010 @@ +/** + * jscolor, JavaScript Color Picker + * + * @version 1.4.4 + * @license GNU Lesser General Public License, http://www.gnu.org/copyleft/lesser.html + * @author Jan Odvarko, http://odvarko.cz + * @created 2008-06-15 + * @updated 2014-12-09 + * @link http://jscolor.com + */ + + +var jscolor = { + + + dir : '', // location of jscolor directory (leave empty to autodetect) + bindClass : 'color', // class name + binding : true, // automatic binding via + preloading : true, // use image preloading? + + + install : function() { + jscolor.addEvent(window, 'load', jscolor.init); + }, + + + init : function() { + if(jscolor.binding) { + jscolor.bind(); + } + if(jscolor.preloading) { + jscolor.preload(); + } + }, + + + getDir : function() { + if(!jscolor.dir) { + var detected = jscolor.detectDir(); + jscolor.dir = detected!==false ? detected : 'jscolor/'; + } + return jscolor.dir; + }, + + + detectDir : function() { + var base = location.href; + + var e = document.getElementsByTagName('base'); + for(var i=0; i vs[a] ? + (-vp[a]+tp[a]+ts[a]/2 > vs[a]/2 && tp[a]+ts[a]-ps[a] >= 0 ? tp[a]+ts[a]-ps[a] : tp[a]) : + tp[a], + -vp[b]+tp[b]+ts[b]+ps[b]-l+l*c > vs[b] ? + (-vp[b]+tp[b]+ts[b]/2 > vs[b]/2 && tp[b]+ts[b]-l-l*c >= 0 ? tp[b]+ts[b]-l-l*c : tp[b]+ts[b]-l+l*c) : + (tp[b]+ts[b]-l+l*c >= 0 ? tp[b]+ts[b]-l+l*c : tp[b]+ts[b]-l-l*c) + ]; + } + drawPicker(pp[a], pp[b]); + } + }; + + + this.importColor = function() { + if(!valueElement) { + this.exportColor(); + } else { + if(!this.adjust) { + if(!this.fromString(valueElement.value, leaveValue)) { + styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage; + styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor; + styleElement.style.color = styleElement.jscStyle.color; + this.exportColor(leaveValue | leaveStyle); + } + } else if(!this.required && /^\s*$/.test(valueElement.value)) { + valueElement.value = ''; + styleElement.style.backgroundImage = styleElement.jscStyle.backgroundImage; + styleElement.style.backgroundColor = styleElement.jscStyle.backgroundColor; + styleElement.style.color = styleElement.jscStyle.color; + this.exportColor(leaveValue | leaveStyle); + + } else if(this.fromString(valueElement.value)) { + // OK + } else { + this.exportColor(); + } + } + }; + + + this.exportColor = function(flags) { + if(!(flags & leaveValue) && valueElement) { + var value = this.toString(); + if(this.caps) { value = value.toUpperCase(); } + if(this.hash) { value = '#'+value; } + valueElement.value = value; + } + if(!(flags & leaveStyle) && styleElement) { + styleElement.style.backgroundImage = "none"; + styleElement.style.backgroundColor = + '#'+this.toString(); + styleElement.style.color = + 0.213 * this.rgb[0] + + 0.715 * this.rgb[1] + + 0.072 * this.rgb[2] + < 0.5 ? '#FFF' : '#000'; + } + if(!(flags & leavePad) && isPickerOwner()) { + redrawPad(); + } + if(!(flags & leaveSld) && isPickerOwner()) { + redrawSld(); + } + }; + + + this.fromHSV = function(h, s, v, flags) { // null = don't change + if(h !== null) { h = Math.max(0.0, this.minH, Math.min(6.0, this.maxH, h)); } + if(s !== null) { s = Math.max(0.0, this.minS, Math.min(1.0, this.maxS, s)); } + if(v !== null) { v = Math.max(0.0, this.minV, Math.min(1.0, this.maxV, v)); } + + this.rgb = HSV_RGB( + h===null ? this.hsv[0] : (this.hsv[0]=h), + s===null ? this.hsv[1] : (this.hsv[1]=s), + v===null ? this.hsv[2] : (this.hsv[2]=v) + ); + + this.exportColor(flags); + }; + + + this.fromRGB = function(r, g, b, flags) { // null = don't change + if(r !== null) { r = Math.max(0.0, Math.min(1.0, r)); } + if(g !== null) { g = Math.max(0.0, Math.min(1.0, g)); } + if(b !== null) { b = Math.max(0.0, Math.min(1.0, b)); } + + var hsv = RGB_HSV( + r===null ? this.rgb[0] : r, + g===null ? this.rgb[1] : g, + b===null ? this.rgb[2] : b + ); + if(hsv[0] !== null) { + this.hsv[0] = Math.max(0.0, this.minH, Math.min(6.0, this.maxH, hsv[0])); + } + if(hsv[2] !== 0) { + this.hsv[1] = hsv[1]===null ? null : Math.max(0.0, this.minS, Math.min(1.0, this.maxS, hsv[1])); + } + this.hsv[2] = hsv[2]===null ? null : Math.max(0.0, this.minV, Math.min(1.0, this.maxV, hsv[2])); + + // update RGB according to final HSV, as some values might be trimmed + var rgb = HSV_RGB(this.hsv[0], this.hsv[1], this.hsv[2]); + this.rgb[0] = rgb[0]; + this.rgb[1] = rgb[1]; + this.rgb[2] = rgb[2]; + + this.exportColor(flags); + }; + + + this.fromString = function(hex, flags) { + var m = hex.match(/^\W*([0-9A-F]{3}([0-9A-F]{3})?)\W*$/i); + if(!m) { + return false; + } else { + if(m[1].length === 6) { // 6-char notation + this.fromRGB( + parseInt(m[1].substr(0,2),16) / 255, + parseInt(m[1].substr(2,2),16) / 255, + parseInt(m[1].substr(4,2),16) / 255, + flags + ); + } else { // 3-char notation + this.fromRGB( + parseInt(m[1].charAt(0)+m[1].charAt(0),16) / 255, + parseInt(m[1].charAt(1)+m[1].charAt(1),16) / 255, + parseInt(m[1].charAt(2)+m[1].charAt(2),16) / 255, + flags + ); + } + return true; + } + }; + + + this.toString = function() { + return ( + (0x100 | Math.round(255*this.rgb[0])).toString(16).substr(1) + + (0x100 | Math.round(255*this.rgb[1])).toString(16).substr(1) + + (0x100 | Math.round(255*this.rgb[2])).toString(16).substr(1) + ); + }; + + + function RGB_HSV(r, g, b) { + var n = Math.min(Math.min(r,g),b); + var v = Math.max(Math.max(r,g),b); + var m = v - n; + if(m === 0) { return [ null, 0, v ]; } + var h = r===n ? 3+(b-g)/m : (g===n ? 5+(r-b)/m : 1+(g-r)/m); + return [ h===6?0:h, m/v, v ]; + } + + + function HSV_RGB(h, s, v) { + if(h === null) { return [ v, v, v ]; } + var i = Math.floor(h); + var f = i%2 ? h-i : 1-(h-i); + var m = v * (1 - s); + var n = v * (1 - s*f); + switch(i) { + case 6: + case 0: return [v,n,m]; + case 1: return [n,v,m]; + case 2: return [m,v,n]; + case 3: return [m,n,v]; + case 4: return [n,m,v]; + case 5: return [v,m,n]; + } + } + + + function removePicker() { + delete jscolor.picker.owner; + document.getElementsByTagName('body')[0].removeChild(jscolor.picker.boxB); + } + + + function drawPicker(x, y) { + if(!jscolor.picker) { + jscolor.picker = { + box : document.createElement('div'), + boxB : document.createElement('div'), + pad : document.createElement('div'), + padB : document.createElement('div'), + padM : document.createElement('div'), + sld : document.createElement('div'), + sldB : document.createElement('div'), + sldM : document.createElement('div'), + btn : document.createElement('div'), + btnS : document.createElement('span'), + btnT : document.createTextNode(THIS.pickerCloseText) + }; + for(var i=0,segSize=4; iD4PB-gRLN!ud3B`(_ zeZ{p~8)?whr5bmQmL=4+m!NHkXhZGSowGl7&U@aS=RCLXr?xMUsC{DRO5Y)od*DQolji}D869; z8da!={k&Bsw;O3`IQ?;lWDO=Z97cN{NuF2|hxzD+0p0J~rO71zQ(XF?#pcr)@y z5S3U`{hmqJ^_E>any;^&6CQTQqSH%uHPdbfj6kU0mYEe;0?FDQhR#2t7gABhea}~% z_zBy##@1aLS>X}L12%OHJdbc7|m0->WFSVX5;|F5mIhMJgoTl-U-8d6(3i$$aTj{7U^d*s$s z;4N`%O?CC9{c)38CMH*gPe&@&mNss;zjR^YfM+o-85iNwwBPIa{LQe6gfLN0gVZg5HByUN4>q%?`C_TQ0P6u<-EMW z;NY&(FO%ZAp;c8?jg&!?&y;l9P+(<|5bLOa&Y~*r6#g zGBu?LuG<+vAue%~I6prPnM~%6y#EOGbJ>4%x0d(4!b-alX|mTl0qk{KC9^$y)cz}U zXZOtu3ZtT>>_=%T=0l=zUuB>HjywUHN^k#CKnT-v-vl9(0i+TGc852v1zz!Xq zV=ZJ2z|PJNd7Bs$1FanP!Q=A>)U?Gc&*WrR4-XHhrY16JS=4a-l|-U!wtM$az4BY> z>u)2*6dUXB%z;0CJA2+CZR_LaWr?b~`Y3Fd$#fqJiAJOIOG*UeEfhM9W@cqYd2Dc# z!O&cJF-Ymk*}3?v>0*|;{%820ATJCin->}#y$8fgxee9r>IR*qy1OMU8{dta>JCTX zj~qd#r*9T-4RwJu*7_FjwD!mYZA2dFj4GVw^R#y(L|y-i9{;G zS=NW~zK)8r>F@6!wQqx5%)ERV+S=MG5~!%Cut4J1F>bQi+du$MpSC{pw7zslWZ7b2 z_Awj|YGGlqy0&(;ygUGdQAtTjnVX;I3g+hK@{5ao!B^?qhjv6dGD}OBPPCtSY7aLz zZ#rtbu2AS08me`yudjbAXO))v5eSAtp%A>Aj;ZP3BtMN3R{p5GIcn6>(9n=Zr#~RK z3=a(*3=K7QDaq3?a>3b1sO}(TW=GiAI>N7y`J(Cg_?b@C=9U(>b9384Vj&EaV9 z!~-`EWw*Imk`M-nl72J>ql^y>e9)a|1R_5@)0KNaLvej%WTf0=)EA32MTF+2 zBq<+OZ7>Xz&4sm-v5HDrdqMjJM|c^V%Vqt%_uE!fz!z;>DB~OcR(w9+$;IVV(^2qn zKv!R%Cs%tNEgSEa_Nh~a**Gdg9V=#Xfn3yYHMq46w;NIm7L$cDWWIm z6ML>OuU$iDWO#s81VyAil>1{pxnymzS}=bqJp6}=34*-Os^isY4L4=Q^3b6}AkUcj z`G`uQkFRe92!Hm&2Qtai8Zj(&PXf~WtG<^nYZbB4R4R4iqUhumY*tnl7~V1cFk388 zQ&$IZKFSH1nVE4-e*1j?-7SI~;o(tQU=zGrJCAiE?y7W_3i=WiXB8l48!oJ#o@A^-m}{|~R|qcVFVTEEIa;tTLM0}gxp KqwBrGfBX}-*=$_^ literal 0 HcmV?d00001 diff --git a/web_widget_color/static/src/img/icon.png b/web_widget_color/static/src/img/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..540f72db957725439a21eb0e7815690944fdc319 GIT binary patch literal 3454 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 literal 0 HcmV?d00001 diff --git a/web_widget_color/static/src/img/list_view.png b/web_widget_color/static/src/img/list_view.png new file mode 100644 index 0000000000000000000000000000000000000000..f4965fd5e97f4a4e4b562dabcb6c001ffcc97d57 GIT binary patch literal 13773 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 0) { + var val = $input.val(); + var isOk = /^#[0-9A-F]{6}$/i.test(val); + if (!isOk) { + return false; + } + try { + this.parse_value(this.$('input').val(), ''); + return true; + } catch (e) { + return false; + } + } + return true; + }, + render_value: function () { + var show_value = this.format_value(this.get('value'), ''); + if (!this.get("effective_readonly")) { + var $input = this.$el.find('input'); + $input.val(show_value); + $input.css("background-color", show_value) + jscolor.init(this.$el[0]); + } else { + this.$(".oe_form_char_content").text(show_value); + this.$('div').css("background-color", show_value) + } + } + }); + + /* + * Init jscolor for each editable mode on view form + */ + instance.web.FormView.include({ + to_edit_mode: function () { + this._super(); + jscolor.init(this.$el[0]); + } + }); +}; diff --git a/web_widget_color/static/src/xml/widget.xml b/web_widget_color/static/src/xml/widget.xml new file mode 100644 index 00000000..c62ae1cf --- /dev/null +++ b/web_widget_color/static/src/xml/widget.xml @@ -0,0 +1,24 @@ + + + + + + + + +
+ + + + + +
+ + From 4420e6c38b5c70d79ed732c056f14dd79bef9a7c Mon Sep 17 00:00:00 2001 From: jbeficent Date: Mon, 13 Apr 2015 16:19:51 +0200 Subject: [PATCH 2/6] Backported from 8.0 to 7.0 the ability to use ir.config_parameter options to disable "Create..." and "Create and Edit..." entry for all widgets in the odoo instance. --- web_m2x_options/README.rst | 29 ++++++++++- web_m2x_options/static/src/js/form.js | 75 ++++++++++++++++++++++++--- 2 files changed, 97 insertions(+), 7 deletions(-) diff --git a/web_m2x_options/README.rst b/web_m2x_options/README.rst index 2b1fafdb..a09dd3d5 100644 --- a/web_m2x_options/README.rst +++ b/web_m2x_options/README.rst @@ -11,6 +11,8 @@ control options. ** New: support many2manytags widget ! ** +** New: support global option management with ir.config_parameter ! ** + Options provided includes possibility to remove "Create..." and/or "Create and Edit..." entries from many2one drop down. You can also change default number of proposition appearing in the drop-down. Or prevent the dialog box poping in @@ -46,6 +48,31 @@ New option Number of displayed record in drop-down panel +ir.config_parameter options +--------------------------- + +Now you can disable "Create..." and "Create and Edit..." entry for all widgets in the odoo instance. +If you disable one option, you can enable it for particular field by setting "create: True" option directly on the field definition. + +``web_m2x_options.create`` *boolean* (Default: depends if user have create rights) + + Whether to display the "Create..." entry in dropdown panel for all fields in the odoo instance. + +``web_m2x_options.create_edit`` *boolean* (Default: depends if user have create rights) + + Whether to display "Create and Edit..." entry in dropdown panel for all fields in the odoo instance. + +``web_m2x_options.limit`` *int* (Default: openerp default value is ``7``) + + Number of displayed records in drop-down panel for all fields in the odoo instance + +To add these parameters go to Configuration -> Technical -> Parameters -> System Parameters and add new parameters like: + +- web_m2x_options.create: False +- web_m2x_options.create_edit: False +- web_m2x_options.limit: 10 + + Example ------- @@ -59,5 +86,5 @@ Note ---- Double check that you have no inherited view that remote ``options`` you set on a field ! -If nothing work, add a debugger in the first ligne of ``get_search_result method`` and enable debug mode in OpenERP. When you write something in a many2one field, javascript debugger should pause. If not verify your installation. +If nothing work, add a debugger in the first line of ``get_search_result`` method and enable debug mode in OpenERP. When you write something in a many2one field, javascript debugger should pause. If not verify your installation. diff --git a/web_m2x_options/static/src/js/form.js b/web_m2x_options/static/src/js/form.js index 00885a09..6815f321 100644 --- a/web_m2x_options/static/src/js/form.js +++ b/web_m2x_options/static/src/js/form.js @@ -8,8 +8,35 @@ openerp.web_m2x_options = function (instance) { _t = instance.web._t, _lt = instance.web._lt; + var OPTIONS = ['web_m2x_options.create', + 'web_m2x_options.create_edit', + 'web_m2x_options.limit',]; + instance.web.form.FieldMany2One.include({ + start: function() { + this._super.apply(this, arguments); + return this.get_options(); + }, + + get_options: function() { + var self = this; + if (!_.isUndefined(this.view) && _.isUndefined(this.view.ir_options_loaded)) { + this.view.ir_options_loaded = $.Deferred(); + this.view.ir_options = {}; + (new instance.web.Model("ir.config_parameter")) + .query(["key", "value"]).filter([['key', 'in', OPTIONS]]) + .all().then(function(records) { + _(records).each(function(record) { + self.view.ir_options[record.key] = record.value; + }); + self.view.ir_options_loaded.resolve(); + }); + return this.view.ir_options_loaded; + } + return $.when(); + }, + show_error_displayer: function () { if ((typeof this.options.m2o_dialog === 'undefined' && this.can_create) || this.options.m2o_dialog) { @@ -24,6 +51,12 @@ openerp.web_m2x_options = function (instance) { // add options limit used to change number of selections record // returned. + if (_.isUndefined(this.view)) + return this._super.apply(this, arguments); + if (!_.isUndefined(this.view.ir_options['web_m2x_options.limit'])) { + this.limit = parseInt(this.view.ir_options['web_m2x_options.limit']); + } + if (typeof this.options.limit === 'number') { this.limit = this.options.limit; } @@ -65,7 +98,7 @@ openerp.web_m2x_options = function (instance) { }; }); - // search more... if more results that max + // search more... if more results than max if (values.length > self.limit) { values = values.slice(0, self.limit); @@ -88,7 +121,8 @@ openerp.web_m2x_options = function (instance) { return x[1]; }); - if ((typeof self.options.create === 'undefined' && can_create) || + if ((_.isUndefined(self.options.create) && _.isUndefined(self.view.ir_options['web_m2x_options.create']) && can_create) || + (_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create'] == "True") || self.options.create) { if (search_val.length > 0 && @@ -106,9 +140,11 @@ openerp.web_m2x_options = function (instance) { } } + // create... - if ((typeof self.options.create_edit === 'undefined' && can_create) || + if ((_.isUndefined(self.options.create_edit) && _.isUndefined(self.view.ir_options['web_m2x_options.create_edit']) && can_create) || + (_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create_edit'] == "True") || self.options.create_edit) { values.push({ @@ -138,6 +174,28 @@ openerp.web_m2x_options = function (instance) { } }, + start: function() { + this._super.apply(this, arguments); + return this.get_options(); + }, + + get_options: function() { + var self = this; + if (_.isUndefined(this.view.ir_options_loaded)) { + this.view.ir_options_loaded = $.Deferred(); + this.view.ir_options = {}; + (new instance.web.Model("ir.config_parameter")) + .query(["key", "value"]).filter([['key', 'in', OPTIONS]]) + .all().then(function(records) { + _(records).each(function(record) { + self.view.ir_options[record.key] = record.value; + }); + self.view.ir_options_loaded.resolve(); + }); + } + return this.view.ir_options_loaded; + }, + /** * Call this method to search using a string. */ @@ -148,6 +206,10 @@ openerp.web_m2x_options = function (instance) { // add options limit used to change number of selections record // returned. + if (!_.isUndefined(this.view.ir_options['web_m2x_options.limit'])) { + this.limit = parseInt(this.view.ir_options['web_m2x_options.limit']); + } + if (typeof this.options.limit === 'number') { this.limit = this.options.limit; } @@ -186,7 +248,8 @@ openerp.web_m2x_options = function (instance) { } // quick create - if ((typeof self.options.create === 'undefined') || + if ((_.isUndefined(self.options.create) && _.isUndefined(self.view.ir_options['web_m2x_options.create'])) || + (_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create'] == 'True') || self.options.create) { var raw_result = _(data.result).map(function(x) {return x[1];}); @@ -201,10 +264,10 @@ openerp.web_m2x_options = function (instance) { }); } } - // create... - if ((typeof self.options.create_edit === 'undefined') || + if ((_.isUndefined(self.options.create_edit === 'undefined') && _.isUndefined(self.view.ir_options['web_m2x_options.create_edit'])) || + (_.isUndefined(self.options.create) && self.view.ir_options['web_m2x_options.create_edit'] == 'True') || self.options.create_edit) { values.push({ From 08580203a4d501d931f92c04bcf7ec563752271d Mon Sep 17 00:00:00 2001 From: jbeficent Date: Mon, 13 Apr 2015 17:18:09 +0200 Subject: [PATCH 3/6] Fixed text in README.rst --- web_m2x_options/README.rst | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/web_m2x_options/README.rst b/web_m2x_options/README.rst index a09dd3d5..83c1fba9 100644 --- a/web_m2x_options/README.rst +++ b/web_m2x_options/README.rst @@ -6,17 +6,17 @@ Add new options for many2one field Description ----------- -This modules modifies "many2one" form fields so as to add some new display -control options. +This module changes "many2one" and "many2manytags" form widgets, so as to +add some new display control options. ** New: support many2manytags widget ! ** ** New: support global option management with ir.config_parameter ! ** -Options provided includes possibility to remove "Create..." and/or "Create and -Edit..." entries from many2one drop down. You can also change default number of -proposition appearing in the drop-down. Or prevent the dialog box poping in -case of validation error. +The options provided include the possibility to remove "Create..." and/or +"Create and Edit..." entries from many2one drop down. You can also change +the default number of entries appearing in the drop-down, or prevent the +dialog box poping in case of validation error. If not specified, the module will avoid proposing any of the create options if the current user have no permission rights to create the related object. From 9900627a0595c0c1d33cd38d05cb22d3d655641b Mon Sep 17 00:00:00 2001 From: jbeficent Date: Mon, 13 Apr 2015 17:51:48 +0200 Subject: [PATCH 4/6] Fixed text in README.rst --- web_m2x_options/README.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web_m2x_options/README.rst b/web_m2x_options/README.rst index 83c1fba9..ef7d2841 100644 --- a/web_m2x_options/README.rst +++ b/web_m2x_options/README.rst @@ -14,9 +14,9 @@ add some new display control options. ** New: support global option management with ir.config_parameter ! ** The options provided include the possibility to remove "Create..." and/or -"Create and Edit..." entries from many2one drop down. You can also change -the default number of entries appearing in the drop-down, or prevent the -dialog box poping in case of validation error. +"Create and Edit..." entries from many2one and many2many drop down lists. You +can also change the default number of entries appearing in the drop-down, or + prevent the dialog box poping in case of validation error occurring. If not specified, the module will avoid proposing any of the create options if the current user have no permission rights to create the related object. From 60616745dd82748df29504424f0f40e23d2d4a4b Mon Sep 17 00:00:00 2001 From: jbeficent Date: Tue, 14 Apr 2015 11:29:46 +0200 Subject: [PATCH 5/6] corrected code alignment. --- web_m2x_options/static/src/js/form.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web_m2x_options/static/src/js/form.js b/web_m2x_options/static/src/js/form.js index 6815f321..e4540567 100644 --- a/web_m2x_options/static/src/js/form.js +++ b/web_m2x_options/static/src/js/form.js @@ -10,7 +10,7 @@ openerp.web_m2x_options = function (instance) { var OPTIONS = ['web_m2x_options.create', 'web_m2x_options.create_edit', - 'web_m2x_options.limit',]; + 'web_m2x_options.limit',]; instance.web.form.FieldMany2One.include({ From 03152e75c046a56de2edd6b96e27fe316b658406 Mon Sep 17 00:00:00 2001 From: Holger Brunn Date: Fri, 17 Apr 2015 08:48:47 +0200 Subject: [PATCH 6/6] [FIX] don't eval() json, but json.loads it --- .../wizard/ir_filters_combine_with_existing.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/web_advanced_filters/wizard/ir_filters_combine_with_existing.py b/web_advanced_filters/wizard/ir_filters_combine_with_existing.py index 7cb48206..b6d6668c 100644 --- a/web_advanced_filters/wizard/ir_filters_combine_with_existing.py +++ b/web_advanced_filters/wizard/ir_filters_combine_with_existing.py @@ -19,6 +19,7 @@ # ############################################################################## import time +import json from openerp.osv.orm import TransientModel from openerp.osv import fields, expression from openerp.tools.safe_eval import safe_eval @@ -41,7 +42,7 @@ class IrFiltersCombineWithExisting(TransientModel): def button_save(self, cr, uid, ids, context=None): assert len(ids) == 1 this = self.browse(cr, uid, ids[0], context=context) - domain = safe_eval(this.domain) + domain = json.loads(this.domain) is_frozen = (len(domain) == 1 and expression.is_leaf(domain[0]) and domain[0][0] == 'id')