[MERGE] Merge from openerp-web.

bzr revid: jra@tinyerp.com-20111129062332-nt36fttsgf8movqd
This commit is contained in:
Jiten (OpenERP)
2011-11-29 11:53:32 +05:30
68 changed files with 7451 additions and 2570 deletions
+7 -2
View File
@@ -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",
+39 -1
View File
@@ -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',[])
+677
View File
@@ -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 "&laquo;"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "&raquo;"
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 "&nbsp;"
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 ""
+677
View File
@@ -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 "&laquo;"
msgstr ""
#: addons/web/static/src/xml/base.xml:0
msgid "&raquo;"
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 "&nbsp;"
msgstr "&nbsp;"
#: 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 ""
+688
View File
@@ -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 "&laquo;"
msgstr "&laquo;"
#: addons/web/static/src/xml/base.xml:0
msgid "&raquo;"
msgstr "&raquo;"
#: 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 "&nbsp;"
msgstr "&nbsp;"
#: 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;
}
File diff suppressed because it is too large Load Diff
+226
View File
@@ -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;
}
+1597
View File
File diff suppressed because it is too large Load Diff
+8
View File
@@ -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

+1 -1
View File
@@ -1114,7 +1114,7 @@ openerp.web.WebClient = openerp.web.Widget.extend(/** @lends openerp.web.WebClie
this.action_manager.do_action(action);
},
do_about: function() {
},
}
});
+32 -12
View File
@@ -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;
};
+15 -2
View File
@@ -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;
});;
});
}
});
+73 -18
View File
@@ -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.
File diff suppressed because it is too large Load Diff
+112 -66
View File
@@ -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);
+2 -2
View File
@@ -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) {
+36 -35
View File
@@ -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();
}
});
+97 -59
View File
@@ -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="&gt; :first" t-operation="before">
<td t-if="edited and !options.selectable" class="oe-listview-padding"/>
</t>
<t t-jquery="&gt; :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>
+74
View File
@@ -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]);
});
});
+4 -3
View File
@@ -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>
+8 -3
View File
@@ -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",
+22
View File
@@ -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 "&nbsp;"
msgstr "&nbsp;"
+22
View File
@@ -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 "&nbsp;"
msgstr "&nbsp;"
+22
View File
@@ -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 "&nbsp;"
msgstr "&nbsp;"
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 347 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 258 B

Binary file not shown.

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);
+5 -1
View File
@@ -1,6 +1,10 @@
{
"name": "Web Chat",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web chat module.
""",
"version": "2.0",
"depends": ['web'],
"js": [
+5 -1
View File
@@ -1,6 +1,10 @@
{
"name": "web Dashboard",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web dashboard view.
""",
"version": "2.0",
"depends": ['web'],
"js": [
+46
View File
@@ -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 "%"
+46
View File
@@ -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;
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

+35 -92
View File
@@ -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">&amp;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>
+38
View File
@@ -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
View File
@@ -1,6 +1,7 @@
{
"name" : "OpenERP Web Diagram",
"category" : "Hidden",
"description":'Openerp web Diagram view',
"version" : "2.0",
"depends" : ["base"],
"js": [
+54
View File
@@ -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 "শেষ"
+5 -1
View File
@@ -1,6 +1,10 @@
{
"name": "web Gantt",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web gantt chart view.
""",
"version": "2.0",
"depends": ['web'],
"js": [
+1
View File
@@ -1,6 +1,7 @@
{
"name": "web Graph",
"category" : "Hidden",
"description":'Openerp web graph view',
"version": "2.0",
"depends": ['web'],
"js": [
+2 -6
View File
@@ -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);
+5 -1
View File
@@ -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"],
+5 -1
View File
@@ -1,6 +1,10 @@
{
"name" : "Base Kanban",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web kanban view.
""",
"version" : "2.0",
"depends" : ["web"],
"js": [
+160 -3
View File
@@ -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,
+23 -8
View File
@@ -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 {
+16 -12
View File
@@ -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">&lt;/tr&gt;&lt;tr&gt;</t>
</t>
+5 -1
View File
@@ -1,6 +1,10 @@
{
"name" : "OpenERP Web mobile",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web mobile.
""",
"version" : "2.0",
"depends" : [],
'active': True,
+66
View File
@@ -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 ":"
+66
View File
@@ -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 ""
+12 -12
View File
@@ -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>
+6 -2
View File
@@ -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;
+5 -3
View File
@@ -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">
+2 -1
View File
@@ -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",
+5 -1
View File
@@ -1,6 +1,10 @@
{
"name": "Tests",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web test suite.
""",
"version": "2.0",
"depends": [],
"js": ["static/src/js/*.js"],
+2 -1
View File
@@ -292,7 +292,8 @@ to help you get started:
.. toctree::
:maxdepth: 1
guides/client-action.rst
guides/client-action
guides/sidebar-protocol
Utility behaviors
-----------------
+78
View File
@@ -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