Browse Source

[ADD] : port web color to 8.0

update JS library with used on https://bitbucket.org/anybox/widget_color/
pull/85/head
Adil Houmadi 10 years ago
parent
commit
e7185bd2da
  1. 75
      web_color/README.rst
  2. 27
      web_color/__init__.py
  3. 43
      web_color/__openerp__.py
  4. 61
      web_color/controller.py
  5. BIN
      web_color/doc/form_view.png
  6. BIN
      web_color/doc/list_view.png
  7. BIN
      web_color/doc/picker.png
  8. 49
      web_color/fields.py
  9. BIN
      web_color/static/description/icon.png
  10. BIN
      web_color/static/lib/jscolor/arrow.gif
  11. BIN
      web_color/static/lib/jscolor/cross.gif
  12. 12
      web_color/static/lib/jscolor/demo.html
  13. BIN
      web_color/static/lib/jscolor/hs.png
  14. BIN
      web_color/static/lib/jscolor/hv.png
  15. 1010
      web_color/static/lib/jscolor/jscolor.js
  16. 23
      web_color/static/src/css/widget.css
  17. 50
      web_color/static/src/js/widget.js
  18. 24
      web_color/static/src/xml/widget.xml
  19. 12
      web_color/view/web_color_view.xml

75
web_color/README.rst

@ -0,0 +1,75 @@
===========================
OpenERP web_color module
===========================
This module aims to add a color picker to openERP/Odoo.
It's a `jsColor <http://jscolor.com/>`_ 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
=====
It adds a new data type ``color``. To apply it, simply change the field
declaration as following::
_columns = {
'color': fields.color(
u"Couleur",
help=u"Toutes couleur valid css, exemple blue ou #f57900"),
OR
color = fields.Color(
string="Color",
required=False,
help="Choose your color"
)
In the view declaration there is nothing especial to do,
add the field as any other one. Here is a part of tree view example::
...
<field name="arch" type="xml">
<tree string="View name">
...
<field name="name"/>
<field name="color"/>
...
</tree>
</field>
...
.. |picker| image:: ./doc/picker.png
.. |formview| image:: ./doc/form_view.png
.. |listview| image:: ./doc/list_view.png

27
web_color/__init__.py

@ -0,0 +1,27 @@
# -*- encoding: utf-8 -*-
############################################################################
#
# OpenERP, Open Source Web Color
# Copyright (C) 2012 Savoir-faire Linux (<http://www.savoirfairelinux.com>).
# Copyright (C) 2014 Anybox <http://anybox.fr>
# Copyright (C) 2015 Taktik SA <http://taktik.be>
#
# 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 <http://www.gnu.org/licenses/>.
#
# @author Étienne Beaudry Auger <etienne.b.auger@savoirfairelinux.com>
# @author Adil Houmadi <ah@taktik.be>
#
##############################################################################
import fields
import controller

43
web_color/__openerp__.py

@ -0,0 +1,43 @@
# -*- encoding: utf-8 -*-
############################################################################
#
# OpenERP, Open Source Web Color
# Copyright (C) 2012 Savoir-faire Linux (<http://www.savoirfairelinux.com>).
# Copyright (C) 2014 Anybox <http://anybox.fr>
# Copyright (C) 2015 Taktik SA <http://taktik.be>
#
# 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 <http://www.gnu.org/licenses/>.
#
# @author Étienne Beaudry Auger <etienne.b.auger@savoirfairelinux.com>
# @author Adil Houmadi <ah@taktik.be>
#
##############################################################################
{
'name': "Web Color",
'category': "web",
'description': """
This module aims to add a color picker to openERP/Odoo.
""",
'version': "1.0",
'depends': ['base', 'web'],
'data': [
'view/web_color_view.xml'
],
'qweb': [
'static/src/xml/widget.xml',
],
'auto_install': False,
'installable': True,
'web_preload': True,
}

61
web_color/controller.py

@ -0,0 +1,61 @@
# -*- encoding: utf-8 -*-
############################################################################
#
# OpenERP, Open Source Web Color
# Copyright (C) 2012 Savoir-faire Linux (<http://www.savoirfairelinux.com>).
# Copyright (C) 2014 Anybox <http://anybox.fr>
# Copyright (C) 2015 Taktik SA <http://taktik.be>
#
# 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 <http://www.gnu.org/licenses/>.
#
# @author Étienne Beaudry Auger <etienne.b.auger@savoirfairelinux.com>
# @author Adil Houmadi <ah@taktik.be>
#
##############################################################################
import openerp.http as http
from openerp.http import request
from os.path import join, abspath, exists
import mimetypes
class JsColor(http.Controller):
@http.route("/jscolor/<string:image>", type="http", auth="user")
def jscolor(self, image):
addons_path = http.addons_manifest['web_color']['addons_path']
path = join(
addons_path,
'web_color',
'static',
'lib',
'jscolor',
image
)
if not exists(path):
return request.not_found()
try:
image_file = open(abspath(path))
image_data = image_file.read()
image_file.close()
mime_type = mimetypes.guess_type(path)
if len(mime_type) > 1:
mime_type = mime_type[0]
else:
return request.not_found()
except:
return request.not_found()
headers = [
('Content-Type', '%s' % mime_type),
('Content-Length', len(image_data)),
]
return request.make_response(image_data, headers)

BIN
web_color/doc/form_view.png

After

Width: 307  |  Height: 62  |  Size: 1.8 KiB

BIN
web_color/doc/list_view.png

After

Width: 570  |  Height: 217  |  Size: 14 KiB

BIN
web_color/doc/picker.png

After

Width: 266  |  Height: 179  |  Size: 5.9 KiB

49
web_color/fields.py

@ -0,0 +1,49 @@
# -*- encoding: utf-8 -*-
############################################################################
#
# OpenERP, Open Source Web Color
# Copyright (C) 2012 Savoir-faire Linux (<http://www.savoirfairelinux.com>).
# Copyright (C) 2014 Anybox <http://anybox.fr>
# Copyright (C) 2015 Taktik SA <http://taktik.be>
#
# 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 <http://www.gnu.org/licenses/>.
#
# @author Étienne Beaudry Auger <etienne.b.auger@savoirfairelinux.com>
# @author Adil Houmadi <ah@taktik.be>
#
##############################################################################
from openerp import fields
from openerp.osv import fields as fields_osv
class Color(fields.Char):
type = 'color'
def __init__(self, *args, **kwargs):
super(Color, self).__init__(*args, **kwargs)
self.size = 7
fields.Color = Color
class color(fields_osv.char):
_type = 'color'
def __init__(self, *args, **kwargs):
kwargs['size'] = 7
super(color, self).__init__(*args, **kwargs)
fields_osv.color = color

BIN
web_color/static/description/icon.png

After

Width: 64  |  Height: 64  |  Size: 3.4 KiB

BIN
web_color/static/lib/jscolor/arrow.gif

After

Width: 7  |  Height: 11  |  Size: 66 B

BIN
web_color/static/lib/jscolor/cross.gif

After

Width: 15  |  Height: 15  |  Size: 83 B

12
web_color/static/lib/jscolor/demo.html

@ -0,0 +1,12 @@
<html>
<head>
<title>jscolor demo</title>
</head>
<body>
<script type="text/javascript" src="jscolor.js"></script>
Click here: <input class="color" value="66ff00">
</body>
</html>

BIN
web_color/static/lib/jscolor/hs.png

After

Width: 181  |  Height: 101  |  Size: 2.6 KiB

BIN
web_color/static/lib/jscolor/hv.png

After

Width: 181  |  Height: 101  |  Size: 2.8 KiB

1010
web_color/static/lib/jscolor/jscolor.js
File diff suppressed because it is too large
View File

23
web_color/static/src/css/widget.css

@ -0,0 +1,23 @@
.openerp .oe_form .oe_form_field_color input {
width: 100%;
}
.openerp .oe_form .oe_form_field_color div {
border: 1px solid;
display: inline-block;
height: 14px;
margin-right: 10px;
position: relative;
top: 3px;
width: 40px;
}
.oe_list_field_color div {
border: 1px solid;
display: inline-block;
height: 14px;
margin-right: 10px;
position: relative;
top: 3px;
width: 40px;
}

50
web_color/static/src/js/widget.js

@ -0,0 +1,50 @@
openerp.web_color = function (instance) {
instance.web.form.widgets.add('color', 'instance.web.form.FieldColor');
instance.web.search.fields.add('color', 'instance.web.search.CharField');
instance.web.form.FieldColor = instance.web.form.FieldChar.extend({
template: 'FieldColor',
widget_class: 'oe_form_field_color',
is_syntax_valid: function () {
var $input = this.$('input');
if (!this.get("effective_readonly") && $input.size() > 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]);
}
});
};

