merge trunk

bzr revid: nicolas.vanhoren@openerp.com-20130621135207-7oq7v2ubzfdrkrbr
This commit is contained in:
niv-openerp 2013-06-21 15:52:07 +02:00
commit d57bbfd2ff
565 changed files with 27202 additions and 26177 deletions

View File

@ -9,7 +9,7 @@ OpenERP Web core module.
This module provides the core of the OpenERP Web Client. This module provides the core of the OpenERP Web Client.
""", """,
'depends': [], 'depends': ['base'],
'auto_install': True, 'auto_install': True,
'post_load': 'wsgi_postload', 'post_load': 'wsgi_postload',
'js' : [ 'js' : [

View File

@ -32,6 +32,7 @@ except ImportError:
import openerp import openerp
import openerp.modules.registry import openerp.modules.registry
from openerp.tools.translate import _ from openerp.tools.translate import _
from openerp.tools import config
from .. import http from .. import http
http = http http = http
@ -94,12 +95,7 @@ def db_monodb_redirect():
if request.params.get('db'): if request.params.get('db'):
return (db, False) return (db, False)
try: dbs = db_list(True)
dbs = db_list()
except Exception:
# ignore access denied
dbs = []
# redirect to the chosen db if multiple are available # redirect to the chosen db if multiple are available
redirect = False redirect = False
if db and len(dbs) > 1: if db and len(dbs) > 1:
@ -263,8 +259,9 @@ def concat_files(file_list, reader=None, intersperse=""):
if reader is None: if reader is None:
def reader(f): def reader(f):
with open(f, 'rb') as fp: import codecs
return fp.read() with codecs.open(f, 'rb', "utf-8-sig") as fp:
return fp.read().encode("utf-8")
files_content = [] files_content = []
for fname in file_list: for fname in file_list:
@ -742,7 +739,14 @@ class Database(http.Controller):
@http.route('/web/database/get_list', type='json', auth="none") @http.route('/web/database/get_list', type='json', auth="none")
def get_list(self): def get_list(self):
return db_list() # TODO change js to avoid calling this method if in monodb mode
try:
return db_list()
except openerp.exceptions.AccessDenied:
monodb = db_monodb(req)
if monodb:
return [monodb]
raise
@http.route('/web/database/create', type='json', auth="none") @http.route('/web/database/create', type='json', auth="none")
def create(self, fields): def create(self, fields):
@ -770,9 +774,12 @@ class Database(http.Controller):
password, db = operator.itemgetter( password, db = operator.itemgetter(
'drop_pwd', 'drop_db')( 'drop_pwd', 'drop_db')(
dict(map(operator.itemgetter('name', 'value'), fields))) dict(map(operator.itemgetter('name', 'value'), fields)))
try: try:
return request.session.proxy("db").drop(password, db) if request.session.proxy("db").drop(password, db):
return True
else:
return False
except openerp.exceptions.AccessDenied: except openerp.exceptions.AccessDenied:
return {'error': 'AccessDenied', 'title': 'Drop Database'} return {'error': 'AccessDenied', 'title': 'Drop Database'}
except Exception: except Exception:
@ -1344,7 +1351,7 @@ class Binary(http.Controller):
else: else:
try: try:
# create an empty registry # create an empty registry
registry = openerp.modules.registry.Registry(dbname.lower()) registry = openerp.modules.registry.Registry(dbname)
with registry.cursor() as cr: with registry.cursor() as cr:
cr.execute("""SELECT c.logo_web cr.execute("""SELECT c.logo_web
FROM res_users u FROM res_users u
@ -1447,6 +1454,8 @@ class Export(http.Controller):
if all(dict(attrs).get('readonly', True) if all(dict(attrs).get('readonly', True)
for attrs in field.get('states', {}).values()): for attrs in field.get('states', {}).values()):
continue continue
if not field.get('exportable', True):
continue
id = prefix + (prefix and '/'or '') + field_name id = prefix + (prefix and '/'or '') + field_name
name = parent_name + (parent_name and '/' or '') + field['string'] name = parent_name + (parent_name and '/' or '') + field['string']

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -896,9 +896,13 @@ class DisableCacheMiddleware(object):
def session_path(): def session_path():
try: try:
username = getpass.getuser() import pwd
except Exception: username = pwd.getpwuid(os.geteuid()).pw_name
username = "unknown" except ImportError:
try:
username = getpass.getuser()
except Exception:
username = "unknown"
path = os.path.join(tempfile.gettempdir(), "oe-sessions-" + username) path = os.path.join(tempfile.gettempdir(), "oe-sessions-" + username)
try: try:
os.mkdir(path, 0700) os.mkdir(path, 0700)
@ -1097,9 +1101,9 @@ class Root(object):
request.auth_method = getattr(original, "auth", "user") request.auth_method = getattr(original, "auth", "user")
request.func_request_type = original.exposed request.func_request_type = original.exposed
def db_list(): def db_list(force=False):
proxy = request.session.proxy("db") proxy = request.session.proxy("db")
dbs = proxy.list() dbs = proxy.list(force)
h = request.httprequest.environ['HTTP_HOST'].split(':')[0] h = request.httprequest.environ['HTTP_HOST'].split(':')[0]
d = h.split('.')[0] d = h.split('.')[0]
r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d) r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d', d)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -296,6 +296,11 @@
// Bind the window resize event when the width or height is auto or % // Bind the window resize event when the width or height is auto or %
if (/auto|%/.test("" + options.width + options.height)) if (/auto|%/.test("" + options.width + options.height))
$(window).resize(function() { $(window).resize(function() {
//Forcefully blurred iframe contentWindow, chrome, IE, safari doesn't trigger blur on window resize and due to which text disappears
var contentWindow = editor.$frame[0].contentWindow;
if(!$.browser.mozilla && contentWindow){
$(contentWindow).trigger('blur');
}
// CHM Note MonkeyPatch: if the DOM is not remove, refresh the cleditor // CHM Note MonkeyPatch: if the DOM is not remove, refresh the cleditor
if(editor.$main.parent().parent().size()) { if(editor.$main.parent().parent().size()) {
refresh(editor); refresh(editor);

View File

@ -7,7 +7,7 @@
* date.js // English (United States) * date.js // English (United States)
* date-en-US.js // English (United States) * date-en-US.js // English (United States)
* date-de-DE.js // Deutsch (Deutschland) * date-de-DE.js // Deutsch (Deutschland)
* date-es-MX.js // français (France) * date-es-MX.js // français (France)
*/ */
alert( alert(
@ -17,5 +17,5 @@ alert(
" date.js // English (United States)\n" + " date.js // English (United States)\n" +
" date-en-US.js // English (United States)\n" + " date-en-US.js // English (United States)\n" +
" date-de-DE.js // Deutsch (Deutschland)\n" + " date-de-DE.js // Deutsch (Deutschland)\n" +
" date-es-MX.js // français (France)\n" " date-es-MX.js // français (France)\n"
); );

View File

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 B

After

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 B

After

Width:  |  Height:  |  Size: 115 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 B

After

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 B

After

Width:  |  Height:  |  Size: 107 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

After

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 107 B

After

Width:  |  Height:  |  Size: 97 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 B

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 123 B

After

Width:  |  Height:  |  Size: 119 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 B

After

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 178 B

After

Width:  |  Height:  |  Size: 87 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 B

After

Width:  |  Height:  |  Size: 130 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 B

After

Width:  |  Height:  |  Size: 95 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 111 B

After

Width:  |  Height:  |  Size: 107 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 B

After

Width:  |  Height:  |  Size: 106 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 B

After

Width:  |  Height:  |  Size: 118 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 B

After

Width:  |  Height:  |  Size: 86 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

@ -1,5 +1,5 @@
repo: 076b192d0d8ab2b92d1dbcfa3da055382f30eaea repo: 076b192d0d8ab2b92d1dbcfa3da055382f30eaea
node: 142c22b230636674a0cee6bc29e6975f0f1600a5 node: 7ee0bc7b4e9138f485cdc9ec791961d8ef452f17
branch: default branch: default
latesttag: 0.7 latesttag: 0.7
latesttagdistance: 9 latesttagdistance: 11

View File

@ -273,7 +273,7 @@ var py = {};
var Special = '[:;.,`@]'; var Special = '[:;.,`@]';
var Funny = group(Operator, Bracket, Special); var Funny = group(Operator, Bracket, Special);
var ContStr = group("[uU]?'([^']*)'", '[uU]?"([^"]*)"'); var ContStr = group("([uU])?'([^']*)'", '([uU])?"([^"]*)"');
var PseudoToken = Whitespace + group(Number, Funny, ContStr, Name); var PseudoToken = Whitespace + group(Number, Funny, ContStr, Name);
@ -311,7 +311,8 @@ var py = {};
} else if (string_pattern.test(token)) { } else if (string_pattern.test(token)) {
var m = string_pattern.exec(token); var m = string_pattern.exec(token);
tokens.push(create(symbols['(string)'], { tokens.push(create(symbols['(string)'], {
value: (m[2] !== undefined ? m[2] : m[3]) unicode: !!(m[2] || m[4]),
value: (m[3] !== undefined ? m[3] : m[5])
})); }));
} else if (token in symbols) { } else if (token in symbols) {
var symbol; var symbol;
@ -393,13 +394,14 @@ var py = {};
switch(val.constructor) { switch(val.constructor) {
case Object: case Object:
var out = py.PY_call(py.object); // TODO: why py.object instead of py.dict?
for(var k in val) { var o = py.PY_call(py.object);
if (val.hasOwnProperty(k)) { for (var prop in val) {
out[k] = val[k]; if (val.hasOwnProperty(prop)) {
o[prop] = val[prop];
} }
} }
return out; return o;
case Array: case Array:
return py.list.fromJSON(val); return py.list.fromJSON(val);
} }
@ -521,7 +523,7 @@ var py = {};
} }
}; };
py.PY_getAttr = function (o, attr_name) { py.PY_getAttr = function (o, attr_name) {
return PY_ensurepy(o.__getattribute__(attr_name),attr_name); return PY_ensurepy(o.__getattribute__(attr_name));
}; };
py.PY_str = function (o) { py.PY_str = function (o) {
var v = o.__str__(); var v = o.__str__();
@ -762,14 +764,7 @@ var py = {};
// Conversion // Conversion
toJSON: function () { toJSON: function () {
var out = {}; throw new Error(this.constructor.name + ' can not be converted to JSON');
for(var k in this) {
if (this.hasOwnProperty(k) && !/^__/.test(k)) {
var val = this[k];
out[k] = val.toJSON ? val.toJSON() : val;
}
}
return out;
} }
}); });
var NoneType = py.type('NoneType', null, { var NoneType = py.type('NoneType', null, {
@ -998,7 +993,7 @@ var py = {};
} }
var t = py.PY_call(py.tuple); var t = py.PY_call(py.tuple);
for(var i=0; i<ar.length; ++i) { for(var i=0; i<ar.length; ++i) {
t._values.push(PY_ensurepy(ar[i],i)); t._values.push(PY_ensurepy(ar[i]));
} }
return t; return t;
} }
@ -1032,7 +1027,7 @@ var py = {};
if (!d.hasOwnProperty(k)) { continue; } if (!d.hasOwnProperty(k)) { continue; }
instance.__setitem__( instance.__setitem__(
py.str.fromJSON(k), py.str.fromJSON(k),
PY_ensurepy(d[k],k)); PY_ensurepy(d[k]));
} }
return instance; return instance;
}, },
@ -1108,6 +1103,114 @@ var py = {};
}); });
/**
* Implements the decoding of Python string literals (embedded in
* JS strings) into actual JS strings. This includes the decoding
* of escapes into their corresponding JS
* characters/codepoints/whatever.
*
* The ``unicode`` flags notes whether the literal should be
* decoded as a bytestring literal or a unicode literal, which
* pretty much only impacts decoding (or not) of unicode escapes
* at this point since bytestrings are not technically handled
* (everything is decoded to JS "unicode" strings)
*
* Eventurally, ``str`` could eventually use typed arrays, that'd
* be interesting...
*/
var PY_decode_string_literal = function (str, unicode) {
var out = [], code;
// Directly maps a single escape code to an output
// character
var direct_map = {
'\\': '\\',
'"': '"',
"'": "'",
'a': '\x07',
'b': '\x08',
'f': '\x0c',
'n': '\n',
'r': '\r',
't': '\t',
'v': '\v'
};
for (var i=0; i<str.length; ++i) {
if (str[i] !== '\\') {
out.push(str[i]);
continue;
}
var escape = str[i+1];
if (escape in direct_map) {
out.push(direct_map[escape]);
++i;
continue;
}
switch (escape) {
// Ignored
case '\n': ++i; continue;
// Character named name in the Unicode database (Unicode only)
case 'N':
if (!unicode) { break; }
throw Error("SyntaxError: \\N{} escape not implemented");
case 'u':
if (!unicode) { break; }
var uni = str.slice(i+2, i+6);
if (!/[0-9a-f]{4}/i.test(uni)) {
throw new Error([
"SyntaxError: (unicode error) 'unicodeescape' codec",
" can't decode bytes in position ",
i, "-", i+4,
": truncated \\uXXXX escape"
].join(''));
}
code = parseInt(uni, 16);
out.push(String.fromCharCode(code));
// escape + 4 hex digits
i += 5;
continue;
case 'U':
if (!unicode) { break; }
// TODO: String.fromCodePoint
throw Error("SyntaxError: \\U escape not implemented");
case 'x':
// get 2 hex digits
var hex = str.slice(i+2, i+4);
if (!/[0-9a-f]{2}/i.test(hex)) {
if (!unicode) {
throw new Error('ValueError: invalid \\x escape');
}
throw new Error([
"SyntaxError: (unicode error) 'unicodeescape'",
" codec can't decode bytes in position ",
i, '-', i+2,
": truncated \\xXX escape"
].join(''))
}
code = parseInt(hex, 16);
out.push(String.fromCharCode(code));
// skip escape + 2 hex digits
i += 3;
continue;
default:
// Check if octal
if (!/[0-8]/.test(escape)) { break; }
var r = /[0-8]{1,3}/g;
r.lastIndex = i+1;
var m = r.exec(str);
var oct = m[0];
code = parseInt(oct, 8);
out.push(String.fromCharCode(code));
// skip matchlength
i += oct.length;
continue;
}
out.push('\\');
}
return out.join('');
};
// All binary operators with fallbacks, so they can be applied generically // All binary operators with fallbacks, so they can be applied generically
var PY_operators = { var PY_operators = {
'==': ['eq', 'eq', function (a, b) { return a === b; }], '==': ['eq', 'eq', function (a, b) { return a === b; }],
@ -1217,7 +1320,8 @@ var py = {};
} }
return PY_ensurepy(val, expr.value); return PY_ensurepy(val, expr.value);
case '(string)': case '(string)':
return py.str.fromJSON(expr.value); return py.str.fromJSON(PY_decode_string_literal(
expr.value, expr.unicode));
case '(number)': case '(number)':
return py.float.fromJSON(expr.value); return py.float.fromJSON(expr.value);
case '(constant)': case '(constant)':

