resolving kanban.css

bzr revid: ahu@openerp.com-20111130102450-j82xrxm70j8x3msf
This commit is contained in:
Antoine Huvelle 2011-11-30 11:24:50 +01:00
commit 502ce13561
52 changed files with 4192 additions and 2057 deletions

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",

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
addons/web/po/bn.po Normal file
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
addons/web/po/hr.po Normal file
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 ""

View File

@ -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");

View File

@ -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 ) {

View File

@ -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

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;
}

File diff suppressed because it is too large Load Diff

View File

@ -1752,3 +1752,5 @@ ul.oe-arrow-list li.oe-arrow-list-selected .oe-arrow-list-after {
display: block;
}

View File

Before

Width:  |  Height:  |  Size: 918 B

After

Width:  |  Height:  |  Size: 918 B

View File

Before

Width:  |  Height:  |  Size: 882 B

After

Width:  |  Height:  |  Size: 882 B

View File

Before

Width:  |  Height:  |  Size: 692 B

After

Width:  |  Height:  |  Size: 692 B

View File

@ -1029,7 +1029,8 @@ openerp.web.TranslationDataBase = openerp.web.Class.extend(/** @lends openerp.we
set_bundle: function(translation_bundle) {
var self = this;
this.db = {};
var modules = _.keys(translation_bundle.modules).sort();
var modules = _.keys(translation_bundle.modules);
modules.sort();
if (_.include(modules, "web")) {
modules = ["web"].concat(_.without(modules, "web"));
}
@ -1076,7 +1077,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
@ -1094,6 +1096,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;
};

View File

@ -158,16 +158,17 @@ openerp.web.parse_value = function (value, descriptor, value_if_empty) {
var tmp = Number(value);
if (!isNaN(tmp))
return tmp;
tmp = value.replace(openerp.web._t.database.parameters.decimal_point, ".");
var tmp2 = tmp;
var tmp2 = value;
do {
tmp = tmp2;
tmp2 = tmp.replace(openerp.web._t.database.parameters.thousands_sep, "");
} while(tmp !== tmp2);
tmp = Number(tmp);
if (isNaN(tmp))
var reformatted_value = tmp.replace(openerp.web._t.database.parameters.decimal_point, ".");
var parsed = Number(reformatted_value);
if (isNaN(parsed))
throw new Error(value + " is not a correct float");
return tmp;
return parsed;
case 'float_time':
var float_time_pair = value.split(":");
if (float_time_pair.length != 2)

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.

View File

@ -1605,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);
@ -2553,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]),
@ -3112,7 +3124,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);

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) {

View File

@ -534,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>
@ -1139,6 +1140,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 +1150,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">

View File

@ -63,6 +63,13 @@ $(document).ready(function () {
// var res = openerp.web.parse_value(val.toString("HH:mm:ss"), {type:"time"});
// equal(val.toString("HH:mm:ss"), res.toString("HH:mm:ss"));
// });
test('parse_integer', function () {
var val = openerp.web.parse_value('123,456', {type: 'integer'});
equal(val, 123456);
openerp.web._t.database.parameters.thousands_sep = '|';
var val2 = openerp.web.parse_value('123|456', {type: 'integer'});
equal(val2, 123456);
});
test("parse_float", function () {
var str = "134,112.1234";
var val = openerp.web.parse_value(str, {type:"float"});
@ -70,6 +77,12 @@ $(document).ready(function () {
var str = "-134,112.1234";
var val = openerp.web.parse_value(str, {type:"float"});
equal(val, -134112.1234);
_.extend(openerp.web._t.database.parameters, {
decimal_point: ',',
thousands_sep: '.'
});
var val3 = openerp.web.parse_value('123.456,789', {type: 'float'});
equal(val3, 123456.789);
});
test('intersperse', function () {
var g = openerp.web.intersperse;

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>

View File

@ -1,6 +1,10 @@
{
"name": "web calendar",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web calendar view.
""",
"version": "2.0",
"depends": ['web'],
"js": [

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;"

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;"

View File

@ -1,6 +1,10 @@
{
"name": "Web Chat",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web chat module.
""",
"version": "2.0",
"depends": ['web'],
"js": [

View File

@ -1,6 +1,10 @@
{
"name": "web Dashboard",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web dashboard view.
""",
"version": "2.0",
"depends": ['web'],
"js": [

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 "%"

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 "%"

View File

@ -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

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,7 +192,7 @@ 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);

View File

@ -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>

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"

View File

@ -1,6 +1,7 @@
{
"name" : "OpenERP Web Diagram",
"category" : "Hidden",
"description":'Openerp web Diagram view',
"version" : "2.0",
"depends" : ["base"],
"js": [

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 "শেষ"

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": [

View File

@ -1,6 +1,7 @@
{
"name": "web Graph",
"category" : "Hidden",
"description":'Openerp web graph view',
"version": "2.0",
"depends": ['web'],
"js": [

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"],

View File

@ -1,6 +1,10 @@
{
"name" : "Base Kanban",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web kanban view.
""",
"version" : "2.0",
"depends" : ["web"],
"js": [

View File

@ -36,7 +36,6 @@
transform: rotate(90deg);
width: 30px;
height: 20px;
align: center;
font-size: 24px;
white-space: nowrap;
display: none;
@ -81,6 +80,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 {
@ -118,9 +119,14 @@
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;
@ -131,6 +137,23 @@
color:#555;
}
}
.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;
@ -155,10 +178,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;
}
@ -180,6 +212,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 */
@ -192,6 +230,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 {
@ -203,6 +253,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 {
@ -214,6 +276,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 {
@ -225,6 +299,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 {
@ -236,6 +322,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 {
@ -247,6 +345,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 {
@ -258,6 +368,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 {
@ -269,6 +391,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 {
@ -280,6 +414,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 {
@ -291,6 +437,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,

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 {

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>

View File

@ -1,6 +1,10 @@
{
"name" : "OpenERP Web mobile",
"category" : "Hidden",
"category": "Hidden",
"description":
"""
OpenERP Web mobile.
""",
"version" : "2.0",
"depends" : [],
'active': True,

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 ":"

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>

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
}

View File

@ -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;

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;

View File

@ -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">

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",

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"],