From c92422b2ace39a0dde2cb1952da4a26159257377 Mon Sep 17 00:00:00 2001 From: "Atul Patel (OpenERP)" Date: Thu, 9 Aug 2012 15:23:41 +0530 Subject: [PATCH 01/21] [ADD]: Add vote system in openchatter bzr revid: atp@tinyerp.com-20120809095341-xn70i8beof20b07h --- addons/mail/__init__.py | 1 + addons/mail/mail_message.py | 41 +++++++++++++++++++ addons/mail/mail_thread.py | 14 ++++++- addons/mail/mail_vote.py | 36 +++++++++++++++++ addons/mail/security/ir.model.access.csv | 1 + addons/mail/static/src/css/mail.css | 29 ++++++++++++++ addons/mail/static/src/img/vote.gif | Bin 0 -> 892 bytes addons/mail/static/src/js/mail.js | 48 ++++++++++++++++++++++- addons/mail/static/src/xml/mail.xml | 22 ++++++++++- 9 files changed, 188 insertions(+), 4 deletions(-) create mode 100644 addons/mail/mail_vote.py create mode 100644 addons/mail/static/src/img/vote.gif diff --git a/addons/mail/__init__.py b/addons/mail/__init__.py index cbd477f55e6..4cf2caf8804 100644 --- a/addons/mail/__init__.py +++ b/addons/mail/__init__.py @@ -24,6 +24,7 @@ import mail_message import mail_thread import mail_group import mail_subscription +import mail_vote import ir_needaction import res_users import res_partner diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index b96b6e3791e..1b5178e7271 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -230,6 +230,7 @@ class mail_message(osv.Model): select=True, ondelete='set null', help="Parent message, used for displaying as threads with hierarchy"), 'child_ids': fields.one2many('mail.message', 'parent_id', 'Child Messages'), + 'vote_ids': fields.one2many('mail.vote', 'msg_id', 'Votes'), } _defaults = { @@ -237,6 +238,46 @@ class mail_message(osv.Model): 'state': 'received', } + + #--------------------------------------------------- + #Mail Vote system (Like or Unlike comments + #----------------------------------------------------- + + def get_vote_summary(self, cr, uid, ids, context=None): + ''' + Return message ,count vote of message id given by .particular user with True or False. + ''' + for message in self.browse(cr, uid, ids, context): + is_vote_liked = False + vote_count = len(message.vote_ids) + for vote in message.vote_ids: + if vote.user_id.id == uid: + is_vote_liked = True + break + res = { + 'msg_id': message.id, + 'vote_count': vote_count, + 'is_vote_liked': is_vote_liked + } + return res + + def vote_toggle(self, cr, uid, ids, context=None): + ''' + Toggles when Comment is liked or unlike. + Return the number of votes of particular message. + ''' + vote_pool = self.pool.get('mail.vote') + vote_count = 0 + for message in self.browse(cr, uid, ids, context): + voters_id = vote_pool.search(cr, uid, [('msg_id', '=', message.id), ('user_id', '=', uid)], context=context) + if not voters_id: + new_vote_id = vote_pool.create(cr, uid, {'msg_id': message.id, 'user_id': uid}, context=context) + else: + vote_pool.unlink(cr, uid, voters_id, context=context) + if message.vote_ids: + vote_count = len(message.vote_ids) + return vote_count + #------------------------------------------------------ # Email api #------------------------------------------------------ diff --git a/addons/mail/mail_thread.py b/addons/mail/mail_thread.py index f0dd023bf06..092050ff812 100644 --- a/addons/mail/mail_thread.py +++ b/addons/mail/mail_thread.py @@ -64,12 +64,14 @@ class mail_thread(osv.Model): def _get_message_ids(self, cr, uid, ids, name, args, context=None): res = {} + img_vote = "" for id in ids: message_ids = self.message_search(cr, uid, [id], context=context) subscriber_ids = self.message_get_subscribers(cr, uid, [id], context=context) + vote_list = self.message_vote_ids(cr, uid, ids, context=context) res[id] = { 'message_ids': message_ids, - 'message_summary': "9 %d + %d" % (len(message_ids), len(subscriber_ids)), + 'message_summary': "Msg: %d . Fol: %d . %s %d" % (len(message_ids), len(subscriber_ids), img_vote, len(vote_list)), } return res @@ -100,7 +102,15 @@ class mail_thread(osv.Model): #------------------------------------------------------ # Automatic subscription when creating/reading #------------------------------------------------------ - + def message_vote_ids(self, cr, uid, ids, context=None): + message_pool = self.pool.get('mail.message') + vote_list = [] + message_ids = self.message_search(cr, uid, [id], context=context) + for message in message_pool.browse(cr, uid, message_ids, context=context): + if message.vote_ids: + vote_list.append(message.vote_ids) + return vote_list + def create(self, cr, uid, vals, context=None): """Automatically subscribe the creator """ thread_id = super(mail_thread, self).create(cr, uid, vals, context=context) diff --git a/addons/mail/mail_vote.py b/addons/mail/mail_vote.py new file mode 100644 index 00000000000..5d63de80864 --- /dev/null +++ b/addons/mail/mail_vote.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2012-Today OpenERP SA (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero 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 Affero General Public License for more details +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see +# +############################################################################## + +from osv import osv, fields +from tools.translate import _ + +class mail_vote(osv.Model): + ''' + Mail vote feature allow users to like and unlike particular message or Document's message comment. + It counts the number of votes per document. + ''' + _name = 'mail.vote' + _description = 'Mail Vote' + _columns = { + 'msg_id': fields.many2one('mail.message', 'Message', required=True), + 'user_id': fields.many2one('res.users', 'User', required=True), + } +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: \ No newline at end of file diff --git a/addons/mail/security/ir.model.access.csv b/addons/mail/security/ir.model.access.csv index 3677d424c14..1941a41a259 100644 --- a/addons/mail/security/ir.model.access.csv +++ b/addons/mail/security/ir.model.access.csv @@ -7,3 +7,4 @@ access_mail_notification_all,mail.notification.all,model_mail_notification,,1,1, access_mail_group,mail.group,model_mail_group,base.group_user,1,1,1,1 access_mail_alias_user,mail.alias,model_mail_alias,base.group_user,1,1,1,0 access_mail_alias_system,mail.alias,model_mail_alias,base.group_system,1,1,1,1 +access_mail_vote,mail.vote,model_mail_vote,base.group_user,1,1,1,1 diff --git a/addons/mail/static/src/css/mail.css b/addons/mail/static/src/css/mail.css index c0317633aa7..ae934eeb4ff 100644 --- a/addons/mail/static/src/css/mail.css +++ b/addons/mail/static/src/css/mail.css @@ -275,6 +275,35 @@ display: none; } +/*--------------------------------------------------------------*/ +/* Mail Vote System (Like or Unlike Comment) +/*--------------------------------------------------------------*/ + +.oe_mail_vote_image{ + height='12px'; + width='16px'; +} + +button.oe_mail_msg_vote_like{ + height:21px; + width: 30px; + padding: 1px; + background: #8A89BA; + margin-top: -4px; +} + +button.oe_mail_msg_vote_like:hover{ + background: #8A89BA; +} + +button.oe_mail_msg_vote_like span { + color: white; +} + +span.oe_mail_vote_string{ + color: #807FB4; +} + /* ------------------------------------------------------------ */ /* mail.compose.message form view & OpenERP hacks /* ------------------------------------------------------------ */ diff --git a/addons/mail/static/src/img/vote.gif b/addons/mail/static/src/img/vote.gif new file mode 100644 index 0000000000000000000000000000000000000000..0e6b874770e1122b3f08f01d26bae9f08b94cfe6 GIT binary patch literal 892 zcmZ?wbhEHb_7cRVe_wN7y z|G^4JiO~=kZXuxflZBCi;Xi{8$YY>9!N3v8@Sju0!k~eniGy7zp};`#5CadBg-XW) zha;V=k}f;~2O1ohWSp~PDnG_IFtaO6lF_`F(#WJ0K8@#t(X&(2OcGCB>Da7xoQcbW V?}tRu!6p_1OTLJPi-`^l)&OE6GJpU8 literal 0 HcmV?d00001 diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index da6816d3441..8b60e96744c 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -559,6 +559,48 @@ openerp.mail = function(session) { return display_done && compose_done; }, + //Mail vote Functionality... + add_vote_event: function(element){ + vote_img = element.find('.oe_mail_msg_vote_like'); + self = this; + if (vote_img) + vote_img.click(function(){ + self.subscribe_vote($(this).attr('data-id')); + }); + return + }, + + find_parent_element: function(name, message_id){ + parent_element = false; + _.each($(name), function(element){ + if ($(element).attr("data-id") == message_id){ + parent_element = element; + } + }); + return parent_element; + }, + + render_vote: function(message_id){ + var self = this; + this.mail_message = new session.web.DataSet(this, 'mail.message'); + this.mail_message.call('get_vote_summary',[[parseInt(message_id)]]).then(function(result){ + if (result){ + parent_element = self.find_parent_element(".oe_mail_msg_vote", message_id); + vote_element = session.web.qweb.render('VoteDisplay', result); + $(parent_element).html(vote_element); + self.add_vote_event($(parent_element)); + } + }); + }, + + subscribe_vote: function(message_id){ + var self = this; + this.mail_message = new session.web.DataSet(this, 'mail.message'); + return this.mail_message.call('vote_toggle', [[parseInt(message_id)]]).then(function(result){ + self.render_vote(message_id); + }); + }, + /** * Override-hack of do_action: automatically reload the chatter. * Normally it should be called only when clicking on 'Post/Send' @@ -697,6 +739,10 @@ openerp.mail = function(session) { display_comments: function (records) { var self = this; + //Render Vote. + _.each(records, function(record){ + self.render_vote(record.id); + }); // sort the records mail.ChatterUtils.records_struct_add_records(this.comments_structure, records, this.params.parent_id); //build attachments download urls and compute time-relative from dates @@ -1119,7 +1165,7 @@ openerp.mail = function(session) { var records = self.comments_structure.tree_struct[root_id]['for_thread_msgs']; var model_name = self.comments_structure.msgs[root_id]['model']; var res_id = self.comments_structure.msgs[root_id]['res_id']; - var render_res = session.web.qweb.render('mail.wall_thread_container', {}); + var render_res = session.web.qweb.render('mail.Wall_thread_container', {}); $('
  • ').html(render_res).appendTo(self.$element.find('ul.oe_mail_wall_threads')); var thread = new mail.Thread(self, { 'res_model': model_name, 'res_id': res_id, 'uid': self.session.uid, 'records': records, diff --git a/addons/mail/static/src/xml/mail.xml b/addons/mail/static/src/xml/mail.xml index 86d115f29c8..bd18d78e41d 100644 --- a/addons/mail/static/src/xml/mail.xml +++ b/addons/mail/static/src/xml/mail.xml @@ -45,7 +45,7 @@ wall_thread_container template for the wall Each discussion thread is contained inside this template --> - + + + + Votes : + +
  • + + + + + + +
  • + +
  • @@ -155,6 +174,7 @@
  • +
  • Reply
  • - - - Votes : - -
  • - - - - - - -
  • -
    -
  • @@ -161,12 +142,10 @@
  • -
  • + +
  • Reply
  • Reply
  • -
  • 1 Attachment @@ -200,4 +179,17 @@ + +
  • + + votes + + +
  • + From 2ae49751eb9e97b4ec9820a07258f5d07a527d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 18 Sep 2012 17:05:17 +0200 Subject: [PATCH 18/21] [TEST] mail: added tests for the vote feature. bzr revid: tde@openerp.com-20120918150517-c08jw61c9fpasisc --- addons/mail/tests/test_mail.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/addons/mail/tests/test_mail.py b/addons/mail/tests/test_mail.py index 1fab5dd1732..57a59e2595f 100644 --- a/addons/mail/tests/test_mail.py +++ b/addons/mail/tests/test_mail.py @@ -647,3 +647,33 @@ class test_mail(TestMailMockups): msg1.refresh() self.assertEqual(5, len(group_pigs.message_ids), 'group should contain 5 messages') self.assertEqual(2, len(msg1.child_ids), 'msg1 should have 2 children now') + + def test_60_vote(self): + """ Test designed for the vote/unvote feature. """ + cr, uid = self.cr, self.uid + group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id) + user_admin = self.res_users.browse(cr, uid, uid) + msg1 = group_pigs.message_post(body='My Body', subject='1') + msg1 = self.mail_message.browse(cr, uid, msg1) + + # Create user Bert Tartopoils + user_bert_id = self.res_users.create(cr, uid, {'name': 'Bert', 'login': 'bert'}) + user_bert = self.res_users.browse(cr, uid, user_bert_id) + + # Test: msg1 and msg2 have void vote_user_ids + self.assertFalse(msg1.vote_user_ids, 'newly created message msg1 has not void vote_user_ids') + # Do: Admin vote for msg1 + self.mail_message.vote_toggle(cr, uid, [msg1.id]) + msg1.refresh() + # Test: msg1 has Admin as voter + self.assertEqual(set(msg1.vote_user_ids), set([user_admin]), 'after voting, Admin is not the voter') + # Do: Bert vote for msg1 + self.mail_message.vote_toggle(cr, uid, [msg1.id], [user_bert_id]) + msg1.refresh() + # Test: msg1 has Admin and Bert as voters + self.assertEqual(set(msg1.vote_user_ids), set([user_admin, user_bert]), 'after voting, Admin and Bert are not the voters') + # Do: Admin unvote for msg1 + self.mail_message.vote_toggle(cr, uid, [msg1.id]) + msg1.refresh() + # Test: msg1 has Bert as voter + self.assertEqual(set(msg1.vote_user_ids), set([user_bert]), 'after unvoting for Admin, Bert is not the voter') From 21833581643ac28af36e778f479c0bdbcc461285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Tue, 18 Sep 2012 17:05:44 +0200 Subject: [PATCH 19/21] [CLEAN] mail: vote: cleaned before merging. bzr revid: tde@openerp.com-20120918150544-2pgwh1mhi5yyqi22 --- addons/mail/mail_message.py | 19 ++++++++----------- addons/mail/mail_vote.py | 8 ++++---- addons/mail/static/src/img/vote.gif | Bin 892 -> 0 bytes addons/mail/static/src/js/mail.js | 2 +- 4 files changed, 13 insertions(+), 16 deletions(-) delete mode 100644 addons/mail/static/src/img/vote.gif diff --git a/addons/mail/mail_message.py b/addons/mail/mail_message.py index 4b7c0c645e3..1d5d85e36e0 100644 --- a/addons/mail/mail_message.py +++ b/addons/mail/mail_message.py @@ -130,7 +130,8 @@ class mail_message(osv.Model): 'unread': fields.function(_get_unread, fnct_search=_search_unread, type='boolean', string='Unread', help='Functional field to search for unread messages linked to uid'), - 'vote_user_ids': fields.many2many('res.users', 'mail_vote', 'message_id', 'user_id', 'Votes'), + 'vote_user_ids': fields.many2many('res.users', 'mail_vote', 'message_id', 'user_id', string='Votes', + help='Users that voted for this message'), } def _needaction_domain_get(self, cr, uid, context=None): @@ -153,19 +154,16 @@ class mail_message(osv.Model): #------------------------------------------------------ def vote_toggle(self, cr, uid, ids, user_ids=None, context=None): - ''' - Toggles when Comment is liked or unlike. - create vote entries if current user like comment.. - ''' + ''' Toggles voting ''' if not user_ids: user_ids = [uid] for message in self.read(cr, uid, ids, ['vote_user_ids'], context=context): for user_id in user_ids: - has_voted = user_id in message['vote_user_ids'] + has_voted = user_id in message.get('vote_user_ids') if not has_voted: - self.write(cr, uid, ids, {'vote_user_ids': [(4, user_id)]}, context=context) + self.write(cr, uid, message.get('id'), {'vote_user_ids': [(4, user_id)]}, context=context) else: - self.write(cr, uid, ids, {'vote_user_ids': [(3, user_id)]}, context=context) + self.write(cr, uid, message.get('id'), {'vote_user_ids': [(3, user_id)]}, context=context) return True #------------------------------------------------------ @@ -174,11 +172,10 @@ class mail_message(osv.Model): def _message_dict_get(self, cr, uid, msg, context=None): """ Return a dict representation of the message browse record. """ - vote_pool = self.pool.get('mail.vote') has_voted = False vote_ids = self.pool.get('res.users').name_get(cr, uid, [user.id for user in msg.vote_user_ids], context=context) - for user_id in msg.vote_user_ids: - if (user_id.id == uid): + for vote in vote_ids: + if vote[0] == uid: has_voted = True break attachment_ids = [{'id': attach[0], 'name': attach[1]} for attach in self.pool.get('ir.attachment').name_get(cr, uid, [x.id for x in msg.attachment_ids], context=context)] diff --git a/addons/mail/mail_vote.py b/addons/mail/mail_vote.py index 3d69734f198..1e439fe0aeb 100644 --- a/addons/mail/mail_vote.py +++ b/addons/mail/mail_vote.py @@ -30,10 +30,10 @@ class mail_vote(osv.Model): _name = 'mail.vote' _description = 'Mail Vote' _columns = { - 'message_id': fields.many2one('mail.message', 'Message', required=True, - select=1), - 'user_id': fields.many2one('res.users', 'User', required=True, - select=1), + 'message_id': fields.many2one('mail.message', 'Message', select=1, + ondelete='cascade', required=True), + 'user_id': fields.many2one('res.users', 'User', select=1, + ondelete='cascade', required=True), } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/mail/static/src/img/vote.gif b/addons/mail/static/src/img/vote.gif deleted file mode 100644 index 0e6b874770e1122b3f08f01d26bae9f08b94cfe6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 892 zcmZ?wbhEHb_7cRVe_wN7y z|G^4JiO~=kZXuxflZBCi;Xi{8$YY>9!N3v8@Sju0!k~eniGy7zp};`#5CadBg-XW) zha;V=k}f;~2O1ohWSp~PDnG_IFtaO6lF_`F(#WJ0K8@#t(X&(2OcGCB>Da7xoQcbW V?}tRu!6p_1OTLJPi-`^l)&OE6GJpU8 diff --git a/addons/mail/static/src/js/mail.js b/addons/mail/static/src/js/mail.js index 2f5f95fbb62..57c777441e7 100644 --- a/addons/mail/static/src/js/mail.js +++ b/addons/mail/static/src/js/mail.js @@ -529,7 +529,7 @@ openerp.mail = function(session) { record.vote_user_ids.splice(idx, 1); } else { - record.vote_user_ids.push([this.session.uid, 'Current user']); + record.vote_user_ids.push([this.session.uid, 'You']); } record.has_voted = ! record.has_voted; var vote_element = session.web.qweb.render('mail.thread.message.vote', {'record': record}); From d98d41d236a9f7124675c28b473b7df3f2127b46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20van=20der=20Essen?= Date: Tue, 18 Sep 2012 18:17:51 +0200 Subject: [PATCH 20/21] [FIX] css fixes for editable list bzr revid: fva@openerp.com-20120918161751-fz73pig39zxm7hso --- addons/web/static/src/css/base.css | 22 +++++++++++++------- addons/web/static/src/css/base.sass | 18 +++++++++++++++- addons/web_kanban/static/src/css/kanban.css | 4 ++-- addons/web_kanban/static/src/css/kanban.sass | 4 ++-- 4 files changed, 35 insertions(+), 13 deletions(-) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index 16861a7853f..dab079aba7a 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -25,7 +25,6 @@ display: none !important; } } - .openerp.openerp_webclient_container { height: 100%; position: relative; @@ -41,7 +40,7 @@ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5); /* http://www.quirksmode.org/dom/inputfile.html * http://stackoverflow.com/questions/2855589/replace-input-type-file-by-an-image - */ */ + */ } .openerp :-moz-placeholder { color: #afafb6 !important; @@ -1154,7 +1153,7 @@ color: white; padding: 2px 4px; margin: 1px 6px 0 0; - border: 1px solid lightGray; + border: 1px solid lightgrey; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); -moz-border-radius: 4px; -webkit-border-radius: 4px; @@ -1179,7 +1178,7 @@ transform: scale(1.1); } .openerp .oe_secondary_submenu .oe_active { - border-top: 1px solid lightGray; + border-top: 1px solid lightgrey; border-bottom: 1px solid #dedede; text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2); -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2); @@ -1521,6 +1520,7 @@ font-size: 1px; letter-spacing: -1px; color: transparent; + font-weight: normal; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; @@ -2001,6 +2001,8 @@ .openerp .oe_form .oe_subtotal_footer .oe_subtotal_footer_separator { width: 108px; border-top: 1px solid #cacaca; + margin-top: 4px; + padding-top: 4px; font-weight: bold; font-size: 18px; } @@ -2043,7 +2045,7 @@ } .openerp .oe_form .oe_form_label_help[for] span, .openerp .oe_form .oe_form_label[for] span { font-size: 80%; - color: darkGreen; + color: darkgreen; vertical-align: top; position: relative; top: -4px; @@ -2638,20 +2640,24 @@ } .openerp .oe_list_content td.oe_list_field_handle { width: 1em; + padding: 0 !important; cursor: ns-resize; } .openerp .oe_list_content td.oe_list_field_handle .oe_list_handle { font-size: 1px; letter-spacing: -1px; color: transparent; + font-weight: normal; + margin-right: 7px; } .openerp .oe_list_content td.oe_list_field_handle .oe_list_handle:before { - font: 21px "mnmliconsRegular"; - content: "ö"; - color: #404040; + font: 18px "entypoRegular"; + content: "}"; + color: #e0e0e0; } .openerp .oe_list_cannot_edit .oe_list_header_handle, .openerp .oe_list_cannot_edit .oe_list_field_handle { display: none !important; + padding: 0 !important; } .openerp .oe_list_cannot_delete .oe_list_record_delete { display: none !important; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index e3cb661d580..9d121457234 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -119,11 +119,22 @@ $sheet-max-width: 860px font-size: 1px letter-spacing: -1px color: transparent + font-weight: normal &:before font: 21px "mnmliconsRegular" content: $icon-name color: $color +@mixin text-to-entypo-icon($icon-name, $color: #404040, $size: 21px) + font-size: 1px + letter-spacing: -1px + color: transparent + font-weight: normal + &:before + font: $size "entypoRegular" + content: $icon-name + color: $color + // }}} @media print @@ -1574,6 +1585,8 @@ $sheet-max-width: 860px .oe_subtotal_footer_separator width: 108px border-top: 1px solid #cacaca + margin-top: 4px + padding-top: 4px font-weight: bold font-size: 18px label:after @@ -2068,13 +2081,16 @@ $sheet-max-width: 860px text-indent: -9001px td.oe_list_field_handle width: 1em + padding: 0 !important cursor: ns-resize .oe_list_handle - @include text-to-icon("ö") + @include text-to-entypo-icon("}",#E0E0E0,18px) + margin-right: 7px .oe_list_cannot_edit .oe_list_header_handle, .oe_list_field_handle display: none !important + padding: 0 !important .oe_list_cannot_delete .oe_list_record_delete display: none !important diff --git a/addons/web_kanban/static/src/css/kanban.css b/addons/web_kanban/static/src/css/kanban.css index 48cf725ead3..6218d028576 100644 --- a/addons/web_kanban/static/src/css/kanban.css +++ b/addons/web_kanban/static/src/css/kanban.css @@ -346,8 +346,8 @@ position: relative; display: block; background: white; - border: 1px solid #d8d8d8; - border-bottom-color: #b9b9b9; + border: 1px solid rgba(0, 0, 0, 0.16); + border-bottom-color: rgba(0, 0, 0, 0.3); padding: 8px; display: block; -moz-border-radius: 4px; diff --git a/addons/web_kanban/static/src/css/kanban.sass b/addons/web_kanban/static/src/css/kanban.sass index 95a63dbd1a2..a45515efdd0 100644 --- a/addons/web_kanban/static/src/css/kanban.sass +++ b/addons/web_kanban/static/src/css/kanban.sass @@ -311,8 +311,8 @@ position: relative display: block background: white - border: 1px solid #d8d8d8 - border-bottom-color: #b9b9b9 + border: 1px solid rgba(0,0,0,0.16) + border-bottom-color: rgba(0,0,0,0.3) padding: 8px display: block @include radius(4px) From c730c3cb784868ad5515e0e707939919d1af7e64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fr=C3=A9d=C3=A9ric=20van=20der=20Essen?= Date: Tue, 18 Sep 2012 18:25:32 +0200 Subject: [PATCH 21/21] [FIX] css header alignment bzr revid: fva@openerp.com-20120918162532-xte92rwm6jemy09f --- addons/web/static/src/css/base.css | 3 +++ addons/web/static/src/css/base.sass | 2 ++ 2 files changed, 5 insertions(+) diff --git a/addons/web/static/src/css/base.css b/addons/web/static/src/css/base.css index dab079aba7a..10ee9dea2de 100644 --- a/addons/web/static/src/css/base.css +++ b/addons/web/static/src/css/base.css @@ -1957,6 +1957,9 @@ background-image: -o-linear-gradient(top, #fcfcfc, #dedede); background-image: linear-gradient(to bottom, #fcfcfc, #dedede); } +.openerp .oe_form header > span { + margin-left: 4px; +} .openerp .oe_form header ul { display: inline-block; float: right; diff --git a/addons/web/static/src/css/base.sass b/addons/web/static/src/css/base.sass index 9d121457234..1aa4726725c 100644 --- a/addons/web/static/src/css/base.sass +++ b/addons/web/static/src/css/base.sass @@ -1551,6 +1551,8 @@ $sheet-max-width: 860px border-bottom: 1px solid #cacaca padding-left: 2px @include vertical-gradient(#fcfcfc, #dedede) + > span + margin-left: 4px ul display: inline-block float: right