[MERGE] latest trunk

bzr revid: ged@openerp.com-20131212085948-ntl7j40yl6815sye
This commit is contained in:
Gery Debongnie 2013-12-12 09:59:48 +01:00
commit edbc4d8927
381 changed files with 16948 additions and 3857 deletions

View File

@ -20,7 +20,6 @@ This module provides the core of the OpenERP Web Client.
"static/lib/datejs/sugarpak.js",
"static/lib/datejs/extras.js",
"static/lib/jquery/jquery.js",
"static/lib/jquery.MD5/jquery.md5.js",
"static/lib/jquery.form/jquery.form.js",
"static/lib/jquery.validate/jquery.validate.js",
"static/lib/jquery.ba-bbq/jquery.ba-bbq.js",
@ -66,6 +65,7 @@ This module provides the core of the OpenERP Web Client.
"static/lib/jquery.tipsy/tipsy.css",
"static/lib/jquery.textext/jquery.textext.css",
"static/lib/fontawesome/css/font-awesome.css",
"static/lib/bootstrap/css/bootstrap.css",
"static/src/css/base.css",
"static/src/css/data_export.css",
"static/lib/cleditor/jquery.cleditor.css",
@ -89,5 +89,4 @@ This module provides the core of the OpenERP Web Client.
"static/test/list-editable.js",
"static/test/mutex.js"
],
'bootstrap': True,
}

View File