View File

@ -579,6 +579,9 @@
.openerp .oe_tags .text-wrap textarea { .openerp .oe_tags .text-wrap textarea {
width: 100% !important; width: 100% !important;
} }
.openerp .oe_tags .text-core {
min-height: 22px;
}
.openerp .oe_tags .text-core .text-wrap .text-dropdown .text-list .text-suggestion em { .openerp .oe_tags .text-core .text-wrap .text-dropdown .text-list .text-suggestion em {
font-style: italic; font-style: italic;
text-decoration: none; text-decoration: none;
@ -698,7 +701,6 @@
display: none; display: none;
position: absolute; position: absolute;
top: 26px; top: 26px;
left: 0;
z-index: 3; z-index: 3;
margin: 0; margin: 0;
padding: 0; padding: 0;
@ -1695,14 +1697,14 @@
top: 0; top: 0;
right: 18px; right: 18px;
width: 15px; width: 15px;
height: 100%; height: 24px;
background: url(../img/search_reset.gif) center center no-repeat; background: url(../img/search_reset.gif) center center no-repeat;
} }
.openerp .oe_searchview .oe_searchview_unfold_drawer { .openerp .oe_searchview .oe_searchview_unfold_drawer {
position: absolute; position: absolute;
top: 0; top: 0;
right: 0; right: 0;
height: 100%; height: 24px;
padding: 0 7px 0 4px; padding: 0 7px 0 4px;
color: #cccccc; color: #cccccc;
cursor: pointer; cursor: pointer;
@ -1751,7 +1753,7 @@
} }
.openerp .oe_searchview .oe_searchview_facets { .openerp .oe_searchview .oe_searchview_facets {
min-height: 22px; min-height: 22px;
margin-left: 15px; margin: 0 35px 0 15px;
} }
.openerp .oe_searchview .oe_searchview_facets * { .openerp .oe_searchview .oe_searchview_facets * {
vertical-align: top; vertical-align: top;
@ -1759,7 +1761,6 @@
line-height: 17px; line-height: 17px;
} }
.openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet { .openerp .oe_searchview .oe_searchview_facets .oe_searchview_facet {
height: 18px;
margin: 1px 0; margin: 1px 0;
font-size: 11px; font-size: 11px;
} }
@ -1838,6 +1839,7 @@
display: block; display: block;
} }
.openerp .oe_searchview .oe_searchview_drawer { .openerp .oe_searchview .oe_searchview_drawer {
cursor: default;
position: absolute; position: absolute;
z-index: 2; z-index: 2;
margin-top: 4px; margin-top: 4px;
@ -1990,7 +1992,6 @@
padding: 0; padding: 0;
} }
.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced li { .openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced li {
cursor: pointer;
position: relative; position: relative;
list-style: none; list-style: none;
margin: 0; margin: 0;
@ -2147,13 +2148,12 @@
.openerp .oe_form_readonly .oe_form .oe_form_field_date { .openerp .oe_form_readonly .oe_form .oe_form_field_date {
width: auto; width: auto;
} }
.openerp .oe_form_readonly .oe_form_field_boolean .boolean{ .openerp .oe_form_readonly .oe_form_field_boolean.boolean {
position: relative; position: relative;
top: -14px; top: -20px;
width: 14px; width: 14px;
height: 14px; height: 14px;
z-index:10000; z-index: 10000;
/* IE needs a color in order for the layer to respond to mouse events */
backgroundColor: "#fff"; backgroundColor: "#fff";
opacity: 0; opacity: 0;
} }
@ -2395,6 +2395,9 @@
.openerp .oe_form .oe_form_field_selection select { .openerp .oe_form .oe_form_field_selection select {
width: 100%; width: 100%;
} }
.openerp .oe_form .oe_notebook_page .oe_form_field_text textarea {
min-height: 96px;
}
.openerp .oe_form .oe_form_field_text.oe_inline, .openerp .oe_form .oe_form_field_text.oe_inline > textarea { .openerp .oe_form .oe_form_field_text.oe_inline, .openerp .oe_form .oe_form_field_text.oe_inline > textarea {
width: 500px; width: 500px;
} }
@ -2509,6 +2512,10 @@
margin-bottom: 32px; margin-bottom: 32px;
text-align: justify; text-align: justify;
} }
.openerp .oe_form .oe_form_field_html .oe_input_icon {
float: right;
margin: 4px 7px;
}
.openerp .oe_form_editable .oe_form .oe_form_field_integer input { .openerp .oe_form_editable .oe_form .oe_form_field_integer input {
width: 6em; width: 6em;
} }
@ -2997,7 +3004,6 @@
position: relative; position: relative;
} }
.openerp .oe_list_content th.oe_sortable div:after { .openerp .oe_list_content th.oe_sortable div:after {
float: right;
margin-right: 6px; margin-right: 6px;
content: ""; content: "";
margin-top: 7px; margin-top: 7px;
@ -3007,6 +3013,7 @@
visibility: hidden; visibility: hidden;
} }
.openerp .oe_list_content th.sortup div:after { .openerp .oe_list_content th.sortup div:after {
float: right;
visibility: visible; visibility: visible;
filter: alpha(opacity=60); filter: alpha(opacity=60);
opacity: 0.6; opacity: 0.6;
@ -3015,6 +3022,7 @@
min-width: 70px; min-width: 70px;
} }
.openerp .oe_list_content th.sortdown div:after { .openerp .oe_list_content th.sortdown div:after {
float: right;
border-bottom: none; border-bottom: none;
border-left: 4px solid transparent; border-left: 4px solid transparent;
border-right: 4px solid transparent; border-right: 4px solid transparent;

View File

@ -511,9 +511,11 @@ $sheet-padding: 16px
width: 100% !important width: 100% !important
textarea textarea
width: 100% !important width: 100% !important
.text-core .text-wrap .text-dropdown .text-list .text-suggestion em .text-core
font-style: italic min-height: 22px
text-decoration: none .text-wrap .text-dropdown .text-list .text-suggestion em
font-style: italic
text-decoration: none
margin-bottom: 1px margin-bottom: 1px
// }}} // }}}
// Tooltips {{{ // Tooltips {{{
@ -605,7 +607,6 @@ $sheet-padding: 16px
display: none display: none
position: absolute position: absolute
top: 26px top: 26px
left: 0
z-index: 3 z-index: 3
margin: 0 margin: 0
padding: 0 padding: 0
@ -1358,13 +1359,13 @@ $sheet-padding: 16px
top: 0 top: 0
right: 18px right: 18px
width: 15px width: 15px
height: 100% height: 24px
background: url(../img/search_reset.gif) center center no-repeat background: url(../img/search_reset.gif) center center no-repeat
.oe_searchview_unfold_drawer .oe_searchview_unfold_drawer
position: absolute position: absolute
top: 0 top: 0
right: 0 right: 0
height: 100% height: 24px
padding: 0 7px 0 4px padding: 0 7px 0 4px
color: #ccc color: #ccc
cursor: pointer cursor: pointer
@ -1397,13 +1398,12 @@ $sheet-padding: 16px
.oe_searchview_facets .oe_searchview_facets
min-height: 22px min-height: 22px
margin-left: 15px margin: 0 35px 0 15px
* *
vertical-align: top vertical-align: top
display: inline-block display: inline-block
line-height: 17px line-height: 17px
.oe_searchview_facet .oe_searchview_facet
height: 18px
margin: 1px 0 margin: 1px 0
font-size: 11px font-size: 11px
&:focus &:focus
@ -1425,7 +1425,7 @@ $sheet-padding: 16px
border-color: $tag-border-selected border-color: $tag-border-selected
@include box-shadow(0 0 3px 1px $tag-border-selected) @include box-shadow(0 0 3px 1px $tag-border-selected)
.oe_facet_values .oe_facet_values
background: #f0f0fa background: $tag-bg-light
@include radius(0 3px 3px 0) @include radius(0 3px 3px 0)
.oe_facet_category, .oe_facet_value .oe_facet_category, .oe_facet_value
height: 18px height: 18px
@ -1464,6 +1464,7 @@ $sheet-padding: 16px
display: block display: block
.oe_searchview_drawer .oe_searchview_drawer
cursor: default
position: absolute position: absolute
z-index: 2 z-index: 2
// detach drawer from field slightly // detach drawer from field slightly
@ -1581,7 +1582,6 @@ $sheet-padding: 16px
list-style: none list-style: none
padding: 0 padding: 0
li li
cursor: pointer
position: relative position: relative
list-style: none list-style: none
margin: 0 margin: 0
@ -1904,6 +1904,8 @@ $sheet-padding: 16px
.oe_form_field_text textarea, .oe_form_field_text textarea,
.oe_form_field_selection select .oe_form_field_selection select
width: 100% width: 100%
.oe_notebook_page .oe_form_field_text textarea
min-height: 96px
.oe_form_field_text.oe_inline, .oe_form_field_text.oe_inline > textarea .oe_form_field_text.oe_inline, .oe_form_field_text.oe_inline > textarea
width: 500px width: 500px
h1, h2, h3, h4, h5, h6 h1, h2, h3, h4, h5, h6
@ -1989,6 +1991,9 @@ $sheet-padding: 16px
margin-top: 32px margin-top: 32px
margin-bottom: 32px margin-bottom: 32px
text-align: justify text-align: justify
.oe_form_field_html .oe_input_icon
float: right
margin: 4px 7px
.oe_form_editable .oe_form_editable
.oe_form .oe_form
@ -2372,7 +2377,6 @@ $sheet-padding: 16px
th.oe_sortable div th.oe_sortable div
position: relative position: relative
th.oe_sortable div:after th.oe_sortable div:after
float: right
margin-right: 6px margin-right: 6px
content: "" content: ""
margin-top: 7px margin-top: 7px
@ -2381,11 +2385,13 @@ $sheet-padding: 16px
border-color: #000 transparent border-color: #000 transparent
visibility: hidden visibility: hidden
th.sortup div:after th.sortup div:after
float: right
visibility: visible visibility: visible
@include opacity(0.6) @include opacity(0.6)
.oe_list_header_many2many_tags .oe_list_header_many2many_tags
min-width: 70px min-width: 70px
th.sortdown div:after th.sortdown div:after
float: right
border-bottom: none border-bottom: none
border-left: 4px solid transparent border-left: 4px solid transparent
border-right: 4px solid transparent border-right: 4px solid transparent

0
addons/web/static/src/font/entypo-webfont.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

0
addons/web/static/src/font/mnmliconsv21-webfont.svg Executable file → Normal file
View File

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 822 B

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 395 B

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 486 B

After

Width:  |  Height:  |  Size: 419 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 B

After

Width:  |  Height:  |  Size: 125 B

Some files were not shown because too many files have changed in this diff Show More