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.
""",
'depends': [],
'depends': ['base'],
'auto_install': True,
'post_load': 'wsgi_postload',
'js' : [

View File

@ -32,6 +32,7 @@ except ImportError:
import openerp
import openerp.modules.registry
from openerp.tools.translate import _
from openerp.tools import config
from .. import http
http = http
@ -94,12 +95,7 @@ def db_monodb_redirect():
if request.params.get('db'):
return (db, False)
try:
dbs = db_list()
except Exception:
# ignore access denied
dbs = []
dbs = db_list(True)
# redirect to the chosen db if multiple are available
redirect = False
if db and len(dbs) > 1:
@ -263,8 +259,9 @@ def concat_files(file_list, reader=None, intersperse=""):
if reader is None:
def reader(f):
with open(f, 'rb') as fp:
return fp.read()
import codecs
with codecs.open(f, 'rb', "utf-8-sig") as fp:
return fp.read().encode("utf-8")
files_content = []
for fname in file_list:
@ -742,7 +739,14 @@ class Database(http.Controller):
@http.route('/web/database/get_list', type='json', auth="none")
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")
def create(self, fields):
@ -770,9 +774,12 @@ class Database(http.Controller):
password, db = operator.itemgetter(
'drop_pwd', 'drop_db')(
dict(map(operator.itemgetter('name', 'value'), fields)))
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:
return {'error': 'AccessDenied', 'title': 'Drop Database'}
except Exception:
@ -1344,7 +1351,7 @@ class Binary(http.Controller):
else:
try:
# create an empty registry
registry = openerp.modules.registry.Registry(dbname.lower())
registry = openerp.modules.registry.Registry(dbname)
with registry.cursor() as cr:
cr.execute("""SELECT c.logo_web
FROM res_users u
@ -1447,6 +1454,8 @@ class Export(http.Controller):
if all(dict(attrs).get('readonly', True)
for attrs in field.get('states', {}).values()):
continue
if not field.get('exportable', True):
continue
id = prefix + (prefix and '/'or '') + field_name
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():
try:
username = getpass.getuser()
except Exception:
username = "unknown"
import pwd
username = pwd.getpwuid(os.geteuid()).pw_name
except ImportError:
try:
username = getpass.getuser()
except Exception:
username = "unknown"
path = os.path.join(tempfile.gettempdir(), "oe-sessions-" + username)
try:
os.mkdir(path, 0700)
@ -1097,9 +1101,9 @@ class Root(object):
request.auth_method = getattr(original, "auth", "user")
request.func_request_type = original.exposed
def db_list():
def db_list(force=False):
proxy = request.session.proxy("db")
dbs = proxy.list()
dbs = proxy.list(force)
h = request.httprequest.environ['HTTP_HOST'].split(':')[0]
d = h.split('.')[0]
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 %
if (/auto|%/.test("" + options.width + options.height))
$(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
if(editor.$main.parent().parent().size()) {
refresh(editor);

View File

@ -7,7 +7,7 @@
* date.js // English (United States)
* date-en-US.js // English (United States)
* date-de-DE.js // Deutsch (Deutschland)
* date-es-MX.js // français (France)
* date-es-MX.js // français (France)
*/
alert(
@ -17,5 +17,5 @@ alert(
" date.js // English (United States)\n" +
" date-en-US.js // English (United States)\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
node: 142c22b230636674a0cee6bc29e6975f0f1600a5
node: 7ee0bc7b4e9138f485cdc9ec791961d8ef452f17
branch: default
latesttag: 0.7
latesttagdistance: 9
latesttagdistance: 11

View File

@ -273,7 +273,7 @@ var py = {};
var 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);
@ -311,7 +311,8 @@ var py = {};
} else if (string_pattern.test(token)) {
var m = string_pattern.exec(token);
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) {
var symbol;
@ -393,13 +394,14 @@ var py = {};
switch(val.constructor) {
case Object:
var out = py.PY_call(py.object);
for(var k in val) {
if (val.hasOwnProperty(k)) {
out[k] = val[k];
// TODO: why py.object instead of py.dict?
var o = py.PY_call(py.object);
for (var prop in val) {
if (val.hasOwnProperty(prop)) {
o[prop] = val[prop];
}
}
return out;
return o;
case Array:
return py.list.fromJSON(val);
}
@ -521,7 +523,7 @@ var py = {};
}
};
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) {
var v = o.__str__();
@ -762,14 +764,7 @@ var py = {};
// Conversion
toJSON: function () {
var out = {};
for(var k in this) {
if (this.hasOwnProperty(k) && !/^__/.test(k)) {
var val = this[k];
out[k] = val.toJSON ? val.toJSON() : val;
}
}
return out;
throw new Error(this.constructor.name + ' can not be converted to JSON');
}
});
var NoneType = py.type('NoneType', null, {
@ -998,7 +993,7 @@ var py = {};
}
var t = py.PY_call(py.tuple);
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;
}
@ -1032,7 +1027,7 @@ var py = {};
if (!d.hasOwnProperty(k)) { continue; }
instance.__setitem__(
py.str.fromJSON(k),
PY_ensurepy(d[k],k));
PY_ensurepy(d[k]));
}
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
var PY_operators = {
'==': ['eq', 'eq', function (a, b) { return a === b; }],
@ -1217,7 +1320,8 @@ var py = {};
}
return PY_ensurepy(val, expr.value);
case '(string)':
return py.str.fromJSON(expr.value);
return py.str.fromJSON(PY_decode_string_literal(
expr.value, expr.unicode));
case '(number)':
return py.float.fromJSON(expr.value);
case '(constant)':

View File

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

View File

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