24
web_color/static/src/xml/widget.xml

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<templates>
<t t-name="FieldColor">
<span t-att-class="'oe_form_field '+widget.widget_class" t-att-style="widget.node.attrs.style">
<t t-if="!widget.get('effective_readonly')">
<input type="text"
t-att-id="widget.id_for_label"
t-att-tabindex="widget.node.attrs.tabindex"
t-att-autofocus="widget.node.attrs.autofocus"
t-att-placeholder="widget.node.attrs.placeholder"
t-att-maxlength="widget.field.size"
class="color {hash:true}"
/>
</t>
<t t-if="widget.get('effective_readonly')">
<div/>
<span class="oe_form_char_content"></span>
</t>
</span>
</t>
<tr t-extend="ListView.row">
<t t-jquery="t td t" t-operation="replace"><t t-if="column.widget =='color' || column.type == 'color'"><div t-att-style="'background-color:' + render_cell(record, column)"/></t><t t-raw="render_cell(record, column)"/></t>
</tr>
</templates>

12
web_color/view/web_color_view.xml

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<openerp>
<data>
<template id="assets_backend" name="web_color assets" inherit_id="web.assets_backend">
<xpath expr="." position="inside">
<link rel="stylesheet" href="/web_color/static/src/css/widget.css"/>
<script type="text/javascript" src="/web_color/static/lib/jscolor/jscolor.js"></script>
<script type="text/javascript" src="/web_color/static/src/js/widget.js"></script>
</xpath>
</template>
</data>
</openerp>
Loading…
Cancel
Save