[MERGE] Merge from openerp-web.
bzr revid: jra@tinyerp.com-20111129062332-nt36fttsgf8movqd
@@ -1,6 +1,11 @@
|
||||
{
|
||||
"name" : "web",
|
||||
"category" : "Hidden",
|
||||
"category": "Hidden",
|
||||
"description":
|
||||
"""
|
||||
OpenERP Web core module.
|
||||
This module provides the core of the OpenERP web client.
|
||||
""",
|
||||
"depends" : [],
|
||||
'active': True,
|
||||
'post_load' : 'wsgi_postload',
|
||||
@@ -10,7 +15,7 @@
|
||||
"static/lib/datejs/parser.js",
|
||||
"static/lib/datejs/sugarpak.js",
|
||||
"static/lib/datejs/extras.js",
|
||||
"static/lib/jquery/jquery-1.6.2.js",
|
||||
"static/lib/jquery/jquery-1.6.4.js",
|
||||
"static/lib/jquery.MD5/jquery.md5.js",
|
||||
"static/lib/jquery.form/jquery.form.js",
|
||||
"static/lib/jquery.validate/jquery.validate.js",
|
||||
|
||||
@@ -1064,6 +1064,44 @@ class SearchView(View):
|
||||
}, context)
|
||||
return to_return
|
||||
|
||||
@openerpweb.jsonrequest
|
||||
def add_to_dashboard(self, req, menu_id, action_id, context_to_save, domain, view_mode, name=''):
|
||||
ctx = web.common.nonliterals.CompoundContext(context_to_save)
|
||||
ctx.session = req.session
|
||||
ctx = ctx.evaluate()
|
||||
domain = web.common.nonliterals.CompoundDomain(domain)
|
||||
domain.session = req.session
|
||||
domain = domain.evaluate()
|
||||
|
||||
dashboard_action = load_actions_from_ir_values(req, 'action', 'tree_but_open',
|
||||
[('ir.ui.menu', menu_id)], False)
|
||||
if dashboard_action:
|
||||
action = dashboard_action[0][2]
|
||||
if action['res_model'] == 'board.board' and action['views'][0][1] == 'form':
|
||||
# Maybe should check the content instead of model board.board ?
|
||||
view_id = action['views'][0][0]
|
||||
board = req.session.model(action['res_model']).fields_view_get(view_id, 'form')
|
||||
if board and 'arch' in board:
|
||||
xml = ElementTree.fromstring(board['arch'])
|
||||
column = xml.find('./board/column')
|
||||
if column:
|
||||
new_action = ElementTree.Element('action', {
|
||||
'name' : str(action_id),
|
||||
'string' : name,
|
||||
'view_mode' : view_mode,
|
||||
'context' : str(ctx),
|
||||
'domain' : str(domain)
|
||||
})
|
||||
column.insert(0, new_action)
|
||||
arch = ElementTree.tostring(xml, 'utf-8')
|
||||
return req.session.model('ir.ui.view.custom').create({
|
||||
'user_id': req.session._uid,
|
||||
'ref_id': view_id,
|
||||
'arch': arch
|
||||
}, req.session.eval_context(req.context))
|
||||
|
||||
return False
|
||||
|
||||
class Binary(openerpweb.Controller):
|
||||
_cp_path = "/web/binary"
|
||||
|
||||
@@ -1348,7 +1386,7 @@ class Export(View):
|
||||
|
||||
context = req.session.eval_context(req.context)
|
||||
Model = req.session.model(model)
|
||||
ids = ids or Model.search(domain, context=context)
|
||||
ids = ids or Model.search(domain, 0, False, False, context)
|
||||
|
||||
field_names = map(operator.itemgetter('name'), fields)
|
||||
import_data = Model.export_data(ids, field_names, context).get('datas',[])
|
||||
|
||||
@@ -0,0 +1,677 @@
|
||||
# Bengali translation for openerp-web
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openerp-web package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
|
||||
"PO-Revision-Date: 2011-11-24 12:45+0000\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: Bengali <bn@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: 2011-11-25 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 14376)\n"
|
||||
|
||||
#: addons/web/static/src/js/view_form.js:355
|
||||
msgid ""
|
||||
"Warning, the record has been modified, your changes will be discarded."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/js/view_form.js:1659
|
||||
msgid "<em> Search More...</em>"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/js/view_form.js:1672
|
||||
#, python-format
|
||||
msgid "<em> Create \"<strong>%s</strong>\"</em>"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/js/view_form.js:1678
|
||||
msgid "<em> Create and Edit...</em>"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/js/views.js:568
|
||||
msgid "You must choose at least one record."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/js/views.js:569
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/js/views.js:609
|
||||
msgid "Translations"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/js/views.js:615
|
||||
msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "x"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "#{title}"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "#{text}"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Powered by"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "openerp.com"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Loading..."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Create"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Drop"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Backup"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Restore"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Back to Login"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "CREATE DATABASE"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Master password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "New database name:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Load Demonstration data:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Default language:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Admin password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Confirm password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "DROP DATABASE"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Database:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Master Password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "BACKUP DATABASE"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "RESTORE DATABASE"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "File:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "CHANGE MASTER PASSWORD"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "New master password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Confirm new master password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "User:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Database"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Bad username or password"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"We think that daily job activities can be more intuitive, efficient, "
|
||||
"automated, .. and even fun."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP's vision to be:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Full featured"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"Today's enterprise challenges are multiple. We provide one module for each "
|
||||
"need."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Open Source"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"To Build a great product, we rely on the knowledge of thousands of "
|
||||
"contributors."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "User Friendly"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"In order to be productive, people need clean and easy to use interface."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "("
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ")"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "LOGOUT"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "«"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "»"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "oe_secondary_menu_item"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "oe_secondary_submenu_item"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Hide this tip"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Disable all tips"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "View#"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Fields"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "View labels"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Sidebar Relates"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Field"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ":"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Translate view"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Translate sidebar"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "First"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "<"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ">"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Last"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "♻"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save & Edit"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Create & Edit"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "New"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Duplicate"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Readonly/Editable"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "<<"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "0"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "/"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ">>"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Unhandled widget"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "?"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "#"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Open..."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Create..."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Search..."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "..."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Uploading ..."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save As"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Clear"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Advanced Filter"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "-- Filters --"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "-- Actions --"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save Filter"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Manage Filters"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Filter Name:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "(Any existing filter with the same name will be replaced)"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Any of the following conditions must match"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "All the following conditions must match"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "None of the following conditions must match"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Add condition"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "and"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save & New"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save & Close"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Export"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"This wizard will export all data that matches the current search criteria to "
|
||||
"a CSV file.\n"
|
||||
" You can export all data or only the fields that can be "
|
||||
"reimported after modification."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Export Type:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Import Compatible Export"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Export all Data"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Export Formats"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Available fields"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Fields to export"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save fields list"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Remove All"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid " "
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save as:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Ok"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Saved exports:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Old Password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "New Password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Confirm Password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Import"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "1. Import a .CSV file"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"Select a .CSV file to import. If you need a sample of file to import,\n"
|
||||
" you should use the export tool with the \"Import Compatible\" option."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "CSV File:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "2. Check your file format"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Import Options"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Does your file have titles?"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Separator:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Delimiter:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Encoding:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "UTF-8"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Latin 1"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Lines to skip"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "The import failed due to:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Here is a preview of the file we could not import:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP Web"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Version"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP is a trademark of the"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP SA Company"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Licenced under the terms of"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "GNU Affero General Public License"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "About OpenERP"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"is a free enterprise-scale software system that is designed to boost\n"
|
||||
" productivity and profit through data integration. It connects, "
|
||||
"improves and\n"
|
||||
" manages business processes in areas such as sales, finance, "
|
||||
"supply chain,\n"
|
||||
" project management, production, services, CRM, etc..."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"The system is platform-independent, and can be installed on Windows, Mac OS "
|
||||
"X,\n"
|
||||
" and various Linux and other Unix-based distributions. Its "
|
||||
"architecture enables\n"
|
||||
" new functionality to be rapidly created, modifications to be "
|
||||
"made to a\n"
|
||||
" production system and migration to a new version to be "
|
||||
"straightforward."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"Depending on your needs, OpenERP is available through a web or application "
|
||||
"client."
|
||||
msgstr ""
|
||||
@@ -0,0 +1,677 @@
|
||||
# Croatian translation for openerp-web
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openerp-web package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
|
||||
"PO-Revision-Date: 2011-11-28 14:05+0000\n"
|
||||
"Last-Translator: Goran Kliska <gkliska@gmail.com>\n"
|
||||
"Language-Team: Croatian <hr@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: 2011-11-29 05:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14399)\n"
|
||||
|
||||
#: addons/web/static/src/js/view_form.js:355
|
||||
msgid ""
|
||||
"Warning, the record has been modified, your changes will be discarded."
|
||||
msgstr "Upozorenje, zapis je promjenjen. Promjene se neće zapisati."
|
||||
|
||||
#: addons/web/static/src/js/view_form.js:1659
|
||||
msgid "<em> Search More...</em>"
|
||||
msgstr "<em> Traži dalje...</em>"
|
||||
|
||||
#: addons/web/static/src/js/view_form.js:1672
|
||||
#, python-format
|
||||
msgid "<em> Create \"<strong>%s</strong>\"</em>"
|
||||
msgstr "<em> Kreiraj \"<strong>%s</strong>\"</em>"
|
||||
|
||||
#: addons/web/static/src/js/view_form.js:1678
|
||||
msgid "<em> Create and Edit...</em>"
|
||||
msgstr "<em> Kreiraj i uredi...</em>"
|
||||
|
||||
#: addons/web/static/src/js/views.js:568
|
||||
msgid "You must choose at least one record."
|
||||
msgstr "Odaberite barem jedan zapis."
|
||||
|
||||
#: addons/web/static/src/js/views.js:569
|
||||
msgid "Warning"
|
||||
msgstr "Upozorenje"
|
||||
|
||||
#: addons/web/static/src/js/views.js:609
|
||||
msgid "Translations"
|
||||
msgstr "Prijevodi"
|
||||
|
||||
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save"
|
||||
msgstr "Snimi"
|
||||
|
||||
#: addons/web/static/src/js/views.js:615
|
||||
msgid "Close"
|
||||
msgstr "Zatvori"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "x"
|
||||
msgstr "x"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "#{title}"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "#{text}"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Powered by"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "openerp.com"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Loading..."
|
||||
msgstr "Učitavanje..."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Create"
|
||||
msgstr "Kreiraj"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Drop"
|
||||
msgstr "Obriši"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Backup"
|
||||
msgstr "Arhiviranje/Backup"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Restore"
|
||||
msgstr "Obnovi"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Password"
|
||||
msgstr "Zaporka"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Back to Login"
|
||||
msgstr "Nazad na prijavu"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "CREATE DATABASE"
|
||||
msgstr "Nova baza podataka"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Master password:"
|
||||
msgstr "Glavna zaporka"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "New database name:"
|
||||
msgstr "Naziv nove baze podataka:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Load Demonstration data:"
|
||||
msgstr "Učitaj demonstracijske podatke:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Default language:"
|
||||
msgstr "Zadani jezik:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Admin password:"
|
||||
msgstr "Lozinka administratora"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Confirm password:"
|
||||
msgstr "Potvrda lozinke:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "DROP DATABASE"
|
||||
msgstr "Briši bazu podataka"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Database:"
|
||||
msgstr "Baza podataka:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Master Password:"
|
||||
msgstr "Glavna lozinka"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "BACKUP DATABASE"
|
||||
msgstr "Backup baze podataka"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "RESTORE DATABASE"
|
||||
msgstr "Obnovi bazu podatka (restore)"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "File:"
|
||||
msgstr "Datoteka:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "CHANGE MASTER PASSWORD"
|
||||
msgstr "Promjeni glavnu zaporku"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "New master password:"
|
||||
msgstr "Nova glavna zaporka:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Confirm new master password:"
|
||||
msgstr "Potvrdi glavnu zaporku:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "User:"
|
||||
msgstr "Korisnik:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Password:"
|
||||
msgstr "Zaporka:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Database"
|
||||
msgstr "Baza podataka"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Login"
|
||||
msgstr "Korisničko ime"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Bad username or password"
|
||||
msgstr "Neispravno korisničko ime ili lozinka"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"We think that daily job activities can be more intuitive, efficient, "
|
||||
"automated, .. and even fun."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP's vision to be:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Full featured"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"Today's enterprise challenges are multiple. We provide one module for each "
|
||||
"need."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Open Source"
|
||||
msgstr "Otvorenog koda"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"To Build a great product, we rely on the knowledge of thousands of "
|
||||
"contributors."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "User Friendly"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"In order to be productive, people need clean and easy to use interface."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "("
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ")"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "LOGOUT"
|
||||
msgstr "ODJAVA"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "«"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "»"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "oe_secondary_menu_item"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "oe_secondary_submenu_item"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Hide this tip"
|
||||
msgstr "Sakrij savjet"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Disable all tips"
|
||||
msgstr "Sakrij sve savjete"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "View#"
|
||||
msgstr "Pogled#"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Fields"
|
||||
msgstr "Polja"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "View labels"
|
||||
msgstr "Labele"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Sidebar Relates"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Field"
|
||||
msgstr "Polje"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ":"
|
||||
msgstr ":"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Translate view"
|
||||
msgstr "Prevedi pogled"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Translate sidebar"
|
||||
msgstr "Prevedi sidebar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Delete"
|
||||
msgstr "Obriši"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "First"
|
||||
msgstr "Prvi"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "<"
|
||||
msgstr "<"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ">"
|
||||
msgstr ">"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Last"
|
||||
msgstr "Posljednji"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "♻"
|
||||
msgstr "♻"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save & Edit"
|
||||
msgstr "Snimi i uredi"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Create & Edit"
|
||||
msgstr "Novi i uredi"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "New"
|
||||
msgstr "Novi"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Duplicate"
|
||||
msgstr "Dupliciraj"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Readonly/Editable"
|
||||
msgstr "Čitanje/Pisanje"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "<<"
|
||||
msgstr "<<"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "0"
|
||||
msgstr "0"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ">>"
|
||||
msgstr ">>"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Add"
|
||||
msgstr "Dodaj"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Unhandled widget"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "?"
|
||||
msgstr "?"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "#"
|
||||
msgstr "#"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Done"
|
||||
msgstr "Izvršeno"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Open..."
|
||||
msgstr "Otvori…"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Create..."
|
||||
msgstr "Kreiraj..."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Search..."
|
||||
msgstr "Traži…"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "..."
|
||||
msgstr "..."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Uploading ..."
|
||||
msgstr "Učitavanje..."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Select"
|
||||
msgstr "Odaberi"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save As"
|
||||
msgstr "Spremi kao"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Clear"
|
||||
msgstr "Očisti"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Advanced Filter"
|
||||
msgstr "Napredni filter"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "-- Filters --"
|
||||
msgstr "-- Filteri --"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "-- Actions --"
|
||||
msgstr "-- Akcije --"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save Filter"
|
||||
msgstr "Spremi filter"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Manage Filters"
|
||||
msgstr "Uredi filtere"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Filter Name:"
|
||||
msgstr "Naziv"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "(Any existing filter with the same name will be replaced)"
|
||||
msgstr "(Zamjenit će postojeći filter istog naziva)"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Any of the following conditions must match"
|
||||
msgstr "Barem jedan od uvjeta zadovoljava"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "All the following conditions must match"
|
||||
msgstr "Svi uvjeti zadovoljavaju"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "None of the following conditions must match"
|
||||
msgstr "Niti jedan od uvjeta zadovoljava"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Add condition"
|
||||
msgstr "Dodaj uvjet"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "and"
|
||||
msgstr "i"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Cancel"
|
||||
msgstr "Odustani"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save & New"
|
||||
msgstr "Spremi i novi"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save & Close"
|
||||
msgstr "Snimi i zatvori"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Export"
|
||||
msgstr "Izvoz"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"This wizard will export all data that matches the current search criteria to "
|
||||
"a CSV file.\n"
|
||||
" You can export all data or only the fields that can be "
|
||||
"reimported after modification."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Export Type:"
|
||||
msgstr "Vrsta izvoza:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Import Compatible Export"
|
||||
msgstr "Izvoz kompatibilan uvozu"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Export all Data"
|
||||
msgstr "Izvoz svih podataka"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Export Formats"
|
||||
msgstr "Formati izvoza"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Available fields"
|
||||
msgstr "Dostupna polja"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Fields to export"
|
||||
msgstr "Polja za izvoz"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save fields list"
|
||||
msgstr "Snimi popis polja"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Remove"
|
||||
msgstr "Ukloni"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Remove All"
|
||||
msgstr "Ukloni sve"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Name"
|
||||
msgstr "Naziv"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid " "
|
||||
msgstr " "
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save as:"
|
||||
msgstr "Spremi kao:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Ok"
|
||||
msgstr "U redu"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Saved exports:"
|
||||
msgstr "Snimljeni izvozi"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Old Password:"
|
||||
msgstr "Stara lozinka:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "New Password:"
|
||||
msgstr "Nova lozinka:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Confirm Password:"
|
||||
msgstr "Potvrda lozinke:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Import"
|
||||
msgstr "Uvoz"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "1. Import a .CSV file"
|
||||
msgstr "Uvezi .CSV datoteku"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"Select a .CSV file to import. If you need a sample of file to import,\n"
|
||||
" you should use the export tool with the \"Import Compatible\" option."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "CSV File:"
|
||||
msgstr "CSV datoteka:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "2. Check your file format"
|
||||
msgstr "2. Provjera formata datoteke"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Import Options"
|
||||
msgstr "Opcije uvoza"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Does your file have titles?"
|
||||
msgstr "Datoteka ima naslove"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Separator:"
|
||||
msgstr "Razdjelnik:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Delimiter:"
|
||||
msgstr "Graničnik:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Encoding:"
|
||||
msgstr "Kodna stranica:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "UTF-8"
|
||||
msgstr "UTF-8"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Latin 1"
|
||||
msgstr "Latin 1"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Lines to skip"
|
||||
msgstr "Preskočiti linija"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "The import failed due to:"
|
||||
msgstr "Uvoz nije izvršen:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Here is a preview of the file we could not import:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP Web"
|
||||
msgstr "OpenERP Web"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Version"
|
||||
msgstr "Verzija"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved."
|
||||
msgstr "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP is a trademark of the"
|
||||
msgstr "OpenERP is a trademark of the"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP SA Company"
|
||||
msgstr "OpenERP SA Company"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Licenced under the terms of"
|
||||
msgstr "Licenced under the terms of"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "GNU Affero General Public License"
|
||||
msgstr "GNU Affero General Public License"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "About OpenERP"
|
||||
msgstr "O OpenERP"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP"
|
||||
msgstr "OpenERP"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"is a free enterprise-scale software system that is designed to boost\n"
|
||||
" productivity and profit through data integration. It connects, "
|
||||
"improves and\n"
|
||||
" manages business processes in areas such as sales, finance, "
|
||||
"supply chain,\n"
|
||||
" project management, production, services, CRM, etc..."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"The system is platform-independent, and can be installed on Windows, Mac OS "
|
||||
"X,\n"
|
||||
" and various Linux and other Unix-based distributions. Its "
|
||||
"architecture enables\n"
|
||||
" new functionality to be rapidly created, modifications to be "
|
||||
"made to a\n"
|
||||
" production system and migration to a new version to be "
|
||||
"straightforward."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"Depending on your needs, OpenERP is available through a web or application "
|
||||
"client."
|
||||
msgstr ""
|
||||
@@ -0,0 +1,688 @@
|
||||
# Portuguese translation for openerp-web
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openerp-web package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
|
||||
"PO-Revision-Date: 2011-11-21 22:22+0000\n"
|
||||
"Last-Translator: Daniel Reis <Unknown>\n"
|
||||
"Language-Team: Portuguese <pt@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: 2011-11-22 05:13+0000\n"
|
||||
"X-Generator: Launchpad (build 14299)\n"
|
||||
|
||||
#: addons/web/static/src/js/view_form.js:355
|
||||
msgid ""
|
||||
"Warning, the record has been modified, your changes will be discarded."
|
||||
msgstr ""
|
||||
"Atenção, o o registo foi modificado, as suas alterações serão descartadas."
|
||||
|
||||
#: addons/web/static/src/js/view_form.js:1659
|
||||
msgid "<em> Search More...</em>"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/js/view_form.js:1672
|
||||
#, python-format
|
||||
msgid "<em> Create \"<strong>%s</strong>\"</em>"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/js/view_form.js:1678
|
||||
msgid "<em> Create and Edit...</em>"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/js/views.js:568
|
||||
msgid "You must choose at least one record."
|
||||
msgstr "Escolha pelo menos um registo."
|
||||
|
||||
#: addons/web/static/src/js/views.js:569
|
||||
msgid "Warning"
|
||||
msgstr "Aviso"
|
||||
|
||||
#: addons/web/static/src/js/views.js:609
|
||||
msgid "Translations"
|
||||
msgstr "Traduções"
|
||||
|
||||
#: addons/web/static/src/js/views.js:614 addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save"
|
||||
msgstr "Guardar"
|
||||
|
||||
#: addons/web/static/src/js/views.js:615
|
||||
msgid "Close"
|
||||
msgstr "Fechar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "x"
|
||||
msgstr "x"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "#{title}"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "#{text}"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Powered by"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "openerp.com"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Loading..."
|
||||
msgstr "A carregar ..."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Create"
|
||||
msgstr "Criar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Drop"
|
||||
msgstr "Excluir"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Backup"
|
||||
msgstr "Cópia de segurança"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Restore"
|
||||
msgstr "Restaurar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Password"
|
||||
msgstr "Senha"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Back to Login"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "CREATE DATABASE"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Master password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "New database name:"
|
||||
msgstr "Nome da nova base de dados"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Load Demonstration data:"
|
||||
msgstr "Carregar dados de demonstração"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Default language:"
|
||||
msgstr "Idioma predefinido:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Admin password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Confirm password:"
|
||||
msgstr "Confirmar senha:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "DROP DATABASE"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Database:"
|
||||
msgstr "Base de dados:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Master Password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "BACKUP DATABASE"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "RESTORE DATABASE"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "File:"
|
||||
msgstr "Ficheiro:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "CHANGE MASTER PASSWORD"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "New master password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Confirm new master password:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "User:"
|
||||
msgstr "Utilizador:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Password:"
|
||||
msgstr "Senha:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Database"
|
||||
msgstr "Base de dados"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Login"
|
||||
msgstr "Iniciar sessão"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Bad username or password"
|
||||
msgstr "Nome de utilizador ou senha incorrectos"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"We think that daily job activities can be more intuitive, efficient, "
|
||||
"automated, .. and even fun."
|
||||
msgstr ""
|
||||
"Pensamos que as atividades do trabalho diário pode ser mais intuitivas, "
|
||||
"eficientes, automatizadas, ... e até mesmo divertidas."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP's vision to be:"
|
||||
msgstr "A visão do OpenERP é:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Full featured"
|
||||
msgstr "Pleno de funcionalidade"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"Today's enterprise challenges are multiple. We provide one module for each "
|
||||
"need."
|
||||
msgstr ""
|
||||
"Os desafios atuais das empresas são múltiplos. Nós fornecemos um módulo para "
|
||||
"cada necessidade."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Open Source"
|
||||
msgstr "Código aberto"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"To Build a great product, we rely on the knowledge of thousands of "
|
||||
"contributors."
|
||||
msgstr ""
|
||||
"Para construir um grande produto, nós contamos com o conhecimento de "
|
||||
"milhares de contribuidores."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "User Friendly"
|
||||
msgstr "Amigável para o utilizador"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"In order to be productive, people need clean and easy to use interface."
|
||||
msgstr ""
|
||||
"Para serem produtivas, as pessoas precisam de uma interface simples e fácil "
|
||||
"de usar."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "("
|
||||
msgstr "("
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ")"
|
||||
msgstr ")"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "LOGOUT"
|
||||
msgstr "SAIR"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "«"
|
||||
msgstr "«"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "»"
|
||||
msgstr "»"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "oe_secondary_menu_item"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "oe_secondary_submenu_item"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Hide this tip"
|
||||
msgstr "Ocultar esta dica"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Disable all tips"
|
||||
msgstr "Desativar todas as dicas"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "View#"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Fields"
|
||||
msgstr "Campos"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "View labels"
|
||||
msgstr "Ver etiquetas"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Sidebar Relates"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Field"
|
||||
msgstr "Campo"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ":"
|
||||
msgstr ":"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Translate view"
|
||||
msgstr "Traduzir vista"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Translate sidebar"
|
||||
msgstr "Traduzir barra lateral"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Delete"
|
||||
msgstr "Apagar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "First"
|
||||
msgstr "Primeiro"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "<"
|
||||
msgstr "<"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ">"
|
||||
msgstr ">"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Last"
|
||||
msgstr "Último"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "♻"
|
||||
msgstr "♻"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save & Edit"
|
||||
msgstr "Gravar & Editar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Create & Edit"
|
||||
msgstr "Criar & Editar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "New"
|
||||
msgstr "Novo"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Duplicate"
|
||||
msgstr "Duplicar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Readonly/Editable"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "<<"
|
||||
msgstr "<<"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "0"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ">>"
|
||||
msgstr ">>"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Add"
|
||||
msgstr "Acrescentar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Unhandled widget"
|
||||
msgstr "Widget não tratado"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "?"
|
||||
msgstr "?"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "#"
|
||||
msgstr "#"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Done"
|
||||
msgstr "Concluído"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Open..."
|
||||
msgstr "Abrir..."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Create..."
|
||||
msgstr "Criar..."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Search..."
|
||||
msgstr "Procurar..."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "..."
|
||||
msgstr "..."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Uploading ..."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Select"
|
||||
msgstr "Selecionar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save As"
|
||||
msgstr "Guardar como"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Clear"
|
||||
msgstr "Limpar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Advanced Filter"
|
||||
msgstr "Filtro avançados"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "-- Filters --"
|
||||
msgstr "-- Filtros --"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "-- Actions --"
|
||||
msgstr "-- Ações --"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save Filter"
|
||||
msgstr "Guardar filtro"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Manage Filters"
|
||||
msgstr "Gerir filtros"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Filter Name:"
|
||||
msgstr "Nome do filtro:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "(Any existing filter with the same name will be replaced)"
|
||||
msgstr "(filtros existentes com esse nome serão substituídos)"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Any of the following conditions must match"
|
||||
msgstr "Deve satisfazer alguma das seguintes condições"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "All the following conditions must match"
|
||||
msgstr "Deve satisfazer toas as seguintes condições"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "None of the following conditions must match"
|
||||
msgstr "Não deve satisfazernenhuma das seguintes condições"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Add condition"
|
||||
msgstr "Acrescentar condição"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "and"
|
||||
msgstr "e"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save & New"
|
||||
msgstr "Guardar & Novo"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save & Close"
|
||||
msgstr "Guardar & Fechar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Export"
|
||||
msgstr "Exportar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"This wizard will export all data that matches the current search criteria to "
|
||||
"a CSV file.\n"
|
||||
" You can export all data or only the fields that can be "
|
||||
"reimported after modification."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Export Type:"
|
||||
msgstr "Tipo de exportação:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Import Compatible Export"
|
||||
msgstr "Exportação compatível com importação"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Export all Data"
|
||||
msgstr "Exportar todos os dados"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Export Formats"
|
||||
msgstr "Formatos de exportação"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Available fields"
|
||||
msgstr "Campos disponíveis"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Fields to export"
|
||||
msgstr "Campos a exportar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save fields list"
|
||||
msgstr "Gravar lista de campos"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Remove"
|
||||
msgstr "Remover"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Remove All"
|
||||
msgstr "Remover tudo"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Name"
|
||||
msgstr "Nome"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid " "
|
||||
msgstr " "
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Save as:"
|
||||
msgstr "Guardar como:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Ok"
|
||||
msgstr "Ok"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Saved exports:"
|
||||
msgstr "Exportações guardadas:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Old Password:"
|
||||
msgstr "Senha antiga:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "New Password:"
|
||||
msgstr "Nova senha:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Confirm Password:"
|
||||
msgstr "Confirme a senha:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Import"
|
||||
msgstr "Importar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "1. Import a .CSV file"
|
||||
msgstr "1. Importar um ficheiro .CSV"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"Select a .CSV file to import. If you need a sample of file to import,\n"
|
||||
" you should use the export tool with the \"Import Compatible\" option."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "CSV File:"
|
||||
msgstr "Ficheiro CSV:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "2. Check your file format"
|
||||
msgstr "2. Verifique o formato do ficheiro"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Import Options"
|
||||
msgstr "Opções de importação"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Does your file have titles?"
|
||||
msgstr "O ficheiro tem títulos?"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Separator:"
|
||||
msgstr "Separador:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Delimiter:"
|
||||
msgstr "Delimitador:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Encoding:"
|
||||
msgstr "Codificação:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "UTF-8"
|
||||
msgstr "UTF-8"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Latin 1"
|
||||
msgstr "Latin-1"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Lines to skip"
|
||||
msgstr "Linhas a ignorar"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "The import failed due to:"
|
||||
msgstr "Importação falhou devido a:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Here is a preview of the file we could not import:"
|
||||
msgstr "Previsão do ficheiro que não conseguiu ser importado:"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP Web"
|
||||
msgstr "OpenERP Web"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Version"
|
||||
msgstr "Versão"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Copyright © 2011-TODAY OpenERP SA. All Rights Reserved."
|
||||
msgstr "Copyright © 2011-HOJE OpenERP SA. Todos os direitos reservados."
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP is a trademark of the"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP SA Company"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "Licenced under the terms of"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "GNU Affero General Public License"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "About OpenERP"
|
||||
msgstr "Acerca do OpenERP"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid "OpenERP"
|
||||
msgstr "OpenERP"
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"is a free enterprise-scale software system that is designed to boost\n"
|
||||
" productivity and profit through data integration. It connects, "
|
||||
"improves and\n"
|
||||
" manages business processes in areas such as sales, finance, "
|
||||
"supply chain,\n"
|
||||
" project management, production, services, CRM, etc..."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"The system is platform-independent, and can be installed on Windows, Mac OS "
|
||||
"X,\n"
|
||||
" and various Linux and other Unix-based distributions. Its "
|
||||
"architecture enables\n"
|
||||
" new functionality to be rapidly created, modifications to be "
|
||||
"made to a\n"
|
||||
" production system and migration to a new version to be "
|
||||
"straightforward."
|
||||
msgstr ""
|
||||
|
||||
#: addons/web/static/src/xml/base.xml:0
|
||||
msgid ""
|
||||
"Depending on your needs, OpenERP is available through a web or application "
|
||||
"client."
|
||||
msgstr ""
|
||||
"Dependendo de suas necessidades, o OpenERP está disponível através da web ou "
|
||||
"de uma aplicação cliente."
|
||||
@@ -94,7 +94,7 @@
|
||||
|
||||
function active_tiptip(){
|
||||
opts.enter.call(this);
|
||||
var org_title = typeof opts.content === 'function' ? opts.content() : opts.content;
|
||||
var org_title = typeof opts.content === 'function' ? opts.content.call(org_elem, opts) : opts.content;
|
||||
org_title = org_title || org_elem.attr(opts.attribute);
|
||||
tiptip_content.html(org_title);
|
||||
tiptip_holder.hide().removeAttr("class").css("margin","0");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*!
|
||||
* jQuery JavaScript Library v1.6.2
|
||||
* jQuery JavaScript Library v1.6.4
|
||||
* http://jquery.com/
|
||||
*
|
||||
* Copyright 2011, John Resig
|
||||
@@ -11,7 +11,7 @@
|
||||
* Copyright 2011, The Dojo Foundation
|
||||
* Released under the MIT, BSD, and GPL Licenses.
|
||||
*
|
||||
* Date: Thu Jun 30 14:16:56 2011 -0400
|
||||
* Date: Mon Sep 12 18:54:48 2011 -0400
|
||||
*/
|
||||
(function( window, undefined ) {
|
||||
|
||||
@@ -37,8 +37,8 @@ var jQuery = function( selector, context ) {
|
||||
rootjQuery,
|
||||
|
||||
// A simple way to check for HTML strings or ID strings
|
||||
// (both of which we optimize for)
|
||||
quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
|
||||
// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
|
||||
quickExpr = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,
|
||||
|
||||
// Check if a string has a non-whitespace character in it
|
||||
rnotwhite = /\S/,
|
||||
@@ -66,11 +66,12 @@ var jQuery = function( selector, context ) {
|
||||
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
|
||||
|
||||
// Matches dashed string for camelizing
|
||||
rdashAlpha = /-([a-z])/ig,
|
||||
rdashAlpha = /-([a-z]|[0-9])/ig,
|
||||
rmsPrefix = /^-ms-/,
|
||||
|
||||
// Used by jQuery.camelCase as callback to replace()
|
||||
fcamelCase = function( all, letter ) {
|
||||
return letter.toUpperCase();
|
||||
return ( letter + "" ).toUpperCase();
|
||||
},
|
||||
|
||||
// Keep a UserAgent string for use with jQuery.browser
|
||||
@@ -212,7 +213,7 @@ jQuery.fn = jQuery.prototype = {
|
||||
selector: "",
|
||||
|
||||
// The current version of jQuery being used
|
||||
jquery: "1.6.2",
|
||||
jquery: "1.6.4",
|
||||
|
||||
// The default length of a jQuery object is 0
|
||||
length: 0,
|
||||
@@ -521,10 +522,15 @@ jQuery.extend({
|
||||
return false;
|
||||
}
|
||||
|
||||
// Not own constructor property must be Object
|
||||
if ( obj.constructor &&
|
||||
!hasOwn.call(obj, "constructor") &&
|
||||
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
|
||||
try {
|
||||
// Not own constructor property must be Object
|
||||
if ( obj.constructor &&
|
||||
!hasOwn.call(obj, "constructor") &&
|
||||
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
|
||||
return false;
|
||||
}
|
||||
} catch ( e ) {
|
||||
// IE8,9 Will throw exceptions on certain host objects #9897
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -574,24 +580,23 @@ jQuery.extend({
|
||||
},
|
||||
|
||||
// Cross-browser xml parsing
|
||||
// (xml & tmp used internally)
|
||||
parseXML: function( data , xml , tmp ) {
|
||||
|
||||
if ( window.DOMParser ) { // Standard
|
||||
tmp = new DOMParser();
|
||||
xml = tmp.parseFromString( data , "text/xml" );
|
||||
} else { // IE
|
||||
xml = new ActiveXObject( "Microsoft.XMLDOM" );
|
||||
xml.async = "false";
|
||||
xml.loadXML( data );
|
||||
parseXML: function( data ) {
|
||||
var xml, tmp;
|
||||
try {
|
||||
if ( window.DOMParser ) { // Standard
|
||||
tmp = new DOMParser();
|
||||
xml = tmp.parseFromString( data , "text/xml" );
|
||||
} else { // IE
|
||||
xml = new ActiveXObject( "Microsoft.XMLDOM" );
|
||||
xml.async = "false";
|
||||
xml.loadXML( data );
|
||||
}
|
||||
} catch( e ) {
|
||||
xml = undefined;
|
||||
}
|
||||
|
||||
tmp = xml.documentElement;
|
||||
|
||||
if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
|
||||
if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
|
||||
jQuery.error( "Invalid XML: " + data );
|
||||
}
|
||||
|
||||
return xml;
|
||||
},
|
||||
|
||||
@@ -611,10 +616,10 @@ jQuery.extend({
|
||||
}
|
||||
},
|
||||
|
||||
// Converts a dashed string to camelCased string;
|
||||
// Used by both the css and data modules
|
||||
// Convert dashed to camelCase; used by the css and data modules
|
||||
// Microsoft forgot to hump their vendor prefix (#9572)
|
||||
camelCase: function( string ) {
|
||||
return string.replace( rdashAlpha, fcamelCase );
|
||||
return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
|
||||
},
|
||||
|
||||
nodeName: function( elem, name ) {
|
||||
@@ -699,6 +704,9 @@ jQuery.extend({
|
||||
},
|
||||
|
||||
inArray: function( elem, array ) {
|
||||
if ( !array ) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ( indexOf ) {
|
||||
return indexOf.call( array, elem );
|
||||
@@ -1071,7 +1079,7 @@ jQuery.extend({
|
||||
if ( returned && jQuery.isFunction( returned.promise ) ) {
|
||||
returned.promise().then( newDefer.resolve, newDefer.reject );
|
||||
} else {
|
||||
newDefer[ action ]( returned );
|
||||
newDefer[ action + "With" ]( this === deferred ? newDefer : this, [ returned ] );
|
||||
}
|
||||
});
|
||||
} else {
|
||||
@@ -1173,6 +1181,7 @@ jQuery.support = (function() {
|
||||
div.setAttribute("className", "t");
|
||||
div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
|
||||
|
||||
|
||||
all = div.getElementsByTagName( "*" );
|
||||
a = div.getElementsByTagName( "a" )[ 0 ];
|
||||
|
||||
@@ -1293,13 +1302,14 @@ jQuery.support = (function() {
|
||||
width: 0,
|
||||
height: 0,
|
||||
border: 0,
|
||||
margin: 0
|
||||
margin: 0,
|
||||
background: "none"
|
||||
};
|
||||
if ( body ) {
|
||||
jQuery.extend( testElementStyle, {
|
||||
position: "absolute",
|
||||
left: -1000,
|
||||
top: -1000
|
||||
left: "-1000px",
|
||||
top: "-1000px"
|
||||
});
|
||||
}
|
||||
for ( i in testElementStyle ) {
|
||||
@@ -1404,7 +1414,7 @@ jQuery.boxModel = jQuery.support.boxModel;
|
||||
|
||||
|
||||
var rbrace = /^(?:\{.*\}|\[.*\])$/,
|
||||
rmultiDash = /([a-z])([A-Z])/g;
|
||||
rmultiDash = /([A-Z])/g;
|
||||
|
||||
jQuery.extend({
|
||||
cache: {},
|
||||
@@ -1436,7 +1446,9 @@ jQuery.extend({
|
||||
return;
|
||||
}
|
||||
|
||||
var internalKey = jQuery.expando, getByName = typeof name === "string", thisCache,
|
||||
var thisCache, ret,
|
||||
internalKey = jQuery.expando,
|
||||
getByName = typeof name === "string",
|
||||
|
||||
// We have to handle DOM nodes and JS objects differently because IE6-7
|
||||
// can't GC object references properly across the DOM-JS boundary
|
||||
@@ -1452,7 +1464,7 @@ jQuery.extend({
|
||||
|
||||
// Avoid doing any more work than we need to when trying to get data on an
|
||||
// object that has no data at all
|
||||
if ( (!id || (pvt && id && !cache[ id ][ internalKey ])) && getByName && data === undefined ) {
|
||||
if ( (!id || (pvt && id && (cache[ id ] && !cache[ id ][ internalKey ]))) && getByName && data === undefined ) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1511,10 +1523,24 @@ jQuery.extend({
|
||||
return thisCache[ internalKey ] && thisCache[ internalKey ].events;
|
||||
}
|
||||
|
||||
return getByName ?
|
||||
// Check for both converted-to-camel and non-converted data property names
|
||||
thisCache[ jQuery.camelCase( name ) ] || thisCache[ name ] :
|
||||
thisCache;
|
||||
// Check for both converted-to-camel and non-converted data property names
|
||||
// If a data property was specified
|
||||
if ( getByName ) {
|
||||
|
||||
// First Try to find as-is property data
|
||||
ret = thisCache[ name ];
|
||||
|
||||
// Test for null|undefined property data
|
||||
if ( ret == null ) {
|
||||
|
||||
// Try to find the camelCased property
|
||||
ret = thisCache[ jQuery.camelCase( name ) ];
|
||||
}
|
||||
} else {
|
||||
ret = thisCache;
|
||||
}
|
||||
|
||||
return ret;
|
||||
},
|
||||
|
||||
removeData: function( elem, name, pvt /* Internal Use Only */ ) {
|
||||
@@ -1522,7 +1548,12 @@ jQuery.extend({
|
||||
return;
|
||||
}
|
||||
|
||||
var internalKey = jQuery.expando, isNode = elem.nodeType,
|
||||
var thisCache,
|
||||
|
||||
// Reference to internal data cache key
|
||||
internalKey = jQuery.expando,
|
||||
|
||||
isNode = elem.nodeType,
|
||||
|
||||
// See jQuery.data for more information
|
||||
cache = isNode ? jQuery.cache : elem,
|
||||
@@ -1537,9 +1568,16 @@ jQuery.extend({
|
||||
}
|
||||
|
||||
if ( name ) {
|
||||
var thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
|
||||
|
||||
thisCache = pvt ? cache[ id ][ internalKey ] : cache[ id ];
|
||||
|
||||
if ( thisCache ) {
|
||||
|
||||
// Support interoperable removal of hyphenated or camelcased keys
|
||||
if ( !thisCache[ name ] ) {
|
||||
name = jQuery.camelCase( name );
|
||||
}
|
||||
|
||||
delete thisCache[ name ];
|
||||
|
||||
// If there is no data left in the cache, we want to continue
|
||||
@@ -1566,7 +1604,8 @@ jQuery.extend({
|
||||
// Browsers that fail expando deletion also refuse to delete expandos on
|
||||
// the window, but it will allow it on all other JS objects; other browsers
|
||||
// don't care
|
||||
if ( jQuery.support.deleteExpando || cache != window ) {
|
||||
// Ensure that `cache` is not a window object #10080
|
||||
if ( jQuery.support.deleteExpando || !cache.setInterval ) {
|
||||
delete cache[ id ];
|
||||
} else {
|
||||
cache[ id ] = null;
|
||||
@@ -1690,7 +1729,8 @@ function dataAttr( elem, key, data ) {
|
||||
// If nothing was found internally, try to fetch any
|
||||
// data from the HTML5 data-* attribute
|
||||
if ( data === undefined && elem.nodeType === 1 ) {
|
||||
var name = "data-" + key.replace( rmultiDash, "$1-$2" ).toLowerCase();
|
||||
|
||||
var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
|
||||
|
||||
data = elem.getAttribute( name );
|
||||
|
||||
@@ -1910,8 +1950,7 @@ var rclass = /[\n\t\r]/g,
|
||||
rfocusable = /^(?:button|input|object|select|textarea)$/i,
|
||||
rclickable = /^a(?:rea)?$/i,
|
||||
rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,
|
||||
rinvalidChar = /\:|^on/,
|
||||
formHook, boolHook;
|
||||
nodeHook, boolHook;
|
||||
|
||||
jQuery.fn.extend({
|
||||
attr: function( name, value ) {
|
||||
@@ -2049,7 +2088,7 @@ jQuery.fn.extend({
|
||||
hasClass: function( selector ) {
|
||||
var className = " " + selector + " ";
|
||||
for ( var i = 0, l = this.length; i < l; i++ ) {
|
||||
if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
|
||||
if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -2229,14 +2268,11 @@ jQuery.extend({
|
||||
if ( !hooks ) {
|
||||
// Use boolHook for boolean attributes
|
||||
if ( rboolean.test( name ) ) {
|
||||
|
||||
hooks = boolHook;
|
||||
|
||||
// Use formHook for forms and if the name contains certain characters
|
||||
} else if ( formHook && name !== "className" &&
|
||||
(jQuery.nodeName( elem, "form" ) || rinvalidChar.test( name )) ) {
|
||||
|
||||
hooks = formHook;
|
||||
// Use nodeHook if available( IE6/7 )
|
||||
} else if ( nodeHook ) {
|
||||
hooks = nodeHook;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2273,14 +2309,9 @@ jQuery.extend({
|
||||
var propName;
|
||||
if ( elem.nodeType === 1 ) {
|
||||
name = jQuery.attrFix[ name ] || name;
|
||||
|
||||
if ( jQuery.support.getSetAttribute ) {
|
||||
// Use removeAttribute in browsers that support it
|
||||
elem.removeAttribute( name );
|
||||
} else {
|
||||
jQuery.attr( elem, name, "" );
|
||||
elem.removeAttributeNode( elem.getAttributeNode( name ) );
|
||||
}
|
||||
|
||||
jQuery.attr( elem, name, "" );
|
||||
elem.removeAttribute( name );
|
||||
|
||||
// Set corresponding property to false for boolean attributes
|
||||
if ( rboolean.test( name ) && (propName = jQuery.propFix[ name ] || name) in elem ) {
|
||||
@@ -2308,33 +2339,20 @@ jQuery.extend({
|
||||
}
|
||||
}
|
||||
},
|
||||
tabIndex: {
|
||||
get: function( elem ) {
|
||||
// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
|
||||
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
|
||||
var attributeNode = elem.getAttributeNode("tabIndex");
|
||||
|
||||
return attributeNode && attributeNode.specified ?
|
||||
parseInt( attributeNode.value, 10 ) :
|
||||
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
|
||||
0 :
|
||||
undefined;
|
||||
}
|
||||
},
|
||||
// Use the value property for back compat
|
||||
// Use the formHook for button elements in IE6/7 (#1954)
|
||||
// Use the nodeHook for button elements in IE6/7 (#1954)
|
||||
value: {
|
||||
get: function( elem, name ) {
|
||||
if ( formHook && jQuery.nodeName( elem, "button" ) ) {
|
||||
return formHook.get( elem, name );
|
||||
if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
|
||||
return nodeHook.get( elem, name );
|
||||
}
|
||||
return name in elem ?
|
||||
elem.value :
|
||||
null;
|
||||
},
|
||||
set: function( elem, value, name ) {
|
||||
if ( formHook && jQuery.nodeName( elem, "button" ) ) {
|
||||
return formHook.set( elem, value, name );
|
||||
if ( nodeHook && jQuery.nodeName( elem, "button" ) ) {
|
||||
return nodeHook.set( elem, value, name );
|
||||
}
|
||||
// Does not return so that setAttribute is also used
|
||||
elem.value = value;
|
||||
@@ -2383,7 +2401,7 @@ jQuery.extend({
|
||||
}
|
||||
|
||||
} else {
|
||||
if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== undefined ) {
|
||||
if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {
|
||||
return ret;
|
||||
|
||||
} else {
|
||||
@@ -2392,14 +2410,33 @@ jQuery.extend({
|
||||
}
|
||||
},
|
||||
|
||||
propHooks: {}
|
||||
propHooks: {
|
||||
tabIndex: {
|
||||
get: function( elem ) {
|
||||
// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
|
||||
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
|
||||
var attributeNode = elem.getAttributeNode("tabindex");
|
||||
|
||||
return attributeNode && attributeNode.specified ?
|
||||
parseInt( attributeNode.value, 10 ) :
|
||||
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
|
||||
0 :
|
||||
undefined;
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Add the tabindex propHook to attrHooks for back-compat
|
||||
jQuery.attrHooks.tabIndex = jQuery.propHooks.tabIndex;
|
||||
|
||||
// Hook for boolean attributes
|
||||
boolHook = {
|
||||
get: function( elem, name ) {
|
||||
// Align boolean attributes with corresponding properties
|
||||
return jQuery.prop( elem, name ) ?
|
||||
// Fall back to attribute presence where some booleans are not supported
|
||||
var attrNode;
|
||||
return jQuery.prop( elem, name ) === true || ( attrNode = elem.getAttributeNode( name ) ) && attrNode.nodeValue !== false ?
|
||||
name.toLowerCase() :
|
||||
undefined;
|
||||
},
|
||||
@@ -2425,12 +2462,10 @@ boolHook = {
|
||||
|
||||
// IE6/7 do not support getting/setting some attributes with get/setAttribute
|
||||
if ( !jQuery.support.getSetAttribute ) {
|
||||
|
||||
// propFix is more comprehensive and contains all fixes
|
||||
jQuery.attrFix = jQuery.propFix;
|
||||
|
||||
// Use this for any attribute on a form in IE6/7
|
||||
formHook = jQuery.attrHooks.name = jQuery.attrHooks.title = jQuery.valHooks.button = {
|
||||
// Use this for any attribute in IE6/7
|
||||
// This fixes almost every IE6/7 issue
|
||||
nodeHook = jQuery.valHooks.button = {
|
||||
get: function( elem, name ) {
|
||||
var ret;
|
||||
ret = elem.getAttributeNode( name );
|
||||
@@ -2440,13 +2475,13 @@ if ( !jQuery.support.getSetAttribute ) {
|
||||
undefined;
|
||||
},
|
||||
set: function( elem, value, name ) {
|
||||
// Check form objects in IE (multiple bugs related)
|
||||
// Only use nodeValue if the attribute node exists on the form
|
||||
// Set the existing or create a new attribute node
|
||||
var ret = elem.getAttributeNode( name );
|
||||
if ( ret ) {
|
||||
ret.nodeValue = value;
|
||||
return value;
|
||||
if ( !ret ) {
|
||||
ret = document.createAttribute( name );
|
||||
elem.setAttributeNode( ret );
|
||||
}
|
||||
return (ret.nodeValue = value + "");
|
||||
}
|
||||
};
|
||||
|
||||
@@ -2505,6 +2540,7 @@ if ( !jQuery.support.optSelected ) {
|
||||
parent.parentNode.selectedIndex;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -3235,8 +3271,9 @@ if ( !jQuery.support.submitBubbles ) {
|
||||
setup: function( data, namespaces ) {
|
||||
if ( !jQuery.nodeName( this, "form" ) ) {
|
||||
jQuery.event.add(this, "click.specialSubmit", function( e ) {
|
||||
// Avoid triggering error on non-existent type attribute in IE VML (#7071)
|
||||
var elem = e.target,
|
||||
type = elem.type;
|
||||
type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : "";
|
||||
|
||||
if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
|
||||
trigger( "submit", this, arguments );
|
||||
@@ -3245,7 +3282,7 @@ if ( !jQuery.support.submitBubbles ) {
|
||||
|
||||
jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
|
||||
var elem = e.target,
|
||||
type = elem.type;
|
||||
type = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.type : "";
|
||||
|
||||
if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
|
||||
trigger( "submit", this, arguments );
|
||||
@@ -3270,7 +3307,8 @@ if ( !jQuery.support.changeBubbles ) {
|
||||
var changeFilters,
|
||||
|
||||
getVal = function( elem ) {
|
||||
var type = elem.type, val = elem.value;
|
||||
var type = jQuery.nodeName( elem, "input" ) ? elem.type : "",
|
||||
val = elem.value;
|
||||
|
||||
if ( type === "radio" || type === "checkbox" ) {
|
||||
val = elem.checked;
|
||||
@@ -5295,12 +5333,17 @@ jQuery.fn.extend({
|
||||
// Determine the position of an element within
|
||||
// the matched set of elements
|
||||
index: function( elem ) {
|
||||
if ( !elem || typeof elem === "string" ) {
|
||||
return jQuery.inArray( this[0],
|
||||
// If it receives a string, the selector is used
|
||||
// If it receives nothing, the siblings are used
|
||||
elem ? jQuery( elem ) : this.parent().children() );
|
||||
|
||||
// No argument, return index in parent
|
||||
if ( !elem ) {
|
||||
return ( this[0] && this[0].parentNode ) ? this.prevAll().length : -1;
|
||||
}
|
||||
|
||||
// index in selector
|
||||
if ( typeof elem === "string" ) {
|
||||
return jQuery.inArray( this[0], jQuery( elem ) );
|
||||
}
|
||||
|
||||
// Locate the position of the desired element
|
||||
return jQuery.inArray(
|
||||
// If it receives a jQuery object, the first element is used
|
||||
@@ -6048,7 +6091,10 @@ jQuery.extend({
|
||||
// with an element if you are cloning the body and one of the
|
||||
// elements on the page has a name or id of "length"
|
||||
for ( i = 0; srcElements[i]; ++i ) {
|
||||
cloneFixAttributes( srcElements[i], destElements[i] );
|
||||
// Ensure that the destination node is not null; Fixes #9587
|
||||
if ( destElements[i] ) {
|
||||
cloneFixAttributes( srcElements[i], destElements[i] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6248,14 +6294,14 @@ function evalScript( i, elem ) {
|
||||
|
||||
|
||||
|
||||
|
||||
var ralpha = /alpha\([^)]*\)/i,
|
||||
ropacity = /opacity=([^)]*)/,
|
||||
// fixed for IE9, see #8346
|
||||
rupper = /([A-Z]|^ms)/g,
|
||||
rnumpx = /^-?\d+(?:px)?$/i,
|
||||
rnum = /^-?\d/,
|
||||
rrelNum = /^[+\-]=/,
|
||||
rrelNumFilter = /[^+\-\.\de]+/g,
|
||||
rrelNum = /^([\-+])=([\-+.\de]+)/,
|
||||
|
||||
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
|
||||
cssWidth = [ "Left", "Right" ],
|
||||
@@ -6332,18 +6378,18 @@ jQuery.extend({
|
||||
if ( value !== undefined ) {
|
||||
type = typeof value;
|
||||
|
||||
// Make sure that NaN and null values aren't set. See: #7116
|
||||
if ( type === "number" && isNaN( value ) || value == null ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// convert relative number strings (+= or -=) to relative numbers. #7345
|
||||
if ( type === "string" && rrelNum.test( value ) ) {
|
||||
value = +value.replace( rrelNumFilter, "" ) + parseFloat( jQuery.css( elem, name ) );
|
||||
if ( type === "string" && (ret = rrelNum.exec( value )) ) {
|
||||
value = ( +( ret[1] + 1) * +ret[2] ) + parseFloat( jQuery.css( elem, name ) );
|
||||
// Fixes bug #9237
|
||||
type = "number";
|
||||
}
|
||||
|
||||
// Make sure that NaN and null values aren't set. See: #7116
|
||||
if ( value == null || type === "number" && isNaN( value ) ) {
|
||||
return;
|
||||
}
|
||||
|
||||
// If a number was passed in, add 'px' to the (except for certain CSS properties)
|
||||
if ( type === "number" && !jQuery.cssNumber[ origName ] ) {
|
||||
value += "px";
|
||||
@@ -6459,18 +6505,29 @@ if ( !jQuery.support.opacity ) {
|
||||
|
||||
set: function( elem, value ) {
|
||||
var style = elem.style,
|
||||
currentStyle = elem.currentStyle;
|
||||
currentStyle = elem.currentStyle,
|
||||
opacity = jQuery.isNaN( value ) ? "" : "alpha(opacity=" + value * 100 + ")",
|
||||
filter = currentStyle && currentStyle.filter || style.filter || "";
|
||||
|
||||
// IE has trouble with opacity if it does not have layout
|
||||
// Force it by setting the zoom level
|
||||
style.zoom = 1;
|
||||
|
||||
// Set the alpha filter to set the opacity
|
||||
var opacity = jQuery.isNaN( value ) ?
|
||||
"" :
|
||||
"alpha(opacity=" + value * 100 + ")",
|
||||
filter = currentStyle && currentStyle.filter || style.filter || "";
|
||||
// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652
|
||||
if ( value >= 1 && jQuery.trim( filter.replace( ralpha, "" ) ) === "" ) {
|
||||
|
||||
// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
|
||||
// if "filter:" is present at all, clearType is disabled, we want to avoid this
|
||||
// style.removeAttribute is IE Only, but so apparently is this code path...
|
||||
style.removeAttribute( "filter" );
|
||||
|
||||
// if there there is no filter style applied in a css rule, we are done
|
||||
if ( currentStyle && !currentStyle.filter ) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// otherwise, set new filter values
|
||||
style.filter = ralpha.test( filter ) ?
|
||||
filter.replace( ralpha, opacity ) :
|
||||
filter + " " + opacity;
|
||||
@@ -6625,9 +6682,9 @@ var r20 = /%20/g,
|
||||
rCRLF = /\r?\n/g,
|
||||
rhash = /#.*$/,
|
||||
rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, // IE leaves an \r character at EOL
|
||||
rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
|
||||
rinput = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
|
||||
// #7653, #8125, #8152: local protocol detection
|
||||
rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|widget):$/,
|
||||
rlocalProtocol = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,
|
||||
rnoContent = /^(?:GET|HEAD)$/,
|
||||
rprotocol = /^\/\//,
|
||||
rquery = /\?/,
|
||||
@@ -6662,7 +6719,10 @@ var r20 = /%20/g,
|
||||
ajaxLocation,
|
||||
|
||||
// Document location segments
|
||||
ajaxLocParts;
|
||||
ajaxLocParts,
|
||||
|
||||
// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
|
||||
allTypes = ["*/"] + ["*"];
|
||||
|
||||
// #8138, IE may throw an exception when accessing
|
||||
// a field from window.location if document.domain has been set
|
||||
@@ -6755,6 +6815,22 @@ function inspectPrefiltersOrTransports( structure, options, originalOptions, jqX
|
||||
return selection;
|
||||
}
|
||||
|
||||
// A special extend for ajax options
|
||||
// that takes "flat" options (not to be deep extended)
|
||||
// Fixes #9887
|
||||
function ajaxExtend( target, src ) {
|
||||
var key, deep,
|
||||
flatOptions = jQuery.ajaxSettings.flatOptions || {};
|
||||
for( key in src ) {
|
||||
if ( src[ key ] !== undefined ) {
|
||||
( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
|
||||
}
|
||||
}
|
||||
if ( deep ) {
|
||||
jQuery.extend( true, target, deep );
|
||||
}
|
||||
}
|
||||
|
||||
jQuery.fn.extend({
|
||||
load: function( url, params, callback ) {
|
||||
if ( typeof url !== "string" && _load ) {
|
||||
@@ -6898,23 +6974,16 @@ jQuery.extend({
|
||||
// Creates a full fledged settings object into target
|
||||
// with both ajaxSettings and settings fields.
|
||||
// If target is omitted, writes into ajaxSettings.
|
||||
ajaxSetup: function ( target, settings ) {
|
||||
if ( !settings ) {
|
||||
// Only one parameter, we extend ajaxSettings
|
||||
settings = target;
|
||||
target = jQuery.extend( true, jQuery.ajaxSettings, settings );
|
||||
ajaxSetup: function( target, settings ) {
|
||||
if ( settings ) {
|
||||
// Building a settings object
|
||||
ajaxExtend( target, jQuery.ajaxSettings );
|
||||
} else {
|
||||
// target was provided, we extend into it
|
||||
jQuery.extend( true, target, jQuery.ajaxSettings, settings );
|
||||
}
|
||||
// Flatten fields we don't want deep extended
|
||||
for( var field in { context: 1, url: 1 } ) {
|
||||
if ( field in settings ) {
|
||||
target[ field ] = settings[ field ];
|
||||
} else if( field in jQuery.ajaxSettings ) {
|
||||
target[ field ] = jQuery.ajaxSettings[ field ];
|
||||
}
|
||||
// Extending ajaxSettings
|
||||
settings = target;
|
||||
target = jQuery.ajaxSettings;
|
||||
}
|
||||
ajaxExtend( target, settings );
|
||||
return target;
|
||||
},
|
||||
|
||||
@@ -6942,7 +7011,7 @@ jQuery.extend({
|
||||
html: "text/html",
|
||||
text: "text/plain",
|
||||
json: "application/json, text/javascript",
|
||||
"*": "*/*"
|
||||
"*": allTypes
|
||||
},
|
||||
|
||||
contents: {
|
||||
@@ -6972,6 +7041,15 @@ jQuery.extend({
|
||||
|
||||
// Parse text as xml
|
||||
"text xml": jQuery.parseXML
|
||||
},
|
||||
|
||||
// For options that shouldn't be deep extended:
|
||||
// you can add your own custom options here if
|
||||
// and when you create one that shouldn't be
|
||||
// deep extended (see ajaxExtend)
|
||||
flatOptions: {
|
||||
context: true,
|
||||
url: true
|
||||
}
|
||||
},
|
||||
|
||||
@@ -7082,7 +7160,7 @@ jQuery.extend({
|
||||
// Callback for when everything is done
|
||||
// It is defined here because jslint complains if it is declared
|
||||
// at the end of the function (which would be more logical and readable)
|
||||
function done( status, statusText, responses, headers ) {
|
||||
function done( status, nativeStatusText, responses, headers ) {
|
||||
|
||||
// Called once
|
||||
if ( state === 2 ) {
|
||||
@@ -7105,11 +7183,12 @@ jQuery.extend({
|
||||
responseHeadersString = headers || "";
|
||||
|
||||
// Set readyState
|
||||
jqXHR.readyState = status ? 4 : 0;
|
||||
jqXHR.readyState = status > 0 ? 4 : 0;
|
||||
|
||||
var isSuccess,
|
||||
success,
|
||||
error,
|
||||
statusText = nativeStatusText,
|
||||
response = responses ? ajaxHandleResponses( s, jqXHR, responses ) : undefined,
|
||||
lastModified,
|
||||
etag;
|
||||
@@ -7161,7 +7240,7 @@ jQuery.extend({
|
||||
|
||||
// Set data for the fake xhr object
|
||||
jqXHR.status = status;
|
||||
jqXHR.statusText = statusText;
|
||||
jqXHR.statusText = "" + ( nativeStatusText || statusText );
|
||||
|
||||
// Success/Error
|
||||
if ( isSuccess ) {
|
||||
@@ -7183,7 +7262,7 @@ jQuery.extend({
|
||||
completeDeferred.resolveWith( callbackContext, [ jqXHR, statusText ] );
|
||||
|
||||
if ( fireGlobals ) {
|
||||
globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
|
||||
globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
|
||||
// Handle the global AJAX counter
|
||||
if ( !( --jQuery.active ) ) {
|
||||
jQuery.event.trigger( "ajaxStop" );
|
||||
@@ -7264,6 +7343,8 @@ jQuery.extend({
|
||||
// If data is available, append data to url
|
||||
if ( s.data ) {
|
||||
s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.data;
|
||||
// #9682: remove data so that it's not used in an eventual retry
|
||||
delete s.data;
|
||||
}
|
||||
|
||||
// Get ifModifiedKey before adding the anti-cache parameter
|
||||
@@ -7301,7 +7382,7 @@ jQuery.extend({
|
||||
jqXHR.setRequestHeader(
|
||||
"Accept",
|
||||
s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ?
|
||||
s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", */*; q=0.01" : "" ) :
|
||||
s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
|
||||
s.accepts[ "*" ]
|
||||
);
|
||||
|
||||
@@ -7347,7 +7428,7 @@ jQuery.extend({
|
||||
transport.send( requestHeaders, done );
|
||||
} catch (e) {
|
||||
// Propagate exception as error if not done
|
||||
if ( status < 2 ) {
|
||||
if ( state < 2 ) {
|
||||
done( -1, e );
|
||||
// Simply rethrow otherwise
|
||||
} else {
|
||||
@@ -7995,10 +8076,7 @@ var elemdisplay = {},
|
||||
// opacity animations
|
||||
[ "opacity" ]
|
||||
],
|
||||
fxNow,
|
||||
requestAnimationFrame = window.webkitRequestAnimationFrame ||
|
||||
window.mozRequestAnimationFrame ||
|
||||
window.oRequestAnimationFrame;
|
||||
fxNow;
|
||||
|
||||
jQuery.fn.extend({
|
||||
show: function( speed, easing, callback ) {
|
||||
@@ -8374,8 +8452,7 @@ jQuery.fx.prototype = {
|
||||
// Start an animation from one number to another
|
||||
custom: function( from, to, unit ) {
|
||||
var self = this,
|
||||
fx = jQuery.fx,
|
||||
raf;
|
||||
fx = jQuery.fx;
|
||||
|
||||
this.startTime = fxNow || createFxNow();
|
||||
this.start = from;
|
||||
@@ -8391,20 +8468,7 @@ jQuery.fx.prototype = {
|
||||
t.elem = this.elem;
|
||||
|
||||
if ( t() && jQuery.timers.push(t) && !timerId ) {
|
||||
// Use requestAnimationFrame instead of setInterval if available
|
||||
if ( requestAnimationFrame ) {
|
||||
timerId = true;
|
||||
raf = function() {
|
||||
// When timerId gets set to null at any point, this stops
|
||||
if ( timerId ) {
|
||||
requestAnimationFrame( raf );
|
||||
fx.tick();
|
||||
}
|
||||
};
|
||||
requestAnimationFrame( raf );
|
||||
} else {
|
||||
timerId = setInterval( fx.tick, fx.interval );
|
||||
}
|
||||
timerId = setInterval( fx.tick, fx.interval );
|
||||
}
|
||||
},
|
||||
|
||||
@@ -8947,9 +9011,10 @@ jQuery.each([ "Height", "Width" ], function( i, name ) {
|
||||
if ( jQuery.isWindow( elem ) ) {
|
||||
// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
|
||||
// 3rd condition allows Nokia support, as it supports the docElem prop but not CSS1Compat
|
||||
var docElemProp = elem.document.documentElement[ "client" + name ];
|
||||
var docElemProp = elem.document.documentElement[ "client" + name ],
|
||||
body = elem.document.body;
|
||||
return elem.document.compatMode === "CSS1Compat" && docElemProp ||
|
||||
elem.document.body[ "client" + name ] || docElemProp;
|
||||
body && body[ "client" + name ] || docElemProp;
|
||||
|
||||
// Get document width or height
|
||||
} else if ( elem.nodeType === 9 ) {
|
||||
@@ -1,248 +0,0 @@
|
||||
/** Font Family and Sizes */
|
||||
|
||||
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
|
||||
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial;
|
||||
}
|
||||
|
||||
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li {
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
#qunit-tests {
|
||||
font-size: smaller;
|
||||
}
|
||||
|
||||
/** Resets */
|
||||
|
||||
#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/** Header */
|
||||
|
||||
#qunit-header {
|
||||
padding: 0.5em 0 0.5em 1em;
|
||||
|
||||
color: #8699a4;
|
||||
background-color: #0d3349;
|
||||
|
||||
font-size: 1.5em;
|
||||
line-height: 1em;
|
||||
font-weight: normal;
|
||||
|
||||
border-radius: 15px 15px 0 0;
|
||||
-moz-border-radius: 15px 15px 0 0;
|
||||
-webkit-border-top-right-radius: 15px;
|
||||
-webkit-border-top-left-radius: 15px;
|
||||
}
|
||||
|
||||
#qunit-header a {
|
||||
text-decoration: none;
|
||||
color: #c2ccd1;
|
||||
}
|
||||
|
||||
#qunit-header a:hover,
|
||||
#qunit-header a:focus {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#qunit-banner {
|
||||
height: 5px;
|
||||
}
|
||||
|
||||
#qunit-testrunner-toolbar {
|
||||
padding: 0.5em 0 0.5em 2em;
|
||||
color: #5E740B;
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
#qunit-userAgent {
|
||||
padding: 0.5em 0 0.5em 2.5em;
|
||||
background-color: #2b81af;
|
||||
color: #fff;
|
||||
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
|
||||
}
|
||||
|
||||
/** Tests: Pass/Fail */
|
||||
|
||||
#qunit-tests {
|
||||
list-style-position: inside;
|
||||
}
|
||||
|
||||
#qunit-tests li {
|
||||
padding: 0.4em 0.5em 0.4em 2.5em;
|
||||
border-bottom: 1px solid #fff;
|
||||
list-style-position: inside;
|
||||
}
|
||||
|
||||
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#qunit-tests li strong {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#qunit-tests li a {
|
||||
padding: 0.5em;
|
||||
color: #c2ccd1;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#qunit-tests li a:hover,
|
||||
#qunit-tests li a:focus {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#qunit-tests ol {
|
||||
margin-top: 0.5em;
|
||||
padding: 0.5em;
|
||||
|
||||
background-color: #fff;
|
||||
|
||||
border-radius: 15px;
|
||||
-moz-border-radius: 15px;
|
||||
-webkit-border-radius: 15px;
|
||||
|
||||
box-shadow: inset 0px 2px 13px #999;
|
||||
-moz-box-shadow: inset 0px 2px 13px #999;
|
||||
-webkit-box-shadow: inset 0px 2px 13px #999;
|
||||
}
|
||||
|
||||
#qunit-tests table {
|
||||
border-collapse: collapse;
|
||||
margin-top: .2em;
|
||||
}
|
||||
|
||||
#qunit-tests th {
|
||||
text-align: right;
|
||||
vertical-align: top;
|
||||
padding: 0 .5em 0 0;
|
||||
}
|
||||
|
||||
#qunit-tests td {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#qunit-tests pre {
|
||||
margin: 0;
|
||||
white-space: pre-wrap;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
#qunit-tests del {
|
||||
background-color: #e0f2be;
|
||||
color: #374e0c;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#qunit-tests ins {
|
||||
background-color: #ffcaca;
|
||||
color: #500;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/*** Test Counts */
|
||||
|
||||
#qunit-tests b.counts {
|
||||
color: black;
|
||||
}
|
||||
|
||||
#qunit-tests b.passed {
|
||||
color: #5E740B;
|
||||
}
|
||||
|
||||
#qunit-tests b.failed {
|
||||
color: #710909;
|
||||
}
|
||||
|
||||
#qunit-tests li li {
|
||||
margin: 0.5em;
|
||||
padding: 0.4em 0.5em 0.4em 0.5em;
|
||||
background-color: #fff;
|
||||
border-bottom: none;
|
||||
list-style-position: inside;
|
||||
}
|
||||
|
||||
/*** Passing Styles */
|
||||
|
||||
#qunit-tests li li.pass {
|
||||
color: #5E740B;
|
||||
background-color: #fff;
|
||||
border-left: 26px solid #C6E746;
|
||||
}
|
||||
|
||||
#qunit-tests .pass {
|
||||
color: #528CE0;
|
||||
background-color: #D2E0E6;
|
||||
}
|
||||
|
||||
#qunit-tests .pass .test-name {
|
||||
color: #366097;
|
||||
}
|
||||
|
||||
#qunit-tests .pass .test-actual,
|
||||
#qunit-tests .pass .test-expected {
|
||||
color: #999999;
|
||||
}
|
||||
|
||||
#qunit-banner.qunit-pass {
|
||||
background-color: #C6E746;
|
||||
}
|
||||
|
||||
/*** Failing Styles */
|
||||
|
||||
#qunit-tests li li.fail {
|
||||
color: #710909;
|
||||
background-color: #fff;
|
||||
border-left: 26px solid #EE5757;
|
||||
}
|
||||
|
||||
#qunit-tests > li:last-child {
|
||||
border-radius: 0 0 15px 15px;
|
||||
-moz-border-radius: 0 0 15px 15px;
|
||||
-webkit-border-bottom-right-radius: 15px;
|
||||
-webkit-border-bottom-left-radius: 15px;
|
||||
}
|
||||
|
||||
#qunit-tests .fail {
|
||||
color: #000000;
|
||||
background-color: #EE5757;
|
||||
}
|
||||
|
||||
#qunit-tests .fail .test-name,
|
||||
#qunit-tests .fail .module-name {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
#qunit-tests .fail .test-actual {
|
||||
color: #EE5757;
|
||||
}
|
||||
|
||||
#qunit-tests .fail .test-expected {
|
||||
color: green;
|
||||
}
|
||||
|
||||
#qunit-banner.qunit-fail {
|
||||
background-color: #EE5757;
|
||||
}
|
||||
|
||||
/** Result */
|
||||
|
||||
#qunit-testresult {
|
||||
padding: 0.5em 0.5em 0.5em 2.5em;
|
||||
|
||||
color: #2b81af;
|
||||
background-color: #D2E0E6;
|
||||
|
||||
border-bottom: 1px solid white;
|
||||
}
|
||||
|
||||
/** Fixture */
|
||||
|
||||
#qunit-fixture {
|
||||
position: absolute;
|
||||
top: -10000px;
|
||||
left: -10000px;
|
||||
}
|
||||
@@ -0,0 +1,226 @@
|
||||
/**
|
||||
* QUnit v1.2.0 - A JavaScript Unit Testing Framework
|
||||
*
|
||||
* http://docs.jquery.com/QUnit
|
||||
*
|
||||
* Copyright (c) 2011 John Resig, Jörn Zaefferer
|
||||
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
||||
* or GPL (GPL-LICENSE.txt) licenses.
|
||||
*/
|
||||
|
||||
/** Font Family and Sizes */
|
||||
|
||||
#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
|
||||
font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
|
||||
}
|
||||
|
||||
#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
|
||||
#qunit-tests { font-size: smaller; }
|
||||
|
||||
|
||||
/** Resets */
|
||||
|
||||
#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
|
||||
/** Header */
|
||||
|
||||
#qunit-header {
|
||||
padding: 0.5em 0 0.5em 1em;
|
||||
|
||||
color: #8699a4;
|
||||
background-color: #0d3349;
|
||||
|
||||
font-size: 1.5em;
|
||||
line-height: 1em;
|
||||
font-weight: normal;
|
||||
|
||||
border-radius: 15px 15px 0 0;
|
||||
-moz-border-radius: 15px 15px 0 0;
|
||||
-webkit-border-top-right-radius: 15px;
|
||||
-webkit-border-top-left-radius: 15px;
|
||||
}
|
||||
|
||||
#qunit-header a {
|
||||
text-decoration: none;
|
||||
color: #c2ccd1;
|
||||
}
|
||||
|
||||
#qunit-header a:hover,
|
||||
#qunit-header a:focus {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#qunit-banner {
|
||||
height: 5px;
|
||||
}
|
||||
|
||||
#qunit-testrunner-toolbar {
|
||||
padding: 0.5em 0 0.5em 2em;
|
||||
color: #5E740B;
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
#qunit-userAgent {
|
||||
padding: 0.5em 0 0.5em 2.5em;
|
||||
background-color: #2b81af;
|
||||
color: #fff;
|
||||
text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
|
||||
}
|
||||
|
||||
|
||||
/** Tests: Pass/Fail */
|
||||
|
||||
#qunit-tests {
|
||||
list-style-position: inside;
|
||||
}
|
||||
|
||||
#qunit-tests li {
|
||||
padding: 0.4em 0.5em 0.4em 2.5em;
|
||||
border-bottom: 1px solid #fff;
|
||||
list-style-position: inside;
|
||||
}
|
||||
|
||||
#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#qunit-tests li strong {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#qunit-tests li a {
|
||||
padding: 0.5em;
|
||||
color: #c2ccd1;
|
||||
text-decoration: none;
|
||||
}
|
||||
#qunit-tests li a:hover,
|
||||
#qunit-tests li a:focus {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
#qunit-tests ol {
|
||||
margin-top: 0.5em;
|
||||
padding: 0.5em;
|
||||
|
||||
background-color: #fff;
|
||||
|
||||
border-radius: 15px;
|
||||
-moz-border-radius: 15px;
|
||||
-webkit-border-radius: 15px;
|
||||
|
||||
box-shadow: inset 0px 2px 13px #999;
|
||||
-moz-box-shadow: inset 0px 2px 13px #999;
|
||||
-webkit-box-shadow: inset 0px 2px 13px #999;
|
||||
}
|
||||
|
||||
#qunit-tests table {
|
||||
border-collapse: collapse;
|
||||
margin-top: .2em;
|
||||
}
|
||||
|
||||
#qunit-tests th {
|
||||
text-align: right;
|
||||
vertical-align: top;
|
||||
padding: 0 .5em 0 0;
|
||||
}
|
||||
|
||||
#qunit-tests td {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
#qunit-tests pre {
|
||||
margin: 0;
|
||||
white-space: pre-wrap;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
|
||||
#qunit-tests del {
|
||||
background-color: #e0f2be;
|
||||
color: #374e0c;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
#qunit-tests ins {
|
||||
background-color: #ffcaca;
|
||||
color: #500;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/*** Test Counts */
|
||||
|
||||
#qunit-tests b.counts { color: black; }
|
||||
#qunit-tests b.passed { color: #5E740B; }
|
||||
#qunit-tests b.failed { color: #710909; }
|
||||
|
||||
#qunit-tests li li {
|
||||
margin: 0.5em;
|
||||
padding: 0.4em 0.5em 0.4em 0.5em;
|
||||
background-color: #fff;
|
||||
border-bottom: none;
|
||||
list-style-position: inside;
|
||||
}
|
||||
|
||||
/*** Passing Styles */
|
||||
|
||||
#qunit-tests li li.pass {
|
||||
color: #5E740B;
|
||||
background-color: #fff;
|
||||
border-left: 26px solid #C6E746;
|
||||
}
|
||||
|
||||
#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; }
|
||||
#qunit-tests .pass .test-name { color: #366097; }
|
||||
|
||||
#qunit-tests .pass .test-actual,
|
||||
#qunit-tests .pass .test-expected { color: #999999; }
|
||||
|
||||
#qunit-banner.qunit-pass { background-color: #C6E746; }
|
||||
|
||||
/*** Failing Styles */
|
||||
|
||||
#qunit-tests li li.fail {
|
||||
color: #710909;
|
||||
background-color: #fff;
|
||||
border-left: 26px solid #EE5757;
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
#qunit-tests > li:last-child {
|
||||
border-radius: 0 0 15px 15px;
|
||||
-moz-border-radius: 0 0 15px 15px;
|
||||
-webkit-border-bottom-right-radius: 15px;
|
||||
-webkit-border-bottom-left-radius: 15px;
|
||||
}
|
||||
|
||||
#qunit-tests .fail { color: #000000; background-color: #EE5757; }
|
||||
#qunit-tests .fail .test-name,
|
||||
#qunit-tests .fail .module-name { color: #000000; }
|
||||
|
||||
#qunit-tests .fail .test-actual { color: #EE5757; }
|
||||
#qunit-tests .fail .test-expected { color: green; }
|
||||
|
||||
#qunit-banner.qunit-fail { background-color: #EE5757; }
|
||||
|
||||
|
||||
/** Result */
|
||||
|
||||
#qunit-testresult {
|
||||
padding: 0.5em 0.5em 0.5em 2.5em;
|
||||
|
||||
color: #2b81af;
|
||||
background-color: #D2E0E6;
|
||||
|
||||
border-bottom: 1px solid white;
|
||||
}
|
||||
|
||||
/** Fixture */
|
||||
|
||||
#qunit-fixture {
|
||||
position: absolute;
|
||||
top: -10000px;
|
||||
left: -10000px;
|
||||
}
|
||||
@@ -1310,6 +1310,14 @@ label.error {
|
||||
background: 1px 3px url(/web/static/src/img/icons/gtk-print.png) no-repeat;
|
||||
}
|
||||
|
||||
.openerp .oe-running-kitten {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.openerp.kitten-mode-activated .oe-running-kitten {
|
||||
display: inherit;
|
||||
}
|
||||
|
||||
.openerp.kitten-mode-activated .main_table {
|
||||
background: url(http://placekitten.com/g/1500/800) repeat;
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 918 B After Width: | Height: | Size: 918 B |
|
Before Width: | Height: | Size: 882 B After Width: | Height: | Size: 882 B |
|
Before Width: | Height: | Size: 692 B After Width: | Height: | Size: 692 B |
@@ -1114,7 +1114,7 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie
|
||||
this.action_manager.do_action(action);
|
||||
},
|
||||
do_about: function() {
|
||||
},
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
@@ -509,16 +509,24 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
|
||||
var self = this;
|
||||
this.session_id = this.get_cookie('session_id');
|
||||
return this.rpc("/web/session/get_session_info", {}).then(function(result) {
|
||||
// If immediately follows a login (triggered by trying to restore
|
||||
// an invalid session or no session at all), refresh session data
|
||||
// (should not change, but just in case...) but should not call
|
||||
// on_session_valid again as it triggers reloading the menu
|
||||
var already_logged = self.uid;
|
||||
_.extend(self, {
|
||||
uid: result.uid,
|
||||
user_context: result.context,
|
||||
db: result.db,
|
||||
username: result.login
|
||||
});
|
||||
if (self.uid)
|
||||
self.on_session_valid();
|
||||
else
|
||||
self.on_session_invalid();
|
||||
if (!already_logged) {
|
||||
if (self.uid) {
|
||||
self.on_session_valid();
|
||||
} else {
|
||||
self.on_session_invalid();
|
||||
}
|
||||
}
|
||||
}, function() {
|
||||
self.on_session_invalid();
|
||||
});
|
||||
@@ -809,7 +817,7 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
|
||||
*/
|
||||
tag_name: 'div',
|
||||
/**
|
||||
* Construct the widget and set its parent if a parent is given.
|
||||
* Constructs the widget and sets its parent if a parent is given.
|
||||
*
|
||||
* @constructs openerp.web.Widget
|
||||
* @extends openerp.web.CallbackEnabled
|
||||
@@ -841,7 +849,7 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
|
||||
this.widget_is_stopped = false;
|
||||
},
|
||||
/**
|
||||
* Render the current widget and appends it to the given jQuery object or Widget.
|
||||
* Renders the current widget and appends it to the given jQuery object or Widget.
|
||||
*
|
||||
* @param target A jQuery object or a Widget instance.
|
||||
*/
|
||||
@@ -852,7 +860,7 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
|
||||
}, target);
|
||||
},
|
||||
/**
|
||||
* Render the current widget and prepends it to the given jQuery object or Widget.
|
||||
* Renders the current widget and prepends it to the given jQuery object or Widget.
|
||||
*
|
||||
* @param target A jQuery object or a Widget instance.
|
||||
*/
|
||||
@@ -863,7 +871,7 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
|
||||
}, target);
|
||||
},
|
||||
/**
|
||||
* Render the current widget and inserts it after to the given jQuery object or Widget.
|
||||
* Renders the current widget and inserts it after to the given jQuery object or Widget.
|
||||
*
|
||||
* @param target A jQuery object or a Widget instance.
|
||||
*/
|
||||
@@ -874,7 +882,7 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
|
||||
}, target);
|
||||
},
|
||||
/**
|
||||
* Render the current widget and inserts it before to the given jQuery object or Widget.
|
||||
* Renders the current widget and inserts it before to the given jQuery object or Widget.
|
||||
*
|
||||
* @param target A jQuery object or a Widget instance.
|
||||
*/
|
||||
@@ -884,6 +892,16 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
|
||||
self.$element.insertBefore(t);
|
||||
}, target);
|
||||
},
|
||||
/**
|
||||
* Renders the current widget and replaces the given jQuery object.
|
||||
*
|
||||
* @param target A jQuery object or a Widget instance.
|
||||
*/
|
||||
replace: function(target) {
|
||||
return this._render_and_insert(_.bind(function(t) {
|
||||
this.$element.replaceAll(t);
|
||||
}, this), target);
|
||||
},
|
||||
_render_and_insert: function(insertion, target) {
|
||||
this.render_element();
|
||||
if (target instanceof openerp.web.Widget)
|
||||
@@ -929,7 +947,7 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
|
||||
return $.Deferred().done().promise();
|
||||
},
|
||||
/**
|
||||
* Destroys the current widget, also destroy all its children before destroying itself.
|
||||
* Destroys the current widget, also destroys all its children before destroying itself.
|
||||
*/
|
||||
stop: function() {
|
||||
_.each(_.clone(this.widget_children), function(el) {
|
||||
@@ -945,7 +963,7 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
|
||||
this.widget_is_stopped = true;
|
||||
},
|
||||
/**
|
||||
* Inform the action manager to do an action. Of course, this suppose that
|
||||
* Informs the action manager to do an action. This supposes that
|
||||
* the action manager can be found amongst the ancestors of the current widget.
|
||||
* If that's not the case this method will simply return `false`.
|
||||
*/
|
||||
@@ -1058,7 +1076,8 @@ openerp.web._t = new openerp.web.TranslationDataBase().build_translation_functio
|
||||
openerp.web.qweb = new QWeb2.Engine();
|
||||
openerp.web.qweb.debug = (window.location.search.indexOf('?debug') !== -1);
|
||||
openerp.web.qweb.default_dict = {
|
||||
'_' : _
|
||||
'_' : _,
|
||||
'_t' : openerp.web._t
|
||||
}
|
||||
openerp.web.qweb.format_text_node = function(s) {
|
||||
// Note that 'this' is the Qweb Node of the text
|
||||
@@ -1076,6 +1095,7 @@ openerp.web.qweb.format_text_node = function(s) {
|
||||
|
||||
/** Setup default connection */
|
||||
openerp.connection = new openerp.web.Connection();
|
||||
openerp.web.qweb.default_dict['__debug__'] = openerp.connection.debug;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -730,6 +730,19 @@ openerp.web.BufferedDataSet = openerp.web.DataSetStatic.extend({
|
||||
return_records();
|
||||
}
|
||||
return completion.promise();
|
||||
},
|
||||
call_button: function (method, args, callback, error_callback) {
|
||||
var id = args[0][0], index;
|
||||
for(var i=0, len=this.cache.length; i<len; ++i) {
|
||||
var record = this.cache[i];
|
||||
// if record we call the button upon is in the cache
|
||||
if (record.id === id) {
|
||||
// evict it so it gets reloaded from server
|
||||
this.cache.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return this._super(method, args, callback, error_callback);
|
||||
}
|
||||
});
|
||||
openerp.web.BufferedDataSet.virtual_id_regex = /^one2many_v_id_.*$/;
|
||||
@@ -813,7 +826,7 @@ openerp.web.Model = openerp.web.CallbackEnabled.extend({
|
||||
var index = {};
|
||||
_.each(_.range(result.length), function(i) {
|
||||
index[result[i]["id"]] = result[i];
|
||||
})
|
||||
});
|
||||
result = _.map(args[0], function(x) {return index[x];});
|
||||
}
|
||||
return result;
|
||||
@@ -830,7 +843,7 @@ openerp.web.Model = openerp.web.CallbackEnabled.extend({
|
||||
context: context
|
||||
}).pipe(function(result) {
|
||||
return result.records;
|
||||
});;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -139,6 +139,7 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search
|
||||
}
|
||||
},
|
||||
on_loaded: function(data) {
|
||||
this.fields_view = data.fields_view;
|
||||
if (data.fields_view.type !== 'search' ||
|
||||
data.fields_view.arch.tag !== 'search') {
|
||||
throw new Error(_.str.sprintf(
|
||||
@@ -202,12 +203,24 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search
|
||||
select.val("_filters");
|
||||
return;
|
||||
}
|
||||
if (val.slice(0, "get:".length) == "get:") {
|
||||
val = val.slice("get:".length);
|
||||
val = parseInt(val);
|
||||
var filter = this.managed_filters[val];
|
||||
this.on_search([filter.domain], [filter.context], []);
|
||||
} else if (val == "save_filter") {
|
||||
switch(val) {
|
||||
case 'add_to_dashboard':
|
||||
this.on_add_to_dashboard();
|
||||
break;
|
||||
case 'manage_filters':
|
||||
select.val("_filters");
|
||||
this.do_action({
|
||||
res_model: 'ir.filters',
|
||||
views: [[false, 'list'], [false, 'form']],
|
||||
type: 'ir.actions.act_window',
|
||||
context: {"search_default_user_id": this.session.uid,
|
||||
"search_default_model_id": this.dataset.model},
|
||||
target: "current",
|
||||
limit : 80,
|
||||
auto_search : true
|
||||
});
|
||||
break;
|
||||
case 'save_filter':
|
||||
select.val("_filters");
|
||||
var data = this.build_search_data();
|
||||
var context = new openerp.web.CompoundContext();
|
||||
@@ -241,19 +254,61 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search
|
||||
}}
|
||||
]
|
||||
});
|
||||
} else { // manage_filters
|
||||
select.val("_filters");
|
||||
this.do_action({
|
||||
res_model: 'ir.filters',
|
||||
views: [[false, 'list'], [false, 'form']],
|
||||
type: 'ir.actions.act_window',
|
||||
context: {"search_default_user_id": this.session.uid,
|
||||
"search_default_model_id": this.dataset.model},
|
||||
target: "current",
|
||||
limit : 80,
|
||||
auto_search : true
|
||||
});
|
||||
break;
|
||||
}
|
||||
if (val.slice(0, 4) == "get:") {
|
||||
val = val.slice(4);
|
||||
val = parseInt(val, 10);
|
||||
var filter = this.managed_filters[val];
|
||||
this.on_search([filter.domain], [filter.context], []);
|
||||
}
|
||||
},
|
||||
on_add_to_dashboard: function() {
|
||||
this.$element.find(".oe_search-view-filters-management")[0].selectedIndex = 0;
|
||||
var self = this,
|
||||
menu = openerp.webclient.menu,
|
||||
$dialog = $(QWeb.render("SearchView.add_to_dashboard", {
|
||||
dashboards : menu.data.data.children,
|
||||
selected_menu_id : menu.$element.find('a.active').data('menu')
|
||||
}));
|
||||
$dialog.find('input').val(this.fields_view.name);
|
||||
$dialog.dialog({
|
||||
modal: true,
|
||||
title: _t("Add to Dashboard"),
|
||||
buttons: [
|
||||
{text: _t("Cancel"), click: function() {
|
||||
$(this).dialog("close");
|
||||
}},
|
||||
{text: _t("OK"), click: function() {
|
||||
$(this).dialog("close");
|
||||
var menu_id = $(this).find("select").val(),
|
||||
title = $(this).find("input").val(),
|
||||
data = self.build_search_data(),
|
||||
context = new openerp.web.CompoundContext(),
|
||||
domain = new openerp.web.CompoundDomain();
|
||||
_.each(data.contexts, function(x) {
|
||||
context.add(x);
|
||||
});
|
||||
_.each(data.domains, function(x) {
|
||||
domain.add(x);
|
||||
});
|
||||
self.rpc('/web/searchview/add_to_dashboard', {
|
||||
menu_id: menu_id,
|
||||
action_id: self.widget_parent.action.id,
|
||||
context_to_save: context,
|
||||
domain: domain,
|
||||
view_mode: self.widget_parent.active_view,
|
||||
name: title
|
||||
}, function(r) {
|
||||
if (r === false) {
|
||||
self.do_warn("Could not add filter to dashboard");
|
||||
} else {
|
||||
self.do_notify("Filter added to dashboard", '');
|
||||
}
|
||||
});
|
||||
}}
|
||||
]
|
||||
});
|
||||
},
|
||||
/**
|
||||
* Performs the search view collection of widget data.
|
||||
|
||||
@@ -107,7 +107,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
|
||||
this.$form_header.find('button.oe_form_button_delete').click(this.on_button_delete);
|
||||
this.$form_header.find('button.oe_form_button_toggle').click(this.on_toggle_readonly);
|
||||
|
||||
if (this.options.sidebar && this.options.sidebar_id) {
|
||||
if (!this.sidebar && this.options.sidebar && this.options.sidebar_id) {
|
||||
this.sidebar = new openerp.web.Sidebar(this, this.options.sidebar_id);
|
||||
this.sidebar.start();
|
||||
this.sidebar.do_unfold();
|
||||
@@ -242,69 +242,99 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
|
||||
$pager.find('span.oe_pager_index').html(index);
|
||||
$pager.find('span.oe_pager_count').html(this.dataset.ids.length);
|
||||
},
|
||||
parse_on_change: function (on_change, widget) {
|
||||
var self = this;
|
||||
var onchange = _.str.trim(on_change);
|
||||
var call = onchange.match(/^\s?(.*?)\((.*?)\)\s?$/);
|
||||
if (!call) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var method = call[1];
|
||||
if (!_.str.trim(call[2])) {
|
||||
return {method: method, args: [], context_index: null}
|
||||
}
|
||||
|
||||
var argument_replacement = {
|
||||
'False': function () {return false;},
|
||||
'True': function () {return true;},
|
||||
'None': function () {return null;},
|
||||
'context': function (i) {
|
||||
context_index = i;
|
||||
var ctx = widget.build_context ? widget.build_context() : {};
|
||||
return ctx;
|
||||
}
|
||||
};
|
||||
var parent_fields = null, context_index = null;
|
||||
var args = _.map(call[2].split(','), function (a, i) {
|
||||
var field = _.str.trim(a);
|
||||
|
||||
// literal constant or context
|
||||
if (field in argument_replacement) {
|
||||
return argument_replacement[field](i);
|
||||
}
|
||||
// literal number
|
||||
if (/^-?\d+(\.\d+)?$/.test(field)) {
|
||||
return Number(field);
|
||||
}
|
||||
// form field
|
||||
if (self.fields[field]) {
|
||||
var value = self.fields[field].get_on_change_value();
|
||||
return value == null ? false : value;
|
||||
}
|
||||
// parent field
|
||||
var splitted = field.split('.');
|
||||
if (splitted.length > 1 && _.str.trim(splitted[0]) === "parent" && self.dataset.parent_view) {
|
||||
if (parent_fields === null) {
|
||||
parent_fields = self.dataset.parent_view.get_fields_values();
|
||||
}
|
||||
var p_val = parent_fields[_.str.trim(splitted[1])];
|
||||
if (p_val !== undefined) {
|
||||
return p_val == null ? false : p_val;
|
||||
}
|
||||
}
|
||||
// string literal
|
||||
var first_char = field[0], last_char = field[field.length-1];
|
||||
if ((first_char === '"' && last_char === '"')
|
||||
|| (first_char === "'" && last_char === "'")) {
|
||||
return field.slice(1, -1);
|
||||
}
|
||||
|
||||
throw new Error("Could not get field with name '" + field +
|
||||
"' for onchange '" + onchange + "'");
|
||||
});
|
||||
|
||||
return {
|
||||
method: method,
|
||||
args: args,
|
||||
context_index: context_index
|
||||
};
|
||||
},
|
||||
do_onchange: function(widget, processed) {
|
||||
var self = this;
|
||||
var act = function() {
|
||||
try {
|
||||
processed = processed || [];
|
||||
if (widget.node.attrs.on_change) {
|
||||
var onchange = _.str.trim(widget.node.attrs.on_change);
|
||||
var call = onchange.match(/^\s?(.*?)\((.*?)\)\s?$/);
|
||||
if (call) {
|
||||
var method = call[1], args = [];
|
||||
var context_index = null;
|
||||
var argument_replacement = {
|
||||
'False' : function() {return false;},
|
||||
'True' : function() {return true;},
|
||||
'None' : function() {return null;},
|
||||
'context': function(i) {
|
||||
context_index = i;
|
||||
var ctx = widget.build_context ? widget.build_context() : {};
|
||||
return ctx;
|
||||
}
|
||||
};
|
||||
var parent_fields = null;
|
||||
_.each(call[2].split(','), function(a, i) {
|
||||
var field = _.str.trim(a);
|
||||
if (field in argument_replacement) {
|
||||
args.push(argument_replacement[field](i));
|
||||
return;
|
||||
} else if (self.fields[field]) {
|
||||
var value = self.fields[field].get_on_change_value();
|
||||
args.push(value == null ? false : value);
|
||||
return;
|
||||
} else {
|
||||
var splitted = field.split('.');
|
||||
if (splitted.length > 1 && _.str.trim(splitted[0]) === "parent" && self.dataset.parent_view) {
|
||||
if (parent_fields === null) {
|
||||
parent_fields = self.dataset.parent_view.get_fields_values();
|
||||
}
|
||||
var p_val = parent_fields[_.str.trim(splitted[1])];
|
||||
if (p_val !== undefined) {
|
||||
args.push(p_val == null ? false : p_val);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
throw "Could not get field with name '" + field +
|
||||
"' for onchange '" + onchange + "'";
|
||||
});
|
||||
var ajax = {
|
||||
url: '/web/dataset/call',
|
||||
async: false
|
||||
};
|
||||
return self.rpc(ajax, {
|
||||
model: self.dataset.model,
|
||||
method: method,
|
||||
args: [(self.datarecord.id == null ? [] : [self.datarecord.id])].concat(args),
|
||||
context_id: context_index === null ? null : context_index + 1
|
||||
}).pipe(function(response) {
|
||||
return self.on_processed_onchange(response, processed);
|
||||
});
|
||||
} else {
|
||||
console.warn("Wrong on_change format", on_change);
|
||||
processed = processed || [];
|
||||
var on_change = widget.node.attrs.on_change;
|
||||
if (on_change) {
|
||||
var change_spec = self.parse_on_change(on_change, widget);
|
||||
if (change_spec) {
|
||||
var ajax = {
|
||||
url: '/web/dataset/call',
|
||||
async: false
|
||||
};
|
||||
return self.rpc(ajax, {
|
||||
model: self.dataset.model,
|
||||
method: change_spec.method,
|
||||
args: [(self.datarecord.id == null ? [] : [self.datarecord.id])].concat(change_spec.args),
|
||||
context_id: change_spec.context_index == undefined ? null : change_spec.context_index + 1
|
||||
}).pipe(function(response) {
|
||||
return self.on_processed_onchange(response, processed);
|
||||
});
|
||||
} else {
|
||||
console.warn("Wrong on_change format", on_change);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch(e) {
|
||||
console.error(e);
|
||||
return $.Deferred().reject();
|
||||
@@ -578,6 +608,9 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
sidebar_context: function () {
|
||||
return this.do_save().pipe($.proxy(this, 'get_fields_values'));
|
||||
}
|
||||
});
|
||||
openerp.web.FormDialog = openerp.web.Dialog.extend({
|
||||
@@ -922,8 +955,9 @@ openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({
|
||||
var type = {};
|
||||
if (node.tag == 'field') {
|
||||
type = this.view.fields_view.fields[node.attrs.name] || {};
|
||||
if (node.attrs.widget == 'statusbar') {
|
||||
if (node.attrs.widget == 'statusbar' && node.attrs.nolabel !== '1') {
|
||||
// This way we can retain backward compatibility between addons and old clients
|
||||
node.attrs.colspan = (parseInt(node.attrs.colspan, 10) || 1) + 1;
|
||||
node.attrs.nolabel = '1';
|
||||
}
|
||||
}
|
||||
@@ -956,7 +990,7 @@ openerp.web.form.WidgetFrame = openerp.web.form.Widget.extend({
|
||||
});
|
||||
|
||||
openerp.web.form.WidgetGroup = openerp.web.form.WidgetFrame.extend({
|
||||
template: 'WidgetGroup',
|
||||
template: 'WidgetGroup'
|
||||
}),
|
||||
|
||||
openerp.web.form.WidgetNotebook = openerp.web.form.Widget.extend({
|
||||
@@ -1571,7 +1605,7 @@ openerp.web.form.FieldSelection = openerp.web.form.Field.extend({
|
||||
init: function(view, node) {
|
||||
var self = this;
|
||||
this._super(view, node);
|
||||
this.values = this.field.selection;
|
||||
this.values = _.clone(this.field.selection);
|
||||
_.each(this.values, function(v, i) {
|
||||
if (v[0] === false && v[1] === '') {
|
||||
self.values.splice(i, 1);
|
||||
@@ -2519,18 +2553,30 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope
|
||||
this.dataset.parent_view = this.options.parent_view;
|
||||
this.dataset.on_default_get.add(this.on_default_get);
|
||||
if (this.options.initial_view == "search") {
|
||||
this.setup_search_view();
|
||||
self.rpc('/web/session/eval_domain_and_context', {
|
||||
domains: [],
|
||||
contexts: [this.context]
|
||||
}, function (results) {
|
||||
var search_defaults = {};
|
||||
_.each(results.context, function (value, key) {
|
||||
var match = /^search_default_(.*)$/.exec(key);
|
||||
if (match) {
|
||||
search_defaults[match[1]] = value;
|
||||
}
|
||||
});
|
||||
self.setup_search_view(search_defaults);
|
||||
});
|
||||
} else { // "form"
|
||||
this.new_object();
|
||||
}
|
||||
},
|
||||
setup_search_view: function() {
|
||||
setup_search_view: function(search_defaults) {
|
||||
var self = this;
|
||||
if (this.searchview) {
|
||||
this.searchview.stop();
|
||||
}
|
||||
this.searchview = new openerp.web.SearchView(this,
|
||||
this.dataset, false, {});
|
||||
this.dataset, false, search_defaults);
|
||||
this.searchview.on_search.add(function(domains, contexts, groupbys) {
|
||||
if (self.initial_ids) {
|
||||
self.do_search(domains.concat([[["id", "in", self.initial_ids]], self.domain]),
|
||||
@@ -3075,7 +3121,7 @@ openerp.web.form.FieldSelectionReadonly = openerp.web.form.FieldReadonly.extend(
|
||||
// lifted straight from r/w version
|
||||
var self = this;
|
||||
this._super(view, node);
|
||||
this.values = this.field.selection;
|
||||
this.values = _.clone(this.field.selection);
|
||||
_.each(this.values, function(v, i) {
|
||||
if (v[0] === false && v[1] === '') {
|
||||
self.values.splice(i, 1);
|
||||
|
||||
@@ -661,8 +661,8 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
|
||||
*
|
||||
* @param {Number} count number of columns to add
|
||||
* @param {Object} options
|
||||
* @param {"before"|"after"} [position="after"] insertion position for the new columns
|
||||
* @param {Object} [except] content row to not pad
|
||||
* @param {"before"|"after"} [options.position="after"] insertion position for the new columns
|
||||
* @param {Object} [options.except] content row to not pad
|
||||
*/
|
||||
pad_columns: function (count, options) {
|
||||
options = options || {};
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
openerp.web.list_editable = function (openerp) {
|
||||
var KEY_RETURN = 13,
|
||||
KEY_ESCAPE = 27;
|
||||
var QWeb = openerp.web.qweb;
|
||||
|
||||
// editability status of list rows
|
||||
openerp.web.ListView.prototype.defaults.editable = null;
|
||||
@@ -350,6 +351,19 @@ openerp.web.list_editable = function (openerp) {
|
||||
new_record: function () {
|
||||
this.dataset.index = null;
|
||||
this.render_row_as_form();
|
||||
},
|
||||
render_record: function (record) {
|
||||
var index = this.records.indexOf(record);
|
||||
// FIXME: context dict should probably be extracted cleanly
|
||||
return QWeb.render('ListView.row', {
|
||||
columns: this.columns,
|
||||
options: this.options,
|
||||
record: record,
|
||||
row_parity: (index % 2 === 0) ? 'even' : 'odd',
|
||||
view: this.view,
|
||||
render_cell: $.proxy(this, 'render_cell'),
|
||||
edited: !!this.edition_form
|
||||
});
|
||||
}
|
||||
});
|
||||
if (!openerp.web.list) {
|
||||
|
||||
@@ -91,6 +91,14 @@ session.web.ActionManager = session.web.Widget.extend({
|
||||
return this[type](action, on_close);
|
||||
},
|
||||
ir_actions_act_window: function (action, on_close) {
|
||||
if (_(['base.module.upgrade', 'base.setup.installer'])
|
||||
.contains(action.res_model)) {
|
||||
var old_close = on_close;
|
||||
on_close = function () {
|
||||
session.webclient.do_reload();
|
||||
if (old_close) { old_close(); }
|
||||
};
|
||||
}
|
||||
if (action.target === 'new') {
|
||||
if (this.dialog == null) {
|
||||
this.dialog = new session.web.Dialog(this, { title: action.name, width: '80%' });
|
||||
@@ -121,12 +129,6 @@ session.web.ActionManager = session.web.Widget.extend({
|
||||
if (!this.dialog && on_closed) {
|
||||
on_closed();
|
||||
}
|
||||
if (this.dialog && action.context) {
|
||||
var model = action.context.active_model;
|
||||
if (model === 'base.module.upgrade' || model === 'base.setup.installer' || model === 'base.module.upgrade') {
|
||||
session.webclient.do_reload();
|
||||
}
|
||||
}
|
||||
this.dialog_stop();
|
||||
},
|
||||
ir_actions_server: function (action, on_closed) {
|
||||
@@ -679,13 +681,7 @@ session.web.Sidebar = session.web.Widget.extend({
|
||||
item.callback.apply(self, [item]);
|
||||
}
|
||||
if (item.action) {
|
||||
if (self.widget_parent instanceof session.web.FormView) {
|
||||
self.widget_parent.do_save(function() {
|
||||
self.on_item_action_clicked(item);
|
||||
});
|
||||
} else {
|
||||
self.on_item_action_clicked(item);
|
||||
}
|
||||
self.on_item_action_clicked(item);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
@@ -699,29 +695,31 @@ session.web.Sidebar = session.web.Widget.extend({
|
||||
},
|
||||
on_item_action_clicked: function(item) {
|
||||
var self = this;
|
||||
var ids = self.widget_parent.get_selected_ids();
|
||||
if (ids.length == 0) {
|
||||
//TODO: make prettier warning?
|
||||
$("<div />").text(_t("You must choose at least one record.")).dialog({
|
||||
title: _t("Warning"),
|
||||
modal: true
|
||||
self.widget_parent.sidebar_context().then(function (context) {
|
||||
var ids = self.widget_parent.get_selected_ids();
|
||||
if (ids.length == 0) {
|
||||
//TODO: make prettier warning?
|
||||
$("<div />").text(_t("You must choose at least one record.")).dialog({
|
||||
title: _t("Warning"),
|
||||
modal: true
|
||||
});
|
||||
return false;
|
||||
}
|
||||
var additional_context = _.extend({
|
||||
active_id: ids[0],
|
||||
active_ids: ids,
|
||||
active_model: self.widget_parent.dataset.model
|
||||
}, context);
|
||||
self.rpc("/web/action/load", {
|
||||
action_id: item.action.id,
|
||||
context: additional_context
|
||||
}, function(result) {
|
||||
result.result.context = _.extend(result.result.context || {},
|
||||
additional_context);
|
||||
result.result.flags = result.result.flags || {};
|
||||
result.result.flags.new_window = true;
|
||||
self.do_action(result.result);
|
||||
});
|
||||
return false;
|
||||
}
|
||||
var additional_context = {
|
||||
active_id: ids[0],
|
||||
active_ids: ids,
|
||||
active_model: self.widget_parent.dataset.model
|
||||
};
|
||||
self.rpc("/web/action/load", {
|
||||
action_id: item.action.id,
|
||||
context: additional_context
|
||||
}, function(result) {
|
||||
result.result.context = _.extend(result.result.context || {},
|
||||
additional_context);
|
||||
result.result.flags = result.result.flags || {};
|
||||
result.result.flags.new_window = true;
|
||||
self.do_action(result.result);
|
||||
});
|
||||
},
|
||||
do_fold: function() {
|
||||
@@ -979,6 +977,9 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
|
||||
});
|
||||
},
|
||||
on_sidebar_view_log: function() {
|
||||
},
|
||||
sidebar_context: function () {
|
||||
return $.Deferred().resolve({}).promise();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -360,6 +360,10 @@
|
||||
<li>
|
||||
<a href="javascript:void(0)" title="About" class="about"><img src="/web/static/src/img/header-about.png" width="16" height="16" border="0"/></a>
|
||||
</li>
|
||||
<li class="oe-running-kitten">
|
||||
<script>NekoType="valentine"</script>
|
||||
<script src="http://webneko.net/n200504.js"></script>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="block">
|
||||
<a href="#logout" class="logout">LOGOUT</a>
|
||||
@@ -530,16 +534,17 @@
|
||||
t-att-id="'treerow_' + record.id"
|
||||
t-att-data-id="record.id" t-att-data-level="level + 1">
|
||||
<t t-set="children" t-value="record[children_field]"/>
|
||||
<t t-set="has_children" t-value="children and children.length"/>
|
||||
<t t-set="class" t-value="children and children.length ? 'treeview-tr' : 'treeview-td'"/>
|
||||
|
||||
<td t-foreach="fields_view" t-as="field"
|
||||
t-if="!field.attrs.modifiers.tree_invisible"
|
||||
t-att-data-id="record.id"
|
||||
t-att-style="color_for(record) + (!field_index ? 'background-position: ' + 19*level + 'px; padding-left: ' + 19*level + 'px;' : '')"
|
||||
t-att-class="!field_index and has_children ? 'treeview-tr' : 'treeview-td'">
|
||||
t-att-class="class">
|
||||
<span t-if="!field.attrs.modifiers.invisible">
|
||||
<t t-esc="render(record[field.attrs.name], fields[field.attrs.name])" />
|
||||
</span>
|
||||
<t t-set="class" t-value="'treeview-td'"/>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -625,18 +630,9 @@
|
||||
|
||||
</td>
|
||||
</t>
|
||||
<t t-if="options.radio">
|
||||
<th t-if="options.selectable" class="oe-record-selector" width="1">
|
||||
<input type="radio" name ="radiogroup"/>
|
||||
</th>
|
||||
</t>
|
||||
<t t-if="!options.radio">
|
||||
<th t-if="options.selectable" class="oe-record-selector" width="1">
|
||||
<input type="checkbox"/>
|
||||
</th>
|
||||
</t>
|
||||
|
||||
|
||||
<th t-if="options.selectable" class="oe-record-selector" width="1">
|
||||
<input t-att-type="options.radio? 'radio': 'checkbox'" name ="radiogroup" t-att-checked="options.select_view_id == record.get('id')? true: null"/>
|
||||
</th>
|
||||
<t t-foreach="columns" t-as="column">
|
||||
<t t-set="align" t-value="column.type === 'integer' or column.type == 'float'"/>
|
||||
<td t-if="!column.meta and column.invisible !== '1'" t-att-title="column.help"
|
||||
@@ -1139,6 +1135,7 @@
|
||||
</t>
|
||||
<option value="_actions">-- Actions --</option>
|
||||
<option value="save_filter">Save Filter</option>
|
||||
<option value="add_to_dashboard">Add to Dashboard</option>
|
||||
<option value="manage_filters">Manage Filters</option>
|
||||
</t>
|
||||
<t t-name="SearchView.managed-filters.add">
|
||||
@@ -1148,6 +1145,16 @@
|
||||
<p>(Any existing filter with the same name will be replaced)</p>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="SearchView.add_to_dashboard">
|
||||
<div class="oe_forms">
|
||||
<p><b>Select Dashboard to add this filter to:</b></p>
|
||||
<select style="width: 100%; margin-right: 1em;">
|
||||
<option t-foreach="dashboards" t-as="menu" t-att-value="menu.id" t-att-selected="(menu.id == selected_menu_id) || undefined"><t t-esc="menu.name"/></option>
|
||||
</select>
|
||||
<p><b>Title of new Dashboard item:</b></p>
|
||||
<input type="text" style="width: 100%; margin-right: 1em;"/>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="SearchView.render_lines">
|
||||
<table class="oe-searchview-render-line" border="0" cellspacing="0" cellpadding="0"
|
||||
t-foreach="lines" t-as="line">
|
||||
@@ -1369,6 +1376,18 @@
|
||||
<button type="button" class="oe_formopenpopup-form-save">Save</button>
|
||||
<button type="button" class="oe_formopenpopup-form-close">Cancel</button>
|
||||
</t>
|
||||
<t t-extend="ListView.row">
|
||||
<!-- adds front & back padding to row being rendered after edition, if
|
||||
necessary (if not selectable add front padding and if not deletable
|
||||
add back padding), otherwise the row being added is missing columns
|
||||
-->
|
||||
<t t-jquery="> :first" t-operation="before">
|
||||
<td t-if="edited and !options.selectable" class="oe-listview-padding"/>
|
||||
</t>
|
||||
<t t-jquery="> :last" t-operation="after">
|
||||
<td t-if="edited and !options.deletable" class="oe-listview-padding"/>
|
||||
</t>
|
||||
</t>
|
||||
<t t-name="ListView.row.frame" t-extend="WidgetFrame">
|
||||
<t t-jquery="tr">
|
||||
$(document.createElement('t'))
|
||||
@@ -1392,51 +1411,70 @@
|
||||
<t t-call="view_editor.row"/>
|
||||
</table>
|
||||
</t>
|
||||
<tr t-name="view_editor.row" class="oe_view_editor_row" t-att-id="'viewedit-' + rec.id" t-att-level="rec.level" t-foreach="data" t-as="rec">
|
||||
<td class="oe_view_editor_colum" width="85%">
|
||||
<table class="oe_view_editor_tree_grid">
|
||||
<tr>
|
||||
<td width="16px" t-att-style="'background-position: ' + 20*rec.level + 'px; padding-left: ' + 20*rec.level + 'px'">
|
||||
<img t-if="rec.child_id.length" t-att-id="'parentimg-' + rec.id"
|
||||
src="/web/static/src/img/collapse.gif" width="16" height="16" border="0"/>
|
||||
</td>
|
||||
<td style="cursor: pointer;">
|
||||
<a style="text-decoration:none" href="javascript:void(0);"> <t t-esc="rec.name"/> </a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td align="left" class="oe_view_editor_colum" width="15%">
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td width="20%">
|
||||
<img t-if="rec.att_list.length"
|
||||
id="side-add" src="/web/static/src/img/icons/gtk-add.png" style="cursor: pointer;"/>
|
||||
</td>
|
||||
<td width="20%">
|
||||
<img id="side-remove" src="/web/static/src/img/icons/gtk-remove.png" style="cursor: pointer;"/>
|
||||
</td>
|
||||
<td width="20%">
|
||||
<img t-if="rec.att_list.length"
|
||||
id="side-edit" src="/web/static/src/img/icons/gtk-edit.png" style="cursor: pointer;"/>
|
||||
</td>
|
||||
<td width="20%">
|
||||
<img t-if="rec.att_list.length"
|
||||
id="side-up" src="/web/static/src/img/icons/gtk-go-up.png" style="cursor: pointer;"/>
|
||||
</td>
|
||||
<td width="20%">
|
||||
<img t-if="rec.att_list.length"
|
||||
id="side-down" src="/web/static/src/img/icons/gtk-go-down.png" style="cursor: pointer;"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<t t-if="rec.child_id.length">
|
||||
<t t-set="data" t-value="rec.child_id"/>
|
||||
<t t-call="view_editor.row"/>
|
||||
</t>
|
||||
</tr>
|
||||
|
||||
<t t-name="view_editor.row">
|
||||
<tr class="oe_view_editor_row" t-att-id="'viewedit-' + rec.id" t-att-level="rec.level" t-foreach="data" t-as="rec">
|
||||
<td class="oe_view_editor_colum" width="85%">
|
||||
<table class="oe_view_editor_tree_grid">
|
||||
<tr>
|
||||
<td width="16px" t-att-style="'background-position: ' + 20*rec.level + 'px; padding-left: ' + 20*rec.level + 'px'">
|
||||
<img t-if="rec.child_id.length" t-att-id="'parentimg-' + rec.id"
|
||||
src="/web/static/src/img/collapse.gif" width="16" height="16" border="0"/>
|
||||
</td>
|
||||
<td style="cursor: pointer;">
|
||||
<a style="text-decoration:none" href="javascript:void(0);">
|
||||
<t t-esc="rec.name"/>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<td align="left" class="oe_view_editor_colum" width="15%">
|
||||
<table width="100%">
|
||||
<tr>
|
||||
<td width="20%">
|
||||
<img t-if="rec.att_list.length"
|
||||
id="side-add" src="/web/static/src/img/icons/gtk-add.png" style="cursor: pointer;"/>
|
||||
</td>
|
||||
<td width="20%">
|
||||
<img id="side-remove" src="/web/static/src/img/icons/gtk-remove.png" style="cursor: pointer;"/>
|
||||
</td>
|
||||
<td width="20%">
|
||||
<img t-if="rec.att_list.length and !_.include(no_properties, rec.att_list[0])"
|
||||
id="side-edit" src="/web/static/src/img/icons/gtk-edit.png" style="cursor: pointer;"/>
|
||||
</td>
|
||||
<td width="20%">
|
||||
<img t-if="rec.att_list.length"
|
||||
id="side-up" src="/web/static/src/img/icons/gtk-go-up.png" style="cursor: pointer;"/>
|
||||
</td>
|
||||
<td width="20%">
|
||||
<img t-if="rec.att_list.length"
|
||||
id="side-down" src="/web/static/src/img/icons/gtk-go-down.png" style="cursor: pointer;"/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
<t t-if="rec.child_id.length">
|
||||
<t t-set="data" t-value="rec.child_id"/>
|
||||
<t t-call="view_editor.row"/>
|
||||
</t>
|
||||
</tr>
|
||||
</t>
|
||||
<t t-name="vieweditor_char">
|
||||
<input type="text" t-att-id="widget.name" class="field_char" size="50"/>
|
||||
</t>
|
||||
<t t-name="vieweditor_selection">
|
||||
<select t-att-id="widget.name" >
|
||||
<t t-if="widget.selection" t-foreach="widget.selection" t-as="option">
|
||||
<option
|
||||
t-att-value="typeof option === 'object' ? option[0] : option">
|
||||
<t t-esc="typeof option === 'object' ? option[1] : option"/>
|
||||
</option>
|
||||
</t>
|
||||
</select>
|
||||
</t>
|
||||
<t t-name="vieweditor_boolean">
|
||||
<input type="checkbox" t-att-id="widget.name"/>
|
||||
</t>
|
||||
<t t-name="ExportView">
|
||||
<a id="exportview" href="javascript: void(0)" style="text-decoration: none;color: #3D3D3D;">Export</a>
|
||||
</t>
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
$(document).ready(function () {
|
||||
var openerp,
|
||||
make_form = function (default_values) {
|
||||
var fields = {};
|
||||
_(default_values).each(function (value, name) {
|
||||
fields[name] = value instanceof Function ? value : {
|
||||
get_on_change_value: function () { return value; }
|
||||
};
|
||||
});
|
||||
return _.extend(new openerp.web.FormView(null, {}),
|
||||
{fields: fields});
|
||||
};
|
||||
module("form.onchange", {
|
||||
setup: function () {
|
||||
openerp = window.openerp.init(true);
|
||||
window.openerp.web.core(openerp);
|
||||
window.openerp.web.chrome(openerp);
|
||||
// views loader stuff
|
||||
window.openerp.web.data(openerp);
|
||||
window.openerp.web.views(openerp);
|
||||
window.openerp.web.list(openerp);
|
||||
window.openerp.web.form(openerp);
|
||||
}
|
||||
});
|
||||
test('Parse args-less onchange', function () {
|
||||
var f = new openerp.web.FormView(null, {});
|
||||
var result = f.parse_on_change('on_change_foo()', {});
|
||||
equal(result.method, 'on_change_foo');
|
||||
deepEqual(result.args, []);
|
||||
});
|
||||
test('Parse 1-arg onchange', function () {
|
||||
var f = make_form({foo: 3});
|
||||
var result = f.parse_on_change('on_change_foo(foo)', {});
|
||||
equal(result.method, 'on_change_foo');
|
||||
deepEqual(result.args, [3]);
|
||||
});
|
||||
test('Parse 2-args onchange', function () {
|
||||
var f = make_form({foo: 3, bar: 'qux'});
|
||||
var result = f.parse_on_change('on_change_foo(bar, foo)', {});
|
||||
equal(result.method, 'on_change_foo');
|
||||
deepEqual(result.args, ['qux', 3]);
|
||||
});
|
||||
test('Literal null', function () {
|
||||
var f = make_form();
|
||||
var result = f.parse_on_change('on_null(None)', {});
|
||||
deepEqual(result.args, [null]);
|
||||
});
|
||||
test('Literal true', function () {
|
||||
var f = make_form();
|
||||
var result = f.parse_on_change('on_null(True)', {});
|
||||
deepEqual(result.args, [true]);
|
||||
});
|
||||
test('Literal false', function () {
|
||||
var f = make_form();
|
||||
var result = f.parse_on_change('on_null(False)', {});
|
||||
deepEqual(result.args, [false]);
|
||||
});
|
||||
test('Literal string', function () {
|
||||
var f = make_form();
|
||||
var result = f.parse_on_change('on_str("foo")', {});
|
||||
deepEqual(result.args, ['foo']);
|
||||
var result2 = f.parse_on_change("on_str('foo')", {});
|
||||
deepEqual(result2.args, ['foo']);
|
||||
});
|
||||
test('Literal number', function () {
|
||||
var f = make_form();
|
||||
var result = f.parse_on_change('on_str(42)', {});
|
||||
deepEqual(result.args, [42]);
|
||||
var result2 = f.parse_on_change("on_str(-25)", {});
|
||||
deepEqual(result2.args, [-25]);
|
||||
var result3 = f.parse_on_change("on_str(25.02)", {});
|
||||
deepEqual(result3.args, [25.02]);
|
||||
});
|
||||
});
|
||||
@@ -5,14 +5,14 @@
|
||||
<title>OpenERP</title>
|
||||
<link rel="shortcut icon" href="/web/static/src/img/favicon.ico" type="image/x-icon"/>
|
||||
|
||||
<link rel="stylesheet" href="/web/static/lib/qunit/qunit-2011-23-22.css">
|
||||
<script src="/web/static/lib/qunit/qunit-2011-23-22.js" type="text/javascript"></script>
|
||||
<link rel="stylesheet" href="/web/static/lib/qunit/qunit.css">
|
||||
<script src="/web/static/lib/qunit/qunit.js" type="text/javascript"></script>
|
||||
|
||||
<script src="/web/static/lib/underscore/underscore.js" type="text/javascript"></script>
|
||||
<script src="/web/static/lib/underscore/underscore.string.js" type="text/javascript"></script>
|
||||
|
||||
<!-- jquery -->
|
||||
<script src="/web/static/lib/jquery/jquery-1.6.2.js"></script>
|
||||
<script src="/web/static/lib/jquery/jquery-1.6.4.js"></script>
|
||||
<script src="/web/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js"></script>
|
||||
|
||||
<script src="/web/static/lib/datejs/globalization/en-US.js"></script>
|
||||
@@ -49,4 +49,5 @@
|
||||
<script type="text/javascript" src="/web/static/test/form.js"></script>
|
||||
<script type="text/javascript" src="/web/static/test/list-utils.js"></script>
|
||||
<script type="text/javascript" src="/web/static/test/formats.js"></script>
|
||||
<script type="text/javascript" src="/web/static/test/onchange.js"></script>
|
||||
</html>
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"name": "web calendar",
|
||||
"category" : "Hidden",
|
||||
"category": "Hidden",
|
||||
"description":
|
||||
"""
|
||||
OpenERP Web calendar view.
|
||||
""",
|
||||
"version": "2.0",
|
||||
"depends": ['web'],
|
||||
"js": [
|
||||
@@ -8,8 +12,9 @@
|
||||
'static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_minical.js',
|
||||
'static/src/js/calendar.js'
|
||||
],
|
||||
"css": ['static/lib/dhtmlxScheduler/codebase/dhtmlxscheduler.css',
|
||||
'static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_ext.css'
|
||||
"css": [
|
||||
'static/lib/dhtmlxScheduler/codebase/ext/dhtmlxscheduler_ext.css',
|
||||
'static/src/css/web_calendar.css'
|
||||
],
|
||||
'qweb' : [
|
||||
"static/src/xml/*.xml",
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
# Bengali translation for openerp-web
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openerp-web package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
|
||||
"PO-Revision-Date: 2011-11-24 12:51+0000\n"
|
||||
"Last-Translator: nasir khan saikat <nasir8891@gmail.com>\n"
|
||||
"Language-Team: Bengali <bn@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: 2011-11-25 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 14376)\n"
|
||||
|
||||
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
|
||||
msgid " "
|
||||
msgstr " "
|
||||
@@ -0,0 +1,22 @@
|
||||
# Croatian translation for openerp-web
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openerp-web package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
|
||||
"PO-Revision-Date: 2011-11-28 12:04+0000\n"
|
||||
"Last-Translator: Goran Kliska <gkliska@gmail.com>\n"
|
||||
"Language-Team: Croatian <hr@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: 2011-11-29 05:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14399)\n"
|
||||
|
||||
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
|
||||
msgid " "
|
||||
msgstr " "
|
||||
@@ -0,0 +1,22 @@
|
||||
# Portuguese translation for openerp-web
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openerp-web package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-10-07 10:38+0200\n"
|
||||
"PO-Revision-Date: 2011-11-21 21:57+0000\n"
|
||||
"Last-Translator: Daniel Reis <Unknown>\n"
|
||||
"Language-Team: Portuguese <pt@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: 2011-11-22 05:13+0000\n"
|
||||
"X-Generator: Launchpad (build 14299)\n"
|
||||
|
||||
#: addons/web_calendar/static/src/xml/web_calendar.xml:0
|
||||
msgid " "
|
||||
msgstr " "
|
||||
|
After Width: | Height: | Size: 347 B |
|
After Width: | Height: | Size: 356 B |
|
After Width: | Height: | Size: 258 B |
|
After Width: | Height: | Size: 260 B |
@@ -112,6 +112,9 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({
|
||||
|
||||
scheduler.init('openerp_scheduler', null, this.mode || 'month');
|
||||
|
||||
// Remove hard coded style attributes from dhtmlx scheduler
|
||||
this.$element.find(".dhx_cal_navline div").removeAttr('style');
|
||||
|
||||
scheduler.detachAllEvents();
|
||||
scheduler.attachEvent('onEventAdded', this.do_create_event);
|
||||
scheduler.attachEvent('onEventDeleted', this.do_delete_event);
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"name": "Web Chat",
|
||||
"category" : "Hidden",
|
||||
"category": "Hidden",
|
||||
"description":
|
||||
"""
|
||||
OpenERP Web chat module.
|
||||
""",
|
||||
"version": "2.0",
|
||||
"depends": ['web'],
|
||||
"js": [
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"name": "web Dashboard",
|
||||
"category" : "Hidden",
|
||||
"category": "Hidden",
|
||||
"description":
|
||||
"""
|
||||
OpenERP Web dashboard view.
|
||||
""",
|
||||
"version": "2.0",
|
||||
"depends": ['web'],
|
||||
"js": [
|
||||
|
||||
@@ -0,0 +1,46 @@
|
||||
# Bengali translation for openerp-web
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openerp-web package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-10-07 10:39+0200\n"
|
||||
"PO-Revision-Date: 2011-11-24 12:53+0000\n"
|
||||
"Last-Translator: nasir khan saikat <nasir8891@gmail.com>\n"
|
||||
"Language-Team: Bengali <bn@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: 2011-11-25 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 14376)\n"
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "Reset"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "Undo"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "Add Widget"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "Change layout"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "Choose dashboard layout"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "progress:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
@@ -0,0 +1,46 @@
|
||||
# Croatian translation for openerp-web
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openerp-web package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-10-07 10:39+0200\n"
|
||||
"PO-Revision-Date: 2011-11-28 12:07+0000\n"
|
||||
"Last-Translator: Goran Kliska <gkliska@gmail.com>\n"
|
||||
"Language-Team: Croatian <hr@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: 2011-11-29 05:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14399)\n"
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "Reset"
|
||||
msgstr "Vrati izvorno"
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "Undo"
|
||||
msgstr "Vrati"
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "Add Widget"
|
||||
msgstr "Dodaj widget"
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "Change layout"
|
||||
msgstr "Promijeni raspored"
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "Choose dashboard layout"
|
||||
msgstr "Odaberi raspored"
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "progress:"
|
||||
msgstr "napredak:"
|
||||
|
||||
#: addons/web_dashboard/static/src/xml/web_dashboard.xml:0
|
||||
msgid "%"
|
||||
msgstr "%"
|
||||
@@ -169,6 +169,11 @@
|
||||
text-transform: uppercase;
|
||||
margin: 0 0 0.5em 0;
|
||||
}
|
||||
.openerp .oe-dashboard-config-overview .oe-config-tip {
|
||||
color: #222;
|
||||
text-shadow: #eee 0 1px 0;
|
||||
text-align: center;
|
||||
}
|
||||
.openerp .oe-dashboard-config-overview dt {
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
|
||||
|
After Width: | Height: | Size: 4.2 KiB |
@@ -26,7 +26,6 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({
|
||||
// Events
|
||||
this.$element.find('.oe-dashboard-link-undo').click(this.on_undo);
|
||||
this.$element.find('.oe-dashboard-link-reset').click(this.on_reset);
|
||||
this.$element.find('.oe-dashboard-link-add_widget').click(this.on_add_widget);
|
||||
this.$element.find('.oe-dashboard-link-change_layout').click(this.on_change_layout);
|
||||
|
||||
this.$element.delegate('.oe-dashboard-column .oe-dashboard-fold', 'click', this.on_fold_action);
|
||||
@@ -34,19 +33,19 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({
|
||||
|
||||
this.actions_attrs = {};
|
||||
// Init actions
|
||||
_.each(this.node.children, function(column) {
|
||||
_.each(column.children, function(action) {
|
||||
_.each(this.node.children, function(column, column_index) {
|
||||
_.each(column.children, function(action, action_index) {
|
||||
delete(action.attrs.width);
|
||||
delete(action.attrs.height);
|
||||
delete(action.attrs.colspan);
|
||||
self.actions_attrs[action.attrs.name] = action.attrs;
|
||||
self.rpc('/web/action/load', {
|
||||
action_id: parseInt(action.attrs.name, 10)
|
||||
}, self.on_load_action);
|
||||
}, function(result) {
|
||||
self.on_load_action(result, column_index + '_' + action_index);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
//this.$element.find('a.oe-dashboard-action-rename').live('click', this.on_rename);
|
||||
},
|
||||
on_undo: function() {
|
||||
this.rpc('/web/view/undo_custom', {
|
||||
@@ -59,85 +58,6 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({
|
||||
reset: true
|
||||
}, this.do_reload);
|
||||
},
|
||||
on_add_widget: function() {
|
||||
var self = this;
|
||||
var action_manager = new openerp.web.ActionManager(this);
|
||||
var dialog = new openerp.web.Dialog(this, {
|
||||
title : 'Actions',
|
||||
width: 800,
|
||||
height: 600,
|
||||
buttons : {
|
||||
Cancel : function() {
|
||||
$(this).dialog('destroy');
|
||||
},
|
||||
Add : function() {
|
||||
self.do_add_widget(action_manager.inner_viewmanager.views.list.controller);
|
||||
$(this).dialog('destroy');
|
||||
}
|
||||
}
|
||||
}).start().open();
|
||||
action_manager.appendTo(dialog.$element);
|
||||
action_manager.do_action({
|
||||
res_model : 'ir.actions.actions',
|
||||
views : [[false, 'list']],
|
||||
type : 'ir.actions.act_window',
|
||||
limit : 80,
|
||||
auto_search : true,
|
||||
flags : {
|
||||
sidebar : false,
|
||||
views_switcher : false,
|
||||
action_buttons : false
|
||||
}
|
||||
});
|
||||
// TODO: should bind ListView#select_record in order to catch record clicking
|
||||
},
|
||||
do_add_widget : function(listview) {
|
||||
var self = this,
|
||||
actions = listview.groups.get_selection().ids,
|
||||
results = [],
|
||||
qdict = { view : this.view };
|
||||
// TODO: should load multiple actions at once
|
||||
_.each(actions, function(aid) {
|
||||
self.rpc('/web/action/load', {
|
||||
action_id: aid
|
||||
}, function(result) {
|
||||
self.actions_attrs[aid] = {
|
||||
name: aid,
|
||||
string: _.str.trim(result.result.name)
|
||||
};
|
||||
qdict.action = {
|
||||
attrs : self.actions_attrs[aid]
|
||||
};
|
||||
self.$element.find('.oe-dashboard-column:first').prepend(QWeb.render('DashBoard.action', qdict));
|
||||
self.do_save_dashboard();
|
||||
self.on_load_action(result)
|
||||
});
|
||||
});
|
||||
},
|
||||
on_rename : function(e) {
|
||||
var self = this,
|
||||
id = parseInt($(e.currentTarget).parents('.oe-dashboard-action:first').attr('data-id'), 10),
|
||||
$header = $(e.currentTarget).parents('.oe-dashboard-action-header:first'),
|
||||
$rename = $header.find('a.oe-dashboard-action-rename').hide(),
|
||||
$title = $header.find('span.oe-dashboard-action-title').hide(),
|
||||
$input = $header.find('input[name=title]');
|
||||
$input.val($title.text()).show().focus().bind('keydown', function(e) {
|
||||
if (e.which == 13 || e.which == 27) {
|
||||
if (e.which == 13) { //enter
|
||||
var val = $input.val();
|
||||
if (!val) {
|
||||
return false;
|
||||
}
|
||||
$title.text(val);
|
||||
self.actions_attrs[id].string = val;
|
||||
self.do_save_dashboard();
|
||||
}
|
||||
$input.unbind('keydown').hide();
|
||||
$rename.show();
|
||||
$title.show();
|
||||
}
|
||||
});
|
||||
},
|
||||
on_change_layout: function() {
|
||||
var self = this;
|
||||
var qdict = {
|
||||
@@ -191,8 +111,10 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({
|
||||
this.do_save_dashboard();
|
||||
},
|
||||
on_close_action: function(e) {
|
||||
$(e.currentTarget).parents('.oe-dashboard-action:first').remove();
|
||||
this.do_save_dashboard();
|
||||
if (confirm("Are you sure you want to remove this item ?")) {
|
||||
$(e.currentTarget).parents('.oe-dashboard-action:first').remove();
|
||||
this.do_save_dashboard();
|
||||
}
|
||||
},
|
||||
do_save_dashboard: function() {
|
||||
var self = this;
|
||||
@@ -204,8 +126,17 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({
|
||||
this.$element.find('.oe-dashboard-column').each(function() {
|
||||
var actions = [];
|
||||
$(this).find('.oe-dashboard-action').each(function() {
|
||||
var action_id = $(this).attr('data-id');
|
||||
actions.push(self.actions_attrs[action_id]);
|
||||
var action_id = $(this).attr('data-id'),
|
||||
new_attrs = _.clone(self.actions_attrs[action_id]);
|
||||
if (new_attrs.domain) {
|
||||
new_attrs.domain = new_attrs.domain_string;
|
||||
delete(new_attrs.domain_string);
|
||||
}
|
||||
if (new_attrs.context) {
|
||||
new_attrs.context = new_attrs.context_string;
|
||||
delete(new_attrs.context_string);
|
||||
}
|
||||
actions.push(new_attrs);
|
||||
});
|
||||
board.columns.push(actions);
|
||||
});
|
||||
@@ -217,7 +148,7 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({
|
||||
self.$element.find('.oe-dashboard-link-undo, .oe-dashboard-link-reset').show();
|
||||
});
|
||||
},
|
||||
on_load_action: function(result) {
|
||||
on_load_action: function(result, index) {
|
||||
var self = this,
|
||||
action = result.result,
|
||||
action_attrs = this.actions_attrs[action.id],
|
||||
@@ -261,13 +192,22 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({
|
||||
};
|
||||
var am = new openerp.web.ActionManager(this);
|
||||
this.action_managers.push(am);
|
||||
am.appendTo($("#"+this.view.element_id + '_action_' + action.id));
|
||||
am.appendTo($('#' + this.view.element_id + '_action_' + index));
|
||||
am.do_action(action);
|
||||
am.do_action = function(action) {
|
||||
self.do_action(action);
|
||||
}
|
||||
if (am.inner_viewmanager) {
|
||||
am.inner_viewmanager.on_mode_switch.add(function(mode) {
|
||||
var new_views = [];
|
||||
_.each(action_orig.views, function(view) {
|
||||
new_views[view[1] === mode ? 'unshift' : 'push'](view);
|
||||
});
|
||||
if (!new_views.length || new_views[0][1] !== mode) {
|
||||
new_views.unshift([false, mode]);
|
||||
}
|
||||
action_orig.views = new_views;
|
||||
action_orig.res_id = am.inner_viewmanager.dataset.ids[am.inner_viewmanager.dataset.index];
|
||||
self.do_action(action_orig);
|
||||
});
|
||||
}
|
||||
@@ -512,10 +452,13 @@ openerp.web_dashboard.ApplicationTiles = openerp.web.View.extend({
|
||||
run_configuration_wizards: function () {
|
||||
var self = this;
|
||||
new openerp.web.DataSet(this, 'res.config').call('start', [[]], function (action) {
|
||||
$.unblockUI();
|
||||
self.widget_parent.widget_parent.do_action(action, function () {
|
||||
openerp.webclient.do_reload();
|
||||
});
|
||||
self.$element.empty();
|
||||
self.do_display_root_menu().then(function () {
|
||||
$.unblockUI();
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -9,10 +9,6 @@
|
||||
<img src="/web/static/src/img/icons/gtk-undo.png" width="16" height="16"/>
|
||||
<span>Undo</span>
|
||||
</button>
|
||||
<button type="button" class="button oe-dashboard-link-add_widget">
|
||||
<img src="/web/static/src/img/icons/STOCK_ADD.png" width="16" height="16"/>
|
||||
<span>Add Widget</span>
|
||||
</button>
|
||||
<button type="button" class="button oe-dashboard-link-change_layout">
|
||||
<img src="/web/static/src/img/icons/gtk-edit.png" width="16" height="16"/>
|
||||
<span>Change layout</span>
|
||||
@@ -31,14 +27,13 @@
|
||||
<t t-name="DashBoard.action">
|
||||
<div t-att-data-id="action.attrs.name" class="oe-dashboard-action">
|
||||
<h2 t-attf-class="oe-dashboard-action-header #{action.attrs.string ? '' : 'oe-dashboard-action-header-empty'}">
|
||||
<input class="oe-dashboard-action-input" type="text" name="title" value="" style="display: none"/>
|
||||
<t t-esc="action.attrs.string"/>
|
||||
<t t-if="!action.attrs.string">&nbsp;</t>
|
||||
<span class='ui-icon ui-icon-closethick'></span>
|
||||
<span class='ui-icon ui-icon-minusthick oe-dashboard-fold' t-if="!action.attrs.fold"></span>
|
||||
<span class='ui-icon ui-icon-plusthick oe-dashboard-fold' t-if="action.attrs.fold"></span>
|
||||
</h2>
|
||||
<div t-att-id="view.element_id + '_action_' + action.attrs.name" class="oe-dashboard-action-content" t-att-style="action.attrs.fold ? 'display: none' : null"></div>
|
||||
<div t-attf-id="#{view.element_id}_action_#{column_index}_#{action_index}" class="oe-dashboard-action-content" t-att-style="action.attrs.fold ? 'display: none' : null"></div>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="DashBoard.layouts">
|
||||
@@ -72,6 +67,7 @@
|
||||
</h6>
|
||||
<div class="oe-config-progress-bar" t-att-data-completion="completion"/>
|
||||
</div>
|
||||
<p class="oe-config-tip">Click on the functionalites listed below to launch them and configure your system</p>
|
||||
<dl>
|
||||
<t t-foreach="groups" t-as="category">
|
||||
<dt><t t-esc="category"/></dt>
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
# Croatian translation for openerp-web
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openerp-web package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-10-07 10:39+0200\n"
|
||||
"PO-Revision-Date: 2011-11-28 12:10+0000\n"
|
||||
"Last-Translator: Goran Kliska <gkliska@gmail.com>\n"
|
||||
"Language-Team: Croatian <hr@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: 2011-11-29 05:49+0000\n"
|
||||
"X-Generator: Launchpad (build 14399)\n"
|
||||
|
||||
#: addons/web_default_home/static/src/xml/web_default_home.xml:0
|
||||
msgid "Welcome to your new OpenERP instance."
|
||||
msgstr "Dobrodošli u Vašu novu OpenERP instancu"
|
||||
|
||||
#: addons/web_default_home/static/src/xml/web_default_home.xml:0
|
||||
msgid "Remember to bookmark this page."
|
||||
msgstr "Zabilježite ovu stranicu."
|
||||
|
||||
#: addons/web_default_home/static/src/xml/web_default_home.xml:0
|
||||
msgid "Remember your login:"
|
||||
msgstr "Vaše korisničko ime:"
|
||||
|
||||
#: addons/web_default_home/static/src/xml/web_default_home.xml:0
|
||||
msgid "Choose the first OpenERP Application you want to install.."
|
||||
msgstr "Instalirajte prvu OpenERP aplikaciju."
|
||||
|
||||
#: addons/web_default_home/static/src/xml/web_default_home.xml:0
|
||||
msgid "Install"
|
||||
msgstr "Instaliraj"
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name" : "OpenERP Web Diagram",
|
||||
"category" : "Hidden",
|
||||
"description":'Openerp web Diagram view',
|
||||
"version" : "2.0",
|
||||
"depends" : ["base"],
|
||||
"js": [
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
# Bengali translation for openerp-web
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openerp-web package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-10-07 10:39+0200\n"
|
||||
"PO-Revision-Date: 2011-11-24 12:54+0000\n"
|
||||
"Last-Translator: nasir khan saikat <nasir8891@gmail.com>\n"
|
||||
"Language-Team: Bengali <bn@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: 2011-11-25 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 14376)\n"
|
||||
|
||||
#: addons/web_diagram/static/src/xml/base_diagram.xml:0
|
||||
msgid "New Node"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_diagram/static/src/xml/base_diagram.xml:0
|
||||
msgid "New Edge"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_diagram/static/src/xml/base_diagram.xml:0
|
||||
msgid "Show Grid:"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_diagram/static/src/xml/base_diagram.xml:0
|
||||
msgid "First"
|
||||
msgstr "প্রথম"
|
||||
|
||||
#: addons/web_diagram/static/src/xml/base_diagram.xml:0
|
||||
msgid "<<"
|
||||
msgstr "<<"
|
||||
|
||||
#: addons/web_diagram/static/src/xml/base_diagram.xml:0
|
||||
msgid "0"
|
||||
msgstr "0"
|
||||
|
||||
#: addons/web_diagram/static/src/xml/base_diagram.xml:0
|
||||
msgid "/"
|
||||
msgstr "/"
|
||||
|
||||
#: addons/web_diagram/static/src/xml/base_diagram.xml:0
|
||||
msgid ">>"
|
||||
msgstr ">>"
|
||||
|
||||
#: addons/web_diagram/static/src/xml/base_diagram.xml:0
|
||||
msgid "Last"
|
||||
msgstr "শেষ"
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"name": "web Gantt",
|
||||
"category" : "Hidden",
|
||||
"category": "Hidden",
|
||||
"description":
|
||||
"""
|
||||
OpenERP Web gantt chart view.
|
||||
""",
|
||||
"version": "2.0",
|
||||
"depends": ['web'],
|
||||
"js": [
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
{
|
||||
"name": "web Graph",
|
||||
"category" : "Hidden",
|
||||
"description":'Openerp web graph view',
|
||||
"version": "2.0",
|
||||
"depends": ['web'],
|
||||
"js": [
|
||||
|
||||
@@ -187,7 +187,6 @@ openerp.web_graph.GraphView = openerp.web.View.extend({
|
||||
|
||||
schedule_bar: function(results) {
|
||||
var self = this;
|
||||
|
||||
var group_list, view_chart;
|
||||
if (!this.group_field) {
|
||||
view_chart = (this.orientation === 'horizontal') ? 'barH' : 'bar';
|
||||
@@ -220,7 +219,7 @@ openerp.web_graph.GraphView = openerp.web.View.extend({
|
||||
.map(function (value, index) {
|
||||
return {
|
||||
group: self.ordinate + '_' +
|
||||
value.toLowerCase().replace(/\s/g, '_'),
|
||||
value.toLowerCase().replace(/[\s\/]+/g,'_'),
|
||||
text: value,
|
||||
color: COLOR_PALETTE[index % COLOR_PALETTE.length]
|
||||
};
|
||||
@@ -235,21 +234,19 @@ openerp.web_graph.GraphView = openerp.web.View.extend({
|
||||
_(records).each(function (record) {
|
||||
var key = _.str.sprintf('%s_%s',
|
||||
self.ordinate,
|
||||
record[self.group_field].toLowerCase().replace(/\s/g, '_'));
|
||||
record[self.group_field].toLowerCase().replace(/[\s\/]+/g,'_'));
|
||||
r[key] = record[self.ordinate];
|
||||
});
|
||||
return r;
|
||||
})
|
||||
.value();
|
||||
}
|
||||
|
||||
var abscissa_description = {
|
||||
title: "<b>" + this.fields[this.abscissa].string + "</b>",
|
||||
template: function (obj) {
|
||||
return obj[self.abscissa] || 'Undefined';
|
||||
}
|
||||
};
|
||||
|
||||
var ordinate_description = {
|
||||
lines: true,
|
||||
title: "<b>" + this.fields[this.ordinate].string + "</b>"
|
||||
@@ -263,7 +260,6 @@ openerp.web_graph.GraphView = openerp.web.View.extend({
|
||||
x_axis = abscissa_description;
|
||||
y_axis = ordinate_description;
|
||||
}
|
||||
|
||||
var renderer = function () {
|
||||
if (self.$element.is(':hidden')) {
|
||||
self.renderer = setTimeout(renderer, 100);
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"name": "Hello",
|
||||
"category" : "Hidden",
|
||||
"category": "Hidden",
|
||||
"description":
|
||||
"""
|
||||
OpenERP Web example module.
|
||||
""",
|
||||
"version": "2.0",
|
||||
"depends": [],
|
||||
"js": ["static/*/*.js", "static/*/js/*.js"],
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"name" : "Base Kanban",
|
||||
"category" : "Hidden",
|
||||
"category": "Hidden",
|
||||
"description":
|
||||
"""
|
||||
OpenERP Web kanban view.
|
||||
""",
|
||||
"version" : "2.0",
|
||||
"depends" : ["web"],
|
||||
"js": [
|
||||
|
||||
@@ -34,7 +34,6 @@
|
||||
transform: rotate(90deg);
|
||||
width: 30px;
|
||||
height: 20px;
|
||||
align: center;
|
||||
font-size: 24px;
|
||||
white-space: nowrap;
|
||||
display: none;
|
||||
@@ -78,6 +77,8 @@
|
||||
background: #FFF;
|
||||
border: 2px solid #CCC;
|
||||
border-radius: 4px;
|
||||
-moz-border-radius: 4px;
|
||||
-webkit-border-radius: 4px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.openerp .oe_kanban_box_header {
|
||||
@@ -96,7 +97,7 @@
|
||||
}
|
||||
.openerp .oe_kanban_title3 {
|
||||
font-size: 100%;
|
||||
font-weight: normal;
|
||||
font-weight: bold;
|
||||
padding: 0 4px 0 4px;
|
||||
}
|
||||
.openerp .oe_kanban_small {
|
||||
@@ -110,13 +111,34 @@
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.openerp .oe_kanban_table tr td {
|
||||
padding: 0;
|
||||
}
|
||||
.openerp .oe_kanban_table tr td.oe_kanban_title3 {
|
||||
padding: 2px;
|
||||
}
|
||||
.openerp .oe_kanban_gravatar {
|
||||
display: block;
|
||||
border-radius: 2px;
|
||||
}
|
||||
.openerp .oe_kanban_box_content {
|
||||
padding: 4px;
|
||||
}
|
||||
.openerp .oe_kanban_button {
|
||||
border: 1px solid #8ec1da;
|
||||
background-color: #ddeef6;
|
||||
border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
color: #000000;
|
||||
text-shadow: 0 1px #fff;
|
||||
padding: 0 4px;
|
||||
font-size: 85%;
|
||||
margin: 1px;
|
||||
}
|
||||
.openerp a.oe_kanban_button:hover,
|
||||
.openerp button.oe_kanban_button:hover {
|
||||
background-color: #eeddf6;
|
||||
}
|
||||
.openerp .oe_kanban_buttons_set {
|
||||
border-top: 1px dotted;
|
||||
white-space: nowrap;
|
||||
@@ -141,10 +163,19 @@
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
border: 1px solid black;
|
||||
text-align: center;
|
||||
text-decoration: none;
|
||||
}
|
||||
.oe_kanban_color_picker a:hover {
|
||||
border-color: white;
|
||||
}
|
||||
.oe_kanban_color_picker span {
|
||||
border: none;
|
||||
font-size: 120%;
|
||||
font-weight: bold;
|
||||
color: black;
|
||||
line-height: 30px;
|
||||
}
|
||||
.openerp .oe_kanban_left {
|
||||
float: left;
|
||||
}
|
||||
@@ -166,6 +197,12 @@
|
||||
.openerp .oe_kanban_color_border {
|
||||
border-color: #CCCCCC;
|
||||
}
|
||||
.openerp .oe_kanban_tooltip ul,
|
||||
.openerp ul.oe_kanban_tooltip {
|
||||
padding: 0 0 4px 0;
|
||||
margin: 5px 0 0 15px;
|
||||
list-style: circle;
|
||||
}
|
||||
|
||||
/* Custom colors are also present in kanban.js */
|
||||
/* Custom color#0 */
|
||||
@@ -178,6 +215,18 @@
|
||||
.openerp .oe_kanban_color_0 .oe_kanban_color_border {
|
||||
border-color: #CCCCCC;
|
||||
}
|
||||
.openerp .oe_kanban_color_0 .oe_kanban_button {
|
||||
background-color: #EEEEEE;
|
||||
border-color: #CCCCCC;
|
||||
text-shadow: 0 1px #FFFFFF;
|
||||
}
|
||||
.openerp .oe_kanban_color_0 .oe_kanban_button_active,
|
||||
.openerp .oe_kanban_color_0 a.oe_kanban_button:hover,
|
||||
.openerp .oe_kanban_color_0 button.oe_kanban_button:hover {
|
||||
background-color: #999999;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px #000;
|
||||
}
|
||||
|
||||
/* Custom color#1 */
|
||||
.openerp .oe_kanban_color_1 .oe_kanban_color_bglight {
|
||||
@@ -189,6 +238,18 @@
|
||||
.openerp .oe_kanban_color_1 .oe_kanban_color_border {
|
||||
border-color: #666666;
|
||||
}
|
||||
.openerp .oe_kanban_color_1 .oe_kanban_button {
|
||||
background-color: #999999;
|
||||
border-color: #666666;
|
||||
text-shadow: 0 1px #CCCCCC;
|
||||
}
|
||||
.openerp .oe_kanban_color_1 .oe_kanban_button_active,
|
||||
.openerp .oe_kanban_color_1 a.oe_kanban_button:hover,
|
||||
.openerp .oe_kanban_color_1 button.oe_kanban_button:hover {
|
||||
background-color: #666666;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px #000;
|
||||
}
|
||||
|
||||
/* Custom color#2 */
|
||||
.openerp .oe_kanban_color_2 .oe_kanban_color_bglight {
|
||||
@@ -200,6 +261,18 @@
|
||||
.openerp .oe_kanban_color_2 .oe_kanban_color_border {
|
||||
border-color: #D97979;
|
||||
}
|
||||
.openerp .oe_kanban_color_2 .oe_kanban_button {
|
||||
background-color: #FF8F8F;
|
||||
border-color: #D97979;
|
||||
text-shadow: 0 1px #FFC7C7;
|
||||
}
|
||||
.openerp .oe_kanban_color_2 .oe_kanban_button_active,
|
||||
.openerp .oe_kanban_color_2 a.oe_kanban_button:hover,
|
||||
.openerp .oe_kanban_color_2 button.oe_kanban_button:hover {
|
||||
background-color: #CC5C5C;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px #000;
|
||||
}
|
||||
|
||||
/* Custom color#3 */
|
||||
.openerp .oe_kanban_color_3 .oe_kanban_color_bglight {
|
||||
@@ -211,6 +284,18 @@
|
||||
.openerp .oe_kanban_color_3 .oe_kanban_color_border {
|
||||
border-color: #D9C179;
|
||||
}
|
||||
.openerp .oe_kanban_color_3 .oe_kanban_button {
|
||||
background-color: #FFE38F;
|
||||
border-color: #D9C179;
|
||||
text-shadow: 0 1px #FFF1C7;
|
||||
}
|
||||
.openerp .oe_kanban_color_3 .oe_kanban_button_active,
|
||||
.openerp .oe_kanban_color_3 a.oe_kanban_button:hover,
|
||||
.openerp .oe_kanban_color_3 button.oe_kanban_button:hover {
|
||||
background-color: #CCB05C;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px #000;
|
||||
}
|
||||
|
||||
/* Custom color#4 */
|
||||
.openerp .oe_kanban_color_4 .oe_kanban_color_bglight {
|
||||
@@ -222,6 +307,18 @@
|
||||
.openerp .oe_kanban_color_4 .oe_kanban_color_border {
|
||||
border-color: #A9D979;
|
||||
}
|
||||
.openerp .oe_kanban_color_4 .oe_kanban_button {
|
||||
background-color: #C7FF8F;
|
||||
border-color: #A9D979;
|
||||
text-shadow: 0 1px #E3FFC7;
|
||||
}
|
||||
.openerp .oe_kanban_color_4 .oe_kanban_button_active,
|
||||
.openerp .oe_kanban_color_4 a.oe_kanban_button:hover,
|
||||
.openerp .oe_kanban_color_4 button.oe_kanban_button:hover {
|
||||
background-color: #94CC5C;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px #000;
|
||||
}
|
||||
|
||||
/* Custom color#5 */
|
||||
.openerp .oe_kanban_color_5 .oe_kanban_color_bglight {
|
||||
@@ -233,6 +330,18 @@
|
||||
.openerp .oe_kanban_color_5 .oe_kanban_color_border {
|
||||
border-color: #79D991;
|
||||
}
|
||||
.openerp .oe_kanban_color_5 .oe_kanban_button {
|
||||
background-color: #8FFFAB;
|
||||
border-color: #79D991;
|
||||
text-shadow: 0 1px #C7FFD5;
|
||||
}
|
||||
.openerp .oe_kanban_color_5 .oe_kanban_button_active,
|
||||
.openerp .oe_kanban_color_5 a.oe_kanban_button:hover,
|
||||
.openerp .oe_kanban_color_5 button.oe_kanban_button:hover {
|
||||
background-color: #5CCC78;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px #000;
|
||||
}
|
||||
|
||||
/* Custom color#6 */
|
||||
.openerp .oe_kanban_color_6 .oe_kanban_color_bglight {
|
||||
@@ -244,6 +353,18 @@
|
||||
.openerp .oe_kanban_color_6 .oe_kanban_color_border {
|
||||
border-color: #79D9D9;
|
||||
}
|
||||
.openerp .oe_kanban_color_6 .oe_kanban_button {
|
||||
background-color: #8FFFFF;
|
||||
border-color: #79D9D9;
|
||||
text-shadow: 0 1px #C7FFFF;
|
||||
}
|
||||
.openerp .oe_kanban_color_6 .oe_kanban_button_active,
|
||||
.openerp .oe_kanban_color_6 a.oe_kanban_button:hover,
|
||||
.openerp .oe_kanban_color_6 button.oe_kanban_button:hover {
|
||||
background-color: #5CCCCC;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px #000;
|
||||
}
|
||||
|
||||
/* Custom color#7 */
|
||||
.openerp .oe_kanban_color_7 .oe_kanban_color_bglight {
|
||||
@@ -255,6 +376,18 @@
|
||||
.openerp .oe_kanban_color_7 .oe_kanban_color_border {
|
||||
border-color: #8FABFF;
|
||||
}
|
||||
.openerp .oe_kanban_color_7 .oe_kanban_button {
|
||||
background-color: #8FABFF;
|
||||
border-color: #7995E9;
|
||||
text-shadow: 0 1px #C7D5FF;
|
||||
}
|
||||
.openerp .oe_kanban_color_7 .oe_kanban_button_active,
|
||||
.openerp .oe_kanban_color_7 a.oe_kanban_button:hover,
|
||||
.openerp .oe_kanban_color_7 button.oe_kanban_button:hover {
|
||||
background-color: #5C78CC;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px #000;
|
||||
}
|
||||
|
||||
/* Custom color#8 */
|
||||
.openerp .oe_kanban_color_8 .oe_kanban_color_bglight {
|
||||
@@ -266,6 +399,18 @@
|
||||
.openerp .oe_kanban_color_8 .oe_kanban_color_border {
|
||||
border-color: #A979D9;
|
||||
}
|
||||
.openerp .oe_kanban_color_8 .oe_kanban_button {
|
||||
background-color: #C78FFF;
|
||||
border-color: #A979D9;
|
||||
text-shadow: 0 1px #E3C7FF;
|
||||
}
|
||||
.openerp .oe_kanban_color_8 .oe_kanban_button_active,
|
||||
.openerp .oe_kanban_color_8 a.oe_kanban_button:hover,
|
||||
.openerp .oe_kanban_color_8 button.oe_kanban_button:hover {
|
||||
background-color: #945CCC;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px #000;
|
||||
}
|
||||
|
||||
/* Custom color#9 */
|
||||
.openerp .oe_kanban_color_9 .oe_kanban_color_bglight {
|
||||
@@ -277,6 +422,18 @@
|
||||
.openerp .oe_kanban_color_9 .oe_kanban_color_border {
|
||||
border-color: #D979C1;
|
||||
}
|
||||
.openerp .oe_kanban_color_9 .oe_kanban_button {
|
||||
background-color: #FF8FE3;
|
||||
border-color: #D979C1;
|
||||
text-shadow: 0 1px #FFC7F1;
|
||||
}
|
||||
.openerp .oe_kanban_color_9 .oe_kanban_button_active,
|
||||
.openerp .oe_kanban_color_9 a.oe_kanban_button:hover,
|
||||
.openerp .oe_kanban_color_9 button.oe_kanban_button:hover {
|
||||
background-color: #CC5CB0;
|
||||
color: #fff;
|
||||
text-shadow: 0 1px #000;
|
||||
}
|
||||
|
||||
/* Red border */
|
||||
.openerp .oe_kanban_color_alert .oe_kanban_color_border,
|
||||
|
||||
@@ -26,10 +26,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
|
||||
this.group_operators = ['avg', 'max', 'min', 'sum', 'count'];
|
||||
this.qweb = new QWeb2.Engine();
|
||||
this.qweb.debug = openerp.connection.debug;
|
||||
this.qweb.default_dict = {
|
||||
'_' : _,
|
||||
'_t' : _t
|
||||
}
|
||||
this.qweb.default_dict = _.clone(QWeb.default_dict);
|
||||
this.has_been_loaded = $.Deferred();
|
||||
this.search_domain = this.search_context = this.search_group_by = null;
|
||||
this.currently_dragging = {};
|
||||
@@ -240,6 +237,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
|
||||
}
|
||||
},
|
||||
on_record_moved : function(record, old_group, old_index, new_group, new_index) {
|
||||
var self = this;
|
||||
if (old_group === new_group) {
|
||||
new_group.records.splice(old_index, 1);
|
||||
new_group.records.splice(new_index, 0, record);
|
||||
@@ -253,6 +251,10 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
|
||||
this.dataset.write(record.id, data, {}, function() {
|
||||
record.do_reload();
|
||||
new_group.do_save_sequences();
|
||||
}).fail(function(error, evt) {
|
||||
evt.preventDefault();
|
||||
alert("An error has occured while moving the record to this group.");
|
||||
self.do_reload(); // TODO: use draggable + sortable in order to cancel the dragging when the rcp fails
|
||||
});
|
||||
}
|
||||
},
|
||||
@@ -385,17 +387,17 @@ openerp.web_kanban.KanbanRecord = openerp.web.Widget.extend({
|
||||
return new_record;
|
||||
},
|
||||
render: function() {
|
||||
var ctx = {
|
||||
this.qweb_context = {
|
||||
record: this.record,
|
||||
widget: this
|
||||
}
|
||||
for (var p in this) {
|
||||
if (_.str.startsWith(p, 'kanban_')) {
|
||||
ctx[p] = _.bind(this[p], this);
|
||||
this.qweb_context[p] = _.bind(this[p], this);
|
||||
}
|
||||
}
|
||||
return this._super({
|
||||
'content': this.view.qweb.render('kanban-box', ctx)
|
||||
'content': this.view.qweb.render('kanban-box', this.qweb_context)
|
||||
});
|
||||
},
|
||||
bind_events: function() {
|
||||
@@ -406,10 +408,23 @@ openerp.web_kanban.KanbanRecord = openerp.web.Widget.extend({
|
||||
$show_on_click.toggle();
|
||||
self.state.folded = !self.state.folded;
|
||||
});
|
||||
|
||||
this.$element.find('[tooltip]').tipTip({
|
||||
maxWidth: 500,
|
||||
defaultPosition: 'top',
|
||||
content: function() {
|
||||
var template = $(this).attr('tooltip');
|
||||
if (!self.view.qweb.has_template(template)) {
|
||||
return false;
|
||||
}
|
||||
return self.view.qweb.render(template, self.qweb_context);
|
||||
}
|
||||
});
|
||||
|
||||
this.$element.find('.oe_kanban_action').click(function() {
|
||||
var $action = $(this),
|
||||
type = $action.data('type') || 'button',
|
||||
method = 'do_action_' + type;
|
||||
method = 'do_action_' + (type === 'action' ? 'object' : type);
|
||||
if (typeof self[method] === 'function') {
|
||||
self[method]($action);
|
||||
} else {
|
||||
|
||||
@@ -15,20 +15,22 @@
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="KanbanView.group_header">
|
||||
<td class="oe_kanban_group_header">
|
||||
<td>
|
||||
<t t-if="widget.view.group_by">
|
||||
<div class="oe_kanban_fold_icon"></div>
|
||||
<div class="oe_fold_column">
|
||||
<div t-attf-class="oe_kanban_group_title #{widget.undefined_title ? 'oe_kanban_group_title_undefined' : ''}">
|
||||
<t t-esc="widget.title"/>
|
||||
<div class="oe_kanban_group_header">
|
||||
<div class="oe_kanban_fold_icon"></div>
|
||||
<div class="oe_fold_column">
|
||||
<div t-attf-class="oe_kanban_group_title #{widget.undefined_title ? 'oe_kanban_group_title_undefined' : ''}">
|
||||
<t t-esc="widget.title"/>
|
||||
</div>
|
||||
<ul class="oe_kanban_aggregates">
|
||||
<li t-foreach="widget.aggregates" t-as="aggregate">
|
||||
<span><t t-esc="aggregate"/>:</span> <t t-esc="aggregate_value"/>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<ul class="oe_kanban_aggregates">
|
||||
<li t-foreach="widget.aggregates" t-as="aggregate">
|
||||
<span><t t-esc="aggregate"/>:</span> <t t-esc="aggregate_value"/>
|
||||
</li>
|
||||
</ul>
|
||||
<p t-if="widget.title" class="oe_kanban_group_title_vertical"><t t-esc="widget.title"/></p>
|
||||
</div>
|
||||
<p t-if="widget.title" class="oe_kanban_group_title_vertical"><t t-esc="widget.title"/></p>
|
||||
</t>
|
||||
</td>
|
||||
</t>
|
||||
@@ -46,7 +48,9 @@
|
||||
<tr>
|
||||
<t t-foreach="colors" t-as="color">
|
||||
<td t-att-bgcolor="color">
|
||||
<a href="#" t-att-data-color="color_index"/>
|
||||
<a href="#" t-att-data-color="color_index">
|
||||
<span t-if="__debug__"><t t-esc="color_index"/></span>
|
||||
</a>
|
||||
</td>
|
||||
<t t-if="((color_index + 1) % Math.round(colors.length / columns)) == 0"></tr><tr></t>
|
||||
</t>
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"name" : "OpenERP Web mobile",
|
||||
"category" : "Hidden",
|
||||
"category": "Hidden",
|
||||
"description":
|
||||
"""
|
||||
OpenERP Web mobile.
|
||||
""",
|
||||
"version" : "2.0",
|
||||
"depends" : [],
|
||||
'active': True,
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
# Bengali translation for openerp-web
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openerp-web package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-10-07 10:39+0200\n"
|
||||
"PO-Revision-Date: 2011-11-24 12:56+0000\n"
|
||||
"Last-Translator: nasir khan saikat <nasir8891@gmail.com>\n"
|
||||
"Language-Team: Bengali <bn@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: 2011-11-25 05:35+0000\n"
|
||||
"X-Generator: Launchpad (build 14376)\n"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "OpenERP"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Database:"
|
||||
msgstr "ডেটাবেস:"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Login:"
|
||||
msgstr "লগইন:"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Password:"
|
||||
msgstr "পাসওয়ার্ড:"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Login"
|
||||
msgstr "লগইন"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Bad username or password"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Favourite"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Preference"
|
||||
msgstr "পছন্দসমূহ"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Applications"
|
||||
msgstr "অ্যাপ্লিকেশন"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Options"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Logout"
|
||||
msgstr "লগআউট"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid ":"
|
||||
msgstr ":"
|
||||
@@ -0,0 +1,66 @@
|
||||
# Portuguese translation for openerp-web
|
||||
# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011
|
||||
# This file is distributed under the same license as the openerp-web package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: openerp-web\n"
|
||||
"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"POT-Creation-Date: 2011-10-07 10:39+0200\n"
|
||||
"PO-Revision-Date: 2011-11-21 22:23+0000\n"
|
||||
"Last-Translator: Daniel Reis <Unknown>\n"
|
||||
"Language-Team: Portuguese <pt@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: 2011-11-22 05:13+0000\n"
|
||||
"X-Generator: Launchpad (build 14299)\n"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "OpenERP"
|
||||
msgstr "OpenERP"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Database:"
|
||||
msgstr "Base de dados:"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Login:"
|
||||
msgstr "Utilizador (login):"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Password:"
|
||||
msgstr "Senha:"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Bad username or password"
|
||||
msgstr "Nome de utilizador ou senha incorrectos"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Favourite"
|
||||
msgstr "Favorito"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Preference"
|
||||
msgstr "Preferência"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Applications"
|
||||
msgstr "Aplicações"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Options"
|
||||
msgstr "Opções"
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid "Logout"
|
||||
msgstr ""
|
||||
|
||||
#: addons/web_mobile/static/src/xml/web_mobile.xml:0
|
||||
msgid ":"
|
||||
msgstr ""
|
||||
@@ -3,24 +3,24 @@
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>OpenERP Web Mobile</title>
|
||||
|
||||
<link rel="stylesheet" href="/web_mobile/static/lib/jquery_mobile/css/jquery-ui-1.8.9.custom.css"/>
|
||||
|
||||
<link rel="stylesheet" href="/web_mobile/static/lib/jquery_mobile/css/jquery-ui-1.8.9.custom.css"/>
|
||||
<link rel="stylesheet" href="/web_mobile/static/lib/jquery_mobile/css/jquery.mobile-1.0a4.1.css"/>
|
||||
<link rel="stylesheet" href="/web_mobile/static/src/css/web_mobile.css"/>
|
||||
|
||||
<script type="text/javascript" src="/web/static/lib/jquery/jquery-1.6.2.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/jquery/jquery-1.6.4.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/jquery.ui/js/jquery-ui-1.8.9.custom.min.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/jquery.ba-bbq/jquery.ba-bbq.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/underscore/underscore.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/underscore/underscore.string.js"></script>
|
||||
<script type="text/javascript" src="/web_mobile/static/lib/jquery_mobile/js/jquery.mobile-1.0a4.1.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/web/static/lib/datejs/globalization/en-US.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/datejs/core.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/datejs/extras.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/datejs/parser.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/datejs/sugarpak.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/datejs/time.js"></script>
|
||||
<script type="text/javascript" src="/web_mobile/static/lib/jquery_mobile/js/jquery.mobile-1.0a4.1.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/web/static/lib/datejs/globalization/en-US.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/datejs/core.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/datejs/extras.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/datejs/parser.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/datejs/sugarpak.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/datejs/time.js"></script>
|
||||
<script type="text/javascript" src="/web/static/lib/jquery.ui/js/jquery-ui-timepicker-addon.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/web/static/lib/qweb/qweb2.js"></script>
|
||||
@@ -28,7 +28,7 @@
|
||||
<script type="text/javascript" src="/web/static/src/js/core.js"></script>
|
||||
<script type="text/javascript" src="/web/static/src/js/chrome.js"></script>
|
||||
<script type="text/javascript" src="/web/static/src/js/data.js"></script>
|
||||
<script type="text/javascript" src="/web/static/src/js/formats.js"></script>
|
||||
<script type="text/javascript" src="/web/static/src/js/formats.js"></script>
|
||||
<script type="text/javascript" src="/web/static/src/js/dates.js"></script>
|
||||
|
||||
<script type="text/javascript" src="/web_mobile/static/src/js/web_mobile.js"></script>
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"name" : "Process",
|
||||
"version" : "2.0",
|
||||
"version": "2.0",
|
||||
"description":
|
||||
"""
|
||||
OpenERP Web process view.
|
||||
""",
|
||||
"depends" : ["web"],
|
||||
"js": [
|
||||
"static/src/js/process.js"
|
||||
@@ -9,7 +13,7 @@
|
||||
"static/src/css/process.css"
|
||||
],
|
||||
'qweb': [
|
||||
"static/src/xml/web_process.css"
|
||||
"static/src/xml/*.xml"
|
||||
],
|
||||
'active': True
|
||||
}
|
||||
|
||||
@@ -50,6 +50,16 @@ a.cta-a strong {
|
||||
display: table-cell;
|
||||
}
|
||||
|
||||
.oe-process-view {
|
||||
height: 20px;
|
||||
padding: 0;
|
||||
width: 24px;
|
||||
cursor: pointer;
|
||||
display: block;
|
||||
background: url(/web/static/src/img/icons/gtk-help.png) no-repeat bottom;
|
||||
float: left;
|
||||
}
|
||||
|
||||
.process-help-text {
|
||||
float: left;
|
||||
padding:5px 10px;
|
||||
|
||||
@@ -44,6 +44,7 @@ openerp.web_process = function (openerp) {
|
||||
if(self.process_id) {
|
||||
self.graph_get().done(function(res) {
|
||||
self.process_notes = res.notes;
|
||||
self.process_title = res.name;
|
||||
self.process_subflows = _.filter(res.nodes, function(x) {
|
||||
return x.subflow != false;
|
||||
});
|
||||
@@ -245,9 +246,10 @@ openerp.web_process = function (openerp) {
|
||||
transitions['active'] = src.active && !dst.gray;
|
||||
process_graph.addEdge(src['name'], dst['name'], {directed : true});
|
||||
});
|
||||
|
||||
var width = $(document).width();
|
||||
var height = $(document).height();
|
||||
var layouter = new Graph.Layout.Ordered(process_graph);
|
||||
var render_process_graph = new Graph.Renderer.Raphael('process_canvas', process_graph, $('#process_canvas').width(), $('#process_canvas').height());
|
||||
var render_process_graph = new Graph.Renderer.Raphael('process_canvas', process_graph, width, height);
|
||||
},
|
||||
jump_to_view: function(model, id) {
|
||||
var self = this;
|
||||
@@ -303,7 +305,7 @@ openerp.web_process = function (openerp) {
|
||||
pager: false
|
||||
}
|
||||
});
|
||||
},
|
||||
}
|
||||
});
|
||||
};
|
||||
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<t t-extend="ViewManager" t-name="ViewManagerAction">
|
||||
<t t-jquery=".oe-view-manager-header" t-operation="append">
|
||||
<img class="oe-process-view" src="/web/static/src/img/icons/gtk-help.png" title="ProcessView"/>
|
||||
<a class="oe-process-view" title="Process View" href="javascript: void(0)"></a>
|
||||
</t>
|
||||
</t>
|
||||
<t t-name="ProcessView">
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
{
|
||||
"name" : "OpenERP Web web",
|
||||
"category" : "Hidden",
|
||||
"description":'Openerp web web',
|
||||
"version" : "2.0",
|
||||
"depends" : [],
|
||||
"installable" : False,
|
||||
'active': False,
|
||||
'js' : [
|
||||
"../web/static/lib/datejs/date-en-US.js",
|
||||
"../web/static/lib/jquery/jquery-1.6.2.js",
|
||||
"../web/static/lib/jquery/jquery-1.6.4.js",
|
||||
"../web/static/lib/json/json2.js",
|
||||
"../web/static/lib/qweb/qweb2.js",
|
||||
"../web/static/lib/underscore/underscore.js",
|
||||
|
||||
@@ -1,6 +1,10 @@
|
||||
{
|
||||
"name": "Tests",
|
||||
"category" : "Hidden",
|
||||
"category": "Hidden",
|
||||
"description":
|
||||
"""
|
||||
OpenERP Web test suite.
|
||||
""",
|
||||
"version": "2.0",
|
||||
"depends": [],
|
||||
"js": ["static/src/js/*.js"],
|
||||
|
||||
@@ -292,7 +292,8 @@ to help you get started:
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
guides/client-action.rst
|
||||
guides/client-action
|
||||
guides/sidebar-protocol
|
||||
|
||||
Utility behaviors
|
||||
-----------------
|
||||
|
||||
@@ -0,0 +1,78 @@
|
||||
Adding a sidebar to a view
|
||||
==========================
|
||||
|
||||
Initialization
|
||||
--------------
|
||||
|
||||
Each view has the responsibility to create its sidebar (or not) if and only if
|
||||
the ``sidebar`` flag is set in its options.
|
||||
|
||||
In that case, it should use the ``sidebar_id`` value (from its options) to
|
||||
initialize the sidebar at the right position in the DOM:
|
||||
|
||||
.. code-block:: javascript
|
||||
|
||||
if (this.options.sidebar && this.options.sidebar_id) {
|
||||
this.sidebar = new openerp.web.Sidebar(this, this.options.sidebar_id);
|
||||
this.sidebar.start();
|
||||
}
|
||||
|
||||
Because the sidebar is an old-style widget, it must be started after being
|
||||
initialized.
|
||||
|
||||
Sidebar communication protocol
|
||||
------------------------------
|
||||
|
||||
In order to behave correctly, a sidebar needs informations from its parent
|
||||
view.
|
||||
|
||||
This information is extracted via a very basic protocol consisting of a
|
||||
property and two methods:
|
||||
|
||||
.. js:attribute:: dataset
|
||||
|
||||
the view's dataset, used to fetch the currently active model and provide it
|
||||
to remote action handlers as part of the basic context
|
||||
|
||||
.. js:function:: get_selected_ids()
|
||||
|
||||
Used to query the parent view for the set of currently available record
|
||||
identifiers. Used to setup the basic context's ``active_id`` and
|
||||
``active_ids`` keys.
|
||||
|
||||
.. warning::
|
||||
|
||||
:js:func:`get_selected_ids` must return at least one id
|
||||
|
||||
:returns: an array of at least one id
|
||||
:rtype: Array<Number>
|
||||
|
||||
.. js:function:: sidebar_context()
|
||||
|
||||
Queries the view for additional context data to provide to the sidebar.
|
||||
|
||||
:js:class:`~openerp.base.View` provides a default NOOP implementation,
|
||||
which simply resolves to an empty object.
|
||||
|
||||
:returns: a promise yielding an object on success, this object is mergeed
|
||||
into the sidebar's own context
|
||||
:rtype: $.Deferred<Object>
|
||||
|
||||
Programmatic folding and unfolding
|
||||
----------------------------------
|
||||
|
||||
The sidebar object starts folded. It provides three methods to handle its
|
||||
folding status:
|
||||
|
||||
.. js:function:: do_toggle
|
||||
|
||||
Toggles the status of the sidebar
|
||||
|
||||
.. js:function:: do_fold
|
||||
|
||||
Forces the sidebar closed if it's currently open
|
||||
|
||||
.. js:function:: do_unfold
|
||||
|
||||
Forces the sidebar open if it's currently closed
|
||||
|
||||