[MERGE]Trunk.

bzr revid: vme@tinyerp.com-20140505043233-2t2e2vb1yv86hyxp
This commit is contained in:
Vidhin Mehta (OpenERP)
2014-05-05 10:02:33 +05:30
406 changed files with 1111 additions and 1908 deletions
+15
View File
@@ -207,6 +207,9 @@
.fa-star:before {
content: "\f005";
}
. fa-tasks:before {
content: "\f0ae";
}
.fa-star-o:before {
content: "\f006";
}
@@ -237,6 +240,12 @@
.fa-search-minus:before {
content: "\f010";
}
.fa-adn:before {
content: "\f170";
}
. fa-times:before {
content: "\f00d";
}
.fa-power-off:before {
content: "\f011";
}
@@ -308,6 +317,9 @@
.fa-qrcode:before {
content: "\f029";
}
.fa-calendar:before {
content: "\f073";
}
.fa-barcode:before {
content: "\f02a";
}
@@ -759,6 +771,9 @@
.fa-pinterest:before {
content: "\f0d2";
}
.fa-pencil-square-o:before {
content: "\f044";
}
.fa-pinterest-square:before {
content: "\f0d3";
}
+47 -39
View File
@@ -1,4 +1,4 @@
@charset "utf-8";
@charset "UTF-8";
@font-face {
font-family: "mnmliconsRegular";
src: url("/web/static/src/font/mnmliconsv21-webfont.eot") format("eot");
@@ -79,7 +79,7 @@
vertical-align: top;
}
.openerp .oe_title {
width: 50%;
width: 38%;
float: left;
}
.openerp .oe_title:after {
@@ -314,56 +314,58 @@
.openerp .oe_form_dirty button.oe_highlight_on_dirty:hover {
background: #ed6f6a;
}
.openerp .oe_button_box {
width: 400px;
text-align: left;
}
.openerp .oe_button_box .oe_stat_button:hover {
background: #7c7bad;
color: white;
}
.openerp .oe_button_box .oe_stat_button:hover .fa {
color: white;
}
.openerp .oe_button_box .oe_stat_button {
.openerp .oe_stat_button {
font-weight: normal;
display: inline-table;
width: 33% !important;
height: 42px;
width: 132px !important;
height: 40px;
color: #666666;
margin: 0px -1px -1px 0px;
padding: 0;
color: #666666;
border: 1px solid #dddddd;
border-radius: 0;
box-shadow: none;
background: white;
}
.openerp .oe_button_box .oe_stat_button > div {
.openerp .oe_stat_button > div {
display: table-cell;
vertical-align: middle;
text-align: left;
padding: 0;
line-height: 120%;
}
.openerp .oe_button_box .oe_stat_button .stat_button_icon {
.openerp .oe_stat_button .stat_button_icon {
color: #7c7bad;
font-size: 24px;
padding: 0px 3px;
width: 37px;
text-align: center;
}
.openerp .oe_button_box .oe_stat_button .oe_form_field_percent_pie {
.openerp .oe_stat_button .oe_form_field_percent_pie {
width: 42px;
}
.openerp .oe_button_box .oe_stat_button .oe_form_field_bar_chart {
.openerp .oe_stat_button .oe_form_field_bar_chart {
width: 42px;
}
.openerp .oe_button_box .oe_stat_button svg {
.openerp .oe_stat_button svg {
width: 38px;
height: 38px;
display: inline;
vertical-align: middle;
}
.openerp .oe_stat_button:hover {
background: #7c7bad;
color: white;
}
.openerp .oe_stat_button:hover .fa {
color: white;
}
.openerp .oe_button_box {
width: 400px;
text-align: right;
}
.openerp .oe_button_box .oe_stat_button {
display: inline-table;
}
.openerp .oe_avatar > img {
max-height: 90px;
max-width: 90px;
@@ -720,7 +722,7 @@
border-bottom-left-radius: 8px;
}
.openerp .oe_notification {
z-index: 1050;
z-index: 1500;
}
.openerp .oe_webclient_timezone_notification a {
color: white;
@@ -2742,13 +2744,15 @@
padding: 3px 6px;
white-space: pre-line;
}
.openerp .oe_list_content > tbody > tr > td > button.btn_img, .openerp .oe_list_content > tbody > tr > th > button.btn_img {
.openerp .oe_list_content > tbody > tr > td > button, .openerp .oe_list_content > tbody > tr > th > button {
border: none;
background: transparent;
padding: 0;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}
.openerp .oe_list_content > tbody > tr > td > button.btn_txt, .openerp .oe_list_content > tbody > tr > th > button.btn_txt {
border: 1px solid rgba(0, 0, 0, 0.4);
background: #e3e3e3;
padding: 3px 12px;
}
.openerp .oe_list_content > tbody > tr > td.oe_list_checkbox:first-child, .openerp .oe_list_content > tbody > tr th.oe_list_checkbox:first-child {
width: 17px;
@@ -3293,11 +3297,6 @@ body.oe_single_form .oe_single_form_container {
overflow: hidden !important;
}
}
.ui-icon {
width: 18px;
height: 18px;
}
.tooltip {
padding: 0;
margin: 0;
@@ -3307,8 +3306,6 @@ body.oe_single_form .oe_single_form_container {
background: white;
text-shadow: 0 1px 1px rgba(255, 255, 255, 0.5);
background-color: transparent;
/*We need a greater z-index in order for tooltip to go over bootstrap modal z-index*/
z-index: 1500;
}
.tooltip .tooltip-inner {
text-align: left !important;
@@ -3345,6 +3342,12 @@ body.oe_single_form .oe_single_form_container {
.tooltip .tooltip-inner .oe_tooltip_message {
max-width: 310px;
}
.ui-icon {
width: 18px;
height: 18px;
}
.modal .modal-header button.close {
border: none;
background: none;
@@ -3355,12 +3358,17 @@ body.oe_single_form .oe_single_form_container {
.modal .modal-footer {
text-align: left;
}
.modal .oe_act_window.modal-body{
padding: 0;
}
.modal .oe_button{
.modal .oe_button {
margin: 0 4px 0 0;
}
.modal .oe_act_window.modal-body {
padding: 0;
}
.ui-datepicker {
z-index: 1500 !important;
}
input[type="radio"], input[type="checkbox"] {
margin-right: 4px;
margin-left: 4px;
+49 -41
View File
@@ -190,7 +190,7 @@ $sheet-padding: 16px
td
vertical-align: top
.oe_title
width: 50%
width: 38%
float: left
.oe_title:after
content: "."
@@ -330,47 +330,48 @@ $sheet-padding: 16px
@include box-shadow(none)
&:hover
background: #ED6F6A
.oe_stat_button
font-weight: normal
width: 132px !important
height: 40px
color: #666
margin: 0px -1px -1px 0px
padding: 0
border: 1px solid #dddddd
border-radius: 0
box-shadow: none
background: white
> div
display: table-cell
vertical-align: middle
text-align: left
padding: 0
line-height: 120%
.stat_button_icon
color: #7C7BAD
font-size: 24px
padding: 0px 3px
width: 37px
text-align: center
.oe_form_field_percent_pie
width: 42px
.oe_form_field_bar_chart
width: 42px
svg
width: 38px
height: 38px
display: inline
vertical-align: middle
.oe_stat_button:hover
background: #7c7bad
color: white
.fa
color: white
.oe_button_box
width: 400px
text-align: left
.oe_stat_button:hover
background: #7c7bad
color: white
.fa
color: white
text-align: right
.oe_stat_button
font-weight: normal
display: inline-table
width: 33% !important
height: 42px
margin: 0px -1px -1px 0px
padding: 0
color: #666
border: 1px solid #dddddd
border-radius: 0
box-shadow: none
background: white
> div
display: table-cell
vertical-align: middle
text-align: left
padding: 0
line-height: 120%
.stat_button_icon
color: #7C7BAD
font-size: 24px
padding: 0px 3px
width: 37px
text-align: center
.oe_form_field_percent_pie
width: 42px
.oe_form_field_bar_chart
width: 42px
svg
width: 38px
height: 38px
display: inline
vertical-align: middle
.oe_avatar
> img
max-height: 90px
@@ -639,7 +640,8 @@ $sheet-padding: 16px
// }}}
// Notifications {{{
.oe_notification
z-index: 1050
z-index: 1500
.oe_webclient_timezone_notification
a
color: white
@@ -2220,11 +2222,14 @@ $sheet-padding: 16px
padding: 3px 6px
white-space: pre-line
> td, > th
> button.btn_img
> button
border: none
background: transparent
padding: 0
@include box-shadow(none)
> button.btn_txt
border: 1px solid rgba(0,0,0,0.4)
background: #e3e3e3
padding: 3px 12px
> td.oe_list_checkbox:first-child, th.oe_list_checkbox:first-child
width: 17px
&:after
@@ -2736,6 +2741,9 @@ body.oe_single_form
.oe_act_window.modal-body
padding: 0
.ui-datepicker
z-index: 1500 !important
input[type="radio"], input[type="checkbox"]
margin-right: 4px
margin-left: 4px
+1 -1
View File
@@ -1460,7 +1460,7 @@ instance.web.embed = function (origin, dbname, login, key, action, options) {
$('head').append($('<link>', {
'rel': 'stylesheet',
'type': 'text/css',
'href': origin +'/web/webclient/css'
'href': origin +'/web/css/web.assets_webclient'
}));
var currentScript = document.currentScript;
if (!currentScript) {
+12 -17
View File
@@ -232,7 +232,7 @@ instance.web.Session.include( /** @lends instance.web.Session# */{
var self = this;
return this.session_reload().then(function(result) {
var modules = instance._modules.join(',');
var deferred = self.rpc('/web/webclient/qweblist', {mods: modules}).then(self.load_qweb.bind(self));
var deferred = self.load_qweb(modules);
if(self.session_is_valid()) {
return deferred.then(function() { return self.load_modules(); });
}
@@ -318,7 +318,7 @@ instance.web.Session.include( /** @lends instance.web.Session# */{
loaded = $.when(
loaded,
self.rpc('/web/webclient/csslist', {mods: to_load}).done(self.load_css.bind(self)),
self.rpc('/web/webclient/qweblist', {mods: to_load}).then(self.load_qweb.bind(self)),
self.load_qweb(to_load),
self.rpc('/web/webclient/jslist', {mods: to_load}).done(function(files) {
file_list = file_list.concat(files);
})
@@ -375,14 +375,12 @@ instance.web.Session.include( /** @lends instance.web.Session# */{
}
return d;
},
load_qweb: function(files) {
load_qweb: function(mods) {
var self = this;
_.each(files, function(file) {
self.qweb_mutex.exec(function() {
return self.rpc('/web/proxy/load', {path: file}).then(function(xml) {
if (!xml) { return; }
instance.web.qweb.add_template(_.str.trim(xml));
});
self.qweb_mutex.exec(function() {
return self.rpc('/web/proxy/load', {path: '/web/webclient/qweb?mods=' + mods}).then(function(xml) {
if (!xml) { return; }
instance.web.qweb.add_template(_.str.trim(xml));
});
});
return self.qweb_mutex.def;
@@ -460,14 +458,11 @@ instance.web.Session.include( /** @lends instance.web.Session# */{
.appendTo(document.body)
.load(function () {
try {
if (options.error) {
if (!this.contentDocument.body.childNodes[1]) {
options.error(this.contentDocument.body.childNodes);
}
else {
options.error(JSON.parse(this.contentDocument.body.childNodes[1].textContent));
}
}
if (options.error) {
var body = this.contentDocument.body;
var node = body.childNodes[1] || body.childNodes[0];
options.error(JSON.parse(node.textContent));
}
} finally {
complete();
}
+1 -1
View File
@@ -32,7 +32,7 @@ instance.web.DataExport = instance.web.Dialog.extend({
var self = this;
var options = {
buttons: [
{text: _t("Close"), click: function () { self.close(); }},
{text: _t("Close"), click: function () { self.$el.parents('.modal').modal('hide'); }},
{text: _t("Export To File"), click: function () { self.on_click_export_data(); }}
],
close: function () { self.close();}
+21 -11
View File
@@ -29,8 +29,8 @@ my.Facet = B.Model.extend({
B.Model.prototype.initialize.apply(this, arguments);
this.values = new my.FacetValues(values || []);
this.values.on('add remove change reset', function () {
this.trigger('change', this);
this.values.on('add remove change reset', function (_, options) {
this.trigger('change', this, options);
}, this);
},
get: function (key) {
@@ -399,7 +399,8 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
this.setup_global_completion();
this.query = new my.SearchQuery()
.on('add change reset remove', this.proxy('do_search'))
.on('add change reset remove', this.proxy('renderFacets'));
.on('change', this.proxy('renderChangedFacets'))
.on('add reset remove', this.proxy('renderFacets'));
if (this.options.hidden) {
this.$el.hide();
@@ -578,14 +579,20 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
.trigger('blur');
},
/**
*
* @param {openerp.web.search.SearchQuery | openerp.web.search.Facet} _1
* @param {openerp.web.search.Facet} [_2]
* Call the renderFacets method with the correct arguments.
* This is due to the fact that change events are called with two arguments
* (model, options) while add, reset and remove events are called with
* (collection, model, options) as arguments
*/
renderChangedFacets: function (model, options) {
this.renderFacets(undefined, model, options);
},
/**
* @param {openerp.web.search.SearchQuery | undefined} Undefined if event is change
* @param {openerp.web.search.Facet}
* @param {Object} [options]
*/
renderFacets: function (_1, _2, options) {
// _1: model if event=change, otherwise collection
// _2: undefined if event=change, otherwise model
renderFacets: function (collection, model, options) {
var self = this;
var started = [];
var $e = this.$('div.oe_searchview_facets');
@@ -610,6 +617,7 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
});
$.when.apply(null, started).then(function () {
if (options && options.focus_input === false) return;
var input_to_focus;
// options.at: facet inserted at given index, focus next input
// otherwise just focus last input
@@ -618,7 +626,6 @@ instance.web.SearchView = instance.web.Widget.extend(/** @lends instance.web.Sea
} else {
input_to_focus = self.input_subviews[(options.at + 1) * 2];
}
input_to_focus.$el.focus();
});
},
@@ -1602,8 +1609,11 @@ instance.web.search.ManyToOneField = instance.web.search.CharField.extend({
return facetValue.get('label');
},
make_domain: function (name, operator, facetValue) {
if (operator === this.default_operator) {
switch(operator){
case this.default_operator:
return [[name, '=', facetValue.get('value')]];
case 'child_of':
return [[name, 'child_of', facetValue.get('value')]];
}
return this._super(name, operator, facetValue);
},
+1 -22
View File
@@ -48,15 +48,6 @@ openerp.testing = {};
testing.dependencies = window['oe_all_dependencies'] || [];
testing.current_module = null;
testing.templates = { };
testing.add_template = function (name) {
var xhr = QWeb2.Engine.prototype.get_xhr();
xhr.open('GET', name, false);
xhr.send(null);
(testing.templates[testing.current_module] =
testing.templates[testing.current_module] || [])
.push(xhr.responseXML);
};
/**
* Function which does not do anything
*/
@@ -206,7 +197,7 @@ openerp.testing = {};
teardown: testing.noop
});
QUnit.module(testing.current_module + '.' + name, {_oe: options});
QUnit.module(name, {_oe: options});
body(testing['case']);
};
testing['case'] = function (name, options, callback) {
@@ -244,18 +235,6 @@ openerp.testing = {};
expect(opts.asserts);
}
if (opts.templates) {
for(var i=0; i<module_deps.length; ++i) {
var dep = module_deps[i];
var templates = testing.templates[dep];
if (_.isEmpty(templates)) { continue; }
for (var j=0; j < templates.length; ++j) {
instance.web.qweb.add_template(templates[j]);
}
}
}
var $fixture = $('#qunit-fixture');
var mock, async = false;
+8 -3
View File
@@ -1940,7 +1940,7 @@ instance.web.form.WidgetButton = instance.web.form.FormWidget.extend({
init: function(field_manager, node) {
node.attrs.type = node.attrs['data-button-type'];
this.is_stat_button = /\boe_stat_button\b/.test(node.attrs['class']);
this.icon = node.attrs.icon && "<span class=\"fa " + node.attrs.icon + " fa-fw\"></span>";
this.icon_class = node.attrs.icon && "stat_button_icon fa " + node.attrs.icon + " fa-fw";
this._super(field_manager, node);
this.force_disabled = false;
this.string = (this.node.attrs.string || '').replace(/_/g, '');
@@ -3356,13 +3356,16 @@ instance.web.form.CompletionFieldMixin = {
instance.web.form.M2ODialog = instance.web.Dialog.extend({
template: "M2ODialog",
init: function(parent) {
this.name = parent.string;
this._super(parent, {
title: _.str.sprintf(_t("Add %s"), parent.string),
title: _.str.sprintf(_t("Create a %s"), parent.string),
size: 'medium',
});
},
start: function() {
var self = this;
var text = _.str.sprintf(_t("You are creating a new %s, are you sure it does not exist yet?"), self.name);
this.$("p").text( text );
this.$buttons.html(QWeb.render("M2ODialog.buttons"));
this.$("input").val(this.getParent().last_query);
this.$buttons.find(".oe_form_m2o_qc_button").click(function(){
@@ -3486,7 +3489,7 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
self.display_value_backup = {};
self.render_value();
self.focus();
self.view.do_onchange(self);
self.trigger('changed_value');
});
});
});
@@ -3621,6 +3624,8 @@ instance.web.form.FieldMany2One = instance.web.form.AbstractField.extend(instanc
minLength: 0,
delay: 250
});
// set position for list of suggestions box
this.$input.autocomplete( "option", "position", { my : "left top", at: "left bottom" } );
this.$input.autocomplete("widget").openerpClass();
// used to correct a bug when selecting an element by pushing 'enter' in an editable list
this.$input.keyup(function(e) {
+10 -11
View File
@@ -40,7 +40,7 @@
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 class="modal-title"><t t-raw="title"/></h3>
</div>
<div class="modal-body">
<div class="modal-body" style="overflow-y: auto;">
</div>
</div>
</div>
@@ -800,12 +800,11 @@
</t>
<button t-name="ListView.row.text_button" type="button"
t-att-title="widget.string" t-att-disabled="disabled || undefined"
t-att-class="disabled ? 'oe_list_button_disabled btn' : 'btn'">
<t t-esc="widget.string"/>
</button>
t-att-class="disabled ? 'oe_list_button_disabled btn_txt oe_link' : 'btn_txt oe_link'"
><t t-esc="widget.string"/></button>
<button t-name="ListView.row.button" type="button"
t-att-title="widget.string" t-att-disabled="disabled || undefined"
t-att-class="disabled ? 'oe_list_button_disabled btn_img' : 'btn_img'"
t-att-class="disabled ? 'oe_list_button_disabled' : ''"
><img t-attf-src="#{prefix}/web/static/src/img/icons/#{widget.icon}.png"
t-att-alt="widget.string"/></button>
<t t-extend="ListView.row">
@@ -1409,7 +1408,7 @@
t-att-autofocus="widget.node.attrs.autofocus"
t-att-accesskey="widget.node.attrs.accesskey">
<img t-if="!widget.is_stat_button and widget.node.attrs.icon " t-att-src="_s + widget.node.attrs.icon" width="16" height="16"/>
<div t-if="widget.is_stat_button and widget.icon" class="stat_button_icon"><t t-raw="widget.icon"/></div>
<div t-if="widget.is_stat_button and widget.icon_class" t-att-class="widget.icon_class"></div>
<span t-if="widget.string and !widget.is_stat_button"><t t-esc="widget.string"/></span>
<div t-if="widget.string and widget.is_stat_button"><t t-esc="widget.string"/></div>
</button>
@@ -1948,13 +1947,14 @@
</t>
<t t-name="M2ODialog">
<div>
<p class="oe_grey"/>
Name: <input class="oe_form_m2o_input_name" type="text"/>
</div>
</t>
<t t-name="M2ODialog.buttons">
<button class="oe_form_m2o_qc_button oe_button oe_highlight">Quick Add</button>
<button class="oe_form_m2o_sc_button oe_button">Add All Info...</button>
<button class="oe_form_m2o_cancel_button oe_button">Cancel</button>
<button class="oe_form_m2o_qc_button oe_button oe_highlight">Create</button>
<button class="oe_form_m2o_sc_button oe_button">Create and edit</button> or
<button class="oe_form_m2o_cancel_button oe_button oe_link"><span>Cancel</span></button>
</t>
<t t-name="FieldMonetary" t-extend="FieldChar">
<t t-jquery="t:first" t-operation="before">
@@ -1985,6 +1985,5 @@
<a href="javascript:void(0)"><t t-esc="text"/></a>
</t>
<t t-name="StatInfo">
<strong><t t-esc="value"/></strong>
<t t-esc="text"/></t>
<strong><t t-esc="value"/></strong><br/><t t-esc="text"/></t>
</templates>
+2 -2
View File
@@ -361,8 +361,8 @@ openerp.testing.section('list.edition.onwrite', {
strictEqual(
$fix.find('tbody tr:eq(1)').css('color'), 'rgb(255, 0, 0)',
'shoud have color applied');
strictEqual(
$fix.find('tbody tr:eq(2)').css('color'), 'rgb(0, 0, 0)',
notStrictEqual(
$fix.find('tbody tr:eq(2)').css('color'), 'rgb(255, 0, 0)',
'should have default color applied');
});
});