@ -3,6 +3,7 @@
import ast
import base64
import csv
import functools
import glob
import itertools
import logging
@ -35,7 +36,9 @@ from openerp.tools.translate import _
from openerp.tools import config
from openerp import http
from openerp.http import request
from openerp.http import request, serialize_exception as _serialize_exception
_logger = logging.getLogger(__name__)
#----------------------------------------------------------
# OpenERP Web helpers
@ -89,17 +92,29 @@ db_list = http.db_list
db_monodb = http.db_monodb
def redirect_with_hash(url, code=303):
redirect_code = "<html><head><script>window.location = '%s' + location.hash;</script></head></html>" % url
if request.httprequest.user_agent.browser == 'msie':
def serialize_exception(f):
@functools.wraps(f)
def wrap(*args, **kwargs):
try:
version = float(request.httprequest.user_agent.version)
if version < 10:
return redirect_code
except Exception:
pass
elif request.httprequest.user_agent.browser == 'safari':
return redirect_code
return f(*args, **kwargs)
except Exception, e:
_logger.exception("An exception occured during an http request")
se = _serialize_exception(e)
error = {
'code': 200,
'message': "OpenERP Server Error",
'data': se
}
return werkzeug.exceptions.InternalServerError(simplejson.dumps(error))
return wrap
def redirect_with_hash(url, code=303):
if request.httprequest.user_agent.browser in ('msie', 'safari'):
# Most IE and Safari versions decided not to preserve location.hash upon
# redirect. And even if IE10 pretends to support it, it still fails
# inexplicably in case of multiple redirects (and we do have some).
# See extensive test page at http://greenbytes.de/tech/tc/httpredirects/
return "<html><head><script>window.location = '%s' + location.hash;</script></head></html>" % url
return werkzeug.utils.redirect(url, code)
def module_topological_sort(modules):
@ -546,14 +561,14 @@ class Home(http.Controller):
def redirect(db):
query = dict(urlparse.parse_qsl(request.httprequest.query_string, keep_blank_values=True))
query.update({'db': db})
query['db'] = db
redirect = request.httprequest.path + '?' + urllib.urlencode(query)
return redirect_with_hash(redirect)
if db is None and guessed_db is not None:
return redirect(guessed_db)
if db is not None and db != guessed_db:
if db is not None and db != request.session.db:
request.session.logout()
request.session.db = db
guessed_db = db
@ -1224,6 +1239,7 @@ class Binary(http.Controller):
return open(os.path.join(addons_path, 'web', 'static', 'src', 'img', image), 'rb').read()
@http.route('/web/binary/saveas', type='http', auth="user")
@serialize_exception
def saveas(self, model, field, id=None, filename_field=None, **kw):
""" Download link for files stored as binary fields.
@ -1257,6 +1273,7 @@ class Binary(http.Controller):
('Content-Disposition', content_disposition(filename))])
@http.route('/web/binary/saveas_ajax', type='http', auth="user")
@serialize_exception
def saveas_ajax(self, data, token):
jdata = simplejson.loads(data)
model = jdata['model']
@ -1290,6 +1307,7 @@ class Binary(http.Controller):
cookies={'fileToken': token})
@http.route('/web/binary/upload', type='http', auth="user")
@serialize_exception
def upload(self, callback, ufile):
# TODO: might be useful to have a configuration flag for max-length file uploads
out = """<script language="javascript" type="text/javascript">
@ -1305,6 +1323,7 @@ class Binary(http.Controller):
return out % (simplejson.dumps(callback), simplejson.dumps(args))
@http.route('/web/binary/upload_attachment', type='http', auth="user")
@serialize_exception
def upload_attachment(self, callback, model, id, ufile):
Model = request.session.model('ir.attachment')
out = """<script language="javascript" type="text/javascript">
@ -1594,6 +1613,7 @@ class ExportFormat(object):
class CSVExport(ExportFormat, http.Controller):
@http.route('/web/export/csv', type='http', auth="user")
@serialize_exception
def index(self, data, token):
return self.base(data, token)
@ -1631,6 +1651,7 @@ class CSVExport(ExportFormat, http.Controller):
class ExcelExport(ExportFormat, http.Controller):
@http.route('/web/export/xls', type='http', auth="user")
@serialize_exception
def index(self, data, token):
return self.base(data, token)
@ -1677,6 +1698,7 @@ class Reports(http.Controller):
}
@http.route('/web/report', type='http', auth="user")
@serialize_exception
def index(self, action, token):
action = simplejson.loads(action)

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
"X-Poedit-Language: Czech\n"
#. module: web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,15 +14,15 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:147
#, python-format
msgid "Default language:"
msgstr "Standardsprache:"
msgstr "Standard-Sprache:"
#. module: web
#. openerp-web
@ -75,7 +75,7 @@ msgstr "Master Passwort"
#: code:addons/web/static/src/xml/base.xml:292
#, python-format
msgid "Change Master Password"
msgstr "Hauptpasswort ändern"
msgstr "Master Passwort ändern"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web
@ -227,7 +227,7 @@ msgstr "Widget type '%s' is not implemented"
#: code:addons/web/static/src/xml/base.xml:1626
#, python-format
msgid "Share with all users"
msgstr ""
msgstr "Share with all users"
#. module: web
#. openerp-web
@ -468,7 +468,7 @@ msgstr "Take a minute to get a coffee,<br />because it's loading..."
#: code:addons/web/static/src/xml/base.xml:435
#, python-format
msgid "Activate the developer mode"
msgstr ""
msgstr "Activate the developer mode"
#. module: web
#. openerp-web
@ -1802,7 +1802,7 @@ msgstr "View Fields"
#: code:addons/web/static/src/xml/base.xml:348
#, python-format
msgid "Confirm New Password:"
msgstr ""
msgstr "Confirm New Password:"
#. module: web
#. openerp-web
@ -1860,7 +1860,7 @@ msgstr "OpenERP"
#: code:addons/web/doc/module/static/src/xml/web_example.xml:8
#, python-format
msgid "Stop"
msgstr ""
msgstr "Stop"
#. module: web
#. openerp-web
@ -1884,7 +1884,7 @@ msgstr "Uploading ..."
#: code:addons/web/static/src/xml/base.xml:1874
#, python-format
msgid "Name:"
msgstr ""
msgstr "Name:"
#. module: web
#. openerp-web
@ -1898,7 +1898,7 @@ msgstr "About"
#: code:addons/web/static/src/xml/base.xml:1457
#, python-format
msgid "Search Again"
msgstr ""
msgstr "Search Again"
#. module: web
#. openerp-web
@ -1931,13 +1931,15 @@ msgid ""
"Grouping on field '%s' is not possible because that field does not appear in "
"the list view."
msgstr ""
"Grouping on field '%s' is not possible because that field does not appear in "
"the list view."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:559
#, python-format
msgid "Set Defaults"
msgstr ""
msgstr "Set Defaults"
#. module: web
#. openerp-web
@ -1980,7 +1982,7 @@ msgstr "Type:"
#: code:addons/web/static/src/js/chrome.js:560
#, python-format
msgid "Incorrect super-administrator password"
msgstr ""
msgstr "Incorrect super-administrator password"
#. module: web
#. openerp-web
@ -1995,14 +1997,14 @@ msgstr "Object:"
#: code:addons/web/static/src/js/chrome.js:343
#, python-format
msgid "Loading"
msgstr ""
msgstr "Loading"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:599
#, python-format
msgid "about a year ago"
msgstr ""
msgstr "about a year ago"
#. module: web
#. openerp-web
@ -2022,13 +2024,15 @@ msgid ""
"The type of the field '%s' must be a many2many field with a relation to "
"'ir.attachment' model."
msgstr ""
"The type of the field '%s' must be a many2many field with a relation to "
"'ir.attachment' model."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:594
#, python-format
msgid "%d hours ago"
msgstr ""
msgstr "%d hours ago"
#. module: web
#. openerp-web
@ -2043,7 +2047,7 @@ msgstr "Add: "
#: code:addons/web/static/src/xml/base.xml:1879
#, python-format
msgid "Quick Add"
msgstr ""
msgstr "Quick Add"
#. module: web
#. openerp-web
@ -2070,7 +2074,7 @@ msgstr "Ok"
#: code:addons/web/static/src/js/views.js:1237
#, python-format
msgid "Uploading..."
msgstr ""
msgstr "Uploading..."
#. module: web
#. openerp-web
@ -2084,7 +2088,7 @@ msgstr "Load Demonstration data:"
#: code:addons/web/static/src/xml/base.xml:637
#, python-format
msgid "Created by :"
msgstr ""
msgstr "Created by :"
#. module: web
#. openerp-web
@ -2092,7 +2096,7 @@ msgstr ""
#: code:addons/web/static/src/js/dates.js:26
#, python-format
msgid "'%s' is not a valid datetime"
msgstr ""
msgstr "'%s' is not a valid datetime"
#. module: web
#. openerp-web
@ -2137,14 +2141,14 @@ msgstr "is true"
#: code:addons/web/static/src/js/view_form.js:4030
#, python-format
msgid "Add an item"
msgstr ""
msgstr "Add an item"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1621
#, python-format
msgid "Save current filter"
msgstr ""
msgstr "Save current filter"
#. module: web
#. openerp-web
@ -2172,14 +2176,14 @@ msgstr "Download \"%s\""
#: code:addons/web/static/src/js/view_form.js:325
#, python-format
msgid "New"
msgstr ""
msgstr "New"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_list.js:1777
#, python-format
msgid "Can't convert value %s to context"
msgstr ""
msgstr "Can't convert value %s to context"
#. module: web
#. openerp-web
@ -2245,34 +2249,34 @@ msgstr "is false"
#: code:addons/web/static/src/xml/base.xml:426
#, python-format
msgid "About OpenERP"
msgstr ""
msgstr "About OpenERP"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/formats.js:301
#, python-format
msgid "'%s' is not a correct date, datetime nor time"
msgstr ""
msgstr "'%s' is not a correct date, datetime nor time"
#. module: web
#: code:addons/web/controllers/main.py:1307
#, python-format
msgid "No content found for field '%s' on '%s:%s'"
msgstr ""
msgstr "No content found for field '%s' on '%s:%s'"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:322
#, python-format
msgid "Database Management"
msgstr ""
msgstr "Database Management"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5138
#, python-format
msgid "Image"
msgstr ""
msgstr "Image"
#. module: web
#. openerp-web
@ -2286,7 +2290,7 @@ msgstr "Manage Databases"
#: code:addons/web/static/src/js/pyeval.js:770
#, python-format
msgid "Evaluation Error"
msgstr ""
msgstr "Evaluation Error"
#. module: web
#. openerp-web
@ -2305,7 +2309,7 @@ msgstr "not a valid integer"
#: code:addons/web/static/src/xml/base.xml:1648
#, python-format
msgid "or"
msgstr ""
msgstr "or"
#. module: web
#. openerp-web
@ -2319,7 +2323,7 @@ msgstr "No"
#: code:addons/web/static/src/js/formats.js:313
#, python-format
msgid "'%s' is not convertible to date, datetime nor time"
msgstr ""
msgstr "'%s' is not convertible to date, datetime nor time"
#. module: web
#. openerp-web
@ -2337,21 +2341,21 @@ msgstr "Duplicate"
#: code:addons/web/static/src/xml/base.xml:1419
#, python-format
msgid "Discard"
msgstr ""
msgstr "Discard"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1642
#, python-format
msgid "Add a condition"
msgstr ""
msgstr "Add a condition"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:619
#, python-format
msgid "Still loading..."
msgstr ""
msgstr "Still loading..."
#. module: web
#. openerp-web
@ -2365,7 +2369,7 @@ msgstr "Incorrect value for field %(fieldname)s: [%(value)s] is %(message)s"
#: code:addons/web/static/src/js/view_form.js:3926
#, python-format
msgid "The o2m record must be saved before an action can be used"
msgstr ""
msgstr "The o2m record must be saved before an action can be used"
#. module: web
#. openerp-web
@ -2379,14 +2383,14 @@ msgstr "Backed"
#: code:addons/web/static/src/xml/base.xml:1628
#, python-format
msgid "Use by default"
msgstr ""
msgstr "Use by default"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_list.js:1358
#, python-format
msgid "%s (%d)"
msgstr ""
msgstr "%s (%d)"
#. module: web
#. openerp-web
@ -2400,7 +2404,7 @@ msgstr "triggered from search view"
#: code:addons/web/static/src/js/search.js:1079
#, python-format
msgid "Filter"
msgstr ""
msgstr "Filter"
#. module: web
#. openerp-web
@ -2442,14 +2446,14 @@ msgstr "Edit Workflow"
#: code:addons/web/static/src/js/views.js:1246
#, python-format
msgid "Do you really want to delete this attachment ?"
msgstr ""
msgstr "Do you really want to delete this attachment ?"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/views.js:914
#, python-format
msgid "Technical Translation"
msgstr ""
msgstr "Technical Translation"
#. module: web
#. openerp-web
@ -2463,21 +2467,21 @@ msgstr "Field:"
#: code:addons/web/static/src/xml/base.xml:642
#, python-format
msgid "Modified by :"
msgstr ""
msgstr "Modified by :"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:521
#, python-format
msgid "The database %s has been dropped"
msgstr ""
msgstr "The database %s has been dropped"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:482
#, python-format
msgid "User's timezone"
msgstr ""
msgstr "User's timezone"
#. module: web
#. openerp-web
@ -2492,7 +2496,7 @@ msgstr "Client Error"
#: code:addons/web/static/src/js/views.js:1073
#, python-format
msgid "Print"
msgstr ""
msgstr "Print"
#. module: web
#. openerp-web
@ -2507,6 +2511,7 @@ msgstr "Special:"
msgid ""
"The old password you provided is incorrect, your password was not changed."
msgstr ""
"The old password you provided is incorrect, your password was not changed."
#. module: web
#. openerp-web
@ -2534,7 +2539,7 @@ msgstr "Save & Close"
#: code:addons/web/static/src/js/view_form.js:2932
#, python-format
msgid "Search More..."
msgstr ""
msgstr "Search More..."
#. module: web
#. openerp-web
@ -2573,21 +2578,21 @@ msgstr "Select date"
#: code:addons/web/static/src/js/search.js:1369
#, python-format
msgid "Search %(field)s for: %(value)s"
msgstr ""
msgstr "Search %(field)s for: %(value)s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1305
#, python-format
msgid "Delete this file"
msgstr ""
msgstr "Delete this file"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:168
#, python-format
msgid "Create Database"
msgstr ""
msgstr "Create Database"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
"Language: es\n"
#. module: web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

2601
addons/web/i18n/es_PE.po Normal file

File diff suppressed because it is too large Load Diff

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web
@ -242,7 +242,7 @@ msgstr "Vorm"
#: code:addons/web/static/src/xml/base.xml:1352
#, python-format
msgid "(no string)"
msgstr ""
msgstr "(ei ole rida)"
#. module: web
#. openerp-web
@ -962,7 +962,7 @@ msgstr "Salasõna on edukalt muudetud"
#: code:addons/web/static/src/js/view_list_editable.js:793
#, python-format
msgid "The form's data can not be discarded"
msgstr ""
msgstr "Vormi andmed tuleb salvestada"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web
@ -36,7 +36,7 @@ msgstr "%d minuuttia sitten"
#: code:addons/web/static/src/js/coresetup.js:620
#, python-format
msgid "Still loading...<br />Please be patient."
msgstr "Ladataan...<br />Olkaa hyvä ja odottakaa."
msgstr "Ladataan edelleen...<br />Ole hyvä ja odota."
#. module: web
#. openerp-web
@ -192,7 +192,7 @@ msgstr "Valitse"
#: code:addons/web/static/src/js/chrome.js:571
#, python-format
msgid "Database restored successfully"
msgstr "Tietokanta palautettu"
msgstr "Tietokanta palautettu onnistuneesti"
#. module: web
#. openerp-web
@ -206,21 +206,21 @@ msgstr "Versio"
#: code:addons/web/static/src/xml/base.xml:592
#, python-format
msgid "Latest Modification Date:"
msgstr "Viimeisin muutospäivämäärä:"
msgstr "Viimeisin muokkauspäivä:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/search.js:1566
#, python-format
msgid "M2O search fields do not currently handle multiple default values"
msgstr "Monesta yhteen hakukentät eivät salli useita oletusarvoja."
msgstr "Monesta-yhteen -hakukentät eivät salli useita oletusarvoja."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:1241
#, python-format
msgid "Widget type '%s' is not implemented"
msgstr "Pienohjelman tyyppiä '%s' ei ole asennettu"
msgstr "Sovelmatyyppiä \"%s\" ei ole asennettu"
#. module: web
#. openerp-web
@ -384,7 +384,7 @@ msgstr "Ryhmä"
#: code:addons/web/static/src/xml/base.xml:949
#, python-format
msgid "Unhandled widget"
msgstr "Käsittelemätön widgetti"
msgstr "Käsittelemätön sovelma"
#. module: web
#. openerp-web
@ -896,7 +896,7 @@ msgstr "Väärä formaatti: %s"
#: code:addons/web/static/src/xml/base.xml:203
#, python-format
msgid "Drop Database"
msgstr "Pudota Tietokanta"
msgstr "Poista tietokonta"
#. module: web
#. openerp-web
@ -1213,7 +1213,7 @@ msgstr "%d kuukautta sitten"
#: code:addons/web/static/src/xml/base.xml:326
#, python-format
msgid "Drop"
msgstr "Pudota"
msgstr "Poista"
#. module: web
#. openerp-web
@ -1557,7 +1557,7 @@ msgstr "Puu"
#: code:addons/web/controllers/main.py:793
#, python-format
msgid "Could not drop database !"
msgstr "Älä pudota tietokantaa !"
msgstr "Älä poista tietokantaa!"
#. module: web
#. openerp-web
@ -1599,7 +1599,7 @@ msgstr "Tarkempi haku..."
#: code:addons/web/static/src/js/chrome.js:521
#, python-format
msgid "Dropping database"
msgstr "Pudottaa tietokantaa"
msgstr "Poistaa tietokannan"
#. module: web
#. openerp-web
@ -2409,7 +2409,7 @@ msgstr "Suodatin"
#: code:addons/web/static/src/xml/base.xml:972
#, python-format
msgid "Widget:"
msgstr "Widgetti"
msgstr "Sovelma:"
#. module: web
#. openerp-web
@ -2472,7 +2472,7 @@ msgstr "Muokkaaja:"
#: code:addons/web/static/src/js/chrome.js:521
#, python-format
msgid "The database %s has been dropped"
msgstr "Tietokanta %s on pudotettu"
msgstr "Tietokanta %s on poistettu"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web
@ -36,7 +36,7 @@ msgstr "%d分前"
#: code:addons/web/static/src/js/coresetup.js:620
#, python-format
msgid "Still loading...<br />Please be patient."
msgstr ""
msgstr "引き続き読込中...<br />今しばらくお待ちください。"
#. module: web
#. openerp-web
@ -75,14 +75,14 @@ msgstr "マスタパスワード:"
#: code:addons/web/static/src/xml/base.xml:292
#, python-format
msgid "Change Master Password"
msgstr ""
msgstr "マスターパスワードを変更"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:513
#, python-format
msgid "Do you really want to delete the database: %s ?"
msgstr ""
msgstr "データベース %s を本当に削除しますか?"
#. module: web
#. openerp-web
@ -96,7 +96,7 @@ msgstr "%(field)s の検索:%(value)s"
#: code:addons/web/static/src/js/chrome.js:559
#, python-format
msgid "Access Denied"
msgstr ""
msgstr "アクセスが拒否されました。"
#. module: web
#. openerp-web
@ -119,7 +119,7 @@ msgstr "1時間前"
#: code:addons/web/static/src/xml/base.xml:234
#, python-format
msgid "Backup Database"
msgstr ""
msgstr "データベースをバックアップ"
#. module: web
#. openerp-web
@ -227,7 +227,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:1626
#, python-format
msgid "Share with all users"
msgstr "全てのユーザと共有"
msgstr "全ユーザと共有"
#. module: web
#. openerp-web
@ -270,7 +270,7 @@ msgstr "新しいパスワード:"
#: code:addons/web/static/src/xml/base.xml:632
#, python-format
msgid "Attachment :"
msgstr ""
msgstr "添付:"
#. module: web
#. openerp-web
@ -475,7 +475,7 @@ msgstr "開発者モードを有効化"
#: code:addons/web/static/src/js/chrome.js:341
#, python-format
msgid "Loading (%d)"
msgstr "ロード中 (%d)"
msgstr "読込中(%d)"
#. module: web
#. openerp-web
@ -559,7 +559,7 @@ msgstr ""
#: code:addons/web/static/src/js/view_form.js:2955
#, python-format
msgid "Create and Edit..."
msgstr ""
msgstr "登録・編集..."
#. module: web
#. openerp-web
@ -587,7 +587,7 @@ msgstr "は次ではない"
#: code:addons/web/static/src/xml/base.xml:572
#, python-format
msgid "Print Workflow"
msgstr ""
msgstr "印刷ワークフロー"
#. module: web
#. openerp-web
@ -608,7 +608,7 @@ msgstr "UTF-8"
#: code:addons/web/static/src/xml/base.xml:443
#, python-format
msgid "For more information visit"
msgstr "もっと詳しい情報はこちらへ"
msgstr "詳細の確認はこちらにて:"
#. module: web
#. openerp-web
@ -818,7 +818,7 @@ msgstr "区切り文字:"
#: code:addons/web/static/src/xml/base.xml:484
#, python-format
msgid "Browser's timezone"
msgstr ""
msgstr "ブラウザタイムゾーン"
#. module: web
#. openerp-web
@ -966,7 +966,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:555
#, python-format
msgid "Debug View#"
msgstr "ビューをデバッグ"
msgstr "デバッグ対象ビュー#"
#. module: web
#. openerp-web
@ -1074,7 +1074,7 @@ msgstr "検索"
#: code:addons/web/static/src/js/view_form.js:4482
#, python-format
msgid "Open: "
msgstr "開く: "
msgstr "オープン: "
#. module: web
#. openerp-web
@ -1137,7 +1137,7 @@ msgstr "キャンセル"
#: code:addons/web/static/src/xml/base.xml:9
#, python-format
msgid "Loading..."
msgstr "読込中..."
msgstr "読込中..."
#. module: web
#. openerp-web
@ -1151,7 +1151,7 @@ msgstr "最終更新者:"
#: code:addons/web/static/src/xml/base.xml:492
#, python-format
msgid "Timezone mismatch"
msgstr ""
msgstr "タイムゾーン不一致"
#. module: web
#. openerp-web
@ -1240,7 +1240,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:442
#, python-format
msgid "Licenced under the terms of"
msgstr "ライセンスに準拠"
msgstr "準拠ライセンス:"
#. module: web
#. openerp-web
@ -1305,7 +1305,7 @@ msgstr "少なくとも1つのレコードを選んで下さい。"
#: code:addons/web/static/src/js/coresetup.js:621
#, python-format
msgid "Don't leave yet,<br />it's still loading..."
msgstr ""
msgstr "しばしご辛抱を。<br />引き続き読込中です..."
#. module: web
#. openerp-web
@ -1354,7 +1354,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:463
#, python-format
msgid "Edit Company data"
msgstr ""
msgstr "会社データを編集"
#. module: web
#. openerp-web
@ -1597,7 +1597,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:467
#, python-format
msgid "Powered by"
msgstr "で動く"
msgstr "Powered by"
#. module: web
#. openerp-web
@ -1879,7 +1879,7 @@ msgstr ""
#: code:addons/web/static/src/js/chrome.js:1165
#, python-format
msgid "About"
msgstr "について"
msgstr "概要"
#. module: web
#. openerp-web
@ -2123,7 +2123,7 @@ msgstr "は正しい"
#: code:addons/web/static/src/js/view_form.js:4030
#, python-format
msgid "Add an item"
msgstr ""
msgstr "項目を追加"
#. module: web
#. openerp-web
@ -2203,7 +2203,7 @@ msgstr "ボタン"
#: code:addons/web/static/src/xml/base.xml:440
#, python-format
msgid "OpenERP is a trademark of the"
msgstr "OpenERPは商標です"
msgstr "OpenERPの商標帰属:"
#. module: web
#. openerp-web
@ -2265,7 +2265,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:81
#, python-format
msgid "Manage Databases"
msgstr "データベース管理"
msgstr "データベース管理"
#. module: web
#. openerp-web
@ -2330,14 +2330,14 @@ msgstr "破棄"
#: code:addons/web/static/src/xml/base.xml:1642
#, python-format
msgid "Add a condition"
msgstr "条件追加"
msgstr "条件追加"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:619
#, python-format
msgid "Still loading..."
msgstr ""
msgstr "引き続き読込..."
#. module: web
#. openerp-web
@ -2365,7 +2365,7 @@ msgstr "バックアップされました"
#: code:addons/web/static/src/xml/base.xml:1628
#, python-format
msgid "Use by default"
msgstr ""
msgstr "デフォルト使用"
#. module: web
#. openerp-web
@ -2463,7 +2463,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:482
#, python-format
msgid "User's timezone"
msgstr ""
msgstr "ユーザタイムゾーン"
#. module: web
#. openerp-web
@ -2520,7 +2520,7 @@ msgstr "保存して閉じる"
#: code:addons/web/static/src/js/view_form.js:2932
#, python-format
msgid "Search More..."
msgstr ""
msgstr "さらに検索..."
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web
@ -119,7 +119,7 @@ msgstr "ongeveer 1 uur geleden"
#: code:addons/web/static/src/xml/base.xml:234
#, python-format
msgid "Backup Database"
msgstr "Back-up database"
msgstr "Backup Database"
#. module: web
#. openerp-web
@ -177,7 +177,7 @@ msgstr "Ongeldige gebruikersnaam of wachtwoord"
#: code:addons/web/static/src/xml/base.xml:278
#, python-format
msgid "Master Password:"
msgstr "Hoofdwachtwoord"
msgstr "Hoofdwachtwoord:"
#. module: web
#. openerp-web
@ -213,14 +213,14 @@ msgstr "Laatst datum aangepast:"
#: code:addons/web/static/src/js/search.js:1566
#, python-format
msgid "M2O search fields do not currently handle multiple default values"
msgstr "M2O zoek velden behandelen momenteel geen meerdere standaard waardes"
msgstr "M2O zoek velden kunnen momenteel geen meerdere standaard waardes aan"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:1241
#, python-format
msgid "Widget type '%s' is not implemented"
msgstr "Widget type '%s' is niet geimplementeerd"
msgstr "Widget type '%s' is niet geïmplementeerd"
#. module: web
#. openerp-web
@ -284,14 +284,14 @@ msgstr "Te exporteren velden"
#: code:addons/web/static/src/js/view_list.js:1350
#, python-format
msgid "Undefined"
msgstr "Onbepaald"
msgstr "Niet gedefinieerd"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5002
#, python-format
msgid "File Upload"
msgstr "Bestand upload"
msgstr "Bestand uploaden"
#. module: web
#. openerp-web
@ -326,7 +326,7 @@ msgstr "OpenERP SA"
#: code:addons/web/static/src/js/search.js:1663
#, python-format
msgid "Custom Filter"
msgstr "Aangepaste Filter"
msgstr "Aangepast filter"
#. module: web
#. openerp-web
@ -370,7 +370,7 @@ msgstr "Downloaden"
#: code:addons/web/static/src/js/formats.js:270
#, python-format
msgid "'%s' is not a correct datetime"
msgstr "'%s' is geen geldinge datum/tijd"
msgstr "'%s' is geen geldige datum/tijd"
#. module: web
#. openerp-web
@ -432,7 +432,7 @@ msgstr "Het was niet mogelijk om de database te herstellen"
#: code:addons/web/static/src/js/view_form.js:4982
#, python-format
msgid "File upload"
msgstr "Bestand upload"
msgstr "Bestand uploaden"
#. module: web
#. openerp-web
@ -461,7 +461,8 @@ msgstr "bevat"
#: code:addons/web/static/src/js/coresetup.js:623
#, python-format
msgid "Take a minute to get a coffee,<br />because it's loading..."
msgstr "Neem een minuutje voor een koffie,<br />want het is aan het laden..."
msgstr ""
"Neem een minuutje om koffie te halen,<br />want het is aan het laden..."
#. module: web
#. openerp-web
@ -489,7 +490,7 @@ msgstr "Groepeer op"
#: code:addons/web/static/src/js/view_list.js:699
#, python-format
msgid "You must select at least one record."
msgstr "U dient tenminste één record te selecteren"
msgstr "U dient tenminste één record te selecteren."
#. module: web
#. openerp-web
@ -503,7 +504,7 @@ msgstr "Weergeven Log (perm_read)"
#: code:addons/web/static/src/js/view_form.js:1071
#, python-format
msgid "Set Default"
msgstr "Gebruik als standaard"
msgstr "Als standaard instellen"
#. module: web
#. openerp-web
@ -552,7 +553,7 @@ msgstr "Teruggezet"
#: code:addons/web/static/src/js/view_list.js:409
#, python-format
msgid "%d-%d of %d"
msgstr "%d-%d of %d"
msgstr "%d-%d van %d"
#. module: web
#. openerp-web
@ -594,7 +595,7 @@ msgstr "Afdrukken Workflow"
#: code:addons/web/static/src/js/chrome.js:413
#, python-format
msgid "Please confirm your new password"
msgstr "Bevestig uw wachtwoord"
msgstr "Bevestig uw nieuwe wachtwoord"
#. module: web
#. openerp-web
@ -681,7 +682,7 @@ msgstr "Filter opslaan"
#: code:addons/web/static/src/xml/base.xml:1372
#, python-format
msgid "Action ID:"
msgstr "Action ID:"
msgstr "Actie ID:"
#. module: web
#. openerp-web
@ -869,7 +870,7 @@ msgstr "OpenERP.com"
#: code:addons/web/static/src/js/view_form.js:2349
#, python-format
msgid "Can't send email to invalid e-mail address"
msgstr "Kan de e-mail niet versturen. Het adres is ongelding."
msgstr "Kan geen email versturen naar ongeldig emailadres"
#. module: web
#. openerp-web
@ -958,7 +959,7 @@ msgstr "Dupliceer database"
#: code:addons/web/static/src/js/chrome.js:585
#, python-format
msgid "Password has been changed successfully"
msgstr "Uw wachtwoord is succesvol gewijzigd."
msgstr "Wachtwoord is succesvol gewijzigd"
#. module: web
#. openerp-web
@ -1000,7 +1001,7 @@ msgid ""
"\n"
"%s"
msgstr ""
"Locale evaluatie fout\n"
"Lokale evaluatie fout\n"
"%s\n"
"\n"
"%s"
@ -1238,7 +1239,7 @@ msgstr "Het nieuwe wachtwoord en haar bevestiging moeten identiek zijn."
#: code:addons/web/static/src/xml/base.xml:266
#, python-format
msgid "Restore Database"
msgstr "Herstel database"
msgstr "Database terugplaatsen"
#. module: web
#. openerp-web
@ -1707,7 +1708,7 @@ msgstr "Het veld is leeg. Er is niets om op te slaan!"
#: code:addons/web/static/src/xml/base.xml:567
#, python-format
msgid "Manage Views"
msgstr "Weergaven beheren"
msgstr "Weergaves beheren"
#. module: web
#. openerp-web
@ -1735,7 +1736,7 @@ msgstr "Aanmaken \"<strong>%s</strong>\""
#: code:addons/web/static/src/js/data_export.js:362
#, python-format
msgid "Please select fields to save export list..."
msgstr "Selecteer aub velden voor opslaan export lijst"
msgstr "Selecteer velden voor opslaan export lijst..."
#. module: web
#. openerp-web
@ -2037,7 +2038,7 @@ msgstr ""
#: code:addons/web/static/src/js/coresetup.js:594
#, python-format
msgid "%d hours ago"
msgstr "%d uren geleden"
msgstr "%d uur geleden"
#. module: web
#. openerp-web
@ -2101,7 +2102,7 @@ msgstr "Aangemaakt door:"
#: code:addons/web/static/src/js/dates.js:26
#, python-format
msgid "'%s' is not a valid datetime"
msgstr "'%s' is geen correcte datum/tijd"
msgstr "'%s' is geen geldige datum/tijd"
#. module: web
#. openerp-web
@ -2233,7 +2234,7 @@ msgstr "OpenERP is een handelsmerk van"
#: code:addons/web/static/src/js/data_export.js:375
#, python-format
msgid "Please select fields to export..."
msgstr "Selecteer velden voor export"
msgstr "Selecteer velden om te exporteren..."
#. module: web
#. openerp-web
@ -2376,7 +2377,8 @@ msgstr "Onjuiste waarde bij veld %(fieldname)s: [%(value)s] is %(message)s"
#, python-format
msgid "The o2m record must be saved before an action can be used"
msgstr ""
"Het O2M record dient bewaard te worden alvorens een actie kan gebruikt worden"
"Het o2m record dient opgeslagen te worden alvorens een actie kan worden "
"gebruikt"
#. module: web
#. openerp-web
@ -2510,7 +2512,7 @@ msgstr "Afdrukken"
#: code:addons/web/static/src/xml/base.xml:1359
#, python-format
msgid "Special:"
msgstr "Special:"
msgstr "Speciaal:"
#. module: web
#: code:addons/web/controllers/main.py:877
@ -2518,7 +2520,7 @@ msgstr "Special:"
msgid ""
"The old password you provided is incorrect, your password was not changed."
msgstr ""
"Het oude wachtwoord wat u heft ingevoerd is niet correct. Uw wachtwoord is "
"Het oude wachtwoord wat u heeft ingevoerd is niet correct. Uw wachtwoord is "
"niet gewijzigd."
#. module: web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web
@ -999,6 +999,10 @@ msgid ""
"\n"
"%s"
msgstr ""
"Lokalny błąd oceny\n"
"%s\n"
"\n"
"%s"
#. module: web
#. openerp-web
@ -2020,6 +2024,8 @@ msgid ""
"The type of the field '%s' must be a many2many field with a relation to "
"'ir.attachment' model."
msgstr ""
"Typ pola '%s' musi być typem \"wiele do wielu pól\" w relacji do modelu "
"'ir.attachment'."
#. module: web
#. openerp-web
@ -2156,7 +2162,7 @@ msgstr "Potwierdź"
#: code:addons/web/static/src/js/data_export.js:127
#, python-format
msgid "Please enter save field list name"
msgstr ""
msgstr "Proszę wprowadźić nazwę zapisywej listy pól"
#. module: web
#. openerp-web
@ -2185,7 +2191,7 @@ msgstr "Nie mozna skonwertować wartości %s do kontekstu"
#: code:addons/web/static/src/xml/base.xml:563
#, python-format
msgid "Fields View Get"
msgstr ""
msgstr "Pobierz widok pól"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -10,13 +10,13 @@ msgstr ""
"POT-Creation-Date: 2012-12-21 17:06+0000\n"
"PO-Revision-Date: 2012-12-16 22:21+0000\n"
"Last-Translator: Fábio Martinelli - http://zupy.com.br "
"<webmaster@guaru.net>\n"
"<webmaster@zupy.com.br>\n"
"Language-Team: Brazilian Portuguese <pt_BR@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web
@ -185,7 +185,7 @@ msgstr "Parolă Administrator:"
#: code:addons/web/static/src/xml/base.xml:1402
#, python-format
msgid "Select"
msgstr "Selectează"
msgstr "Selectați"
#. module: web
#. openerp-web
@ -419,7 +419,7 @@ msgstr "...Descărcare în curs..."
#: code:addons/web/static/src/xml/base.xml:1789
#, python-format
msgid "Import"
msgstr "Importă"
msgstr "Importați"
#. module: web
#. openerp-web
@ -1507,7 +1507,7 @@ msgstr "nu conține"
#: code:addons/web/static/src/xml/base.xml:1806
#, python-format
msgid "Import Options"
msgstr "Importă Opțiuni"
msgstr "Opțiuni Import"
#. module: web
#. openerp-web
@ -1658,7 +1658,7 @@ msgstr "---Nu Importa ---"
#: code:addons/web/static/src/xml/base.xml:1697
#, python-format
msgid "Import-Compatible Export"
msgstr "Import-Export Compatibil"
msgstr "Compatibil Import-Export"
#. module: web
#. openerp-web
@ -2579,7 +2579,7 @@ msgstr "Elimină"
#: code:addons/web/static/src/xml/base.xml:1090
#, python-format
msgid "Select date"
msgstr "Selectează data"
msgstr "Selectați data"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:50+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web
@ -75,7 +75,7 @@ msgstr "Мастер-пароль:"
#: code:addons/web/static/src/xml/base.xml:292
#, python-format
msgid "Change Master Password"
msgstr "Изменить главный пароль"
msgstr "Изменить Мастер-пароль"
#. module: web
#. openerp-web
@ -96,7 +96,7 @@ msgstr "Искать %(field)s в: %(value)s"
#: code:addons/web/static/src/js/chrome.js:559
#, python-format
msgid "Access Denied"
msgstr "Доступ запрещен"
msgstr "Доступ запрещён"
#. module: web
#. openerp-web
@ -134,7 +134,7 @@ msgstr "%(view_type)s вид"
#: code:addons/web/static/src/js/dates.js:53
#, python-format
msgid "'%s' is not a valid date"
msgstr "%s не является допустимой датой"
msgstr "'%s' - недопустимая дата"
#. module: web
#. openerp-web
@ -214,7 +214,7 @@ msgstr "Дата изменения:"
#, python-format
msgid "M2O search fields do not currently handle multiple default values"
msgstr ""
"M2O поля поиска в настоящее время не работать с несколькими значениями по "
"Поля поиска M2O в настоящее время не работают с несколькими значениями по "
"умолчанию"
#. module: web
@ -335,7 +335,7 @@ msgstr "Настраиваемый фильтр"
#: code:addons/web/static/src/xml/base.xml:177
#, python-format
msgid "Duplicate Database"
msgstr "Дублровать базу данных"
msgstr "Дублировать базу данных"
#. module: web
#. openerp-web
@ -365,7 +365,7 @@ msgstr "Тип вида '%s' не поддерживается в one2many"
#: code:addons/web/static/src/js/view_list.js:2204
#, python-format
msgid "Download"
msgstr "Загрузить"
msgstr "Скачать"
#. module: web
#. openerp-web
@ -892,7 +892,7 @@ msgstr "Настройки"
#: code:addons/web/static/src/js/view_form.js:435
#, python-format
msgid "Wrong on change format: %s"
msgstr "Неправильный или измененный формат: %s"
msgstr "Ошибка при изменении формата: %s"
#. module: web
#. openerp-web
@ -1289,7 +1289,7 @@ msgstr "Группировать по: %s"
#: code:addons/web/static/src/js/view_form.js:154
#, python-format
msgid "No data provided."
msgstr "Нет предоставленных данных."
msgstr "Нет данных."
#. module: web
#. openerp-web
@ -1318,7 +1318,7 @@ msgstr "Вы должны выбрать хотя бы одну запись."
#: code:addons/web/static/src/js/coresetup.js:621
#, python-format
msgid "Don't leave yet,<br />it's still loading..."
msgstr "Не уходите,<br />она по-прежнему загружается ..."
msgstr "Не уходите,<br />загрузка продолжается ..."
#. module: web
#. openerp-web
@ -1360,7 +1360,7 @@ msgstr "%(page)d/%(page_count)d"
#: code:addons/web/static/src/js/chrome.js:414
#, python-format
msgid "The confirmation does not match the password"
msgstr "Подтверждение должно совпадать с паролем"
msgstr "Подтверждение не совпадает с паролем"
#. module: web
#. openerp-web
@ -1441,7 +1441,7 @@ msgstr "Изменить по умолчанию:"
#: code:addons/web/static/src/xml/base.xml:189
#, python-format
msgid "Original database name:"
msgstr "Оригинальное название базы данных:"
msgstr "название исходной базы данных:"
#. module: web
#. openerp-web
@ -1451,7 +1451,7 @@ msgstr "Оригинальное название базы данных:"
#: code:addons/web/static/src/js/search.js:2119
#, python-format
msgid "is equal to"
msgstr "соответствует"
msgstr "равно"
#. module: web
#. openerp-web
@ -1694,7 +1694,7 @@ msgstr "Название новой базы данных:"
#: code:addons/web/static/src/js/chrome.js:411
#, python-format
msgid "Please enter your new password"
msgstr "Пожалуйста введите ваш новый пароль"
msgstr "Введите новый пароль"
#. module: web
#. openerp-web
@ -1772,7 +1772,7 @@ msgstr "Импорт не выполнен по причине:"
#: code:addons/web/static/src/xml/base.xml:561
#, python-format
msgid "JS Tests"
msgstr "JS тест"
msgstr "Тесты JS"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:02+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:49+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web
@ -227,7 +227,7 @@ msgstr "Widgettypen '%s' är inte implementerad"
#: code:addons/web/static/src/xml/base.xml:1626
#, python-format
msgid "Share with all users"
msgstr ""
msgstr "Dela med alla användare"
#. module: web
#. openerp-web
@ -305,7 +305,7 @@ msgstr "ungefär en månad sedan"
#: code:addons/web/static/src/xml/base.xml:1618
#, python-format
msgid "Custom Filters"
msgstr ""
msgstr "Anpassade filter"
#. module: web
#. openerp-web
@ -326,14 +326,14 @@ msgstr "OpenERP SA Company"
#: code:addons/web/static/src/js/search.js:1663
#, python-format
msgid "Custom Filter"
msgstr ""
msgstr "Anpassat filter"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:177
#, python-format
msgid "Duplicate Database"
msgstr ""
msgstr "Duplicerad databas"
#. module: web
#. openerp-web
@ -355,7 +355,7 @@ msgstr "Ändra lösenord"
#: code:addons/web/static/src/js/view_form.js:3528
#, python-format
msgid "View type '%s' is not supported in One2Many."
msgstr ""
msgstr "Vytyp '%s' stöds inte i One2Many."
#. module: web
#. openerp-web
@ -461,7 +461,7 @@ msgstr "innehåller"
#: code:addons/web/static/src/js/coresetup.js:623
#, python-format
msgid "Take a minute to get a coffee,<br />because it's loading..."
msgstr ""
msgstr "Ta en paus för en kaffe,<br/>därför den laddar..."
#. module: web
#. openerp-web
@ -538,7 +538,7 @@ msgstr "Felaktig operator %s i domän %s"
#: code:addons/web/static/src/js/formats.js:246
#, python-format
msgid "'%s' is not a correct float"
msgstr ""
msgstr "'%s' är inte en korrekt \"float\""
#. module: web
#. openerp-web
@ -643,7 +643,7 @@ msgstr "Modell %s fält"
#: code:addons/web/static/src/js/view_list.js:906
#, python-format
msgid "Setting 'id' attribute on existing record %s"
msgstr ""
msgstr "Anger 'id' egenskapen på existerande post %s"
#. module: web
#. openerp-web
@ -695,7 +695,7 @@ msgstr "Ditt kontos inställda tidszon stämmer ej med webbläsarens tidszon."
#: code:addons/web/static/src/js/view_form.js:1237
#, python-format
msgid "Field '%s' specified in view could not be found."
msgstr ""
msgstr "Fält '%s' angivet i vyn kan inte hittas"
#. module: web
#. openerp-web
@ -723,7 +723,7 @@ msgstr ""
#: code:addons/web/static/src/js/chrome.js:503
#, python-format
msgid "The database has been duplicated."
msgstr ""
msgstr "Databasen har duplicerats"
#. module: web
#. openerp-web
@ -791,6 +791,9 @@ msgid ""
"\n"
"Are you sure you want to leave this page ?"
msgstr ""
"Varning, posten har ändrats och dina ändringar kommer att försvinna\n"
"\n"
"Är du säker på att du vill lämna sidan?"
#. module: web
#. openerp-web
@ -818,14 +821,14 @@ msgstr "Avgränsare:"
#: code:addons/web/static/src/xml/base.xml:484
#, python-format
msgid "Browser's timezone"
msgstr ""
msgstr "Webbläsarens tidszon"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1623
#, python-format
msgid "Filter name"
msgstr ""
msgstr "Filternamn"
#. module: web
#. openerp-web
@ -870,7 +873,7 @@ msgstr "Kan inte skicka e-post till felaktig adress"
#: code:addons/web/static/src/xml/base.xml:658
#, python-format
msgid "Add..."
msgstr ""
msgstr "Lägg till..."
#. module: web
#. openerp-web
@ -884,7 +887,7 @@ msgstr "Inställningar"
#: code:addons/web/static/src/js/view_form.js:435
#, python-format
msgid "Wrong on change format: %s"
msgstr ""
msgstr "Felaktig ändring av format: %s"
#. module: web
#. openerp-web
@ -892,14 +895,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:203
#, python-format
msgid "Drop Database"
msgstr ""
msgstr "Ta bort databas"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:488
#, python-format
msgid "Click here to change your user's timezone."
msgstr ""
msgstr "Klicka här för att ändra din användares tidzon"
#. module: web
#. openerp-web
@ -913,7 +916,7 @@ msgstr "Modifierare:"
#: code:addons/web/static/src/xml/base.xml:649
#, python-format
msgid "Delete this attachment"
msgstr ""
msgstr "Ta bort denna bilaga"
#. module: web
#. openerp-web
@ -931,7 +934,7 @@ msgstr "Spara"
#: code:addons/web/static/src/xml/base.xml:370
#, python-format
msgid "More"
msgstr ""
msgstr "Fler"
#. module: web
#. openerp-web
@ -945,14 +948,14 @@ msgstr "Användarnamn"
#: code:addons/web/static/src/js/chrome.js:503
#, python-format
msgid "Duplicating database"
msgstr ""
msgstr "Duplicerar databas"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:585
#, python-format
msgid "Password has been changed successfully"
msgstr ""
msgstr "Lösenordet har ändrats"
#. module: web
#. openerp-web
@ -1014,7 +1017,7 @@ msgstr "Spara fältlista"
#: code:addons/web/doc/module/static/src/xml/web_example.xml:5
#, python-format
msgid "Start"
msgstr ""
msgstr "Start"
#. module: web
#. openerp-web
@ -1035,14 +1038,14 @@ msgstr "Datum skapad:"
#: code:addons/web/controllers/main.py:878
#, python-format
msgid "Error, password not changed !"
msgstr ""
msgstr "Fel! Lösenord ej ändrat!"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:4981
#, python-format
msgid "The selected file exceed the maximum file size of %s."
msgstr ""
msgstr "Vald fil överstiger maximal filstorlek på %s."
#. module: web
#. openerp-web
@ -1090,14 +1093,14 @@ msgstr "Säkerhetskopia"
#: code:addons/web/static/src/js/dates.js:80
#, python-format
msgid "'%s' is not a valid time"
msgstr ""
msgstr "'%s' är inte en giltig tid"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/formats.js:278
#, python-format
msgid "'%s' is not a correct date"
msgstr ""
msgstr "'%s' är inte ett giltigt datum"
#. module: web
#. openerp-web
@ -1111,7 +1114,7 @@ msgstr "(ingen rubrik)"
#: code:addons/web/static/src/js/coresetup.js:596
#, python-format
msgid "%d days ago"
msgstr ""
msgstr "%d dagar sedan"
#. module: web
#. openerp-web
@ -1151,7 +1154,7 @@ msgstr "Senast ändrad av:"
#: code:addons/web/static/src/xml/base.xml:492
#, python-format
msgid "Timezone mismatch"
msgstr ""
msgstr "Hopblandning av tidszoner"
#. module: web
#. openerp-web
@ -1198,7 +1201,7 @@ msgstr ""
#: code:addons/web/static/src/js/coresetup.js:598
#, python-format
msgid "%d months ago"
msgstr ""
msgstr "%d månader sedan"
#. module: web
#. openerp-web
@ -1219,7 +1222,7 @@ msgstr "Lägg till avancerat filter"
#: code:addons/web/controllers/main.py:871
#, python-format
msgid "The new password and its confirmation must be identical."
msgstr ""
msgstr "Det nya lösenordet och bekräftelsen måste vara lika."
#. module: web
#. openerp-web
@ -1227,14 +1230,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:266
#, python-format
msgid "Restore Database"
msgstr ""
msgstr "Återställ databas"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:702
#, python-format
msgid "Login"
msgstr ""
msgstr "Logga in"
#. module: web
#. openerp-web
@ -1263,21 +1266,21 @@ msgstr "Exporttyp:"
#: code:addons/web/static/src/xml/base.xml:428
#, python-format
msgid "Log out"
msgstr ""
msgstr "Logga ut"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/search.js:1192
#, python-format
msgid "Group by: %s"
msgstr ""
msgstr "Grupperad på: %s"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:154
#, python-format
msgid "No data provided."
msgstr ""
msgstr "Inga data angivna"
#. module: web
#. openerp-web
@ -1306,7 +1309,7 @@ msgstr "Du måste välja minst en post."
#: code:addons/web/static/src/js/coresetup.js:621
#, python-format
msgid "Don't leave yet,<br />it's still loading..."
msgstr ""
msgstr "Lämna inte skärmen än,<br />det laddar fortfarande..."
#. module: web
#. openerp-web
@ -1348,28 +1351,28 @@ msgstr "%(page)d/%(page_count)d"
#: code:addons/web/static/src/js/chrome.js:414
#, python-format
msgid "The confirmation does not match the password"
msgstr ""
msgstr "Bekräftelsen matchar inte lösenordet"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:463
#, python-format
msgid "Edit Company data"
msgstr ""
msgstr "Redigera företagsdata"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5017
#, python-format
msgid "Save As..."
msgstr ""
msgstr "Spara som…"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5138
#, python-format
msgid "Could not display the selected image."
msgstr ""
msgstr "Kunde inte visa utvald bild."
#. module: web
#. openerp-web
@ -1407,7 +1410,7 @@ msgstr "1. Importera en .CSV-fil"
#: code:addons/web/static/src/js/chrome.js:702
#, python-format
msgid "No database selected !"
msgstr ""
msgstr "Ingen databas vald!"
#. module: web
#. openerp-web
@ -1428,7 +1431,7 @@ msgstr "Byt standardvärde:"
#: code:addons/web/static/src/xml/base.xml:189
#, python-format
msgid "Original database name:"
msgstr ""
msgstr "Ursprungligt databasnamn"
#. module: web
#. openerp-web
@ -1452,7 +1455,7 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:1637
#, python-format
msgid "Advanced Search"
msgstr ""
msgstr "Avancerad sökning"
#. module: web
#. openerp-web
@ -1467,6 +1470,7 @@ msgstr "Bekräfta nytt huvudlösenord:"
#, python-format
msgid "Maybe you should consider reloading the application by pressing F5..."
msgstr ""
"Du kanske skulle överväga att återladda applikationen genom att trycka F5..."
#. module: web
#. openerp-web
@ -1498,7 +1502,7 @@ msgstr "Importalternativ"
#: code:addons/web/static/src/js/view_form.js:3023
#, python-format
msgid "Add %s"
msgstr ""
msgstr "Lägg till %s"
#. module: web
#. openerp-web
@ -1522,7 +1526,7 @@ msgstr "Stäng"
#, python-format
msgid ""
"You may not believe it,<br />but the application is actually loading..."
msgstr ""
msgstr "Du kanske inte tror det, <br />men applikationen laddar faktiskt..."
#. module: web
#. openerp-web
@ -1536,7 +1540,7 @@ msgstr "CSV Fil:"
#: code:addons/web/static/src/js/search.js:1879
#, python-format
msgid "Advanced"
msgstr ""
msgstr "Avancerat"
#. module: web
#. openerp-web
@ -1549,14 +1553,14 @@ msgstr "Träd"
#: code:addons/web/controllers/main.py:793
#, python-format
msgid "Could not drop database !"
msgstr ""
msgstr "Kunde inte ta bort databas!"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/formats.js:231
#, python-format
msgid "'%s' is not a correct integer"
msgstr ""
msgstr "'%s' är inte ett korrekt heltal"
#. module: web
#. openerp-web
@ -1577,21 +1581,21 @@ msgstr "Okänt fält %s i domän %s"
#: code:addons/web/static/src/js/views.js:1546
#, python-format
msgid "Node [%s] is not a JSONified XML node"
msgstr ""
msgstr "Nod [%s] är inte en JSONifierad XML nod"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1454
#, python-format
msgid "Advanced Search..."
msgstr ""
msgstr "Avancerad sökning..."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:521
#, python-format
msgid "Dropping database"
msgstr ""
msgstr "Tar bort databas"
#. module: web
#. openerp-web
@ -1642,14 +1646,14 @@ msgstr ""
#: code:addons/web/static/src/xml/base.xml:1697
#, python-format
msgid "Import-Compatible Export"
msgstr ""
msgstr "Importkompatibel export"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:600
#, python-format
msgid "%d years ago"
msgstr ""
msgstr "%d år sedan"
#. module: web
#. openerp-web
@ -1678,14 +1682,14 @@ msgstr "Nytt databasnamn:"
#: code:addons/web/static/src/js/chrome.js:411
#, python-format
msgid "Please enter your new password"
msgstr ""
msgstr "Var god ange ditt nya lösenord"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5017
#, python-format
msgid "The field is empty, there's nothing to save !"
msgstr ""
msgstr "Fältet är tomt, det finns ingenting att spara!"
#. module: web
#. openerp-web
@ -1713,7 +1717,7 @@ msgstr "Rader att hoppa över"
#: code:addons/web/static/src/js/view_form.js:2945
#, python-format
msgid "Create \"<strong>%s</strong>\""
msgstr ""
msgstr "Skapa \"<strong>%s</strong>\""
#. module: web
#. openerp-web
@ -1756,7 +1760,7 @@ msgstr "Importern misslyckades på grund av:"
#: code:addons/web/static/src/xml/base.xml:561
#, python-format
msgid "JS Tests"
msgstr ""
msgstr "JS tester"
#. module: web
#. openerp-web
@ -1770,7 +1774,7 @@ msgstr "Spara som:"
#: code:addons/web/static/src/js/search.js:1024
#, python-format
msgid "Filter on: %s"
msgstr ""
msgstr "Filter på: %s"
#. module: web
#. openerp-web
@ -1792,7 +1796,7 @@ msgstr "Visa fält"
#: code:addons/web/static/src/xml/base.xml:348
#, python-format
msgid "Confirm New Password:"
msgstr ""
msgstr "Bekräfta nytt lösenord:"
#. module: web
#. openerp-web
@ -1850,7 +1854,7 @@ msgstr "OpenERP"
#: code:addons/web/doc/module/static/src/xml/web_example.xml:8
#, python-format
msgid "Stop"
msgstr ""
msgstr "Stoppa"
#. module: web
#. openerp-web
@ -1874,7 +1878,7 @@ msgstr "Laddar upp..."
#: code:addons/web/static/src/xml/base.xml:1874
#, python-format
msgid "Name:"
msgstr ""
msgstr "Namn:"
#. module: web
#. openerp-web
@ -1888,7 +1892,7 @@ msgstr "Om"
#: code:addons/web/static/src/xml/base.xml:1457
#, python-format
msgid "Search Again"
msgstr ""
msgstr "Sök igen"
#. module: web
#. openerp-web
@ -1921,13 +1925,14 @@ msgid ""
"Grouping on field '%s' is not possible because that field does not appear in "
"the list view."
msgstr ""
"Att gruppera på fält '%s' är inte möjligt då detta fält inte finns i listvyn."
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:559
#, python-format
msgid "Set Defaults"
msgstr ""
msgstr "Ställ in standardvärden"
#. module: web
#. openerp-web
@ -1970,7 +1975,7 @@ msgstr "Typ:"
#: code:addons/web/static/src/js/chrome.js:560
#, python-format
msgid "Incorrect super-administrator password"
msgstr ""
msgstr "Ogiltigt super-administrator lösenord"
#. module: web
#. openerp-web
@ -1985,14 +1990,14 @@ msgstr "Objekt:"
#: code:addons/web/static/src/js/chrome.js:343
#, python-format
msgid "Loading"
msgstr ""
msgstr "Laddar"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:599
#, python-format
msgid "about a year ago"
msgstr ""
msgstr "ungefär ett år sedan"
#. module: web
#. openerp-web
@ -2012,13 +2017,15 @@ msgid ""
"The type of the field '%s' must be a many2many field with a relation to "
"'ir.attachment' model."
msgstr ""
"Denna typ av fält '%s' måste var ett many2many fält med en relation till "
"'ir.attachment' modellen."
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:594
#, python-format
msgid "%d hours ago"
msgstr ""
msgstr "%d timmar sedan"
#. module: web
#. openerp-web
@ -2033,7 +2040,7 @@ msgstr "Lägg till: "
#: code:addons/web/static/src/xml/base.xml:1879
#, python-format
msgid "Quick Add"
msgstr ""
msgstr "Lägg till snabbt"
#. module: web
#. openerp-web
@ -2060,7 +2067,7 @@ msgstr "Ok"
#: code:addons/web/static/src/js/views.js:1237
#, python-format
msgid "Uploading..."
msgstr ""
msgstr "Överför…"
#. module: web
#. openerp-web
@ -2074,7 +2081,7 @@ msgstr "Ladda demodata:"
#: code:addons/web/static/src/xml/base.xml:637
#, python-format
msgid "Created by :"
msgstr ""
msgstr "Skapad av:"
#. module: web
#. openerp-web
@ -2082,7 +2089,7 @@ msgstr ""
#: code:addons/web/static/src/js/dates.js:26
#, python-format
msgid "'%s' is not a valid datetime"
msgstr ""
msgstr "'%s' är inte en giltig datum/tid"
#. module: web
#. openerp-web
@ -2127,14 +2134,14 @@ msgstr "är sann"
#: code:addons/web/static/src/js/view_form.js:4030
#, python-format
msgid "Add an item"
msgstr ""
msgstr "Lägg till en post"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1621
#, python-format
msgid "Save current filter"
msgstr ""
msgstr "Spara aktuellt filter"
#. module: web
#. openerp-web
@ -2162,14 +2169,14 @@ msgstr "Hämta \"%s\""
#: code:addons/web/static/src/js/view_form.js:325
#, python-format
msgid "New"
msgstr ""
msgstr "Ny"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_list.js:1777
#, python-format
msgid "Can't convert value %s to context"
msgstr ""
msgstr "Kan inte konvertera värdet %s i sammanhanget"
#. module: web
#. openerp-web
@ -2235,34 +2242,34 @@ msgstr "är falsk"
#: code:addons/web/static/src/xml/base.xml:426
#, python-format
msgid "About OpenERP"
msgstr ""
msgstr "Om OpenERP"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/formats.js:301
#, python-format
msgid "'%s' is not a correct date, datetime nor time"
msgstr ""
msgstr "'%s' är inte ett korrekt datum , datum/tid eller tid"
#. module: web
#: code:addons/web/controllers/main.py:1307
#, python-format
msgid "No content found for field '%s' on '%s:%s'"
msgstr ""
msgstr "Inget innehåll funnet för fält '%s' på '%s:%s'"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:322
#, python-format
msgid "Database Management"
msgstr ""
msgstr "Databashantering"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/view_form.js:5138
#, python-format
msgid "Image"
msgstr ""
msgstr "Bild"
#. module: web
#. openerp-web
@ -2295,7 +2302,7 @@ msgstr "inte ett korrekt heltal"
#: code:addons/web/static/src/xml/base.xml:1648
#, python-format
msgid "or"
msgstr ""
msgstr "eller"
#. module: web
#. openerp-web
@ -2309,7 +2316,7 @@ msgstr "Nej"
#: code:addons/web/static/src/js/formats.js:313
#, python-format
msgid "'%s' is not convertible to date, datetime nor time"
msgstr ""
msgstr "'%s' är inte konverterbart till datum, datum/tid eller tid"
#. module: web
#. openerp-web
@ -2327,21 +2334,21 @@ msgstr "Duplicera"
#: code:addons/web/static/src/xml/base.xml:1419
#, python-format
msgid "Discard"
msgstr ""
msgstr "Ignorera"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:1642
#, python-format
msgid "Add a condition"
msgstr ""
msgstr "Lägg till ett villkor"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/coresetup.js:619
#, python-format
msgid "Still loading..."
msgstr ""
msgstr "Laddar fortfarande..."
#. module: web
#. openerp-web
@ -2355,7 +2362,7 @@ msgstr "Felaktigt värde för fält %(fieldname)s: [%(value)s] är %(message)s"
#: code:addons/web/static/src/js/view_form.js:3926
#, python-format
msgid "The o2m record must be saved before an action can be used"
msgstr ""
msgstr "o2m posten måste sparas innan en händelse kan användas"
#. module: web
#. openerp-web
@ -2369,7 +2376,7 @@ msgstr "Säkerhetskopierad"
#: code:addons/web/static/src/xml/base.xml:1628
#, python-format
msgid "Use by default"
msgstr ""
msgstr "Använd som standard"
#. module: web
#. openerp-web
@ -2390,7 +2397,7 @@ msgstr "aktiverad från sökvyn"
#: code:addons/web/static/src/js/search.js:1079
#, python-format
msgid "Filter"
msgstr ""
msgstr "Filter"
#. module: web
#. openerp-web
@ -2432,7 +2439,7 @@ msgstr "Ändra arbetsflöde"
#: code:addons/web/static/src/js/views.js:1246
#, python-format
msgid "Do you really want to delete this attachment ?"
msgstr ""
msgstr "Vill du verkligen ta bort denna bilaga"
#. module: web
#. openerp-web
@ -2453,21 +2460,21 @@ msgstr "Fält:"
#: code:addons/web/static/src/xml/base.xml:642
#, python-format
msgid "Modified by :"
msgstr ""
msgstr "Ändrad av:"
#. module: web
#. openerp-web
#: code:addons/web/static/src/js/chrome.js:521
#, python-format
msgid "The database %s has been dropped"
msgstr ""
msgstr "Datbasen %s har tagits bort"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:482
#, python-format
msgid "User's timezone"
msgstr ""
msgstr "Användarens tidszon"
#. module: web
#. openerp-web
@ -2482,7 +2489,7 @@ msgstr "Klientfel"
#: code:addons/web/static/src/js/views.js:1073
#, python-format
msgid "Print"
msgstr ""
msgstr "Skriv ut"
#. module: web
#. openerp-web
@ -2497,6 +2504,7 @@ msgstr "Special:"
msgid ""
"The old password you provided is incorrect, your password was not changed."
msgstr ""
"Det gamla lösenordet du angav är ej korrekt, ditt lösenord ändrades inte."
#. module: web
#. openerp-web
@ -2524,7 +2532,7 @@ msgstr "Spara och stäng"
#: code:addons/web/static/src/js/view_form.js:2932
#, python-format
msgid "Search More..."
msgstr ""
msgstr "Sök flera..."
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:03+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web
#. openerp-web

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,459 @@
/*!
* Bootstrap v3.0.2 by @fat and @mdo
* Copyright 2013 Twitter, Inc.
* Licensed under http://www.apache.org/licenses/LICENSE-2.0
*
* Designed and built with all the love in the world by @mdo and @fat.
*/
.btn-default,
.btn-primary,
.btn-success,
.btn-info,
.btn-warning,
.btn-danger {
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);
}
.btn-default:active,
.btn-primary:active,
.btn-success:active,
.btn-info:active,
.btn-warning:active,
.btn-danger:active,
.btn-default.active,
.btn-primary.active,
.btn-success.active,
.btn-info.active,
.btn-warning.active,
.btn-danger.active {
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn:active,
.btn.active {
background-image: none;
}
.btn-default {
text-shadow: 0 1px 0 #fff;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#e0e0e0));
background-image: -webkit-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);
background-image: -moz-linear-gradient(top, #ffffff 0%, #e0e0e0 100%);
background-image: linear-gradient(to bottom, #ffffff 0%, #e0e0e0 100%);
background-repeat: repeat-x;
border-color: #dbdbdb;
border-color: #ccc;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.btn-default:hover,
.btn-default:focus {
background-color: #e0e0e0;
background-position: 0 -15px;
}
.btn-default:active,
.btn-default.active {
background-color: #e0e0e0;
border-color: #dbdbdb;
}
.btn-primary {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#2d6ca2));
background-image: -webkit-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
background-image: -moz-linear-gradient(top, #428bca 0%, #2d6ca2 100%);
background-image: linear-gradient(to bottom, #428bca 0%, #2d6ca2 100%);
background-repeat: repeat-x;
border-color: #2b669a;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff2d6ca2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.btn-primary:hover,
.btn-primary:focus {
background-color: #2d6ca2;
background-position: 0 -15px;
}
.btn-primary:active,
.btn-primary.active {
background-color: #2d6ca2;
border-color: #2b669a;
}
.btn-success {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#419641));
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: -moz-linear-gradient(top, #5cb85c 0%, #419641 100%);
background-image: linear-gradient(to bottom, #5cb85c 0%, #419641 100%);
background-repeat: repeat-x;
border-color: #3e8f3e;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.btn-success:hover,
.btn-success:focus {
background-color: #419641;
background-position: 0 -15px;
}
.btn-success:active,
.btn-success.active {
background-color: #419641;
border-color: #3e8f3e;
}
.btn-warning {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#eb9316));
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: -moz-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);
background-image: linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);
background-repeat: repeat-x;
border-color: #e38d13;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.btn-warning:hover,
.btn-warning:focus {
background-color: #eb9316;
background-position: 0 -15px;
}
.btn-warning:active,
.btn-warning.active {
background-color: #eb9316;
border-color: #e38d13;
}
.btn-danger {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c12e2a));
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: -moz-linear-gradient(top, #d9534f 0%, #c12e2a 100%);
background-image: linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);
background-repeat: repeat-x;
border-color: #b92c28;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.btn-danger:hover,
.btn-danger:focus {
background-color: #c12e2a;
background-position: 0 -15px;
}
.btn-danger:active,
.btn-danger.active {
background-color: #c12e2a;
border-color: #b92c28;
}
.btn-info {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#2aabd2));
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: -moz-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);
background-image: linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);
background-repeat: repeat-x;
border-color: #28a4c9;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.btn-info:hover,
.btn-info:focus {
background-color: #2aabd2;
background-position: 0 -15px;
}
.btn-info:active,
.btn-info.active {
background-color: #2aabd2;
border-color: #28a4c9;
}
.thumbnail,
.img-thumbnail {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
}
.dropdown-menu > li > a:hover,
.dropdown-menu > li > a:focus {
background-color: #e8e8e8;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8));
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
}
.dropdown-menu > .active > a,
.dropdown-menu > .active > a:hover,
.dropdown-menu > .active > a:focus {
background-color: #357ebd;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));
background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);
background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
}
.navbar-default {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ffffff), to(#f8f8f8));
background-image: -webkit-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
background-image: -moz-linear-gradient(top, #ffffff 0%, #f8f8f8 100%);
background-image: linear-gradient(to bottom, #ffffff 0%, #f8f8f8 100%);
background-repeat: repeat-x;
border-radius: 4px;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 5px rgba(0, 0, 0, 0.075);
}
.navbar-default .navbar-nav > .active > a {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f3f3f3));
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
background-image: -moz-linear-gradient(top, #ebebeb 0%, #f3f3f3 100%);
background-image: linear-gradient(to bottom, #ebebeb 0%, #f3f3f3 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff3f3f3', GradientType=0);
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.075);
}
.navbar-brand,
.navbar-nav > li > a {
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.25);
}
.navbar-inverse {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#3c3c3c), to(#222222));
background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222222 100%);
background-image: -moz-linear-gradient(top, #3c3c3c 0%, #222222 100%);
background-image: linear-gradient(to bottom, #3c3c3c 0%, #222222 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
}
.navbar-inverse .navbar-nav > .active > a {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#222222), to(#282828));
background-image: -webkit-linear-gradient(top, #222222 0%, #282828 100%);
background-image: -moz-linear-gradient(top, #222222 0%, #282828 100%);
background-image: linear-gradient(to bottom, #222222 0%, #282828 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff282828', GradientType=0);
-webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
box-shadow: inset 0 3px 9px rgba(0, 0, 0, 0.25);
}
.navbar-inverse .navbar-brand,
.navbar-inverse .navbar-nav > li > a {
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
}
.navbar-static-top,
.navbar-fixed-top,
.navbar-fixed-bottom {
border-radius: 0;
}
.alert {
text-shadow: 0 1px 0 rgba(255, 255, 255, 0.2);
-webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05);
}
.alert-success {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#c8e5bc));
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: -moz-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);
background-image: linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);
background-repeat: repeat-x;
border-color: #b2dba1;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);
}
.alert-info {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#b9def0));
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: -moz-linear-gradient(top, #d9edf7 0%, #b9def0 100%);
background-image: linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);
background-repeat: repeat-x;
border-color: #9acfea;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);
}
.alert-warning {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#f8efc0));
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: -moz-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);
background-image: linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);
background-repeat: repeat-x;
border-color: #f5e79e;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);
}
.alert-danger {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#e7c3c3));
background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: -moz-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);
background-image: linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);
background-repeat: repeat-x;
border-color: #dca7a7;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);
}
.progress {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#ebebeb), to(#f5f5f5));
background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: -moz-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);
background-image: linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);
}
.progress-bar {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3071a9));
background-image: -webkit-linear-gradient(top, #428bca 0%, #3071a9 100%);
background-image: -moz-linear-gradient(top, #428bca 0%, #3071a9 100%);
background-image: linear-gradient(to bottom, #428bca 0%, #3071a9 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3071a9', GradientType=0);
}
.progress-bar-success {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5cb85c), to(#449d44));
background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: -moz-linear-gradient(top, #5cb85c 0%, #449d44 100%);
background-image: linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);
}
.progress-bar-info {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#5bc0de), to(#31b0d5));
background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: -moz-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);
background-image: linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);
}
.progress-bar-warning {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f0ad4e), to(#ec971f));
background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: -moz-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);
background-image: linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);
}
.progress-bar-danger {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9534f), to(#c9302c));
background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: -moz-linear-gradient(top, #d9534f 0%, #c9302c 100%);
background-image: linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);
}
.list-group {
border-radius: 4px;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075);
}
.list-group-item.active,
.list-group-item.active:hover,
.list-group-item.active:focus {
text-shadow: 0 -1px 0 #3071a9;
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#3278b3));
background-image: -webkit-linear-gradient(top, #428bca 0%, #3278b3 100%);
background-image: -moz-linear-gradient(top, #428bca 0%, #3278b3 100%);
background-image: linear-gradient(to bottom, #428bca 0%, #3278b3 100%);
background-repeat: repeat-x;
border-color: #3278b3;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff3278b3', GradientType=0);
}
.panel {
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
}
.panel-default > .panel-heading {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f5f5f5), to(#e8e8e8));
background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);
background-image: linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);
}
.panel-primary > .panel-heading {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#428bca), to(#357ebd));
background-image: -webkit-linear-gradient(top, #428bca 0%, #357ebd 100%);
background-image: -moz-linear-gradient(top, #428bca 0%, #357ebd 100%);
background-image: linear-gradient(to bottom, #428bca 0%, #357ebd 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0);
}
.panel-success > .panel-heading {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#dff0d8), to(#d0e9c6));
background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: -moz-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);
background-image: linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);
}
.panel-info > .panel-heading {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#d9edf7), to(#c4e3f3));
background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: -moz-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);
background-image: linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);
}
.panel-warning > .panel-heading {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#fcf8e3), to(#faf2cc));
background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: -moz-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);
background-image: linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);
}
.panel-danger > .panel-heading {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#f2dede), to(#ebcccc));
background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: -moz-linear-gradient(top, #f2dede 0%, #ebcccc 100%);
background-image: linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);
background-repeat: repeat-x;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);
}
.well {
background-image: -webkit-gradient(linear, left 0%, left 100%, from(#e8e8e8), to(#f5f5f5));
background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: -moz-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);
background-image: linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);
background-repeat: repeat-x;
border-color: #dcdcdc;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(255, 255, 255, 0.1);
}

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

@ -280,8 +280,8 @@
<glyph unicode="&#xf113;" horiz-adv-x="1664" d="M640 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1280 320q0 -40 -12.5 -82t-43 -76t-72.5 -34t-72.5 34t-43 76t-12.5 82t12.5 82t43 76t72.5 34t72.5 -34t43 -76t12.5 -82zM1440 320 q0 120 -69 204t-187 84q-41 0 -195 -21q-71 -11 -157 -11t-157 11q-152 21 -195 21q-118 0 -187 -84t-69 -204q0 -88 32 -153.5t81 -103t122 -60t140 -29.5t149 -7h168q82 0 149 7t140 29.5t122 60t81 103t32 153.5zM1664 496q0 -207 -61 -331q-38 -77 -105.5 -133t-141 -86 t-170 -47.5t-171.5 -22t-167 -4.5q-78 0 -142 3t-147.5 12.5t-152.5 30t-137 51.5t-121 81t-86 115q-62 123 -62 331q0 237 136 396q-27 82 -27 170q0 116 51 218q108 0 190 -39.5t189 -123.5q147 35 309 35q148 0 280 -32q105 82 187 121t189 39q51 -102 51 -218 q0 -87 -27 -168q136 -160 136 -398z" />
<glyph unicode="&#xf114;" horiz-adv-x="1664" d="M1536 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68v-960q0 -40 28 -68t68 -28h1216q40 0 68 28t28 68zM1664 928v-704q0 -92 -66 -158t-158 -66h-1216q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320 q92 0 158 -66t66 -158v-32h672q92 0 158 -66t66 -158z" />
<glyph unicode="&#xf115;" horiz-adv-x="1920" d="M1781 605q0 35 -53 35h-1088q-40 0 -85.5 -21.5t-71.5 -52.5l-294 -363q-18 -24 -18 -40q0 -35 53 -35h1088q40 0 86 22t71 53l294 363q18 22 18 39zM640 768h768v160q0 40 -28 68t-68 28h-576q-40 0 -68 28t-28 68v64q0 40 -28 68t-68 28h-320q-40 0 -68 -28t-28 -68 v-853l256 315q44 53 116 87.5t140 34.5zM1909 605q0 -62 -46 -120l-295 -363q-43 -53 -116 -87.5t-140 -34.5h-1088q-92 0 -158 66t-66 158v960q0 92 66 158t158 66h320q92 0 158 -66t66 -158v-32h544q92 0 158 -66t66 -158v-160h192q54 0 99 -24.5t67 -70.5q15 -32 15 -68z " />
<glyph unicode="&#xf116;" horiz-adv-x="1152" d="M896 608v-64q0 -14 -9 -23t-23 -9h-224v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224h224q14 0 23 -9t9 -23zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28 t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68zM1152 928v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704q93 0 158.5 -65.5t65.5 -158.5z" />
<glyph unicode="&#xf117;" horiz-adv-x="1152" d="M928 1152q93 0 158.5 -65.5t65.5 -158.5v-704q0 -92 -65.5 -158t-158.5 -66h-704q-93 0 -158.5 66t-65.5 158v704q0 93 65.5 158.5t158.5 65.5h704zM1024 224v704q0 40 -28 68t-68 28h-704q-40 0 -68 -28t-28 -68v-704q0 -40 28 -68t68 -28h704q40 0 68 28t28 68z M864 640q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576z" />
<glyph unicode="&#xf116;" horiz-adv-x="1792" />
<glyph unicode="&#xf117;" horiz-adv-x="1792" />
<glyph unicode="&#xf118;" d="M1134 461q-37 -121 -138 -195t-228 -74t-228 74t-138 195q-8 25 4 48.5t38 31.5q25 8 48.5 -4t31.5 -38q25 -80 92.5 -129.5t151.5 -49.5t151.5 49.5t92.5 129.5q8 26 32 38t49 4t37 -31.5t4 -48.5zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5 t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5 t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf119;" d="M1134 307q8 -25 -4 -48.5t-37 -31.5t-49 4t-32 38q-25 80 -92.5 129.5t-151.5 49.5t-151.5 -49.5t-92.5 -129.5q-8 -26 -31.5 -38t-48.5 -4q-26 8 -38 31.5t-4 48.5q37 121 138 195t228 74t228 -74t138 -195zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204 t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf11a;" d="M1152 448q0 -26 -19 -45t-45 -19h-640q-26 0 -45 19t-19 45t19 45t45 19h640q26 0 45 -19t19 -45zM640 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1152 896q0 -53 -37.5 -90.5t-90.5 -37.5t-90.5 37.5 t-37.5 90.5t37.5 90.5t90.5 37.5t90.5 -37.5t37.5 -90.5zM1408 640q0 130 -51 248.5t-136.5 204t-204 136.5t-248.5 51t-248.5 -51t-204 -136.5t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5zM1536 640 q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
@ -310,7 +310,7 @@
<glyph unicode="&#xf133;" horiz-adv-x="1664" d="M128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280 q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128q52 0 90 -38t38 -90z" />
<glyph unicode="&#xf134;" horiz-adv-x="1408" d="M512 1344q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1408 1376v-320q0 -16 -12 -25q-8 -7 -20 -7q-4 0 -7 1l-448 96q-11 2 -18 11t-7 20h-256v-102q111 -23 183.5 -111t72.5 -203v-800q0 -26 -19 -45t-45 -19h-512q-26 0 -45 19t-19 45v800 q0 106 62.5 190.5t161.5 114.5v111h-32q-59 0 -115 -23.5t-91.5 -53t-66 -66.5t-40.5 -53.5t-14 -24.5q-17 -35 -57 -35q-16 0 -29 7q-23 12 -31.5 37t3.5 49q5 10 14.5 26t37.5 53.5t60.5 70t85 67t108.5 52.5q-25 42 -25 86q0 66 47 113t113 47t113 -47t47 -113 q0 -33 -14 -64h302q0 11 7 20t18 11l448 96q3 1 7 1q12 0 20 -7q12 -9 12 -25z" />
<glyph unicode="&#xf135;" horiz-adv-x="1664" d="M1440 1088q0 40 -28 68t-68 28t-68 -28t-28 -68t28 -68t68 -28t68 28t28 68zM1664 1376q0 -249 -75.5 -430.5t-253.5 -360.5q-81 -80 -195 -176l-20 -379q-2 -16 -16 -26l-384 -224q-7 -4 -16 -4q-12 0 -23 9l-64 64q-13 14 -8 32l85 276l-281 281l-276 -85q-3 -1 -9 -1 q-14 0 -23 9l-64 64q-17 19 -5 39l224 384q10 14 26 16l379 20q96 114 176 195q188 187 358 258t431 71q14 0 24 -9.5t10 -22.5z" />
<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1708 881l-188 -881h-304l181 849q4 21 1 43q-4 20 -16 35q-10 14 -28 24q-18 9 -40 9h-197l-205 -960h-303l204 960h-304l-205 -960h-304l272 1280h1139q157 0 245 -118q86 -116 52 -281z" />
<glyph unicode="&#xf136;" horiz-adv-x="1792" d="M1745 763l-164 -763h-334l178 832q13 56 -15 88q-27 33 -83 33h-169l-204 -953h-334l204 953h-286l-204 -953h-334l204 953l-153 327h1276q101 0 189.5 -40.5t147.5 -113.5q60 -73 81 -168.5t0 -194.5z" />
<glyph unicode="&#xf137;" d="M909 141l102 102q19 19 19 45t-19 45l-307 307l307 307q19 19 19 45t-19 45l-102 102q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l454 -454q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf138;" d="M717 141l454 454q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-102 -102q-19 -19 -19 -45t19 -45l307 -307l-307 -307q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf139;" d="M1165 397l102 102q19 19 19 45t-19 45l-454 454q-19 19 -45 19t-45 -19l-454 -454q-19 -19 -19 -45t19 -45l102 -102q19 -19 45 -19t45 19l307 307l307 -307q19 -19 45 -19t45 19zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5 t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
@ -342,7 +342,7 @@
<glyph unicode="&#xf155;" horiz-adv-x="1024" d="M978 351q0 -153 -99.5 -263.5t-258.5 -136.5v-175q0 -14 -9 -23t-23 -9h-135q-13 0 -22.5 9.5t-9.5 22.5v175q-66 9 -127.5 31t-101.5 44.5t-74 48t-46.5 37.5t-17.5 18q-17 21 -2 41l103 135q7 10 23 12q15 2 24 -9l2 -2q113 -99 243 -125q37 -8 74 -8q81 0 142.5 43 t61.5 122q0 28 -15 53t-33.5 42t-58.5 37.5t-66 32t-80 32.5q-39 16 -61.5 25t-61.5 26.5t-62.5 31t-56.5 35.5t-53.5 42.5t-43.5 49t-35.5 58t-21 66.5t-8.5 78q0 138 98 242t255 134v180q0 13 9.5 22.5t22.5 9.5h135q14 0 23 -9t9 -23v-176q57 -6 110.5 -23t87 -33.5 t63.5 -37.5t39 -29t15 -14q17 -18 5 -38l-81 -146q-8 -15 -23 -16q-14 -3 -27 7q-3 3 -14.5 12t-39 26.5t-58.5 32t-74.5 26t-85.5 11.5q-95 0 -155 -43t-60 -111q0 -26 8.5 -48t29.5 -41.5t39.5 -33t56 -31t60.5 -27t70 -27.5q53 -20 81 -31.5t76 -35t75.5 -42.5t62 -50 t53 -63.5t31.5 -76.5t13 -94z" />
<glyph unicode="&#xf156;" horiz-adv-x="898" d="M898 1066v-102q0 -14 -9 -23t-23 -9h-168q-23 -144 -129 -234t-276 -110q167 -178 459 -536q14 -16 4 -34q-8 -18 -29 -18h-195q-16 0 -25 12q-306 367 -498 571q-9 9 -9 22v127q0 13 9.5 22.5t22.5 9.5h112q132 0 212.5 43t102.5 125h-427q-14 0 -23 9t-9 23v102 q0 14 9 23t23 9h413q-57 113 -268 113h-145q-13 0 -22.5 9.5t-9.5 22.5v133q0 14 9 23t23 9h832q14 0 23 -9t9 -23v-102q0 -14 -9 -23t-23 -9h-233q47 -61 64 -144h171q14 0 23 -9t9 -23z" />
<glyph unicode="&#xf157;" horiz-adv-x="1027" d="M603 0h-172q-13 0 -22.5 9t-9.5 23v330h-288q-13 0 -22.5 9t-9.5 23v103q0 13 9.5 22.5t22.5 9.5h288v85h-288q-13 0 -22.5 9t-9.5 23v104q0 13 9.5 22.5t22.5 9.5h214l-321 578q-8 16 0 32q10 16 28 16h194q19 0 29 -18l215 -425q19 -38 56 -125q10 24 30.5 68t27.5 61 l191 420q8 19 29 19h191q17 0 27 -16q9 -14 1 -31l-313 -579h215q13 0 22.5 -9.5t9.5 -22.5v-104q0 -14 -9.5 -23t-22.5 -9h-290v-85h290q13 0 22.5 -9.5t9.5 -22.5v-103q0 -14 -9.5 -23t-22.5 -9h-290v-330q0 -13 -9.5 -22.5t-22.5 -9.5z" />
<glyph unicode="&#xf158;" horiz-adv-x="1664" d="M1664 352v-32q0 -132 -94 -226t-226 -94h-128q-132 0 -226 94t-94 226v480h-224q-2 -102 -14.5 -190.5t-30.5 -156t-48.5 -126.5t-57 -99.5t-67.5 -77.5t-69.5 -58.5t-74 -44t-69 -32t-65.5 -25.5q-4 -2 -32 -13q-8 -2 -12 -2q-22 0 -30 20l-71 178q-5 13 0 25t17 17 q7 3 20 7.5t18 6.5q31 12 46.5 18.5t44.5 20t45.5 26t42 32.5t40.5 42.5t34.5 53.5t30.5 68.5t22.5 83.5t17 103t6.5 123h-256q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h1216q14 0 23 -9t9 -23v-160q0 -14 -9 -23t-23 -9h-224v-512q0 -26 19 -45t45 -19h128q26 0 45 19t19 45 v64q0 14 9 23t23 9h192q14 0 23 -9t9 -23zM1280 1376v-160q0 -14 -9 -23t-23 -9h-960q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h960q14 0 23 -9t9 -23z" />
<glyph unicode="&#xf158;" horiz-adv-x="1280" d="M1043 971q0 100 -65 162t-171 62h-320v-448h320q106 0 171 62t65 162zM1280 971q0 -193 -126.5 -315t-326.5 -122h-340v-118h505q14 0 23 -9t9 -23v-128q0 -14 -9 -23t-23 -9h-505v-192q0 -14 -9.5 -23t-22.5 -9h-167q-14 0 -23 9t-9 23v192h-224q-14 0 -23 9t-9 23v128 q0 14 9 23t23 9h224v118h-224q-14 0 -23 9t-9 23v149q0 13 9 22.5t23 9.5h224v629q0 14 9 23t23 9h539q200 0 326.5 -122t126.5 -315z" />
<glyph unicode="&#xf159;" horiz-adv-x="1792" d="M514 341l81 299h-159l75 -300q1 -1 1 -3t1 -3q0 1 0.5 3.5t0.5 3.5zM630 768l35 128h-292l32 -128h225zM822 768h139l-35 128h-70zM1271 340l78 300h-162l81 -299q0 -1 0.5 -3.5t1.5 -3.5q0 1 0.5 3t0.5 3zM1382 768l33 128h-297l34 -128h230zM1792 736v-64q0 -14 -9 -23 t-23 -9h-213l-164 -616q-7 -24 -31 -24h-159q-24 0 -31 24l-166 616h-209l-167 -616q-7 -24 -31 -24h-159q-11 0 -19.5 7t-10.5 17l-160 616h-208q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h175l-33 128h-142q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h109l-89 344q-5 15 5 28 q10 12 26 12h137q26 0 31 -24l90 -360h359l97 360q7 24 31 24h126q24 0 31 -24l98 -360h365l93 360q5 24 31 24h137q16 0 26 -12q10 -13 5 -28l-91 -344h111q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-145l-34 -128h179q14 0 23 -9t9 -23z" />
<glyph unicode="&#xf15a;" horiz-adv-x="1280" d="M1167 896q18 -182 -131 -258q117 -28 175 -103t45 -214q-7 -71 -32.5 -125t-64.5 -89t-97 -58.5t-121.5 -34.5t-145.5 -15v-255h-154v251q-80 0 -122 1v-252h-154v255q-18 0 -54 0.5t-55 0.5h-200l31 183h111q50 0 58 51v402h16q-6 1 -16 1v287q-13 68 -89 68h-111v164 l212 -1q64 0 97 1v252h154v-247q82 2 122 2v245h154v-252q79 -7 140 -22.5t113 -45t82.5 -78t36.5 -114.5zM952 351q0 36 -15 64t-37 46t-57.5 30.5t-65.5 18.5t-74 9t-69 3t-64.5 -1t-47.5 -1v-338q8 0 37 -0.5t48 -0.5t53 1.5t58.5 4t57 8.5t55.5 14t47.5 21t39.5 30 t24.5 40t9.5 51zM881 827q0 33 -12.5 58.5t-30.5 42t-48 28t-55 16.5t-61.5 8t-58 2.5t-54 -1t-39.5 -0.5v-307q5 0 34.5 -0.5t46.5 0t50 2t55 5.5t51.5 11t48.5 18.5t37 27t27 38.5t9 51z" />
<glyph unicode="&#xf15b;" horiz-adv-x="1280" d="M1280 768v-800q0 -40 -28 -68t-68 -28h-1088q-40 0 -68 28t-28 68v1344q0 40 28 68t68 28h544v-544q0 -40 28 -68t68 -28h544zM1277 896h-509v509q82 -15 132 -65l312 -312q50 -50 65 -132z" />
@ -390,10 +390,25 @@
<glyph unicode="&#xf188;" horiz-adv-x="1664" d="M1632 576q0 -26 -19 -45t-45 -19h-224q0 -171 -67 -290l208 -209q19 -19 19 -45t-19 -45q-18 -19 -45 -19t-45 19l-198 197q-5 -5 -15 -13t-42 -28.5t-65 -36.5t-82 -29t-97 -13v896h-128v-896q-51 0 -101.5 13.5t-87 33t-66 39t-43.5 32.5l-15 14l-183 -207 q-20 -21 -48 -21q-24 0 -43 16q-19 18 -20.5 44.5t15.5 46.5l202 227q-58 114 -58 274h-224q-26 0 -45 19t-19 45t19 45t45 19h224v294l-173 173q-19 19 -19 45t19 45t45 19t45 -19l173 -173h844l173 173q19 19 45 19t45 -19t19 -45t-19 -45l-173 -173v-294h224q26 0 45 -19 t19 -45zM1152 1152h-640q0 133 93.5 226.5t226.5 93.5t226.5 -93.5t93.5 -226.5z" />
<glyph unicode="&#xf189;" horiz-adv-x="1920" d="M1917 1016q23 -64 -150 -294q-24 -32 -65 -85q-78 -100 -90 -131q-17 -41 14 -81q17 -21 81 -82h1l1 -1l1 -1l2 -2q141 -131 191 -221q3 -5 6.5 -12.5t7 -26.5t-0.5 -34t-25 -27.5t-59 -12.5l-256 -4q-24 -5 -56 5t-52 22l-20 12q-30 21 -70 64t-68.5 77.5t-61 58 t-56.5 15.5q-3 -1 -8 -3.5t-17 -14.5t-21.5 -29.5t-17 -52t-6.5 -77.5q0 -15 -3.5 -27.5t-7.5 -18.5l-4 -5q-18 -19 -53 -22h-115q-71 -4 -146 16.5t-131.5 53t-103 66t-70.5 57.5l-25 24q-10 10 -27.5 30t-71.5 91t-106 151t-122.5 211t-130.5 272q-6 16 -6 27t3 16l4 6 q15 19 57 19l274 2q12 -2 23 -6.5t16 -8.5l5 -3q16 -11 24 -32q20 -50 46 -103.5t41 -81.5l16 -29q29 -60 56 -104t48.5 -68.5t41.5 -38.5t34 -14t27 5q2 1 5 5t12 22t13.5 47t9.5 81t0 125q-2 40 -9 73t-14 46l-6 12q-25 34 -85 43q-13 2 5 24q17 19 38 30q53 26 239 24 q82 -1 135 -13q20 -5 33.5 -13.5t20.5 -24t10.5 -32t3.5 -45.5t-1 -55t-2.5 -70.5t-1.5 -82.5q0 -11 -1 -42t-0.5 -48t3.5 -40.5t11.5 -39t22.5 -24.5q8 -2 17 -4t26 11t38 34.5t52 67t68 107.5q60 104 107 225q4 10 10 17.5t11 10.5l4 3l5 2.5t13 3t20 0.5l288 2 q39 5 64 -2.5t31 -16.5z" />
<glyph unicode="&#xf18a;" horiz-adv-x="1792" d="M675 252q21 34 11 69t-45 50q-34 14 -73 1t-60 -46q-22 -34 -13 -68.5t43 -50.5t74.5 -2.5t62.5 47.5zM769 373q8 13 3.5 26.5t-17.5 18.5q-14 5 -28.5 -0.5t-21.5 -18.5q-17 -31 13 -45q14 -5 29 0.5t22 18.5zM943 266q-45 -102 -158 -150t-224 -12 q-107 34 -147.5 126.5t6.5 187.5q47 93 151.5 139t210.5 19q111 -29 158.5 -119.5t2.5 -190.5zM1255 426q-9 96 -89 170t-208.5 109t-274.5 21q-223 -23 -369.5 -141.5t-132.5 -264.5q9 -96 89 -170t208.5 -109t274.5 -21q223 23 369.5 141.5t132.5 264.5zM1563 422 q0 -68 -37 -139.5t-109 -137t-168.5 -117.5t-226 -83t-270.5 -31t-275 33.5t-240.5 93t-171.5 151t-65 199.5q0 115 69.5 245t197.5 258q169 169 341.5 236t246.5 -7q65 -64 20 -209q-4 -14 -1 -20t10 -7t14.5 0.5t13.5 3.5l6 2q139 59 246 59t153 -61q45 -63 0 -178 q-2 -13 -4.5 -20t4.5 -12.5t12 -7.5t17 -6q57 -18 103 -47t80 -81.5t34 -116.5zM1489 1046q42 -47 54.5 -108.5t-6.5 -117.5q-8 -23 -29.5 -34t-44.5 -4q-23 8 -34 29.5t-4 44.5q20 63 -24 111t-107 35q-24 -5 -45 8t-25 37q-5 24 8 44.5t37 25.5q60 13 119 -5.5t101 -65.5z M1670 1209q87 -96 112.5 -222.5t-13.5 -241.5q-9 -27 -34 -40t-52 -4t-40 34t-5 52q28 82 10 172t-80 158q-62 69 -148 95.5t-173 8.5q-28 -6 -52 9.5t-30 43.5t9.5 51.5t43.5 29.5q123 26 244 -11.5t208 -134.5z" />
<glyph unicode="&#xf18b;" horiz-adv-x="1920" d="M805 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM453 1176v-344q0 -179 -89.5 -326t-234.5 -217q-129 152 -129 351q0 200 129.5 352t323.5 184zM958 991q-128 -152 -128 -351q0 -201 128 -351q-145 70 -234.5 218t-89.5 328 v341q196 -33 324 -185zM1638 163q-122 -67 -261 -67q-141 0 -261 67q98 61 167 149t94 191q25 -103 94 -191t167 -149zM1286 1176v-344q0 -179 -91 -326t-237 -217v0q133 154 133 351q0 195 -133 351q129 151 328 185zM1920 640q0 -201 -129 -351q-145 70 -234.5 218 t-89.5 328v341q194 -32 323.5 -184t129.5 -352z" />
<glyph unicode="&#xf18c;" horiz-adv-x="1792" />
<glyph unicode="&#xf18d;" horiz-adv-x="1792" />
<glyph unicode="&#xf18e;" horiz-adv-x="1792" />
<glyph unicode="&#xf18b;" d="M1133 -34q-171 -94 -368 -94q-196 0 -367 94q138 87 235.5 211t131.5 268q35 -144 132.5 -268t235.5 -211zM638 1394v-485q0 -252 -126.5 -459.5t-330.5 -306.5q-181 215 -181 495q0 187 83.5 349.5t229.5 269.5t325 137zM1536 638q0 -280 -181 -495 q-204 99 -330.5 306.5t-126.5 459.5v485q179 -30 325 -137t229.5 -269.5t83.5 -349.5z" />
<glyph unicode="&#xf18c;" horiz-adv-x="1408" d="M1402 433q-32 -80 -76 -138t-91 -88.5t-99 -46.5t-101.5 -14.5t-96.5 8.5t-86.5 22t-69.5 27.5t-46 22.5l-17 10q-113 -228 -289.5 -359.5t-384.5 -132.5q-19 0 -32 13t-13 32t13 31.5t32 12.5q173 1 322.5 107.5t251.5 294.5q-36 -14 -72 -23t-83 -13t-91 2.5t-93 28.5 t-92 59t-84.5 100t-74.5 146q114 47 214 57t167.5 -7.5t124.5 -56.5t88.5 -77t56.5 -82q53 131 79 291q-7 -1 -18 -2.5t-46.5 -2.5t-69.5 0.5t-81.5 10t-88.5 23t-84 42.5t-75 65t-54.5 94.5t-28.5 127.5q70 28 133.5 36.5t112.5 -1t92 -30t73.5 -50t56 -61t42 -63t27.5 -56 t16 -39.5l4 -16q12 122 12 195q-8 6 -21.5 16t-49 44.5t-63.5 71.5t-54 93t-33 112.5t12 127t70 138.5q73 -25 127.5 -61.5t84.5 -76.5t48 -85t20.5 -89t-0.5 -85.5t-13 -76.5t-19 -62t-17 -42l-7 -15q1 -5 1 -50.5t-1 -71.5q3 7 10 18.5t30.5 43t50.5 58t71 55.5t91.5 44.5 t112 14.5t132.5 -24q-2 -78 -21.5 -141.5t-50 -104.5t-69.5 -71.5t-81.5 -45.5t-84.5 -24t-80 -9.5t-67.5 1t-46.5 4.5l-17 3q-23 -147 -73 -283q6 7 18 18.5t49.5 41t77.5 52.5t99.5 42t117.5 20t129 -23.5t137 -77.5z" />
<glyph unicode="&#xf18d;" horiz-adv-x="1280" d="M1259 283v-66q0 -85 -57.5 -144.5t-138.5 -59.5h-57l-260 -269v269h-529q-81 0 -138.5 59.5t-57.5 144.5v66h1238zM1259 609v-255h-1238v255h1238zM1259 937v-255h-1238v255h1238zM1259 1077v-67h-1238v67q0 84 57.5 143.5t138.5 59.5h846q81 0 138.5 -59.5t57.5 -143.5z " />
<glyph unicode="&#xf18e;" d="M1152 640q0 -14 -9 -23l-320 -320q-9 -9 -23 -9q-13 0 -22.5 9.5t-9.5 22.5v192h-352q-13 0 -22.5 9.5t-9.5 22.5v192q0 13 9.5 22.5t22.5 9.5h352v192q0 14 9 23t23 9q12 0 24 -10l319 -319q9 -9 9 -23zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf190;" d="M1152 736v-192q0 -13 -9.5 -22.5t-22.5 -9.5h-352v-192q0 -14 -9 -23t-23 -9q-12 0 -24 10l-319 319q-9 9 -9 23t9 23l320 320q9 9 23 9q13 0 22.5 -9.5t9.5 -22.5v-192h352q13 0 22.5 -9.5t9.5 -22.5zM1312 640q0 148 -73 273t-198 198t-273 73t-273 -73t-198 -198 t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf191;" d="M1024 960v-640q0 -26 -19 -45t-45 -19q-20 0 -37 12l-448 320q-27 19 -27 52t27 52l448 320q17 12 37 12q26 0 45 -19t19 -45zM1280 160v960q0 13 -9.5 22.5t-22.5 9.5h-960q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h960q13 0 22.5 9.5t9.5 22.5z M1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
<glyph unicode="&#xf192;" d="M1024 640q0 -106 -75 -181t-181 -75t-181 75t-75 181t75 181t181 75t181 -75t75 -181zM768 1184q-148 0 -273 -73t-198 -198t-73 -273t73 -273t198 -198t273 -73t273 73t198 198t73 273t-73 273t-198 198t-273 73zM1536 640q0 -209 -103 -385.5t-279.5 -279.5 t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
<glyph unicode="&#xf193;" horiz-adv-x="1664" d="M1023 349l102 -204q-58 -179 -210 -290t-339 -111q-156 0 -288.5 77.5t-210 210t-77.5 288.5q0 181 104.5 330t274.5 211l17 -131q-122 -54 -195 -165.5t-73 -244.5q0 -185 131.5 -316.5t316.5 -131.5q126 0 232.5 65t165 175.5t49.5 236.5zM1571 249l58 -114l-256 -128 q-13 -7 -29 -7q-40 0 -57 35l-239 477h-472q-24 0 -42.5 16.5t-21.5 40.5l-96 779q-2 16 6 42q14 51 57 82.5t97 31.5q66 0 113 -47t47 -113q0 -69 -52 -117.5t-120 -41.5l37 -289h423v-128h-407l16 -128h455q40 0 57 -35l228 -455z" />
<glyph unicode="&#xf194;" d="M1254 899q16 85 -21 132q-52 65 -187 45q-17 -3 -41 -12.5t-57.5 -30.5t-64.5 -48.5t-59.5 -70t-44.5 -91.5q80 7 113.5 -16t26.5 -99q-5 -52 -52 -143q-43 -78 -71 -99q-44 -32 -87 14q-23 24 -37.5 64.5t-19 73t-10 84t-8.5 71.5q-23 129 -34 164q-12 37 -35.5 69 t-50.5 40q-57 16 -127 -25q-54 -32 -136.5 -106t-122.5 -102v-7q16 -8 25.5 -26t21.5 -20q21 -3 54.5 8.5t58 10.5t41.5 -30q11 -18 18.5 -38.5t15 -48t12.5 -40.5q17 -46 53 -187q36 -146 57 -197q42 -99 103 -125q43 -12 85 -1.5t76 31.5q131 77 250 237 q104 139 172.5 292.5t82.5 226.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
<glyph unicode="&#xf195;" horiz-adv-x="1152" d="M1152 704q0 -191 -94.5 -353t-256.5 -256.5t-353 -94.5h-160q-14 0 -23 9t-9 23v611l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v93l-215 -66q-3 -1 -9 -1q-10 0 -19 6q-13 10 -13 26v128q0 23 23 31l233 71v250q0 14 9 23t23 9h160 q14 0 23 -9t9 -23v-181l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-93l375 116q15 5 28 -5t13 -26v-128q0 -23 -23 -31l-393 -121v-487q188 13 318 151t130 328q0 14 9 23t23 9h160q14 0 23 -9t9 -23z" />
<glyph unicode="&#xf196;" horiz-adv-x="1408" d="M1152 736v-64q0 -14 -9 -23t-23 -9h-352v-352q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v352h-352q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h352v352q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-352h352q14 0 23 -9t9 -23zM1280 288v832q0 66 -47 113t-113 47h-832 q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113zM1408 1120v-832q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h832q119 0 203.5 -84.5t84.5 -203.5z" />
<glyph unicode="&#xf197;" horiz-adv-x="1792" />
<glyph unicode="&#xf198;" horiz-adv-x="1792" />
<glyph unicode="&#xf199;" horiz-adv-x="1792" />
<glyph unicode="&#xf19a;" horiz-adv-x="1792" />
<glyph unicode="&#xf19b;" horiz-adv-x="1792" />
<glyph unicode="&#xf19c;" horiz-adv-x="1792" />
<glyph unicode="&#xf19d;" horiz-adv-x="1792" />
<glyph unicode="&#xf19e;" horiz-adv-x="1792" />
<glyph unicode="&#xf500;" horiz-adv-x="1792" />
</font>
</defs></svg>

Before

Width:  |  Height:  |  Size: 193 KiB

After

Width:  |  Height:  |  Size: 197 KiB

View File

@ -1,32 +0,0 @@
# jQuery MD5 Plugin
## Usage
Create ([hex](http://en.wikipedia.org/wiki/Hexadecimal)-encoded) [MD5](http://en.wikipedia.org/wiki/MD5) hash of a given string value:
var md5 = $.md5('value');
Create ([hex](http://en.wikipedia.org/wiki/Hexadecimal)-encoded) [HMAC](http://en.wikipedia.org/wiki/HMAC)-MD5 hash of a given string value and key:
var md5 = $.md5('value', 'key');
Create raw [MD5](http://en.wikipedia.org/wiki/MD5) hash of a given string value:
var md5 = $.md5('value', null, true);
Create raw [HMAC](http://en.wikipedia.org/wiki/HMAC)-MD5 hash of a given string value and key:
var md5 = $.md5('value', 'key', true);
## Requirements
None.
If [jQuery](http://jquery.com/) is not available, the md5 function will be added to the global object:
var md5 = md5('value');
## License
Released under the [MIT license](http://creativecommons.org/licenses/MIT/).
## Source Code & Download
* Browse and checkout the [source code](https://github.com/blueimp/jQuery-MD5).
* [Download](https://github.com/blueimp/jQuery-MD5/archives/master) the project to add the plugin to your website.

View File

@ -1,32 +0,0 @@
jQuery MD5 Plugin
=================
Usage
-----
Create (hex-encoded) MD5 hash of a given string value:
var md5 = $.md5('value');
Create (hex-encoded) HMAC-MD5 hash of a given string value and key:
var md5 = $.md5('value', 'key');
Create raw MD5 hash of a given string value:
var md5 = $.md5('value', null, true);
Create raw HMAC-MD5 hash of a given string value and key:
var md5 = $.md5('value', 'key', true);
Requirements
------------
None.
If jQuery is not available, the md5 function will be added to the global object:
var md5 = md5('value');
License
-------
Released under the MIT license:
http://creativecommons.org/licenses/MIT/
Source Code & Download
----------------------
https://github.com/blueimp/jQuery-MD5

View File

@ -1,269 +0,0 @@
/*
* jQuery MD5 Plugin 1.2.1
* https://github.com/blueimp/jQuery-MD5
*
* Copyright 2010, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://creativecommons.org/licenses/MIT/
*
* Based on
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
* Digest Algorithm, as defined in RFC 1321.
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
* Distributed under the BSD License
* See http://pajhome.org.uk/crypt/md5 for more info.
*/
/*jslint bitwise: true */
/*global unescape, jQuery */
(function ($) {
'use strict';
/*
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
* to work around bugs in some JS interpreters.
*/
function safe_add(x, y) {
var lsw = (x & 0xFFFF) + (y & 0xFFFF),
msw = (x >> 16) + (y >> 16) + (lsw >> 16);
return (msw << 16) | (lsw & 0xFFFF);
}
/*
* Bitwise rotate a 32-bit number to the left.
*/
function bit_rol(num, cnt) {
return (num << cnt) | (num >>> (32 - cnt));
}
/*
* These functions implement the four basic operations the algorithm uses.
*/
function md5_cmn(q, a, b, x, s, t) {
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
}
function md5_ff(a, b, c, d, x, s, t) {
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t) {
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t) {
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t) {
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}
/*
* Calculate the MD5 of an array of little-endian words, and a bit length.
*/
function binl_md5(x, len) {
/* append padding */
x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;
var i, olda, oldb, oldc, oldd,
a = 1732584193,
b = -271733879,
c = -1732584194,
d = 271733878;
for (i = 0; i < x.length; i += 16) {
olda = a;
oldb = b;
oldc = c;
oldd = d;
a = md5_ff(a, b, c, d, x[i], 7, -680876936);
d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
b = md5_gg(b, c, d, a, x[i], 20, -373897302);
a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
d = md5_hh(d, a, b, c, x[i], 11, -358537222);
c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
a = md5_ii(a, b, c, d, x[i], 6, -198630844);
d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
a = safe_add(a, olda);
b = safe_add(b, oldb);
c = safe_add(c, oldc);
d = safe_add(d, oldd);
}
return [a, b, c, d];
}
/*
* Convert an array of little-endian words to a string
*/
function binl2rstr(input) {
var i,
output = '';
for (i = 0; i < input.length * 32; i += 8) {
output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
}
return output;
}
/*
* Convert a raw string to an array of little-endian words
* Characters >255 have their high-byte silently ignored.
*/
function rstr2binl(input) {
var i,
output = [];
output[(input.length >> 2) - 1] = undefined;
for (i = 0; i < output.length; i += 1) {
output[i] = 0;
}
for (i = 0; i < input.length * 8; i += 8) {
output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
}
return output;
}
/*
* Calculate the MD5 of a raw string
*/
function rstr_md5(s) {
return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
}
/*
* Calculate the HMAC-MD5, of a key and some data (raw strings)
*/
function rstr_hmac_md5(key, data) {
var i,
bkey = rstr2binl(key),
ipad = [],
opad = [],
hash;
ipad[15] = opad[15] = undefined;
if (bkey.length > 16) {
bkey = binl_md5(bkey, key.length * 8);
}
for (i = 0; i < 16; i += 1) {
ipad[i] = bkey[i] ^ 0x36363636;
opad[i] = bkey[i] ^ 0x5C5C5C5C;
}
hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
}
/*
* Convert a raw string to a hex string
*/
function rstr2hex(input) {
var hex_tab = '0123456789abcdef',
output = '',
x,
i;
for (i = 0; i < input.length; i += 1) {
x = input.charCodeAt(i);
output += hex_tab.charAt((x >>> 4) & 0x0F) +
hex_tab.charAt(x & 0x0F);
}
return output;
}
/*
* Encode a string as utf-8
*/
function str2rstr_utf8(input) {
return unescape(encodeURIComponent(input));
}
/*
* Take string arguments and return either raw or hex encoded strings
*/
function raw_md5(s) {
return rstr_md5(str2rstr_utf8(s));
}
function hex_md5(s) {
return rstr2hex(raw_md5(s));
}
function raw_hmac_md5(k, d) {
return rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d));
}
function hex_hmac_md5(k, d) {
return rstr2hex(raw_hmac_md5(k, d));
}
$.md5 = function (string, key, raw) {
if (!key) {
if (!raw) {
return hex_md5(string);
} else {
return raw_md5(string);
}
}
if (!raw) {
return hex_hmac_md5(key, string);
} else {
return raw_hmac_md5(key, string);
}
};
}(typeof jQuery === 'function' ? jQuery : this));

View File

@ -1,43 +0,0 @@
<!DOCTYPE HTML>
<!--
/*
* jQuery MD5 Plugin Tests 1.1
* https://github.com/blueimp/jQuery-MD5
*
* Copyright 2010, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://creativecommons.org/licenses/MIT/
*/
-->
<html lang="en">
<head>
<meta charset="utf-8">
<title>jQuery MD5 Plugin Tests</title>
<link rel="stylesheet" href="http://code.jquery.com/qunit/git/qunit.css">
</head>
<body>
<h1 id="qunit-header">jQuery MD5 Plugin Tests</h1>
<h2 id="qunit-banner"></h2>
<div id="qunit-testrunner-toolbar"></div>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script>
(function ($) {
'use strict';
var nojquery = /nojquery=true/.test(location.search);
$('<label><input type="checkbox">nojquery<\/label>').click(function () {
location.search = nojquery ? '' : '?nojquery=true';
}).appendTo('body').children(':first').attr('checked', nojquery);
if (nojquery) {
window.jQuery = null;
}
}(window.jQuery));
</script>
<script src="../jquery.md5.js"></script>
<script src="http://code.jquery.com/qunit/git/qunit.js"></script>
<script src="tests.js"></script>
</body>
</html>

View File

@ -1,57 +0,0 @@
/*
* jQuery MD5 Plugin Tests 1.1
* https://github.com/blueimp/jQuery-MD5
*
* Copyright 2010, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* http://creativecommons.org/licenses/MIT/
*/
/*global jQuery, module, test, strictEqual */
(function ($) {
'use strict';
module('Hex-encoded MD5');
test('Creating hex-encoded MD5 hash of an ASCII value', function () {
strictEqual($.md5('value'), '2063c1608d6e0baf80249c42e2be5804');
});
test('Creating hex-encoded MD5 hash of an UTF-8 value', function () {
strictEqual($.md5('日本'), '4dbed2e657457884e67137d3514119b3');
});
module('Hex-encoded HMAC-MD5');
test('Creating hex-encoded HMAC-MD5 hash of an ASCII value and key', function () {
strictEqual($.md5('value', 'key'), '01433efd5f16327ea4b31144572c67f6');
});
test('Creating hex-encoded HMAC-MD5 hash of an UTF-8 value and key', function () {
strictEqual($.md5('日本', '日本'), 'c78b8c7357926981cc04740bd3e9d015');
});
module('Raw MD5');
test('Creating raw MD5 hash of an ASCII value', function () {
strictEqual($.md5('value', null, true), ' c\xc1`\x8dn\x0b\xaf\x80$\x9cB\xe2\xbeX\x04');
});
test('Creating raw MD5 hash of an UTF-8 value', function () {
strictEqual($.md5('日本', null, true), 'M\xbe\xd2\xe6WEx\x84\xe6q7\xd3QA\x19\xb3');
});
module('Raw HMAC-MD5');
test('Creating raw HMAC-MD5 hash of an ASCII value and key', function () {
strictEqual($.md5('value', 'key', true), '\x01C>\xfd_\x162~\xa4\xb3\x11DW,g\xf6');
});
test('Creating raw HMAC-MD5 hash of an UTF-8 value and key', function () {
strictEqual($.md5('日本', '日本', true), '\xc7\x8b\x8csW\x92i\x81\xcc\x04t\x0b\xd3\xe9\xd0\x15');
});
}(typeof jQuery === 'function' ? jQuery : this));

View File

@ -1,12 +1,11 @@
// Underscore.string
// (c) 2010 Esa-Matti Suuronen <esa-matti aet suuronen dot org>
// Underscore.strings is freely distributable under the terms of the MIT license.
// Documentation: https://github.com/epeli/underscore.string
// Some code is borrowed from MooTools and Alexandru Marasteanu.
// Underscore.string
// (c) 2010 Esa-Matti Suuronen <esa-matti aet suuronen dot org>
// Underscore.string is freely distributable under the terms of the MIT license.
// Documentation: https://github.com/epeli/underscore.string
// Some code is borrowed from MooTools and Alexandru Marasteanu.
// Version '2.3.2'
// Version 2.2.0rc
(function(root){
!function(root, String){
'use strict';
// Defining helper functions.
@ -16,36 +15,51 @@
var nativeTrimLeft = String.prototype.trimLeft;
var parseNumber = function(source) { return source * 1 || 0; };
var strRepeat = function(str, qty, separator){
// ~~var — is the fastest available way to convert anything to Integer in javascript.
// We'll use it extensively in this lib.
str += ''; qty = ~~qty;
for (var repeat = []; qty > 0; repeat[--qty] = str) {}
return repeat.join(separator == null ? '' : separator);
};
var slice = function(a){
return Array.prototype.slice.call(a);
};
var defaultToWhiteSpace = function(characters){
if (characters != null) {
return '[' + _s.escapeRegExp(''+characters) + ']';
var strRepeat = function(str, qty){
if (qty < 1) return '';
var result = '';
while (qty > 0) {
if (qty & 1) result += str;
qty >>= 1, str += str;
}
return '\\s';
return result;
};
var slice = [].slice;
var defaultToWhiteSpace = function(characters) {
if (characters == null)
return '\\s';
else if (characters.source)
return characters.source;
else
return '[' + _s.escapeRegExp(characters) + ']';
};
// Helper for toBoolean
function boolMatch(s, matchers) {
var i, matcher, down = s.toLowerCase();
matchers = [].concat(matchers);
for (i = 0; i < matchers.length; i += 1) {
matcher = matchers[i];
if (!matcher) continue;
if (matcher.test && matcher.test(s)) return true;
if (matcher.toLowerCase() === down) return true;
}
}
var escapeChars = {
lt: '<',
gt: '>',
quot: '"',
apos: "'",
amp: '&'
amp: '&',
apos: "'"
};
var reversedEscapeChars = {};
for(var key in escapeChars){ reversedEscapeChars[escapeChars[key]] = key; }
for(var key in escapeChars) reversedEscapeChars[escapeChars[key]] = key;
reversedEscapeChars["'"] = '#39';
// sprintf() for JavaScript 0.7-beta1
// http://www.diveintojavascript.com/projects/javascript-sprintf
@ -175,28 +189,28 @@
var _s = {
VERSION: '2.2.0rc',
VERSION: '2.3.0',
isBlank: function(str){
if (str == null) str = '';
return (/^\s*$/).test(str);
},
stripTags: function(str){
return (''+str).replace(/<\/?[^>]+>/g, '');
if (str == null) return '';
return String(str).replace(/<\/?[^>]+>/g, '');
},
capitalize : function(str) {
str += '';
return str.charAt(0).toUpperCase() + str.substring(1);
capitalize : function(str){
str = str == null ? '' : String(str);
return str.charAt(0).toUpperCase() + str.slice(1);
},
chop: function(str, step){
str = str+'';
step = ~~step || str.length;
var arr = [];
for (var i = 0; i < str.length; i += step)
arr.push(str.slice(i,i + step));
return arr;
if (str == null) return [];
str = String(str);
step = ~~step;
return step > 0 ? str.match(new RegExp('.{1,' + step + '}', 'g')) : [str];
},
clean: function(str){
@ -204,22 +218,47 @@
},
count: function(str, substr){
str += ''; substr += '';
return str.split(substr).length - 1;
if (str == null || substr == null) return 0;
str = String(str);
substr = String(substr);
var count = 0,
pos = 0,
length = substr.length;
while (true) {
pos = str.indexOf(substr, pos);
if (pos === -1) break;
count++;
pos += length;
}
return count;
},
chars: function(str) {
return (''+str).split('');
if (str == null) return [];
return String(str).split('');
},
swapCase: function(str) {
if (str == null) return '';
return String(str).replace(/\S/g, function(c){
return c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase();
});
},
escapeHTML: function(str) {
return (''+str).replace(/[&<>"']/g, function(match){ return '&' + reversedEscapeChars[match] + ';'; });
if (str == null) return '';
return String(str).replace(/[&<>"']/g, function(m){ return '&' + reversedEscapeChars[m] + ';'; });
},
unescapeHTML: function(str) {
return (''+str).replace(/\&([^;]+);/g, function(entity, entityCode){
if (str == null) return '';
return String(str).replace(/\&([^;]+);/g, function(entity, entityCode){
var match;
if (entityCode in escapeChars) {
return escapeChars[entityCode];
} else if (match = entityCode.match(/^#x([\da-fA-F]+)$/)) {
@ -233,31 +272,8 @@
},
escapeRegExp: function(str){
// From MooTools core 1.2.4
return str.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
},
insert: function(str, i, substr){
var arr = _s.chars(str);
arr.splice(~~i, 0, ''+substr);
return arr.join('');
},
include: function(str, needle){
return !!~(''+str).indexOf(needle);
},
join: function() {
var args = slice(arguments);
return args.join(args.shift());
},
lines: function(str) {
return (''+str).split("\n");
},
reverse: function(str){
return _s.chars(str).reverse().join('');
if (str == null) return '';
return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
},
splice: function(str, i, howmany, substr){
@ -266,31 +282,62 @@
return arr.join('');
},
insert: function(str, i, substr){
return _s.splice(str, i, 0, substr);
},
include: function(str, needle){
if (needle === '') return true;
if (str == null) return false;
return String(str).indexOf(needle) !== -1;
},
join: function() {
var args = slice.call(arguments),
separator = args.shift();
if (separator == null) separator = '';
return args.join(separator);
},
lines: function(str) {
if (str == null) return [];
return String(str).split("\n");
},
reverse: function(str){
return _s.chars(str).reverse().join('');
},
startsWith: function(str, starts){
str += ''; starts += '';
return str.length >= starts.length && str.substring(0, starts.length) === starts;
if (starts === '') return true;
if (str == null || starts == null) return false;
str = String(str); starts = String(starts);
return str.length >= starts.length && str.slice(0, starts.length) === starts;
},
endsWith: function(str, ends){
str += ''; ends += '';
return str.length >= ends.length && str.substring(str.length - ends.length) === ends;
if (ends === '') return true;
if (str == null || ends == null) return false;
str = String(str); ends = String(ends);
return str.length >= ends.length && str.slice(str.length - ends.length) === ends;
},
succ: function(str){
str += '';
var arr = _s.chars(str);
arr.splice(str.length-1, 1, String.fromCharCode(str.charCodeAt(str.length-1) + 1));
return arr.join('');
if (str == null) return '';
str = String(str);
return str.slice(0, -1) + String.fromCharCode(str.charCodeAt(str.length-1) + 1);
},
titleize: function(str){
return (''+str).replace(/\b./g, function(ch){ return ch.toUpperCase(); });
if (str == null) return '';
str = String(str).toLowerCase();
return str.replace(/(?:^|\s|-)\S/g, function(c){ return c.toUpperCase(); });
},
camelize: function(str){
return _s.trim(str).replace(/[-_\s]+(.)?/g, function(match, chr){
return chr && chr.toUpperCase();
});
return _s.trim(str).replace(/[-_\s]+(.)?/g, function(match, c){ return c ? c.toUpperCase() : ""; });
},
underscored: function(str){
@ -298,45 +345,41 @@
},
dasherize: function(str){
return _s.trim(str).replace(/[_\s]+/g, '-').replace(/([A-Z])/g, '-$1').replace(/-+/g, '-').toLowerCase();
return _s.trim(str).replace(/([A-Z])/g, '-$1').replace(/[-_\s]+/g, '-').toLowerCase();
},
classify: function(str){
str += '';
return _s.titleize(str.replace(/_/g, ' ')).replace(/\s/g, '')
return _s.titleize(String(str).replace(/[\W_]/g, ' ')).replace(/\s/g, '');
},
humanize: function(str){
return _s.capitalize(this.underscored(str).replace(/_id$/,'').replace(/_/g, ' '));
return _s.capitalize(_s.underscored(str).replace(/_id$/,'').replace(/_/g, ' '));
},
trim: function(str, characters){
str += '';
if (!characters && nativeTrim) { return nativeTrim.call(str); }
if (str == null) return '';
if (!characters && nativeTrim) return nativeTrim.call(str);
characters = defaultToWhiteSpace(characters);
return str.replace(new RegExp('\^' + characters + '+|' + characters + '+$', 'g'), '');
return String(str).replace(new RegExp('\^' + characters + '+|' + characters + '+$', 'g'), '');
},
ltrim: function(str, characters){
str+='';
if (!characters && nativeTrimLeft) {
return nativeTrimLeft.call(str);
}
if (str == null) return '';
if (!characters && nativeTrimLeft) return nativeTrimLeft.call(str);
characters = defaultToWhiteSpace(characters);
return str.replace(new RegExp('^' + characters + '+'), '');
return String(str).replace(new RegExp('^' + characters + '+'), '');
},
rtrim: function(str, characters){
str+='';
if (!characters && nativeTrimRight) {
return nativeTrimRight.call(str);
}
if (str == null) return '';
if (!characters && nativeTrimRight) return nativeTrimRight.call(str);
characters = defaultToWhiteSpace(characters);
return str.replace(new RegExp(characters + '+$'), '');
return String(str).replace(new RegExp(characters + '+$'), '');
},
truncate: function(str, length, truncateStr){
str += ''; truncateStr = truncateStr || '...';
if (str == null) return '';
str = String(str); truncateStr = truncateStr || '...';
length = ~~length;
return str.length > length ? str.slice(0, length) + truncateStr : str;
},
@ -344,57 +387,53 @@
/**
* _s.prune: a more elegant version of truncate
* prune extra chars, never leaving a half-chopped word.
* @author github.com/sergiokas
* @author github.com/rwz
*/
prune: function(str, length, pruneStr){
str += ''; length = ~~length;
pruneStr = pruneStr != null ? ''+pruneStr : '...';
var pruned, borderChar, template = str.replace(/\W/g, function(ch){
return (ch.toUpperCase() !== ch.toLowerCase()) ? 'A' : ' ';
});
borderChar = template.charAt(length);
pruned = template.slice(0, length);
// Check if we're in the middle of a word
if (borderChar && borderChar.match(/\S/))
pruned = pruned.replace(/\s\S+$/, '');
pruned = _s.rtrim(pruned);
return (pruned+pruneStr).length > str.length ? str : str.substring(0, pruned.length)+pruneStr;
if (str == null) return '';
str = String(str); length = ~~length;
pruneStr = pruneStr != null ? String(pruneStr) : '...';
if (str.length <= length) return str;
var tmpl = function(c){ return c.toUpperCase() !== c.toLowerCase() ? 'A' : ' '; },
template = str.slice(0, length+1).replace(/.(?=\W*\w*$)/g, tmpl); // 'Hello, world' -> 'HellAA AAAAA'
if (template.slice(template.length-2).match(/\w\w/))
template = template.replace(/\s*\S+$/, '');
else
template = _s.rtrim(template.slice(0, template.length-1));
return (template+pruneStr).length > str.length ? str : str.slice(0, template.length)+pruneStr;
},
words: function(str, delimiter) {
if (_s.isBlank(str)) return [];
return _s.trim(str, delimiter).split(delimiter || /\s+/);
},
pad: function(str, length, padStr, type) {
str += '';
str = str == null ? '' : String(str);
length = ~~length;
var padlen = 0;
length = ~~length;
if (!padStr) {
if (!padStr)
padStr = ' ';
} else if (padStr.length > 1) {
else if (padStr.length > 1)
padStr = padStr.charAt(0);
}
switch(type) {
case 'right':
padlen = (length - str.length);
padlen = length - str.length;
return str + strRepeat(padStr, padlen);
case 'both':
padlen = (length - str.length);
return strRepeat(padStr, Math.ceil(padlen/2)) +
str +
strRepeat(padStr, Math.floor(padlen/2));
padlen = length - str.length;
return strRepeat(padStr, Math.ceil(padlen/2)) + str
+ strRepeat(padStr, Math.floor(padlen/2));
default: // 'left'
padlen = (length - str.length);
padlen = length - str.length;
return strRepeat(padStr, padlen) + str;
}
},
@ -419,76 +458,185 @@
},
toNumber: function(str, decimals) {
str += '';
var num = parseNumber(parseNumber(str).toFixed(~~decimals));
return num === 0 && !str.match(/^0+$/) ? Number.NaN : num;
if (!str) return 0;
str = _s.trim(str);
if (!str.match(/^-?\d+(?:\.\d+)?$/)) return NaN;
return parseNumber(parseNumber(str).toFixed(~~decimals));
},
numberFormat : function(number, dec, dsep, tsep) {
if (isNaN(number) || number == null) return '';
number = number.toFixed(~~dec);
tsep = typeof tsep == 'string' ? tsep : ',';
var parts = number.split('.'), fnums = parts[0],
decimals = parts[1] ? (dsep || '.') + parts[1] : '';
return fnums.replace(/(\d)(?=(?:\d{3})+$)/g, '$1' + tsep) + decimals;
},
strRight: function(str, sep){
str += ''; sep = sep != null ? ''+sep : sep;
if (str == null) return '';
str = String(str); sep = sep != null ? String(sep) : sep;
var pos = !sep ? -1 : str.indexOf(sep);
return ~pos ? str.slice(pos+sep.length, str.length) : str;
},
strRightBack: function(str, sep){
str += ''; sep = sep != null ? ''+sep : sep;
if (str == null) return '';
str = String(str); sep = sep != null ? String(sep) : sep;
var pos = !sep ? -1 : str.lastIndexOf(sep);
return ~pos ? str.slice(pos+sep.length, str.length) : str;
},
strLeft: function(str, sep){
str += ''; sep = sep != null ? ''+sep : sep;
if (str == null) return '';
str = String(str); sep = sep != null ? String(sep) : sep;
var pos = !sep ? -1 : str.indexOf(sep);
return ~pos ? str.slice(0, pos) : str;
},
strLeftBack: function(str, sep){
if (str == null) return '';
str += ''; sep = sep != null ? ''+sep : sep;
var pos = str.lastIndexOf(sep);
return ~pos ? str.slice(0, pos) : str;
},
toSentence: function(array, separator, lastSeparator) {
separator || (separator = ', ');
lastSeparator || (lastSeparator = ' and ');
var length = array.length, str = '';
toSentence: function(array, separator, lastSeparator, serial) {
separator = separator || ', ';
lastSeparator = lastSeparator || ' and ';
var a = array.slice(), lastMember = a.pop();
for (var i = 0; i < length; i++) {
str += array[i];
if (i === (length - 2)) { str += lastSeparator; }
else if (i < (length - 1)) { str += separator; }
}
if (array.length > 2 && serial) lastSeparator = _s.rtrim(separator) + lastSeparator;
return str;
return a.length ? a.join(separator) + lastSeparator + lastMember : lastMember;
},
toSentenceSerial: function() {
var args = slice.call(arguments);
args[3] = true;
return _s.toSentence.apply(_s, args);
},
slugify: function(str) {
var from = "ąàáäâãćęèéëêìíïîłńòóöôõùúüûñçżź",
to = "aaaaaaceeeeeiiiilnooooouuuunczz",
if (str == null) return '';
var from = "ąàáäâãåæăćęèéëêìíïîłńòóöôõøśșțùúüûñçżź",
to = "aaaaaaaaaceeeeeiiiilnoooooosstuuuunczz",
regex = new RegExp(defaultToWhiteSpace(from), 'g');
str = (''+str).toLowerCase();
str = str.replace(regex, function(ch){
var index = from.indexOf(ch);
str = String(str).toLowerCase().replace(regex, function(c){
var index = from.indexOf(c);
return to.charAt(index) || '-';
});
return _s.trim(str.replace(/[^\w\s-]/g, '').replace(/[-\s]+/g, '-'), '-');
return _s.dasherize(str.replace(/[^\w\s-]/g, ''));
},
surround: function(str, wrapper) {
return [wrapper, str, wrapper].join('');
},
quote: function(str, quoteChar) {
return _s.surround(str, quoteChar || '"');
},
unquote: function(str, quoteChar) {
quoteChar = quoteChar || '"';
if (str[0] === quoteChar && str[str.length-1] === quoteChar)
return str.slice(1,str.length-1);
else return str;
},
exports: function() {
var result = {};
for (var prop in this) {
if (!this.hasOwnProperty(prop) || ~_s.words('include contains reverse').indexOf(prop)) continue;
if (!this.hasOwnProperty(prop) || prop.match(/^(?:include|contains|reverse)$/)) continue;
result[prop] = this[prop];
}
return result;
},
repeat: strRepeat
repeat: function(str, qty, separator){
if (str == null) return '';
qty = ~~qty;
// using faster implementation if separator is not needed;
if (separator == null) return strRepeat(String(str), qty);
// this one is about 300x slower in Google Chrome
for (var repeat = []; qty > 0; repeat[--qty] = str) {}
return repeat.join(separator);
},
naturalCmp: function(str1, str2){
if (str1 == str2) return 0;
if (!str1) return -1;
if (!str2) return 1;
var cmpRegex = /(\.\d+)|(\d+)|(\D+)/g,
tokens1 = String(str1).toLowerCase().match(cmpRegex),
tokens2 = String(str2).toLowerCase().match(cmpRegex),
count = Math.min(tokens1.length, tokens2.length);
for(var i = 0; i < count; i++) {
var a = tokens1[i], b = tokens2[i];
if (a !== b){
var num1 = parseInt(a, 10);
if (!isNaN(num1)){
var num2 = parseInt(b, 10);
if (!isNaN(num2) && num1 - num2)
return num1 - num2;
}
return a < b ? -1 : 1;
}
}
if (tokens1.length === tokens2.length)
return tokens1.length - tokens2.length;
return str1 < str2 ? -1 : 1;
},
levenshtein: function(str1, str2) {
if (str1 == null && str2 == null) return 0;
if (str1 == null) return String(str2).length;
if (str2 == null) return String(str1).length;
str1 = String(str1); str2 = String(str2);
var current = [], prev, value;
for (var i = 0; i <= str2.length; i++)
for (var j = 0; j <= str1.length; j++) {
if (i && j)
if (str1.charAt(j - 1) === str2.charAt(i - 1))
value = prev;
else
value = Math.min(current[j], current[j - 1], prev) + 1;
else
value = i + j;
prev = current[j];
current[j] = value;
}
return current.pop();
},
toBoolean: function(str, trueValues, falseValues) {
if (typeof str === "number") str = "" + str;
if (typeof str !== "string") return !!str;
str = _s.trim(str);
if (boolMatch(str, trueValues || ["true", "1"])) return true;
if (boolMatch(str, falseValues || ["false", "0"])) return false;
}
};
// Aliases
@ -500,26 +648,26 @@
_s.rjust = _s.lpad;
_s.ljust = _s.rpad;
_s.contains = _s.include;
_s.q = _s.quote;
_s.toBool = _s.toBoolean;
// Exporting
// CommonJS module is defined
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
// Export module
if (typeof module !== 'undefined' && module.exports)
module.exports = _s;
}
exports._s = _s;
} else if (typeof define === 'function' && define.amd) {
// Register as a named module with AMD.
define('underscore.string', function() {
return _s;
});
} else {
// Integrate with Underscore.js if defined
// or create our own underscore object.
root._ = root._ || {};
root._.string = root._.str = _s;
exports._s = _s;
}
}(this || window));
// Register as a named module with AMD.
if (typeof define === 'function' && define.amd)
define('underscore.string', [], function(){ return _s; });
// Integrate with Underscore.js if defined
// or create our own underscore object.
root._ = root._ || {};
root._.string = root._.str = _s;
}(this, String);

File diff suppressed because it is too large Load Diff

View File

@ -111,6 +111,8 @@
}
.openerp h4 {
margin: 4px 0;
font-weight: bold;
font-size: inherit;
}
.openerp a.button:link, .openerp a.button:visited, .openerp button, .openerp input[type='submit'], .openerp .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button {
display: inline-block;
@ -199,6 +201,7 @@
}
.openerp.ui-dialog {
display: none;
height: auto !important;
padding: 6px;
background-color: rgba(60, 60, 60, 0.7);
border: 1px solid;
@ -241,6 +244,7 @@
}
.openerp.ui-dialog .ui-dialog-content {
background: white;
width: auto !important;
}
.openerp.ui-dialog .ui-dialog-buttonpane {
border-top: 1px solid #e0e0e0;
@ -529,6 +533,15 @@
.openerp .oe_grey {
color: #aaaaaa;
}
.openerp .oe_error_detail hr {
display: block;
-webkit-margin-before: 0.5em;
-webkit-margin-after: 0.5em;
-webkit-margin-start: auto;
-webkit-margin-end: auto;
border-style: inset;
border-width: 1px;
}
.openerp .oe_tag {
border: 1px solid #afafb6;
font-size: 11px;
@ -680,6 +693,9 @@
.openerp .oe_notebook_page {
padding: 0;
}
.openerp .oe_notebook_page > label:not([for]) {
font-weight: normal !important;
}
.openerp div.ui-tabs {
padding: 3px 0px 3px 0px;
}
@ -739,9 +755,6 @@
display: block;
color: #4c4c4c;
text-decoration: none;
width: 200px;
text-overflow: ellipsis;
overflow: hidden;
}
.openerp .oe_dropdown_menu > li > a:hover {
text-decoration: none;
@ -979,7 +992,7 @@
}
.openerp .oe_login .oe_login_footer a {
color: #eeeeee;
margin: 0 8px;
margin: 0 6px;
}
.openerp .oe_login .oe_login_footer a:hover {
text-decoration: underline;
@ -1025,19 +1038,7 @@
.openerp .oe_content_full_screen .oe_topbar, .openerp .oe_content_full_screen .oe_leftbar {
display: none;
}
.openerp .oe_topbar {
width: 100%;
height: 32px;
background-color: #414141;
background-color: #454343;
background-image: -webkit-gradient(linear, left top, left bottom, from(#646060), to(#262626));
background-image: -webkit-linear-gradient(top, #646060, #262626);
background-image: -moz-linear-gradient(top, #646060, #262626);
background-image: -ms-linear-gradient(top, #646060, #262626);
background-image: -o-linear-gradient(top, #646060, #262626);
background-image: linear-gradient(to bottom, #646060, #262626);
}
.openerp .oe_topbar .oe_topbar_anonymous_login {
.openerp .navbar .oe_topbar_anonymous_login {
background-color: #dc5f59;
color: #eeeeee;
background-color: #be4343;
@ -1048,11 +1049,11 @@
background-image: -o-linear-gradient(top, #fc8787, maroon);
background-image: linear-gradient(to bottom, #fc8787, maroon);
}
.openerp .oe_topbar .oe_topbar_anonymous_login a {
.openerp .navbar .oe_topbar_anonymous_login a {
display: block;
padding: 5px 10px 7px;
line-height: 20px;
height: 20px;
height: 30px;
text-decoration: none;
color: white;
background: transparent;
@ -1062,7 +1063,7 @@
-o-transition: all 0.2s ease-out;
transition: all 0.2s ease-out;
}
.openerp .oe_topbar .oe_topbar_anonymous_login a:hover {
.openerp .navbar .oe_topbar_anonymous_login a:hover {
background: rgba(0, 0, 0, 0.1);
color: white;
text-shadow: 0px 0px 3px rgba(0, 0, 0, 0.2);
@ -1070,9 +1071,9 @@
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset;
}
.openerp .oe_topbar .oe_topbar_item {
.openerp .navbar .oe_topbar_item {
display: block;
padding: 5px 10px 7px;
padding: 5px 10px 26px;
line-height: 20px;
height: 20px;
text-decoration: none;
@ -1085,7 +1086,7 @@
-o-transition: all 0.2s ease-out;
transition: all 0.2s ease-out;
}
.openerp .oe_topbar .oe_topbar_item:hover {
.openerp .navbar .oe_topbar_item:hover {
background: rgba(0, 0, 0, 0.2);
text-shadow: black 0px 0px 3px;
color: white;
@ -1093,7 +1094,7 @@
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
}
.openerp .oe_topbar .oe_topbar_avatar {
.openerp .navbar .oe_topbar_avatar {
width: 24px;
height: 24px;
margin: -2px 2px 0 0;
@ -1101,13 +1102,13 @@
-webkit-border-radius: 3px;
border-radius: 3px;
}
.openerp .oe_topbar .oe_topbar_avatar {
.openerp .navbar .oe_topbar_avatar {
vertical-align: top;
}
.openerp .oe_topbar .oe_dropdown_arrow:after {
.openerp .navbar .oe_dropdown_arrow:after {
border-top: 4px solid white;
}
.openerp .oe_topbar .oe_dropdown_menu {
.openerp .navbar .dropdown_menu {
top: 32px;
background: #333333;
background: rgba(37, 37, 37, 0.9);
@ -1122,14 +1123,14 @@
-moz-background-clip: padding-box;
background-clip: padding-box;
}
.openerp .oe_topbar .oe_dropdown_menu li {
.openerp .navbar .dropdown_menu li {
float: none;
padding: 3px 12px;
}
.openerp .oe_topbar .oe_dropdown_menu li a {
.openerp .navbar .dropdown_menu li a {
color: #eeeeee;
}
.openerp .oe_topbar .oe_dropdown_menu li:hover {
.openerp .navbar .dropdown_menu li:hover {
background-color: #212121;
background-image: -webkit-gradient(linear, left top, left bottom, from(#292929), to(#191919));
background-image: -webkit-linear-gradient(top, #292929, #191919);
@ -1141,21 +1142,21 @@
-webkit-box-shadow: none;
box-shadow: none;
}
.openerp .oe_topbar .oe_topbar_name {
.openerp .navbar .oe_topbar_name {
max-width: 150px;
overflow: hidden;
display: inline-block;
max-height: 100%;
height: 15px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.openerp .oe_menu {
.openerp .navbar-nav {
float: left;
padding: 0;
margin: 0;
font-size: 13px;
}
.openerp .oe_menu > li {
.openerp .navbar-nav > li {
list-style-type: none;
padding: 0;
margin: 0;
@ -1163,13 +1164,13 @@
display: block;
color: #eeeeee;
}
.openerp .oe_menu > li > a {
.openerp .navbar-nav > li > a {
display: block;
padding: 5px 10px 7px;
padding: 5px 10px 26px !important;
line-height: 20px;
height: 20px;
text-decoration: none;
color: #eeeeee;
color: #eeeeee !important;
vertical-align: top;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
-webkit-transition: all 0.2s ease-out;
@ -1178,7 +1179,7 @@
-o-transition: all 0.2s ease-out;
transition: all 0.2s ease-out;
}
.openerp .oe_menu > li > a:hover {
.openerp .navbar-nav > li > a:hover {
background: rgba(0, 0, 0, 0.2);
text-shadow: black 0px 0px 3px;
color: white;
@ -1186,7 +1187,7 @@
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
}
.openerp .oe_menu > li > .oe_active {
.openerp .navbar-nav > li > .active {
background: rgba(0, 0, 0, 0.3);
text-shadow: black 0px 0px 3px;
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.4) inset;
@ -1217,7 +1218,7 @@
width: 220px;
background: #f0eeee;
border-right: 1px solid #afafb6;
text-shadow: 0 1px 1px white;
text-shadow: none;
padding-bottom: 16px;
}
.openerp a.oe_logo {
@ -1269,37 +1270,9 @@
color: #7c7bad;
}
.openerp .oe_secondary_submenu {
padding: 2px 0 8px 0;
margin: 0;
}
.openerp .oe_secondary_submenu li {
position: relative;
margin: 0;
padding: 1px 0 1px 20px !important;
list-style-type: none;
}
.openerp .oe_secondary_submenu li a {
display: block;
color: #4c4c4c;
padding: 2px 4px 2px 0;
}
.openerp .oe_secondary_submenu li .oe_menu_label {
position: absolute;
top: 1px;
right: 1px;
font-size: 10px;
background: #7c7bad;
color: white;
padding: 2px 4px;
margin: 1px 6px 0 0;
border: 1px solid lightgrey;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
-moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2);
margin-bottom: 10px !important;
line-height: 1.1em;
margin-top: 3px;
}
.openerp .oe_secondary_submenu .oe_menu_text {
white-space: nowrap;
@ -1307,15 +1280,9 @@
display: inline-block;
text-overflow: ellipsis;
max-width: 85%;
margin-top: 1px;
}
.openerp .oe_secondary_submenu .oe_menu_counter {
float: right;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
margin: 1px;
padding: 1px 4px;
border: none;
}
.openerp .oe_secondary_submenu .oe_menu_counter:hover {
.openerp .oe_secondary_submenu .badge:hover {
cursor: pointer;
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
@ -1323,33 +1290,6 @@
-o-transform: scale(1.1);
transform: scale(1.1);
}
.openerp .oe_secondary_submenu .oe_active {
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);
-webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2);
box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2);
background: #7c7bad;
}
.openerp .oe_secondary_submenu .oe_active a {
color: white;
}
.openerp .oe_secondary_submenu .oe_active .oe_menu_label {
background: #eeeeee;
color: #7c7bad;
text-shadow: 0 1px 1px white;
-moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
}
.openerp .oe_secondary_submenu .oe_active .oe_menu_counter {
background: #eeeeee;
color: #7c7bad;
-moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2);
-webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2);
box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.2);
}
.openerp .oe_secondary_submenu .oe_menu_toggler:before {
width: 0;
height: 0;
@ -1374,9 +1314,6 @@
border-right: 4px solid transparent;
border-top: 4px solid #4c4c4c;
}
.openerp .oe_secondary_submenu .oe_secondary_submenu {
margin-left: -20px;
}
.openerp .oe_secondary_submenu .oe_secondary_submenu li {
margin-left: 20px;
}
@ -1443,6 +1380,7 @@
.openerp .oe_application .oe_breadcrumb_title > * {
display: inline-block;
overflow: hidden;
font-weight: bold;
}
.openerp .oe_view_manager {
display: table;
@ -1485,6 +1423,7 @@
font-size: 18px;
margin: 0;
float: left;
line-height: 30px;
}
.openerp .oe_view_manager table.oe_view_manager_header h2 a {
color: #7c7bad;
@ -1655,9 +1594,12 @@
.openerp .oe_view_manager_inline > .oe_view_manager_header, .openerp .oe_view_manager_inlineview > .oe_view_manager_header {
display: none;
}
.openerp .oe_popup_form > .oe_formview > .oe_form_pager {
.openerp .oe_popup_form .oe_formview .oe_form_pager {
display: none !important;
}
.openerp .oe_popup_form table label {
font-weight: normal;
}
.openerp .oe_popup_list_pager {
float: right;
}
@ -1683,6 +1625,16 @@
font-size: 12px;
line-height: 18px;
}
.openerp .oe_searchview input:not([type]), .openerp .oe_searchview input[type="text"], .openerp .oe_searchview input[type="number"] {
width: 156px;
height: 22px;
}
.openerp .oe_searchview input[type="checkbox"] {
margin: 3px 3px 3px 4px;
}
.openerp .oe_searchview select {
margin: 2px 4px 2px 0;
}
.openerp .oe_searchview.oe_focused {
border-color: #a6a6fe;
-moz-box-shadow: 0 1px 2px #a6a6fe inset;
@ -1907,6 +1859,7 @@
box-sizing: border-box;
display: table-cell;
width: 50%;
padding-left: 2px;
}
.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_section ul {
margin: 0 8px 8px;
@ -1942,7 +1895,7 @@
line-height: 18px;
}
.openerp .oe_searchview .oe_searchview_drawer form button {
margin: 0 0 8px 0;
margin: 0 0 8px -3px;
}
.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom {
padding: 0 8px 8px 8px;
@ -1970,6 +1923,9 @@
top: 0;
right: 5px;
}
.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_custom label {
font-weight: normal;
}
.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_dashboard form {
display: none;
margin-top: 2px;
@ -1997,6 +1953,7 @@
}
.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced li:first-child .searchview_extended_prop_or {
visibility: hidden;
margin-left: -14px;
}
.openerp .oe_searchview .oe_searchview_drawer .oe_searchview_advanced .searchview_extended_prop_or {
opacity: 0.5;
@ -2188,6 +2145,12 @@
background: url(/web/static/src/img/form_sheetbg.png);
border-bottom: 1px solid #dddddd;
}
.openerp .oe_application .oe_form_sheetbg .oe_subtotal_footer label {
font-weight: bold;
}
.openerp .oe_application .oe_form_sheetbg table label {
font-weight: normal;
}
.openerp .oe_application .oe_form_sheet {
border: 1px solid #c8c8d3;
-moz-box-shadow: 0 4px 20px rgba(0, 0, 0, 0.15);
@ -2276,7 +2239,7 @@
padding: 2px 11px 2px 0px !important;
}
.openerp .oe_form .oe_subtotal_footer label.oe_form_label_help {
font-weight: normal;
font-weight: normal !important;
}
.openerp .oe_form .oe_form_box_info {
background: #ffee99;
@ -2308,7 +2271,8 @@
.openerp .oe_form td.oe_form_group_cell_label label {
line-height: 18px;
display: block;
min-width: 140px;
min-width: 150px;
font-weight: bold !important;
}
.openerp .oe_form td.oe_form_group_cell + .oe_form_group_cell {
padding: 2px 0 2px 8px;
@ -2321,13 +2285,12 @@
padding-left: 20px;
}
.openerp .oe_form .oe_form_label_help[for], .openerp .oe_form .oe_form_label[for] {
font-weight: bold;
white-space: nowrap;
padding-right: 8px;
}
.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;
@ -2405,6 +2368,18 @@
height: inherit !important;
font-size: inherit;
}
.openerp .oe_form .oe_title h1, .openerp .oe_form h1 {
font-weight: bold;
font-size: 2em;
}
.openerp .oe_form h2 {
font-size: 1.5em;
}
.openerp .oe_form label {
font-weight: bold;
margin-bottom: 0px;
display: inline;
}
.openerp .oe_form .oe_form_field {
width: 100%;
display: inline-block;
@ -2542,6 +2517,9 @@
margin: 0;
padding: 0;
}
.openerp .oe_form .oe_form_field_binary {
display: inline-block;
}
.openerp .oe_form .oe_form_field_image {
padding: 0;
position: relative;
@ -2573,13 +2551,14 @@
display: inline-block;
clear: both;
width: 100%;
margin-bottom: -15px;
}
.openerp .oe_fileupload .oe_add {
float: left;
position: relative;
width: 100%;
left: 2px;
top: 7px;
margin: 9px 0;
overflow: hidden;
}
.openerp .oe_fileupload .oe_add button {
@ -2591,9 +2570,6 @@
}
.openerp .oe_fileupload .oe_add button.oe_attach {
width: 24px;
overflow: hidden;
width: 24px;
overflow: hidden;
background: transparent;
color: #7c7bad;
box-shadow: none;
@ -2642,6 +2618,9 @@
.openerp .oe_fileupload .oe_attachments .oe_attachment:nth-child(even) {
background: #f4f5fa;
}
.openerp .oe_form_field_many2one {
display: inline-block;
}
.openerp .oe_form_field_many2one td:first-child {
position: relative;
}
@ -2704,9 +2683,13 @@
padding-left: 24px;
margin: 0;
position: relative;
line-height: normal;
font-size: 100%;
font-weight: normal;
}
.openerp ul.oe_form_status li > .arrow, .openerp ul.oe_form_status_clickable li > .arrow {
width: 17px;
height: 30px;
display: inline-block;
vertical-align: top;
overflow: hidden;
@ -3204,9 +3187,6 @@
.openerp .oe_form_field_many2one .oe_m2o_cm_button {
line-height: 18px;
}
.openerp .oe_secondary_submenu {
line-height: 14px;
}
.openerp .oe_webclient .oe_star_on, .openerp .oe_webclient .oe_star_off {
top: 0px;
}
@ -3402,7 +3382,7 @@ div.ui-widget-overlay {
background: transparent;
}
.openerp_ie ul.oe_form_status li > .arrow span, .openerp_ie ul.oe_form_status_clickable li > .arrow span {
background-color: #fefefe !important;
background-color: #eeeeee !important;
}
.openerp_ie ul.oe_form_status li.oe_active > .label, .openerp_ie ul.oe_form_status_clickable li.oe_active > .label {
border-bottom: 1px solid #729fcf;
@ -3454,6 +3434,151 @@ div.ui-widget-overlay {
overflow: hidden !important;
}
}
.nav li > a {
padding: 3px 4px 2px 18px;
color: #4c4c4c;
}
.nav nav-pills.nav-stacked > li > ul {
padding-left: 16px;
}
.nav-pills > li.active > a, a.list-group-item.active > a {
background-color: #7c7bad;
color: white;
border-radius: 0;
}
.nav-pills > li.active a:hover, .nav-pills > li.active a:focus, a.list-group-item.active a:hover, a.list-group-item.active a:focus {
background-color: #7c7bad;
}
.nav-pills > li.active .badge, a.list-group-item.active .badge {
background-color: white;
color: #7c7bad;
text-shadow: none;
}
.badge {
font-weight: normal;
font-size: 11px;
background-color: #7c7bad;
}
button, body {
line-height: normal;
}
h1, h2 {
font-weight: bold;
}
h3 {
font-size: 1.17em;
font-weight: bold;
}
p {
display: block;
-webkit-margin-before: 1em;
-webkit-margin-after: 1em;
-webkit-margin-start: 0px;
-webkit-margin-end: 0px;
}
pre {
background-color: white;
border: none;
padding: 10px 0 3px 0;
}
.jqstooltip {
height: auto !important;
width: auto !important;
}
h5 {
font-weight: bold;
font-size: smaller;
}
.oe_form .oe_subtype label, .oe_subtype label {
font-weight: normal;
}
.oe_msg_subtype_check {
margin: 3px 3px 0 !important;
}
.oe_view_manager_new .oe_form_nosheet {
margin-top: 8px;
}
.oe_view_manager_new .oe_form_nosheet .oe_form_label {
font-weight: normal;
}
.navbar {
min-height: 32px;
margin-bottom: 0px;
border: none;
z-index: 1;
background-color: #414141;
background-color: #454343;
background-image: -webkit-gradient(linear, left top, left bottom, from(#646060), to(#262626));
background-image: -webkit-linear-gradient(top, #646060, #262626);
background-image: -moz-linear-gradient(top, #646060, #262626);
background-image: -ms-linear-gradient(top, #646060, #262626);
background-image: -o-linear-gradient(top, #646060, #262626);
background-image: linear-gradient(to bottom, #646060, #262626);
}
.navbar-default .navbar-nav li a:hover, .navbar-default .navbar-nav li a:focus {
background: rgba(0, 0, 0, 0.3);
}
.navbar-default .navbar-nav .open > a, .navbar-default .navbar-nav a:hover, .navbar-default .navbar-nav a:focus {
background: rgba(0, 0, 0, 0.3) !important;
}
.navbar-default .navbar-nav .dropdown > a .caret {
border-top-color: #777777 !important;
border-bottom-color: #777777 !important;
}
.navbar-nav li a {
padding: 4px 32px 4px 12px;
}
.dropdown-menu {
font-size: 13px;
padding: 4px 0;
background: #333333 !important;
background: rgba(37, 37, 37, 0.9) !important;
border-color: #999999;
border-color: rgba(0, 0, 0, 0.2);
background-color: #414141;
text-shadow: none;
background-color: #454343;
background-image: -webkit-gradient(linear, left top, left bottom, from(#646060), to(#262626));
background-image: -webkit-linear-gradient(top, #646060, #262626);
background-image: -moz-linear-gradient(top, #646060, #262626);
background-image: -ms-linear-gradient(top, #646060, #262626);
background-image: -o-linear-gradient(top, #646060, #262626);
background-image: linear-gradient(to bottom, #646060, #262626);
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
border-radius: 3px;
}
.dropdown-menu li a, .dropdown-menu li a:hover, .dropdown-menu li a:focus {
color: #eeeeee;
}
.ui-icon {
width: 18px;
height: 18px;
}
input[type="radio"], input[type="checkbox"] {
margin-right: 4px;
margin-left: 4px;
}
.blockUI.blockOverlay {
background-color: black;
opacity: 0.6;

View File

@ -204,6 +204,8 @@ $sheet-padding: 16px
vertical-align: middle
h4
margin: 4px 0
font-weight: bold
font-size: inherit
// }}}
// Button style {{{
a.button:link, a.button:visited, button, input[type='submit'], .ui-dialog-buttonpane .ui-dialog-buttonset .ui-button
@ -263,6 +265,7 @@ $sheet-padding: 16px
// Modal box
&.ui-dialog
display: none
height: auto !important
padding: 6px
//overflow: hidden
background-color: rgba(60,60,60,0.7)
@ -287,6 +290,7 @@ $sheet-padding: 16px
border: none
.ui-dialog-content
background: white
width: auto !important
.ui-dialog-buttonpane
border-top: 1px solid #e0e0e0
background: #f5f7f9
@ -467,7 +471,16 @@ $sheet-padding: 16px
max-width: 650px
.oe_grey
color: #aaa
// Added for generic error message and customize bootstrap3 <pre>,<hr>
.oe_error_detail
hr
display: block
-webkit-margin-before: 0.5em
-webkit-margin-after: 0.5em
-webkit-margin-start: auto
-webkit-margin-end: auto
border-style: inset
border-width: 1px
// }}}
// Tags (for many2many tags, among others) {{{
@ -589,6 +602,10 @@ $sheet-padding: 16px
cursor: default
.oe_notebook_page
padding: 0
//Customize label weight according bootstrap3
> label:not([for])
font-weight: normal !important
// End of customize
div.ui-tabs
padding: 3px 0px 3px 0px
.ui-tabs-hide
@ -630,9 +647,6 @@ $sheet-padding: 16px
display: block
color: #4c4c4c
text-decoration: none
width: 200px
text-overflow: ellipsis
overflow: hidden
&:hover
text-decoration: none
.oe_dropdown_arrow:after
@ -814,7 +828,7 @@ $sheet-padding: 16px
text-align: center
a
color: #eee
margin: 0 8px
margin: 0 6px
&:hover
text-decoration: underline
span
@ -857,11 +871,7 @@ $sheet-padding: 16px
// }}}
// Top Menu {{{
.oe_topbar
width: 100%
height: 32px
background-color: #414141
@include vertical-gradient(#646060, #262626)
.navbar
.oe_topbar_anonymous_login
background-color: #dc5f59
color: #eeeeee
@ -870,7 +880,7 @@ $sheet-padding: 16px
display: block
padding: 5px 10px 7px
line-height: 20px
height: 20px
height: 30px
text-decoration: none
color: white
background: transparent
@ -882,7 +892,7 @@ $sheet-padding: 16px
@include box-shadow(0 1px 2px rgba(0,0,0,0.2) inset)
.oe_topbar_item
display: block
padding: 5px 10px 7px
padding: 5px 10px 26px
line-height: 20px
height: 20px
text-decoration: none
@ -905,7 +915,7 @@ $sheet-padding: 16px
vertical-align: top
.oe_dropdown_arrow:after
border-top: 4px solid white
.oe_dropdown_menu
.dropdown_menu
top: 32px
background: #333
background: rgba(37,37,37,0.9)
@ -925,17 +935,17 @@ $sheet-padding: 16px
@include box-shadow(none)
.oe_topbar_name
max-width: 150px
overflow: hidden
display: inline-block
max-height: 100%
height: 15px // Customize to manage caret when topbar_name is over sized.
text-overflow: ellipsis
white-space: nowrap
overflow: hidden // Customize to bring ellipsis when topbar_name is over sized.
// oe menu is the list of the buttons on the left side of the bar.
// So why aren't the buttons oe_topbar_items ? This sad state of affairs
// is a leftover from an uncomplete refactoring when the left and top menu
// were merged. You are welcome to refactor and clean this up
.oe_menu
.navbar-nav
float: left
padding: 0
margin: 0
@ -949,11 +959,11 @@ $sheet-padding: 16px
color: #eeeeee
> a
display: block
padding: 5px 10px 7px
padding: 5px 10px 26px !important
line-height: 20px
height: 20px
text-decoration: none
color: #eee
color: #eee !important
vertical-align: top
text-shadow: 0 1px 1px rgba(0,0,0,0.2)
@include transition(all 0.2s ease-out)
@ -962,7 +972,7 @@ $sheet-padding: 16px
text-shadow: black 0px 0px 3px
color: white
@include box-shadow(0 1px 2px rgba(0,0,0,0.4) inset)
> .oe_active
> .active
background: rgba(0,0,0,0.30)
text-shadow: black 0px 0px 3px
@include box-shadow(0 1px 2px rgba(0,0,0,0.4) inset)
@ -990,7 +1000,7 @@ $sheet-padding: 16px
width: 220px
background: #f0eeee
border-right: 1px solid $tag-border
text-shadow: 0 1px 1px white
text-shadow: none
padding-bottom: 16px
a.oe_logo
position: relative
@ -1033,62 +1043,20 @@ $sheet-padding: 16px
margin-left: 8px
color: $link-color
.oe_secondary_submenu
padding: 2px 0 8px 0
margin: 0
li
position: relative
margin: 0
padding: 1px 0 1px 20px !important
list-style-type: none
a
display: block
color: #4c4c4c
padding: 2px 4px 2px 0
.oe_menu_label
position: absolute
top: 1px
right: 1px
font-size: 10px
background: $link-color
color: white
padding: 2px 4px
margin: 1px 6px 0 0
border: 1px solid lightGray
text-shadow: 0 1px 1px rgba(0,0,0,0.2)
@include radius(4px)
@include box-shadow(inset 0 1px 1px rgba(0, 0, 0, 0.2))
margin-bottom: 10px !important
line-height: 1.1em
margin-top: 3px
.oe_menu_text
white-space: nowrap
overflow: hidden
display: inline-block
text-overflow: ellipsis
max-width: 85%
.oe_menu_counter
float: right
text-shadow: 0 1px 1px rgba(0,0,0,0.2)
margin: 1px
padding: 1px 4px
border: none
margin-top: 1px
.badge
&:hover
cursor: pointer
@include transform(scale(1.1))
.oe_active
border-top: 1px solid lightGray
border-bottom: 1px solid #dedede
text-shadow: 0 1px 1px rgba(0,0,0,0.2)
@include box-shadow((inset 0 1px 3px rgba(0, 0, 0, 0.2), inset 0 -1px 3px rgba(40, 40, 40, 0.2)))
background: $link-color
a
color: white
.oe_menu_label
background: #eee
color: $link-color
text-shadow: 0 1px 1px white
@include box-shadow(0 1px 1px rgba(0, 0, 0, 0.2))
.oe_menu_counter
background: #eee
color: $link-color
@include box-shadow(inset 0 1px 2px rgba(0, 0, 0, 0.2))
.oe_menu_toggler:before
width: 0
height: 0
@ -1110,11 +1078,8 @@ $sheet-padding: 16px
border-left: 4px solid transparent
border-right: 4px solid transparent
border-top: 4px solid #4c4c4c
.oe_secondary_submenu
margin-left: -20px
.oe_secondary_submenu li
margin-left: 20px
// }}}
// About openerp {{{
.oe_about
@ -1160,6 +1125,7 @@ $sheet-padding: 16px
.oe_breadcrumb_title > *
display: inline-block
overflow: hidden
font-weight: bold
// }}}
// ViewManager common {{{
.oe_view_manager
@ -1198,6 +1164,7 @@ $sheet-padding: 16px
font-size: 18px
margin: 0
float: left
line-height: 30px
a
color: $link-color
.oe_dropdown_menu
@ -1326,8 +1293,13 @@ $sheet-padding: 16px
display: none
// }}}
// FormPopup {{{
.oe_popup_form > .oe_formview > .oe_form_pager
display: none !important
.oe_popup_form
.oe_formview .oe_form_pager
display: none !important
// Customize label weight for popup wizard appear from another wizard according bootstrap3
table label
font-weight: normal
// End of customize
.oe_popup_list_pager
float: right
// }}}
@ -1348,6 +1320,15 @@ $sheet-padding: 16px
height: 14px
font-size: 12px
line-height: 18px
//Customize searchview input, select
input:not([type]), input[type="text"], input[type="number"]
width: 156px
height: 22px
input[type="checkbox"]
margin: 3px 3px 3px 4px
select
margin: 2px 4px 2px 0
//End of customize
&.oe_focused
border-color: $tag-border-selected
@include box-shadow(0 1px 2px $tag-border-selected inset)
@ -1512,6 +1493,7 @@ $sheet-padding: 16px
@include box-sizing(border)
display: table-cell
width: 50%
padding-left: 2px // Managed padding-left according bootstrap3
ul
margin: 0 8px 8px
padding: 0
@ -1541,7 +1523,7 @@ $sheet-padding: 16px
margin: 4px 0
line-height: 18px
button
margin: 0 0 8px 0
margin: 0 0 8px -3px // Managed margin-left according bootstrap3
.oe_searchview_custom
padding: 0 8px 8px 8px
div
@ -1561,6 +1543,10 @@ $sheet-padding: 16px
position: absolute
top: 0
right: 5px
//Customize for searchview label
label
font-weight: normal
//End of Customize
.oe_searchview_dashboard
form
display: none
@ -1586,9 +1572,10 @@ $sheet-padding: 16px
white-space: nowrap
&:first-child .searchview_extended_prop_or
visibility: hidden
margin-left: -14px
.searchview_extended_prop_or
opacity: 0.5
margin-left: -14px
margin-left: -14px //Customize 'or' in searchview
.oe_opened
h4:before
content: ""
@ -1735,6 +1722,12 @@ $sheet-padding: 16px
.oe_form_sheetbg
background: url(/web/static/src/img/form_sheetbg.png)
border-bottom: 1px solid #ddd
// Customize font weight according bootstrap3
.oe_subtotal_footer label
font-weight: bold
table label
font-weight: normal
// End of customize
.oe_form_sheet
border: 1px solid #c8c8d3 //$tag-border
@include box-shadow(0 4px 20px rgba(0,0,0,0.15))
@ -1802,7 +1795,7 @@ $sheet-padding: 16px
font-weight: bold !important
padding: 2px 11px 2px 0px !important
label.oe_form_label_help
font-weight: normal
font-weight: normal !important
.oe_form_box_info
background: #fe9
border-bottom: 1px solid #cb6
@ -1829,7 +1822,8 @@ $sheet-padding: 16px
label
line-height: 18px
display: block
min-width: 140px
min-width: 150px
font-weight: bold !important
td.oe_form_group_cell + .oe_form_group_cell
padding: 2px 0 2px 8px
.oe_form_group
@ -1841,7 +1835,6 @@ $sheet-padding: 16px
// FormView.label {{{
.oe_form
.oe_form_label_help[for], .oe_form_label[for]
font-weight: bold
white-space: nowrap
padding-right: 8px
span
@ -1910,6 +1903,17 @@ $sheet-padding: 16px
input
height: inherit !important
font-size: inherit
// Customize for formview
.oe_title h1, h1
font-weight: bold
font-size: 2em
h2
font-size: 1.5em
label
font-weight: bold
margin-bottom: 0px
display: inline
// End of customize
.oe_form_field
width: 100%
display: inline-block
@ -2025,6 +2029,8 @@ $sheet-padding: 16px
margin: 0
padding: 0
.oe_form
.oe_form_field_binary
display: inline-block
.oe_form_field_image
padding: 0
position: relative
@ -2048,12 +2054,13 @@ $sheet-padding: 16px
display: inline-block
clear: both
width: 100%
margin-bottom: -15px
.oe_add
float: left
position: relative
width: 100%
left: +2px
top: +7px
margin: 9px 0 /* Customize margin according bootstrap3 */
overflow: hidden
button
display: inline
@ -2063,9 +2070,6 @@ $sheet-padding: 16px
vertical-align: middle
button.oe_attach
width: 24px
overflow: hidden
width: 24px
overflow: hidden
background: transparent
color: #7C7BAD
box-shadow: none
@ -2107,6 +2111,7 @@ $sheet-padding: 16px
// }}}
// FormView.many2one {{{
.oe_form_field_many2one
display: inline-block
td:first-child
position: relative
span.oe_m2o_drop_down_button
@ -2155,8 +2160,14 @@ $sheet-padding: 16px
padding-left: 24px
margin: 0
position: relative
// Customize for statusbar label
line-height: normal
font-size: 100%
font-weight: normal
// End of customize
> .arrow
width: 17px
height: 30px
display: inline-block
vertical-align: top
overflow: hidden
@ -2525,8 +2536,6 @@ $sheet-padding: 16px
top: -1px
.oe_form_field_many2one .oe_m2o_cm_button
line-height: 18px
.oe_secondary_submenu
line-height: 14px
.oe_webclient
.oe_star_on, .oe_star_off
top: 0px
@ -2684,7 +2693,7 @@ div.ui-widget-overlay
background: transparent
> .arrow
span
background-color: #fefefe !important
background-color: #eeeeee !important
li.oe_active
> .label
border-bottom: 1px solid #729fcf
@ -2731,6 +2740,121 @@ div.ui-widget-overlay
overflow: hidden !important
// }}}
// Customize bootstrap3 for leftbar
.nav
li > a
padding: 3px 4px 2px 18px
color: #4c4c4c
nav-pills.nav-stacked > li > ul
padding-left: 16px
.nav-pills > li.active,a.list-group-item.active
> a
background-color: #7c7bad
color: white
border-radius: 0
a:hover,a:focus
background-color: #7c7bad
.badge
background-color: white
color: #7c7bad
text-shadow: none
.badge
font-weight: normal
font-size: 11px
background-color: #7c7bad
// End of customize
// Customize for global tags
button, body
line-height: normal
h1,h2
font-weight: bold
h3
font-size: 1.17em
font-weight: bold
p
display: block
-webkit-margin-before: 1em
-webkit-margin-after: 1em
-webkit-margin-start: 0px
-webkit-margin-end: 0px
pre
background-color: #FFFFFF
border: none
padding: 10px 0 3px 0
// End of customize
// Customize for kanban tooltip
.jqstooltip
height: auto !important
width: auto !important
// End of kanban tooltip
// Customize for chatter
h5
font-weight: bold
font-size: smaller
.oe_form .oe_subtype label, .oe_subtype label
font-weight: normal
.oe_msg_subtype_check
margin: 3px 3px 0 !important
// End of customize
// Minimized unused white space and label weight for wizard popup
.oe_view_manager_new .oe_form_nosheet
margin-top: 8px
.oe_form_label
font-weight: normal
// End of customize
// navbar hack {{{
.navbar
min-height: 32px
margin-bottom: 0px
border: none
z-index: 1
background-color: #414141
@include vertical-gradient(#646060, #262626)
.navbar-default
.navbar-nav
li
a:hover,a:focus
background: rgba(0, 0, 0, 0.3)
.open > a,a:hover,a:focus
background: rgba(0, 0, 0, 0.3) !important
.dropdown > a .caret
border-top-color: #777 !important
border-bottom-color: #777 !important
.navbar-nav
li
a
padding: 4px 32px 4px 12px
.dropdown-menu
font-size: 13px
padding: 4px 0
background: #333333 !important
background: rgba(37, 37, 37, 0.9) !important
border-color: #999999
border-color: rgba(0, 0, 0, 0.2)
background-color: #414141
text-shadow: none
@include vertical-gradient(#646060, #262626)
@include radius(3px)
li
a,a:hover,a:focus
color: #eeeeee
// End hack }}}
// Hack for ui icon {{{
.ui-icon
width: 18px
height: 18px
// End hack}}}
input[type="radio"], input[type="checkbox"]
margin-right: 4px
margin-left: 4px
.blockUI.blockOverlay
background-color: black
opacity: 0.6000000238418579

View File

@ -1,6 +1,11 @@
.openerp .oe_export {
width: 100%;
}
/* Customize according bootstrap3 */
.openerp .oe_export label {
font-weight: normal;
}
/* End of customize */
.openerp .oe_export_row tr{
background-color: #FFFFFF;
font-size: 0.8em;

View File

@ -442,10 +442,10 @@ instance.web.DatabaseManager = instance.web.Widget.extend({
self.$el.html(QWeb.render("DatabaseManager", { widget : self }));
$('.oe_user_menu_placeholder').append(QWeb.render("DatabaseManager.user_menu",{ widget : self }));
$('.oe_secondary_menus_container').append(QWeb.render("DatabaseManager.menu",{ widget : self }));
$('ul.oe_secondary_submenu > li:first').addClass('oe_active');
$('ul.oe_secondary_submenu > li:first').addClass('active');
$('ul.oe_secondary_submenu > li').bind('click', function (event) {
var menuitem = $(this);
menuitem.addClass('oe_active').siblings().removeClass('oe_active');
menuitem.addClass('active').siblings().removeClass('active');
var form_id =menuitem.find('a').attr('href');
$(form_id).show().siblings().hide();
event.preventDefault();
@ -969,7 +969,7 @@ instance.web.Menu = instance.web.Widget.extend({
this.needaction_data = data;
_.each(this.needaction_data, function (item, menu_id) {
var $item = self.$secondary_menus.find('a[data-menu="' + menu_id + '"]');
$item.find('.oe_menu_counter').remove();
$item.find('.badge').remove();
if (item.needaction_counter && item.needaction_counter > 0) {
$item.append(QWeb.render("Menu.needaction_counter", { widget : item }));
}
@ -982,8 +982,8 @@ instance.web.Menu = instance.web.Widget.extend({
reflow: function() {
var self = this;
this.$el.height('auto').show();
var $more_container = this.$('.oe_menu_more_container').hide();
var $more = this.$('.oe_menu_more');
var $more_container = this.$('#menu_more_container').hide();
var $more = this.$('#menu_more');
$more.children('li').insertBefore($more_container);
var $toplevel_items = this.$el.children('li').not($more_container).hide();
$toplevel_items.each(function() {
@ -1026,8 +1026,8 @@ instance.web.Menu = instance.web.Widget.extend({
}
// Activate current main menu
this.$el.find('.oe_active').removeClass('oe_active');
$main_menu.addClass('oe_active');
this.$el.find('.active').removeClass('active');
$main_menu.addClass('active');
// Show current sub menu
this.$secondary_menus.find('.oe_secondary_menu').hide();
@ -1037,13 +1037,13 @@ instance.web.Menu = instance.web.Widget.extend({
this.$secondary_menus.parent('.oe_leftbar').toggle(!!$sub_menu.children().length);
// Activate current menu item and show parents
this.$secondary_menus.find('.oe_active').removeClass('oe_active');
this.$secondary_menus.find('.active').removeClass('active');
if ($main_menu !== $clicked_menu) {
$clicked_menu.parents().show();
if ($clicked_menu.is('.oe_menu_toggler')) {
$clicked_menu.toggleClass('oe_menu_opened').siblings('.oe_secondary_submenu:first').toggle();
} else {
$clicked_menu.parent().addClass('oe_active');
$clicked_menu.parent().addClass('active');
}
}
},
@ -1129,7 +1129,7 @@ instance.web.Menu = instance.web.Widget.extend({
},
on_menu_click: function(ev) {
ev.preventDefault();
var needaction = $(ev.target).is('div.oe_menu_counter');
var needaction = $(ev.target).is('div#menu_counter');
this.menu_click($(ev.currentTarget).data('menu'), needaction);
},
});
@ -1143,7 +1143,7 @@ instance.web.UserMenu = instance.web.Widget.extend({
start: function() {
var self = this;
this._super.apply(this, arguments);
this.$el.on('click', '.oe_dropdown_menu li a[data-menu]', function(ev) {
this.$el.on('click', '.dropdown-menu li a[data-menu]', function(ev) {
ev.preventDefault();
var f = self['on_menu_' + $(this).data('menu')];
if (f) {
@ -1223,6 +1223,26 @@ instance.web.UserMenu = instance.web.Widget.extend({
},
});
instance.web.FullscreenWidget = instance.web.Widget.extend({
/**
* Widgets extending the FullscreenWidget will be displayed fullscreen,
* and will have a fixed 1:1 zoom level on mobile devices.
*/
start: function(){
if(!$('#oe-fullscreenwidget-viewport').length){
$('head').append('<meta id="oe-fullscreenwidget-viewport" name="viewport" content="initial-scale=1.0; maximum-scale=1.0; user-scalable=0;">');
}
instance.webclient.set_content_full_screen(true);
return this._super();
},
destroy: function(){
instance.webclient.set_content_full_screen(false);
$('#oe-fullscreenwidget-viewport').remove();
return this._super();
},
});
instance.web.Client = instance.web.Widget.extend({
init: function(parent, origin) {
instance.client = instance.webclient = this;
@ -1284,7 +1304,7 @@ instance.web.Client = instance.web.Widget.extend({
self.action_manager.appendTo(self.$('.oe_application'));
},
toggle_bars: function(value) {
this.$('tr:has(td.oe_topbar),.oe_leftbar').toggle(value);
this.$('tr:has(td.navbar),.oe_leftbar').toggle(value);
},
has_uncommitted_changes: function() {
return false;

View File

@ -561,6 +561,10 @@ instance.web.TranslationDataBase.include({
});
/** Custom jQuery plugins */
$.browser = $.browser || {};
if(navigator.appVersion.indexOf("MSIE") !== -1) {
$.browser.msie = 1;
}
$.fn.getAttributes = function() {
var o = {};
if (this.length) {

View File

@ -743,7 +743,7 @@ instance.web.DataSetSearch = instance.web.DataSet.extend({
});
},
get_domain: function (other_domain) {
this._model.domain(other_domain);
return this._model.domain(other_domain);
},
alter_ids: function (ids) {
this._super(ids);
@ -780,6 +780,7 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
this._super.apply(this, arguments);
this.reset_ids([]);
this.last_default_get = {};
this.running_reads = [];
},
default_get: function(fields, options) {
var self = this;
@ -846,6 +847,9 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
this.to_write = [];
this.cache = [];
this.delete_all = false;
_.each(_.clone(this.running_reads), function(el) {
el.reject();
});
},
read_ids: function (ids, fields, options) {
var self = this;
@ -861,7 +865,6 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
to_get.push(id);
}
});
var completion = $.Deferred();
var return_records = function() {
var records = _.map(ids, function(id) {
return _.extend({}, _.detect(self.cache, function(c) {return c.id === id;}).values, {"id": id});
@ -896,10 +899,20 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
}, 0);
});
}
completion.resolve(records);
return $.when(records);
};
if(to_get.length > 0) {
var rpc_promise = this._super(to_get, fields, options).done(function(records) {
var def = $.Deferred();
self.running_reads.push(def);
def.always(function() {
self.running_reads = _.without(self.running_reads, def);
});
this._super(to_get, fields, options).then(function() {
def.resolve.apply(def, arguments);
}, function() {
def.reject.apply(def, arguments);
});
return def.then(function(records) {
_.each(records, function(record, index) {
var id = to_get[index];
var cached = _.detect(self.cache, function(x) {return x.id === id;});
@ -910,13 +923,11 @@ instance.web.BufferedDataSet = instance.web.DataSetStatic.extend({
cached.values = _.defaults(_.clone(cached.values), record);
}
});
return_records();
return return_records();
});
$.when(rpc_promise).fail(function() {completion.reject();});
} else {
return_records();
return return_records();
}
return completion.promise();
},
/**
* Invalidates caching of a record in the dataset to ensure the next read
@ -1090,6 +1101,157 @@ instance.web.DropMisordered = instance.web.Class.extend({
}
});
instance.web.SimpleIndexedDB = instance.web.Class.extend({
/**
* A simple wrapper around IndexedDB that provides an asynchronous
* localStorage-like Key-Value api that persists between browser
* restarts.
*
* It will not work if the browser doesn't support a recent version
* of IndexedDB, and it may fail if the user refuses db access.
*
* All instances of SimpleIndexedDB will by default refer to the same
* IndexedDB database, if you want to pick another one, use the 'name'
* option on instanciation.
*/
init: function(opts){
var self = this;
var opts = opts || {};
this.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
this.db = undefined;
this._ready = new $.Deferred();
if(this.indexedDB && this.indexedDB.open){
var request = this.indexedDB.open( opts.name || "SimpleIndexedDB" ,1);
request.onerror = function(event){
self.db = null;
self._ready.reject(event.target.error);
};
request.onsuccess = function(event){
self.db = request.result;
self._ready.resolve();
};
request.onupgradeneeded = function(event){
self.db = event.target.result;
var objectStore = self.db.createObjectStore("keyvals", { keyPath:"key" });
self._ready.resolve();
};
}else{
this.db = null;
this._ready.reject({type:'UnknownError', message:'IndexedDB is not supported by your Browser'});
}
},
/**
* returns true if the browser supports the necessary IndexedDB API
* (but doesn't tell if the db can be created, check ready() for that)
*/
isSupportedByBrowser: function(){
return this.indexedDB && this.indexedDB.open;
},
/**
* returns a deferred that resolves when the db has been successfully
* initialized. done/failed callbacks are optional.
*/
ready: function(done,failed){
this._ready.then(done,failed);
return this._ready.promise();
},
/**
* fetches the value associated to 'key' in the db. if the key doesn't
* exists, it returns undefined. The returned value is provided as a
* deferred, or as the first parameter of the optional 'done' callback.
*/
getItem: function(key,done,failed){
var self = this;
var def = new $.Deferred();
def.then(done,failed);
this._ready.then(function(){
var request = self.db.transaction(["keyvals"],"readwrite")
.objectStore("keyvals")
.get(key);
request.onsuccess = function(){
def.resolve(request.result ? request.result.value : undefined);
};
request.onerror = function(event){
def.reject(event.target.error);
};
},function(){
def.reject({type:'UnknownError', message:'Could not initialize the IndexedDB database'});
});
return def.promise();
},
/**
* Associates a value to 'key' in the db, overwriting previous value if
* necessary. Contrary to localStorage, the value is not limited to strings and
* can be any javascript object, even with cyclic references !
*
* Be sure to check for failure as the user may refuse to have data localy stored.
*/
setItem: function(key,value,done,failed){
var self = this;
var def = new $.Deferred();
def.then(done,failed);
this._ready.then(function(){
var request = self.db.transaction(["keyvals"],"readwrite")
.objectStore("keyvals")
.put( {key:key, value:value} );
request.onsuccess = function(){
def.resolve();
};
request.onerror = function(event){
def.reject(event.target.error);
};
},function(){
def.reject({type:'UnknownError', message:'Could not initialize the IndexedDB database'});
});
return def.promise();
},
/**
* Removes the value associated with 'key' from the db.
*/
removeItem: function(key,done,failed){
var self = this;
var def = new $.Deferred();
def.then(done,failed);
this._ready.then(function(){
var request = self.db.transaction(["keyvals"],"readwrite")
.objectStore("keyvals")
.delete(key);
request.onsuccess = function(){
def.resolve();
};
request.onerror = function(event){
def.reject(event.target.error);
};
},function(){
def.reject({type:'UnknownError', message:'Could not initialize the IndexedDB database'});
});
return def.promise();
},
});
})();
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:

View File

@ -1155,7 +1155,8 @@ openerp.Model = openerp.Class.extend({
kwargs = args;
args = [];
}
return this.session().rpc('/web/dataset/call_kw', {
var call_kw = _.str.sprintf('/web/dataset/call_kw/%s/%s', this.name, method);
return this.session().rpc(call_kw, {
model: this.name,
method: method,
args: args,
@ -1236,15 +1237,14 @@ openerp.TranslationDataBase = openerp.Class.extend(/** @lends instance.Translati
openerp._t = new openerp.TranslationDataBase().build_translation_function();
openerp.get_cookie = function(c_name) {
if (document.cookie.length > 0) {
var c_start = document.cookie.indexOf(c_name + "=");
if (c_start != -1) {
c_start = c_start + c_name.length + 1;
var c_end = document.cookie.indexOf(";", c_start);
if (c_end == -1) {
c_end = document.cookie.length;
}
return unescape(document.cookie.substring(c_start, c_end));
var cookies = document.cookie ? document.cookie.split('; ') : [];
for (var i = 0, l = cookies.length; i < l; i++) {
var parts = cookies[i].split('=');
var name = parts.shift();
var cookie = parts.join('=');
if (c_name && c_name === name) {
return cookie;
}
}
return "";
@ -1292,7 +1292,10 @@ openerp.str_to_datetime = function(str) {
if ( !res ) {
throw new Error("'" + str + "' is not a valid datetime");
}
var tmp = new Date(0);
var tmp = new Date(2000,0,1);
tmp.setUTCMonth(1970);
tmp.setUTCMonth(0);
tmp.setUTCDate(1);
tmp.setUTCFullYear(parseFloat(res[1]));
tmp.setUTCMonth(parseFloat(res[2]) - 1);
tmp.setUTCDate(parseFloat(res[3]));
@ -1324,7 +1327,7 @@ openerp.str_to_date = function(str) {
if ( !res ) {
throw new Error("'" + str + "' is not a valid date");
}
var tmp = new Date(0);
var tmp = new Date(2000,0,1);
tmp.setFullYear(parseFloat(res[1]));
tmp.setMonth(parseFloat(res[2]) - 1);
tmp.setDate(parseFloat(res[3]));

View File

@ -71,7 +71,10 @@ my.SearchQuery = B.Collection.extend({
},
add: function (values, options) {
options = options || {};
if (!(values instanceof Array)) {
if (!values) {
values = [];
} else if (!(values instanceof Array)) {
values = [values];
}
@ -87,6 +90,10 @@ my.SearchQuery = B.Collection.extend({
}
B.Collection.prototype.add.call(this, model, options);
}, this);
// warning: in backbone 1.0+ add is supposed to return the added models,
// but here toggle may delegate to add and return its value directly.
// return value of neither seems actually used but should be tested
// before change, probably
return this;
},
toggle: function (value, options) {

View File

@ -58,8 +58,7 @@ openerp.testing = {};
}
var fn, params;
var needle = rparams.model + ':' + rparams.method;
if (url.url === '/web/dataset/call_kw'
&& needle in this.responses) {
if (url.url.substr(0, 20) === '/web/dataset/call_kw' && needle in this.responses) {
fn = this.responses[needle];
params = [
rparams.args || [],

View File

@ -399,9 +399,11 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.dataset.index = this.dataset.ids.length - 1;
break;
}
this.reload();
var def = this.reload();
this.trigger('pager_action_executed');
return def;
}
return $.when();
},
init_pager: function() {
var self = this;
@ -416,8 +418,15 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
this.$el.find('.oe_form_pager').replaceWith(this.$pager);
}
this.$pager.on('click','a[data-pager-action]',function() {
var action = $(this).data('pager-action');
self.execute_pager_action(action);
var $el = $(this);
if ($el.attr("disabled"))
return;
var action = $el.data('pager-action');
var def = $.when(self.execute_pager_action(action));
$el.attr("disabled");
def.always(function() {
$el.removeAttr("disabled");
});
});
this.do_update_pager();
},
@ -722,12 +731,13 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
var self = this;
return this.save().done(function(result) {
self.trigger("save", result);
self.to_view_mode();
}).then(function(result) {
var parent = self.ViewManager.ActionManager.getParent();
if(parent){
parent.menu.do_reload_needaction();
}
self.reload().then(function() {
self.to_view_mode();
var parent = self.ViewManager.ActionManager.getParent();
if(parent){
parent.menu.do_reload_needaction();
}
});
});
},
on_button_cancel: function(event) {
@ -891,17 +901,12 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
* @param {Object} r result of the write function.
*/
record_saved: function(r) {
var self = this;
this.trigger('record_saved', r);
if (!r) {
// should not happen in the server, but may happen for internal purpose
this.trigger('record_saved', r);
return $.Deferred().reject();
} else {
return $.when(this.reload()).then(function () {
self.trigger('record_saved', r);
return r;
});
}
return r;
},
/**
* Updates the form' dataset to contain the new record:
@ -3071,7 +3076,7 @@ instance.web.form.CompletionFieldMixin = {
values.push({
label: _t("Search More..."),
action: function() {
dataset.name_search(search_val, self.build_domain(), 'ilike', false).done(function(data) {
dataset.name_search(search_val, self.build_domain(), 'ilike', 160).done(function(data) {
self._search_create_popup("search", data);
});
},
@ -3583,6 +3588,67 @@ instance.web.form.Many2OneButton = instance.web.form.AbstractField.extend({
},
});
/**
* Abstract-ish ListView.List subclass adding an "Add an item" row to replace
* the big ugly button in the header.
*
* Requires the implementation of a ``is_readonly`` method (usually a proxy to
* the corresponding field's readonly or effective_readonly property) to
* decide whether the special row should or should not be inserted.
*
* Optionally an ``_add_row_class`` attribute can be set for the class(es) to
* set on the insertion row.
*/
instance.web.form.AddAnItemList = instance.web.ListView.List.extend({
pad_table_to: function (count) {
if (!this.view.is_action_enabled('create') || this.is_readonly()) {
this._super(count);
return;
}
this._super(count > 0 ? count - 1 : 0);
var self = this;
var columns = _(this.columns).filter(function (column) {
return column.invisible !== '1';
}).length;
if (this.options.selectable) { columns++; }
if (this.options.deletable) { columns++; }
var $cell = $('<td>', {
colspan: columns,
'class': this._add_row_class || ''
}).append(
$('<a>', {href: '#'}).text(_t("Add an item"))
.mousedown(function () {
// FIXME: needs to be an official API somehow
if (self.view.editor.is_editing()) {
self.view.__ignore_blur = true;
}
})
.click(function (e) {
e.preventDefault();
e.stopPropagation();
// FIXME: there should also be an API for that one
if (self.view.editor.form.__blur_timeout) {
clearTimeout(self.view.editor.form.__blur_timeout);
self.view.editor.form.__blur_timeout = false;
}
self.view.ensure_saved().done(function () {
self.view.do_add_record();
});
}));
var $padding = this.$current.find('tr:not([data-id]):first');
var $newrow = $('<tr>').append($cell);
if ($padding.length) {
$padding.before($newrow);
} else {
this.$current.append($newrow)
}
}
});
/*
# Values: (0, 0, { fields }) create
# (1, ID, { fields }) update
@ -4161,62 +4227,11 @@ instance.web.form.One2ManyGroups = instance.web.ListView.Groups.extend({
}
}
});
instance.web.form.One2ManyList = instance.web.ListView.List.extend({
pad_table_to: function (count) {
if (!this.view.is_action_enabled('create')) {
this._super(count);
} else {
this._super(count > 0 ? count - 1 : 0);
}
// magical invocation of wtf does that do
if (this.view.o2m.get('effective_readonly')) {
return;
}
var self = this;
var columns = _(this.columns).filter(function (column) {
return column.invisible !== '1';
}).length;
if (this.options.selectable) { columns++; }
if (this.options.deletable) { columns++; }
if (!this.view.is_action_enabled('create')) {
return;
}
var $cell = $('<td>', {
colspan: columns,
'class': 'oe_form_field_one2many_list_row_add'
}).append(
$('<a>', {href: '#'}).text(_t("Add an item"))
.mousedown(function () {
// FIXME: needs to be an official API somehow
if (self.view.editor.is_editing()) {
self.view.__ignore_blur = true;
}
})
.click(function (e) {
e.preventDefault();
e.stopPropagation();
// FIXME: there should also be an API for that one
if (self.view.editor.form.__blur_timeout) {
clearTimeout(self.view.editor.form.__blur_timeout);
self.view.editor.form.__blur_timeout = false;
}
self.view.ensure_saved().done(function () {
self.view.do_add_record();
});
}));
var $padding = this.$current.find('tr:not([data-id]):first');
var $newrow = $('<tr>').append($cell);
if ($padding.length) {
$padding.before($newrow);
} else {
this.$current.append($newrow);
}
}
instance.web.form.One2ManyList = instance.web.form.AddAnItemList.extend({
_add_row_class: 'oe_form_field_one2many_list_row_add',
is_readonly: function () {
return this.view.o2m.get('effective_readonly');
},
});
instance.web.form.One2ManyFormView = instance.web.FormView.extend({
@ -4428,7 +4443,7 @@ instance.web.form.FieldMany2Many = instance.web.form.AbstractField.extend(instan
this.$el.addClass('oe_form_field oe_form_field_many2many');
this.list_view = new instance.web.form.Many2ManyListView(this, this.dataset, false, {
'addable': this.get("effective_readonly") ? null : _t("Add"),
'addable': null,
'deletable': this.get("effective_readonly") ? false : true,
'selectable': this.multi_selection,
'sortable': false,
@ -4495,6 +4510,11 @@ instance.web.form.Many2ManyDataSet = instance.web.DataSetStatic.extend({
* @extends instance.web.ListView
*/
instance.web.form.Many2ManyListView = instance.web.ListView.extend(/** @lends instance.web.form.Many2ManyListView# */{
init: function (parent, dataset, view_id, options) {
this._super(parent, dataset, view_id, _.extend(options || {}, {
ListType: instance.web.form.Many2ManyList,
}));
},
do_add_record: function () {
var pop = new instance.web.form.SelectCreatePopup(this);
pop.select_element(
@ -4544,6 +4564,12 @@ instance.web.form.Many2ManyListView = instance.web.ListView.extend(/** @lends in
},
is_action_enabled: function () { return true; },
});
instance.web.form.Many2ManyList = instance.web.form.AddAnItemList.extend({
_add_row_class: 'oe_form_field_many2many_list_row_add',
is_readonly: function () {
return this.view.m2m_field.get('effective_readonly');
}
});
instance.web.form.FieldMany2ManyKanban = instance.web.form.AbstractField.extend(instance.web.form.CompletionFieldMixin, {
disable_utility_classes: true,
@ -5547,18 +5573,18 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({
var self = this;
var selection_unfolded = [];
var selection_folded = [];
var fold_field = this.options.fold_field;
var calculation = _.bind(function() {
if (this.field.type == "many2one") {
return self.get_distant_fields().then(function(fields) {
return self.get_distant_fields().then(function (fields) {
return new instance.web.DataSetSearch(self, self.field.relation, self.build_context(), self.get("evaluated_selection_domain"))
.read_slice(fields.fold ? ['fold'] : ['id'], {}).then(function (records) {
var ids = _.map(records, function (val) {return val.id;});
.read_slice(_.union(_.keys(self.distant_fields), ['id']), {}).then(function (records) {
var ids = _.pluck(records, 'id');
return self.dataset.name_get(ids).then(function (records_name) {
_.each(records, function (record) {
var name = _.find(records_name, function (val) {return val[0] == record.id;})[1];
if (record.fold && record.id != self.get('value')) {
if (fold_field && record[fold_field] && record.id != self.get('value')) {
selection_folded.push([record.id, name]);
} else {
selection_unfolded.push([record.id, name]);
@ -5566,7 +5592,7 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({
});
});
});
});
});
} else {
// For field type selection filter values according to
// statusbar_visible attribute of the field. For example:
@ -5588,12 +5614,18 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({
}
});
},
/*
* :deprecated: this feature will probably be removed with OpenERP v8
*/
get_distant_fields: function() {
var self = this;
if (! this.options.fold_field) {
this.distant_fields = {}
}
if (this.distant_fields) {
return $.when(this.distant_fields);
}
return new instance.web.Model(self.field.relation).call("fields_get", [["fold"]]).then(function(fields) {
return new instance.web.Model(self.field.relation).call("fields_get", [[this.options.fold_field]]).then(function(fields) {
self.distant_fields = fields;
return fields;
});

View File

@ -508,7 +508,6 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
var reloaded = $.Deferred();
this.$el.find('.oe_list_content').append(
this.groups.render(function () {
// Keep '=='. This is not a mistake, this is a wanted behaviour to match null & undefined
if (self.dataset.index == null) {
if (self.records.length) {
self.dataset.index = 0;
@ -1474,14 +1473,13 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
var view = this.view,
limit = view.limit(),
d = new $.Deferred(),
page = this.datagroup.openable ? this.page : view.page;
var fields = _.pluck(_.select(this.columns, function(x) {return x.tag == "field";}), 'name');
var options = { offset: page * limit, limit: limit, context: {bin_size: true} };
//TODO xmo: investigate why we need to put the setTimeout
$.async_when().done(function() {
dataset.read_slice(fields, options).done(function (records) {
return $.async_when().then(function() {
return dataset.read_slice(fields, options).then(function (records) {
// FIXME: ignominious hacks, parents (aka form view) should not send two ListView#reload_content concurrently
if (self.records.length) {
self.records.reset(null, {silent: true});
@ -1513,13 +1511,12 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
self.records.add(records, {silent: true});
list.render();
d.resolve(list);
if (_.isEmpty(records)) {
view.no_result();
}
return list;
});
});
return d.promise();
},
setup_resequence_rows: function (list, dataset) {
// drag and drop enabled if list is not sorted and there is a
@ -1600,11 +1597,12 @@ instance.web.ListView.Groups = instance.web.Class.extend( /** @lends instance.we
self.render_groups(groups));
if (post_render) { post_render(); }
}, function (dataset) {
self.render_dataset(dataset).done(function (list) {
self.render_dataset(dataset).then(function (list) {
self.children[null] = list;
self.elements =
[list.$current.replaceAll($el)[0]];
self.setup_resequence_rows(list, dataset);
}).always(function() {
if (post_render) { post_render(); }
});
});

View File

@ -147,6 +147,19 @@ instance.web.ActionManager = instance.web.Widget.extend({
this.inner_action = last_widget.action;
}
},
add_breadcrumb_url: function (url, label) {
// Add a pseudo breadcrumb that will redirect to an url
this.push_breadcrumb({
show: function() {
instance.web.redirect(url);
},
hide: function() {},
destroy: function() {},
get_title: function() {
return label;
}
});
},
get_title: function() {
var titles = [];
for (var i = 0; i < this.breadcrumbs.length; i += 1) {
@ -217,6 +230,12 @@ instance.web.ActionManager = instance.web.Widget.extend({
do_load_state: function(state, warm) {
var self = this,
action_loaded;
if (!warm && 'return_label' in state) {
var return_url = state.return_url || document.referrer;
if (return_url) {
this.add_breadcrumb_url(return_url, state.return_label);
}
}
if (state.action) {
if (_.isString(state.action) && instance.web.client_actions.contains(state.action)) {
var action_client = {
@ -225,7 +244,9 @@ instance.web.ActionManager = instance.web.Widget.extend({
params: state,
_push_me: state._push_me,
};
this.null_action();
if (warm) {
this.null_action();
}
action_loaded = this.do_action(action_client);
} else {
var run_action = (!this.inner_widget || !this.inner_widget.action) || this.inner_widget.action.id !== state.action;
@ -245,7 +266,9 @@ instance.web.ActionManager = instance.web.Widget.extend({
add_context.active_ids = [state.active_id];
}
add_context.params = state;
this.null_action();
if (warm) {
this.null_action();
}
action_loaded = this.do_action(state.action, { additional_context: add_context });
$.when(action_loaded || null).done(function() {
instance.webclient.menu.has_been_loaded.done(function() {
@ -258,7 +281,9 @@ instance.web.ActionManager = instance.web.Widget.extend({
}
} else if (state.model && state.id) {
// TODO handle context & domain ?
this.null_action();
if (warm) {
this.null_action();
}
var action = {
res_model: state.model,
res_id: state.id,
@ -268,7 +293,9 @@ instance.web.ActionManager = instance.web.Widget.extend({
action_loaded = this.do_action(action);
} else if (state.sa) {
// load session action
this.null_action();
if (warm) {
this.null_action();
}
action_loaded = this.rpc('/web/session/get_session_action', {key: state.sa}).then(function(action) {
if (action) {
return self.do_action(action);
@ -510,7 +537,11 @@ instance.web.ActionManager = instance.web.Widget.extend({
});
},
ir_actions_act_url: function (action) {
window.open(action.url, action.target === 'self' ? '_self' : '_blank');
if (action.target === 'self') {
instance.web.redirect(action.url);
} else {
window.open(action.url, '_blank');
}
return $.when();
},
});
@ -1178,11 +1209,12 @@ instance.web.Sidebar = instance.web.Widget.extend({
var self = this;
self.getParent().sidebar_eval_context().done(function (sidebar_eval_context) {
var ids = self.getParent().get_selected_ids();
var domain;
if (self.getParent().get_active_domain) {
var domain = self.getParent().get_active_domain();
domain = self.getParent().get_active_domain();
}
else {
var domain = $.Deferred().resolve(undefined);
domain = $.Deferred().resolve(undefined);
}
if (ids.length === 0) {
instance.web.dialog($("<div />").text(_t("You must choose at least one record.")), { title: _t("Warning"), modal: true });
@ -1354,7 +1386,17 @@ instance.web.View = instance.web.Widget.extend({
return self.getParent().on_action_executed.apply(null, arguments);
}
};
var context = new instance.web.CompoundContext(dataset.get_context(), action_data.context || {});
var context = dataset.get_context();
if (action_data.model !== dataset.model) {
// filter out context keys that are specific to the action model.
// Wrong default_ and search_default values will no give the expected views
// Wrong group_by values will simply fail and forbid rendering of the destination view
context = _.object(_.reject(_.pairs(context.eval()), function(pair) {
return pair[0].match('^(?:(?:default_|search_default_).+|group_by|group_by_no_leaf)$') !== null;
}));
}
context = new instance.web.CompoundContext(context, action_data.context || {});
var handler = function (action) {
if (action && action.constructor == Object) {
var ncontext = new instance.web.CompoundContext(context);

View File

@ -320,7 +320,7 @@
</t>
<t t-name="DatabaseManager.menu">
<div class="oe_secondary_menu_section">Database Management</div>
<ul class="oe_secondary_submenu">
<ul class="oe_secondary_submenu nav nav-pills nav-stacked">
<li><a href="#db_create">Create</a></li>
<li><a href="#db_duplicate">Duplicate</a></li>
<li><a href="#db_drop">Drop</a></li>
@ -362,15 +362,13 @@
</t>
<t t-name="Menu">
<ul class="oe_menu" t-if="widget.data">
<ul class="nav navbar-nav navbar-left" t-if="widget.data">
<li t-foreach="widget.data.data.children" t-as="menu">
<t t-call="Menu.link"/>
</li>
<li class="oe_menu_more_container" style="display: none;">
<span class="oe_topbar_item oe_menu_more_link oe_dropdown_toggle oe_dropdown_arrow">
More
<ul class="oe_menu_more oe_dropdown_menu"/>
</span>
<li id="menu_more_container" class="dropdown" style="display: none;">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">More <b class="caret"></b></a>
<ul id="menu_more" class="dropdown-menu"></ul>
</li>
</ul>
</t>
@ -389,7 +387,7 @@
</div>
</t>
<t t-name="Menu.secondary.submenu">
<ul t-if="menu.children.length" class="oe_secondary_submenu">
<ul t-if="menu.children.length" class="oe_secondary_submenu nav nav-pills nav-stacked">
<li t-foreach="menu.children" t-as="menu">
<t t-call="Menu.link"/>
<!--<span class="oe_menu_label">8</span>-->
@ -410,24 +408,28 @@
</t>
<t t-name="Menu.needaction_counter">
<div class="oe_tag oe_tag_dark oe_menu_counter">
<div id="menu_counter" class="badge pull-right">
<t t-if="widget.needaction_counter &gt; 99"> 99+ </t>
<t t-if="widget.needaction_counter &lt;= 99"> <t t-esc="widget.needaction_counter"/> </t>
</div>
</t>
<t t-name="UserMenu">
<span class="oe_user_menu oe_topbar_item oe_dropdown_toggle oe_dropdown_arrow">
<img class="oe_topbar_avatar" t-att-data-default-src="_s + '/web/static/src/img/user_menu_avatar.png'"/>
<span class="oe_topbar_name"/>
<ul class="oe_dropdown_menu">
<li><a href="#" data-menu="settings">Preferences</a></li>
<li><a href="#" data-menu="account">My OpenERP.com account</a></li>
<li><a href="#" data-menu="about">About OpenERP</a></li>
<li><a href="#" data-menu="help">Help</a></li>
<li><a href="#" data-menu="logout">Log out</a></li>
</ul>
</span>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<img class="oe_topbar_avatar" t-att-data-default-src="_s + '/web/static/src/img/user_menu_avatar.png'"/>
<span class="oe_topbar_name"/> <b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="#" data-menu="settings">Preferences</a></li>
<li><a href="#" data-menu="account">My OpenERP.com account</a></li>
<li><a href="#" data-menu="about">About OpenERP</a></li>
<li><a href="#" data-menu="help">Help</a></li>
<li><a href="#" data-menu="logout">Log out</a></li>
</ul>
</li>
</ul>
</t>
<t t-name="UserMenu.about">
@ -450,7 +452,7 @@
<div class="openerp openerp_webclient_container">
<table class="oe_webclient">
<tr>
<td colspan="2" class="oe_topbar">
<td colspan="2" class="navbar navbar-default navbar-static-top" role="navigation">
<div class="oe_menu_placeholder"/>
<div class="oe_user_menu_placeholder"/>
<div class="oe_systray"/>

View File

@ -8,10 +8,9 @@ from openerp import http
class MockRequestCase(unittest2.TestCase):
def setUp(self):
super(MockRequestCase, self).setUp()
self.tmp_req = http.set_request(mock.Mock())
self.tmp_req.__enter__()
http._request_stack.push(mock.Mock())
def tearDown(self):
self.tmp_req.__exit__(None, None, None)
http._request_stack.pop()
super(MockRequestCase, self).tearDown()

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web_calendar
#. openerp-web

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
"X-Poedit-Language: Czech\n"
#. module: web_calendar

View File

@ -14,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2013-10-26 06:04+0000\n"
"X-Generator: Launchpad (build 16810)\n"
"X-Launchpad-Export-Date: 2013-12-11 05:51+0000\n"
"X-Generator: Launchpad (build 16869)\n"
#. module: web_calendar
#. openerp-web

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