From 67708351ebffbdc00dd22fad5f484132d34b4a10 Mon Sep 17 00:00:00 2001 From: Maxime Chambreuil Date: Tue, 30 Sep 2014 15:38:12 -0400 Subject: [PATCH 01/31] [ADD] document_page from odoo/7.0 --- document_page/__init__.py | 25 + document_page/__openerp__.py | 47 + document_page/data/wiki_main.xml | 39 + document_page/data/wiki_quickstart.xml | 116 + document_page/document_page.py | 143 + document_page/document_page_data.xml | 41 + document_page/document_page_demo.xml | 130 + document_page/document_page_view.xml | 162 + document_page/i18n/ar.po | 269 ++ document_page/i18n/bg.po | 269 ++ document_page/i18n/bs.po | 269 ++ document_page/i18n/ca.po | 269 ++ document_page/i18n/cs.po | 269 ++ document_page/i18n/da.po | 269 ++ document_page/i18n/de.po | 272 ++ document_page/i18n/document_page.pot | 273 ++ document_page/i18n/el.po | 269 ++ document_page/i18n/es.po | 279 ++ document_page/i18n/es_AR.po | 494 +++ document_page/i18n/es_CR.po | 520 +++ document_page/i18n/es_MX.po | 535 +++ document_page/i18n/es_VE.po | 535 +++ document_page/i18n/et.po | 269 ++ document_page/i18n/fi.po | 269 ++ document_page/i18n/fr.po | 280 ++ document_page/i18n/gl.po | 269 ++ document_page/i18n/hr.po | 274 ++ document_page/i18n/hu.po | 279 ++ document_page/i18n/id.po | 269 ++ document_page/i18n/it.po | 276 ++ document_page/i18n/ja.po | 269 ++ document_page/i18n/ko.po | 269 ++ document_page/i18n/lt.po | 269 ++ document_page/i18n/lv.po | 269 ++ document_page/i18n/mk.po | 276 ++ document_page/i18n/mn.po | 272 ++ document_page/i18n/nb.po | 269 ++ document_page/i18n/nl.po | 279 ++ document_page/i18n/nl_BE.po | 440 +++ document_page/i18n/pl.po | 274 ++ document_page/i18n/pt.po | 272 ++ document_page/i18n/pt_BR.po | 278 ++ document_page/i18n/ro.po | 275 ++ document_page/i18n/ru.po | 278 ++ document_page/i18n/sk.po | 269 ++ document_page/i18n/sl.po | 274 ++ document_page/i18n/sq.po | 269 ++ document_page/i18n/sr.po | 269 ++ document_page/i18n/sr@latin.po | 269 ++ document_page/i18n/sv.po | 273 ++ document_page/i18n/tlh.po | 269 ++ document_page/i18n/tr.po | 277 ++ document_page/i18n/uk.po | 269 ++ document_page/i18n/vi.po | 269 ++ document_page/i18n/zh_CN.po | 272 ++ document_page/i18n/zh_TW.po | 269 ++ .../security/document_page_security.xml | 8 + document_page/security/ir.model.access.csv | 4 + document_page/security/wiki_security.xml | 12 + .../static/src/css/document_page.css | 12 + document_page/test/document_page_test00.yml | 54 + document_page/web/__init__.py | 4 + document_page/web/controllers/__init__.py | 3 + document_page/web/controllers/wiki.py | 65 + document_page/web/locales/bg.po | 22 + document_page/web/locales/ca.po | 22 + document_page/web/locales/da.po | 22 + document_page/web/locales/de.po | 22 + .../locales/de_DE/LC_MESSAGES/javascript.po | 20 + .../web/locales/de_DE/LC_MESSAGES/messages.po | 24 + document_page/web/locales/es_CR.po | 23 + .../locales/es_ES/LC_MESSAGES/javascript.po | 20 + .../web/locales/es_ES/LC_MESSAGES/messages.po | 24 + document_page/web/locales/es_PY.po | 22 + document_page/web/locales/fr.po | 22 + .../locales/fr_FR/LC_MESSAGES/javascript.po | 20 + .../web/locales/fr_FR/LC_MESSAGES/messages.po | 24 + document_page/web/locales/gl.po | 22 + document_page/web/locales/javascript.pot | 19 + document_page/web/locales/messages.pot | 23 + document_page/web/locales/ru.po | 22 + document_page/web/locales/sk.po | 22 + document_page/web/locales/tr.po | 22 + document_page/web/static/css/wiki.css | 32 + document_page/web/widgets/__init__.py | 3 + document_page/web/widgets/rss/__init__.py | 3 + document_page/web/widgets/rss/feedparser.py | 2860 +++++++++++++++++ document_page/web/widgets/templates/wiki.mako | 23 + document_page/web/widgets/wiki.py | 224 ++ .../web/widgets/wikimarkup/__init__.py | 2146 +++++++++++++ document_page/wizard/__init__.py | 25 + .../wizard/document_page_create_menu.py | 93 + .../wizard/document_page_create_menu_view.xml | 33 + .../wizard/document_page_show_diff.py | 63 + .../wizard/document_page_show_diff_view.xml | 39 + document_page/wizard/wiki_make_index.py | 104 + document_page/wizard/wiki_make_index_view.xml | 43 + document_page/wizard/wiki_wiki_page_open.py | 71 + .../wizard/wiki_wiki_page_open_view.xml | 34 + 99 files changed, 21291 insertions(+) create mode 100644 document_page/__init__.py create mode 100644 document_page/__openerp__.py create mode 100644 document_page/data/wiki_main.xml create mode 100644 document_page/data/wiki_quickstart.xml create mode 100644 document_page/document_page.py create mode 100644 document_page/document_page_data.xml create mode 100644 document_page/document_page_demo.xml create mode 100644 document_page/document_page_view.xml create mode 100644 document_page/i18n/ar.po create mode 100644 document_page/i18n/bg.po create mode 100644 document_page/i18n/bs.po create mode 100644 document_page/i18n/ca.po create mode 100644 document_page/i18n/cs.po create mode 100644 document_page/i18n/da.po create mode 100644 document_page/i18n/de.po create mode 100644 document_page/i18n/document_page.pot create mode 100644 document_page/i18n/el.po create mode 100644 document_page/i18n/es.po create mode 100644 document_page/i18n/es_AR.po create mode 100644 document_page/i18n/es_CR.po create mode 100644 document_page/i18n/es_MX.po create mode 100644 document_page/i18n/es_VE.po create mode 100644 document_page/i18n/et.po create mode 100644 document_page/i18n/fi.po create mode 100644 document_page/i18n/fr.po create mode 100644 document_page/i18n/gl.po create mode 100644 document_page/i18n/hr.po create mode 100644 document_page/i18n/hu.po create mode 100644 document_page/i18n/id.po create mode 100644 document_page/i18n/it.po create mode 100644 document_page/i18n/ja.po create mode 100644 document_page/i18n/ko.po create mode 100644 document_page/i18n/lt.po create mode 100644 document_page/i18n/lv.po create mode 100644 document_page/i18n/mk.po create mode 100644 document_page/i18n/mn.po create mode 100644 document_page/i18n/nb.po create mode 100644 document_page/i18n/nl.po create mode 100644 document_page/i18n/nl_BE.po create mode 100644 document_page/i18n/pl.po create mode 100644 document_page/i18n/pt.po create mode 100644 document_page/i18n/pt_BR.po create mode 100644 document_page/i18n/ro.po create mode 100644 document_page/i18n/ru.po create mode 100644 document_page/i18n/sk.po create mode 100644 document_page/i18n/sl.po create mode 100644 document_page/i18n/sq.po create mode 100644 document_page/i18n/sr.po create mode 100644 document_page/i18n/sr@latin.po create mode 100644 document_page/i18n/sv.po create mode 100644 document_page/i18n/tlh.po create mode 100644 document_page/i18n/tr.po create mode 100644 document_page/i18n/uk.po create mode 100644 document_page/i18n/vi.po create mode 100644 document_page/i18n/zh_CN.po create mode 100644 document_page/i18n/zh_TW.po create mode 100644 document_page/security/document_page_security.xml create mode 100644 document_page/security/ir.model.access.csv create mode 100644 document_page/security/wiki_security.xml create mode 100644 document_page/static/src/css/document_page.css create mode 100644 document_page/test/document_page_test00.yml create mode 100644 document_page/web/__init__.py create mode 100644 document_page/web/controllers/__init__.py create mode 100644 document_page/web/controllers/wiki.py create mode 100644 document_page/web/locales/bg.po create mode 100644 document_page/web/locales/ca.po create mode 100644 document_page/web/locales/da.po create mode 100644 document_page/web/locales/de.po create mode 100644 document_page/web/locales/de_DE/LC_MESSAGES/javascript.po create mode 100644 document_page/web/locales/de_DE/LC_MESSAGES/messages.po create mode 100644 document_page/web/locales/es_CR.po create mode 100644 document_page/web/locales/es_ES/LC_MESSAGES/javascript.po create mode 100644 document_page/web/locales/es_ES/LC_MESSAGES/messages.po create mode 100644 document_page/web/locales/es_PY.po create mode 100644 document_page/web/locales/fr.po create mode 100644 document_page/web/locales/fr_FR/LC_MESSAGES/javascript.po create mode 100644 document_page/web/locales/fr_FR/LC_MESSAGES/messages.po create mode 100644 document_page/web/locales/gl.po create mode 100644 document_page/web/locales/javascript.pot create mode 100644 document_page/web/locales/messages.pot create mode 100644 document_page/web/locales/ru.po create mode 100644 document_page/web/locales/sk.po create mode 100644 document_page/web/locales/tr.po create mode 100644 document_page/web/static/css/wiki.css create mode 100644 document_page/web/widgets/__init__.py create mode 100644 document_page/web/widgets/rss/__init__.py create mode 100755 document_page/web/widgets/rss/feedparser.py create mode 100644 document_page/web/widgets/templates/wiki.mako create mode 100644 document_page/web/widgets/wiki.py create mode 100644 document_page/web/widgets/wikimarkup/__init__.py create mode 100644 document_page/wizard/__init__.py create mode 100644 document_page/wizard/document_page_create_menu.py create mode 100644 document_page/wizard/document_page_create_menu_view.xml create mode 100644 document_page/wizard/document_page_show_diff.py create mode 100644 document_page/wizard/document_page_show_diff_view.xml create mode 100644 document_page/wizard/wiki_make_index.py create mode 100644 document_page/wizard/wiki_make_index_view.xml create mode 100644 document_page/wizard/wiki_wiki_page_open.py create mode 100644 document_page/wizard/wiki_wiki_page_open_view.xml diff --git a/document_page/__init__.py b/document_page/__init__.py new file mode 100644 index 00000000000..a5aa017f018 --- /dev/null +++ b/document_page/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from . import ( + document_page, + wizard + ) diff --git a/document_page/__openerp__.py b/document_page/__openerp__.py new file mode 100644 index 00000000000..3aba6e55fb7 --- /dev/null +++ b/document_page/__openerp__.py @@ -0,0 +1,47 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +{ + 'name': 'Document Page', + 'version': '1.0.1', + 'category': 'Knowledge Management', + 'description': """ +Pages +===== +Web pages + """, + 'author': ['OpenERP SA'], + 'website': 'http://www.openerp.com/', + 'depends': ['knowledge'], + 'data': [ + 'wizard/document_page_create_menu_view.xml', + 'wizard/document_page_show_diff_view.xml', + 'document_page_view.xml', + 'security/document_page_security.xml', + 'security/ir.model.access.csv', + ], + 'demo': ['document_page_demo.xml'], + 'test': ['test/document_page_test00.yml'], + 'installable': True, + 'auto_install': False, + 'images': [], + 'css': ['static/src/css/document_page.css'], +} diff --git a/document_page/data/wiki_main.xml b/document_page/data/wiki_main.xml new file mode 100644 index 00000000000..223274ea826 --- /dev/null +++ b/document_page/data/wiki_main.xml @@ -0,0 +1,39 @@ + + + + + The OpenERP wiki + help, quick start, wiki, formatting + 0 + 1 + 0 + Initial Page + =The OpenERP wiki= +The OpenERP wiki allows you to manage your enterprise's contents using wiki +restructured texts. This module provides a collaborative way to manage internal +FAQs, quality manuals, technical references, etc. + +==Keypoints== +* Same formating style than MediaWiki, +* Any number of wiki group for different purposes, +* Detailed history on all pages, +* Integrated with the document management system. + +==Why you should use the OpenERP integrated wiki than a separate wiki system ?== +* Allows links to any document of the system, +* Uses the access controls of OpenERP for uniq access rights management, +* Use it to describe projects, tasks, products, +* Integrated with customer portal to provide restricted external accesses, +* Linked to users processes for quality manuals. + +==To get more information== +* [[Basic Wiki Editing]] +* [[Wiki Documentation]] +* [http://openerp.com The OpenERP website] + + + + + + + diff --git a/document_page/data/wiki_quickstart.xml b/document_page/data/wiki_quickstart.xml new file mode 100644 index 00000000000..f6ae59de9ee --- /dev/null +++ b/document_page/data/wiki_quickstart.xml @@ -0,0 +1,116 @@ + + + + + Help - Using The Wiki + + + + Basic Wiki Editing + help, quick start, wiki, formatting + 0 + 1 + 1.1 + Initial Page + ==Basic Wiki Editing== +You can ''italicize text'' by putting 2 +apostrophes on each side. +3 apostrophes will embolden '''the text'''. +5 apostrophes will embolden and italicize +'''''the text'''''. +(4 apostrophes don't do anything +special -- there's just ''''one left +over''''.) + +You can ''italicize text'' by putting 2 +apostrophes on each side. + +3 apostrophes will embolden '''the text'''. + +5 apostrophes will embolden and italicize +'''''the text'''''. + +(4 apostrophes don't do anything special -- there's just ''''one left over''''.) + +==Links== +===Internal=== +You give the link as same as the wiki Page Title + +Go back to Main Page : [[The OpenERP wiki]] +===External=== +You can give link to the other Web page over the Internet easily [http://google.com Visit Google] +==Attachments== +===Images=== +You can get the External links easily + +img:http://images.google.co.in/intl/en_ALL/images/images_hp.gif + +==Play with OpenERP Records== +* edit:res.partner|False|Create New Partner +* edit:res.partner|China Export|Edit China Export +* edit:res.country|India|Edit Country - India + +==Working with Attachments== +* Download File : attach:document.doc + +==Unnumbered List== +* ''Unordered lists'' are easy to do: +** Start every line with a star. +*** More stars indicate a deeper level. +*: Previous item continues. +** A new line +* in a list +marks the end of the list. +*Of course you can start again. + +==Numbered List== +# ''Numbered lists'' are: +## Very organized +## Easy to follow +#: Previous item continues +A new line marks the end of the list. +# New numbering starts with 1 + +==Text Indents== +: A colon (:) indents a line or paragraph. +A newline starts a new paragraph. +: We use 1 colon to indent once. +:: We use 2 colons to indent twice. +::: 3 colons to indent 3 times, and so on. + +==Table== +<nowiki> +{| border="1" cellspacing="0" cellpadding="5" align="left" +! Web site +! Link +! Contact Email +|- +| '''OpenERP''' - ''Belgium'' +| [http://openerp.com] +| [mailto:sales AT tiny.be] +|} +</nowiki> + +{| border="1" cellspacing="0" cellpadding="5" align="left" +! Web site +! Link +! Contact Email +|- +| '''OpenERP''' - ''Belgium'' +| [http://openerp.com] +| [mailto:sales AT tiny.be] +|} +<br/> +<br/> +<br/> +<br/> +==Headings== +=1st Level Heading= +==2nd Level Heading== +===3rd Level Heading=== + + + + + + diff --git a/document_page/document_page.py b/document_page/document_page.py new file mode 100644 index 00000000000..bcd10742700 --- /dev/null +++ b/document_page/document_page.py @@ -0,0 +1,143 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp.osv import fields, osv +from openerp.tools.translate import _ +import difflib + + +class document_page(osv.osv): + _name = "document.page" + _description = "Document Page" + _order = 'name' + + def _get_page_index(self, cr, uid, page, link=True): + index = [] + for subpage in page.child_ids: + index += ["
  • " + self._get_page_index(cr, uid, subpage) + + "
  • "] + r = '' + if link: + r = '%s' % (page.id, page.name) + if index: + r += "
      " + "".join(index) + "
    " + return r + + def _get_display_content(self, cr, uid, ids, name, args, context=None): + res = {} + for page in self.browse(cr, uid, ids, context=context): + if page.type == "category": + content = self._get_page_index(cr, uid, page, link=False) + else: + content = page.content + res[page.id] = content + return res + + _columns = { + 'name': fields.char('Title', required=True), + 'type': fields.selection([('content', 'Content'), + ('category', 'Category')], + 'Type', help="Page type"), + 'parent_id': fields.many2one('document.page', 'Category', + domain=[('type', '=', 'category')]), + 'child_ids': fields.one2many('document.page', 'parent_id', 'Children'), + 'content': fields.text("Content"), + 'display_content': fields.function(_get_display_content, + string='Displayed Content', + type='text'), + 'history_ids': fields.one2many('document.page.history', 'page_id', + 'History'), + 'menu_id': fields.many2one('ir.ui.menu', "Menu", readonly=True), + + 'create_date': fields.datetime("Created on", select=True, + readonly=True), + 'create_uid': fields.many2one('res.users', 'Author', select=True, + readonly=True), + 'write_date': fields.datetime("Modification Date", select=True, + readonly=True), + 'write_uid': fields.many2one('res.users', "Last Contributor", + select=True, readonly=True), + } + _defaults = { + 'type': 'content', + } + + def onchange_parent_id(self, cr, uid, ids, parent_id, content, + context=None): + res = {} + if parent_id and not content: + parent = self.browse(cr, uid, parent_id, context=context) + if parent.type == "category": + res['value'] = { + 'content': parent.content, + } + return res + + def create_history(self, cr, uid, ids, vals, context=None): + for i in ids: + history = self.pool.get('document.page.history') + if vals.get('content'): + res = { + 'content': vals.get('content', ''), + 'page_id': i, + } + history.create(cr, uid, res) + + def create(self, cr, uid, vals, context=None): + page_id = super(document_page, self).create(cr, uid, vals, context) + self.create_history(cr, uid, [page_id], vals, context) + return page_id + + def write(self, cr, uid, ids, vals, context=None): + result = super(document_page, self).write(cr, uid, ids, vals, context) + self.create_history(cr, uid, ids, vals, context) + return result + + +class document_page_history(osv.osv): + _name = "document.page.history" + _description = "Document Page History" + _order = 'id DESC' + _rec_name = "create_date" + + _columns = { + 'page_id': fields.many2one('document.page', 'Page'), + 'summary': fields.char('Summary', size=256, select=True), + 'content': fields.text("Content"), + 'create_date': fields.datetime("Date"), + 'create_uid': fields.many2one('res.users', "Modified By"), + } + + def getDiff(self, cr, uid, v1, v2, context=None): + history_pool = self.pool.get('document.page.history') + text1 = history_pool.read(cr, uid, [v1], ['content'])[0]['content'] + text2 = history_pool.read(cr, uid, [v2], ['content'])[0]['content'] + line1 = line2 = '' + if text1: + line1 = text1.splitlines(1) + if text2: + line2 = text2.splitlines(1) + if (not line1 and not line2) or (line1 == line2): + raise osv.except_osv(_('Warning!'), + _('There are no changes in revisions.')) + diff = difflib.HtmlDiff() + return diff.make_table(line1, line2, "Revision-%s" % (v1), + "Revision-%s" % (v2), context=True) diff --git a/document_page/document_page_data.xml b/document_page/document_page_data.xml new file mode 100644 index 00000000000..1cef65694d8 --- /dev/null +++ b/document_page/document_page_data.xml @@ -0,0 +1,41 @@ + + + + + The OpenERP wiki + help, quick start, wiki, formatting + 0 + 1 + Initial Page + ==The OpenERP wiki== + +[[File:http://www.openerp.com/sites/all/themes/openerp/logo.png OpenERP]] + +The OpenERP wiki allows you to manage your enterprise's contents using wiki +restructured texts. This module provides a collaborative way to manage internal +FAQs, quality manuals, technical references, etc. + +==Keypoints== +* Same formating style than MediaWiki, +* Any number of wiki group for different purposes, +* Detailed history on all pages, +* Integrated with the document management system. + +==Why you should use the OpenERP integrated wiki than a separate wiki system ?== +* Allows links to any document of the system, +* Uses the access controls of OpenERP for uniq access rights management, +* Use it to describe projects, tasks, products, +* Integrated with customer portal to provide restricted external accesses, +* Linked to users processes for quality manuals. + +==To get more information== +* [[Basic Wiki Editing]] +* [[Wiki Documentation]] +* [http://openerp.com The OpenERP website] + + + + + + + diff --git a/document_page/document_page_demo.xml b/document_page/document_page_demo.xml new file mode 100644 index 00000000000..f779ea8313f --- /dev/null +++ b/document_page/document_page_demo.xml @@ -0,0 +1,130 @@ + + + + + + + + OpenERP Features + category + +Summary of the feature + +Long explanation + +Conclusion + +Additional ressources + + + + + + OpenERP 6.1. Functional Demo + + + +
    +The news is out, OpenERP's latest version 6.1. is here. It's more
    +user-friendly, even more business oriented and efficient to manage your company
    +
    +How to discover the latest version 6.1.?
    +
    +Demo :
    +Online:
    +Download:
    +
    +We have also put together a functional demo that presents 6.1. Watch this video
    +to learn directly from us what OpenERP 6.1. can do for you. Share it in your
    +company, with your clients and implement it now for your business.
    +
    +

    Watch on Youtube!


    +
    +
    +
    +
    +]]> +
    +
    + + + Personalise Dashboards + + + +You like OpenERP, but feel like you want to personalise it more? Now, OpenERP
    +goes a step further and lets you customize your dashboard. Thanks to a new
    +feature that allows you to customize your dashboard by adding new boards of any
    +search view.
    +
    +

    How is it done?


    +
    +Step 1: access one search view
    +
    +Step 2: apply the filter you want to see at each connection to the application
    +(eg. on sales, manufacturing, etc)
    +
    +Step 3: add it into the dashboard in the same space where you can save the filter
    +
    +Step 4: choose the application you want it visible on and the name of the array
    +
    +Look at this simple example below from Purchase, where I want to put on the
    +application's dashboard "Purchases to Approve". After I access the search view
    +and apply the filter for "Purchases to Approve", I can add it immediately to my
    +Purchase dashboard.
    +
    +
    +
    +In less than a minute, the search view is visible on the dashboard
    +
    +
    +
    +Of course, you are free to delete what you don't need or like, but just in case
    +you change your mind there is a reset button to return to the default view.
    +
    +
    +]]> +
    +
    + + + Touchscreen Point of Sale + + + +The brand new OpenERP touchscreen point of sale available with 6.1 allows you
    +to manage your shop sales very easily. It's fully web based so that you don't
    +have to install or deploy any software and all the sales shops can be easily
    +consolidated. It works in connected and disconnected modes so that you can
    +continue to sell if you lose your internet connection.
    +
    +
    +
    +

    Here's a summary of its main features and benefits:


    +
    +100% WEB based
    +
    +
    • available for any touchscreen device (ipod, ipad, any tablet)mobile (with portable devices)
    • no installation required
    • no synchronization needed, completely integrated
    • continue working even when your connection is down if you close your browser, data won't be lost
    • fully web based with a clean interface smart interface

    +
    +You have different options to select your products. You can do it through the
    +barcode reader, just browse through the categories you have put in place (ie.
    +drinks, snacks, meals, etc.), or text search in case neither of the other
    +options work for you. If you need to use the POS for your restaurant, for
    +example, your employees can record at the same time multiple tickets without
    +having to wait to do one transaction at a time. Along, to facilitate payment,
    +the application allows multiple payment methods.
    +
    +The POS application is so simple and accessible to use that your shop or
    +restaurant will never need any other tool to manage orders. Due to its smart
    +and user-friendly interface you don't need any training to learn how to use it.
    +Think of it as an out-of-the-box solution to boost your business' productivity.
    +
    +]]> +
    +
    + +
    +
    diff --git a/document_page/document_page_view.xml b/document_page/document_page_view.xml new file mode 100644 index 00000000000..2ffc905946c --- /dev/null +++ b/document_page/document_page_view.xml @@ -0,0 +1,162 @@ + + + + + + + + + document.page.tree + document.page + child_ids + 100 + + + + + + + + + + + document.page.list + document.page + + + + + + + + + + + + + document.page.form + document.page + +
    + +

    + + + + + + + + + + +
    +
    + +
    + +
    + +
    +
    + + + document.page.search + document.page + + + + + + + + + + + + + + + + Pages + document.page + [('type','=','content')] + {'default_type': 'content'} + form + tree,form + + + +

    + Click to create a new web page. +

    +
    +
    + + + Category + document.page + [('type','=','category')] + {'default_type': 'category'} + form + tree,form + + + + + + + + document.page.history.tree + document.page.history + + + + + + + + + + + document.page.history.form + document.page.history + +
    +
    + + + Page history + document.page.history + form + tree,form + + + + + +
    +
    diff --git a/document_page/i18n/ar.po b/document_page/i18n/ar.po new file mode 100644 index 00000000000..10d60f6b606 --- /dev/null +++ b/document_page/i18n/ar.po @@ -0,0 +1,269 @@ +# Arabic translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-27 21:39+0000\n" +"Last-Translator: gehad shaat \n" +"Language-Team: Arabic \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "الفئة" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "المشارك الاخير" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "الكاتب" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "القائمة" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "تاريخ الصفحة" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "المحتوى" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "تجميع حسب..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "الاسم" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "النوع" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "تم التعديل عليها بواسطة" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "أو" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "نوع الصفحة" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "معلومات القائمة" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/bg.po b/document_page/i18n/bg.po new file mode 100644 index 00000000000..524bd9233ee --- /dev/null +++ b/document_page/i18n/bg.po @@ -0,0 +1,269 @@ +# Bulgarian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Bulgarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Автор" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Меню" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Съдържание" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Групиране по..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Заглавие" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Информация за меню" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Дата" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Страници" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Надменю" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Дата на редакция" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Създадено на" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Резюме" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Име на меню" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Създай меню" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Отказ" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Различия" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/bs.po b/document_page/i18n/bs.po new file mode 100644 index 00000000000..0c2cb2d9af3 --- /dev/null +++ b/document_page/i18n/bs.po @@ -0,0 +1,269 @@ +# Bosnian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Bosnian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/ca.po b/document_page/i18n/ca.po new file mode 100644 index 00000000000..ff1322a6820 --- /dev/null +++ b/document_page/i18n/ca.po @@ -0,0 +1,269 @@ +# Catalan translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Últim col·laborador" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menú" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Històric pàgina" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Contingut" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Agrupa per..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Títol" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Assistent 'Crea menú'" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Informació del menú" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Data" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Diferència" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Pàgines" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Menú pare" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Data modificació" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Creat el" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Resum" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Nom menú" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Crea menú" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Cancel·la" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Dif." + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/cs.po b/document_page/i18n/cs.po new file mode 100644 index 00000000000..71145a88cc0 --- /dev/null +++ b/document_page/i18n/cs.po @@ -0,0 +1,269 @@ +# Czech translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Czech \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Poslední přispěvatel" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Nabídka" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Historie stránky" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Obsah" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Seskupit podle..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Název" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Průvodce vytvořením nabídky" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Informace nabídky" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Datum" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Rozdíly" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Stránky" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Rodičovská nabídka" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Datum změny" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Vytvořeno" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Shrnutí" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Jméno nabídky" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Vytvořit nabídku" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Zrušit" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Rozdíl" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/da.po b/document_page/i18n/da.po new file mode 100644 index 00000000000..b0ff27810b6 --- /dev/null +++ b/document_page/i18n/da.po @@ -0,0 +1,269 @@ +# Danish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/de.po b/document_page/i18n/de.po new file mode 100644 index 00000000000..261a6d5a763 --- /dev/null +++ b/document_page/i18n/de.po @@ -0,0 +1,272 @@ +# German translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2014-02-02 18:48+0000\n" +"Last-Translator: Ralf Hilgenstock \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-02-03 05:55+0000\n" +"X-Generator: Launchpad (build 16916)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Kategorie" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Letzer Beitragender" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menü" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Dokumentenseite" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Seitenänderungsverlauf" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Inhalt" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Gruppiert je..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Vorlage" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "diese wird für alle neuen Dokumente dieser Kategorie verwendet" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Titel" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Assistent für Menüerzeugung" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Typ" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Geändert von" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "oder" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Seitentyp" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Menü" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Dokumenten Seite Historie" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Seitenhistorie" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "Es gibt keine Veränderungen in den Revisionen" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Datum" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Differenz" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Seiten" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Kategorien" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Bezeichnung" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Obermenü" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Änderung am" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Erzeugt am" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "Sie müssen zumindest eine und maximal zwei Revisionen auswählen!" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Seitenhistorie" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Zusammenfassung" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "z.B. Es war einmal..." + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Dokumentenhistorie" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Menübezeichnung" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Seite" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Historie" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Menü erstellen" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Angezeigter Inhalt" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Warnung!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Abbrechen" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Differenz" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Dokumententyp" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Kindelemente" + +#~ msgid "Create web pages" +#~ msgstr "Webseiten erstellen" diff --git a/document_page/i18n/document_page.pot b/document_page/i18n/document_page.pot new file mode 100644 index 00000000000..8139bba87cf --- /dev/null +++ b/document_page/i18n/document_page.pot @@ -0,0 +1,273 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * document_page +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 7.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-08-14 00:10+0000\n" +"PO-Revision-Date: 2014-08-14 00:10+0000\n" +"Last-Translator: <>\n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: code:addons/document_page/wizard/wiki_make_index.py:52 +#, python-format +msgid "There is no section in this Page." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#: code:addons/document_page/wizard/wiki_make_index.py:52 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" + diff --git a/document_page/i18n/el.po b/document_page/i18n/el.po new file mode 100644 index 00000000000..68f146f9ff7 --- /dev/null +++ b/document_page/i18n/el.po @@ -0,0 +1,269 @@ +# Greek translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Greek \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Δημιουργός" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Μενού" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Περιεχόμενα" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Τίτλος" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Πληροφορίες Μενού" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Ημερομηνία" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Σελίδες" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Μενού Προέλευσης" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Ημερομηνία Τροποποίησης" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Δημιουργήθηκε στις" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Περίληψη" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Όνομα Μενού" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Δημιουργία Μενού" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Ακύρωση" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Διαφ." + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/es.po b/document_page/i18n/es.po new file mode 100644 index 00000000000..f953ef743a7 --- /dev/null +++ b/document_page/i18n/es.po @@ -0,0 +1,279 @@ +# Spanish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2013-06-18 07:39+0000\n" +"Last-Translator: Pedro Manuel Baeza \n" +"Language-Team: Spanish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:08+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Categoría" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Último colaborador" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menú" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Página de documento" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Historial página" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Contenido" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Agrupar por..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Plantilla" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" +"esto será usado como una plantilla de contenido para todas las páginas de " +"esta categoría." + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Título" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Asistente crear menú" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Tipo" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Modificado por" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "o" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Tipo de página" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Información del menú" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Historia de página de documento" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Historial de páginas" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "No hay cambios en las revisiones." + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Fecha" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Diferencia" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Páginas" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Categorías" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Nombre" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Menú padre" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Fecha de modificación" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" +"¡Necesita seleccionar mínimo una y máximo dos revisiones de historial!" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Historial de página" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Resumen" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "Por ejemplo, Érase una vez..." + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Historial del Documento" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Nombre menú" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Página" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Historial" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" +"

    \n" +"Pulse para crear una nueva página web.\n" +"

    \n" +" " + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Crear menú" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Contenido mostrado" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "¡Advertencia!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Cancelar" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Dif." + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Tipo de documento" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Hijos" + +#~ msgid "Create web pages" +#~ msgstr "Crear páginas Web" diff --git a/document_page/i18n/es_AR.po b/document_page/i18n/es_AR.po new file mode 100644 index 00000000000..180e3281a22 --- /dev/null +++ b/document_page/i18n/es_AR.po @@ -0,0 +1,494 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * wiki +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 5.0.0\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2012-02-08 01:37+0100\n" +"PO-Revision-Date: 2009-09-23 14:54+0000\n" +"Last-Translator: Silvana Herrera \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-02-09 06:46+0000\n" +"X-Generator: Launchpad (build 14763)\n" + +#. module: wiki +#: field:wiki.groups,template:0 +msgid "Wiki Template" +msgstr "Plantilla Wiki" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki +#: model:ir.ui.menu,name:wiki.menu_action_wiki_wiki +msgid "Wiki Pages" +msgstr "Páginas Wiki" + +#. module: wiki +#: field:wiki.groups,method:0 +msgid "Display Method" +msgstr "" + +#. module: wiki +#: view:wiki.wiki:0 field:wiki.wiki,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_wiki_page_open +#: view:wiki.wiki.page.open:0 +msgid "Open Page" +msgstr "Abrir página" + +#. module: wiki +#: field:wiki.groups,menu_id:0 +msgid "Menu" +msgstr "Menú" + +#. module: wiki +#: field:wiki.wiki,section:0 +msgid "Section" +msgstr "Sección" + +#. module: wiki +#: help:wiki.wiki,toc:0 +msgid "Indicates that this pages have a table of contents or not" +msgstr "" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki_history view:wiki.wiki.history:0 +msgid "Wiki History" +msgstr "Historial Wiki" + +#. module: wiki +#: field:wiki.wiki,minor_edit:0 +msgid "Minor edit" +msgstr "Edición menor" + +#. module: wiki +#: view:wiki.wiki:0 field:wiki.wiki,text_area:0 +msgid "Content" +msgstr "Contenido" + +#. module: wiki +#: field:wiki.wiki,child_ids:0 +msgid "Child Pages" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,parent_id:0 +msgid "Parent Page" +msgstr "" + +#. module: wiki +#: view:wiki.wiki:0 field:wiki.wiki,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: wiki +#: field:wiki.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Menú padre" + +#. module: wiki +#: code:addons/wiki/wizard/wiki_make_index.py:52 +#, python-format +msgid "There is no section in this Page" +msgstr "" + +#. module: wiki +#: field:wiki.groups,name:0 view:wiki.wiki:0 field:wiki.wiki,group_id:0 +msgid "Wiki Group" +msgstr "Grupo Wiki" + +#. module: wiki +#: field:wiki.wiki,name:0 +msgid "Title" +msgstr "Título" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,history_id:0 +msgid "History Lines" +msgstr "Líneas del historial" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Page Content" +msgstr "" + +#. module: wiki +#: code:addons/wiki/wiki.py:237 code:addons/wiki/wizard/wiki_make_index.py:52 +#, python-format +msgid "Warning !" +msgstr "" + +#. module: wiki +#: code:addons/wiki/wiki.py:237 +#, python-format +msgid "There are no changes in revisions" +msgstr "" + +#. module: wiki +#: help:wiki.wiki,section:0 +msgid "Use page section code like 1.2.1" +msgstr "Utilice código de sección de la página, por ejemplo 1.2.1" + +#. module: wiki +#: field:wiki.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Nombre del menú" + +#. module: wiki +#: field:wiki.groups,notes:0 +msgid "Description" +msgstr "Descripción" + +#. module: wiki +#: field:wiki.wiki,review:0 +msgid "Needs Review" +msgstr "" + +#. module: wiki +#: help:wiki.wiki,review:0 +msgid "" +"Indicates that this page should be reviewed, raising the attention of other " +"contributors" +msgstr "" + +#. module: wiki +#: view:wiki.create.menu:0 view:wiki.make.index:0 +msgid "Menu Information" +msgstr "Información del menú" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.act_wiki_wiki_history +msgid "Page History" +msgstr "" + +#. module: wiki +#: selection:wiki.groups,method:0 +msgid "Tree" +msgstr "" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Page Template" +msgstr "Plantilla de página" + +#. module: wiki +#: field:wiki.wiki,tags:0 +msgid "Keywords" +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,help:wiki.action_wiki +msgid "" +"With Wiki Pages you can share ideas and questions with your coworkers. You " +"can create a new document that can be linked to one or several applications " +"(CRM, Sales, etc.). You can use keywords to ease access to your wiki pages. " +"There is a basic wiki editing for text format." +msgstr "" + +#. module: wiki +#: code:addons/wiki/wizard/wiki_show_diff.py:54 +#, python-format +msgid "Warning" +msgstr "Aviso" + +#. module: wiki +#: help:wiki.groups,home:0 +msgid "Required to select home page if display method is Home Page" +msgstr "" + +#. module: wiki +#: field:wiki.wiki.history,create_date:0 +msgid "Date" +msgstr "Fecha" + +#. module: wiki +#: view:wiki.make.index:0 +msgid "Want to create a Index on Selected Pages ? " +msgstr "¿Desea crear un índice sobre las páginas seleccionadas? " + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:wiki.action_view_wiki_show_diff_values +#: view:wizard.wiki.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: wiki +#: field:wiki.groups,page_ids:0 +msgid "Pages" +msgstr "Páginas" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Group Description" +msgstr "" + +#. module: wiki +#: view:wiki.wiki.page.open:0 +msgid "Want to open a wiki page? " +msgstr "" + +#. module: wiki +#: field:wiki.groups,section:0 +msgid "Make Section ?" +msgstr "¿Crear sección?" + +#. module: wiki +#: field:wiki.wiki.history,text_area:0 +msgid "Text area" +msgstr "Área de texto" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Meta Information" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: wiki +#: view:wiki.groups:0 view:wizard.wiki.history.show_diff:0 +msgid "Notes" +msgstr "Notas" + +#. module: wiki +#: selection:wiki.groups,method:0 +msgid "List" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,summary:0 field:wiki.wiki.history,summary:0 +msgid "Summary" +msgstr "Resumen" + +#. module: wiki +#: field:wiki.groups,create_date:0 +msgid "Created Date" +msgstr "Fecha de creación" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_history +msgid "All Page Histories" +msgstr "Todos los historiales de páginas" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki +msgid "wiki.wiki" +msgstr "wiki.wiki" + +#. module: wiki +#: help:wiki.groups,method:0 +msgid "Define the default behaviour of the menu created on this group" +msgstr "" + +#. module: wiki +#: view:wizard.wiki.history.show_diff:0 +msgid "Close" +msgstr "" + +#. module: wiki +#: model:ir.model,name:wiki.model_wizard_wiki_history_show_diff +msgid "wizard.wiki.history.show_diff" +msgstr "asistente.wiki.historial.mostrar_dif" + +#. module: wiki +#: field:wiki.wiki.history,wiki_id:0 +msgid "Wiki Id" +msgstr "ID Wiki" + +#. module: wiki +#: field:wiki.groups,home:0 selection:wiki.groups,method:0 +msgid "Home Page" +msgstr "" + +#. module: wiki +#: help:wiki.wiki,parent_id:0 +msgid "Allows you to link with the other page with in the current topic" +msgstr "" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Modification Information" +msgstr "" + +#. module: wiki +#: help:wiki.wiki,group_id:0 +msgid "Topic, also called Wiki Group" +msgstr "" + +#. module: wiki +#: model:ir.ui.menu,name:wiki.menu_wiki_configuration view:wiki.wiki:0 +msgid "Wiki" +msgstr "Wiki" + +#. module: wiki +#: field:wiki.wiki,write_date:0 +msgid "Modification Date" +msgstr "Fecha de modificación" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Configuration" +msgstr "Configuración" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_make_index +#: model:ir.actions.act_window,name:wiki.action_view_wiki_make_index_values +#: model:ir.model,name:wiki.model_wiki_make_index view:wiki.make.index:0 +msgid "Create Index" +msgstr "Crear índice" + +#. module: wiki +#: code:addons/wiki/wizard/wiki_show_diff.py:54 +#, python-format +msgid "You need to select minimum 1 or maximum 2 history revision!" +msgstr "" +"¡Debe seleccionar como mínimo 1 o como máximo 2 revisiones históricas!" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Group By..." +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_create_menu +#: view:wiki.create.menu:0 view:wiki.groups:0 view:wiki.make.index:0 +msgid "Create Menu" +msgstr "Crear menú" + +#. module: wiki +#: field:wiki.wiki.history,minor_edit:0 +msgid "This is a major edit ?" +msgstr "¿Es ésta una edición mayor?" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_groups +#: model:ir.actions.act_window,name:wiki.action_wiki_groups_browse +#: model:ir.model,name:wiki.model_wiki_groups +#: model:ir.ui.menu,name:wiki.menu_action_wiki_groups view:wiki.groups:0 +msgid "Wiki Groups" +msgstr "Grupos Wiki" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Topic" +msgstr "" + +#. module: wiki +#: field:wiki.wiki.history,write_uid:0 +msgid "Modify By" +msgstr "Modificado por" + +#. module: wiki +#: code:addons/wiki/web/widgets/wikimarkup/__init__.py:1981 +#: field:wiki.wiki,toc:0 +#, python-format +msgid "Table of Contents" +msgstr "Tabla de contenidos" + +#. module: wiki +#: view:wiki.groups:0 view:wiki.wiki.page.open:0 +msgid "Open Wiki Page" +msgstr "" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki_page_open +msgid "wiz open page" +msgstr "" + +#. module: wiki +#: view:wiki.create.menu:0 view:wiki.make.index:0 view:wiki.wiki.page.open:0 +msgid "Cancel" +msgstr "Cancelar" + +#. module: wiki +#: field:wizard.wiki.history.show_diff,file_path:0 +msgid "Diff" +msgstr "Dif." + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Need Review" +msgstr "Necesita revisión" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_review +msgid "Pages Waiting Review" +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.act_wiki_group_open +msgid "Search Page" +msgstr "" + +#~ msgid "Child Groups" +#~ msgstr "Grupos hijos" + +#~ msgid "Wiki Groups Links" +#~ msgstr "Enlaces grupos wiki" + +#~ msgid "" +#~ "The Object name must start with x_ and not contain any special character !" +#~ msgstr "" +#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " +#~ "especial!" + +#~ msgid "Document Management - Wiki" +#~ msgstr "Gestión de documentos - Wiki" + +#~ msgid "Wiki Configuration" +#~ msgstr "Configuración Wiki" + +#~ msgid "Create a Menu" +#~ msgstr "Crear un menú" + +#~ msgid "History Differance" +#~ msgstr "Diferencia de historial" + +#~ msgid "Group Home Page" +#~ msgstr "Página de inicio del grupo" + +#~ msgid "Differences" +#~ msgstr "Diferencias" + +#~ msgid "Last Author" +#~ msgstr "Último autor" + +#~ msgid "Document Management" +#~ msgstr "Gestión de documentos" + +#~ msgid "Invalid XML for View Architecture!" +#~ msgstr "XML inválido para la definición de la vista !" + +#~ msgid "Parent Group" +#~ msgstr "Grupo padre" + +#~ msgid "Wiki Differance" +#~ msgstr "Diferencia Wiki" + +#, python-format +#~ msgid "No action found" +#~ msgstr "No se ha encontrado la acción" + +#~ msgid "Modifications" +#~ msgstr "Modificaciones" + +#~ msgid "History" +#~ msgstr "Historial" + +#~ msgid "Tags" +#~ msgstr "Etiquetas" diff --git a/document_page/i18n/es_CR.po b/document_page/i18n/es_CR.po new file mode 100644 index 00000000000..79f50eaa0c8 --- /dev/null +++ b/document_page/i18n/es_CR.po @@ -0,0 +1,520 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * wiki +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.0dev\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2012-02-08 01:37+0100\n" +"PO-Revision-Date: 2012-02-20 01:10+0000\n" +"Last-Translator: Freddy Gonzalez \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-02-21 05:55+0000\n" +"X-Generator: Launchpad (build 14838)\n" +"Language: \n" + +#. module: wiki +#: field:wiki.groups,template:0 +msgid "Wiki Template" +msgstr "Plantilla Wiki" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki +#: model:ir.ui.menu,name:wiki.menu_action_wiki_wiki +msgid "Wiki Pages" +msgstr "Páginas Wiki" + +#. module: wiki +#: field:wiki.groups,method:0 +msgid "Display Method" +msgstr "Método de visualización" + +#. module: wiki +#: view:wiki.wiki:0 field:wiki.wiki,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_wiki_page_open +#: view:wiki.wiki.page.open:0 +msgid "Open Page" +msgstr "Abrir página" + +#. module: wiki +#: field:wiki.groups,menu_id:0 +msgid "Menu" +msgstr "Menú" + +#. module: wiki +#: field:wiki.wiki,section:0 +msgid "Section" +msgstr "Sección" + +#. module: wiki +#: help:wiki.wiki,toc:0 +msgid "Indicates that this pages have a table of contents or not" +msgstr "Indica si estas páginas tienen una tabla de contenidos o no." + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki_history view:wiki.wiki.history:0 +msgid "Wiki History" +msgstr "Historial Wiki" + +#. module: wiki +#: field:wiki.wiki,minor_edit:0 +msgid "Minor edit" +msgstr "Edición menor" + +#. module: wiki +#: view:wiki.wiki:0 field:wiki.wiki,text_area:0 +msgid "Content" +msgstr "Contenido" + +#. module: wiki +#: field:wiki.wiki,child_ids:0 +msgid "Child Pages" +msgstr "Páginas hijas" + +#. module: wiki +#: field:wiki.wiki,parent_id:0 +msgid "Parent Page" +msgstr "Página padre" + +#. module: wiki +#: view:wiki.wiki:0 field:wiki.wiki,write_uid:0 +msgid "Last Contributor" +msgstr "Último colaborador" + +#. module: wiki +#: field:wiki.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Menú padre" + +#. module: wiki +#: code:addons/wiki/wizard/wiki_make_index.py:52 +#, python-format +msgid "There is no section in this Page" +msgstr "No hay sección en esta página" + +#. module: wiki +#: field:wiki.groups,name:0 view:wiki.wiki:0 field:wiki.wiki,group_id:0 +msgid "Wiki Group" +msgstr "Grupo Wiki" + +#. module: wiki +#: field:wiki.wiki,name:0 +msgid "Title" +msgstr "Título" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_create_menu +msgid "Wizard Create Menu" +msgstr "Asistente crear menú" + +#. module: wiki +#: field:wiki.wiki,history_id:0 +msgid "History Lines" +msgstr "Líneas historial" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Page Content" +msgstr "Contenido página" + +#. module: wiki +#: code:addons/wiki/wiki.py:237 code:addons/wiki/wizard/wiki_make_index.py:52 +#, python-format +msgid "Warning !" +msgstr "¡Aviso!" + +#. module: wiki +#: code:addons/wiki/wiki.py:237 +#, python-format +msgid "There are no changes in revisions" +msgstr "No hay cambios en revisiones" + +#. module: wiki +#: help:wiki.wiki,section:0 +msgid "Use page section code like 1.2.1" +msgstr "Utilice código de sección de la página, por ejemplo 1.2.1" + +#. module: wiki +#: field:wiki.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Nombre menú" + +#. module: wiki +#: field:wiki.groups,notes:0 +msgid "Description" +msgstr "Descripción" + +#. module: wiki +#: field:wiki.wiki,review:0 +msgid "Needs Review" +msgstr "Necesita revisión" + +#. module: wiki +#: help:wiki.wiki,review:0 +msgid "" +"Indicates that this page should be reviewed, raising the attention of other " +"contributors" +msgstr "" +"Indica que esta página debería ser revisada, captando la atención de otros " +"colaboradores." + +#. module: wiki +#: view:wiki.create.menu:0 view:wiki.make.index:0 +msgid "Menu Information" +msgstr "Información del menú" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.act_wiki_wiki_history +msgid "Page History" +msgstr "Historial página" + +#. module: wiki +#: selection:wiki.groups,method:0 +msgid "Tree" +msgstr "Árbol" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Page Template" +msgstr "Plantilla de página" + +#. module: wiki +#: field:wiki.wiki,tags:0 +msgid "Keywords" +msgstr "Palabras clave" + +#. module: wiki +#: model:ir.actions.act_window,help:wiki.action_wiki +msgid "" +"With Wiki Pages you can share ideas and questions with your coworkers. You " +"can create a new document that can be linked to one or several applications " +"(CRM, Sales, etc.). You can use keywords to ease access to your wiki pages. " +"There is a basic wiki editing for text format." +msgstr "" +"Con páginas wiki puede compartir ideas y preguntas con sus compañeros de " +"trabajo. Puede crear un nuevo documento que puede ser relacionado con una o " +"varias aplicaciones (CRM, Ventas, etc.). Puede utilizar palabras clave para " +"facilitar el acceso a sus páginas wiki. Existe un editor básico para el " +"formato texto del wiki." + +#. module: wiki +#: code:addons/wiki/wizard/wiki_show_diff.py:54 +#, python-format +msgid "Warning" +msgstr "Advertencia" + +#. module: wiki +#: help:wiki.groups,home:0 +msgid "Required to select home page if display method is Home Page" +msgstr "" +"Es obligado seleccionar la página de inicio si el método de visualización es " +"Página inicial." + +#. module: wiki +#: field:wiki.wiki.history,create_date:0 +msgid "Date" +msgstr "Fecha" + +#. module: wiki +#: view:wiki.make.index:0 +msgid "Want to create a Index on Selected Pages ? " +msgstr "¿Desea crear un índice sobre las páginas seleccionadas? " + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:wiki.action_view_wiki_show_diff_values +#: view:wizard.wiki.history.show_diff:0 +msgid "Difference" +msgstr "Diferencia" + +#. module: wiki +#: field:wiki.groups,page_ids:0 +msgid "Pages" +msgstr "Páginas" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Group Description" +msgstr "Descripción grupo" + +#. module: wiki +#: view:wiki.wiki.page.open:0 +msgid "Want to open a wiki page? " +msgstr "¿Desea abrir una página wiki? " + +#. module: wiki +#: field:wiki.groups,section:0 +msgid "Make Section ?" +msgstr "¿Crear sección?" + +#. module: wiki +#: field:wiki.wiki.history,text_area:0 +msgid "Text area" +msgstr "Área de texto" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Meta Information" +msgstr "Meta información" + +#. module: wiki +#: field:wiki.wiki,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: wiki +#: view:wiki.groups:0 view:wizard.wiki.history.show_diff:0 +msgid "Notes" +msgstr "Notas" + +#. module: wiki +#: selection:wiki.groups,method:0 +msgid "List" +msgstr "Lista" + +#. module: wiki +#: field:wiki.wiki,summary:0 field:wiki.wiki.history,summary:0 +msgid "Summary" +msgstr "Resumen" + +#. module: wiki +#: field:wiki.groups,create_date:0 +msgid "Created Date" +msgstr "Fecha de creación" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_history +msgid "All Page Histories" +msgstr "Todos los historiales de páginas" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki +msgid "wiki.wiki" +msgstr "wiki.wiki" + +#. module: wiki +#: help:wiki.groups,method:0 +msgid "Define the default behaviour of the menu created on this group" +msgstr "Define el comportamiento por defecto del menú creado en este grupo." + +#. module: wiki +#: view:wizard.wiki.history.show_diff:0 +msgid "Close" +msgstr "Cerrar" + +#. module: wiki +#: model:ir.model,name:wiki.model_wizard_wiki_history_show_diff +msgid "wizard.wiki.history.show_diff" +msgstr "asistente.wiki.historial.mostrar_dif" + +#. module: wiki +#: field:wiki.wiki.history,wiki_id:0 +msgid "Wiki Id" +msgstr "ID Wiki" + +#. module: wiki +#: field:wiki.groups,home:0 selection:wiki.groups,method:0 +msgid "Home Page" +msgstr "Página inicial" + +#. module: wiki +#: help:wiki.wiki,parent_id:0 +msgid "Allows you to link with the other page with in the current topic" +msgstr "Le permite enlazar con la otra página dentro del tema actual." + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Modification Information" +msgstr "Información modificación" + +#. module: wiki +#: help:wiki.wiki,group_id:0 +msgid "Topic, also called Wiki Group" +msgstr "Tema, también denominado Grupo wiki." + +#. module: wiki +#: model:ir.ui.menu,name:wiki.menu_wiki_configuration view:wiki.wiki:0 +msgid "Wiki" +msgstr "Wiki" + +#. module: wiki +#: field:wiki.wiki,write_date:0 +msgid "Modification Date" +msgstr "Fecha de modificación" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Configuration" +msgstr "Configuración" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_make_index +#: model:ir.actions.act_window,name:wiki.action_view_wiki_make_index_values +#: model:ir.model,name:wiki.model_wiki_make_index view:wiki.make.index:0 +msgid "Create Index" +msgstr "Crear índice" + +#. module: wiki +#: code:addons/wiki/wizard/wiki_show_diff.py:54 +#, python-format +msgid "You need to select minimum 1 or maximum 2 history revision!" +msgstr "" +"¡Debe seleccionar como mínimo 1 o como máximo 2 revisiones históricas!" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Group By..." +msgstr "Agrupar por..." + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_create_menu +#: view:wiki.create.menu:0 view:wiki.groups:0 view:wiki.make.index:0 +msgid "Create Menu" +msgstr "Crear menú" + +#. module: wiki +#: field:wiki.wiki.history,minor_edit:0 +msgid "This is a major edit ?" +msgstr "¿Es ésta una edición mayor?" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_groups +#: model:ir.actions.act_window,name:wiki.action_wiki_groups_browse +#: model:ir.model,name:wiki.model_wiki_groups +#: model:ir.ui.menu,name:wiki.menu_action_wiki_groups view:wiki.groups:0 +msgid "Wiki Groups" +msgstr "Grupos Wiki" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Topic" +msgstr "Tema" + +#. module: wiki +#: field:wiki.wiki.history,write_uid:0 +msgid "Modify By" +msgstr "Modificado por" + +#. module: wiki +#: code:addons/wiki/web/widgets/wikimarkup/__init__.py:1981 +#: field:wiki.wiki,toc:0 +#, python-format +msgid "Table of Contents" +msgstr "Tabla de contenido" + +#. module: wiki +#: view:wiki.groups:0 view:wiki.wiki.page.open:0 +msgid "Open Wiki Page" +msgstr "Abrir página wiki" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki_page_open +msgid "wiz open page" +msgstr "asistente abrir página" + +#. module: wiki +#: view:wiki.create.menu:0 view:wiki.make.index:0 view:wiki.wiki.page.open:0 +msgid "Cancel" +msgstr "Cancelar" + +#. module: wiki +#: field:wizard.wiki.history.show_diff,file_path:0 +msgid "Diff" +msgstr "Dif." + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Need Review" +msgstr "Necesita revisión" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_review +msgid "Pages Waiting Review" +msgstr "Páginas esperando revisión" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.act_wiki_group_open +msgid "Search Page" +msgstr "Buscar página" + +#~ msgid "" +#~ "The Object name must start with x_ and not contain any special character !" +#~ msgstr "" +#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " +#~ "especial!" + +#~ msgid "Wiki Groups Links" +#~ msgstr "Enlaces grupos wiki" + +#~ msgid "Child Groups" +#~ msgstr "Grupos hijos" + +#~ msgid "Wiki Configuration" +#~ msgstr "Configuración Wiki" + +#~ msgid "Document Management - Wiki" +#~ msgstr "Gestión de documentos - Wiki" + +#~ msgid "Create a Menu" +#~ msgstr "Crear un menú" + +#~ msgid "History Differance" +#~ msgstr "Diferencia historial" + +#~ msgid "Group Home Page" +#~ msgstr "Página de inicio del grupo" + +#~ msgid "Last Author" +#~ msgstr "Último autor" + +#~ msgid "Differences" +#~ msgstr "Diferencias" + +#~ msgid "Document Management" +#~ msgstr "Gestión de documentos" + +#~ msgid "Invalid XML for View Architecture!" +#~ msgstr "¡XML inválido para la definición de la vista!" + +#~ msgid "Parent Group" +#~ msgstr "Grupo padre" + +#~ msgid "Wiki Differance" +#~ msgstr "Diferencia Wiki" + +#, python-format +#~ msgid "No action found" +#~ msgstr "No se ha encontrado la acción" + +#~ msgid "Modifications" +#~ msgstr "Modificaciones" + +#~ msgid "History" +#~ msgstr "Historial" + +#~ msgid "Tags" +#~ msgstr "Etiquetas" + +#~ msgid "Invalid model name in the action definition." +#~ msgstr "Nombre de modelo no válido en la definición de acción." + +#~ msgid "" +#~ "\n" +#~ "The base module to manage documents(wiki)\n" +#~ "\n" +#~ "keep track for the wiki groups, pages, and history\n" +#~ " " +#~ msgstr "" +#~ "\n" +#~ "El módulo base para gestionar documentos (wiki)\n" +#~ "\n" +#~ "gestione los grupos, páginas e historial del wiki\n" +#~ " " diff --git a/document_page/i18n/es_MX.po b/document_page/i18n/es_MX.po new file mode 100644 index 00000000000..13ac328d21e --- /dev/null +++ b/document_page/i18n/es_MX.po @@ -0,0 +1,535 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * wiki +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.0dev\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2011-01-11 11:16+0000\n" +"PO-Revision-Date: 2011-01-13 02:46+0000\n" +"Last-Translator: Carlos @ smile.fr \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-09-05 05:38+0000\n" +"X-Generator: Launchpad (build 13830)\n" + +#. module: wiki +#: field:wiki.groups,template:0 +msgid "Wiki Template" +msgstr "Plantilla Wiki" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki +#: model:ir.ui.menu,name:wiki.menu_action_wiki_wiki +msgid "Wiki Pages" +msgstr "Páginas Wiki" + +#. module: wiki +#: field:wiki.groups,method:0 +msgid "Display Method" +msgstr "Método de visualización" + +#. module: wiki +#: view:wiki.wiki:0 +#: field:wiki.wiki,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_wiki_page_open +#: view:wiki.wiki.page.open:0 +msgid "Open Page" +msgstr "Abrir página" + +#. module: wiki +#: field:wiki.groups,menu_id:0 +msgid "Menu" +msgstr "Menú" + +#. module: wiki +#: field:wiki.wiki,section:0 +msgid "Section" +msgstr "Sección" + +#. module: wiki +#: help:wiki.wiki,toc:0 +msgid "Indicates that this pages have a table of contents or not" +msgstr "Indica si estas páginas tienen una tabla de contenidos o no." + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki_history +#: view:wiki.wiki.history:0 +msgid "Wiki History" +msgstr "Historial Wiki" + +#. module: wiki +#: field:wiki.wiki,minor_edit:0 +msgid "Minor edit" +msgstr "Edición menor" + +#. module: wiki +#: view:wiki.wiki:0 +#: field:wiki.wiki,text_area:0 +msgid "Content" +msgstr "Contenido" + +#. module: wiki +#: field:wiki.wiki,child_ids:0 +msgid "Child Pages" +msgstr "Páginas hijas" + +#. module: wiki +#: field:wiki.wiki,parent_id:0 +msgid "Parent Page" +msgstr "Página padre" + +#. module: wiki +#: view:wiki.wiki:0 +#: field:wiki.wiki,write_uid:0 +msgid "Last Contributor" +msgstr "Último colaborador" + +#. module: wiki +#: field:wiki.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Menú padre" + +#. module: wiki +#: help:wiki.wiki,group_id:0 +msgid "Topic, also called Wiki Group" +msgstr "Tema, también denominado Grupo wiki." + +#. module: wiki +#: field:wiki.groups,name:0 +#: view:wiki.wiki:0 +#: field:wiki.wiki,group_id:0 +msgid "Wiki Group" +msgstr "Grupo Wiki" + +#. module: wiki +#: field:wiki.wiki,name:0 +msgid "Title" +msgstr "Título" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_create_menu +msgid "Wizard Create Menu" +msgstr "Asistente crear menú" + +#. module: wiki +#: field:wiki.wiki,history_id:0 +msgid "History Lines" +msgstr "Líneas historial" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Page Content" +msgstr "Contenido página" + +#. module: wiki +#: code:addons/wiki/wiki.py:236 +#, python-format +msgid "Warning !" +msgstr "¡Aviso!" + +#. module: wiki +#: code:addons/wiki/wiki.py:236 +#, python-format +msgid "There are no changes in revisions" +msgstr "No hay cambios en revisiones" + +#. module: wiki +#: model:ir.module.module,shortdesc:wiki.module_meta_information +msgid "Document Management - Wiki" +msgstr "Gestión de documentos - Wiki" + +#. module: wiki +#: field:wiki.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Nombre menú" + +#. module: wiki +#: field:wiki.groups,notes:0 +msgid "Description" +msgstr "Descripción" + +#. module: wiki +#: field:wiki.wiki,review:0 +msgid "Needs Review" +msgstr "Necesita revisión" + +#. module: wiki +#: help:wiki.wiki,review:0 +msgid "" +"Indicates that this page should be reviewed, raising the attention of other " +"contributors" +msgstr "" +"Indica que esta página debería ser revisada, captando la atención de otros " +"colaboradores." + +#. module: wiki +#: view:wiki.create.menu:0 +#: view:wiki.make.index:0 +msgid "Menu Information" +msgstr "Información del menú" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.act_wiki_wiki_history +msgid "Page History" +msgstr "Historial página" + +#. module: wiki +#: selection:wiki.groups,method:0 +msgid "Tree" +msgstr "Árbol" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Page Template" +msgstr "Plantilla de página" + +#. module: wiki +#: field:wiki.wiki,tags:0 +msgid "Keywords" +msgstr "Palabras clave" + +#. module: wiki +#: model:ir.actions.act_window,help:wiki.action_wiki +msgid "" +"With Wiki Pages you can share ideas and questions with your coworkers. You " +"can create a new document that can be linked to one or several applications " +"(CRM, Sales, etc.). You can use keywords to ease access to your wiki pages. " +"There is a basic wiki editing for text format." +msgstr "" +"Con páginas wiki puede compartir ideas y preguntas con sus compañeros de " +"trabajo. Puede crear un nuevo documento que puede ser relacionado con una o " +"varias aplicaciones (CRM, Ventas, etc.). Puede utilizar palabras clave para " +"facilitar el acceso a sus páginas wiki. Existe un editor básico para el " +"formato texto del wiki." + +#. module: wiki +#: code:addons/wiki/wizard/wiki_show_diff.py:54 +#, python-format +msgid "Warning" +msgstr "Advertencia" + +#. module: wiki +#: field:wiki.wiki,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: wiki +#: field:wiki.wiki.history,create_date:0 +msgid "Date" +msgstr "Fecha" + +#. module: wiki +#: view:wiki.make.index:0 +msgid "Want to create a Index on Selected Pages ? " +msgstr "¿Desea crear un índice sobre las páginas seleccionadas? " + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:wiki.action_view_wiki_show_diff_values +#: view:wizard.wiki.history.show_diff:0 +msgid "Difference" +msgstr "Diferencia" + +#. module: wiki +#: field:wiki.groups,page_ids:0 +msgid "Pages" +msgstr "Páginas" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Group Description" +msgstr "Descripción grupo" + +#. module: wiki +#: help:wiki.wiki,section:0 +msgid "Use page section code like 1.2.1" +msgstr "Utilice código de sección de la página, por ejemplo 1.2.1" + +#. module: wiki +#: view:wiki.wiki.page.open:0 +msgid "Want to open a wiki page? " +msgstr "¿Desea abrir una página wiki? " + +#. module: wiki +#: field:wiki.groups,section:0 +msgid "Make Section ?" +msgstr "¿Crear sección?" + +#. module: wiki +#: field:wiki.wiki.history,text_area:0 +msgid "Text area" +msgstr "Área de texto" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Meta Information" +msgstr "Meta información" + +#. module: wiki +#: model:ir.module.module,description:wiki.module_meta_information +msgid "" +"\n" +"The base module to manage documents(wiki)\n" +"\n" +"keep track for the wiki groups, pages, and history\n" +" " +msgstr "" +"\n" +"El módulo base para gestionar documentos (wiki)\n" +"\n" +"gestione los grupos, páginas e historial del wiki\n" +" " + +#. module: wiki +#: view:wiki.groups:0 +#: view:wizard.wiki.history.show_diff:0 +msgid "Notes" +msgstr "Notas" + +#. module: wiki +#: help:wiki.groups,home:0 +msgid "Required to select home page if display method is Home Page" +msgstr "" +"Es obligado seleccionar la página de inicio si el método de visualización es " +"Página inicial." + +#. module: wiki +#: selection:wiki.groups,method:0 +msgid "List" +msgstr "Lista" + +#. module: wiki +#: field:wiki.wiki,summary:0 +#: field:wiki.wiki.history,summary:0 +msgid "Summary" +msgstr "Resumen" + +#. module: wiki +#: field:wiki.groups,create_date:0 +msgid "Created Date" +msgstr "Fecha de creación" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_history +msgid "All Page Histories" +msgstr "Todos los historiales de páginas" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki +msgid "wiki.wiki" +msgstr "wiki.wiki" + +#. module: wiki +#: help:wiki.groups,method:0 +msgid "Define the default behaviour of the menu created on this group" +msgstr "Define el comportamiento por defecto del menú creado en este grupo." + +#. module: wiki +#: view:wizard.wiki.history.show_diff:0 +msgid "Close" +msgstr "Cerrar" + +#. module: wiki +#: model:ir.model,name:wiki.model_wizard_wiki_history_show_diff +msgid "wizard.wiki.history.show_diff" +msgstr "asistente.wiki.historial.mostrar_dif" + +#. module: wiki +#: field:wiki.wiki.history,wiki_id:0 +msgid "Wiki Id" +msgstr "ID Wiki" + +#. module: wiki +#: field:wiki.groups,home:0 +#: selection:wiki.groups,method:0 +msgid "Home Page" +msgstr "Página inicial" + +#. module: wiki +#: help:wiki.wiki,parent_id:0 +msgid "Allows you to link with the other page with in the current topic" +msgstr "Le permite enlazar con la otra página dentro del tema actual." + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Modification Information" +msgstr "Información modificación" + +#. module: wiki +#: model:ir.ui.menu,name:wiki.menu_wiki_configuration +#: view:wiki.wiki:0 +msgid "Wiki" +msgstr "Wiki" + +#. module: wiki +#: field:wiki.wiki,write_date:0 +msgid "Modification Date" +msgstr "Fecha de modificación" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Configuration" +msgstr "Configuración" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_make_index +#: model:ir.actions.act_window,name:wiki.action_view_wiki_make_index_values +#: model:ir.model,name:wiki.model_wiki_make_index +#: view:wiki.make.index:0 +msgid "Create Index" +msgstr "Crear índice" + +#. module: wiki +#: code:addons/wiki/wizard/wiki_show_diff.py:54 +#, python-format +msgid "You need to select minimum 1 or maximum 2 history revision!" +msgstr "" +"¡Debe seleccionar como mínimo 1 o como máximo 2 revisiones históricas!" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Group By..." +msgstr "Agrupar por..." + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_create_menu +#: view:wiki.create.menu:0 +#: view:wiki.groups:0 +#: view:wiki.make.index:0 +msgid "Create Menu" +msgstr "Crear menú" + +#. module: wiki +#: field:wiki.wiki.history,minor_edit:0 +msgid "This is a major edit ?" +msgstr "¿Es ésta una edición mayor?" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_groups +#: model:ir.actions.act_window,name:wiki.action_wiki_groups_browse +#: model:ir.model,name:wiki.model_wiki_groups +#: model:ir.ui.menu,name:wiki.menu_action_wiki_groups +#: view:wiki.groups:0 +msgid "Wiki Groups" +msgstr "Grupos Wiki" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Topic" +msgstr "Tema" + +#. module: wiki +#: field:wiki.wiki.history,write_uid:0 +msgid "Modify By" +msgstr "Modificado por" + +#. module: wiki +#: code:addons/wiki/web/widgets/wikimarkup/__init__.py:1981 +#: field:wiki.wiki,toc:0 +#, python-format +msgid "Table of Contents" +msgstr "Tabla de contenido" + +#. module: wiki +#: view:wiki.groups:0 +#: view:wiki.wiki.page.open:0 +msgid "Open Wiki Page" +msgstr "Abrir página wiki" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki_page_open +msgid "wiz open page" +msgstr "asistente abrir página" + +#. module: wiki +#: view:wiki.create.menu:0 +#: view:wiki.make.index:0 +#: view:wiki.wiki.page.open:0 +msgid "Cancel" +msgstr "Cancelar" + +#. module: wiki +#: field:wizard.wiki.history.show_diff,file_path:0 +msgid "Diff" +msgstr "Dif." + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Need Review" +msgstr "Necesita revisión" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_review +msgid "Pages Waiting Review" +msgstr "Páginas esperando revisión" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.act_wiki_group_open +msgid "Search Page" +msgstr "Buscar página" + +#~ msgid "" +#~ "The Object name must start with x_ and not contain any special character !" +#~ msgstr "" +#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " +#~ "especial!" + +#~ msgid "Wiki Groups Links" +#~ msgstr "Enlaces grupos wiki" + +#~ msgid "Child Groups" +#~ msgstr "Grupos hijos" + +#~ msgid "Wiki Configuration" +#~ msgstr "Configuración Wiki" + +#~ msgid "Create a Menu" +#~ msgstr "Crear un menú" + +#~ msgid "History Differance" +#~ msgstr "Diferencia historial" + +#~ msgid "Group Home Page" +#~ msgstr "Página de inicio del grupo" + +#~ msgid "Last Author" +#~ msgstr "Último autor" + +#~ msgid "Differences" +#~ msgstr "Diferencias" + +#~ msgid "Document Management" +#~ msgstr "Gestión de documentos" + +#~ msgid "Invalid XML for View Architecture!" +#~ msgstr "¡XML inválido para la definición de la vista!" + +#~ msgid "Parent Group" +#~ msgstr "Grupo padre" + +#~ msgid "Wiki Differance" +#~ msgstr "Diferencia Wiki" + +#, python-format +#~ msgid "No action found" +#~ msgstr "No se ha encontrado la acción" + +#~ msgid "Modifications" +#~ msgstr "Modificaciones" + +#~ msgid "History" +#~ msgstr "Historial" + +#~ msgid "Tags" +#~ msgstr "Etiquetas" + +#~ msgid "Invalid model name in the action definition." +#~ msgstr "Nombre de modelo no válido en la definición de acción." diff --git a/document_page/i18n/es_VE.po b/document_page/i18n/es_VE.po new file mode 100644 index 00000000000..13ac328d21e --- /dev/null +++ b/document_page/i18n/es_VE.po @@ -0,0 +1,535 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * wiki +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 6.0dev\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2011-01-11 11:16+0000\n" +"PO-Revision-Date: 2011-01-13 02:46+0000\n" +"Last-Translator: Carlos @ smile.fr \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-09-05 05:38+0000\n" +"X-Generator: Launchpad (build 13830)\n" + +#. module: wiki +#: field:wiki.groups,template:0 +msgid "Wiki Template" +msgstr "Plantilla Wiki" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki +#: model:ir.ui.menu,name:wiki.menu_action_wiki_wiki +msgid "Wiki Pages" +msgstr "Páginas Wiki" + +#. module: wiki +#: field:wiki.groups,method:0 +msgid "Display Method" +msgstr "Método de visualización" + +#. module: wiki +#: view:wiki.wiki:0 +#: field:wiki.wiki,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_wiki_page_open +#: view:wiki.wiki.page.open:0 +msgid "Open Page" +msgstr "Abrir página" + +#. module: wiki +#: field:wiki.groups,menu_id:0 +msgid "Menu" +msgstr "Menú" + +#. module: wiki +#: field:wiki.wiki,section:0 +msgid "Section" +msgstr "Sección" + +#. module: wiki +#: help:wiki.wiki,toc:0 +msgid "Indicates that this pages have a table of contents or not" +msgstr "Indica si estas páginas tienen una tabla de contenidos o no." + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki_history +#: view:wiki.wiki.history:0 +msgid "Wiki History" +msgstr "Historial Wiki" + +#. module: wiki +#: field:wiki.wiki,minor_edit:0 +msgid "Minor edit" +msgstr "Edición menor" + +#. module: wiki +#: view:wiki.wiki:0 +#: field:wiki.wiki,text_area:0 +msgid "Content" +msgstr "Contenido" + +#. module: wiki +#: field:wiki.wiki,child_ids:0 +msgid "Child Pages" +msgstr "Páginas hijas" + +#. module: wiki +#: field:wiki.wiki,parent_id:0 +msgid "Parent Page" +msgstr "Página padre" + +#. module: wiki +#: view:wiki.wiki:0 +#: field:wiki.wiki,write_uid:0 +msgid "Last Contributor" +msgstr "Último colaborador" + +#. module: wiki +#: field:wiki.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Menú padre" + +#. module: wiki +#: help:wiki.wiki,group_id:0 +msgid "Topic, also called Wiki Group" +msgstr "Tema, también denominado Grupo wiki." + +#. module: wiki +#: field:wiki.groups,name:0 +#: view:wiki.wiki:0 +#: field:wiki.wiki,group_id:0 +msgid "Wiki Group" +msgstr "Grupo Wiki" + +#. module: wiki +#: field:wiki.wiki,name:0 +msgid "Title" +msgstr "Título" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_create_menu +msgid "Wizard Create Menu" +msgstr "Asistente crear menú" + +#. module: wiki +#: field:wiki.wiki,history_id:0 +msgid "History Lines" +msgstr "Líneas historial" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Page Content" +msgstr "Contenido página" + +#. module: wiki +#: code:addons/wiki/wiki.py:236 +#, python-format +msgid "Warning !" +msgstr "¡Aviso!" + +#. module: wiki +#: code:addons/wiki/wiki.py:236 +#, python-format +msgid "There are no changes in revisions" +msgstr "No hay cambios en revisiones" + +#. module: wiki +#: model:ir.module.module,shortdesc:wiki.module_meta_information +msgid "Document Management - Wiki" +msgstr "Gestión de documentos - Wiki" + +#. module: wiki +#: field:wiki.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Nombre menú" + +#. module: wiki +#: field:wiki.groups,notes:0 +msgid "Description" +msgstr "Descripción" + +#. module: wiki +#: field:wiki.wiki,review:0 +msgid "Needs Review" +msgstr "Necesita revisión" + +#. module: wiki +#: help:wiki.wiki,review:0 +msgid "" +"Indicates that this page should be reviewed, raising the attention of other " +"contributors" +msgstr "" +"Indica que esta página debería ser revisada, captando la atención de otros " +"colaboradores." + +#. module: wiki +#: view:wiki.create.menu:0 +#: view:wiki.make.index:0 +msgid "Menu Information" +msgstr "Información del menú" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.act_wiki_wiki_history +msgid "Page History" +msgstr "Historial página" + +#. module: wiki +#: selection:wiki.groups,method:0 +msgid "Tree" +msgstr "Árbol" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Page Template" +msgstr "Plantilla de página" + +#. module: wiki +#: field:wiki.wiki,tags:0 +msgid "Keywords" +msgstr "Palabras clave" + +#. module: wiki +#: model:ir.actions.act_window,help:wiki.action_wiki +msgid "" +"With Wiki Pages you can share ideas and questions with your coworkers. You " +"can create a new document that can be linked to one or several applications " +"(CRM, Sales, etc.). You can use keywords to ease access to your wiki pages. " +"There is a basic wiki editing for text format." +msgstr "" +"Con páginas wiki puede compartir ideas y preguntas con sus compañeros de " +"trabajo. Puede crear un nuevo documento que puede ser relacionado con una o " +"varias aplicaciones (CRM, Ventas, etc.). Puede utilizar palabras clave para " +"facilitar el acceso a sus páginas wiki. Existe un editor básico para el " +"formato texto del wiki." + +#. module: wiki +#: code:addons/wiki/wizard/wiki_show_diff.py:54 +#, python-format +msgid "Warning" +msgstr "Advertencia" + +#. module: wiki +#: field:wiki.wiki,create_date:0 +msgid "Created on" +msgstr "Creado en" + +#. module: wiki +#: field:wiki.wiki.history,create_date:0 +msgid "Date" +msgstr "Fecha" + +#. module: wiki +#: view:wiki.make.index:0 +msgid "Want to create a Index on Selected Pages ? " +msgstr "¿Desea crear un índice sobre las páginas seleccionadas? " + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:wiki.action_view_wiki_show_diff_values +#: view:wizard.wiki.history.show_diff:0 +msgid "Difference" +msgstr "Diferencia" + +#. module: wiki +#: field:wiki.groups,page_ids:0 +msgid "Pages" +msgstr "Páginas" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Group Description" +msgstr "Descripción grupo" + +#. module: wiki +#: help:wiki.wiki,section:0 +msgid "Use page section code like 1.2.1" +msgstr "Utilice código de sección de la página, por ejemplo 1.2.1" + +#. module: wiki +#: view:wiki.wiki.page.open:0 +msgid "Want to open a wiki page? " +msgstr "¿Desea abrir una página wiki? " + +#. module: wiki +#: field:wiki.groups,section:0 +msgid "Make Section ?" +msgstr "¿Crear sección?" + +#. module: wiki +#: field:wiki.wiki.history,text_area:0 +msgid "Text area" +msgstr "Área de texto" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Meta Information" +msgstr "Meta información" + +#. module: wiki +#: model:ir.module.module,description:wiki.module_meta_information +msgid "" +"\n" +"The base module to manage documents(wiki)\n" +"\n" +"keep track for the wiki groups, pages, and history\n" +" " +msgstr "" +"\n" +"El módulo base para gestionar documentos (wiki)\n" +"\n" +"gestione los grupos, páginas e historial del wiki\n" +" " + +#. module: wiki +#: view:wiki.groups:0 +#: view:wizard.wiki.history.show_diff:0 +msgid "Notes" +msgstr "Notas" + +#. module: wiki +#: help:wiki.groups,home:0 +msgid "Required to select home page if display method is Home Page" +msgstr "" +"Es obligado seleccionar la página de inicio si el método de visualización es " +"Página inicial." + +#. module: wiki +#: selection:wiki.groups,method:0 +msgid "List" +msgstr "Lista" + +#. module: wiki +#: field:wiki.wiki,summary:0 +#: field:wiki.wiki.history,summary:0 +msgid "Summary" +msgstr "Resumen" + +#. module: wiki +#: field:wiki.groups,create_date:0 +msgid "Created Date" +msgstr "Fecha de creación" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_history +msgid "All Page Histories" +msgstr "Todos los historiales de páginas" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki +msgid "wiki.wiki" +msgstr "wiki.wiki" + +#. module: wiki +#: help:wiki.groups,method:0 +msgid "Define the default behaviour of the menu created on this group" +msgstr "Define el comportamiento por defecto del menú creado en este grupo." + +#. module: wiki +#: view:wizard.wiki.history.show_diff:0 +msgid "Close" +msgstr "Cerrar" + +#. module: wiki +#: model:ir.model,name:wiki.model_wizard_wiki_history_show_diff +msgid "wizard.wiki.history.show_diff" +msgstr "asistente.wiki.historial.mostrar_dif" + +#. module: wiki +#: field:wiki.wiki.history,wiki_id:0 +msgid "Wiki Id" +msgstr "ID Wiki" + +#. module: wiki +#: field:wiki.groups,home:0 +#: selection:wiki.groups,method:0 +msgid "Home Page" +msgstr "Página inicial" + +#. module: wiki +#: help:wiki.wiki,parent_id:0 +msgid "Allows you to link with the other page with in the current topic" +msgstr "Le permite enlazar con la otra página dentro del tema actual." + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Modification Information" +msgstr "Información modificación" + +#. module: wiki +#: model:ir.ui.menu,name:wiki.menu_wiki_configuration +#: view:wiki.wiki:0 +msgid "Wiki" +msgstr "Wiki" + +#. module: wiki +#: field:wiki.wiki,write_date:0 +msgid "Modification Date" +msgstr "Fecha de modificación" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Configuration" +msgstr "Configuración" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_make_index +#: model:ir.actions.act_window,name:wiki.action_view_wiki_make_index_values +#: model:ir.model,name:wiki.model_wiki_make_index +#: view:wiki.make.index:0 +msgid "Create Index" +msgstr "Crear índice" + +#. module: wiki +#: code:addons/wiki/wizard/wiki_show_diff.py:54 +#, python-format +msgid "You need to select minimum 1 or maximum 2 history revision!" +msgstr "" +"¡Debe seleccionar como mínimo 1 o como máximo 2 revisiones históricas!" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Group By..." +msgstr "Agrupar por..." + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_create_menu +#: view:wiki.create.menu:0 +#: view:wiki.groups:0 +#: view:wiki.make.index:0 +msgid "Create Menu" +msgstr "Crear menú" + +#. module: wiki +#: field:wiki.wiki.history,minor_edit:0 +msgid "This is a major edit ?" +msgstr "¿Es ésta una edición mayor?" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_groups +#: model:ir.actions.act_window,name:wiki.action_wiki_groups_browse +#: model:ir.model,name:wiki.model_wiki_groups +#: model:ir.ui.menu,name:wiki.menu_action_wiki_groups +#: view:wiki.groups:0 +msgid "Wiki Groups" +msgstr "Grupos Wiki" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Topic" +msgstr "Tema" + +#. module: wiki +#: field:wiki.wiki.history,write_uid:0 +msgid "Modify By" +msgstr "Modificado por" + +#. module: wiki +#: code:addons/wiki/web/widgets/wikimarkup/__init__.py:1981 +#: field:wiki.wiki,toc:0 +#, python-format +msgid "Table of Contents" +msgstr "Tabla de contenido" + +#. module: wiki +#: view:wiki.groups:0 +#: view:wiki.wiki.page.open:0 +msgid "Open Wiki Page" +msgstr "Abrir página wiki" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki_page_open +msgid "wiz open page" +msgstr "asistente abrir página" + +#. module: wiki +#: view:wiki.create.menu:0 +#: view:wiki.make.index:0 +#: view:wiki.wiki.page.open:0 +msgid "Cancel" +msgstr "Cancelar" + +#. module: wiki +#: field:wizard.wiki.history.show_diff,file_path:0 +msgid "Diff" +msgstr "Dif." + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Need Review" +msgstr "Necesita revisión" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_review +msgid "Pages Waiting Review" +msgstr "Páginas esperando revisión" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.act_wiki_group_open +msgid "Search Page" +msgstr "Buscar página" + +#~ msgid "" +#~ "The Object name must start with x_ and not contain any special character !" +#~ msgstr "" +#~ "¡El nombre del objeto debe empezar con x_ y no contener ningún carácter " +#~ "especial!" + +#~ msgid "Wiki Groups Links" +#~ msgstr "Enlaces grupos wiki" + +#~ msgid "Child Groups" +#~ msgstr "Grupos hijos" + +#~ msgid "Wiki Configuration" +#~ msgstr "Configuración Wiki" + +#~ msgid "Create a Menu" +#~ msgstr "Crear un menú" + +#~ msgid "History Differance" +#~ msgstr "Diferencia historial" + +#~ msgid "Group Home Page" +#~ msgstr "Página de inicio del grupo" + +#~ msgid "Last Author" +#~ msgstr "Último autor" + +#~ msgid "Differences" +#~ msgstr "Diferencias" + +#~ msgid "Document Management" +#~ msgstr "Gestión de documentos" + +#~ msgid "Invalid XML for View Architecture!" +#~ msgstr "¡XML inválido para la definición de la vista!" + +#~ msgid "Parent Group" +#~ msgstr "Grupo padre" + +#~ msgid "Wiki Differance" +#~ msgstr "Diferencia Wiki" + +#, python-format +#~ msgid "No action found" +#~ msgstr "No se ha encontrado la acción" + +#~ msgid "Modifications" +#~ msgstr "Modificaciones" + +#~ msgid "History" +#~ msgstr "Historial" + +#~ msgid "Tags" +#~ msgstr "Etiquetas" + +#~ msgid "Invalid model name in the action definition." +#~ msgstr "Nombre de modelo no válido en la definición de acción." diff --git a/document_page/i18n/et.po b/document_page/i18n/et.po new file mode 100644 index 00000000000..f09acea6d97 --- /dev/null +++ b/document_page/i18n/et.po @@ -0,0 +1,269 @@ +# Estonian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Estonian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menüü" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Sisu" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Tiitel" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Menüü info" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Kuupäev" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Lehekülgi" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Ülemmenüü" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Muutmise kuupäev" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Loodud" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Kokkuvõte" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Menüü nimi" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Loo menüü" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Loobu" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Erinevus" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/fi.po b/document_page/i18n/fi.po new file mode 100644 index 00000000000..f947c62e20c --- /dev/null +++ b/document_page/i18n/fi.po @@ -0,0 +1,269 @@ +# Finnish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2013-11-18 05:42+0000\n" +"Last-Translator: Harri Luuppala \n" +"Language-Team: Finnish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Kategoria" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Viimeisin tiedon lisääjä" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Tekijä" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Valikko" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Dokumentin sivu" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Sivuhistoria" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Sisältö" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Ryhmittely.." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Malli" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "käytetään sisältömallina kaikille tämän kategorian uusille sivuille." + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Otsikko" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Menun luonti velho" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Tyyppi" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Muuttaja" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "tai" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Sivun tyyppi" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Valikon tiedot" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Dokumentin sivuhistoria" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Sivujen historia" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Päivämäärä" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Ero" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Sivut" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Kategoriat" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Nimi" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Ylätason valikko" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Muokkauspäivä" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Luotu" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "Valitse tasan yksi tai kaksi historiaversiota vertailuun." + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Sivuhistoria" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Yhteenveto" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "esim. Olipa kerran..." + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Dokumentin historia" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Valikon nimi" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Sivu" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Historia" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Luo valikko" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Näytetty sisältö" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Varoitus!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Peruuta" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Erot" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Dokumenttityyppi" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/fr.po b/document_page/i18n/fr.po new file mode 100644 index 00000000000..c0afb704380 --- /dev/null +++ b/document_page/i18n/fr.po @@ -0,0 +1,280 @@ +# French translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2013-08-22 07:35+0000\n" +"Last-Translator: Florian Hatat \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Catégorie" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Dernier contributeur" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Auteur" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menu" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Gestion documentaire de pages Web" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Historique de la page" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Contenu" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Grouper par ..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Modèle" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" +"Ceci sera utilisé comment contenu initial de toutes les nouvelles pages de " +"cette catégorie." + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Titre" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Menu de création d'un wizard" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Type" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Modifié par" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "ou" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Type de page" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Menu Information" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Historique du document" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Historique des pages" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "Il n'y a aucun changement dans les révisions." + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Date" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Différence" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Pages" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Catégories" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Nom" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Menu Parent" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Date de modification" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Créé le" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" +"Vous devez sélectionner au minimum une et au maximum deux versions " +"d'historique" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Historique de la page" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Sommaire" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "Ex: Il était une fois..." + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Historique du document" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Nom du menu" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Page" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Historique" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" +"

    \n" +"Cliquez pour créer une nouvelle page Web.\n" +"

    \n" +" " + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Créer un menu" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Contenu affiché" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Avertissement!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Annuler" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Comparer" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Type de document" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Enfant" + +#~ msgid "Create web pages" +#~ msgstr "Créer des pages Web" diff --git a/document_page/i18n/gl.po b/document_page/i18n/gl.po new file mode 100644 index 00000000000..4b2ffa131a1 --- /dev/null +++ b/document_page/i18n/gl.po @@ -0,0 +1,269 @@ +# Galician translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menú" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Contido" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Título" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Información do menú" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Data" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Páxinas" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Menú principal" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Data de modificación" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Creado o" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Resumo" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Nome do menú" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Crear menú" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Cancelar" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Diff" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/hr.po b/document_page/i18n/hr.po new file mode 100644 index 00000000000..fca31882d92 --- /dev/null +++ b/document_page/i18n/hr.po @@ -0,0 +1,274 @@ +# Croatian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2013-03-14 12:05+0000\n" +"Last-Translator: Davor Bojkić \n" +"Language-Team: Croatian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Kategorija" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Zadnji doprinos" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Izbornik" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Stranica dokumenata" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Povijest stranice" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Sadržaj" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Grupiraj po..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Predložak" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" +"ovo će biti korišteno kao predložak sadržaja za sve nove stranice u ovoj " +"kategoriji." + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Naslov" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Wizard Create Menu" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Tip" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Izmjenio" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "ili" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Tip stranice" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Informacije o izborniku" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Povijest stranica Dokumenata" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Povijest stranice" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "Nema izmjena u revizijama" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Datum" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Razlika" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Stranice" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Kategorije" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Naziv" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Nadređeni izbornik" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Datum promjene" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Datum kreiranja" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "Morate odabrati minimum jednu ili maksimum dvije revizije!" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Povijest stranica" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Sažetak" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "npr. Bilo jednom..." + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Povijest dokumenata" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Naziv izbornika" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Stranica" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Povijest" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Kreiraj izbornik" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Prikazani sadržaj" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Upozorenje!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Odustani" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Razlika" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Vrsta dokumenta" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Podređeni" + +#~ msgid "Create web pages" +#~ msgstr "Kreiraj web stranice" diff --git a/document_page/i18n/hu.po b/document_page/i18n/hu.po new file mode 100644 index 00000000000..6cf5546f822 --- /dev/null +++ b/document_page/i18n/hu.po @@ -0,0 +1,279 @@ +# Hungarian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2013-10-12 11:51+0000\n" +"Last-Translator: krnkris \n" +"Language-Team: Hungarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Megjelenített tartalom" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Kategória" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Utolsó közreműködő" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Szerző" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menü" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Documentum oldal" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Oldal előzmény" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Tartalom" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Csoportosítás..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Sablon" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" +"ez mint tartalom sablon lesz használva az összes ilyen kategóriájú új " +"oldalhoz." + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Pozíció" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Menü létrehozás varázsló" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Típus" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Által módosítva" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "vagy" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Oldal típus" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Menü infrormáció" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Dokumantum oldal előzmény" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Oldal előzmény" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "Az előzményekben nem történt változtatás." + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Dátum" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Különbség" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Oldalok" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Kategóriák" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Név" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Főmenü" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Módosítás dátuma" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Létrehozás dátuma" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" +"Ki kell választani minimum egy vagy maximum kettő átvizsgálás előzményt." + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Oldal előzmény" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Összegzés" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "pl. Egyszer volt..." + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Dokumentumok előzménye" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Menü" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Oldal" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Előzmény" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" +"

    \n" +" Kattintson új weboldal létrehozásához.\n" +"

    \n" +" " + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Menü létrehozás" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Figyelem!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Mégsem" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Különbség" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Dokumentumtípus" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Alárendelt" + +#~ msgid "Create web pages" +#~ msgstr "Weboldalak létrehozása" diff --git a/document_page/i18n/id.po b/document_page/i18n/id.po new file mode 100644 index 00000000000..d582650834a --- /dev/null +++ b/document_page/i18n/id.po @@ -0,0 +1,269 @@ +# Indonesian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Indonesian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/it.po b/document_page/i18n/it.po new file mode 100644 index 00000000000..242f3cf5456 --- /dev/null +++ b/document_page/i18n/it.po @@ -0,0 +1,276 @@ +# Italian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Italian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Categoria" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Ultimo collaboratore" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autore" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menu" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Pagina documento" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Cronologia pagina" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Contenuto" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Raggruppa per..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Modello" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" +"sarà usato come modello contenuto per tutte le nuove pagine di questa " +"categoria." + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Titolo" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Wizard creazione menu" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Tipo" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Modificato Da" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "o" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Tipo di pagina" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Informazioni Menu" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Cronologia Pagina Documento" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Cronologia pagine" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "Non ci sono modifiche nelle revisioni." + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Data" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Differenze" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Pagine" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Categorie" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Menu Superiore" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Data di Modifica" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Creato il" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" +"E' necessario selezionare almeno una o massimo due revisioni della " +"cronologia!" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Cronologia pagina" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Riepilogo" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Cronologia documento" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Nome Menu" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Pagina" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Cronologia" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Crea Menu" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Contenuto Visualizzato" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Attenzione!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Cancella" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Differenze" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Tipo Documento" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Figlio" + +#~ msgid "Create web pages" +#~ msgstr "Crea pagine web" diff --git a/document_page/i18n/ja.po b/document_page/i18n/ja.po new file mode 100644 index 00000000000..71473206727 --- /dev/null +++ b/document_page/i18n/ja.po @@ -0,0 +1,269 @@ +# Japanese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Japanese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "最終貢献者" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "著者" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "メニュー" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "ページ履歴" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "コンテンツ" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "グループ化…" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "タイトル" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "メニュー作成ウィザード" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "メニュー情報" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "日付" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "差分" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "ページ" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "親メニュー" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "変更日" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "作成日" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "要約" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "メニュー名" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "メニューの作成" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "キャンセル" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "差分" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/ko.po b/document_page/i18n/ko.po new file mode 100644 index 00000000000..066c7ad82fb --- /dev/null +++ b/document_page/i18n/ko.po @@ -0,0 +1,269 @@ +# Korean translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Korean \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "저자" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "메뉴" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "컨텐트" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "제목" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "메뉴 정보" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "날짜" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "페이지" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "부모 메뉴" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "수정 날짜" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "생성 날짜" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "요약" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "메뉴 이름" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "메뉴 만들기" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "취소" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Diff" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/lt.po b/document_page/i18n/lt.po new file mode 100644 index 00000000000..fd02906a97f --- /dev/null +++ b/document_page/i18n/lt.po @@ -0,0 +1,269 @@ +# Lithuanian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Lithuanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autorius" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Meniu" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Turinys" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Antraštė" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Meniu informacija" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Data" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Puslapiai" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Bazinis meniu" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Modifikavimo data" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Sukurta" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Santrauka" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Meniu pavadinimas" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Sukurti meniu" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Atšaukti" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Skirtumas" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/lv.po b/document_page/i18n/lv.po new file mode 100644 index 00000000000..b9d62788673 --- /dev/null +++ b/document_page/i18n/lv.po @@ -0,0 +1,269 @@ +# Latvian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Latvian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Pēdējais Papildinājs" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autors" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Izvēlne" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Lapas Vēsture" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Saturs" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Grupēt pēc..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Virsraksts" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Izvēlnes Veidošanas Veidnis" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Izvēlnes Informācija" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Datums" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Atšķirības" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Lapas" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "VirsIzvēlne" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Izmaiņu Datums" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Izveidots" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Kopsavilkums" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Izvēlnes Nosaukums" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Izveidot Izvēlni" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Atcelt" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Atšķirības" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/mk.po b/document_page/i18n/mk.po new file mode 100644 index 00000000000..9fae4bede31 --- /dev/null +++ b/document_page/i18n/mk.po @@ -0,0 +1,276 @@ +# Macedonian translation for openobject-addons +# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2013. +# Sofce Dimitrijeva , 2013. +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2013-03-31 13:21+0000\n" +"Last-Translator: Sofce Dimitrijeva \n" +"Language-Team: ESKON-INZENERING\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" +"Language: mk\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Категорија" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Последен соработник" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Автор" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Мени" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Страница на документ" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Историја на страница" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Содржина" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Групирај по..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Урнек" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" +"кој ќе биде употребен како урнек за содржина за сите нови страници од оваа " +"категорија." + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Титула" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Мени Креирање на Волшебник" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Tип" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Изменето од" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "или" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Тип на страница" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Мени Информации" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Историја на страница на документ" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Историја на страници" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "Нема измени во ревизиите." + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Датум" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Разлика" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Страници" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Категории" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Име" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Мени родител" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Датум на измена" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Креирано на" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" +"Треба да селектиарте минимум една или максимум две ревизии на историја!" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Историја на страница" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Резиме" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "на пр. Едно време..." + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Историја на документот" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Име на мени" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Страница" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Историја" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Креирај Мени" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Прикажана содржина" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Предупредување!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Откажи" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Разлика" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Тип документ" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Деца" + +#~ msgid "Create web pages" +#~ msgstr "Креирај веб странци" diff --git a/document_page/i18n/mn.po b/document_page/i18n/mn.po new file mode 100644 index 00000000000..3da236d8efd --- /dev/null +++ b/document_page/i18n/mn.po @@ -0,0 +1,272 @@ +# Mongolian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2014-01-11 14:09+0000\n" +"Last-Translator: gobi \n" +"Language-Team: Mongolian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-01-12 05:48+0000\n" +"X-Generator: Launchpad (build 16890)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Ангилал" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Сүүлийн Хувь Нэмэр оруулагч" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Зохиогч" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Цэс" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Баримтын Хуудас" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Хуудасны Түүх" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Агуулга" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Бүлэглэх..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Загвар" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Гарчиг" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Меню үүсгэх харилцах цонх" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Төрөл" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "эсвэл" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Хуудасны төрөл" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Цэсний мэдээлэл" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Баримтын Хуудасны Түүх" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Хуудсуудын Түүх" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Огноо" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Зөрүү" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Хуудсууд" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Ангилалууд" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Нэр" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Толгой цэс" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Зассан огноо" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Үүсгэсэн" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Хуудсын Түүх" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Хураангуй" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Баримтын Түүх" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Цэсний нэр" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Цэс үүсгэх" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Цуцлах" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Зөрүү" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" + +#~ msgid "Create web pages" +#~ msgstr "Веб хуудсууд үүсгэх" diff --git a/document_page/i18n/nb.po b/document_page/i18n/nb.po new file mode 100644 index 00000000000..ed7a6d49e5b --- /dev/null +++ b/document_page/i18n/nb.po @@ -0,0 +1,269 @@ +# Norwegian Bokmal translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Norwegian Bokmal \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Siste forfatter" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Forfatter" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Meny" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Sidehistorikk" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Innhold" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Grupper etter..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Tittel" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Wizard Opprett meny" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Meny informasjon" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Dato" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Endringer" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Sider" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Overordnet meny" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Dato for siste endring" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Opprettet den" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Sammendrag" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Menynavn" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Opprett meny" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Avbryt" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Diff" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/nl.po b/document_page/i18n/nl.po new file mode 100644 index 00000000000..8ed4fb017ed --- /dev/null +++ b/document_page/i18n/nl.po @@ -0,0 +1,279 @@ +# Dutch translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2013-06-08 11:21+0000\n" +"Last-Translator: Erwin van der Ploeg (BAS Solutions) \n" +"Language-Team: Dutch \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Categorie" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Laatste bijdrage" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Auteur" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menu" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Document pagina" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Pagina geschiedenis" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Inhoud" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Groepeer op..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Sjabloon" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" +"dit zal worden gebruikt als een inhoud sjabloon voor alle nieuwe pagina;s " +"van deze categorie." + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Titel" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Assistent menu maken" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Soort" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Aangepast door" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "of" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Paginatype" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Menu informatie" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Document pagina historie" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Pagina historie" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "Er zijn geen wijzigingen in de revisies." + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Datum" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Verschil" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Pagina's" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Categorieën" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Naam" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Hoofdmenu" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Wijzigingsdatum" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Aangemaakt op" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" +"U dient minimaal één en maximaal twee historie revisies te selecteren.!" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Pagina historie" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Samenvatting" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "bijv. Op enig moment..." + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Documenthistorie" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Naam menu" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Pagina" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Historie" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" +"

    \n" +" Klik voor het aanmaken van een web pagina.\n" +"

    \n" +" " + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Menu maken" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Weergegeven inhoud" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Waarschuwing!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Annuleren" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Verschil" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Documenttype" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Onderliggende" + +#~ msgid "Create web pages" +#~ msgstr "Webpagina's aanmaken" diff --git a/document_page/i18n/nl_BE.po b/document_page/i18n/nl_BE.po new file mode 100644 index 00000000000..b7939a66044 --- /dev/null +++ b/document_page/i18n/nl_BE.po @@ -0,0 +1,440 @@ +# Translation of OpenERP Server. +# This file contains the translation of the following modules: +# * wiki +# +msgid "" +msgstr "" +"Project-Id-Version: OpenERP Server 5.0.0\n" +"Report-Msgid-Bugs-To: support@openerp.com\n" +"POT-Creation-Date: 2012-02-08 01:37+0100\n" +"PO-Revision-Date: 2009-04-10 10:01+0000\n" +"Last-Translator: Fabien (Open ERP) \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2012-02-09 06:46+0000\n" +"X-Generator: Launchpad (build 14763)\n" + +#. module: wiki +#: field:wiki.groups,template:0 +msgid "Wiki Template" +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki +#: model:ir.ui.menu,name:wiki.menu_action_wiki_wiki +msgid "Wiki Pages" +msgstr "" + +#. module: wiki +#: field:wiki.groups,method:0 +msgid "Display Method" +msgstr "" + +#. module: wiki +#: view:wiki.wiki:0 field:wiki.wiki,create_uid:0 +msgid "Author" +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_wiki_page_open +#: view:wiki.wiki.page.open:0 +msgid "Open Page" +msgstr "" + +#. module: wiki +#: field:wiki.groups,menu_id:0 +msgid "Menu" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,section:0 +msgid "Section" +msgstr "" + +#. module: wiki +#: help:wiki.wiki,toc:0 +msgid "Indicates that this pages have a table of contents or not" +msgstr "" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki_history view:wiki.wiki.history:0 +msgid "Wiki History" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,minor_edit:0 +msgid "Minor edit" +msgstr "" + +#. module: wiki +#: view:wiki.wiki:0 field:wiki.wiki,text_area:0 +msgid "Content" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,child_ids:0 +msgid "Child Pages" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,parent_id:0 +msgid "Parent Page" +msgstr "" + +#. module: wiki +#: view:wiki.wiki:0 field:wiki.wiki,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: wiki +#: field:wiki.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "" + +#. module: wiki +#: code:addons/wiki/wizard/wiki_make_index.py:52 +#, python-format +msgid "There is no section in this Page" +msgstr "" + +#. module: wiki +#: field:wiki.groups,name:0 view:wiki.wiki:0 field:wiki.wiki,group_id:0 +msgid "Wiki Group" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,name:0 +msgid "Title" +msgstr "" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,history_id:0 +msgid "History Lines" +msgstr "" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Page Content" +msgstr "" + +#. module: wiki +#: code:addons/wiki/wiki.py:237 code:addons/wiki/wizard/wiki_make_index.py:52 +#, python-format +msgid "Warning !" +msgstr "" + +#. module: wiki +#: code:addons/wiki/wiki.py:237 +#, python-format +msgid "There are no changes in revisions" +msgstr "" + +#. module: wiki +#: help:wiki.wiki,section:0 +msgid "Use page section code like 1.2.1" +msgstr "" + +#. module: wiki +#: field:wiki.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "" + +#. module: wiki +#: field:wiki.groups,notes:0 +msgid "Description" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,review:0 +msgid "Needs Review" +msgstr "" + +#. module: wiki +#: help:wiki.wiki,review:0 +msgid "" +"Indicates that this page should be reviewed, raising the attention of other " +"contributors" +msgstr "" + +#. module: wiki +#: view:wiki.create.menu:0 view:wiki.make.index:0 +msgid "Menu Information" +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.act_wiki_wiki_history +msgid "Page History" +msgstr "" + +#. module: wiki +#: selection:wiki.groups,method:0 +msgid "Tree" +msgstr "" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Page Template" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,tags:0 +msgid "Keywords" +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,help:wiki.action_wiki +msgid "" +"With Wiki Pages you can share ideas and questions with your coworkers. You " +"can create a new document that can be linked to one or several applications " +"(CRM, Sales, etc.). You can use keywords to ease access to your wiki pages. " +"There is a basic wiki editing for text format." +msgstr "" + +#. module: wiki +#: code:addons/wiki/wizard/wiki_show_diff.py:54 +#, python-format +msgid "Warning" +msgstr "" + +#. module: wiki +#: help:wiki.groups,home:0 +msgid "Required to select home page if display method is Home Page" +msgstr "" + +#. module: wiki +#: field:wiki.wiki.history,create_date:0 +msgid "Date" +msgstr "" + +#. module: wiki +#: view:wiki.make.index:0 +msgid "Want to create a Index on Selected Pages ? " +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:wiki.action_view_wiki_show_diff_values +#: view:wizard.wiki.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: wiki +#: field:wiki.groups,page_ids:0 +msgid "Pages" +msgstr "" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Group Description" +msgstr "" + +#. module: wiki +#: view:wiki.wiki.page.open:0 +msgid "Want to open a wiki page? " +msgstr "" + +#. module: wiki +#: field:wiki.groups,section:0 +msgid "Make Section ?" +msgstr "" + +#. module: wiki +#: field:wiki.wiki.history,text_area:0 +msgid "Text area" +msgstr "" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Meta Information" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,create_date:0 +msgid "Created on" +msgstr "" + +#. module: wiki +#: view:wiki.groups:0 view:wizard.wiki.history.show_diff:0 +msgid "Notes" +msgstr "" + +#. module: wiki +#: selection:wiki.groups,method:0 +msgid "List" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,summary:0 field:wiki.wiki.history,summary:0 +msgid "Summary" +msgstr "" + +#. module: wiki +#: field:wiki.groups,create_date:0 +msgid "Created Date" +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_history +msgid "All Page Histories" +msgstr "" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki +msgid "wiki.wiki" +msgstr "" + +#. module: wiki +#: help:wiki.groups,method:0 +msgid "Define the default behaviour of the menu created on this group" +msgstr "" + +#. module: wiki +#: view:wizard.wiki.history.show_diff:0 +msgid "Close" +msgstr "" + +#. module: wiki +#: model:ir.model,name:wiki.model_wizard_wiki_history_show_diff +msgid "wizard.wiki.history.show_diff" +msgstr "" + +#. module: wiki +#: field:wiki.wiki.history,wiki_id:0 +msgid "Wiki Id" +msgstr "" + +#. module: wiki +#: field:wiki.groups,home:0 selection:wiki.groups,method:0 +msgid "Home Page" +msgstr "" + +#. module: wiki +#: help:wiki.wiki,parent_id:0 +msgid "Allows you to link with the other page with in the current topic" +msgstr "" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Modification Information" +msgstr "" + +#. module: wiki +#: help:wiki.wiki,group_id:0 +msgid "Topic, also called Wiki Group" +msgstr "" + +#. module: wiki +#: model:ir.ui.menu,name:wiki.menu_wiki_configuration view:wiki.wiki:0 +msgid "Wiki" +msgstr "" + +#. module: wiki +#: field:wiki.wiki,write_date:0 +msgid "Modification Date" +msgstr "" + +#. module: wiki +#: view:wiki.groups:0 +msgid "Configuration" +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_view_wiki_make_index +#: model:ir.actions.act_window,name:wiki.action_view_wiki_make_index_values +#: model:ir.model,name:wiki.model_wiki_make_index view:wiki.make.index:0 +msgid "Create Index" +msgstr "" + +#. module: wiki +#: code:addons/wiki/wizard/wiki_show_diff.py:54 +#, python-format +msgid "You need to select minimum 1 or maximum 2 history revision!" +msgstr "" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Group By..." +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_create_menu +#: view:wiki.create.menu:0 view:wiki.groups:0 view:wiki.make.index:0 +msgid "Create Menu" +msgstr "" + +#. module: wiki +#: field:wiki.wiki.history,minor_edit:0 +msgid "This is a major edit ?" +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_groups +#: model:ir.actions.act_window,name:wiki.action_wiki_groups_browse +#: model:ir.model,name:wiki.model_wiki_groups +#: model:ir.ui.menu,name:wiki.menu_action_wiki_groups view:wiki.groups:0 +msgid "Wiki Groups" +msgstr "" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Topic" +msgstr "" + +#. module: wiki +#: field:wiki.wiki.history,write_uid:0 +msgid "Modify By" +msgstr "" + +#. module: wiki +#: code:addons/wiki/web/widgets/wikimarkup/__init__.py:1981 +#: field:wiki.wiki,toc:0 +#, python-format +msgid "Table of Contents" +msgstr "" + +#. module: wiki +#: view:wiki.groups:0 view:wiki.wiki.page.open:0 +msgid "Open Wiki Page" +msgstr "" + +#. module: wiki +#: model:ir.model,name:wiki.model_wiki_wiki_page_open +msgid "wiz open page" +msgstr "" + +#. module: wiki +#: view:wiki.create.menu:0 view:wiki.make.index:0 view:wiki.wiki.page.open:0 +msgid "Cancel" +msgstr "" + +#. module: wiki +#: field:wizard.wiki.history.show_diff,file_path:0 +msgid "Diff" +msgstr "" + +#. module: wiki +#: view:wiki.wiki:0 +msgid "Need Review" +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.action_wiki_review +msgid "Pages Waiting Review" +msgstr "" + +#. module: wiki +#: model:ir.actions.act_window,name:wiki.act_wiki_group_open +msgid "Search Page" +msgstr "" + +#~ msgid "" +#~ "The Object name must start with x_ and not contain any special character !" +#~ msgstr "" +#~ "De objectnaam moet beginnen met x_ en mag geen speciale karakters bevatten !" diff --git a/document_page/i18n/pl.po b/document_page/i18n/pl.po new file mode 100644 index 00000000000..29b255d01c4 --- /dev/null +++ b/document_page/i18n/pl.po @@ -0,0 +1,274 @@ +# Polish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Polish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Kategoria" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Ostatni kontrybutor" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menu" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Strona dokumentu" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Historia strony" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Zawartość" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Grupuj wg..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Szablon" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" +"które będzie stosowane jako szablon zawartości dla nowych stron tej " +"kategorii." + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Tytuł" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Typ" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Zmodyfikowane przez" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "lub" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Typ strony" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Informacja o menu" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Historia strony dokumentu" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Historia strony" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "Brak zmian w wersjach" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Data" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Różnica" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Strony" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Kategorie" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Menu nadrzędne" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Data modyfikacji" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Utworzono" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "Musisz wybrać minimum jedną a maksymalnie dwie wersje historii !" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Historia strony" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Podsumowanie" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Historia Dokumentu" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Nazwa menu" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Strona" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Historia" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Utwórz menu" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Wyświetlana zawartość" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Ostrzeżenie !" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Anuluj" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Różnice" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Typ dokumentu" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Podrzędne" + +#~ msgid "Create web pages" +#~ msgstr "Twórz strony web" diff --git a/document_page/i18n/pt.po b/document_page/i18n/pt.po new file mode 100644 index 00000000000..5cb9b03c5b5 --- /dev/null +++ b/document_page/i18n/pt.po @@ -0,0 +1,272 @@ +# Portuguese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2013-01-18 11:30+0000\n" +"Last-Translator: Rui Franco (multibase.pt) \n" +"Language-Team: Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Categoria" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Último contribuinte" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menu" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Página do documento" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Histórico da página" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Conteúdo" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Agrupar por..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Modelo" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "que será usado como modelo para qualquer página desta categoria" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Título" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Assitente de criação de menu" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Tipo" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Modificado por" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "ou" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Tipo de página" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Informação do Menu" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "Não há alterações de versão" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Data" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Diferença" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Páginas" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Categorias" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Menu do Ascendente" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Data de Modificação" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Criado em" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Resumo" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Histórico de documentos" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Nome do Menu" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Página" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Histórico" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Criar Menu" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Aviso!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Cancelar" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Diferenças" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Tipo de documento" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" + +#~ msgid "Create web pages" +#~ msgstr "Cria páginas na internet" diff --git a/document_page/i18n/pt_BR.po b/document_page/i18n/pt_BR.po new file mode 100644 index 00000000000..a4482b7f759 --- /dev/null +++ b/document_page/i18n/pt_BR.po @@ -0,0 +1,278 @@ +# Brazilian Portuguese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2013-07-18 19:55+0000\n" +"Last-Translator: Claudio de Araujo Santos \n" +"Language-Team: Brazilian Portuguese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:08+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Categoria" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Último Contribuidor(a)" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menu" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Página do Documento" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Histórico da Página" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Conteúdo" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Agrupar Por..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Modelo" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" +"isto será utilizado como um modelo de conteúdo para todas as páginas desta " +"categoria." + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Título" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Assistente Para Criar Menu" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Tipo" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Modificado Por" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "ou" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Tipo de página" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Informação do Menu" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Histórico da Página de Documento" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Histórico das páginas" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "Não há mudanças nas revisões." + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Data" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Diferença" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Páginas" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Categorias" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Nome" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Menu Superior" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Data de Modificação" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Criado em" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "Você deve selecionar de uma a duas revisões de histórico!" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Histórico da página" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Resumo" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "ex. Era uma vez...." + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Histórico de Documentos" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Nome do Menu" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Página" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Histórico" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" +"

    \n" +" Clique para criar uma nova página web.\n" +" \n" +" " + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Criar Menu" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Conteúdo Exibido" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Atenção!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Cancelar" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Diferença" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Tipo de Documento" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Filhos" + +#~ msgid "Create web pages" +#~ msgstr "Criar páginas web" diff --git a/document_page/i18n/ro.po b/document_page/i18n/ro.po new file mode 100644 index 00000000000..b52ea7ca98e --- /dev/null +++ b/document_page/i18n/ro.po @@ -0,0 +1,275 @@ +# Romanian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2013-03-07 18:49+0000\n" +"Last-Translator: ERPSystems.ro \n" +"Language-Team: Romanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Categorie" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Ultimul colaborator" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Meniu" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Pagina Documentului" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Istoric pagină" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Conţinut" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Grupează după..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Sablon" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" +"care va fi folosit ca un sablon de continut pentru toate paginile noi din " +"aceasta categorie." + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Titlu" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Wizard Creează meniul" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Tip" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.pagina.istoric.arata_dif" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Modificat de" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "sau" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Tipul de pagina" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Informaţii meniu" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Istoric Pagini Documente" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Istoric pagini" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "Nu exista modificari in revizuiri." + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Dată" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Diferenţă" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Pagini" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Categorii" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Nume" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Meniu principal (părinte)" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Data modificării" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Creat in" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" +"Trebuie sa selectati minim unul sau maxim doua istorice ale revizuirilor!" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Istoric pagina" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Rezumat" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "de exemplu A fost odata..." + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Istoric Documente" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Nume Meniu" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Pagina" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Istoric" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Creează meniu" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Continut Afisat" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Avertizare!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Anulează" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Diferit" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Tipul documentului" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Subordonati" + +#~ msgid "Create web pages" +#~ msgstr "Creeaza pagini web" diff --git a/document_page/i18n/ru.po b/document_page/i18n/ru.po new file mode 100644 index 00000000000..4a6eb9c0bdd --- /dev/null +++ b/document_page/i18n/ru.po @@ -0,0 +1,278 @@ +# Russian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2013-07-16 13:42+0000\n" +"Last-Translator: Chertykov Denis \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Категория" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Последний корректор" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Автор" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Меню" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Страница документа" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "История страницы" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Содержание" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Группировать по .." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Шаблон" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" +"будет использоваться как шаблон содержимого для всех новых страниц этой " +"категории." + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Заголовок" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Помощник создания меню" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Тип" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Изменено" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "или" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Тип страниц" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Информация меню" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "История страницы документа" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "История страницы" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "Нет изменений" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Дата" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Различие" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Страницы" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Категории" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Название" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Родительское меню" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Дата изменения" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Создан" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "Вы должны выбрать одну или две версии в истории!" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "История страницы" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Итого" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "например Однажды, давным-давно..." + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "История документа" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Название меню" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Страница" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "История" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" +"

    \n" +" Нажмите, чтобы создать новую веб-страницу.\n" +"

    \n" +" " + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Создать меню" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Отображаемое содержимое" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Внимание!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Отмена" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Различие" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Тип документа" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Потомки" + +#~ msgid "Create web pages" +#~ msgstr "Создание веб-страниц" diff --git a/document_page/i18n/sk.po b/document_page/i18n/sk.po new file mode 100644 index 00000000000..2e315fa444a --- /dev/null +++ b/document_page/i18n/sk.po @@ -0,0 +1,269 @@ +# Slovak translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Slovak \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:08+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Posledný prispievateľ" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menu" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "História stránky" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Obsah" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Zoskupiť podľa..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Názov" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Sprievodca vytvorením ponuky" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Informácie menu" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Dátum" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Rozdiel" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Stránky" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Nadradené menu" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Dátum zmeny" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Vytvorené" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Zhrnutie" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Názov menu" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Vytvoriť menu" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Zrušiť" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Rozdiel" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/sl.po b/document_page/i18n/sl.po new file mode 100644 index 00000000000..bbf26aba606 --- /dev/null +++ b/document_page/i18n/sl.po @@ -0,0 +1,274 @@ +# Slovenian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2013-11-10 09:04+0000\n" +"Last-Translator: Darja Zorman \n" +"Language-Team: Slovenian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:08+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Kategorija" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Avtor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Meni" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Stran dokumenta" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Zgodovina strani" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Vsebina" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Predloga" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" +"ki bo uporabljeno kot vsebinska predloga za vse nove strani v tej kategoriji" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Naslov" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "čarovnik za kreiranje menija" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Spremenil" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "ali" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Tip strani" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Informacije o meniju" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Zgodovina strani dokumenta" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Zgodovina strani" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "V reviziji ni sprememb." + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Datum" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Razlika" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Strani" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Kategorije" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Naziv" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Nadmenu" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Datum spremembe" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Izdelano" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "Izbrati morate vsaj eno ali največ dve pretekli reviziji!" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Zgodovina strani" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Povzetek" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "npr. Nekoč pred davnimi časi..." + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Zgodovina dokumenta" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Naziv menuja" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Stran" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Zgodovina" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" +"

    \n" +" Kliknite za kreiranje nove spletne strani.\n" +"

    \n" +" " + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Ustvari menu" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Prekliči" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Razlika" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/sq.po b/document_page/i18n/sq.po new file mode 100644 index 00000000000..cce84e713c1 --- /dev/null +++ b/document_page/i18n/sq.po @@ -0,0 +1,269 @@ +# Albanian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Albanian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/sr.po b/document_page/i18n/sr.po new file mode 100644 index 00000000000..c5c3ca12342 --- /dev/null +++ b/document_page/i18n/sr.po @@ -0,0 +1,269 @@ +# Serbian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Serbian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:07+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Meni" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Sadržaj" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Naslov" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Meni Informacije" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Datum" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Strane" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Roditeljski Meni" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Datum Promene" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Kreiran" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Sumarno" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Naziv Menija" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Kreiraj Meni" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Otkazati" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Razlika" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/sr@latin.po b/document_page/i18n/sr@latin.po new file mode 100644 index 00000000000..2e1a810e42b --- /dev/null +++ b/document_page/i18n/sr@latin.po @@ -0,0 +1,269 @@ +# Serbian Latin translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Serbian Latin \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:08+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Autor" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Meni" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Sadržaj" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Naslov" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Meni Informacije" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Datum" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Strane" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Roditeljski Meni" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Datum Promene" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Kreiran" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Sumarno" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Naziv Menija" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Kreiraj Meni" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Otkazati" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Razlika" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/sv.po b/document_page/i18n/sv.po new file mode 100644 index 00000000000..a16fd2c7806 --- /dev/null +++ b/document_page/i18n/sv.po @@ -0,0 +1,273 @@ +# Swedish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2014-03-31 21:19+0000\n" +"Last-Translator: Anders Wallenquist \n" +"Language-Team: Swedish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2014-04-01 06:52+0000\n" +"X-Generator: Launchpad (build 16967)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Kategori" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Senaste författare" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Författare" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Meny" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Dokumentsida" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Sidhistorik" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Innehåll" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Gruppera på..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Mall" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Rubrik" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Skapa guide-meny" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Typ" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Ändrad av" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "eller" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Sidtyp" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Menyinformation" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Dokumentets sidhistorik" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Datum" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Skillnad" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Sidor" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Kategorier" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Namn" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Huvudmeny" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Ändringsdatum" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Skapad den" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Sammanfattning" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Dokumenthistorik" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Menynamn" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Sida" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Historia" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" +"

    \n" +" Klicka för att skapa en ny webbsida.\n" +"

    \n" +" " + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Skapa meny" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Visa innehåll" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Varning!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Avbryt" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Skillnad" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Dokumenttyp" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Underordnade" diff --git a/document_page/i18n/tlh.po b/document_page/i18n/tlh.po new file mode 100644 index 00000000000..0477d98ebc2 --- /dev/null +++ b/document_page/i18n/tlh.po @@ -0,0 +1,269 @@ +# Klingon translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Klingon \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:08+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/tr.po b/document_page/i18n/tr.po new file mode 100644 index 00000000000..7c3d7a845b1 --- /dev/null +++ b/document_page/i18n/tr.po @@ -0,0 +1,277 @@ +# Turkish translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2013-06-20 18:21+0000\n" +"Last-Translator: Ayhan KIZILTAN \n" +"Language-Team: Turkish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:08+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "Kategori" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Son Katkı koyan" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Yazar" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Menü" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "Belge Sayfası" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Sayfa Geçmişi" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "İçerik" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "Gruplandır..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "Şablon" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" +"bu kategorideki tüm yeni sayfalar için içerik şablonu olarak kullanılacaktır." + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Başlık" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "Menü Oluşturma Sihirbazı" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "Tür" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "Değiştiren" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "ya da" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "Sayfa türü" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Menü bilgileri" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "Belge Sayfa Geçmişi" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "Sayfa geçmişi" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "Düzeltmelerde hiç değişiklik yoktur." + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Tarih" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Fark" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Sayfalar" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "Kategoriler" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "Adı" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Ana Menü" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Değiştirilme Tarihi" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Oluşturulma" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "Enaz bir ya da ençok 2 geçmiş düzeltmesi seçmelisiniz!" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "Sayfa geçmişi" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Özet" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "e.g. Bir zamanlar..." + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "Belge Geçmişi" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Menü Adı" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "Sayfa" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "Geçmiş" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" +"

    \n" +" Yeni bir web sayfası oluşturmak için tıklayın.\n" +"

    \n" +" " + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Menü Oluştur" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "Görüntülenen İçerik" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "Uyarı!" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "İptal" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Fark" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "Belge Türü" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "Alt" + +#~ msgid "Create web pages" +#~ msgstr "Web sayfaları oluşturun" diff --git a/document_page/i18n/uk.po b/document_page/i18n/uk.po new file mode 100644 index 00000000000..fbbb6d44dba --- /dev/null +++ b/document_page/i18n/uk.po @@ -0,0 +1,269 @@ +# Ukrainian translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Ukrainian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:08+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Автор" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Меню" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Вміст" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Заголовок" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Інформація Меню" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Дата" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Сторінки" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Батьківське Меню" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "Дата Зміни" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Створено" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "Підсумок" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Назва Меню" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "Створити Меню" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "Скасувати" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "Відмінність" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/vi.po b/document_page/i18n/vi.po new file mode 100644 index 00000000000..10e1f891ea3 --- /dev/null +++ b/document_page/i18n/vi.po @@ -0,0 +1,269 @@ +# Vietnamese translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Vietnamese \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:08+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "Người đóng góp cuối" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "Tác giả" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "Trình đơn" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "Lịch sử Trang" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "Nội dung" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "Tiêu đề" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "Thông tin Trình đơn" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "Ngày" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "Khác biệt" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "Các trang" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "Trình đơn cha" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "Tạo trên" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "Tên Trình đơn" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/i18n/zh_CN.po b/document_page/i18n/zh_CN.po new file mode 100644 index 00000000000..2b760c85877 --- /dev/null +++ b/document_page/i18n/zh_CN.po @@ -0,0 +1,272 @@ +# Chinese (Simplified) translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Chinese (Simplified) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:08+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "类别" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "最近的贡献者" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "作者" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "菜单" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "页面编辑日志" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "内容" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "分组..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "模版" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "标题" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "向导创建菜单" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "类型" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "修改者" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "菜单信息" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "日期" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "差异" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "页面" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "分类" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "上级菜单" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "修改日期" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "创建在" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "摘要" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "菜单名" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "历史" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "创建菜单" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "显示内容" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "取消" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "差异" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" + +#~ msgid "Create web pages" +#~ msgstr "创建网页" diff --git a/document_page/i18n/zh_TW.po b/document_page/i18n/zh_TW.po new file mode 100644 index 00000000000..c687009467f --- /dev/null +++ b/document_page/i18n/zh_TW.po @@ -0,0 +1,269 @@ +# Chinese (Traditional) translation for openobject-addons +# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2012. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2013-06-07 19:37+0000\n" +"PO-Revision-Date: 2012-12-21 23:00+0000\n" +"Last-Translator: FULL NAME \n" +"Language-Team: Chinese (Traditional) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2013-11-21 06:08+0000\n" +"X-Generator: Launchpad (build 16831)\n" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,parent_id:0 +#: selection:document.page,type:0 +#: model:ir.actions.act_window,name:document_page.action_category +msgid "Category" +msgstr "" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,write_uid:0 +msgid "Last Contributor" +msgstr "最後的貢獻者" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,create_uid:0 +msgid "Author" +msgstr "作者" + +#. module: document_page +#: field:document.page,menu_id:0 +msgid "Menu" +msgstr "選單" + +#. module: document_page +#: view:document.page:0 +#: model:ir.model,name:document_page.model_document_page +msgid "Document Page" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_related_page_history +msgid "Page History" +msgstr "頁面歷史記錄" + +#. module: document_page +#: view:document.page:0 +#: field:document.page,content:0 +#: selection:document.page,type:0 +#: field:document.page.history,content:0 +msgid "Content" +msgstr "內容" + +#. module: document_page +#: view:document.page:0 +msgid "Group By..." +msgstr "分類方式..." + +#. module: document_page +#: view:document.page:0 +msgid "Template" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "" +"that will be used as a content template for all new page of this category." +msgstr "" + +#. module: document_page +#: field:document.page,name:0 +msgid "Title" +msgstr "標題" + +#. module: document_page +#: model:ir.model,name:document_page.model_document_page_create_menu +msgid "Wizard Create Menu" +msgstr "嚮導創建選單" + +#. module: document_page +#: field:document.page,type:0 +msgid "Type" +msgstr "類型" + +#. module: document_page +#: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff +msgid "wizard.document.page.history.show_diff" +msgstr "wizard.document.page.history.show_diff" + +#. module: document_page +#: field:document.page.history,create_uid:0 +msgid "Modified By" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "or" +msgstr "" + +#. module: document_page +#: help:document.page,type:0 +msgid "Page type" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +msgid "Menu Information" +msgstr "選單資訊" + +#. module: document_page +#: view:document.page.history:0 +#: model:ir.model,name:document_page.model_document_page_history +msgid "Document Page History" +msgstr "" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_page_history +msgid "Pages history" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#, python-format +msgid "There are no changes in revisions." +msgstr "" + +#. module: document_page +#: field:document.page.history,create_date:0 +msgid "Date" +msgstr "日期" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff +#: model:ir.actions.act_window,name:document_page.action_view_wiki_show_diff_values +#: view:wizard.document.page.history.show_diff:0 +msgid "Difference" +msgstr "差異" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_page +#: model:ir.ui.menu,name:document_page.menu_page +#: model:ir.ui.menu,name:document_page.menu_wiki +msgid "Pages" +msgstr "頁面" + +#. module: document_page +#: model:ir.ui.menu,name:document_page.menu_category +msgid "Categories" +msgstr "" + +#. module: document_page +#: view:document.page:0 +msgid "Name" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_parent_id:0 +msgid "Parent Menu" +msgstr "上級選單" + +#. module: document_page +#: field:document.page,write_date:0 +msgid "Modification Date" +msgstr "修改日期" + +#. module: document_page +#: field:document.page,create_date:0 +msgid "Created on" +msgstr "建立於" + +#. module: document_page +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "You need to select minimum one or maximum two history revisions!" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,name:document_page.action_history +msgid "Page history" +msgstr "" + +#. module: document_page +#: field:document.page.history,summary:0 +msgid "Summary" +msgstr "摘要" + +#. module: document_page +#: view:document.page:0 +msgid "e.g. Once upon a time..." +msgstr "" + +#. module: document_page +#: view:document.page.history:0 +msgid "Document History" +msgstr "" + +#. module: document_page +#: field:document.page.create.menu,menu_name:0 +msgid "Menu Name" +msgstr "選單名稱" + +#. module: document_page +#: field:document.page.history,page_id:0 +msgid "Page" +msgstr "" + +#. module: document_page +#: field:document.page,history_ids:0 +msgid "History" +msgstr "" + +#. module: document_page +#: model:ir.actions.act_window,help:document_page.action_page +msgid "" +"

    \n" +" Click to create a new web page.\n" +"

    \n" +" " +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: model:ir.actions.act_window,name:document_page.action_related_page_create_menu +#: model:ir.actions.act_window,name:document_page.action_wiki_create_menu +msgid "Create Menu" +msgstr "建立選單" + +#. module: document_page +#: field:document.page,display_content:0 +msgid "Displayed Content" +msgstr "" + +#. module: document_page +#: code:addons/document_page/document_page.py:129 +#: code:addons/document_page/wizard/document_page_show_diff.py:50 +#, python-format +msgid "Warning!" +msgstr "" + +#. module: document_page +#: view:document.page.create.menu:0 +#: view:wizard.document.page.history.show_diff:0 +msgid "Cancel" +msgstr "刪除" + +#. module: document_page +#: field:wizard.document.page.history.show_diff,diff:0 +msgid "Diff" +msgstr "差異" + +#. module: document_page +#: view:document.page:0 +msgid "Document Type" +msgstr "" + +#. module: document_page +#: field:document.page,child_ids:0 +msgid "Children" +msgstr "" diff --git a/document_page/security/document_page_security.xml b/document_page/security/document_page_security.xml new file mode 100644 index 00000000000..6d85d054469 --- /dev/null +++ b/document_page/security/document_page_security.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/document_page/security/ir.model.access.csv b/document_page/security/ir.model.access.csv new file mode 100644 index 00000000000..2b2fd18c3aa --- /dev/null +++ b/document_page/security/ir.model.access.csv @@ -0,0 +1,4 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +document_page_all,document.page,model_document_page,,1,0,0,0 +document_page,document.page,model_document_page,base.group_user,1,1,1,1 +document_page_history,document.page.history,model_document_page_history,base.group_user,1,0,1,0 diff --git a/document_page/security/wiki_security.xml b/document_page/security/wiki_security.xml new file mode 100644 index 00000000000..ca9d34ae99c --- /dev/null +++ b/document_page/security/wiki_security.xml @@ -0,0 +1,12 @@ + + + + + + User + + + + + + diff --git a/document_page/static/src/css/document_page.css b/document_page/static/src/css/document_page.css new file mode 100644 index 00000000000..ddbbcffd45b --- /dev/null +++ b/document_page/static/src/css/document_page.css @@ -0,0 +1,12 @@ +.oe_form_editable .oe_document_page { + display: none; +} + +table.diff {font-family:Courier; border:medium;} +.diff_header {background-color:#e0e0e0} +td.diff_header {text-align:right} +.diff_next {background-color:#c0c0c0} +.diff_add {background-color:#aaffaa} +.diff_chg {background-color:#ffff77} +.diff_sub {background-color:#ffaaaa} + diff --git a/document_page/test/document_page_test00.yml b/document_page/test/document_page_test00.yml new file mode 100644 index 00000000000..3c8dba80294 --- /dev/null +++ b/document_page/test/document_page_test00.yml @@ -0,0 +1,54 @@ +- + In order to test the document_page in OpenERP, I create a new page to category demo_category1 +- + !record {model: document.page, id: test_page0}: + name: Test Page0 + parent_id: demo_category1 + content: 'Test content + + The Open ERP wiki allows you to manage your enterprise contents using wiki + + restructured texts. This module provides a collaborative way to manage internal + + FAQs, quality manuals, technical references, etc.' + +- + I check the category index contains my page. +- + !python {model: document.page}: | + res = self.read(cr, uid, [ref('demo_category1')], ['display_content']) + assert res[0]['display_content'].find('Test Page') > 1 +- + !record {model: document.page, id: test_page0}: + content: 'Test updated content + + The Open ERP wiki allows you to manage your enterprise contents using wiki + + restructured texts. This module provides a collaborative way to manage internal + + FAQs, quality manuals, technical references, etc. + + Wiki text can easily be edited + ' +- + I check the page history for the current page by clicking on "Page History".After that find difference between history. +- + !python {model: wizard.document.page.history.show_diff}: | + hist_obj = model.pool.get('document.page.history') + ids = hist_obj.search(cr, uid, [('page_id', '=', ref("test_page0"))]) + model.get_diff(cr, uid, {'active_ids': ids[:] }) +- + I click the "create menu" link and i fill the form. +- + !record {model: document.page.create.menu, id: test_create_menu0}: + menu_name: Wiki Test menu + menu_parent_id: base.menu_base_partner +- + I create a Menu by clicking on "create menu" +- + !python {model: document.page.create.menu}: | + ids = [ref("test_create_menu0")] + context['active_id'] = ref('test_page0') + self.document_page_menu_create(cr, uid, ids, context) + + diff --git a/document_page/web/__init__.py b/document_page/web/__init__.py new file mode 100644 index 00000000000..6fb28f7f2ad --- /dev/null +++ b/document_page/web/__init__.py @@ -0,0 +1,4 @@ +import widgets +import controllers + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/controllers/__init__.py b/document_page/web/controllers/__init__.py new file mode 100644 index 00000000000..e1edf0f0f96 --- /dev/null +++ b/document_page/web/controllers/__init__.py @@ -0,0 +1,3 @@ +import wiki + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/controllers/wiki.py b/document_page/web/controllers/wiki.py new file mode 100644 index 00000000000..2f147827f24 --- /dev/null +++ b/document_page/web/controllers/wiki.py @@ -0,0 +1,65 @@ +############################################################################### +# +# Copyright (C) 2007-TODAY Tiny ERP Pvt Ltd. All Rights Reserved. +# +# $Id$ +# +# Developed by Tiny (http://openerp.com) and Axelor (http://axelor.com). +# +# The OpenERP web client is distributed under the "OpenERP Public License". +# It's based on Mozilla Public License Version (MPL) 1.1 with following +# restrictions: +# +# - All names, links and logos of Tiny, OpenERP and Axelor must be +# kept as in original distribution without any changes in all software +# screens, especially in start-up page and the software header, even if +# the application source code has been changed or updated or code has been +# added. +# +# - All distributions of the software must keep source code with OEPL. +# +# - All integrations to any other software must keep source code with OEPL. +# +# If you need commercial licence to remove this kind of restriction please +# contact us. +# +# You can see the MPL licence at: http://www.mozilla.org/MPL/MPL-1.1.html +# +############################################################################### +import base64 + +import cherrypy + +import openobject +from openobject.tools import expose + +from openerp.controllers import SecuredController + + +class WikiView(SecuredController): + _cp_path = "/wiki/wiki" + + def get_attachment(self, **kwargs): + attachments = openobject.rpc.RPCProxy('ir.attachment') + file_name = kwargs.get('file').replace("'", '').strip() + id = kwargs.get('id').strip() + + ids = attachments.search([('datas_fname', '=', file_name), + ('res_model', '=', 'wiki.wiki'), + ('res_id', '=', id)]) + + res = attachments.read(ids, ['datas'])[0].get('datas') + return res, file_name + + @expose(content_type='application/octet') + def getImage(self, *kw, **kws): + res, _ = self.get_attachment(**kws) + return base64.decodestring(res) + + @expose(content_type='application/octet') + def getfile(self, *kw, **kws): + res, file_name = self.get_attachment(**kws) + cherrypy.response.headers['Content-Disposition'] = 'filename="%s"' % (file_name,) + return base64.decodestring(res) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/locales/bg.po b/document_page/web/locales/bg.po new file mode 100644 index 00000000000..d331ed5de7f --- /dev/null +++ b/document_page/web/locales/bg.po @@ -0,0 +1,22 @@ +# Bulgarian translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2010-08-02 17:52+0530\n" +"PO-Revision-Date: 2011-02-11 01:13+0000\n" +"Last-Translator: Dimitar Markov \n" +"Language-Team: Bulgarian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-02-12 06:06+0000\n" +"X-Generator: Launchpad (build 12351)\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "Съдържание" diff --git a/document_page/web/locales/ca.po b/document_page/web/locales/ca.po new file mode 100644 index 00000000000..a946dab86ec --- /dev/null +++ b/document_page/web/locales/ca.po @@ -0,0 +1,22 @@ +# Catalan translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2010-08-02 17:52+0530\n" +"PO-Revision-Date: 2011-03-12 20:33+0000\n" +"Last-Translator: mgaja (GrupoIsep.com) \n" +"Language-Team: Catalan \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-03-13 06:16+0000\n" +"X-Generator: Launchpad (build 12559)\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "Índex" diff --git a/document_page/web/locales/da.po b/document_page/web/locales/da.po new file mode 100644 index 00000000000..35d12ed6632 --- /dev/null +++ b/document_page/web/locales/da.po @@ -0,0 +1,22 @@ +# Danish translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2010-08-02 17:52+0530\n" +"PO-Revision-Date: 2011-04-29 12:05+0000\n" +"Last-Translator: Hans Henrik Gabelgaard \n" +"Language-Team: Danish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-04-30 06:08+0000\n" +"X-Generator: Launchpad (build 12758)\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "Indholdsfortegnelse" diff --git a/document_page/web/locales/de.po b/document_page/web/locales/de.po new file mode 100644 index 00000000000..8718cd9713d --- /dev/null +++ b/document_page/web/locales/de.po @@ -0,0 +1,22 @@ +# German translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2010-08-02 17:52+0530\n" +"PO-Revision-Date: 2011-02-11 11:54+0000\n" +"Last-Translator: Ferdinand @ Camptocamp \n" +"Language-Team: German \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-02-12 06:06+0000\n" +"X-Generator: Launchpad (build 12351)\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "Inhaltsverzeichnis" diff --git a/document_page/web/locales/de_DE/LC_MESSAGES/javascript.po b/document_page/web/locales/de_DE/LC_MESSAGES/javascript.po new file mode 100644 index 00000000000..ea8fd6999df --- /dev/null +++ b/document_page/web/locales/de_DE/LC_MESSAGES/javascript.po @@ -0,0 +1,20 @@ +# German (Germany) translations for PROJECT. +# Copyright (C) 2009 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2009. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2009-11-18 17:21+0530\n" +"PO-Revision-Date: 2010-08-02 17:53+0530\n" +"Last-Translator: FULL NAME \n" +"Language-Team: de_DE \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel None\n" + diff --git a/document_page/web/locales/de_DE/LC_MESSAGES/messages.po b/document_page/web/locales/de_DE/LC_MESSAGES/messages.po new file mode 100644 index 00000000000..79b06791b65 --- /dev/null +++ b/document_page/web/locales/de_DE/LC_MESSAGES/messages.po @@ -0,0 +1,24 @@ +# German (Germany) translations for PROJECT. +# Copyright (C) 2009 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2009. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2009-11-18 17:21+0530\n" +"PO-Revision-Date: 2010-08-02 17:53+0530\n" +"Last-Translator: FULL NAME \n" +"Language-Team: de_DE \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel None\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "" + diff --git a/document_page/web/locales/es_CR.po b/document_page/web/locales/es_CR.po new file mode 100644 index 00000000000..d64a49bccbb --- /dev/null +++ b/document_page/web/locales/es_CR.po @@ -0,0 +1,23 @@ +# Translations template for PROJECT. +# Copyright (C) 2010 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2010-08-02 17:52+0530\n" +"PO-Revision-Date: 2012-02-08 03:00-0600\n" +"Last-Translator: Carlos Vásquez - CLEARCORP \n" +"Language-Team: LANGUAGE \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel None\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "" + diff --git a/document_page/web/locales/es_ES/LC_MESSAGES/javascript.po b/document_page/web/locales/es_ES/LC_MESSAGES/javascript.po new file mode 100644 index 00000000000..0c44218f06a --- /dev/null +++ b/document_page/web/locales/es_ES/LC_MESSAGES/javascript.po @@ -0,0 +1,20 @@ +# Spanish (Spain) translations for PROJECT. +# Copyright (C) 2009 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2009. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2009-11-18 17:21+0530\n" +"PO-Revision-Date: 2010-08-02 17:53+0530\n" +"Last-Translator: FULL NAME \n" +"Language-Team: es_ES \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel None\n" + diff --git a/document_page/web/locales/es_ES/LC_MESSAGES/messages.po b/document_page/web/locales/es_ES/LC_MESSAGES/messages.po new file mode 100644 index 00000000000..72f8c72bbf0 --- /dev/null +++ b/document_page/web/locales/es_ES/LC_MESSAGES/messages.po @@ -0,0 +1,24 @@ +# Spanish (Spain) translations for PROJECT. +# Copyright (C) 2009 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2009. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2009-11-18 17:21+0530\n" +"PO-Revision-Date: 2010-08-02 17:53+0530\n" +"Last-Translator: FULL NAME \n" +"Language-Team: es_ES \n" +"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel None\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "" + diff --git a/document_page/web/locales/es_PY.po b/document_page/web/locales/es_PY.po new file mode 100644 index 00000000000..c76f7a3362a --- /dev/null +++ b/document_page/web/locales/es_PY.po @@ -0,0 +1,22 @@ +# Spanish (Paraguay) translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2010-08-02 17:52+0530\n" +"PO-Revision-Date: 2011-03-21 16:31+0000\n" +"Last-Translator: fadel \n" +"Language-Team: Spanish (Paraguay) \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-03-22 06:23+0000\n" +"X-Generator: Launchpad (build 12559)\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "Tabla de Contenido" diff --git a/document_page/web/locales/fr.po b/document_page/web/locales/fr.po new file mode 100644 index 00000000000..18a1611dac0 --- /dev/null +++ b/document_page/web/locales/fr.po @@ -0,0 +1,22 @@ +# French translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2010-08-02 17:52+0530\n" +"PO-Revision-Date: 2011-02-11 20:16+0000\n" +"Last-Translator: lolivier \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-02-12 06:06+0000\n" +"X-Generator: Launchpad (build 12351)\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "Table des matières" diff --git a/document_page/web/locales/fr_FR/LC_MESSAGES/javascript.po b/document_page/web/locales/fr_FR/LC_MESSAGES/javascript.po new file mode 100644 index 00000000000..31f9c5eda45 --- /dev/null +++ b/document_page/web/locales/fr_FR/LC_MESSAGES/javascript.po @@ -0,0 +1,20 @@ +# French (France) translations for PROJECT. +# Copyright (C) 2009 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2009. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2009-11-18 17:21+0530\n" +"PO-Revision-Date: 2010-08-02 17:53+0530\n" +"Last-Translator: FULL NAME \n" +"Language-Team: fr_FR \n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel None\n" + diff --git a/document_page/web/locales/fr_FR/LC_MESSAGES/messages.po b/document_page/web/locales/fr_FR/LC_MESSAGES/messages.po new file mode 100644 index 00000000000..181738f734f --- /dev/null +++ b/document_page/web/locales/fr_FR/LC_MESSAGES/messages.po @@ -0,0 +1,24 @@ +# French (France) translations for PROJECT. +# Copyright (C) 2009 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2009. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2009-11-18 17:21+0530\n" +"PO-Revision-Date: 2010-08-02 17:53+0530\n" +"Last-Translator: FULL NAME \n" +"Language-Team: fr_FR \n" +"Plural-Forms: nplurals=2; plural=(n > 1)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel None\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "" + diff --git a/document_page/web/locales/gl.po b/document_page/web/locales/gl.po new file mode 100644 index 00000000000..645a5607fb5 --- /dev/null +++ b/document_page/web/locales/gl.po @@ -0,0 +1,22 @@ +# Galician translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2010-08-02 17:52+0530\n" +"PO-Revision-Date: 2011-03-02 23:19+0000\n" +"Last-Translator: Santi (Pexego) \n" +"Language-Team: Galician \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-03-03 06:01+0000\n" +"X-Generator: Launchpad (build 12351)\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "Índice" diff --git a/document_page/web/locales/javascript.pot b/document_page/web/locales/javascript.pot new file mode 100644 index 00000000000..725ce7a4883 --- /dev/null +++ b/document_page/web/locales/javascript.pot @@ -0,0 +1,19 @@ +# Translations template for PROJECT. +# Copyright (C) 2010 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2010. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2010-08-02 17:52+0530\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel None\n" + diff --git a/document_page/web/locales/messages.pot b/document_page/web/locales/messages.pot new file mode 100644 index 00000000000..16c76567441 --- /dev/null +++ b/document_page/web/locales/messages.pot @@ -0,0 +1,23 @@ +# Translations template for PROJECT. +# Copyright (C) 2010 ORGANIZATION +# This file is distributed under the same license as the PROJECT project. +# FIRST AUTHOR , 2010. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PROJECT VERSION\n" +"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" +"POT-Creation-Date: 2010-08-02 17:52+0530\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel None\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "" + diff --git a/document_page/web/locales/ru.po b/document_page/web/locales/ru.po new file mode 100644 index 00000000000..6c609b49c41 --- /dev/null +++ b/document_page/web/locales/ru.po @@ -0,0 +1,22 @@ +# Russian translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2010-08-02 17:52+0530\n" +"PO-Revision-Date: 2011-03-16 00:17+0000\n" +"Last-Translator: Stanislav Hanzhin \n" +"Language-Team: Russian \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-03-17 06:12+0000\n" +"X-Generator: Launchpad (build 12559)\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "Содержание" diff --git a/document_page/web/locales/sk.po b/document_page/web/locales/sk.po new file mode 100644 index 00000000000..f101cf6928a --- /dev/null +++ b/document_page/web/locales/sk.po @@ -0,0 +1,22 @@ +# Slovak translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2010-08-02 17:52+0530\n" +"PO-Revision-Date: 2011-02-21 13:05+0000\n" +"Last-Translator: Radoslav Sloboda \n" +"Language-Team: Slovak \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-02-22 14:27+0000\n" +"X-Generator: Launchpad (build 12351)\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "Obsah" diff --git a/document_page/web/locales/tr.po b/document_page/web/locales/tr.po new file mode 100644 index 00000000000..baa56e0f9db --- /dev/null +++ b/document_page/web/locales/tr.po @@ -0,0 +1,22 @@ +# Turkish translation for openobject-addons +# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 +# This file is distributed under the same license as the openobject-addons package. +# FIRST AUTHOR , 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: openobject-addons\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2010-08-02 17:52+0530\n" +"PO-Revision-Date: 2011-02-08 21:20+0000\n" +"Last-Translator: Ahmet Altınışık \n" +"Language-Team: Turkish \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2011-02-09 06:02+0000\n" +"X-Generator: Launchpad (build 12177)\n" + +#: widgets/wikimarkup/__init__.py:1981 +msgid "Table of Contents" +msgstr "İçindekiler" diff --git a/document_page/web/static/css/wiki.css b/document_page/web/static/css/wiki.css new file mode 100644 index 00000000000..51a649354d6 --- /dev/null +++ b/document_page/web/static/css/wiki.css @@ -0,0 +1,32 @@ +.wikiwidget #toc { + border:1px solid #aaaaaa; + background-color:#f9f9f9; + padding:5px; +} + +h1, h2, h3, h4, h5, h6 { + color: black; + background: none; + font-weight: normal; + margin: 0; + padding-top: .5em; + padding-bottom: .17em; + border-bottom: 1px solid #aaa; +} +h1 { font-size: 188%; } +h2 { font-size: 150%; } +h3, h4, h5, h6 { + border-bottom: none; +} +h3 { font-size: 132%; } +h4 { font-size: 116%; } +h5 { font-size: 100%; } +h6 { font-size: 80%; } + +pre { + background-color:#F9F9F9; + border:1px dashed #2F6FAB; + color:black; + line-height:1.1em; + padding:1em; +} diff --git a/document_page/web/widgets/__init__.py b/document_page/web/widgets/__init__.py new file mode 100644 index 00000000000..4b2c273d02a --- /dev/null +++ b/document_page/web/widgets/__init__.py @@ -0,0 +1,3 @@ +from wiki import WikiWidget + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/widgets/rss/__init__.py b/document_page/web/widgets/rss/__init__.py new file mode 100644 index 00000000000..ff95e8bd52a --- /dev/null +++ b/document_page/web/widgets/rss/__init__.py @@ -0,0 +1,3 @@ +import feedparser + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/widgets/rss/feedparser.py b/document_page/web/widgets/rss/feedparser.py new file mode 100755 index 00000000000..35cbb975d3f --- /dev/null +++ b/document_page/web/widgets/rss/feedparser.py @@ -0,0 +1,2860 @@ +#!/usr/bin/env python +"""Universal feed parser + +Handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds + +Visit http://feedparser.org/ for the latest version +Visit http://feedparser.org/docs/ for the latest documentation + +Required: Python 2.1 or later +Recommended: Python 2.3 or later +Recommended: CJKCodecs and iconv_codec +""" + +__version__ = "4.1"# + "$Revision: 1.92 $"[11:15] + "-cvs" +__license__ = """Copyright (c) 2002-2006, Mark Pilgrim, All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE.""" +__author__ = "Mark Pilgrim " +__contributors__ = ["Jason Diamond ", + "John Beimler ", + "Fazal Majid ", + "Aaron Swartz ", + "Kevin Marks "] +_debug = 0 + +# HTTP "User-Agent" header to send to servers when downloading feeds. +# If you are embedding feedparser in a larger application, you should +# change this to your application name and URL. +USER_AGENT = "UniversalFeedParser/%s +http://feedparser.org/" % __version__ + +# HTTP "Accept" header to send to servers when downloading feeds. If you don't +# want to send an Accept header, set this to None. +ACCEPT_HEADER = "application/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1" + +# List of preferred XML parsers, by SAX driver name. These will be tried first, +# but if they're not installed, Python will keep searching through its own list +# of pre-installed parsers until it finds one that supports everything we need. +PREFERRED_XML_PARSERS = ["drv_libxml2"] + +# If you want feedparser to automatically run HTML markup through HTML Tidy, set +# this to 1. Requires mxTidy +# or utidylib . +TIDY_MARKUP = 0 + +# List of Python interfaces for HTML Tidy, in order of preference. Only useful +# if TIDY_MARKUP = 1 +PREFERRED_TIDY_INTERFACES = ["uTidy", "mxTidy"] + +# ---------- required modules (should come with any Python distribution) ---------- +import sgmllib, re, sys, copy, urlparse, time, rfc822, types, cgi, urllib, urllib2 +try: + from cStringIO import StringIO as _StringIO +except: + from StringIO import StringIO as _StringIO + +# ---------- optional modules (feedparser will work without these, but with reduced functionality) ---------- + +# gzip is included with most Python distributions, but may not be available if you compiled your own +try: + import gzip +except: + gzip = None +try: + import zlib +except: + zlib = None + +# If a real XML parser is available, feedparser will attempt to use it. feedparser has +# been tested with the built-in SAX parser, PyXML, and libxml2. On platforms where the +# Python distribution does not come with an XML parser (such as Mac OS X 10.2 and some +# versions of FreeBSD), feedparser will quietly fall back on regex-based parsing. +try: + import xml.sax + xml.sax.make_parser(PREFERRED_XML_PARSERS) # test for valid parsers + from xml.sax.saxutils import escape as _xmlescape + _XML_AVAILABLE = 1 +except: + _XML_AVAILABLE = 0 + def _xmlescape(data): + data = data.replace('&', '&') + data = data.replace('>', '>') + data = data.replace('<', '<') + return data + +# base64 support for Atom feeds that contain embedded binary data +try: + import base64, binascii +except: + base64 = binascii = None + +# cjkcodecs and iconv_codec provide support for more character encodings. +# Both are available from http://cjkpython.i18n.org/ +try: + import cjkcodecs.aliases +except: + pass +try: + import iconv_codec +except: + pass + +# chardet library auto-detects character encodings +# Download from http://chardet.feedparser.org/ +try: + import chardet + if _debug: + import chardet.constants + chardet.constants._debug = 1 +except: + chardet = None + +# ---------- don't touch these ---------- +class ThingsNobodyCaresAboutButMe(Exception): pass +class CharacterEncodingOverride(ThingsNobodyCaresAboutButMe): pass +class CharacterEncodingUnknown(ThingsNobodyCaresAboutButMe): pass +class NonXMLContentType(ThingsNobodyCaresAboutButMe): pass +class UndeclaredNamespace(Exception): pass + +sgmllib.tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*') +sgmllib.special = re.compile('' % (tag, ''.join([' %s="%s"' % t for t in attrs])), escape=0) + + # match namespaces + if tag.find(':') <> -1: + prefix, suffix = tag.split(':', 1) + else: + prefix, suffix = '', tag + prefix = self.namespacemap.get(prefix, prefix) + if prefix: + prefix = prefix + '_' + + # special hack for better tracking of empty textinput/image elements in illformed feeds + if (not prefix) and tag not in ('title', 'link', 'description', 'name'): + self.intextinput = 0 + if (not prefix) and tag not in ('title', 'link', 'description', 'url', 'href', 'width', 'height'): + self.inimage = 0 + + # call special handler (if defined) or default handler + methodname = '_start_' + prefix + suffix + try: + method = getattr(self, methodname) + return method(attrsD) + except AttributeError: + return self.push(prefix + suffix, 1) + + def unknown_endtag(self, tag): + if _debug: sys.stderr.write('end %s\n' % tag) + # match namespaces + if tag.find(':') <> -1: + prefix, suffix = tag.split(':', 1) + else: + prefix, suffix = '', tag + prefix = self.namespacemap.get(prefix, prefix) + if prefix: + prefix = prefix + '_' + + # call special handler (if defined) or default handler + methodname = '_end_' + prefix + suffix + try: + method = getattr(self, methodname) + method() + except AttributeError: + self.pop(prefix + suffix) + + # track inline content + if self.incontent and self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): + # element declared itself as escaped markup, but it isn't really + self.contentparams['type'] = 'application/xhtml+xml' + if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml': + tag = tag.split(':')[-1] + self.handle_data('' % tag, escape=0) + + # track xml:base and xml:lang going out of scope + if self.basestack: + self.basestack.pop() + if self.basestack and self.basestack[-1]: + self.baseuri = self.basestack[-1] + if self.langstack: + self.langstack.pop() + if self.langstack: # and (self.langstack[-1] is not None): + self.lang = self.langstack[-1] + + def handle_charref(self, ref): + # called for each character reference, e.g. for ' ', ref will be '160' + if not self.elementstack: return + ref = ref.lower() + if ref in ('34', '38', '39', '60', '62', 'x22', 'x26', 'x27', 'x3c', 'x3e'): + text = '&#%s;' % ref + else: + if ref[0] == 'x': + c = int(ref[1:], 16) + else: + c = int(ref) + text = unichr(c).encode('utf-8') + self.elementstack[-1][2].append(text) + + def handle_entityref(self, ref): + # called for each entity reference, e.g. for '©', ref will be 'copy' + if not self.elementstack: return + if _debug: sys.stderr.write('entering handle_entityref with %s\n' % ref) + if ref in ('lt', 'gt', 'quot', 'amp', 'apos'): + text = '&%s;' % ref + else: + # entity resolution graciously donated by Aaron Swartz + def name2cp(k): + import htmlentitydefs + if hasattr(htmlentitydefs, 'name2codepoint'): # requires Python 2.3 + return htmlentitydefs.name2codepoint[k] + k = htmlentitydefs.entitydefs[k] + if k.startswith('&#') and k.endswith(';'): + return int(k[2:-1]) # not in latin-1 + return ord(k) + try: name2cp(ref) + except KeyError: text = '&%s;' % ref + else: text = unichr(name2cp(ref)).encode('utf-8') + self.elementstack[-1][2].append(text) + + def handle_data(self, text, escape=1): + # called for each block of plain text, i.e. outside of any tag and + # not containing any character or entity references + if not self.elementstack: return + if escape and self.contentparams.get('type') == 'application/xhtml+xml': + text = _xmlescape(text) + self.elementstack[-1][2].append(text) + + def handle_comment(self, text): + # called for each comment, e.g. + pass + + def handle_pi(self, text): + # called for each processing instruction, e.g. + pass + + def handle_decl(self, text): + pass + + def parse_declaration(self, i): + # override internal declaration handler to handle CDATA blocks + if _debug: sys.stderr.write('entering parse_declaration\n') + if self.rawdata[i:i+9] == '', i) + if k == -1: k = len(self.rawdata) + self.handle_data(_xmlescape(self.rawdata[i+9:k]), 0) + return k+3 + else: + k = self.rawdata.find('>', i) + return k+1 + + def mapContentType(self, contentType): + contentType = contentType.lower() + if contentType == 'text': + contentType = 'text/plain' + elif contentType == 'html': + contentType = 'text/html' + elif contentType == 'xhtml': + contentType = 'application/xhtml+xml' + return contentType + + def trackNamespace(self, prefix, uri): + loweruri = uri.lower() + if (prefix, loweruri) == (None, 'http://my.netscape.com/rdf/simple/0.9/') and not self.version: + self.version = 'rss090' + if loweruri == 'http://purl.org/rss/1.0/' and not self.version: + self.version = 'rss10' + if loweruri == 'http://www.w3.org/2005/atom' and not self.version: + self.version = 'atom10' + if loweruri.find('backend.userland.com/rss') <> -1: + # match any backend.userland.com namespace + uri = 'http://backend.userland.com/rss' + loweruri = uri + if self._matchnamespaces.has_key(loweruri): + self.namespacemap[prefix] = self._matchnamespaces[loweruri] + self.namespacesInUse[self._matchnamespaces[loweruri]] = uri + else: + self.namespacesInUse[prefix or ''] = uri + + def resolveURI(self, uri): + return _urljoin(self.baseuri or '', uri) + + def decodeEntities(self, element, data): + return data + + def push(self, element, expectingText): + self.elementstack.append([element, expectingText, []]) + + def pop(self, element, stripWhitespace=1): + if not self.elementstack: return + if self.elementstack[-1][0] != element: return + + element, expectingText, pieces = self.elementstack.pop() + output = ''.join(pieces) + if stripWhitespace: + output = output.strip() + if not expectingText: return output + + # decode base64 content + if base64 and self.contentparams.get('base64', 0): + try: + output = base64.decodestring(output) + except binascii.Error: + pass + except binascii.Incomplete: + pass + + # resolve relative URIs + if (element in self.can_be_relative_uri) and output: + output = self.resolveURI(output) + + # decode entities within embedded markup + if not self.contentparams.get('base64', 0): + output = self.decodeEntities(element, output) + + # remove temporary cruft from contentparams + try: + del self.contentparams['mode'] + except KeyError: + pass + try: + del self.contentparams['base64'] + except KeyError: + pass + + # resolve relative URIs within embedded markup + if self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types: + if element in self.can_contain_relative_uris: + output = _resolveRelativeURIs(output, self.baseuri, self.encoding) + + # sanitize embedded markup + if self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types: + if element in self.can_contain_dangerous_markup: + output = _sanitizeHTML(output, self.encoding) + + if self.encoding and type(output) != type(u''): + try: + output = unicode(output, self.encoding) + except: + pass + + # categories/tags/keywords/whatever are handled in _end_category + if element == 'category': + return output + + # store output in appropriate place(s) + if self.inentry and not self.insource: + if element == 'content': + self.entries[-1].setdefault(element, []) + contentparams = copy.deepcopy(self.contentparams) + contentparams['value'] = output + self.entries[-1][element].append(contentparams) + elif element == 'link': + self.entries[-1][element] = output + if output: + self.entries[-1]['links'][-1]['href'] = output + else: + if element == 'description': + element = 'summary' + self.entries[-1][element] = output + if self.incontent: + contentparams = copy.deepcopy(self.contentparams) + contentparams['value'] = output + self.entries[-1][element + '_detail'] = contentparams + elif (self.infeed or self.insource) and (not self.intextinput) and (not self.inimage): + context = self._getContext() + if element == 'description': + element = 'subtitle' + context[element] = output + if element == 'link': + context['links'][-1]['href'] = output + elif self.incontent: + contentparams = copy.deepcopy(self.contentparams) + contentparams['value'] = output + context[element + '_detail'] = contentparams + return output + + def pushContent(self, tag, attrsD, defaultContentType, expectingText): + self.incontent += 1 + self.contentparams = FeedParserDict({ + 'type': self.mapContentType(attrsD.get('type', defaultContentType)), + 'language': self.lang, + 'base': self.baseuri}) + self.contentparams['base64'] = self._isBase64(attrsD, self.contentparams) + self.push(tag, expectingText) + + def popContent(self, tag): + value = self.pop(tag) + self.incontent -= 1 + self.contentparams.clear() + return value + + def _mapToStandardPrefix(self, name): + colonpos = name.find(':') + if colonpos <> -1: + prefix = name[:colonpos] + suffix = name[colonpos+1:] + prefix = self.namespacemap.get(prefix, prefix) + name = prefix + ':' + suffix + return name + + def _getAttribute(self, attrsD, name): + return attrsD.get(self._mapToStandardPrefix(name)) + + def _isBase64(self, attrsD, contentparams): + if attrsD.get('mode', '') == 'base64': + return 1 + if self.contentparams['type'].startswith('text/'): + return 0 + if self.contentparams['type'].endswith('+xml'): + return 0 + if self.contentparams['type'].endswith('/xml'): + return 0 + return 1 + + def _itsAnHrefDamnIt(self, attrsD): + href = attrsD.get('url', attrsD.get('uri', attrsD.get('href', None))) + if href: + try: + del attrsD['url'] + except KeyError: + pass + try: + del attrsD['uri'] + except KeyError: + pass + attrsD['href'] = href + return attrsD + + def _save(self, key, value): + context = self._getContext() + context.setdefault(key, value) + + def _start_rss(self, attrsD): + versionmap = {'0.91': 'rss091u', + '0.92': 'rss092', + '0.93': 'rss093', + '0.94': 'rss094'} + if not self.version: + attr_version = attrsD.get('version', '') + version = versionmap.get(attr_version) + if version: + self.version = version + elif attr_version.startswith('2.'): + self.version = 'rss20' + else: + self.version = 'rss' + + def _start_dlhottitles(self, attrsD): + self.version = 'hotrss' + + def _start_channel(self, attrsD): + self.infeed = 1 + self._cdf_common(attrsD) + _start_feedinfo = _start_channel + + def _cdf_common(self, attrsD): + if attrsD.has_key('lastmod'): + self._start_modified({}) + self.elementstack[-1][-1] = attrsD['lastmod'] + self._end_modified() + if attrsD.has_key('href'): + self._start_link({}) + self.elementstack[-1][-1] = attrsD['href'] + self._end_link() + + def _start_feed(self, attrsD): + self.infeed = 1 + versionmap = {'0.1': 'atom01', + '0.2': 'atom02', + '0.3': 'atom03'} + if not self.version: + attr_version = attrsD.get('version') + version = versionmap.get(attr_version) + if version: + self.version = version + else: + self.version = 'atom' + + def _end_channel(self): + self.infeed = 0 + _end_feed = _end_channel + + def _start_image(self, attrsD): + self.inimage = 1 + self.push('image', 0) + context = self._getContext() + context.setdefault('image', FeedParserDict()) + + def _end_image(self): + self.pop('image') + self.inimage = 0 + + def _start_textinput(self, attrsD): + self.intextinput = 1 + self.push('textinput', 0) + context = self._getContext() + context.setdefault('textinput', FeedParserDict()) + _start_textInput = _start_textinput + + def _end_textinput(self): + self.pop('textinput') + self.intextinput = 0 + _end_textInput = _end_textinput + + def _start_author(self, attrsD): + self.inauthor = 1 + self.push('author', 1) + _start_managingeditor = _start_author + _start_dc_author = _start_author + _start_dc_creator = _start_author + _start_itunes_author = _start_author + + def _end_author(self): + self.pop('author') + self.inauthor = 0 + self._sync_author_detail() + _end_managingeditor = _end_author + _end_dc_author = _end_author + _end_dc_creator = _end_author + _end_itunes_author = _end_author + + def _start_itunes_owner(self, attrsD): + self.inpublisher = 1 + self.push('publisher', 0) + + def _end_itunes_owner(self): + self.pop('publisher') + self.inpublisher = 0 + self._sync_author_detail('publisher') + + def _start_contributor(self, attrsD): + self.incontributor = 1 + context = self._getContext() + context.setdefault('contributors', []) + context['contributors'].append(FeedParserDict()) + self.push('contributor', 0) + + def _end_contributor(self): + self.pop('contributor') + self.incontributor = 0 + + def _start_dc_contributor(self, attrsD): + self.incontributor = 1 + context = self._getContext() + context.setdefault('contributors', []) + context['contributors'].append(FeedParserDict()) + self.push('name', 0) + + def _end_dc_contributor(self): + self._end_name() + self.incontributor = 0 + + def _start_name(self, attrsD): + self.push('name', 0) + _start_itunes_name = _start_name + + def _end_name(self): + value = self.pop('name') + if self.inpublisher: + self._save_author('name', value, 'publisher') + elif self.inauthor: + self._save_author('name', value) + elif self.incontributor: + self._save_contributor('name', value) + elif self.intextinput: + context = self._getContext() + context['textinput']['name'] = value + _end_itunes_name = _end_name + + def _start_width(self, attrsD): + self.push('width', 0) + + def _end_width(self): + value = self.pop('width') + try: + value = int(value) + except: + value = 0 + if self.inimage: + context = self._getContext() + context['image']['width'] = value + + def _start_height(self, attrsD): + self.push('height', 0) + + def _end_height(self): + value = self.pop('height') + try: + value = int(value) + except: + value = 0 + if self.inimage: + context = self._getContext() + context['image']['height'] = value + + def _start_url(self, attrsD): + self.push('href', 1) + _start_homepage = _start_url + _start_uri = _start_url + + def _end_url(self): + value = self.pop('href') + if self.inauthor: + self._save_author('href', value) + elif self.incontributor: + self._save_contributor('href', value) + elif self.inimage: + context = self._getContext() + context['image']['href'] = value + elif self.intextinput: + context = self._getContext() + context['textinput']['link'] = value + _end_homepage = _end_url + _end_uri = _end_url + + def _start_email(self, attrsD): + self.push('email', 0) + _start_itunes_email = _start_email + + def _end_email(self): + value = self.pop('email') + if self.inpublisher: + self._save_author('email', value, 'publisher') + elif self.inauthor: + self._save_author('email', value) + elif self.incontributor: + self._save_contributor('email', value) + _end_itunes_email = _end_email + + def _getContext(self): + if self.insource: + context = self.sourcedata + elif self.inentry: + context = self.entries[-1] + else: + context = self.feeddata + return context + + def _save_author(self, key, value, prefix='author'): + context = self._getContext() + context.setdefault(prefix + '_detail', FeedParserDict()) + context[prefix + '_detail'][key] = value + self._sync_author_detail() + + def _save_contributor(self, key, value): + context = self._getContext() + context.setdefault('contributors', [FeedParserDict()]) + context['contributors'][-1][key] = value + + def _sync_author_detail(self, key='author'): + context = self._getContext() + detail = context.get('%s_detail' % key) + if detail: + name = detail.get('name') + email = detail.get('email') + if name and email: + context[key] = '%s (%s)' % (name, email) + elif name: + context[key] = name + elif email: + context[key] = email + else: + author = context.get(key) + if not author: return + emailmatch = re.search(r'''(([a-zA-Z0-9\_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))''', author) + if not emailmatch: return + email = emailmatch.group(0) + # probably a better way to do the following, but it passes all the tests + author = author.replace(email, '') + author = author.replace('()', '') + author = author.strip() + if author and (author[0] == '('): + author = author[1:] + if author and (author[-1] == ')'): + author = author[:-1] + author = author.strip() + context.setdefault('%s_detail' % key, FeedParserDict()) + context['%s_detail' % key]['name'] = author + context['%s_detail' % key]['email'] = email + + def _start_subtitle(self, attrsD): + self.pushContent('subtitle', attrsD, 'text/plain', 1) + _start_tagline = _start_subtitle + _start_itunes_subtitle = _start_subtitle + + def _end_subtitle(self): + self.popContent('subtitle') + _end_tagline = _end_subtitle + _end_itunes_subtitle = _end_subtitle + + def _start_rights(self, attrsD): + self.pushContent('rights', attrsD, 'text/plain', 1) + _start_dc_rights = _start_rights + _start_copyright = _start_rights + + def _end_rights(self): + self.popContent('rights') + _end_dc_rights = _end_rights + _end_copyright = _end_rights + + def _start_item(self, attrsD): + self.entries.append(FeedParserDict()) + self.push('item', 0) + self.inentry = 1 + self.guidislink = 0 + id = self._getAttribute(attrsD, 'rdf:about') + if id: + context = self._getContext() + context['id'] = id + self._cdf_common(attrsD) + _start_entry = _start_item + _start_product = _start_item + + def _end_item(self): + self.pop('item') + self.inentry = 0 + _end_entry = _end_item + + def _start_dc_language(self, attrsD): + self.push('language', 1) + _start_language = _start_dc_language + + def _end_dc_language(self): + self.lang = self.pop('language') + _end_language = _end_dc_language + + def _start_dc_publisher(self, attrsD): + self.push('publisher', 1) + _start_webmaster = _start_dc_publisher + + def _end_dc_publisher(self): + self.pop('publisher') + self._sync_author_detail('publisher') + _end_webmaster = _end_dc_publisher + + def _start_published(self, attrsD): + self.push('published', 1) + _start_dcterms_issued = _start_published + _start_issued = _start_published + + def _end_published(self): + value = self.pop('published') + self._save('published_parsed', _parse_date(value)) + _end_dcterms_issued = _end_published + _end_issued = _end_published + + def _start_updated(self, attrsD): + self.push('updated', 1) + _start_modified = _start_updated + _start_dcterms_modified = _start_updated + _start_pubdate = _start_updated + _start_dc_date = _start_updated + + def _end_updated(self): + value = self.pop('updated') + parsed_value = _parse_date(value) + self._save('updated_parsed', parsed_value) + _end_modified = _end_updated + _end_dcterms_modified = _end_updated + _end_pubdate = _end_updated + _end_dc_date = _end_updated + + def _start_created(self, attrsD): + self.push('created', 1) + _start_dcterms_created = _start_created + + def _end_created(self): + value = self.pop('created') + self._save('created_parsed', _parse_date(value)) + _end_dcterms_created = _end_created + + def _start_expirationdate(self, attrsD): + self.push('expired', 1) + + def _end_expirationdate(self): + self._save('expired_parsed', _parse_date(self.pop('expired'))) + + def _start_cc_license(self, attrsD): + self.push('license', 1) + value = self._getAttribute(attrsD, 'rdf:resource') + if value: + self.elementstack[-1][2].append(value) + self.pop('license') + + def _start_creativecommons_license(self, attrsD): + self.push('license', 1) + + def _end_creativecommons_license(self): + self.pop('license') + + def _addTag(self, term, scheme, label): + context = self._getContext() + tags = context.setdefault('tags', []) + if (not term) and (not scheme) and (not label): return + value = FeedParserDict({'term': term, 'scheme': scheme, 'label': label}) + if value not in tags: + tags.append(FeedParserDict({'term': term, 'scheme': scheme, 'label': label})) + + def _start_category(self, attrsD): + if _debug: sys.stderr.write('entering _start_category with %s\n' % repr(attrsD)) + term = attrsD.get('term') + scheme = attrsD.get('scheme', attrsD.get('domain')) + label = attrsD.get('label') + self._addTag(term, scheme, label) + self.push('category', 1) + _start_dc_subject = _start_category + _start_keywords = _start_category + + def _end_itunes_keywords(self): + for term in self.pop('itunes_keywords').split(): + self._addTag(term, 'http://www.itunes.com/', None) + + def _start_itunes_category(self, attrsD): + self._addTag(attrsD.get('text'), 'http://www.itunes.com/', None) + self.push('category', 1) + + def _end_category(self): + value = self.pop('category') + if not value: return + context = self._getContext() + tags = context['tags'] + if value and len(tags) and not tags[-1]['term']: + tags[-1]['term'] = value + else: + self._addTag(value, None, None) + _end_dc_subject = _end_category + _end_keywords = _end_category + _end_itunes_category = _end_category + + def _start_cloud(self, attrsD): + self._getContext()['cloud'] = FeedParserDict(attrsD) + + def _start_link(self, attrsD): + attrsD.setdefault('rel', 'alternate') + attrsD.setdefault('type', 'text/html') + attrsD = self._itsAnHrefDamnIt(attrsD) + if attrsD.has_key('href'): + attrsD['href'] = self.resolveURI(attrsD['href']) + expectingText = self.infeed or self.inentry or self.insource + context = self._getContext() + context.setdefault('links', []) + context['links'].append(FeedParserDict(attrsD)) + if attrsD['rel'] == 'enclosure': + self._start_enclosure(attrsD) + if attrsD.has_key('href'): + expectingText = 0 + if (attrsD.get('rel') == 'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types): + context['link'] = attrsD['href'] + else: + self.push('link', expectingText) + _start_producturl = _start_link + + def _end_link(self): + value = self.pop('link') + context = self._getContext() + if self.intextinput: + context['textinput']['link'] = value + if self.inimage: + context['image']['link'] = value + _end_producturl = _end_link + + def _start_guid(self, attrsD): + self.guidislink = (attrsD.get('ispermalink', 'true') == 'true') + self.push('id', 1) + + def _end_guid(self): + value = self.pop('id') + self._save('guidislink', self.guidislink and not self._getContext().has_key('link')) + if self.guidislink: + # guid acts as link, but only if 'ispermalink' is not present or is 'true', + # and only if the item doesn't already have a link element + self._save('link', value) + + def _start_title(self, attrsD): + self.pushContent('title', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) + _start_dc_title = _start_title + _start_media_title = _start_title + + def _end_title(self): + value = self.popContent('title') + context = self._getContext() + if self.intextinput: + context['textinput']['title'] = value + elif self.inimage: + context['image']['title'] = value + _end_dc_title = _end_title + _end_media_title = _end_title + + def _start_description(self, attrsD): + context = self._getContext() + if context.has_key('summary'): + self._summaryKey = 'content' + self._start_content(attrsD) + else: + self.pushContent('description', attrsD, 'text/html', self.infeed or self.inentry or self.insource) + + def _start_abstract(self, attrsD): + self.pushContent('description', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) + + def _end_description(self): + if self._summaryKey == 'content': + self._end_content() + else: + value = self.popContent('description') + context = self._getContext() + if self.intextinput: + context['textinput']['description'] = value + elif self.inimage: + context['image']['description'] = value + self._summaryKey = None + _end_abstract = _end_description + + def _start_info(self, attrsD): + self.pushContent('info', attrsD, 'text/plain', 1) + _start_feedburner_browserfriendly = _start_info + + def _end_info(self): + self.popContent('info') + _end_feedburner_browserfriendly = _end_info + + def _start_generator(self, attrsD): + if attrsD: + attrsD = self._itsAnHrefDamnIt(attrsD) + if attrsD.has_key('href'): + attrsD['href'] = self.resolveURI(attrsD['href']) + self._getContext()['generator_detail'] = FeedParserDict(attrsD) + self.push('generator', 1) + + def _end_generator(self): + value = self.pop('generator') + context = self._getContext() + if context.has_key('generator_detail'): + context['generator_detail']['name'] = value + + def _start_admin_generatoragent(self, attrsD): + self.push('generator', 1) + value = self._getAttribute(attrsD, 'rdf:resource') + if value: + self.elementstack[-1][2].append(value) + self.pop('generator') + self._getContext()['generator_detail'] = FeedParserDict({'href': value}) + + def _start_admin_errorreportsto(self, attrsD): + self.push('errorreportsto', 1) + value = self._getAttribute(attrsD, 'rdf:resource') + if value: + self.elementstack[-1][2].append(value) + self.pop('errorreportsto') + + def _start_summary(self, attrsD): + context = self._getContext() + if context.has_key('summary'): + self._summaryKey = 'content' + self._start_content(attrsD) + else: + self._summaryKey = 'summary' + self.pushContent(self._summaryKey, attrsD, 'text/plain', 1) + _start_itunes_summary = _start_summary + + def _end_summary(self): + if self._summaryKey == 'content': + self._end_content() + else: + self.popContent(self._summaryKey or 'summary') + self._summaryKey = None + _end_itunes_summary = _end_summary + + def _start_enclosure(self, attrsD): + attrsD = self._itsAnHrefDamnIt(attrsD) + self._getContext().setdefault('enclosures', []).append(FeedParserDict(attrsD)) + href = attrsD.get('href') + if href: + context = self._getContext() + if not context.get('id'): + context['id'] = href + + def _start_source(self, attrsD): + self.insource = 1 + + def _end_source(self): + self.insource = 0 + self._getContext()['source'] = copy.deepcopy(self.sourcedata) + self.sourcedata.clear() + + def _start_content(self, attrsD): + self.pushContent('content', attrsD, 'text/plain', 1) + src = attrsD.get('src') + if src: + self.contentparams['src'] = src + self.push('content', 1) + + def _start_prodlink(self, attrsD): + self.pushContent('content', attrsD, 'text/html', 1) + + def _start_body(self, attrsD): + self.pushContent('content', attrsD, 'application/xhtml+xml', 1) + _start_xhtml_body = _start_body + + def _start_content_encoded(self, attrsD): + self.pushContent('content', attrsD, 'text/html', 1) + _start_fullitem = _start_content_encoded + + def _end_content(self): + copyToDescription = self.mapContentType(self.contentparams.get('type')) in (['text/plain'] + self.html_types) + value = self.popContent('content') + if copyToDescription: + self._save('description', value) + _end_body = _end_content + _end_xhtml_body = _end_content + _end_content_encoded = _end_content + _end_fullitem = _end_content + _end_prodlink = _end_content + + def _start_itunes_image(self, attrsD): + self.push('itunes_image', 0) + self._getContext()['image'] = FeedParserDict({'href': attrsD.get('href')}) + _start_itunes_link = _start_itunes_image + + def _end_itunes_block(self): + value = self.pop('itunes_block', 0) + self._getContext()['itunes_block'] = (value == 'yes') and 1 or 0 + + def _end_itunes_explicit(self): + value = self.pop('itunes_explicit', 0) + self._getContext()['itunes_explicit'] = (value == 'yes') and 1 or 0 + +if _XML_AVAILABLE: + class _StrictFeedParser(_FeedParserMixin, xml.sax.handler.ContentHandler): + def __init__(self, baseuri, baselang, encoding): + if _debug: sys.stderr.write('trying StrictFeedParser\n') + xml.sax.handler.ContentHandler.__init__(self) + _FeedParserMixin.__init__(self, baseuri, baselang, encoding) + self.bozo = 0 + self.exc = None + + def startPrefixMapping(self, prefix, uri): + self.trackNamespace(prefix, uri) + + def startElementNS(self, name, qname, attrs): + namespace, localname = name + lowernamespace = str(namespace or '').lower() + if lowernamespace.find('backend.userland.com/rss') <> -1: + # match any backend.userland.com namespace + namespace = 'http://backend.userland.com/rss' + lowernamespace = namespace + if qname and qname.find(':') > 0: + givenprefix = qname.split(':')[0] + else: + givenprefix = None + prefix = self._matchnamespaces.get(lowernamespace, givenprefix) + if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and not self.namespacesInUse.has_key(givenprefix): + raise UndeclaredNamespace, "'%s' is not associated with a namespace" % givenprefix + if prefix: + localname = prefix + ':' + localname + localname = str(localname).lower() + if _debug: sys.stderr.write('startElementNS: qname = %s, namespace = %s, givenprefix = %s, prefix = %s, attrs = %s, localname = %s\n' % (qname, namespace, givenprefix, prefix, attrs.items(), localname)) + + # qname implementation is horribly broken in Python 2.1 (it + # doesn't report any), and slightly broken in Python 2.2 (it + # doesn't report the xml: namespace). So we match up namespaces + # with a known list first, and then possibly override them with + # the qnames the SAX parser gives us (if indeed it gives us any + # at all). Thanks to MatejC for helping me test this and + # tirelessly telling me that it didn't work yet. + attrsD = {} + for (namespace, attrlocalname), attrvalue in attrs._attrs.items(): + lowernamespace = (namespace or '').lower() + prefix = self._matchnamespaces.get(lowernamespace, '') + if prefix: + attrlocalname = prefix + ':' + attrlocalname + attrsD[str(attrlocalname).lower()] = attrvalue + for qname in attrs.getQNames(): + attrsD[str(qname).lower()] = attrs.getValueByQName(qname) + self.unknown_starttag(localname, attrsD.items()) + + def characters(self, text): + self.handle_data(text) + + def endElementNS(self, name, qname): + namespace, localname = name + lowernamespace = str(namespace or '').lower() + if qname and qname.find(':') > 0: + givenprefix = qname.split(':')[0] + else: + givenprefix = '' + prefix = self._matchnamespaces.get(lowernamespace, givenprefix) + if prefix: + localname = prefix + ':' + localname + localname = str(localname).lower() + self.unknown_endtag(localname) + + def error(self, exc): + self.bozo = 1 + self.exc = exc + + def fatalError(self, exc): + self.error(exc) + raise exc + +class _BaseHTMLProcessor(sgmllib.SGMLParser): + elements_no_end_tag = ['area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', + 'img', 'input', 'isindex', 'link', 'meta', 'param'] + + def __init__(self, encoding): + self.encoding = encoding + if _debug: sys.stderr.write('entering BaseHTMLProcessor, encoding=%s\n' % self.encoding) + sgmllib.SGMLParser.__init__(self) + + def reset(self): + self.pieces = [] + sgmllib.SGMLParser.reset(self) + + def _shorttag_replace(self, match): + tag = match.group(1) + if tag in self.elements_no_end_tag: + return '<' + tag + ' />' + else: + return '<' + tag + '>' + + def feed(self, data): + data = re.compile(r'', self._shorttag_replace, data) # bug [ 1399464 ] Bad regexp for _shorttag_replace + data = re.sub(r'<([^<\s]+?)\s*/>', self._shorttag_replace, data) + data = data.replace(''', "'") + data = data.replace('"', '"') + if self.encoding and type(data) == type(u''): + data = data.encode(self.encoding) + sgmllib.SGMLParser.feed(self, data) + + def normalize_attrs(self, attrs): + # utility method to be called by descendants + attrs = [(k.lower(), v) for k, v in attrs] + attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs] + return attrs + + def unknown_starttag(self, tag, attrs): + # called for each start tag + # attrs is a list of (attr, value) tuples + # e.g. for
    , tag='pre', attrs=[('class', 'screen')]
    +        if _debug: sys.stderr.write('_BaseHTMLProcessor, unknown_starttag, tag=%s\n' % tag)
    +        uattrs = []
    +        # thanks to Kevin Marks for this breathtaking hack to deal with (valid) high-bit attribute values in UTF-8 feeds
    +        for key, value in attrs:
    +            if type(value) != type(u''):
    +                value = unicode(value, self.encoding)
    +            uattrs.append((unicode(key, self.encoding), value))
    +        strattrs = u''.join([u' %s="%s"' % (key, value) for key, value in uattrs]).encode(self.encoding)
    +        if tag in self.elements_no_end_tag:
    +            self.pieces.append('<%(tag)s%(strattrs)s />' % locals())
    +        else:
    +            self.pieces.append('<%(tag)s%(strattrs)s>' % locals())
    +
    +    def unknown_endtag(self, tag):
    +        # called for each end tag, e.g. for 
    , tag will be 'pre' + # Reconstruct the original end tag. + if tag not in self.elements_no_end_tag: + self.pieces.append("" % locals()) + + def handle_charref(self, ref): + # called for each character reference, e.g. for ' ', ref will be '160' + # Reconstruct the original character reference. + self.pieces.append('&#%(ref)s;' % locals()) + + def handle_entityref(self, ref): + # called for each entity reference, e.g. for '©', ref will be 'copy' + # Reconstruct the original entity reference. + self.pieces.append('&%(ref)s;' % locals()) + + def handle_data(self, text): + # called for each block of plain text, i.e. outside of any tag and + # not containing any character or entity references + # Store the original text verbatim. + if _debug: sys.stderr.write('_BaseHTMLProcessor, handle_text, text=%s\n' % text) + self.pieces.append(text) + + def handle_comment(self, text): + # called for each HTML comment, e.g. + # Reconstruct the original comment. + self.pieces.append('' % locals()) + + def handle_pi(self, text): + # called for each processing instruction, e.g. + # Reconstruct original processing instruction. + self.pieces.append('' % locals()) + + def handle_decl(self, text): + # called for the DOCTYPE, if present, e.g. + # + # Reconstruct original DOCTYPE + self.pieces.append('' % locals()) + + _new_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9:]*\s*').match + def _scan_name(self, i, declstartpos): + rawdata = self.rawdata + n = len(rawdata) + if i == n: + return None, -1 + m = self._new_declname_match(rawdata, i) + if m: + s = m.group() + name = s.strip() + if (i + len(s)) == n: + return None, -1 # end of buffer + return name.lower(), m.end() + else: + self.handle_data(rawdata) +# self.updatepos(declstartpos, i) + return None, -1 + + def output(self): + '''Return processed HTML as a single string''' + return ''.join([str(p) for p in self.pieces]) + +class _LooseFeedParser(_FeedParserMixin, _BaseHTMLProcessor): + def __init__(self, baseuri, baselang, encoding): + sgmllib.SGMLParser.__init__(self) + _FeedParserMixin.__init__(self, baseuri, baselang, encoding) + + def decodeEntities(self, element, data): + data = data.replace('<', '<') + data = data.replace('<', '<') + data = data.replace('>', '>') + data = data.replace('>', '>') + data = data.replace('&', '&') + data = data.replace('&', '&') + data = data.replace('"', '"') + data = data.replace('"', '"') + data = data.replace(''', ''') + data = data.replace(''', ''') + if self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): + data = data.replace('<', '<') + data = data.replace('>', '>') + data = data.replace('&', '&') + data = data.replace('"', '"') + data = data.replace(''', "'") + return data + +class _RelativeURIResolver(_BaseHTMLProcessor): + relative_uris = [('a', 'href'), + ('applet', 'codebase'), + ('area', 'href'), + ('blockquote', 'cite'), + ('body', 'background'), + ('del', 'cite'), + ('form', 'action'), + ('frame', 'longdesc'), + ('frame', 'src'), + ('iframe', 'longdesc'), + ('iframe', 'src'), + ('head', 'profile'), + ('img', 'longdesc'), + ('img', 'src'), + ('img', 'usemap'), + ('input', 'src'), + ('input', 'usemap'), + ('ins', 'cite'), + ('link', 'href'), + ('object', 'classid'), + ('object', 'codebase'), + ('object', 'data'), + ('object', 'usemap'), + ('q', 'cite'), + ('script', 'src')] + + def __init__(self, baseuri, encoding): + _BaseHTMLProcessor.__init__(self, encoding) + self.baseuri = baseuri + + def resolveURI(self, uri): + return _urljoin(self.baseuri, uri) + + def unknown_starttag(self, tag, attrs): + attrs = self.normalize_attrs(attrs) + attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs] + _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) + +def _resolveRelativeURIs(htmlSource, baseURI, encoding): + if _debug: sys.stderr.write('entering _resolveRelativeURIs\n') + p = _RelativeURIResolver(baseURI, encoding) + p.feed(htmlSource) + return p.output() + +class _HTMLSanitizer(_BaseHTMLProcessor): + acceptable_elements = ['a', 'abbr', 'acronym', 'address', 'area', 'b', 'big', + 'blockquote', 'br', 'button', 'caption', 'center', 'cite', 'code', 'col', + 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt', 'em', 'fieldset', + 'font', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', + 'ins', 'kbd', 'label', 'legend', 'li', 'map', 'menu', 'ol', 'optgroup', + 'option', 'p', 'pre', 'q', 's', 'samp', 'select', 'small', 'span', 'strike', + 'strong', 'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', + 'thead', 'tr', 'tt', 'u', 'ul', 'var'] + + acceptable_attributes = ['abbr', 'accept', 'accept-charset', 'accesskey', + 'action', 'align', 'alt', 'axis', 'border', 'cellpadding', 'cellspacing', + 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'clear', 'cols', + 'colspan', 'color', 'compact', 'coords', 'datetime', 'dir', 'disabled', + 'enctype', 'for', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', + 'id', 'ismap', 'label', 'lang', 'longdesc', 'maxlength', 'media', 'method', + 'multiple', 'name', 'nohref', 'noshade', 'nowrap', 'prompt', 'readonly', + 'rel', 'rev', 'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', + 'span', 'src', 'start', 'summary', 'tabindex', 'target', 'title', 'type', + 'usemap', 'valign', 'value', 'vspace', 'width'] + + unacceptable_elements_with_end_tag = ['script', 'applet'] + + def reset(self): + _BaseHTMLProcessor.reset(self) + self.unacceptablestack = 0 + + def unknown_starttag(self, tag, attrs): + if not tag in self.acceptable_elements: + if tag in self.unacceptable_elements_with_end_tag: + self.unacceptablestack += 1 + return + attrs = self.normalize_attrs(attrs) + attrs = [(key, value) for key, value in attrs if key in self.acceptable_attributes] + _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) + + def unknown_endtag(self, tag): + if not tag in self.acceptable_elements: + if tag in self.unacceptable_elements_with_end_tag: + self.unacceptablestack -= 1 + return + _BaseHTMLProcessor.unknown_endtag(self, tag) + + def handle_pi(self, text): + pass + + def handle_decl(self, text): + pass + + def handle_data(self, text): + if not self.unacceptablestack: + _BaseHTMLProcessor.handle_data(self, text) + +def _sanitizeHTML(htmlSource, encoding): + p = _HTMLSanitizer(encoding) + p.feed(htmlSource) + data = p.output() + if TIDY_MARKUP: + # loop through list of preferred Tidy interfaces looking for one that's installed, + # then set up a common _tidy function to wrap the interface-specific API. + _tidy = None + for tidy_interface in PREFERRED_TIDY_INTERFACES: + try: + if tidy_interface == "uTidy": + from tidy import parseString as _utidy + def _tidy(data, **kwargs): + return str(_utidy(data, **kwargs)) + break + elif tidy_interface == "mxTidy": + from mx.Tidy import Tidy as _mxtidy + def _tidy(data, **kwargs): + nerrors, nwarnings, data, errordata = _mxtidy.tidy(data, **kwargs) + return data + break + except: + pass + if _tidy: + utf8 = type(data) == type(u'') + if utf8: + data = data.encode('utf-8') + data = _tidy(data, output_xhtml=1, numeric_entities=1, wrap=0, char_encoding="utf8") + if utf8: + data = unicode(data, 'utf-8') + if data.count(''): + data = data.split('>', 1)[1] + if data.count('= '2.3.3' + assert base64 != None + user, passw = base64.decodestring(req.headers['Authorization'].split(' ')[1]).split(':') + realm = re.findall('realm="([^"]*)"', headers['WWW-Authenticate'])[0] + self.add_password(realm, host, user, passw) + retry = self.http_error_auth_reqed('www-authenticate', host, req, headers) + self.reset_retry_count() + return retry + except: + return self.http_error_default(req, fp, code, msg, headers) + +def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers): + """URL, filename, or string --> stream + + This function lets you define parsers that take any input source + (URL, pathname to local or network file, or actual data as a string) + and deal with it in a uniform manner. Returned object is guaranteed + to have all the basic stdio read methods (read, readline, readlines). + Just .close() the object when you're done with it. + + If the etag argument is supplied, it will be used as the value of an + If-None-Match request header. + + If the modified argument is supplied, it must be a tuple of 9 integers + as returned by gmtime() in the standard Python time module. This MUST + be in GMT (Greenwich Mean Time). The formatted date/time will be used + as the value of an If-Modified-Since request header. + + If the agent argument is supplied, it will be used as the value of a + User-Agent request header. + + If the referrer argument is supplied, it will be used as the value of a + Referer[sic] request header. + + If handlers is supplied, it is a list of handlers used to build a + urllib2 opener. + """ + + if hasattr(url_file_stream_or_string, 'read'): + return url_file_stream_or_string + + if url_file_stream_or_string == '-': + return sys.stdin + + if urlparse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp'): + if not agent: + agent = USER_AGENT + # test for inline user:password for basic auth + auth = None + if base64: + urltype, rest = urllib.splittype(url_file_stream_or_string) + realhost, rest = urllib.splithost(rest) + if realhost: + user_passwd, realhost = urllib.splituser(realhost) + if user_passwd: + url_file_stream_or_string = '%s://%s%s' % (urltype, realhost, rest) + auth = base64.encodestring(user_passwd).strip() + # try to open with urllib2 (to use optional headers) + request = urllib2.Request(url_file_stream_or_string) + request.add_header('User-Agent', agent) + if etag: + request.add_header('If-None-Match', etag) + if modified: + # format into an RFC 1123-compliant timestamp. We can't use + # time.strftime() since the %a and %b directives can be affected + # by the current locale, but RFC 2616 states that dates must be + # in English. + short_weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] + months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] + request.add_header('If-Modified-Since', '%s, %02d %s %04d %02d:%02d:%02d GMT' % (short_weekdays[modified[6]], modified[2], months[modified[1] - 1], modified[0], modified[3], modified[4], modified[5])) + if referrer: + request.add_header('Referer', referrer) + if gzip and zlib: + request.add_header('Accept-encoding', 'gzip, deflate') + elif gzip: + request.add_header('Accept-encoding', 'gzip') + elif zlib: + request.add_header('Accept-encoding', 'deflate') + else: + request.add_header('Accept-encoding', '') + if auth: + request.add_header('Authorization', 'Basic %s' % auth) + if ACCEPT_HEADER: + request.add_header('Accept', ACCEPT_HEADER) + request.add_header('A-IM', 'feed') # RFC 3229 support + opener = apply(urllib2.build_opener, tuple([_FeedURLHandler()] + handlers)) + opener.addheaders = [] # RMK - must clear so we only send our custom User-Agent + try: + return opener.open(request) + finally: + opener.close() # JohnD + + # try to open with native open function (if url_file_stream_or_string is a filename) + try: + return open(url_file_stream_or_string) + except: + pass + + # treat url_file_stream_or_string as string + return _StringIO(str(url_file_stream_or_string)) + +_date_handlers = [] +def registerDateHandler(func): + '''Register a date handler function (takes string, returns 9-tuple date in GMT)''' + _date_handlers.insert(0, func) + +# ISO-8601 date parsing routines written by Fazal Majid. +# The ISO 8601 standard is very convoluted and irregular - a full ISO 8601 +# parser is beyond the scope of feedparser and would be a worthwhile addition +# to the Python library. +# A single regular expression cannot parse ISO 8601 date formats into groups +# as the standard is highly irregular (for instance is 030104 2003-01-04 or +# 0301-04-01), so we use templates instead. +# Please note the order in templates is significant because we need a +# greedy match. +_iso8601_tmpl = ['YYYY-?MM-?DD', 'YYYY-MM', 'YYYY-?OOO', + 'YY-?MM-?DD', 'YY-?OOO', 'YYYY', + '-YY-?MM', '-OOO', '-YY', + '--MM-?DD', '--MM', + '---DD', + 'CC', ''] +_iso8601_re = [ + tmpl.replace( + 'YYYY', r'(?P\d{4})').replace( + 'YY', r'(?P\d\d)').replace( + 'MM', r'(?P[01]\d)').replace( + 'DD', r'(?P[0123]\d)').replace( + 'OOO', r'(?P[0123]\d\d)').replace( + 'CC', r'(?P\d\d$)') + + r'(T?(?P\d{2}):(?P\d{2})' + + r'(:(?P\d{2}))?' + + r'(?P[+-](?P\d{2})(:(?P\d{2}))?|Z)?)?' + for tmpl in _iso8601_tmpl] +del tmpl +_iso8601_matches = [re.compile(regex).match for regex in _iso8601_re] +del regex +def _parse_date_iso8601(dateString): + '''Parse a variety of ISO-8601-compatible formats like 20040105''' + m = None + for _iso8601_match in _iso8601_matches: + m = _iso8601_match(dateString) + if m: break + if not m: return + if m.span() == (0, 0): return + params = m.groupdict() + ordinal = params.get('ordinal', 0) + if ordinal: + ordinal = int(ordinal) + else: + ordinal = 0 + year = params.get('year', '--') + if not year or year == '--': + year = time.gmtime()[0] + elif len(year) == 2: + # ISO 8601 assumes current century, i.e. 93 -> 2093, NOT 1993 + year = 100 * int(time.gmtime()[0] / 100) + int(year) + else: + year = int(year) + month = params.get('month', '-') + if not month or month == '-': + # ordinals are NOT normalized by mktime, we simulate them + # by setting month=1, day=ordinal + if ordinal: + month = 1 + else: + month = time.gmtime()[1] + month = int(month) + day = params.get('day', 0) + if not day: + # see above + if ordinal: + day = ordinal + elif params.get('century', 0) or \ + params.get('year', 0) or params.get('month', 0): + day = 1 + else: + day = time.gmtime()[2] + else: + day = int(day) + # special case of the century - is the first year of the 21st century + # 2000 or 2001 ? The debate goes on... + if 'century' in params.keys(): + year = (int(params['century']) - 1) * 100 + 1 + # in ISO 8601 most fields are optional + for field in ['hour', 'minute', 'second', 'tzhour', 'tzmin']: + if not params.get(field, None): + params[field] = 0 + hour = int(params.get('hour', 0)) + minute = int(params.get('minute', 0)) + second = int(params.get('second', 0)) + # weekday is normalized by mktime(), we can ignore it + weekday = 0 + # daylight savings is complex, but not needed for feedparser's purposes + # as time zones, if specified, include mention of whether it is active + # (e.g. PST vs. PDT, CET). Using -1 is implementation-dependent and + # and most implementations have DST bugs + daylight_savings_flag = 0 + tm = [year, month, day, hour, minute, second, weekday, + ordinal, daylight_savings_flag] + # ISO 8601 time zone adjustments + tz = params.get('tz') + if tz and tz != 'Z': + if tz[0] == '-': + tm[3] += int(params.get('tzhour', 0)) + tm[4] += int(params.get('tzmin', 0)) + elif tz[0] == '+': + tm[3] -= int(params.get('tzhour', 0)) + tm[4] -= int(params.get('tzmin', 0)) + else: + return None + # Python's time.mktime() is a wrapper around the ANSI C mktime(3c) + # which is guaranteed to normalize d/m/y/h/m/s. + # Many implementations have bugs, but we'll pretend they don't. + return time.localtime(time.mktime(tm)) +registerDateHandler(_parse_date_iso8601) + +# 8-bit date handling routines written by ytrewq1. +_korean_year = u'\ub144' # b3e2 in euc-kr +_korean_month = u'\uc6d4' # bff9 in euc-kr +_korean_day = u'\uc77c' # c0cf in euc-kr +_korean_am = u'\uc624\uc804' # bfc0 c0fc in euc-kr +_korean_pm = u'\uc624\ud6c4' # bfc0 c8c4 in euc-kr + +_korean_onblog_date_re = \ + re.compile('(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})' % \ + (_korean_year, _korean_month, _korean_day)) +_korean_nate_date_re = \ + re.compile(u'(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \ + (_korean_am, _korean_pm)) +def _parse_date_onblog(dateString): + '''Parse a string according to the OnBlog 8-bit date format''' + m = _korean_onblog_date_re.match(dateString) + if not m: return + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ + {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ + 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ + 'zonediff': '+09:00'} + if _debug: sys.stderr.write('OnBlog date parsed as: %s\n' % w3dtfdate) + return _parse_date_w3dtf(w3dtfdate) +registerDateHandler(_parse_date_onblog) + +def _parse_date_nate(dateString): + '''Parse a string according to the Nate 8-bit date format''' + m = _korean_nate_date_re.match(dateString) + if not m: return + hour = int(m.group(5)) + ampm = m.group(4) + if (ampm == _korean_pm): + hour += 12 + hour = str(hour) + if len(hour) == 1: + hour = '0' + hour + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ + {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ + 'hour': hour, 'minute': m.group(6), 'second': m.group(7),\ + 'zonediff': '+09:00'} + if _debug: sys.stderr.write('Nate date parsed as: %s\n' % w3dtfdate) + return _parse_date_w3dtf(w3dtfdate) +registerDateHandler(_parse_date_nate) + +_mssql_date_re = \ + re.compile('(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})(\.\d+)?') +def _parse_date_mssql(dateString): + '''Parse a string according to the MS SQL date format''' + m = _mssql_date_re.match(dateString) + if not m: return + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ + {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ + 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ + 'zonediff': '+09:00'} + if _debug: sys.stderr.write('MS SQL date parsed as: %s\n' % w3dtfdate) + return _parse_date_w3dtf(w3dtfdate) +registerDateHandler(_parse_date_mssql) + +# Unicode strings for Greek date strings +_greek_months = \ + { \ + u'\u0399\u03b1\u03bd': u'Jan', # c9e1ed in iso-8859-7 + u'\u03a6\u03b5\u03b2': u'Feb', # d6e5e2 in iso-8859-7 + u'\u039c\u03ac\u03ce': u'Mar', # ccdcfe in iso-8859-7 + u'\u039c\u03b1\u03ce': u'Mar', # cce1fe in iso-8859-7 + u'\u0391\u03c0\u03c1': u'Apr', # c1f0f1 in iso-8859-7 + u'\u039c\u03ac\u03b9': u'May', # ccdce9 in iso-8859-7 + u'\u039c\u03b1\u03ca': u'May', # cce1fa in iso-8859-7 + u'\u039c\u03b1\u03b9': u'May', # cce1e9 in iso-8859-7 + u'\u0399\u03bf\u03cd\u03bd': u'Jun', # c9effded in iso-8859-7 + u'\u0399\u03bf\u03bd': u'Jun', # c9efed in iso-8859-7 + u'\u0399\u03bf\u03cd\u03bb': u'Jul', # c9effdeb in iso-8859-7 + u'\u0399\u03bf\u03bb': u'Jul', # c9f9eb in iso-8859-7 + u'\u0391\u03cd\u03b3': u'Aug', # c1fde3 in iso-8859-7 + u'\u0391\u03c5\u03b3': u'Aug', # c1f5e3 in iso-8859-7 + u'\u03a3\u03b5\u03c0': u'Sep', # d3e5f0 in iso-8859-7 + u'\u039f\u03ba\u03c4': u'Oct', # cfeaf4 in iso-8859-7 + u'\u039d\u03bf\u03ad': u'Nov', # cdefdd in iso-8859-7 + u'\u039d\u03bf\u03b5': u'Nov', # cdefe5 in iso-8859-7 + u'\u0394\u03b5\u03ba': u'Dec', # c4e5ea in iso-8859-7 + } + +_greek_wdays = \ + { \ + u'\u039a\u03c5\u03c1': u'Sun', # caf5f1 in iso-8859-7 + u'\u0394\u03b5\u03c5': u'Mon', # c4e5f5 in iso-8859-7 + u'\u03a4\u03c1\u03b9': u'Tue', # d4f1e9 in iso-8859-7 + u'\u03a4\u03b5\u03c4': u'Wed', # d4e5f4 in iso-8859-7 + u'\u03a0\u03b5\u03bc': u'Thu', # d0e5ec in iso-8859-7 + u'\u03a0\u03b1\u03c1': u'Fri', # d0e1f1 in iso-8859-7 + u'\u03a3\u03b1\u03b2': u'Sat', # d3e1e2 in iso-8859-7 + } + +_greek_date_format_re = \ + re.compile(u'([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)') + +def _parse_date_greek(dateString): + '''Parse a string according to a Greek 8-bit date format.''' + m = _greek_date_format_re.match(dateString) + if not m: return + try: + wday = _greek_wdays[m.group(1)] + month = _greek_months[m.group(3)] + except: + return + rfc822date = '%(wday)s, %(day)s %(month)s %(year)s %(hour)s:%(minute)s:%(second)s %(zonediff)s' % \ + {'wday': wday, 'day': m.group(2), 'month': month, 'year': m.group(4),\ + 'hour': m.group(5), 'minute': m.group(6), 'second': m.group(7),\ + 'zonediff': m.group(8)} + if _debug: sys.stderr.write('Greek date parsed as: %s\n' % rfc822date) + return _parse_date_rfc822(rfc822date) +registerDateHandler(_parse_date_greek) + +# Unicode strings for Hungarian date strings +_hungarian_months = \ + { \ + u'janu\u00e1r': u'01', # e1 in iso-8859-2 + u'febru\u00e1ri': u'02', # e1 in iso-8859-2 + u'm\u00e1rcius': u'03', # e1 in iso-8859-2 + u'\u00e1prilis': u'04', # e1 in iso-8859-2 + u'm\u00e1ujus': u'05', # e1 in iso-8859-2 + u'j\u00fanius': u'06', # fa in iso-8859-2 + u'j\u00falius': u'07', # fa in iso-8859-2 + u'augusztus': u'08', + u'szeptember': u'09', + u'okt\u00f3ber': u'10', # f3 in iso-8859-2 + u'november': u'11', + u'december': u'12', + } + +_hungarian_date_format_re = \ + re.compile(u'(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))') + +def _parse_date_hungarian(dateString): + '''Parse a string according to a Hungarian 8-bit date format.''' + m = _hungarian_date_format_re.match(dateString) + if not m: return + try: + month = _hungarian_months[m.group(2)] + day = m.group(3) + if len(day) == 1: + day = '0' + day + hour = m.group(4) + if len(hour) == 1: + hour = '0' + hour + except: + return + w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s%(zonediff)s' % \ + {'year': m.group(1), 'month': month, 'day': day,\ + 'hour': hour, 'minute': m.group(5),\ + 'zonediff': m.group(6)} + if _debug: sys.stderr.write('Hungarian date parsed as: %s\n' % w3dtfdate) + return _parse_date_w3dtf(w3dtfdate) +registerDateHandler(_parse_date_hungarian) + +# W3DTF-style date parsing adapted from PyXML xml.utils.iso8601, written by +# Drake and licensed under the Python license. Removed all range checking +# for month, day, hour, minute, and second, since mktime will normalize +# these later +def _parse_date_w3dtf(dateString): + def __extract_date(m): + year = int(m.group('year')) + if year < 100: + year = 100 * int(time.gmtime()[0] / 100) + int(year) + if year < 1000: + return 0, 0, 0 + julian = m.group('julian') + if julian: + julian = int(julian) + month = julian / 30 + 1 + day = julian % 30 + 1 + jday = None + while jday != julian: + t = time.mktime((year, month, day, 0, 0, 0, 0, 0, 0)) + jday = time.gmtime(t)[-2] + diff = abs(jday - julian) + if jday > julian: + if diff < day: + day = day - diff + else: + month = month - 1 + day = 31 + elif jday < julian: + if day + diff < 28: + day = day + diff + else: + month = month + 1 + return year, month, day + month = m.group('month') + day = 1 + if month is None: + month = 1 + else: + month = int(month) + day = m.group('day') + if day: + day = int(day) + else: + day = 1 + return year, month, day + + def __extract_time(m): + if not m: + return 0, 0, 0 + hours = m.group('hours') + if not hours: + return 0, 0, 0 + hours = int(hours) + minutes = int(m.group('minutes')) + seconds = m.group('seconds') + if seconds: + seconds = int(seconds) + else: + seconds = 0 + return hours, minutes, seconds + + def __extract_tzd(m): + '''Return the Time Zone Designator as an offset in seconds from UTC.''' + if not m: + return 0 + tzd = m.group('tzd') + if not tzd: + return 0 + if tzd == 'Z': + return 0 + hours = int(m.group('tzdhours')) + minutes = m.group('tzdminutes') + if minutes: + minutes = int(minutes) + else: + minutes = 0 + offset = (hours*60 + minutes) * 60 + if tzd[0] == '+': + return -offset + return offset + + __date_re = ('(?P\d\d\d\d)' + '(?:(?P-|)' + '(?:(?P\d\d\d)' + '|(?P\d\d)(?:(?P=dsep)(?P\d\d))?))?') + __tzd_re = '(?P[-+](?P\d\d)(?::?(?P\d\d))|Z)' + __tzd_rx = re.compile(__tzd_re) + __time_re = ('(?P\d\d)(?P:|)(?P\d\d)' + '(?:(?P=tsep)(?P\d\d(?:[.,]\d+)?))?' + + __tzd_re) + __datetime_re = '%s(?:T%s)?' % (__date_re, __time_re) + __datetime_rx = re.compile(__datetime_re) + m = __datetime_rx.match(dateString) + if (m is None) or (m.group() != dateString): return + gmt = __extract_date(m) + __extract_time(m) + (0, 0, 0) + if gmt[0] == 0: return + return time.gmtime(time.mktime(gmt) + __extract_tzd(m) - time.timezone) +registerDateHandler(_parse_date_w3dtf) + +def _parse_date_rfc822(dateString): + '''Parse an RFC822, RFC1123, RFC2822, or asctime-style date''' + data = dateString.split() + if data[0][-1] in (',', '.') or data[0].lower() in rfc822._daynames: + del data[0] + if len(data) == 4: + s = data[3] + i = s.find('+') + if i > 0: + data[3:] = [s[:i], s[i+1:]] + else: + data.append('') + dateString = " ".join(data) + if len(data) < 5: + dateString += ' 00:00:00 GMT' + tm = rfc822.parsedate_tz(dateString) + if tm: + return time.gmtime(rfc822.mktime_tz(tm)) +# rfc822.py defines several time zones, but we define some extra ones. +# 'ET' is equivalent to 'EST', etc. +_additional_timezones = {'AT': -400, 'ET': -500, 'CT': -600, 'MT': -700, 'PT': -800} +rfc822._timezones.update(_additional_timezones) +registerDateHandler(_parse_date_rfc822) + +def _parse_date(dateString): + '''Parses a variety of date formats into a 9-tuple in GMT''' + for handler in _date_handlers: + try: + date9tuple = handler(dateString) + if not date9tuple: continue + if len(date9tuple) != 9: + if _debug: sys.stderr.write('date handler function must return 9-tuple\n') + raise ValueError + map(int, date9tuple) + return date9tuple + except Exception, e: + if _debug: sys.stderr.write('%s raised %s\n' % (handler.__name__, repr(e))) + pass + return None + +def _getCharacterEncoding(http_headers, xml_data): + '''Get the character encoding of the XML document + + http_headers is a dictionary + xml_data is a raw string (not Unicode) + + This is so much trickier than it sounds, it's not even funny. + According to RFC 3023 ('XML Media Types'), if the HTTP Content-Type + is application/xml, application/*+xml, + application/xml-external-parsed-entity, or application/xml-dtd, + the encoding given in the charset parameter of the HTTP Content-Type + takes precedence over the encoding given in the XML prefix within the + document, and defaults to 'utf-8' if neither are specified. But, if + the HTTP Content-Type is text/xml, text/*+xml, or + text/xml-external-parsed-entity, the encoding given in the XML prefix + within the document is ALWAYS IGNORED and only the encoding given in + the charset parameter of the HTTP Content-Type header should be + respected, and it defaults to 'us-ascii' if not specified. + + Furthermore, discussion on the atom-syntax mailing list with the + author of RFC 3023 leads me to the conclusion that any document + served with a Content-Type of text/* and no charset parameter + must be treated as us-ascii. (We now do this.) And also that it + must always be flagged as non-well-formed. (We now do this too.) + + If Content-Type is unspecified (input was local file or non-HTTP source) + or unrecognized (server just got it totally wrong), then go by the + encoding given in the XML prefix of the document and default to + 'iso-8859-1' as per the HTTP specification (RFC 2616). + + Then, assuming we didn't find a character encoding in the HTTP headers + (and the HTTP Content-type allowed us to look in the body), we need + to sniff the first few bytes of the XML data and try to determine + whether the encoding is ASCII-compatible. Section F of the XML + specification shows the way here: + http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info + + If the sniffed encoding is not ASCII-compatible, we need to make it + ASCII compatible so that we can sniff further into the XML declaration + to find the encoding attribute, which will tell us the true encoding. + + Of course, none of this guarantees that we will be able to parse the + feed in the declared character encoding (assuming it was declared + correctly, which many are not). CJKCodecs and iconv_codec help a lot; + you should definitely install them if you can. + http://cjkpython.i18n.org/ + ''' + + def _parseHTTPContentType(content_type): + '''takes HTTP Content-Type header and returns (content type, charset) + + If no charset is specified, returns (content type, '') + If no content type is specified, returns ('', '') + Both return parameters are guaranteed to be lowercase strings + ''' + content_type = content_type or '' + content_type, params = cgi.parse_header(content_type) + return content_type, params.get('charset', '').replace("'", '') + + sniffed_xml_encoding = '' + xml_encoding = '' + true_encoding = '' + http_content_type, http_encoding = _parseHTTPContentType(http_headers.get('content-type')) + # Must sniff for non-ASCII-compatible character encodings before + # searching for XML declaration. This heuristic is defined in + # section F of the XML specification: + # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info + try: + if xml_data[:4] == '\x4c\x6f\xa7\x94': + # EBCDIC + xml_data = _ebcdic_to_ascii(xml_data) + elif xml_data[:4] == '\x00\x3c\x00\x3f': + # UTF-16BE + sniffed_xml_encoding = 'utf-16be' + xml_data = unicode(xml_data, 'utf-16be').encode('utf-8') + elif (len(xml_data) >= 4) and (xml_data[:2] == '\xfe\xff') and (xml_data[2:4] != '\x00\x00'): + # UTF-16BE with BOM + sniffed_xml_encoding = 'utf-16be' + xml_data = unicode(xml_data[2:], 'utf-16be').encode('utf-8') + elif xml_data[:4] == '\x3c\x00\x3f\x00': + # UTF-16LE + sniffed_xml_encoding = 'utf-16le' + xml_data = unicode(xml_data, 'utf-16le').encode('utf-8') + elif (len(xml_data) >= 4) and (xml_data[:2] == '\xff\xfe') and (xml_data[2:4] != '\x00\x00'): + # UTF-16LE with BOM + sniffed_xml_encoding = 'utf-16le' + xml_data = unicode(xml_data[2:], 'utf-16le').encode('utf-8') + elif xml_data[:4] == '\x00\x00\x00\x3c': + # UTF-32BE + sniffed_xml_encoding = 'utf-32be' + xml_data = unicode(xml_data, 'utf-32be').encode('utf-8') + elif xml_data[:4] == '\x3c\x00\x00\x00': + # UTF-32LE + sniffed_xml_encoding = 'utf-32le' + xml_data = unicode(xml_data, 'utf-32le').encode('utf-8') + elif xml_data[:4] == '\x00\x00\xfe\xff': + # UTF-32BE with BOM + sniffed_xml_encoding = 'utf-32be' + xml_data = unicode(xml_data[4:], 'utf-32be').encode('utf-8') + elif xml_data[:4] == '\xff\xfe\x00\x00': + # UTF-32LE with BOM + sniffed_xml_encoding = 'utf-32le' + xml_data = unicode(xml_data[4:], 'utf-32le').encode('utf-8') + elif xml_data[:3] == '\xef\xbb\xbf': + # UTF-8 with BOM + sniffed_xml_encoding = 'utf-8' + xml_data = unicode(xml_data[3:], 'utf-8').encode('utf-8') + else: + # ASCII-compatible + pass + xml_encoding_match = re.compile('^<\?.*encoding=[\'"](.*?)[\'"].*\?>').match(xml_data) + except: + xml_encoding_match = None + if xml_encoding_match: + xml_encoding = xml_encoding_match.groups()[0].lower() + if sniffed_xml_encoding and (xml_encoding in ('iso-10646-ucs-2', 'ucs-2', 'csunicode', 'iso-10646-ucs-4', 'ucs-4', 'csucs4', 'utf-16', 'utf-32', 'utf_16', 'utf_32', 'utf16', 'u16')): + xml_encoding = sniffed_xml_encoding + acceptable_content_type = 0 + application_content_types = ('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity') + text_content_types = ('text/xml', 'text/xml-external-parsed-entity') + if (http_content_type in application_content_types) or \ + (http_content_type.startswith('application/') and http_content_type.endswith('+xml')): + acceptable_content_type = 1 + true_encoding = http_encoding or xml_encoding or 'utf-8' + elif (http_content_type in text_content_types) or \ + (http_content_type.startswith('text/')) and http_content_type.endswith('+xml'): + acceptable_content_type = 1 + true_encoding = http_encoding or 'us-ascii' + elif http_content_type.startswith('text/'): + true_encoding = http_encoding or 'us-ascii' + elif http_headers and (not http_headers.has_key('content-type')): + true_encoding = xml_encoding or 'iso-8859-1' + else: + true_encoding = xml_encoding or 'utf-8' + return true_encoding, http_encoding, xml_encoding, sniffed_xml_encoding, acceptable_content_type + +def _toUTF8(data, encoding): + '''Changes an XML data stream on the fly to specify a new encoding + + data is a raw sequence of bytes (not Unicode) that is presumed to be in %encoding already + encoding is a string recognized by encodings.aliases + ''' + if _debug: sys.stderr.write('entering _toUTF8, trying encoding %s\n' % encoding) + # strip Byte Order Mark (if present) + if (len(data) >= 4) and (data[:2] == '\xfe\xff') and (data[2:4] != '\x00\x00'): + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-16be': + sys.stderr.write('trying utf-16be instead\n') + encoding = 'utf-16be' + data = data[2:] + elif (len(data) >= 4) and (data[:2] == '\xff\xfe') and (data[2:4] != '\x00\x00'): + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-16le': + sys.stderr.write('trying utf-16le instead\n') + encoding = 'utf-16le' + data = data[2:] + elif data[:3] == '\xef\xbb\xbf': + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-8': + sys.stderr.write('trying utf-8 instead\n') + encoding = 'utf-8' + data = data[3:] + elif data[:4] == '\x00\x00\xfe\xff': + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-32be': + sys.stderr.write('trying utf-32be instead\n') + encoding = 'utf-32be' + data = data[4:] + elif data[:4] == '\xff\xfe\x00\x00': + if _debug: + sys.stderr.write('stripping BOM\n') + if encoding != 'utf-32le': + sys.stderr.write('trying utf-32le instead\n') + encoding = 'utf-32le' + data = data[4:] + newdata = unicode(data, encoding) + if _debug: sys.stderr.write('successfully converted %s data to unicode\n' % encoding) + declmatch = re.compile('^<\?xml[^>]*?>') + newdecl = '''''' + if declmatch.search(newdata): + newdata = declmatch.sub(newdecl, newdata) + else: + newdata = newdecl + u'\n' + newdata + return newdata.encode('utf-8') + +def _stripDoctype(data): + '''Strips DOCTYPE from XML document, returns (rss_version, stripped_data) + + rss_version may be 'rss091n' or None + stripped_data is the same XML document, minus the DOCTYPE + ''' + entity_pattern = re.compile(r']*?)>', re.MULTILINE) + data = entity_pattern.sub('', data) + doctype_pattern = re.compile(r']*?)>', re.MULTILINE) + doctype_results = doctype_pattern.findall(data) + doctype = doctype_results and doctype_results[0] or '' + if doctype.lower().count('netscape'): + version = 'rss091n' + else: + version = None + data = doctype_pattern.sub('', data) + return version, data + +def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, referrer=None, handlers=[]): + '''Parse a feed from a URL, file, stream, or string''' + result = FeedParserDict() + result['feed'] = FeedParserDict() + result['entries'] = [] + if _XML_AVAILABLE: + result['bozo'] = 0 + if type(handlers) == types.InstanceType: + handlers = [handlers] + try: + f = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers) + data = f.read() + except Exception, e: + result['bozo'] = 1 + result['bozo_exception'] = e + data = '' + f = None + + # if feed is gzip-compressed, decompress it + if f and data and hasattr(f, 'headers'): + if gzip and f.headers.get('content-encoding', '') == 'gzip': + try: + data = gzip.GzipFile(fileobj=_StringIO(data)).read() + except Exception, e: + # Some feeds claim to be gzipped but they're not, so + # we get garbage. Ideally, we should re-request the + # feed without the 'Accept-encoding: gzip' header, + # but we don't. + result['bozo'] = 1 + result['bozo_exception'] = e + data = '' + elif zlib and f.headers.get('content-encoding', '') == 'deflate': + try: + data = zlib.decompress(data, -zlib.MAX_WBITS) + except Exception, e: + result['bozo'] = 1 + result['bozo_exception'] = e + data = '' + + # save HTTP headers + if hasattr(f, 'info'): + info = f.info() + result['etag'] = info.getheader('ETag') + last_modified = info.getheader('Last-Modified') + if last_modified: + result['modified'] = _parse_date(last_modified) + if hasattr(f, 'url'): + result['href'] = f.url + result['status'] = 200 + if hasattr(f, 'status'): + result['status'] = f.status + if hasattr(f, 'headers'): + result['headers'] = f.headers.dict + if hasattr(f, 'close'): + f.close() + + # there are four encodings to keep track of: + # - http_encoding is the encoding declared in the Content-Type HTTP header + # - xml_encoding is the encoding declared in the ; changed +# project name +#2.5 - 7/25/2003 - MAP - changed to Python license (all contributors agree); +# removed unnecessary urllib code -- urllib2 should always be available anyway; +# return actual url, status, and full HTTP headers (as result['url'], +# result['status'], and result['headers']) if parsing a remote feed over HTTP -- +# this should pass all the HTTP tests at ; +# added the latest namespace-of-the-week for RSS 2.0 +#2.5.1 - 7/26/2003 - RMK - clear opener.addheaders so we only send our custom +# User-Agent (otherwise urllib2 sends two, which confuses some servers) +#2.5.2 - 7/28/2003 - MAP - entity-decode inline xml properly; added support for +# inline and as used in some RSS 2.0 feeds +#2.5.3 - 8/6/2003 - TvdV - patch to track whether we're inside an image or +# textInput, and also to return the character encoding (if specified) +#2.6 - 1/1/2004 - MAP - dc:author support (MarekK); fixed bug tracking +# nested divs within content (JohnD); fixed missing sys import (JohanS); +# fixed regular expression to capture XML character encoding (Andrei); +# added support for Atom 0.3-style links; fixed bug with textInput tracking; +# added support for cloud (MartijnP); added support for multiple +# category/dc:subject (MartijnP); normalize content model: 'description' gets +# description (which can come from description, summary, or full content if no +# description), 'content' gets dict of base/language/type/value (which can come +# from content:encoded, xhtml:body, content, or fullitem); +# fixed bug matching arbitrary Userland namespaces; added xml:base and xml:lang +# tracking; fixed bug tracking unknown tags; fixed bug tracking content when +# element is not in default namespace (like Pocketsoap feed); +# resolve relative URLs in link, guid, docs, url, comments, wfw:comment, +# wfw:commentRSS; resolve relative URLs within embedded HTML markup in +# description, xhtml:body, content, content:encoded, title, subtitle, +# summary, info, tagline, and copyright; added support for pingback and +# trackback namespaces +#2.7 - 1/5/2004 - MAP - really added support for trackback and pingback +# namespaces, as opposed to 2.6 when I said I did but didn't really; +# sanitize HTML markup within some elements; added mxTidy support (if +# installed) to tidy HTML markup within some elements; fixed indentation +# bug in _parse_date (FazalM); use socket.setdefaulttimeout if available +# (FazalM); universal date parsing and normalization (FazalM): 'created', modified', +# 'issued' are parsed into 9-tuple date format and stored in 'created_parsed', +# 'modified_parsed', and 'issued_parsed'; 'date' is duplicated in 'modified' +# and vice-versa; 'date_parsed' is duplicated in 'modified_parsed' and vice-versa +#2.7.1 - 1/9/2004 - MAP - fixed bug handling " and '. fixed memory +# leak not closing url opener (JohnD); added dc:publisher support (MarekK); +# added admin:errorReportsTo support (MarekK); Python 2.1 dict support (MarekK) +#2.7.4 - 1/14/2004 - MAP - added workaround for improperly formed
    tags in +# encoded HTML (skadz); fixed unicode handling in normalize_attrs (ChrisL); +# fixed relative URI processing for guid (skadz); added ICBM support; added +# base64 support +#2.7.5 - 1/15/2004 - MAP - added workaround for malformed DOCTYPE (seen on many +# blogspot.com sites); added _debug variable +#2.7.6 - 1/16/2004 - MAP - fixed bug with StringIO importing +#3.0b3 - 1/23/2004 - MAP - parse entire feed with real XML parser (if available); +# added several new supported namespaces; fixed bug tracking naked markup in +# description; added support for enclosure; added support for source; re-added +# support for cloud which got dropped somehow; added support for expirationDate +#3.0b4 - 1/26/2004 - MAP - fixed xml:lang inheritance; fixed multiple bugs tracking +# xml:base URI, one for documents that don't define one explicitly and one for +# documents that define an outer and an inner xml:base that goes out of scope +# before the end of the document +#3.0b5 - 1/26/2004 - MAP - fixed bug parsing multiple links at feed level +#3.0b6 - 1/27/2004 - MAP - added feed type and version detection, result['version'] +# will be one of SUPPORTED_VERSIONS.keys() or empty string if unrecognized; +# added support for creativeCommons:license and cc:license; added support for +# full Atom content model in title, tagline, info, copyright, summary; fixed bug +# with gzip encoding (not always telling server we support it when we do) +#3.0b7 - 1/28/2004 - MAP - support Atom-style author element in author_detail +# (dictionary of 'name', 'url', 'email'); map author to author_detail if author +# contains name + email address +#3.0b8 - 1/28/2004 - MAP - added support for contributor +#3.0b9 - 1/29/2004 - MAP - fixed check for presence of dict function; added +# support for summary +#3.0b10 - 1/31/2004 - MAP - incorporated ISO-8601 date parsing routines from +# xml.util.iso8601 +#3.0b11 - 2/2/2004 - MAP - added 'rights' to list of elements that can contain +# dangerous markup; fiddled with decodeEntities (not right); liberalized +# date parsing even further +#3.0b12 - 2/6/2004 - MAP - fiddled with decodeEntities (still not right); +# added support to Atom 0.2 subtitle; added support for Atom content model +# in copyright; better sanitizing of dangerous HTML elements with end tags +# (script, frameset) +#3.0b13 - 2/8/2004 - MAP - better handling of empty HTML tags (br, hr, img, +# etc.) in embedded markup, in either HTML or XHTML form (
    ,
    ,
    ) +#3.0b14 - 2/8/2004 - MAP - fixed CDATA handling in non-wellformed feeds under +# Python 2.1 +#3.0b15 - 2/11/2004 - MAP - fixed bug resolving relative links in wfw:commentRSS; +# fixed bug capturing author and contributor URL; fixed bug resolving relative +# links in author and contributor URL; fixed bug resolvin relative links in +# generator URL; added support for recognizing RSS 1.0; passed Simon Fell's +# namespace tests, and included them permanently in the test suite with his +# permission; fixed namespace handling under Python 2.1 +#3.0b16 - 2/12/2004 - MAP - fixed support for RSS 0.90 (broken in b15) +#3.0b17 - 2/13/2004 - MAP - determine character encoding as per RFC 3023 +#3.0b18 - 2/17/2004 - MAP - always map description to summary_detail (Andrei); +# use libxml2 (if available) +#3.0b19 - 3/15/2004 - MAP - fixed bug exploding author information when author +# name was in parentheses; removed ultra-problematic mxTidy support; patch to +# workaround crash in PyXML/expat when encountering invalid entities +# (MarkMoraes); support for textinput/textInput +#3.0b20 - 4/7/2004 - MAP - added CDF support +#3.0b21 - 4/14/2004 - MAP - added Hot RSS support +#3.0b22 - 4/19/2004 - MAP - changed 'channel' to 'feed', 'item' to 'entries' in +# results dict; changed results dict to allow getting values with results.key +# as well as results[key]; work around embedded illformed HTML with half +# a DOCTYPE; work around malformed Content-Type header; if character encoding +# is wrong, try several common ones before falling back to regexes (if this +# works, bozo_exception is set to CharacterEncodingOverride); fixed character +# encoding issues in BaseHTMLProcessor by tracking encoding and converting +# from Unicode to raw strings before feeding data to sgmllib.SGMLParser; +# convert each value in results to Unicode (if possible), even if using +# regex-based parsing +#3.0b23 - 4/21/2004 - MAP - fixed UnicodeDecodeError for feeds that contain +# high-bit characters in attributes in embedded HTML in description (thanks +# Thijs van de Vossen); moved guid, date, and date_parsed to mapped keys in +# FeedParserDict; tweaked FeedParserDict.has_key to return True if asking +# about a mapped key +#3.0fc1 - 4/23/2004 - MAP - made results.entries[0].links[0] and +# results.entries[0].enclosures[0] into FeedParserDict; fixed typo that could +# cause the same encoding to be tried twice (even if it failed the first time); +# fixed DOCTYPE stripping when DOCTYPE contained entity declarations; +# better textinput and image tracking in illformed RSS 1.0 feeds +#3.0fc2 - 5/10/2004 - MAP - added and passed Sam's amp tests; added and passed +# my blink tag tests +#3.0fc3 - 6/18/2004 - MAP - fixed bug in _changeEncodingDeclaration that +# failed to parse utf-16 encoded feeds; made source into a FeedParserDict; +# duplicate admin:generatorAgent/@rdf:resource in generator_detail.url; +# added support for image; refactored parse() fallback logic to try other +# encodings if SAX parsing fails (previously it would only try other encodings +# if re-encoding failed); remove unichr madness in normalize_attrs now that +# we're properly tracking encoding in and out of BaseHTMLProcessor; set +# feed.language from root-level xml:lang; set entry.id from rdf:about; +# send Accept header +#3.0 - 6/21/2004 - MAP - don't try iso-8859-1 (can't distinguish between +# iso-8859-1 and windows-1252 anyway, and most incorrectly marked feeds are +# windows-1252); fixed regression that could cause the same encoding to be +# tried twice (even if it failed the first time) +#3.0.1 - 6/22/2004 - MAP - default to us-ascii for all text/* content types; +# recover from malformed content-type header parameter with no equals sign +# ('text/xml; charset:iso-8859-1') +#3.1 - 6/28/2004 - MAP - added and passed tests for converting HTML entities +# to Unicode equivalents in illformed feeds (aaronsw); added and +# passed tests for converting character entities to Unicode equivalents +# in illformed feeds (aaronsw); test for valid parsers when setting +# XML_AVAILABLE; make version and encoding available when server returns +# a 304; add handlers parameter to pass arbitrary urllib2 handlers (like +# digest auth or proxy support); add code to parse username/password +# out of url and send as basic authentication; expose downloading-related +# exceptions in bozo_exception (aaronsw); added __contains__ method to +# FeedParserDict (aaronsw); added publisher_detail (aaronsw) +#3.2 - 7/3/2004 - MAP - use cjkcodecs and iconv_codec if available; always +# convert feed to UTF-8 before passing to XML parser; completely revamped +# logic for determining character encoding and attempting XML parsing +# (much faster); increased default timeout to 20 seconds; test for presence +# of Location header on redirects; added tests for many alternate character +# encodings; support various EBCDIC encodings; support UTF-16BE and +# UTF16-LE with or without a BOM; support UTF-8 with a BOM; support +# UTF-32BE and UTF-32LE with or without a BOM; fixed crashing bug if no +# XML parsers are available; added support for 'Content-encoding: deflate'; +# send blank 'Accept-encoding: ' header if neither gzip nor zlib modules +# are available +#3.3 - 7/15/2004 - MAP - optimize EBCDIC to ASCII conversion; fix obscure +# problem tracking xml:base and xml:lang if element declares it, child +# doesn't, first grandchild redeclares it, and second grandchild doesn't; +# refactored date parsing; defined public registerDateHandler so callers +# can add support for additional date formats at runtime; added support +# for OnBlog, Nate, MSSQL, Greek, and Hungarian dates (ytrewq1); added +# zopeCompatibilityHack() which turns FeedParserDict into a regular +# dictionary, required for Zope compatibility, and also makes command- +# line debugging easier because pprint module formats real dictionaries +# better than dictionary-like objects; added NonXMLContentType exception, +# which is stored in bozo_exception when a feed is served with a non-XML +# media type such as 'text/plain'; respect Content-Language as default +# language if not xml:lang is present; cloud dict is now FeedParserDict; +# generator dict is now FeedParserDict; better tracking of xml:lang, +# including support for xml:lang='' to unset the current language; +# recognize RSS 1.0 feeds even when RSS 1.0 namespace is not the default +# namespace; don't overwrite final status on redirects (scenarios: +# redirecting to a URL that returns 304, redirecting to a URL that +# redirects to another URL with a different type of redirect); add +# support for HTTP 303 redirects +#4.0 - MAP - support for relative URIs in xml:base attribute; fixed +# encoding issue with mxTidy (phopkins); preliminary support for RFC 3229; +# support for Atom 1.0; support for iTunes extensions; new 'tags' for +# categories/keywords/etc. as array of dict +# {'term': term, 'scheme': scheme, 'label': label} to match Atom 1.0 +# terminology; parse RFC 822-style dates with no time; lots of other +# bug fixes +#4.1 - MAP - removed socket timeout; added support for chardet library + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/widgets/templates/wiki.mako b/document_page/web/widgets/templates/wiki.mako new file mode 100644 index 00000000000..54976a8c937 --- /dev/null +++ b/document_page/web/widgets/templates/wiki.mako @@ -0,0 +1,23 @@ +% if editable and not inline: + + +% endif + +% if editable and inline: + +% endif + +% if editable and error: + ${error} +% endif + +% if not editable and value: +
    ${data|n}
    +% endif + diff --git a/document_page/web/widgets/wiki.py b/document_page/web/widgets/wiki.py new file mode 100644 index 00000000000..ccf2a75899c --- /dev/null +++ b/document_page/web/widgets/wiki.py @@ -0,0 +1,224 @@ +############################################################################### +# +# Copyright (C) 2007-TODAY Tiny ERP Pvt Ltd. All Rights Reserved. +# +# $Id$ +# +# Developed by Tiny (http://openerp.com) and Axelor (http://axelor.com). +# +# The OpenERP web client is distributed under the "OpenERP Public License". +# It's based on Mozilla Public License Version (MPL) 1.1 with following +# restrictions: +# +# - All names, links and logos of Tiny, OpenERP and Axelor must be +# kept as in original distribution without any changes in all software +# screens, especially in start-up page and the software header, even if +# the application source code has been changed or updated or code has been +# added. +# +# - All distributions of the software must keep source code with OEPL. +# +# - All integrations to any other software must keep source code with OEPL. +# +# If you need commercial licence to remove this kind of restriction please +# contact us. +# +# You can see the MPL licence at: http://www.mozilla.org/MPL/MPL-1.1.html +# +############################################################################### + +import re + +import cherrypy +import wikimarkup + +from openobject import rpc +from openobject.widgets import CSSLink + + +from openerp.widgets import register_widget +from openerp.widgets.form import Text + + +_image = re.compile(r'img:(.*)\.(.*)', re.UNICODE) +_rss = re.compile(r'rss:(.*)\.(.*)', re.UNICODE) +_attach = re.compile(r'attach:(.*)\.(.*)', re.UNICODE) +_internalLinks = re.compile(r'\[\[.*\]\]', re.UNICODE) +_edit = re.compile(r'edit:(.*)\|(.*)', re.UNICODE) +_view = re.compile(r'view:(.*)\|(.*)', re.UNICODE) + +class WikiParser(wikimarkup.Parser): + + def parse(self, text, id): + text = text.replace(' ', 'n-b-s-p') + text = text.replace('&', 'n-a-m-p') + text = text.replace('&','&') + text = text.replace('n-b-s-p', ' ') + text = text.replace('n-a-m-p', '&') + text = text.replace('', '
    ')
    +        text = text.replace('', '
    ') + + text = wikimarkup.to_unicode(text) + text = self.strip(text) + + text = super(WikiParser, self).parse(text) + text = self.addImage(text, id) + text = self.attachDoc(text, id) + text = self.recordLink(text) + text = self.viewRecordLink(text) + text = self.addInternalLinks(text) + #TODO : already implemented but we will implement it later after releasing the 5.0 + #text = self.addRss(text, id) + return text + + def viewRecordLink(self, text): + def record(path): + record = path.group().replace('view:','').split("|") + model = record[0] + text = record[1].replace('\r','').strip() + label = "View Record" + if len(record) > 2: + label = record[2] + proxy = rpc.RPCProxy(model) + ids = proxy.name_search(text, [], 'ilike', {}) + if len(ids): + id = ids[0][0] + else: + try: + id = int(text) + except: + id = 0 + return "[[/openerp/form/view?model=%s&id=%d | %s]]" % (model, id, label) + + bits = _view.sub(record, text) + return bits + + def addRss(self, text, id): + def addrss(path): + rssurl = path.group().replace('rss:','') + import rss.feedparser as feedparser + data = feedparser.parse(rssurl) + values = "

    %s


    " % (data.feed.title) + values += "%s
    " % (data.channel.description) + for entry in data['entries']: + values += "

    %s


    " % (entry.link, entry.title) + values += "%s
    " % (entry.summary) + + return values + + bits = _rss.sub(addrss, text) + return bits + + def attachDoc(self, text, id): + def document(path): + file = path.group().replace('attach:','') + if file.startswith('http') or file.startswith('ftp'): + return "Download File" % (file) + else: + proxy = rpc.RPCProxy('ir.attachment') + ids = proxy.search([('datas_fname','=',file.strip()), ('res_model','=','wiki.wiki'), ('res_id','=',id)]) + if len(ids) > 0: + return "%s" % (file, id, file) + else: + return """Attach : %s """ % (id, file) + bits = _attach.sub(document, text) + return bits + + def addImage(self, text, id): + def image(path): + file = path.group().replace('img:','') + if file.startswith('http') or file.startswith('ftp'): + return "" % (file) + else: + proxy = rpc.RPCProxy('ir.attachment') + ids = proxy.search([('datas_fname','=',file.strip()), ('res_model','=','wiki.wiki'), ('res_id','=',id)]) + if len(ids) > 0: + return "" % (file, id) + else: + return """Attach : %s """ % (id, file) + #"[[/attachment/?model=wiki.wiki&id=%d | Attach:%s]]" % (id, file) + bits = _image.sub(image, text) + return bits + + def recordLink(self, text): + def record(path): + record = path.group().replace('edit:','').split("|") + model = record[0] + text = record[1].replace('\r','').strip() + label = "Edit Record" + if len(record) > 2: + label = record[2] + proxy = rpc.RPCProxy(model) + ids = proxy.name_search(text, [], '=', {}) + if len(ids): + id = ids[0][0] + else: + try: + id = int(text) + except: + id = 0 + return "[[/openerp/form/edit?model=%s&id=%d | %s]]" % (model, id, label) + + bits = _edit.sub(record, text) + return bits + + def addInternalLinks(self, text): + proxy = rpc.RPCProxy('wiki.wiki') + + def link(path): + link = path.group().replace('[','').replace('[','').replace(']','').replace(']','').split("|") + name_to_search = link[0].strip() + mids = proxy.search([('name','ilike', name_to_search)]) + link_str = "" + if mids: + if len(link) == 2: + link_str = "%s" % (mids[0], link[1]) + elif len(link) == 1: + link_str = "%s" % (mids[0], link[0]) + else: + if len(link) == 2: + link_str = "%s" % (link[0], link[1]) + elif len(link) == 1: + link_str = "%s" % (link[0]) + + return link_str + + bits = _internalLinks.sub(link, text) + return bits + +def wiki2html(text, showToc, id): + p = WikiParser(show_toc=showToc) + return p.parse(text, id) + +class WikiWidget(Text): + template = "/wiki/widgets/templates/wiki.mako" + + params = ["data"] + + css = [CSSLink("wiki", "css/wiki.css")] + + data = None + + def set_value(self, value): + super(WikiWidget, self).set_value(value) + + if value: + toc = True + id = False + if hasattr(cherrypy.request, 'terp_record'): + params = cherrypy.request.terp_params + if params._terp_model == 'wiki.wiki': + proxy = rpc.RPCProxy('wiki.wiki') + toc = proxy.read([params.id], ['toc'])[0]['toc'] + id = params.id + + text = value+'\n\n' + html = wiki2html(text, toc, id) + + self.data = html + +register_widget(WikiWidget, ["text_wiki"]) + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/widgets/wikimarkup/__init__.py b/document_page/web/widgets/wikimarkup/__init__.py new file mode 100644 index 00000000000..f5fe67fada1 --- /dev/null +++ b/document_page/web/widgets/wikimarkup/__init__.py @@ -0,0 +1,2146 @@ +# coding: latin1 +""" +MediaWiki-style markup + +Copyright (C) 2008 David Cramer + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . +""" + +import re, random, locale +from base64 import b64encode, b64decode + +# a few patterns we use later + +MW_COLON_STATE_TEXT = 0 +MW_COLON_STATE_TAG = 1 +MW_COLON_STATE_TAGSTART = 2 +MW_COLON_STATE_CLOSETAG = 3 +MW_COLON_STATE_TAGSLASH = 4 +MW_COLON_STATE_COMMENT = 5 +MW_COLON_STATE_COMMENTDASH = 6 +MW_COLON_STATE_COMMENTDASHDASH = 7 + +_attributePat = re.compile(ur'''(?:^|\s)([A-Za-z0-9]+)(?:\s*=\s*(?:"([^<"]*)"|'([^<']*)'|([a-zA-Z0-9!#$%&()*,\-./:;<>?@[\]^_`{|}~]+)|#([0-9a-fA-F]+)))''', re.UNICODE) +_space = re.compile(ur'\s+', re.UNICODE) +_closePrePat = re.compile(u"]*?)(/?>)([^<]*)$', re.UNICODE) + +_htmlpairs = ( # Tags that must be closed + u'b', u'del', u'i', u'ins', u'u', u'font', u'big', u'small', u'sub', u'sup', u'h1', + u'h2', u'h3', u'h4', u'h5', u'h6', u'cite', u'code', u'em', u's', + u'strike', u'strong', u'tt', u'var', u'div', u'center', + u'blockquote', u'ol', u'ul', u'dl', u'table', u'caption', u'pre', + u'ruby', u'rt' , u'rb' , u'rp', u'p', u'span', u'u', +) +_htmlsingle = ( + u'br', u'hr', u'li', u'dt', u'dd', u'img', +) +_htmlsingleonly = ( # Elements that cannot have close tags + u'br', u'hr', u'img', +) +_htmlnest = ( # Tags that can be nested--?? + u'table', u'tr', u'td', u'th', u'div', u'blockquote', u'ol', u'ul', + u'dl', u'font', u'big', u'small', u'sub', u'sup', u'span', u'img', +) +_tabletags = ( # Can only appear inside table + u'td', u'th', u'tr', +) +_htmllist = ( # Tags used by list + u'ul', u'ol', +) +_listtags = ( # Tags that can appear in a list + u'li', +) +_htmlsingleallowed = _htmlsingle + _tabletags +_htmlelements = _htmlsingle + _htmlpairs + _htmlnest + +_htmlEntities = { + u'Aacute': 193, u'aacute': 225, u'Acirc': 194, u'acirc': 226, u'acute': 180, + u'AElig': 198, u'aelig': 230, u'Agrave': 192, u'agrave': 224, u'alefsym': 8501, + u'Alpha': 913, u'alpha': 945, u'amp': 38, u'and': 8743, u'ang': 8736, u'Aring': 197, + u'aring': 229, + u'asymp': 8776, + u'Atilde': 195, + u'atilde': 227, + u'Auml': 196, + u'auml': 228, + u'bdquo': 8222, + u'Beta': 914, + u'beta': 946, + u'brvbar': 166, + u'bull': 8226, + u'cap': 8745, + u'Ccedil': 199, + u'ccedil': 231, + u'cedil': 184, + u'cent': 162, + u'Chi': 935, + u'chi': 967, + u'circ': 710, + u'clubs': 9827, + u'cong': 8773, + u'copy': 169, + u'crarr': 8629, + u'cup': 8746, + u'curren': 164, + u'dagger': 8224, + u'Dagger': 8225, + u'darr': 8595, + u'dArr': 8659, + u'deg': 176, + u'Delta': 916, + u'delta': 948, + u'diams': 9830, + u'divide': 247, + u'Eacute': 201, + u'eacute': 233, + u'Ecirc': 202, + u'ecirc': 234, + u'Egrave': 200, + u'egrave': 232, + u'empty': 8709, + u'emsp': 8195, + u'ensp': 8194, + u'Epsilon': 917, + u'epsilon': 949, + u'equiv': 8801, + u'Eta': 919, + u'eta': 951, + u'ETH': 208, + u'eth': 240, + u'Euml': 203, + u'euml': 235, + u'euro': 8364, + u'exist': 8707, + u'fnof': 402, + u'forall': 8704, + u'frac12': 189, + u'frac14': 188, + u'frac34': 190, + u'frasl': 8260, + u'Gamma': 915, + u'gamma': 947, + u'ge': 8805, + u'gt': 62, + u'harr': 8596, + u'hArr': 8660, + u'hearts': 9829, + u'hellip': 8230, + u'Iacute': 205, + u'iacute': 237, + u'Icirc': 206, + u'icirc': 238, + u'iexcl': 161, + u'Igrave': 204, + u'igrave': 236, + u'image': 8465, + u'infin': 8734, + u'int': 8747, + u'Iota': 921, + u'iota': 953, + u'iquest': 191, + u'isin': 8712, + u'Iuml': 207, + u'iuml': 239, + u'Kappa': 922, + u'kappa': 954, + u'Lambda': 923, + u'lambda': 955, + u'lang': 9001, + u'laquo': 171, + u'larr': 8592, + u'lArr': 8656, + u'lceil': 8968, + u'ldquo': 8220, + u'le': 8804, + u'lfloor': 8970, + u'lowast': 8727, + u'loz': 9674, + u'lrm': 8206, + u'lsaquo': 8249, + u'lsquo': 8216, + u'lt': 60, + u'macr': 175, + u'mdash': 8212, + u'micro': 181, + u'middot': 183, + u'minus': 8722, + u'Mu': 924, + u'mu': 956, + u'nabla': 8711, + u'nbsp': 160, + u'ndash': 8211, + u'ne': 8800, + u'ni': 8715, + u'not': 172, + u'notin': 8713, + u'nsub': 8836, + u'Ntilde': 209, + u'ntilde': 241, + u'Nu': 925, + u'nu': 957, + u'Oacute': 211, + u'oacute': 243, + u'Ocirc': 212, + u'ocirc': 244, + u'OElig': 338, + u'oelig': 339, + u'Ograve': 210, + u'ograve': 242, + u'oline': 8254, + u'Omega': 937, + u'omega': 969, + u'Omicron': 927, + u'omicron': 959, + u'oplus': 8853, + u'or': 8744, + u'ordf': 170, + u'ordm': 186, + u'Oslash': 216, + u'oslash': 248, + u'Otilde': 213, + u'otilde': 245, + u'otimes': 8855, + u'Ouml': 214, + u'ouml': 246, + u'para': 182, + u'part': 8706, + u'permil': 8240, + u'perp': 8869, + u'Phi': 934, + u'phi': 966, + u'Pi': 928, + u'pi': 960, + u'piv': 982, + u'plusmn': 177, + u'pound': 163, + u'prime': 8242, + u'Prime': 8243, + u'prod': 8719, + u'prop': 8733, + u'Psi': 936, + u'psi': 968, + u'quot': 34, + u'radic': 8730, + u'rang': 9002, + u'raquo': 187, + u'rarr': 8594, + u'rArr': 8658, + u'rceil': 8969, + u'rdquo': 8221, + u'real': 8476, + u'reg': 174, + u'rfloor': 8971, + u'Rho': 929, + u'rho': 961, + u'rlm': 8207, + u'rsaquo': 8250, + u'rsquo': 8217, + u'sbquo': 8218, + u'Scaron': 352, + u'scaron': 353, + u'sdot': 8901, + u'sect': 167, + u'shy': 173, + u'Sigma': 931, + u'sigma': 963, + u'sigmaf': 962, + u'sim': 8764, + u'spades': 9824, + u'sub': 8834, + u'sube': 8838, + u'sum': 8721, + u'sup': 8835, + u'sup1': 185, + u'sup2': 178, + u'sup3': 179, + u'supe': 8839, + u'szlig': 223, + u'Tau': 932, + u'tau': 964, + u'there4': 8756, + u'Theta': 920, + u'theta': 952, + u'thetasym': 977, + u'thinsp': 8201, + u'THORN': 222, + u'thorn': 254, + u'tilde': 732, + u'times': 215, + u'trade': 8482, + u'Uacute': 218, + u'uacute': 250, + u'uarr': 8593, + u'uArr': 8657, + u'Ucirc': 219, + u'ucirc': 251, + u'Ugrave': 217, + u'ugrave': 249, + u'uml': 168, + u'upsih': 978, + u'Upsilon': 933, + u'upsilon': 965, + u'Uuml': 220, + u'uuml': 252, + u'weierp': 8472, + u'Xi': 926, + u'xi': 958, + u'Yacute': 221, + u'yacute': 253, + u'yen': 165, + u'Yuml': 376, + u'yuml': 255, + u'Zeta': 918, + u'zeta': 950, + u'zwj': 8205, + u'zwnj': 8204 +} + +_charRefsPat = re.compile(ur'''(&([A-Za-z0-9]+);|&#([0-9]+);|&#[xX]([0-9A-Za-z]+);|(&))''', re.UNICODE) +_cssCommentPat = re.compile(ur'''\*.*?\*''', re.UNICODE) +_toUTFPat = re.compile(ur'''\\([0-9A-Fa-f]{1,6})[\s]?''', re.UNICODE) +_hackPat = re.compile(ur'''(expression|tps*://|url\s*\().*''', re.UNICODE | re.IGNORECASE) +_hrPat = re.compile(u'''^-----*''', re.UNICODE | re.MULTILINE) +_h1Pat = re.compile(u'^=(.+)=\s*$', re.UNICODE | re.MULTILINE) +_h2Pat = re.compile(u'^==(.+)==\s*$', re.UNICODE | re.MULTILINE) +_h3Pat = re.compile(u'^===(.+)===\s*$', re.UNICODE | re.MULTILINE) +_h4Pat = re.compile(u'^====(.+)====\s*$', re.UNICODE | re.MULTILINE) +_h5Pat = re.compile(u'^=====(.+)=====\s*$', re.UNICODE | re.MULTILINE) +_h6Pat = re.compile(u'^======(.+)======\s*$', re.UNICODE | re.MULTILINE) +_quotePat = re.compile(u"""(''+)""", re.UNICODE) +_removePat = re.compile(ur'\b(' + ur'|'.join((u"a", u"an", u"as", u"at", u"before", u"but", u"by", u"for", u"from", + u"is", u"in", u"into", u"like", u"of", u"off", u"on", u"onto", u"per", + u"since", u"than", u"the", u"this", u"that", u"to", u"up", u"via", + u"with")) + ur')\b', re.UNICODE | re.IGNORECASE) +_nonWordSpaceDashPat = re.compile(ur'[^\w\s\-\./]', re.UNICODE) +_multiSpacePat = re.compile(ur'[\s\-_\./]+', re.UNICODE) +_spacePat = re.compile(ur' ', re.UNICODE) +_linkPat = re.compile(ur'^(?:([A-Za-z0-9]+):)?([^\|]+)(?:\|([^\n]+?))?\]\](.*)$', re.UNICODE | re.DOTALL) +_bracketedLinkPat = re.compile(ur'(?:\[((?:mailto:|irc://|https?://|ftp://|/)[^<>\]\[' + u"\x00-\x20\x7f" + ur']*)\s*(.*?)\])', re.UNICODE) +_protocolPat = re.compile(ur'(\b(?:mailto:|irc://|https?://|ftp://))', re.UNICODE) +_specialUrlPat = re.compile(ur'^([^<>\]\[' + u"\x00-\x20\x7f" + ur']+)(.*)$', re.UNICODE) +_protocolsPat = re.compile(ur'^(mailto:|irc://|https?://|ftp://)$', re.UNICODE) +_controlCharsPat = re.compile(ur'[\]\[<>"' + u"\\x00-\\x20\\x7F" + ur']]', re.UNICODE) +_hostnamePat = re.compile(ur'^([^:]+:)(//[^/]+)?(.*)$', re.UNICODE) +_stripPat = re.compile(u'\\s|\u00ad|\u1806|\u200b|\u2060|\ufeff|\u03f4|\u034f|\u180b|\u180c|\u180d|\u200c|\u200d|[\ufe00-\ufe0f]', re.UNICODE) +_zomgPat = re.compile(ur'^(:*)\{\|(.*)$', re.UNICODE) +_headerPat = re.compile(ur"<[Hh]([1-6])(.*?)>(.*?)", re.UNICODE) +_templateSectionPat = re.compile(ur"", re.UNICODE) +_tagPat = re.compile(ur"<.*?>", re.UNICODE) +_startRegexHash = {} +_endRegexHash = {} +_endCommentPat = re.compile(ur'(-->)', re.UNICODE) +_extractTagsAndParams_n = 1 +_guillemetLeftPat = re.compile(ur'(.) (\?|:|;|!|\302\273)', re.UNICODE) +_guillemetRightPat = re.compile(ur'(\302\253) ', re.UNICODE) + +def setupAttributeWhitelist(): + common = ( u'id', u'class', u'lang', u'dir', u'title', u'style' ) + block = common + (u'align',) + tablealign = ( u'align', u'char', u'charoff', u'valign' ) + tablecell = ( u'abbr', + u'axis', + u'headers', + u'scope', + u'rowspan', + u'colspan', + u'nowrap', # deprecated + u'width', # deprecated + u'height', # deprecated + u'bgcolor' # deprecated + ) + return { + u'div': block, + u'center': common, # deprecated + u'span': block, # ?? + u'h1': block, + u'h2': block, + u'h3': block, + u'h4': block, + u'h5': block, + u'h6': block, + u'em': common, + u'strong': common, + u'cite': common, + u'code': common, + u'var': common, + u'img': common + (u'src', u'alt', u'width', u'height',), + u'blockquote': common + (u'cite',), + u'sub': common, + u'sup': common, + u'p': block, + u'br': (u'id', u'class', u'title', u'style', u'clear',), + u'pre': common + (u'width',), + u'ins': common + (u'cite', u'datetime'), + u'del': common + (u'cite', u'datetime'), + u'ul': common + (u'type',), + u'ol': common + (u'type', u'start'), + u'li': common + (u'type', u'value'), + u'dl': common, + u'dd': common, + u'dt': common, + u'table': common + ( u'summary', u'width', u'border', u'frame', + u'rules', u'cellspacing', u'cellpadding', + u'align', u'bgcolor', + ), + u'caption': common + (u'align',), + u'thead': common + tablealign, + u'tfoot': common + tablealign, + u'tbody': common + tablealign, + u'colgroup': common + ( u'span', u'width' ) + tablealign, + u'col': common + ( u'span', u'width' ) + tablealign, + u'tr': common + ( u'bgcolor', ) + tablealign, + u'td': common + tablecell + tablealign, + u'th': common + tablecell + tablealign, + u'tt': common, + u'b': common, + u'i': common, + u'big': common, + u'small': common, + u'strike': common, + u's': common, + u'u': common, + u'font': common + ( u'size', u'color', u'face' ), + u'hr': common + ( u'noshade', u'size', u'width' ), + u'ruby': common, + u'rb': common, + u'rt': common, #array_merge( $common, array( 'rbspan' ) ), + u'rp': common, + } +_whitelist = setupAttributeWhitelist() +_page_cache = {} +env = {} + +def registerTagHook(tag, function): + mTagHooks[tag] = function + +class BaseParser(object): + def __init__(self): + self.uniq_prefix = u"\x07UNIQ" + unicode(random.randint(1, 1000000000)) + self.strip_state = {} + self.arg_stack = [] + self.env = env + self.keep_env = (env != {}) + + def __del__(self): + if not self.keep_env: + global env + env = {} + + ''' Used to store objects in the environment + used to prevent recursive imports ''' + def store_object(self, namespace, key, value=True): + # Store the item to not reprocess it + if namespace not in self.env: + self.env[namespace] = {} + self.env[namespace][key] = value + + def has_object(self, namespace, key): + if namespace not in self.env: + self.env[namespace] = {} + if hasattr(self, 'count'): + data = self.env[namespace] + test = key in data + self.count = True + return key in self.env[namespace] + + def retrieve_object(self, namespace, key, default=None): + if not self.env.get(namespace): + self.env[namespace] = {} + return self.env[namespace].get(key, default) + + def parse(self, text): + utf8 = isinstance(text, str) + text = to_unicode(text) + if text[-1:] != u'\n': + text = text + u'\n' + taggedNewline = True + else: + taggedNewline = False + + text = self.strip(text) + text = self.removeHtmlTags(text) + text = self.parseHorizontalRule(text) + text = self.parseAllQuotes(text) + text = self.replaceExternalLinks(text) + text = self.unstrip(text) + text = self.fixtags(text) + text = self.doBlockLevels(text, True) + text = self.unstripNoWiki(text) + text = text.split(u'\n') + text = u'\n'.join(text) + if taggedNewline and text[-1:] == u'\n': + text = text[:-1] + if utf8: + return text.encode("utf-8") + return text + + def strip(self, text, stripcomments=False, dontstrip=[]): + render = True + + commentState = {} + + elements = ['nowiki',] + mTagHooks.keys() + if True: #wgRawHtml + elements.append('html') + + # Removing $dontstrip tags from $elements list (currently only 'gallery', fixing bug 2700) + for k in dontstrip: + if k in elements: + del elements[k] + + matches = {} + text = self.extractTagsAndParams(elements, text, matches) + + for marker in matches: + element, content, params, tag = matches[marker] + if render: + tagName = element.lower() + if tagName == u'!--': + # comment + output = tag + if tag[-3:] != u'-->': + output += "-->" + elif tagName == u'html': + output = content + elif tagName == u'nowiki': + output = content.replace(u'&', u'&').replace(u'<', u'<').replace(u'>', u'>') + else: + if tagName in mTagHooks: + output = mTagHooks[tagName](self, content, params) + else: + output = content.replace(u'&', u'&').replace(u'<', u'<').replace(u'>', u'>') + else: + # Just stripping tags; keep the source + output = tag + + # Unstrip the output, because unstrip() is no longer recursive so + # it won't do it itself + output = self.unstrip(output) + + if not stripcomments and element == u'!--': + commentState[marker] = output + elif element == u'html' or element == u'nowiki': + if 'nowiki' not in self.strip_state: + self.strip_state['nowiki'] = {} + self.strip_state['nowiki'][marker] = output + else: + if 'general' not in self.strip_state: + self.strip_state['general'] = {} + self.strip_state['general'][marker] = output + + # Unstrip comments unless explicitly told otherwise. + # (The comments are always stripped prior to this point, so as to + # not invoke any extension tags / parser hooks contained within + # a comment.) + if not stripcomments: + # Put them all back and forget them + for k in commentState: + v = commentState[k] + text = text.replace(k, v) + + return text + + def removeHtmlTags(self, text): + """convert bad tags into HTML identities""" + sb = [] + text = self.removeHtmlComments(text) + bits = text.split(u'<') + sb.append(bits.pop(0)) + tagstack = [] + tablestack = tagstack + for x in bits: + m = _tagPattern.match(x) + if not m: + continue + slash, t, params, brace, rest = m.groups() + t = t.lower() + badtag = False + if t in _htmlelements: + # Check our stack + if slash: + # Closing a tag... + if t in _htmlsingleonly or len(tagstack) == 0: + badtag = True + else: + ot = tagstack.pop() + if ot != t: + if ot in _htmlsingleallowed: + # Pop all elements with an optional close tag + # and see if we find a match below them + optstack = [] + optstack.append(ot) + while True: + if len(tagstack) == 0: + break + ot = tagstack.pop() + if ot == t or ot not in _htmlsingleallowed: + break + optstack.append(ot) + if t != ot: + # No match. Push the optinal elements back again + badtag = True + tagstack += reversed(optstack) + else: + tagstack.append(ot) + #
  • can be nested in
      or
        , skip those cases: + if ot not in _htmllist and t in _listtags: + badtag = True + elif t == u'table': + if len(tablestack) == 0: + bagtag = True + else: + tagstack = tablestack.pop() + newparams = u'' + else: + # Keep track for later + if t in _tabletags and u'table' not in tagstack: + badtag = True + elif t in tagstack and t not in _htmlnest: + badtag = True + # Is it a self-closed htmlpair? (bug 5487) + elif brace == u'/>' and t in _htmlpairs: + badTag = True + elif t in _htmlsingleonly: + # Hack to force empty tag for uncloseable elements + brace = u'/>' + elif t in _htmlsingle: + # Hack to not close $htmlsingle tags + brace = None + else: + if t == u'table': + tablestack.append(tagstack) + tagstack = [] + tagstack.append(t) + newparams = self.fixTagAttributes(params, t) + if not badtag: + rest = rest.replace(u'>', u'>') + if brace == u'/>': + close = u' /' + else: + close = u'' + sb.append(u'<') + sb.append(slash) + sb.append(t) + sb.append(newparams) + sb.append(close) + sb.append(u'>') + sb.append(rest) + continue + sb.append(u'<') + sb.append(x.replace(u'>', u'>')) + + # Close off any remaining tags + while tagstack: + t = tagstack.pop() + sb.append(u'\n') + if t == u'table': + if not tablestack: + break + tagstack = tablestack.pop() + + return u''.join(sb) + + def removeHtmlComments(self, text): + """remove comments from given text""" + sb = [] + start = text.find(u'', start) + if end == -1: + break + end += 3 + + spaceStart = max(0, start-1) + spaceEnd = end + while text[spaceStart] == u' ' and spaceStart > 0: + spaceStart -= 1 + while text[spaceEnd] == u' ': + spaceEnd += 1 + + if text[spaceStart] == u'\n' and text[spaceEnd] == u'\n': + sb.append(text[last:spaceStart]) + sb.append(u'\n') + last = spaceEnd+1 + else: + sb.append(text[last:spaceStart+1]) + last = spaceEnd + + start = text.find(u'' + + return result, mDTopen + + def nextItem(self, char, mDTopen): + if char == u'*' or char == '#': + return u'
      1. ', None + elif char == u':' or char == u';': + close = u'' + if mDTopen: + close = '' + if char == u';': + return close + u'
        ', True + else: + return close + u'
        ', False + return u'' + + def closeList(self, char, mDTopen): + if char == u'*': + return u'
    \n' + elif char == u'#': + return u'
  • \n' + elif char == u':': + if mDTopen: + return u'\n' + else: + return u'\n' + else: + return u'' + + def findColonNoLinks(self, text, before, after): + try: + pos = text.search(':') + except: + return False + + lt = text.find('<') + if lt == -1 or lt > pos: + # Easy; no tag nesting to worry about + before = text[0:pos] + after = text[0:pos+1] + return before, after, pos + + # Ugly state machine to walk through avoiding tags. + state = MW_COLON_STATE_TEXT; + stack = 0; + i = 0 + while i < len(text): + c = text[i]; + + if state == 0: # MW_COLON_STATE_TEXT: + if text[i] == '<': + # Could be either a tag or an tag + state = MW_COLON_STATE_TAGSTART + elif text[i] == ':': + if stack == 0: + # we found it + return text[0:i], text[i+1], i + else: + # Skip ahead looking for something interesting + try: + colon = text.search(':', i) + except: + return False + lt = text.find('<', i) + if stack == 0: + if lt == -1 or colon < lt: + # we found it + return text[0:colon], text[colon+1], i + if lt == -1: + break + # Skip ahead to next tag start + i = lt + state = MW_COLON_STATE_TAGSTART + elif state == 1: # MW_COLON_STATE_TAG: + # In a + if text[i] == '>': + stack += 1 + state = MW_COLON_STATE_TEXT + elif text[i] == '/': + state = MW_COLON_STATE_TAGSLASH + elif state == 2: # MW_COLON_STATE_TAGSTART: + if text[i] == '/': + state = MW_COLON_STATE_CLOSETAG + elif text[i] == '!': + state = MW_COLON_STATE_COMMENT + elif text[i] == '>': + # Illegal early close? This shouldn't happen D: + state = MW_COLON_STATE_TEXT + else: + state = MW_COLON_STATE_TAG + elif state == 3: # MW_COLON_STATE_CLOSETAG: + # In a + if text[i] == '>': + stack -= 1 + if stack < 0: + return False + state = MW_COLON_STATE_TEXT + elif state == MW_COLON_STATE_TAGSLASH: + if text[i] == '>': + # Yes, a self-closed tag + state = MW_COLON_STATE_TEXT + else: + # Probably we're jumping the gun, and this is an attribute + state = MW_COLON_STATE_TAG + elif state == 5: # MW_COLON_STATE_COMMENT: + if text[i] == '-': + state = MW_COLON_STATE_COMMENTDASH + elif state == MW_COLON_STATE_COMMENTDASH: + if text[i] == '-': + state = MW_COLON_STATE_COMMENTDASHDASH + else: + state = MW_COLON_STATE_COMMENT + elif state == MW_COLON_STATE_COMMENTDASHDASH: + if text[i] == '>': + state = MW_COLON_STATE_TEXT + else: + state = MW_COLON_STATE_COMMENT + else: + raise + if stack > 0: + return False + return False + + def doBlockLevels(self, text, linestart): + # Parsing through the text line by line. The main thing + # happening here is handling of block-level elements p, pre, + # and making lists from lines starting with * # : etc. + lastPrefix = u'' + mDTopen = inBlockElem = False + prefixLength = 0 + paragraphStack = False + _closeMatchPat = re.compile(ur"( 0: + tmpOutput, tmpMDTopen = self.nextItem(pref[commonPrefixLength-1], mDTopen) + output.append(tmpOutput) + if tmpMDTopen is not None: + mDTopen = tmpMDTopen + + while prefixLength > commonPrefixLength: + char = pref[commonPrefixLength:commonPrefixLength+1] + tmpOutput, tmpMDTOpen = self.openList(char, mLastSection) + if tmpMDTOpen: + mDTopen = True + output.append(tmpOutput) + mLastSection = u'' + mInPre = False + + if char == u';': + # FIXME: This is dupe of code above + term = t2 = u'' + z = self.findColonNoLinks(t, term, t2) + if z != False: + term, t2 = z[1:2] + t = t2 + output.append(term) + tmpOutput, tmpMDTopen = self.nextItem(u':', mDTopen) + output.append(tmpOutput) + if tmpMDTopen is not None: + mDTopen = tmpMDTopen + + commonPrefixLength += 1 + + lastPrefix = pref2 + + if prefixLength == 0: + # No prefix (not in list)--go to paragraph mode + # XXX: use a stack for nestable elements like span, table and div + openmatch = _openMatchPat.search(t) + closematch = _closeMatchPat.search(t) + if openmatch or closematch: + paragraphStack = False + output.append(self.closeParagraph(mLastSection)) + mLastSection = u'' + if preCloseMatch: + mInPre = False + if preOpenMatch: + mInPre = True + inBlockElem = bool(not closematch) + elif not inBlockElem and not mInPre: + if t[0:1] == u' ' and (mLastSection == u'pre' or t.strip() != u''): + # pre + if mLastSection != u'pre': + paragraphStack = False + output.append(self.closeParagraph(u'') + u'
    ')
    +							mInPre = False
    +							mLastSection = u'pre'
    +						t = t[1:]
    +					else:
    +						# paragraph
    +						if t.strip() == u'':
    +							if paragraphStack:
    +								output.append(paragraphStack + u'
    ') + paragraphStack = False + mLastSection = u'p' + else: + if mLastSection != u'p': + output.append(self.closeParagraph(mLastSection)) + mLastSection = u'' + mInPre = False + paragraphStack = u'

    ' + else: + paragraphStack = u'

    ' + else: + if paragraphStack: + output.append(paragraphStack) + paragraphStack = False + mLastSection = u'p' + elif mLastSection != u'p': + output.append(self.closeParagraph(mLastSection) + u'

    ') + mLastSection = u'p' + mInPre = False + + # somewhere above we forget to get out of pre block (bug 785) + if preCloseMatch and mInPre: + mInPre = False + + if paragraphStack == False: + output.append(t + u"\n") + + while prefixLength: + output.append(self.closeList(pref2[prefixLength-1], mDTopen)) + mDTopen = False + prefixLength -= 1 + + if mLastSection != u'': + output.append(u'') + mLastSection = u'' + + return ''.join(output) + +class Parser(BaseParser): + def __init__(self, show_toc=True): + super(Parser, self).__init__() + self.show_toc = show_toc + + def parse(self, text): + utf8 = isinstance(text, str) + text = to_unicode(text) + if text[-1:] != u'\n': + text = text + u'\n' + taggedNewline = True + else: + taggedNewline = False + + text = self.strip(text) + text = self.removeHtmlTags(text) + text = self.doTableStuff(text) + text = self.parseHorizontalRule(text) + text = self.checkTOC(text) + text = self.parseHeaders(text) + text = self.parseAllQuotes(text) + text = self.replaceExternalLinks(text) + if not self.show_toc and text.find(u"") == -1: + self.show_toc = False + text = self.formatHeadings(text, True) + text = self.unstrip(text) + text = self.fixtags(text) + text = self.doBlockLevels(text, True) + text = self.unstripNoWiki(text) + text = text.split(u'\n') + text = u'\n'.join(text) + if taggedNewline and text[-1:] == u'\n': + text = text[:-1] + if utf8: + return text.encode("utf-8") + return text + + def checkTOC(self, text): + if text.find(u"__NOTOC__") != -1: + text = text.replace(u"__NOTOC__", u"") + self.show_toc = False + if text.find(u"__TOC__") != -1: + text = text.replace(u"__TOC__", u"") + self.show_toc = True + return text + + def doTableStuff(self, text): + t = text.split(u"\n") + td = [] # Is currently a td tag open? + ltd = [] # Was it TD or TH? + tr = [] # Is currently a tr tag open? + ltr = [] # tr attributes + has_opened_tr = [] # Did this table open a element? + indent_level = 0 # indent level of the table + + for k, x in zip(range(len(t)), t): + x = x.strip() + fc = x[0:1] + matches = _zomgPat.match(x) + if matches: + indent_level = len(matches.group(1)) + + attributes = self.unstripForHTML(matches.group(2)) + + t[k] = u'

    '*indent_level + u'' + td.append(False) + ltd.append(u'') + tr.append(False) + ltr.append(u'') + has_opened_tr.append(False) + elif len(td) == 0: + pass + elif u'|}' == x[0:2]: + z = u"" + x[2:] + l = ltd.pop() + if not has_opened_tr.pop(): + z = u"" + z + if tr.pop(): + z = u"" + z + if td.pop(): + z = u'' + z + ltr.pop() + t[k] = z + u'
    '*indent_level + elif u'|-' == x[0:2]: # Allows for |------------- + x = x[1:] + while x != u'' and x[0:1] == '-': + x = x[1:] + z = '' + l = ltd.pop() + has_opened_tr.pop() + has_opened_tr.append(True) + if tr.pop(): + z = u'' + z + if td.pop(): + z = u'' + z + ltr.pop() + t[k] = z + tr.append(False) + td.append(False) + ltd.append(u'') + attributes = self.unstripForHTML(x) + ltr.append(self.fixTagAttributes(attributes, u'tr')) + elif u'|' == fc or u'!' == fc or u'|+' == x[0:2]: # Caption + # x is a table row + if u'|+' == x[0:2]: + fc = u'+' + x = x[1:] + x = x[1:] + if fc == u'!': + x = x.replace(u'!!', u'||') + # Split up multiple cells on the same line. + # FIXME: This can result in improper nesting of tags processed + # by earlier parser steps, but should avoid splitting up eg + # attribute values containing literal "||". + x = x.split(u'||') + + t[k] = u'' + + # Loop through each table cell + for theline in x: + z = '' + if fc != u'+': + tra = ltr.pop() + if not tr.pop(): + z = u'\n' + tr.append(True) + ltr.append(u'') + has_opened_tr.pop() + has_opened_tr.append(True) + l = ltd.pop() + if td.pop(): + z = u'' + z + if fc == u'|': + l = u'td' + elif fc == u'!': + l = u'th' + elif fc == u'+': + l = u'caption' + else: + l = u'' + ltd.append(l) + + #Cell parameters + y = theline.split(u'|', 1) + # Note that a '|' inside an invalid link should not + # be mistaken as delimiting cell parameters + if y[0].find(u'[[') != -1: + y = [theline] + + if len(y) == 1: + y = z + u"<" + l + u">" + y[0] + else: + attributes = self.unstripForHTML(y[0]) + y = z + u"<" + l + self.fixTagAttributes(attributes, l) + u">" + y[1] + + t[k] += y + td.append(True) + + while len(td) > 0: + l = ltd.pop() + if td.pop(): + t.append(u'') + if tr.pop(): + t.append(u'') + if not has_opened_tr.pop(): + t.append(u'') + t.append(u'') + + text = u'\n'.join(t) + # special case: don't return empty table + if text == u"\n\n
    ": + text = u'' + + return text + + def formatHeadings(self, text, isMain): + """ + This function accomplishes several tasks: + 1) Auto-number headings if that option is enabled + 2) Add an [edit] link to sections for logged in users who have enabled the option + 3) Add a Table of contents on the top for users who have enabled the option + 4) Auto-anchor headings + + It loops through all headlines, collects the necessary data, then splits up the + string and re-inserts the newly formatted headlines. + """ + doNumberHeadings = False + showEditLink = True # Can User Edit + + if text.find(u"__NOEDITSECTION__") != -1: + showEditLink = False + text = text.replace(u"__NOEDITSECTION__", u"") + + # Get all headlines for numbering them and adding funky stuff like [edit] + # links - this is for later, but we need the number of headlines right now + matches = _headerPat.findall(text) + numMatches = len(matches) + + # if there are fewer than 4 headlines in the article, do not show TOC + # unless it's been explicitly enabled. + enoughToc = self.show_toc and (numMatches >= 4 or text.find(u"") != -1) + + # Allow user to stipulate that a page should have a "new section" + # link added via __NEWSECTIONLINK__ + showNewSection = False + if text.find(u"__NEWSECTIONLINK__") != -1: + showNewSection = True + text = text.replace(u"__NEWSECTIONLINK__", u"") + # if the string __FORCETOC__ (not case-sensitive) occurs in the HTML, + # override above conditions and always show TOC above first header + if text.find(u"__FORCETOC__") != -1: + self.show_toc = True + enoughToc = True + text = text.replace(u"__FORCETOC__", u"") + # Never ever show TOC if no headers + if numMatches < 1: + enoughToc = False + + # headline counter + headlineCount = 0 + sectionCount = 0 # headlineCount excluding template sections + + # Ugh .. the TOC should have neat indentation levels which can be + # passed to the skin functions. These are determined here + toc = [] + head = {} + sublevelCount = {} + levelCount = {} + toclevel = 0 + level = 0 + prevlevel = 0 + toclevel = 0 + prevtoclevel = 0 + refers = {} + refcount = {} + wgMaxTocLevel = 5 + + for match in matches: + headline = match[2] + istemplate = False + templatetitle = u'' + templatesection = 0 + numbering = [] + + m = _templateSectionPat.search(headline) + if m: + istemplate = True + templatetitle = b64decode(m[0]) + templatesection = 1 + int(b64decode(m[1])) + headline = _templateSectionPat.sub(u'', headline) + + if toclevel: + prevlevel = level + prevtoclevel = toclevel + + level = matches[headlineCount][0] + + if doNumberHeadings or enoughToc: + if level > prevlevel: + toclevel += 1 + sublevelCount[toclevel] = 0 + if toclevel < wgMaxTocLevel: + toc.append(u'\n
      ') + elif level < prevlevel and toclevel > 1: + # Decrease TOC level, find level to jump to + + if toclevel == 2 and level < levelCount[1]: + toclevel = 1 + else: + for i in range(toclevel, 0, -1): + if levelCount[i] == level: + # Found last matching level + toclevel = i + break + elif levelCount[i] < level: + toclevel = i + 1 + break + if toclevel < wgMaxTocLevel: + toc.append(u"\n") + toc.append(u"
    \n\n" * max(prevtoclevel - toclevel, 0)) + else: + if toclevel < wgMaxTocLevel: + toc.append(u"\n") + + levelCount[toclevel] = level + + # count number of headlines for each level + sublevelCount[toclevel] += 1 + for i in range(1, toclevel+1): + if sublevelCount[i]: + numbering.append(to_unicode(sublevelCount[i])) + + # The canonized header is a version of the header text safe to use for links + # Avoid insertion of weird stuff like by expanding the relevant sections + canonized_headline = self.unstrip(headline) + canonized_headline = self.unstripNoWiki(canonized_headline) + + # -- don't know what to do with this yet. + # Remove link placeholders by the link text. + # + # turns into + # link text with suffix + # $canonized_headline = preg_replace( '//e', + # "\$this->mLinkHolders['texts'][\$1]", + # $canonized_headline ); + # $canonized_headline = preg_replace( '//e', + # "\$this->mInterwikiLinkHolders['texts'][\$1]", + # $canonized_headline ); + + # strip out HTML + canonized_headline = _tagPat.sub(u'', canonized_headline) + tocline = canonized_headline.strip() + # Save headline for section edit hint before it's escaped + headline_hint = tocline + canonized_headline = self.escapeId(tocline) + refers[headlineCount] = canonized_headline + + # count how many in assoc. array so we can track dupes in anchors + if canonized_headline not in refers: + refers[canonized_headline] = 1 + else: + refers[canonized_headline] += 1 + refcount[headlineCount] = refers[canonized_headline] + + numbering = '.'.join(numbering) + + # Don't number the heading if it is the only one (looks silly) + if doNumberHeadings and numMatches > 1: + # the two are different if the line contains a link + headline = numbering + u' ' + headline + + # Create the anchor for linking from the TOC to the section + anchor = canonized_headline; + if refcount[headlineCount] > 1: + anchor += u'_' + unicode(refcount[headlineCount]) + + if enoughToc: + toc.append(u'\n
  • ') + toc.append(numbering) + toc.append(u' ') + toc.append(tocline) + toc.append(u'') + + # if showEditLink and (not istemplate or templatetitle != u""): + # if not head[headlineCount]: + # head[headlineCount] = u'' + # + # if istemplate: + # head[headlineCount] += sk.editSectionLinkForOther(templatetile, templatesection) + # else: + # head[headlineCount] += sk.editSectionLink(mTitle, sectionCount+1, headline_hint) + + # give headline the correct tag + if headlineCount not in head: + head[headlineCount] = [] + h = head[headlineCount] + h.append(u'') + h.append(matches[headlineCount][1].strip()) + h.append(headline.strip()) + h.append(u'') + + headlineCount += 1 + + if not istemplate: + sectionCount += 1 + + if enoughToc: + if toclevel < wgMaxTocLevel: + toc.append(u"
  • \n") + toc.append(u"\n\n" * max(0, toclevel - 1)) + #TODO: use gettext + #toc.insert(0, u'

    ' + _('Table of Contents') + '

    ') + toc.insert(0, u'

    Table of Contents

    ') + toc.append(u'\n
    ') + + # split up and insert constructed headlines + + blocks = _headerPat.split(text) + + i = 0 + len_blocks = len(blocks) + forceTocPosition = text.find(u"") + full = [] + while i < len_blocks: + j = i/4 + full.append(blocks[i]) + if enoughToc and not i and isMain and forceTocPosition == -1: + full += toc + toc = None + if j in head and head[j]: + full += head[j] + head[j] = None + i += 4 + full = u''.join(full) + if forceTocPosition != -1: + return full.replace(u"", u''.join(toc), 1) + else: + return full + +def parse(text, showToc=True): + """Returns HTML from MediaWiki markup""" + p = Parser(show_toc=showToc) + return p.parse(text) + +def parselite(text): + """Returns HTML from MediaWiki markup ignoring + without headings""" + p = BaseParser() + return p.parse(text) + +def truncate_url(url, length=40): + if len(url) <= length: + return url + import re + pattern = r'(/[^/]+/?)$' + match = re.search(pattern, url) + if not match: + return url + l = len(match.group(1)) + domain = url.replace(match.group(1), '') + firstpart = url[0:len(url)-l] + secondpart = match.group(1) + if firstpart == firstpart[0:length-3]: + secondpart = secondpart[0:length-3] + '...' + else: + firstpart = firstpart[0:length-3] + secondpart = '...' + secondpart + t_url = firstpart+secondpart + return t_url + +def to_unicode(text, charset=None): + """Convert a `str` object to an `unicode` object. + + If `charset` is given, we simply assume that encoding for the text, + but we'll use the "replace" mode so that the decoding will always + succeed. + If `charset` is ''not'' specified, we'll make some guesses, first + trying the UTF-8 encoding, then trying the locale preferred encoding, + in "replace" mode. This differs from the `unicode` builtin, which + by default uses the locale preferred encoding, in 'strict' mode, + and is therefore prompt to raise `UnicodeDecodeError`s. + + Because of the "replace" mode, the original content might be altered. + If this is not what is wanted, one could map the original byte content + by using an encoding which maps each byte of the input to an unicode + character, e.g. by doing `unicode(text, 'iso-8859-1')`. + """ + if not isinstance(text, str): + if isinstance(text, Exception): + # two possibilities for storing unicode strings in exception data: + try: + # custom __str__ method on the exception (e.g. PermissionError) + return unicode(text) + except UnicodeError: + # unicode arguments given to the exception (e.g. parse_date) + return ' '.join([to_unicode(arg) for arg in text.args]) + return unicode(text) + if charset: + return unicode(text, charset, 'replace') + else: + try: + return unicode(text, 'utf-8') + except UnicodeError: + return unicode(text, locale.getpreferredencoding(), 'replace') + +# tag hooks +mTagHooks = {} + +## IMPORTANT +## Make sure all hooks output CLEAN html. Escape any user input BEFORE it's returned + +# Arguments passed: +# - wiki environment instance +# - tag content +# - dictionary of attributes + +# quote example: +# quote +from cgi import escape + +def hook_quote(env, body, attributes={}): + text = [u'
    '] + if 'cite' in attributes: + text.append(u"%s wrote:\n" % escape(attributes['cite'])) + text.append(body.strip()) + text.append(u'
    ') + return u'\n'.join(text) +registerTagHook('quote', hook_quote) + +def safe_name(name=None, remove_slashes=True): + if name is None: + return None + name = str2url(name) + if remove_slashes: + name = re.sub(r"[^a-zA-Z0-9\-_\s\.]", "", name) + else: + name = re.sub(r"[^a-zA-Z0-9\-_\s\.\/]", "", name) + name = re.sub(r"[\s\._]", "-", name) + name = re.sub(r"[-]+", "-", name) + return name.strip("-").lower() + +def str2url(str): + """ + Takes a UTF-8 string and replaces all characters with the equivalent in 7-bit + ASCII. It returns a plain ASCII string usable in URLs. + """ + try: + str = str.encode('utf-8') + except: + pass + mfrom = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîï" + to = "AAAAAAECEEEEIIIIDNOOOOOOUUUUYSaaaaaaaceeeeiiii" + mfrom += "ñòóôõöøùúûüýÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģ" + to += "noooooouuuuyyaaaaaaccccccccddddeeeeeeeeeegggggggg" + mfrom += "ĤĥĦħĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘř" + to += "hhhhiiiiiiiiiijjkkkllllllllllnnnnnnnnnoooooooorrrrrr" + mfrom += "ŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſƀƂƃƄƅƇƈƉƊƐƑƒƓƔ" + to += "ssssssssttttttuuuuuuuuuuuuwwyyyzzzzzzfbbbbbccddeffgv" + mfrom += "ƖƗƘƙƚƝƞƟƠƤƦƫƬƭƮƯưƱƲƳƴƵƶǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟǠǡǢǣǤǥǦǧǨǩ" + to += "likklnnoopettttuuuuyyzzaaiioouuuuuuuuuueaaaaeeggggkk" + mfrom += "ǪǫǬǭǰǴǵǷǸǹǺǻǼǽǾǿȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȞȟȤȥȦȧȨȩ" + to += "oooojggpnnaaeeooaaaaeeeeiiiioooorrrruuuusstthhzzaaee" + mfrom += "ȪȫȬȭȮȯȰȱȲȳḀḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟḠḡḢḣḤḥḦḧḨḩḪḫ" + to += "ooooooooyyaabbbbbbccddddddddddeeeeeeeeeeffgghhhhhhhhhh" + mfrom += "ḬḭḮḯḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏṐṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟ" + to += "iiiikkkkkkllllllllmmmmmmnnnnnnnnoooooooopppprrrrrrrr" + mfrom += "ṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏẐẑẒẓẔẕ" + to += "ssssssssssttttttttuuuuuuuuuuvvvvwwwwwwwwwwxxxxxyzzzzzz" + mfrom += "ẖẗẘẙẚẛẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊị" + to += "htwyafaaaaaaaaaaaaaaaaaaaaaaaaeeeeeeeeeeeeeeeeiiii" + mfrom += "ỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹ" + to += "oooooooooooooooooooooooouuuuuuuuuuuuuuyyyyyyyy" + for i in zip(mfrom, to): + str = str.replace(*i) + return str + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/__init__.py b/document_page/wizard/__init__.py new file mode 100644 index 00000000000..e24534647f4 --- /dev/null +++ b/document_page/wizard/__init__.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +import document_page_create_menu +import document_page_show_diff + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/document_page_create_menu.py b/document_page/wizard/document_page_create_menu.py new file mode 100644 index 00000000000..87a63c69421 --- /dev/null +++ b/document_page/wizard/document_page_create_menu.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp import SUPERUSER_ID +from openerp.osv import fields, osv + + +class document_page_create_menu(osv.osv_memory): + """ Create Menu """ + _name = "document.page.create.menu" + _description = "Wizard Create Menu" + + _columns = { + 'menu_name': fields.char('Menu Name', size=256, required=True), + 'menu_parent_id': fields.many2one('ir.ui.menu', 'Parent Menu', + required=True), + } + + def default_get(self, cr, uid, fields, context=None): + if context is None: + context = {} + res = super(document_page_create_menu, self).default_get(cr, uid, + fields, + context= + context) + page_id = context.get('active_id') + obj_page = self.pool.get('document.page') + page = obj_page.browse(cr, uid, page_id, context=context) + res['menu_name'] = page.name + return res + + def document_page_menu_create(self, cr, uid, ids, context=None): + if context is None: + context = {} + obj_page = self.pool.get('document.page') + obj_menu = self.pool.get('ir.ui.menu') + obj_action = self.pool.get('ir.actions.act_window') + page_id = context.get('active_id', False) + page = obj_page.browse(cr, uid, page_id, context=context) + + datas = self.browse(cr, uid, ids, context=context) + data = False + if datas: + data = datas[0] + if not data: + return {} + value = { + 'name': 'Document Page', + 'view_type': 'form', + 'view_mode': 'form,tree', + 'res_model': 'document.page', + 'view_id': False, + 'type': 'ir.actions.act_window', + 'target': 'inlineview', + } + value['domain'] = "[('parent_id','=',%d)]" % (page.id) + value['res_id'] = page.id + + action_id = obj_action.create(cr, SUPERUSER_ID, value) + # only the super user is allowed to create menu due to security rules + # on ir.values + menu_id = obj_menu.create(cr, SUPERUSER_ID, { + 'name': data.menu_name, + 'parent_id': data.menu_parent_id.id, + 'icon': 'STOCK_DIALOG_QUESTION', + 'action': 'ir.actions.act_window,' + str(action_id), + }, context) + obj_page.write(cr, uid, [page_id], {'menu_id': menu_id}) + return { + 'type': 'ir.actions.client', + 'tag': 'reload', + } + + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/document_page_create_menu_view.xml b/document_page/wizard/document_page_create_menu_view.xml new file mode 100644 index 00000000000..e4647179ad2 --- /dev/null +++ b/document_page/wizard/document_page_create_menu_view.xml @@ -0,0 +1,33 @@ + + + + + + Create Menu + document.page.create.menu + +
    + + + + +
    +
    +
    +
    +
    + + + Create Menu + ir.actions.act_window + document.page.create.menu + form + form + new + + +
    +
    diff --git a/document_page/wizard/document_page_show_diff.py b/document_page/wizard/document_page_show_diff.py new file mode 100644 index 00000000000..bc47a8ff416 --- /dev/null +++ b/document_page/wizard/document_page_show_diff.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from openerp.osv import fields, osv +from openerp.tools.translate import _ + + +class showdiff(osv.osv_memory): + """ Disp[ay Difference for History """ + + _name = 'wizard.document.page.history.show_diff' + + def get_diff(self, cr, uid, context=None): + if context is None: + context = {} + history = self.pool.get('document.page.history') + ids = context.get('active_ids', []) + + diff = "" + if len(ids) == 2: + if ids[0] > ids[1]: + diff = history.getDiff(cr, uid, ids[1], ids[0]) + else: + diff = history.getDiff(cr, uid, ids[0], ids[1]) + + elif len(ids) == 1: + old = history.browse(cr, uid, ids[0]) + nids = history.search(cr, uid, [('page_id', '=', old.page_id.id)]) + nids.sort() + diff = history.getDiff(cr, uid, ids[0], nids[-1]) + else: + raise osv.except_osv(_('Warning!'), _('You need to select minimum \ + one or maximum two history \ + revisions!')) + return diff + + _columns = { + 'diff': fields.text('Diff', readonly=True), + } + + _defaults = { + 'diff': get_diff + } + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/document_page_show_diff_view.xml b/document_page/wizard/document_page_show_diff_view.xml new file mode 100644 index 00000000000..e2d5ef1af4b --- /dev/null +++ b/document_page/wizard/document_page_show_diff_view.xml @@ -0,0 +1,39 @@ + + + + + + + Show Difference + wizard.document.page.history.show_diff + +
    + +
    +
    + +
    +
    + + + Difference + ir.actions.act_window + wizard.document.page.history.show_diff + form + form + new + + + + +
    +
    diff --git a/document_page/wizard/wiki_make_index.py b/document_page/wizard/wiki_make_index.py new file mode 100644 index 00000000000..c0a19dec3d0 --- /dev/null +++ b/document_page/wizard/wiki_make_index.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRl (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public license as +# published by the Free Software Foundation, either version 3 of the +# license, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABIlITY or FITNESS FOR A PARTICUlAR PURPOSE. See the +# GNU Affero General Public license for more details. +# +# You should have received a copy of the GNU Affero General Public license +# along with this program. If not, see . +# +############################################################################## + +from osv import osv +from tools.translate import _ + + +class wiki_make_index(osv.osv_memory): + """ Create Index For Selected Page """ + + _name = "wiki.make.index" + _description = "Create Index" + + def wiki_do_index(self, cr, uid, ids, context=None): + + """ Makes Index according to page hierarchy + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param ids: list of wiki index’s IDs + + """ + if context is None: + context = {} + data = context and context.get('active_ids', []) or [] + + if not data: + return {'type': 'ir.actions.act_window_close'} + + for index_obj in self.browse(cr, uid, ids, context=context): + wiki_pool = self.pool.get('wiki.wiki') + cr.execute("Select id, section from wiki_wiki where id IN %s \ + order by section ", (tuple(data),)) + lst0 = cr.fetchall() + if not lst0[0][1]: + raise osv.except_osv(_('Warning!'), _('There is no section in\ + this Page.')) + + lst = [] + s_ids = {} + + for l in lst0: + s_ids[l[1]] = l[0] + lst.append(l[1]) + + lst.sort() + val = None + + def toint(x): + try: + return int(x) + except: + return 1 + + lst = map(lambda x: map(toint, x.split('.')), lst) + + result = [] + current = ['0'] + current2 = [] + + for l in lst: + for pos in range(len(l)): + if pos >= len(current): + current.append('1') + continue + if (pos == len(l) - 1) or (pos >= len(current2)) or \ + (toint(l[pos]) > toint(current2[pos])): + current[pos] = str(toint(current[pos]) + 1) + current = current[:pos + 1] + if pos == len(l) - 1: + break + key = ('.'.join([str(x) for x in l])) + id = s_ids[key] + val = ('.'.join([str(x) for x in current[:]]), id) + + if val: + result.append(val) + current2 = l + + for rs in result: + wiki_pool.write(cr, uid, [rs[1]], {'section': rs[0]}) + + return {'type': 'ir.actions.act_window_close'} + +wiki_make_index() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/wiki_make_index_view.xml b/document_page/wizard/wiki_make_index_view.xml new file mode 100644 index 00000000000..90139c3afac --- /dev/null +++ b/document_page/wizard/wiki_make_index_view.xml @@ -0,0 +1,43 @@ + + + + + + + + Create Index + wiki.make.index + form + +
    + +
    +
    + + + + + Create Index + ir.actions.act_window + wiki.make.index + form + form + new + + + + + + +
    +
    diff --git a/document_page/wizard/wiki_wiki_page_open.py b/document_page/wizard/wiki_wiki_page_open.py new file mode 100644 index 00000000000..80bbb583d13 --- /dev/null +++ b/document_page/wizard/wiki_wiki_page_open.py @@ -0,0 +1,71 @@ +# -*- coding: utf-8 -*- +############################################################################## +# +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as +# published by the Free Software Foundation, either version 3 of the +# License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +############################################################################## + +from osv import osv + + +class wiki_wiki_page_open(osv.osv_memory): + """ wizard Open Page """ + + _name = "wiki.wiki.page.open" + _description = "wiz open page" + + def open_wiki_page(self, cr, uid, ids, context=None): + + """ Opens Wiki Page of Group + @param cr: the current row, from the database cursor, + @param uid: the current user’s ID for security checks, + @param ids: List of open wiki page’s IDs + @return: dictionay of open wiki window on give group id + """ + if context is None: + context = {} + group_ids = context.get('active_ids', []) + for group in self.pool.get('wiki.groups').browse(cr, uid, group_ids, + context=context): + value = { + 'domain': "[('group_id','=',%d)]" % (group.id), + 'name': 'Wiki Page', + 'view_type': 'form', + 'view_mode': 'form,tree', + 'res_model': 'wiki.wiki', + 'view_id': False, + 'type': 'ir.actions.act_window', + } + if group.method == 'page': + value['res_id'] = group.home.id + elif group.method == 'list': + value['view_type'] = 'form' + value['view_mode'] = 'tree,form' + elif group.method == 'tree': + view_id = self.pool.get('ir.ui.view').\ + search(cr, uid, [('name', '=', + 'wiki.wiki.tree.children')]) + value['view_id'] = view_id + value['domain'] = [('group_id', '=', group.id), ('parent_id', '=', + False)] + value['view_type'] = 'tree' + + return value + +wiki_wiki_page_open() + +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/wiki_wiki_page_open_view.xml b/document_page/wizard/wiki_wiki_page_open_view.xml new file mode 100644 index 00000000000..49f333e453f --- /dev/null +++ b/document_page/wizard/wiki_wiki_page_open_view.xml @@ -0,0 +1,34 @@ + + + + + + + + Open Page + wiki.wiki.page.open + form + +
    +
    +
    + + + + + Open Page + ir.actions.act_window + wiki.wiki.page.open + form + form + new + +
    +
    From 739114b973e146478f70b83a1a2a73622df27561 Mon Sep 17 00:00:00 2001 From: Giorgio Borelli Date: Tue, 11 Nov 2014 13:25:05 +0100 Subject: [PATCH 02/31] use new API --- document_page/__init__.py | 7 +- document_page/__openerp__.py | 15 +- document_page/data/wiki_main.xml | 39 - document_page/data/wiki_quickstart.xml | 116 - document_page/document_page.py | 214 +- document_page/document_page_demo.xml | 3 +- document_page/document_page_view.xml | 84 +- document_page/security/wiki_security.xml | 12 - document_page/test/document_page_test00.yml | 19 +- document_page/web/__init__.py | 4 - document_page/web/controllers/__init__.py | 3 - document_page/web/controllers/wiki.py | 65 - document_page/web/locales/bg.po | 22 - document_page/web/locales/ca.po | 22 - document_page/web/locales/da.po | 22 - document_page/web/locales/de.po | 22 - .../locales/de_DE/LC_MESSAGES/javascript.po | 20 - .../web/locales/de_DE/LC_MESSAGES/messages.po | 24 - document_page/web/locales/es_CR.po | 23 - .../locales/es_ES/LC_MESSAGES/javascript.po | 20 - .../web/locales/es_ES/LC_MESSAGES/messages.po | 24 - document_page/web/locales/es_PY.po | 22 - document_page/web/locales/fr.po | 22 - .../locales/fr_FR/LC_MESSAGES/javascript.po | 20 - .../web/locales/fr_FR/LC_MESSAGES/messages.po | 24 - document_page/web/locales/gl.po | 22 - document_page/web/locales/javascript.pot | 19 - document_page/web/locales/messages.pot | 23 - document_page/web/locales/ru.po | 22 - document_page/web/locales/sk.po | 22 - document_page/web/locales/tr.po | 22 - document_page/web/static/css/wiki.css | 32 - document_page/web/widgets/__init__.py | 3 - document_page/web/widgets/rss/__init__.py | 3 - document_page/web/widgets/rss/feedparser.py | 2860 ----------------- document_page/web/widgets/templates/wiki.mako | 23 - document_page/web/widgets/wiki.py | 224 -- .../web/widgets/wikimarkup/__init__.py | 2146 ------------- document_page/wizard/__init__.py | 5 +- .../wizard/document_page_create_menu.py | 71 +- .../wizard/document_page_create_menu_view.xml | 14 +- .../wizard/document_page_show_diff.py | 52 +- .../wizard/document_page_show_diff_view.xml | 14 +- document_page/wizard/wiki_make_index.py | 104 - document_page/wizard/wiki_make_index_view.xml | 43 - document_page/wizard/wiki_wiki_page_open.py | 71 - .../wizard/wiki_wiki_page_open_view.xml | 34 - 47 files changed, 299 insertions(+), 6398 deletions(-) delete mode 100644 document_page/data/wiki_main.xml delete mode 100644 document_page/data/wiki_quickstart.xml delete mode 100644 document_page/security/wiki_security.xml delete mode 100644 document_page/web/__init__.py delete mode 100644 document_page/web/controllers/__init__.py delete mode 100644 document_page/web/controllers/wiki.py delete mode 100644 document_page/web/locales/bg.po delete mode 100644 document_page/web/locales/ca.po delete mode 100644 document_page/web/locales/da.po delete mode 100644 document_page/web/locales/de.po delete mode 100644 document_page/web/locales/de_DE/LC_MESSAGES/javascript.po delete mode 100644 document_page/web/locales/de_DE/LC_MESSAGES/messages.po delete mode 100644 document_page/web/locales/es_CR.po delete mode 100644 document_page/web/locales/es_ES/LC_MESSAGES/javascript.po delete mode 100644 document_page/web/locales/es_ES/LC_MESSAGES/messages.po delete mode 100644 document_page/web/locales/es_PY.po delete mode 100644 document_page/web/locales/fr.po delete mode 100644 document_page/web/locales/fr_FR/LC_MESSAGES/javascript.po delete mode 100644 document_page/web/locales/fr_FR/LC_MESSAGES/messages.po delete mode 100644 document_page/web/locales/gl.po delete mode 100644 document_page/web/locales/javascript.pot delete mode 100644 document_page/web/locales/messages.pot delete mode 100644 document_page/web/locales/ru.po delete mode 100644 document_page/web/locales/sk.po delete mode 100644 document_page/web/locales/tr.po delete mode 100644 document_page/web/static/css/wiki.css delete mode 100644 document_page/web/widgets/__init__.py delete mode 100644 document_page/web/widgets/rss/__init__.py delete mode 100755 document_page/web/widgets/rss/feedparser.py delete mode 100644 document_page/web/widgets/templates/wiki.mako delete mode 100644 document_page/web/widgets/wiki.py delete mode 100644 document_page/web/widgets/wikimarkup/__init__.py delete mode 100644 document_page/wizard/wiki_make_index.py delete mode 100644 document_page/wizard/wiki_make_index_view.xml delete mode 100644 document_page/wizard/wiki_wiki_page_open.py delete mode 100644 document_page/wizard/wiki_wiki_page_open_view.xml diff --git a/document_page/__init__.py b/document_page/__init__.py index a5aa017f018..d11fab84733 100644 --- a/document_page/__init__.py +++ b/document_page/__init__.py @@ -18,8 +18,5 @@ # along with this program. If not, see . # ############################################################################## - -from . import ( - document_page, - wizard - ) +from . import document_page +from . import wizard diff --git a/document_page/__openerp__.py b/document_page/__openerp__.py index 3aba6e55fb7..5aaf8983401 100644 --- a/document_page/__openerp__.py +++ b/document_page/__openerp__.py @@ -21,7 +21,7 @@ { 'name': 'Document Page', - 'version': '1.0.1', + 'version': '8.0.1.0.1', 'category': 'Knowledge Management', 'description': """ Pages @@ -30,7 +30,10 @@ """, 'author': ['OpenERP SA'], 'website': 'http://www.openerp.com/', - 'depends': ['knowledge'], + 'license': 'AGPL-3', + 'depends': [ + 'knowledge' + ], 'data': [ 'wizard/document_page_create_menu_view.xml', 'wizard/document_page_show_diff_view.xml', @@ -38,8 +41,12 @@ 'security/document_page_security.xml', 'security/ir.model.access.csv', ], - 'demo': ['document_page_demo.xml'], - 'test': ['test/document_page_test00.yml'], + 'demo': [ + 'document_page_demo.xml' + ], + 'test': [ + 'test/document_page_test00.yml' + ], 'installable': True, 'auto_install': False, 'images': [], diff --git a/document_page/data/wiki_main.xml b/document_page/data/wiki_main.xml deleted file mode 100644 index 223274ea826..00000000000 --- a/document_page/data/wiki_main.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - The OpenERP wiki - help, quick start, wiki, formatting - 0 - 1 - 0 - Initial Page - =The OpenERP wiki= -The OpenERP wiki allows you to manage your enterprise's contents using wiki -restructured texts. This module provides a collaborative way to manage internal -FAQs, quality manuals, technical references, etc. - -==Keypoints== -* Same formating style than MediaWiki, -* Any number of wiki group for different purposes, -* Detailed history on all pages, -* Integrated with the document management system. - -==Why you should use the OpenERP integrated wiki than a separate wiki system ?== -* Allows links to any document of the system, -* Uses the access controls of OpenERP for uniq access rights management, -* Use it to describe projects, tasks, products, -* Integrated with customer portal to provide restricted external accesses, -* Linked to users processes for quality manuals. - -==To get more information== -* [[Basic Wiki Editing]] -* [[Wiki Documentation]] -* [http://openerp.com The OpenERP website] - - - - - - - diff --git a/document_page/data/wiki_quickstart.xml b/document_page/data/wiki_quickstart.xml deleted file mode 100644 index f6ae59de9ee..00000000000 --- a/document_page/data/wiki_quickstart.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - - - Help - Using The Wiki - - - - Basic Wiki Editing - help, quick start, wiki, formatting - 0 - 1 - 1.1 - Initial Page - ==Basic Wiki Editing== -You can ''italicize text'' by putting 2 -apostrophes on each side. -3 apostrophes will embolden '''the text'''. -5 apostrophes will embolden and italicize -'''''the text'''''. -(4 apostrophes don't do anything -special -- there's just ''''one left -over''''.) - -You can ''italicize text'' by putting 2 -apostrophes on each side. - -3 apostrophes will embolden '''the text'''. - -5 apostrophes will embolden and italicize -'''''the text'''''. - -(4 apostrophes don't do anything special -- there's just ''''one left over''''.) - -==Links== -===Internal=== -You give the link as same as the wiki Page Title - -Go back to Main Page : [[The OpenERP wiki]] -===External=== -You can give link to the other Web page over the Internet easily [http://google.com Visit Google] -==Attachments== -===Images=== -You can get the External links easily - -img:http://images.google.co.in/intl/en_ALL/images/images_hp.gif - -==Play with OpenERP Records== -* edit:res.partner|False|Create New Partner -* edit:res.partner|China Export|Edit China Export -* edit:res.country|India|Edit Country - India - -==Working with Attachments== -* Download File : attach:document.doc - -==Unnumbered List== -* ''Unordered lists'' are easy to do: -** Start every line with a star. -*** More stars indicate a deeper level. -*: Previous item continues. -** A new line -* in a list -marks the end of the list. -*Of course you can start again. - -==Numbered List== -# ''Numbered lists'' are: -## Very organized -## Easy to follow -#: Previous item continues -A new line marks the end of the list. -# New numbering starts with 1 - -==Text Indents== -: A colon (:) indents a line or paragraph. -A newline starts a new paragraph. -: We use 1 colon to indent once. -:: We use 2 colons to indent twice. -::: 3 colons to indent 3 times, and so on. - -==Table== -<nowiki> -{| border="1" cellspacing="0" cellpadding="5" align="left" -! Web site -! Link -! Contact Email -|- -| '''OpenERP''' - ''Belgium'' -| [http://openerp.com] -| [mailto:sales AT tiny.be] -|} -</nowiki> - -{| border="1" cellspacing="0" cellpadding="5" align="left" -! Web site -! Link -! Contact Email -|- -| '''OpenERP''' - ''Belgium'' -| [http://openerp.com] -| [mailto:sales AT tiny.be] -|} -<br/> -<br/> -<br/> -<br/> -==Headings== -=1st Level Heading= -==2nd Level Heading== -===3rd Level Heading=== - - - - - - diff --git a/document_page/document_page.py b/document_page/document_page.py index bcd10742700..8983ba0044f 100644 --- a/document_page/document_page.py +++ b/document_page/document_page.py @@ -18,126 +18,162 @@ # along with this program. If not, see . # ############################################################################## - -from openerp.osv import fields, osv -from openerp.tools.translate import _ import difflib +from openerp import models, fields, api, _ -class document_page(osv.osv): +class document_page(models.Model): _name = "document.page" _description = "Document Page" _order = 'name' - def _get_page_index(self, cr, uid, page, link=True): + name = fields.Char('Title', required=True) + + type = fields.Selection( + [('content', 'Content'), ('category', 'Category')], + 'Type', + help="Page type", + default="content" + ) + + parent_id = fields.Many2one( + 'document.page', + 'Category', + domain=[('type', '=', 'category')] + ) + + child_ids = fields.One2many( + 'document.page', + 'parent_id', + 'Children' + ) + + content = fields.Text( + "Content" + ) + + display_content = fields.Text( + string='Displayed Content', + compute='_get_display_content' + ) + + history_ids = fields.One2many( + 'document.page.history', + 'page_id', + 'History' + ) + + menu_id = fields.Many2one( + 'ir.ui.menu', + "Menu", + readonly=True + ) + + create_date = fields.Datetime( + "Created on", + select=True, + readonly=True + ) + + create_uid = fields.Many2one( + 'res.users', + 'Author', + select=True, + readonly=True + ) + + write_date = fields.Datetime( + "Modification Date", + select=True, + readonly=True) + + write_uid = fields.Many2one( + 'res.users', + "Last Contributor", + select=True, + readonly=True + ) + + def _get_page_index(self, page, link=True): index = [] for subpage in page.child_ids: - index += ["
  • " + self._get_page_index(cr, uid, subpage) + + index += ["
  • " + self._get_page_index(subpage) + "
  • "] r = '' if link: r = '%s' % (page.id, page.name) + if index: r += "
      " + "".join(index) + "
    " return r - def _get_display_content(self, cr, uid, ids, name, args, context=None): - res = {} - for page in self.browse(cr, uid, ids, context=context): + def _get_display_content(self): + for page in self: if page.type == "category": - content = self._get_page_index(cr, uid, page, link=False) + display_content = self._get_page_index(page, link=False) else: - content = page.content - res[page.id] = content - return res - - _columns = { - 'name': fields.char('Title', required=True), - 'type': fields.selection([('content', 'Content'), - ('category', 'Category')], - 'Type', help="Page type"), - 'parent_id': fields.many2one('document.page', 'Category', - domain=[('type', '=', 'category')]), - 'child_ids': fields.one2many('document.page', 'parent_id', 'Children'), - 'content': fields.text("Content"), - 'display_content': fields.function(_get_display_content, - string='Displayed Content', - type='text'), - 'history_ids': fields.one2many('document.page.history', 'page_id', - 'History'), - 'menu_id': fields.many2one('ir.ui.menu', "Menu", readonly=True), - - 'create_date': fields.datetime("Created on", select=True, - readonly=True), - 'create_uid': fields.many2one('res.users', 'Author', select=True, - readonly=True), - 'write_date': fields.datetime("Modification Date", select=True, - readonly=True), - 'write_uid': fields.many2one('res.users', "Last Contributor", - select=True, readonly=True), - } - _defaults = { - 'type': 'content', - } - - def onchange_parent_id(self, cr, uid, ids, parent_id, content, - context=None): - res = {} - if parent_id and not content: - parent = self.browse(cr, uid, parent_id, context=context) - if parent.type == "category": - res['value'] = { - 'content': parent.content, - } - return res - - def create_history(self, cr, uid, ids, vals, context=None): - for i in ids: - history = self.pool.get('document.page.history') - if vals.get('content'): - res = { - 'content': vals.get('content', ''), - 'page_id': i, - } - history.create(cr, uid, res) - - def create(self, cr, uid, vals, context=None): - page_id = super(document_page, self).create(cr, uid, vals, context) - self.create_history(cr, uid, [page_id], vals, context) - return page_id + display_content = page.content + page.display_content = display_content - def write(self, cr, uid, ids, vals, context=None): - result = super(document_page, self).write(cr, uid, ids, vals, context) - self.create_history(cr, uid, ids, vals, context) + @api.onchange("parent_id") + def do_set_content(self): + if self.parent_id and not self.content: + if self.parent_id.type == "category": + self.content = self.parent_id.content + + def create_history(self, page_id, content): + history = self.env['document.page.history'] + return history.create({ + "content": content, + "page_id": page_id + }) + + @api.multi + def write(self, vals): + result = super(document_page, self).write(vals) + content = vals.get('content') + if content: + for page in self: + self.create_history(page.id, content) return result + @api.model + @api.returns('self', lambda value: value.id) + def create(self, vals): + page_id = super(document_page, self).create(vals) + content = vals.get('content') + if content: + self.create_history(page_id.id, content) + return page_id -class document_page_history(osv.osv): + +class document_page_history(models.Model): _name = "document.page.history" _description = "Document Page History" _order = 'id DESC' _rec_name = "create_date" - _columns = { - 'page_id': fields.many2one('document.page', 'Page'), - 'summary': fields.char('Summary', size=256, select=True), - 'content': fields.text("Content"), - 'create_date': fields.datetime("Date"), - 'create_uid': fields.many2one('res.users', "Modified By"), - } - - def getDiff(self, cr, uid, v1, v2, context=None): - history_pool = self.pool.get('document.page.history') - text1 = history_pool.read(cr, uid, [v1], ['content'])[0]['content'] - text2 = history_pool.read(cr, uid, [v2], ['content'])[0]['content'] + page_id = fields.Many2one('document.page', 'Page') + summary = fields.Char('Summary', size=256, select=True) + content = fields.Text("Content") + create_date = fields.Datetime("Date") + create_uid = fields.Many2one('res.users', "Modified By") + + def getDiff(self, v1, v2): + text1 = self.browse(v1).content + text2 = self.browse(v2).content line1 = line2 = '' if text1: line1 = text1.splitlines(1) if text2: line2 = text2.splitlines(1) if (not line1 and not line2) or (line1 == line2): - raise osv.except_osv(_('Warning!'), - _('There are no changes in revisions.')) - diff = difflib.HtmlDiff() - return diff.make_table(line1, line2, "Revision-%s" % (v1), - "Revision-%s" % (v2), context=True) + return _('There are no changes in revisions.') + else: + diff = difflib.HtmlDiff() + return diff.make_table( + line1, line2, + "Revision-{}".format(v1), + "Revision-{}".format(v2), + context=True + ) diff --git a/document_page/document_page_demo.xml b/document_page/document_page_demo.xml index f779ea8313f..c94054e7d94 100644 --- a/document_page/document_page_demo.xml +++ b/document_page/document_page_demo.xml @@ -2,7 +2,8 @@ - + OpenERP Features diff --git a/document_page/document_page_view.xml b/document_page/document_page_view.xml index 2ffc905946c..e9990ef2d8f 100644 --- a/document_page/document_page_view.xml +++ b/document_page/document_page_view.xml @@ -1,8 +1,13 @@ - - + + + @@ -18,6 +23,7 @@ + document.page.list @@ -32,6 +38,7 @@ + document.page.form @@ -42,42 +49,66 @@

    - + - - - + + + -
    + +
    - +
    - +
    + document.page.search document.page - + - - - + + + + + Pages @@ -94,7 +125,13 @@

    - + + + Category document.page @@ -105,7 +142,11 @@ - + @@ -134,6 +175,7 @@ + Page history @@ -141,7 +183,14 @@ form tree,form - + + + - - - - - - User - - - - - - diff --git a/document_page/test/document_page_test00.yml b/document_page/test/document_page_test00.yml index 3c8dba80294..bc75c64e9ba 100644 --- a/document_page/test/document_page_test00.yml +++ b/document_page/test/document_page_test00.yml @@ -30,13 +30,16 @@ Wiki text can easily be edited ' + - I check the page history for the current page by clicking on "Page History".After that find difference between history. - - !python {model: wizard.document.page.history.show_diff}: | - hist_obj = model.pool.get('document.page.history') - ids = hist_obj.search(cr, uid, [('page_id', '=', ref("test_page0"))]) - model.get_diff(cr, uid, {'active_ids': ids[:] }) + !python {model: wizard.document.page.history.show_diff, id: False}: | + hist_obj = self.env['document.page.history'] + ids = hist_obj.search([('page_id', '=', ref("test_page0"))]) + self.with_context(active_ids=[i.id for i in ids]).get_diff() + + - I click the "create menu" link and i fill the form. - @@ -46,9 +49,7 @@ - I create a Menu by clicking on "create menu" - - !python {model: document.page.create.menu}: | - ids = [ref("test_create_menu0")] - context['active_id'] = ref('test_page0') - self.document_page_menu_create(cr, uid, ids, context) - + !python {model: document.page.create.menu, id: False}: | + menu = self.search([('id', '=', ref("test_create_menu0"))]) + menu.with_context(active_id=[ref('test_page0')]).document_page_menu_create() diff --git a/document_page/web/__init__.py b/document_page/web/__init__.py deleted file mode 100644 index 6fb28f7f2ad..00000000000 --- a/document_page/web/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -import widgets -import controllers - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/controllers/__init__.py b/document_page/web/controllers/__init__.py deleted file mode 100644 index e1edf0f0f96..00000000000 --- a/document_page/web/controllers/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -import wiki - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/controllers/wiki.py b/document_page/web/controllers/wiki.py deleted file mode 100644 index 2f147827f24..00000000000 --- a/document_page/web/controllers/wiki.py +++ /dev/null @@ -1,65 +0,0 @@ -############################################################################### -# -# Copyright (C) 2007-TODAY Tiny ERP Pvt Ltd. All Rights Reserved. -# -# $Id$ -# -# Developed by Tiny (http://openerp.com) and Axelor (http://axelor.com). -# -# The OpenERP web client is distributed under the "OpenERP Public License". -# It's based on Mozilla Public License Version (MPL) 1.1 with following -# restrictions: -# -# - All names, links and logos of Tiny, OpenERP and Axelor must be -# kept as in original distribution without any changes in all software -# screens, especially in start-up page and the software header, even if -# the application source code has been changed or updated or code has been -# added. -# -# - All distributions of the software must keep source code with OEPL. -# -# - All integrations to any other software must keep source code with OEPL. -# -# If you need commercial licence to remove this kind of restriction please -# contact us. -# -# You can see the MPL licence at: http://www.mozilla.org/MPL/MPL-1.1.html -# -############################################################################### -import base64 - -import cherrypy - -import openobject -from openobject.tools import expose - -from openerp.controllers import SecuredController - - -class WikiView(SecuredController): - _cp_path = "/wiki/wiki" - - def get_attachment(self, **kwargs): - attachments = openobject.rpc.RPCProxy('ir.attachment') - file_name = kwargs.get('file').replace("'", '').strip() - id = kwargs.get('id').strip() - - ids = attachments.search([('datas_fname', '=', file_name), - ('res_model', '=', 'wiki.wiki'), - ('res_id', '=', id)]) - - res = attachments.read(ids, ['datas'])[0].get('datas') - return res, file_name - - @expose(content_type='application/octet') - def getImage(self, *kw, **kws): - res, _ = self.get_attachment(**kws) - return base64.decodestring(res) - - @expose(content_type='application/octet') - def getfile(self, *kw, **kws): - res, file_name = self.get_attachment(**kws) - cherrypy.response.headers['Content-Disposition'] = 'filename="%s"' % (file_name,) - return base64.decodestring(res) - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/locales/bg.po b/document_page/web/locales/bg.po deleted file mode 100644 index d331ed5de7f..00000000000 --- a/document_page/web/locales/bg.po +++ /dev/null @@ -1,22 +0,0 @@ -# Bulgarian translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2010-08-02 17:52+0530\n" -"PO-Revision-Date: 2011-02-11 01:13+0000\n" -"Last-Translator: Dimitar Markov \n" -"Language-Team: Bulgarian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-02-12 06:06+0000\n" -"X-Generator: Launchpad (build 12351)\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "Съдържание" diff --git a/document_page/web/locales/ca.po b/document_page/web/locales/ca.po deleted file mode 100644 index a946dab86ec..00000000000 --- a/document_page/web/locales/ca.po +++ /dev/null @@ -1,22 +0,0 @@ -# Catalan translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2010-08-02 17:52+0530\n" -"PO-Revision-Date: 2011-03-12 20:33+0000\n" -"Last-Translator: mgaja (GrupoIsep.com) \n" -"Language-Team: Catalan \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-03-13 06:16+0000\n" -"X-Generator: Launchpad (build 12559)\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "Índex" diff --git a/document_page/web/locales/da.po b/document_page/web/locales/da.po deleted file mode 100644 index 35d12ed6632..00000000000 --- a/document_page/web/locales/da.po +++ /dev/null @@ -1,22 +0,0 @@ -# Danish translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2010-08-02 17:52+0530\n" -"PO-Revision-Date: 2011-04-29 12:05+0000\n" -"Last-Translator: Hans Henrik Gabelgaard \n" -"Language-Team: Danish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-04-30 06:08+0000\n" -"X-Generator: Launchpad (build 12758)\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "Indholdsfortegnelse" diff --git a/document_page/web/locales/de.po b/document_page/web/locales/de.po deleted file mode 100644 index 8718cd9713d..00000000000 --- a/document_page/web/locales/de.po +++ /dev/null @@ -1,22 +0,0 @@ -# German translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2010-08-02 17:52+0530\n" -"PO-Revision-Date: 2011-02-11 11:54+0000\n" -"Last-Translator: Ferdinand @ Camptocamp \n" -"Language-Team: German \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-02-12 06:06+0000\n" -"X-Generator: Launchpad (build 12351)\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "Inhaltsverzeichnis" diff --git a/document_page/web/locales/de_DE/LC_MESSAGES/javascript.po b/document_page/web/locales/de_DE/LC_MESSAGES/javascript.po deleted file mode 100644 index ea8fd6999df..00000000000 --- a/document_page/web/locales/de_DE/LC_MESSAGES/javascript.po +++ /dev/null @@ -1,20 +0,0 @@ -# German (Germany) translations for PROJECT. -# Copyright (C) 2009 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2009. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2009-11-18 17:21+0530\n" -"PO-Revision-Date: 2010-08-02 17:53+0530\n" -"Last-Translator: FULL NAME \n" -"Language-Team: de_DE \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel None\n" - diff --git a/document_page/web/locales/de_DE/LC_MESSAGES/messages.po b/document_page/web/locales/de_DE/LC_MESSAGES/messages.po deleted file mode 100644 index 79b06791b65..00000000000 --- a/document_page/web/locales/de_DE/LC_MESSAGES/messages.po +++ /dev/null @@ -1,24 +0,0 @@ -# German (Germany) translations for PROJECT. -# Copyright (C) 2009 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2009. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2009-11-18 17:21+0530\n" -"PO-Revision-Date: 2010-08-02 17:53+0530\n" -"Last-Translator: FULL NAME \n" -"Language-Team: de_DE \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel None\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "" - diff --git a/document_page/web/locales/es_CR.po b/document_page/web/locales/es_CR.po deleted file mode 100644 index d64a49bccbb..00000000000 --- a/document_page/web/locales/es_CR.po +++ /dev/null @@ -1,23 +0,0 @@ -# Translations template for PROJECT. -# Copyright (C) 2010 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2010-08-02 17:52+0530\n" -"PO-Revision-Date: 2012-02-08 03:00-0600\n" -"Last-Translator: Carlos Vásquez - CLEARCORP \n" -"Language-Team: LANGUAGE \n" -"Language: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel None\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "" - diff --git a/document_page/web/locales/es_ES/LC_MESSAGES/javascript.po b/document_page/web/locales/es_ES/LC_MESSAGES/javascript.po deleted file mode 100644 index 0c44218f06a..00000000000 --- a/document_page/web/locales/es_ES/LC_MESSAGES/javascript.po +++ /dev/null @@ -1,20 +0,0 @@ -# Spanish (Spain) translations for PROJECT. -# Copyright (C) 2009 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2009. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2009-11-18 17:21+0530\n" -"PO-Revision-Date: 2010-08-02 17:53+0530\n" -"Last-Translator: FULL NAME \n" -"Language-Team: es_ES \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel None\n" - diff --git a/document_page/web/locales/es_ES/LC_MESSAGES/messages.po b/document_page/web/locales/es_ES/LC_MESSAGES/messages.po deleted file mode 100644 index 72f8c72bbf0..00000000000 --- a/document_page/web/locales/es_ES/LC_MESSAGES/messages.po +++ /dev/null @@ -1,24 +0,0 @@ -# Spanish (Spain) translations for PROJECT. -# Copyright (C) 2009 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2009. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2009-11-18 17:21+0530\n" -"PO-Revision-Date: 2010-08-02 17:53+0530\n" -"Last-Translator: FULL NAME \n" -"Language-Team: es_ES \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel None\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "" - diff --git a/document_page/web/locales/es_PY.po b/document_page/web/locales/es_PY.po deleted file mode 100644 index c76f7a3362a..00000000000 --- a/document_page/web/locales/es_PY.po +++ /dev/null @@ -1,22 +0,0 @@ -# Spanish (Paraguay) translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2010-08-02 17:52+0530\n" -"PO-Revision-Date: 2011-03-21 16:31+0000\n" -"Last-Translator: fadel \n" -"Language-Team: Spanish (Paraguay) \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-03-22 06:23+0000\n" -"X-Generator: Launchpad (build 12559)\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "Tabla de Contenido" diff --git a/document_page/web/locales/fr.po b/document_page/web/locales/fr.po deleted file mode 100644 index 18a1611dac0..00000000000 --- a/document_page/web/locales/fr.po +++ /dev/null @@ -1,22 +0,0 @@ -# French translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2010-08-02 17:52+0530\n" -"PO-Revision-Date: 2011-02-11 20:16+0000\n" -"Last-Translator: lolivier \n" -"Language-Team: French \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-02-12 06:06+0000\n" -"X-Generator: Launchpad (build 12351)\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "Table des matières" diff --git a/document_page/web/locales/fr_FR/LC_MESSAGES/javascript.po b/document_page/web/locales/fr_FR/LC_MESSAGES/javascript.po deleted file mode 100644 index 31f9c5eda45..00000000000 --- a/document_page/web/locales/fr_FR/LC_MESSAGES/javascript.po +++ /dev/null @@ -1,20 +0,0 @@ -# French (France) translations for PROJECT. -# Copyright (C) 2009 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2009. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2009-11-18 17:21+0530\n" -"PO-Revision-Date: 2010-08-02 17:53+0530\n" -"Last-Translator: FULL NAME \n" -"Language-Team: fr_FR \n" -"Plural-Forms: nplurals=2; plural=(n > 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel None\n" - diff --git a/document_page/web/locales/fr_FR/LC_MESSAGES/messages.po b/document_page/web/locales/fr_FR/LC_MESSAGES/messages.po deleted file mode 100644 index 181738f734f..00000000000 --- a/document_page/web/locales/fr_FR/LC_MESSAGES/messages.po +++ /dev/null @@ -1,24 +0,0 @@ -# French (France) translations for PROJECT. -# Copyright (C) 2009 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2009. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2009-11-18 17:21+0530\n" -"PO-Revision-Date: 2010-08-02 17:53+0530\n" -"Last-Translator: FULL NAME \n" -"Language-Team: fr_FR \n" -"Plural-Forms: nplurals=2; plural=(n > 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel None\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "" - diff --git a/document_page/web/locales/gl.po b/document_page/web/locales/gl.po deleted file mode 100644 index 645a5607fb5..00000000000 --- a/document_page/web/locales/gl.po +++ /dev/null @@ -1,22 +0,0 @@ -# Galician translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2010-08-02 17:52+0530\n" -"PO-Revision-Date: 2011-03-02 23:19+0000\n" -"Last-Translator: Santi (Pexego) \n" -"Language-Team: Galician \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-03-03 06:01+0000\n" -"X-Generator: Launchpad (build 12351)\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "Índice" diff --git a/document_page/web/locales/javascript.pot b/document_page/web/locales/javascript.pot deleted file mode 100644 index 725ce7a4883..00000000000 --- a/document_page/web/locales/javascript.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translations template for PROJECT. -# Copyright (C) 2010 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2010. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2010-08-02 17:52+0530\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel None\n" - diff --git a/document_page/web/locales/messages.pot b/document_page/web/locales/messages.pot deleted file mode 100644 index 16c76567441..00000000000 --- a/document_page/web/locales/messages.pot +++ /dev/null @@ -1,23 +0,0 @@ -# Translations template for PROJECT. -# Copyright (C) 2010 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2010. -# -#, fuzzy -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2010-08-02 17:52+0530\n" -"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" -"Last-Translator: FULL NAME \n" -"Language-Team: LANGUAGE \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel None\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "" - diff --git a/document_page/web/locales/ru.po b/document_page/web/locales/ru.po deleted file mode 100644 index 6c609b49c41..00000000000 --- a/document_page/web/locales/ru.po +++ /dev/null @@ -1,22 +0,0 @@ -# Russian translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2010-08-02 17:52+0530\n" -"PO-Revision-Date: 2011-03-16 00:17+0000\n" -"Last-Translator: Stanislav Hanzhin \n" -"Language-Team: Russian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-03-17 06:12+0000\n" -"X-Generator: Launchpad (build 12559)\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "Содержание" diff --git a/document_page/web/locales/sk.po b/document_page/web/locales/sk.po deleted file mode 100644 index f101cf6928a..00000000000 --- a/document_page/web/locales/sk.po +++ /dev/null @@ -1,22 +0,0 @@ -# Slovak translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2010-08-02 17:52+0530\n" -"PO-Revision-Date: 2011-02-21 13:05+0000\n" -"Last-Translator: Radoslav Sloboda \n" -"Language-Team: Slovak \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-02-22 14:27+0000\n" -"X-Generator: Launchpad (build 12351)\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "Obsah" diff --git a/document_page/web/locales/tr.po b/document_page/web/locales/tr.po deleted file mode 100644 index baa56e0f9db..00000000000 --- a/document_page/web/locales/tr.po +++ /dev/null @@ -1,22 +0,0 @@ -# Turkish translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2010-08-02 17:52+0530\n" -"PO-Revision-Date: 2011-02-08 21:20+0000\n" -"Last-Translator: Ahmet Altınışık \n" -"Language-Team: Turkish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-02-09 06:02+0000\n" -"X-Generator: Launchpad (build 12177)\n" - -#: widgets/wikimarkup/__init__.py:1981 -msgid "Table of Contents" -msgstr "İçindekiler" diff --git a/document_page/web/static/css/wiki.css b/document_page/web/static/css/wiki.css deleted file mode 100644 index 51a649354d6..00000000000 --- a/document_page/web/static/css/wiki.css +++ /dev/null @@ -1,32 +0,0 @@ -.wikiwidget #toc { - border:1px solid #aaaaaa; - background-color:#f9f9f9; - padding:5px; -} - -h1, h2, h3, h4, h5, h6 { - color: black; - background: none; - font-weight: normal; - margin: 0; - padding-top: .5em; - padding-bottom: .17em; - border-bottom: 1px solid #aaa; -} -h1 { font-size: 188%; } -h2 { font-size: 150%; } -h3, h4, h5, h6 { - border-bottom: none; -} -h3 { font-size: 132%; } -h4 { font-size: 116%; } -h5 { font-size: 100%; } -h6 { font-size: 80%; } - -pre { - background-color:#F9F9F9; - border:1px dashed #2F6FAB; - color:black; - line-height:1.1em; - padding:1em; -} diff --git a/document_page/web/widgets/__init__.py b/document_page/web/widgets/__init__.py deleted file mode 100644 index 4b2c273d02a..00000000000 --- a/document_page/web/widgets/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -from wiki import WikiWidget - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/widgets/rss/__init__.py b/document_page/web/widgets/rss/__init__.py deleted file mode 100644 index ff95e8bd52a..00000000000 --- a/document_page/web/widgets/rss/__init__.py +++ /dev/null @@ -1,3 +0,0 @@ -import feedparser - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/widgets/rss/feedparser.py b/document_page/web/widgets/rss/feedparser.py deleted file mode 100755 index 35cbb975d3f..00000000000 --- a/document_page/web/widgets/rss/feedparser.py +++ /dev/null @@ -1,2860 +0,0 @@ -#!/usr/bin/env python -"""Universal feed parser - -Handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds - -Visit http://feedparser.org/ for the latest version -Visit http://feedparser.org/docs/ for the latest documentation - -Required: Python 2.1 or later -Recommended: Python 2.3 or later -Recommended: CJKCodecs and iconv_codec -""" - -__version__ = "4.1"# + "$Revision: 1.92 $"[11:15] + "-cvs" -__license__ = """Copyright (c) 2002-2006, Mark Pilgrim, All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE.""" -__author__ = "Mark Pilgrim " -__contributors__ = ["Jason Diamond ", - "John Beimler ", - "Fazal Majid ", - "Aaron Swartz ", - "Kevin Marks "] -_debug = 0 - -# HTTP "User-Agent" header to send to servers when downloading feeds. -# If you are embedding feedparser in a larger application, you should -# change this to your application name and URL. -USER_AGENT = "UniversalFeedParser/%s +http://feedparser.org/" % __version__ - -# HTTP "Accept" header to send to servers when downloading feeds. If you don't -# want to send an Accept header, set this to None. -ACCEPT_HEADER = "application/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1" - -# List of preferred XML parsers, by SAX driver name. These will be tried first, -# but if they're not installed, Python will keep searching through its own list -# of pre-installed parsers until it finds one that supports everything we need. -PREFERRED_XML_PARSERS = ["drv_libxml2"] - -# If you want feedparser to automatically run HTML markup through HTML Tidy, set -# this to 1. Requires mxTidy -# or utidylib . -TIDY_MARKUP = 0 - -# List of Python interfaces for HTML Tidy, in order of preference. Only useful -# if TIDY_MARKUP = 1 -PREFERRED_TIDY_INTERFACES = ["uTidy", "mxTidy"] - -# ---------- required modules (should come with any Python distribution) ---------- -import sgmllib, re, sys, copy, urlparse, time, rfc822, types, cgi, urllib, urllib2 -try: - from cStringIO import StringIO as _StringIO -except: - from StringIO import StringIO as _StringIO - -# ---------- optional modules (feedparser will work without these, but with reduced functionality) ---------- - -# gzip is included with most Python distributions, but may not be available if you compiled your own -try: - import gzip -except: - gzip = None -try: - import zlib -except: - zlib = None - -# If a real XML parser is available, feedparser will attempt to use it. feedparser has -# been tested with the built-in SAX parser, PyXML, and libxml2. On platforms where the -# Python distribution does not come with an XML parser (such as Mac OS X 10.2 and some -# versions of FreeBSD), feedparser will quietly fall back on regex-based parsing. -try: - import xml.sax - xml.sax.make_parser(PREFERRED_XML_PARSERS) # test for valid parsers - from xml.sax.saxutils import escape as _xmlescape - _XML_AVAILABLE = 1 -except: - _XML_AVAILABLE = 0 - def _xmlescape(data): - data = data.replace('&', '&') - data = data.replace('>', '>') - data = data.replace('<', '<') - return data - -# base64 support for Atom feeds that contain embedded binary data -try: - import base64, binascii -except: - base64 = binascii = None - -# cjkcodecs and iconv_codec provide support for more character encodings. -# Both are available from http://cjkpython.i18n.org/ -try: - import cjkcodecs.aliases -except: - pass -try: - import iconv_codec -except: - pass - -# chardet library auto-detects character encodings -# Download from http://chardet.feedparser.org/ -try: - import chardet - if _debug: - import chardet.constants - chardet.constants._debug = 1 -except: - chardet = None - -# ---------- don't touch these ---------- -class ThingsNobodyCaresAboutButMe(Exception): pass -class CharacterEncodingOverride(ThingsNobodyCaresAboutButMe): pass -class CharacterEncodingUnknown(ThingsNobodyCaresAboutButMe): pass -class NonXMLContentType(ThingsNobodyCaresAboutButMe): pass -class UndeclaredNamespace(Exception): pass - -sgmllib.tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*') -sgmllib.special = re.compile('' % (tag, ''.join([' %s="%s"' % t for t in attrs])), escape=0) - - # match namespaces - if tag.find(':') <> -1: - prefix, suffix = tag.split(':', 1) - else: - prefix, suffix = '', tag - prefix = self.namespacemap.get(prefix, prefix) - if prefix: - prefix = prefix + '_' - - # special hack for better tracking of empty textinput/image elements in illformed feeds - if (not prefix) and tag not in ('title', 'link', 'description', 'name'): - self.intextinput = 0 - if (not prefix) and tag not in ('title', 'link', 'description', 'url', 'href', 'width', 'height'): - self.inimage = 0 - - # call special handler (if defined) or default handler - methodname = '_start_' + prefix + suffix - try: - method = getattr(self, methodname) - return method(attrsD) - except AttributeError: - return self.push(prefix + suffix, 1) - - def unknown_endtag(self, tag): - if _debug: sys.stderr.write('end %s\n' % tag) - # match namespaces - if tag.find(':') <> -1: - prefix, suffix = tag.split(':', 1) - else: - prefix, suffix = '', tag - prefix = self.namespacemap.get(prefix, prefix) - if prefix: - prefix = prefix + '_' - - # call special handler (if defined) or default handler - methodname = '_end_' + prefix + suffix - try: - method = getattr(self, methodname) - method() - except AttributeError: - self.pop(prefix + suffix) - - # track inline content - if self.incontent and self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): - # element declared itself as escaped markup, but it isn't really - self.contentparams['type'] = 'application/xhtml+xml' - if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml': - tag = tag.split(':')[-1] - self.handle_data('' % tag, escape=0) - - # track xml:base and xml:lang going out of scope - if self.basestack: - self.basestack.pop() - if self.basestack and self.basestack[-1]: - self.baseuri = self.basestack[-1] - if self.langstack: - self.langstack.pop() - if self.langstack: # and (self.langstack[-1] is not None): - self.lang = self.langstack[-1] - - def handle_charref(self, ref): - # called for each character reference, e.g. for ' ', ref will be '160' - if not self.elementstack: return - ref = ref.lower() - if ref in ('34', '38', '39', '60', '62', 'x22', 'x26', 'x27', 'x3c', 'x3e'): - text = '&#%s;' % ref - else: - if ref[0] == 'x': - c = int(ref[1:], 16) - else: - c = int(ref) - text = unichr(c).encode('utf-8') - self.elementstack[-1][2].append(text) - - def handle_entityref(self, ref): - # called for each entity reference, e.g. for '©', ref will be 'copy' - if not self.elementstack: return - if _debug: sys.stderr.write('entering handle_entityref with %s\n' % ref) - if ref in ('lt', 'gt', 'quot', 'amp', 'apos'): - text = '&%s;' % ref - else: - # entity resolution graciously donated by Aaron Swartz - def name2cp(k): - import htmlentitydefs - if hasattr(htmlentitydefs, 'name2codepoint'): # requires Python 2.3 - return htmlentitydefs.name2codepoint[k] - k = htmlentitydefs.entitydefs[k] - if k.startswith('&#') and k.endswith(';'): - return int(k[2:-1]) # not in latin-1 - return ord(k) - try: name2cp(ref) - except KeyError: text = '&%s;' % ref - else: text = unichr(name2cp(ref)).encode('utf-8') - self.elementstack[-1][2].append(text) - - def handle_data(self, text, escape=1): - # called for each block of plain text, i.e. outside of any tag and - # not containing any character or entity references - if not self.elementstack: return - if escape and self.contentparams.get('type') == 'application/xhtml+xml': - text = _xmlescape(text) - self.elementstack[-1][2].append(text) - - def handle_comment(self, text): - # called for each comment, e.g. - pass - - def handle_pi(self, text): - # called for each processing instruction, e.g. - pass - - def handle_decl(self, text): - pass - - def parse_declaration(self, i): - # override internal declaration handler to handle CDATA blocks - if _debug: sys.stderr.write('entering parse_declaration\n') - if self.rawdata[i:i+9] == '', i) - if k == -1: k = len(self.rawdata) - self.handle_data(_xmlescape(self.rawdata[i+9:k]), 0) - return k+3 - else: - k = self.rawdata.find('>', i) - return k+1 - - def mapContentType(self, contentType): - contentType = contentType.lower() - if contentType == 'text': - contentType = 'text/plain' - elif contentType == 'html': - contentType = 'text/html' - elif contentType == 'xhtml': - contentType = 'application/xhtml+xml' - return contentType - - def trackNamespace(self, prefix, uri): - loweruri = uri.lower() - if (prefix, loweruri) == (None, 'http://my.netscape.com/rdf/simple/0.9/') and not self.version: - self.version = 'rss090' - if loweruri == 'http://purl.org/rss/1.0/' and not self.version: - self.version = 'rss10' - if loweruri == 'http://www.w3.org/2005/atom' and not self.version: - self.version = 'atom10' - if loweruri.find('backend.userland.com/rss') <> -1: - # match any backend.userland.com namespace - uri = 'http://backend.userland.com/rss' - loweruri = uri - if self._matchnamespaces.has_key(loweruri): - self.namespacemap[prefix] = self._matchnamespaces[loweruri] - self.namespacesInUse[self._matchnamespaces[loweruri]] = uri - else: - self.namespacesInUse[prefix or ''] = uri - - def resolveURI(self, uri): - return _urljoin(self.baseuri or '', uri) - - def decodeEntities(self, element, data): - return data - - def push(self, element, expectingText): - self.elementstack.append([element, expectingText, []]) - - def pop(self, element, stripWhitespace=1): - if not self.elementstack: return - if self.elementstack[-1][0] != element: return - - element, expectingText, pieces = self.elementstack.pop() - output = ''.join(pieces) - if stripWhitespace: - output = output.strip() - if not expectingText: return output - - # decode base64 content - if base64 and self.contentparams.get('base64', 0): - try: - output = base64.decodestring(output) - except binascii.Error: - pass - except binascii.Incomplete: - pass - - # resolve relative URIs - if (element in self.can_be_relative_uri) and output: - output = self.resolveURI(output) - - # decode entities within embedded markup - if not self.contentparams.get('base64', 0): - output = self.decodeEntities(element, output) - - # remove temporary cruft from contentparams - try: - del self.contentparams['mode'] - except KeyError: - pass - try: - del self.contentparams['base64'] - except KeyError: - pass - - # resolve relative URIs within embedded markup - if self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types: - if element in self.can_contain_relative_uris: - output = _resolveRelativeURIs(output, self.baseuri, self.encoding) - - # sanitize embedded markup - if self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types: - if element in self.can_contain_dangerous_markup: - output = _sanitizeHTML(output, self.encoding) - - if self.encoding and type(output) != type(u''): - try: - output = unicode(output, self.encoding) - except: - pass - - # categories/tags/keywords/whatever are handled in _end_category - if element == 'category': - return output - - # store output in appropriate place(s) - if self.inentry and not self.insource: - if element == 'content': - self.entries[-1].setdefault(element, []) - contentparams = copy.deepcopy(self.contentparams) - contentparams['value'] = output - self.entries[-1][element].append(contentparams) - elif element == 'link': - self.entries[-1][element] = output - if output: - self.entries[-1]['links'][-1]['href'] = output - else: - if element == 'description': - element = 'summary' - self.entries[-1][element] = output - if self.incontent: - contentparams = copy.deepcopy(self.contentparams) - contentparams['value'] = output - self.entries[-1][element + '_detail'] = contentparams - elif (self.infeed or self.insource) and (not self.intextinput) and (not self.inimage): - context = self._getContext() - if element == 'description': - element = 'subtitle' - context[element] = output - if element == 'link': - context['links'][-1]['href'] = output - elif self.incontent: - contentparams = copy.deepcopy(self.contentparams) - contentparams['value'] = output - context[element + '_detail'] = contentparams - return output - - def pushContent(self, tag, attrsD, defaultContentType, expectingText): - self.incontent += 1 - self.contentparams = FeedParserDict({ - 'type': self.mapContentType(attrsD.get('type', defaultContentType)), - 'language': self.lang, - 'base': self.baseuri}) - self.contentparams['base64'] = self._isBase64(attrsD, self.contentparams) - self.push(tag, expectingText) - - def popContent(self, tag): - value = self.pop(tag) - self.incontent -= 1 - self.contentparams.clear() - return value - - def _mapToStandardPrefix(self, name): - colonpos = name.find(':') - if colonpos <> -1: - prefix = name[:colonpos] - suffix = name[colonpos+1:] - prefix = self.namespacemap.get(prefix, prefix) - name = prefix + ':' + suffix - return name - - def _getAttribute(self, attrsD, name): - return attrsD.get(self._mapToStandardPrefix(name)) - - def _isBase64(self, attrsD, contentparams): - if attrsD.get('mode', '') == 'base64': - return 1 - if self.contentparams['type'].startswith('text/'): - return 0 - if self.contentparams['type'].endswith('+xml'): - return 0 - if self.contentparams['type'].endswith('/xml'): - return 0 - return 1 - - def _itsAnHrefDamnIt(self, attrsD): - href = attrsD.get('url', attrsD.get('uri', attrsD.get('href', None))) - if href: - try: - del attrsD['url'] - except KeyError: - pass - try: - del attrsD['uri'] - except KeyError: - pass - attrsD['href'] = href - return attrsD - - def _save(self, key, value): - context = self._getContext() - context.setdefault(key, value) - - def _start_rss(self, attrsD): - versionmap = {'0.91': 'rss091u', - '0.92': 'rss092', - '0.93': 'rss093', - '0.94': 'rss094'} - if not self.version: - attr_version = attrsD.get('version', '') - version = versionmap.get(attr_version) - if version: - self.version = version - elif attr_version.startswith('2.'): - self.version = 'rss20' - else: - self.version = 'rss' - - def _start_dlhottitles(self, attrsD): - self.version = 'hotrss' - - def _start_channel(self, attrsD): - self.infeed = 1 - self._cdf_common(attrsD) - _start_feedinfo = _start_channel - - def _cdf_common(self, attrsD): - if attrsD.has_key('lastmod'): - self._start_modified({}) - self.elementstack[-1][-1] = attrsD['lastmod'] - self._end_modified() - if attrsD.has_key('href'): - self._start_link({}) - self.elementstack[-1][-1] = attrsD['href'] - self._end_link() - - def _start_feed(self, attrsD): - self.infeed = 1 - versionmap = {'0.1': 'atom01', - '0.2': 'atom02', - '0.3': 'atom03'} - if not self.version: - attr_version = attrsD.get('version') - version = versionmap.get(attr_version) - if version: - self.version = version - else: - self.version = 'atom' - - def _end_channel(self): - self.infeed = 0 - _end_feed = _end_channel - - def _start_image(self, attrsD): - self.inimage = 1 - self.push('image', 0) - context = self._getContext() - context.setdefault('image', FeedParserDict()) - - def _end_image(self): - self.pop('image') - self.inimage = 0 - - def _start_textinput(self, attrsD): - self.intextinput = 1 - self.push('textinput', 0) - context = self._getContext() - context.setdefault('textinput', FeedParserDict()) - _start_textInput = _start_textinput - - def _end_textinput(self): - self.pop('textinput') - self.intextinput = 0 - _end_textInput = _end_textinput - - def _start_author(self, attrsD): - self.inauthor = 1 - self.push('author', 1) - _start_managingeditor = _start_author - _start_dc_author = _start_author - _start_dc_creator = _start_author - _start_itunes_author = _start_author - - def _end_author(self): - self.pop('author') - self.inauthor = 0 - self._sync_author_detail() - _end_managingeditor = _end_author - _end_dc_author = _end_author - _end_dc_creator = _end_author - _end_itunes_author = _end_author - - def _start_itunes_owner(self, attrsD): - self.inpublisher = 1 - self.push('publisher', 0) - - def _end_itunes_owner(self): - self.pop('publisher') - self.inpublisher = 0 - self._sync_author_detail('publisher') - - def _start_contributor(self, attrsD): - self.incontributor = 1 - context = self._getContext() - context.setdefault('contributors', []) - context['contributors'].append(FeedParserDict()) - self.push('contributor', 0) - - def _end_contributor(self): - self.pop('contributor') - self.incontributor = 0 - - def _start_dc_contributor(self, attrsD): - self.incontributor = 1 - context = self._getContext() - context.setdefault('contributors', []) - context['contributors'].append(FeedParserDict()) - self.push('name', 0) - - def _end_dc_contributor(self): - self._end_name() - self.incontributor = 0 - - def _start_name(self, attrsD): - self.push('name', 0) - _start_itunes_name = _start_name - - def _end_name(self): - value = self.pop('name') - if self.inpublisher: - self._save_author('name', value, 'publisher') - elif self.inauthor: - self._save_author('name', value) - elif self.incontributor: - self._save_contributor('name', value) - elif self.intextinput: - context = self._getContext() - context['textinput']['name'] = value - _end_itunes_name = _end_name - - def _start_width(self, attrsD): - self.push('width', 0) - - def _end_width(self): - value = self.pop('width') - try: - value = int(value) - except: - value = 0 - if self.inimage: - context = self._getContext() - context['image']['width'] = value - - def _start_height(self, attrsD): - self.push('height', 0) - - def _end_height(self): - value = self.pop('height') - try: - value = int(value) - except: - value = 0 - if self.inimage: - context = self._getContext() - context['image']['height'] = value - - def _start_url(self, attrsD): - self.push('href', 1) - _start_homepage = _start_url - _start_uri = _start_url - - def _end_url(self): - value = self.pop('href') - if self.inauthor: - self._save_author('href', value) - elif self.incontributor: - self._save_contributor('href', value) - elif self.inimage: - context = self._getContext() - context['image']['href'] = value - elif self.intextinput: - context = self._getContext() - context['textinput']['link'] = value - _end_homepage = _end_url - _end_uri = _end_url - - def _start_email(self, attrsD): - self.push('email', 0) - _start_itunes_email = _start_email - - def _end_email(self): - value = self.pop('email') - if self.inpublisher: - self._save_author('email', value, 'publisher') - elif self.inauthor: - self._save_author('email', value) - elif self.incontributor: - self._save_contributor('email', value) - _end_itunes_email = _end_email - - def _getContext(self): - if self.insource: - context = self.sourcedata - elif self.inentry: - context = self.entries[-1] - else: - context = self.feeddata - return context - - def _save_author(self, key, value, prefix='author'): - context = self._getContext() - context.setdefault(prefix + '_detail', FeedParserDict()) - context[prefix + '_detail'][key] = value - self._sync_author_detail() - - def _save_contributor(self, key, value): - context = self._getContext() - context.setdefault('contributors', [FeedParserDict()]) - context['contributors'][-1][key] = value - - def _sync_author_detail(self, key='author'): - context = self._getContext() - detail = context.get('%s_detail' % key) - if detail: - name = detail.get('name') - email = detail.get('email') - if name and email: - context[key] = '%s (%s)' % (name, email) - elif name: - context[key] = name - elif email: - context[key] = email - else: - author = context.get(key) - if not author: return - emailmatch = re.search(r'''(([a-zA-Z0-9\_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))''', author) - if not emailmatch: return - email = emailmatch.group(0) - # probably a better way to do the following, but it passes all the tests - author = author.replace(email, '') - author = author.replace('()', '') - author = author.strip() - if author and (author[0] == '('): - author = author[1:] - if author and (author[-1] == ')'): - author = author[:-1] - author = author.strip() - context.setdefault('%s_detail' % key, FeedParserDict()) - context['%s_detail' % key]['name'] = author - context['%s_detail' % key]['email'] = email - - def _start_subtitle(self, attrsD): - self.pushContent('subtitle', attrsD, 'text/plain', 1) - _start_tagline = _start_subtitle - _start_itunes_subtitle = _start_subtitle - - def _end_subtitle(self): - self.popContent('subtitle') - _end_tagline = _end_subtitle - _end_itunes_subtitle = _end_subtitle - - def _start_rights(self, attrsD): - self.pushContent('rights', attrsD, 'text/plain', 1) - _start_dc_rights = _start_rights - _start_copyright = _start_rights - - def _end_rights(self): - self.popContent('rights') - _end_dc_rights = _end_rights - _end_copyright = _end_rights - - def _start_item(self, attrsD): - self.entries.append(FeedParserDict()) - self.push('item', 0) - self.inentry = 1 - self.guidislink = 0 - id = self._getAttribute(attrsD, 'rdf:about') - if id: - context = self._getContext() - context['id'] = id - self._cdf_common(attrsD) - _start_entry = _start_item - _start_product = _start_item - - def _end_item(self): - self.pop('item') - self.inentry = 0 - _end_entry = _end_item - - def _start_dc_language(self, attrsD): - self.push('language', 1) - _start_language = _start_dc_language - - def _end_dc_language(self): - self.lang = self.pop('language') - _end_language = _end_dc_language - - def _start_dc_publisher(self, attrsD): - self.push('publisher', 1) - _start_webmaster = _start_dc_publisher - - def _end_dc_publisher(self): - self.pop('publisher') - self._sync_author_detail('publisher') - _end_webmaster = _end_dc_publisher - - def _start_published(self, attrsD): - self.push('published', 1) - _start_dcterms_issued = _start_published - _start_issued = _start_published - - def _end_published(self): - value = self.pop('published') - self._save('published_parsed', _parse_date(value)) - _end_dcterms_issued = _end_published - _end_issued = _end_published - - def _start_updated(self, attrsD): - self.push('updated', 1) - _start_modified = _start_updated - _start_dcterms_modified = _start_updated - _start_pubdate = _start_updated - _start_dc_date = _start_updated - - def _end_updated(self): - value = self.pop('updated') - parsed_value = _parse_date(value) - self._save('updated_parsed', parsed_value) - _end_modified = _end_updated - _end_dcterms_modified = _end_updated - _end_pubdate = _end_updated - _end_dc_date = _end_updated - - def _start_created(self, attrsD): - self.push('created', 1) - _start_dcterms_created = _start_created - - def _end_created(self): - value = self.pop('created') - self._save('created_parsed', _parse_date(value)) - _end_dcterms_created = _end_created - - def _start_expirationdate(self, attrsD): - self.push('expired', 1) - - def _end_expirationdate(self): - self._save('expired_parsed', _parse_date(self.pop('expired'))) - - def _start_cc_license(self, attrsD): - self.push('license', 1) - value = self._getAttribute(attrsD, 'rdf:resource') - if value: - self.elementstack[-1][2].append(value) - self.pop('license') - - def _start_creativecommons_license(self, attrsD): - self.push('license', 1) - - def _end_creativecommons_license(self): - self.pop('license') - - def _addTag(self, term, scheme, label): - context = self._getContext() - tags = context.setdefault('tags', []) - if (not term) and (not scheme) and (not label): return - value = FeedParserDict({'term': term, 'scheme': scheme, 'label': label}) - if value not in tags: - tags.append(FeedParserDict({'term': term, 'scheme': scheme, 'label': label})) - - def _start_category(self, attrsD): - if _debug: sys.stderr.write('entering _start_category with %s\n' % repr(attrsD)) - term = attrsD.get('term') - scheme = attrsD.get('scheme', attrsD.get('domain')) - label = attrsD.get('label') - self._addTag(term, scheme, label) - self.push('category', 1) - _start_dc_subject = _start_category - _start_keywords = _start_category - - def _end_itunes_keywords(self): - for term in self.pop('itunes_keywords').split(): - self._addTag(term, 'http://www.itunes.com/', None) - - def _start_itunes_category(self, attrsD): - self._addTag(attrsD.get('text'), 'http://www.itunes.com/', None) - self.push('category', 1) - - def _end_category(self): - value = self.pop('category') - if not value: return - context = self._getContext() - tags = context['tags'] - if value and len(tags) and not tags[-1]['term']: - tags[-1]['term'] = value - else: - self._addTag(value, None, None) - _end_dc_subject = _end_category - _end_keywords = _end_category - _end_itunes_category = _end_category - - def _start_cloud(self, attrsD): - self._getContext()['cloud'] = FeedParserDict(attrsD) - - def _start_link(self, attrsD): - attrsD.setdefault('rel', 'alternate') - attrsD.setdefault('type', 'text/html') - attrsD = self._itsAnHrefDamnIt(attrsD) - if attrsD.has_key('href'): - attrsD['href'] = self.resolveURI(attrsD['href']) - expectingText = self.infeed or self.inentry or self.insource - context = self._getContext() - context.setdefault('links', []) - context['links'].append(FeedParserDict(attrsD)) - if attrsD['rel'] == 'enclosure': - self._start_enclosure(attrsD) - if attrsD.has_key('href'): - expectingText = 0 - if (attrsD.get('rel') == 'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types): - context['link'] = attrsD['href'] - else: - self.push('link', expectingText) - _start_producturl = _start_link - - def _end_link(self): - value = self.pop('link') - context = self._getContext() - if self.intextinput: - context['textinput']['link'] = value - if self.inimage: - context['image']['link'] = value - _end_producturl = _end_link - - def _start_guid(self, attrsD): - self.guidislink = (attrsD.get('ispermalink', 'true') == 'true') - self.push('id', 1) - - def _end_guid(self): - value = self.pop('id') - self._save('guidislink', self.guidislink and not self._getContext().has_key('link')) - if self.guidislink: - # guid acts as link, but only if 'ispermalink' is not present or is 'true', - # and only if the item doesn't already have a link element - self._save('link', value) - - def _start_title(self, attrsD): - self.pushContent('title', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) - _start_dc_title = _start_title - _start_media_title = _start_title - - def _end_title(self): - value = self.popContent('title') - context = self._getContext() - if self.intextinput: - context['textinput']['title'] = value - elif self.inimage: - context['image']['title'] = value - _end_dc_title = _end_title - _end_media_title = _end_title - - def _start_description(self, attrsD): - context = self._getContext() - if context.has_key('summary'): - self._summaryKey = 'content' - self._start_content(attrsD) - else: - self.pushContent('description', attrsD, 'text/html', self.infeed or self.inentry or self.insource) - - def _start_abstract(self, attrsD): - self.pushContent('description', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) - - def _end_description(self): - if self._summaryKey == 'content': - self._end_content() - else: - value = self.popContent('description') - context = self._getContext() - if self.intextinput: - context['textinput']['description'] = value - elif self.inimage: - context['image']['description'] = value - self._summaryKey = None - _end_abstract = _end_description - - def _start_info(self, attrsD): - self.pushContent('info', attrsD, 'text/plain', 1) - _start_feedburner_browserfriendly = _start_info - - def _end_info(self): - self.popContent('info') - _end_feedburner_browserfriendly = _end_info - - def _start_generator(self, attrsD): - if attrsD: - attrsD = self._itsAnHrefDamnIt(attrsD) - if attrsD.has_key('href'): - attrsD['href'] = self.resolveURI(attrsD['href']) - self._getContext()['generator_detail'] = FeedParserDict(attrsD) - self.push('generator', 1) - - def _end_generator(self): - value = self.pop('generator') - context = self._getContext() - if context.has_key('generator_detail'): - context['generator_detail']['name'] = value - - def _start_admin_generatoragent(self, attrsD): - self.push('generator', 1) - value = self._getAttribute(attrsD, 'rdf:resource') - if value: - self.elementstack[-1][2].append(value) - self.pop('generator') - self._getContext()['generator_detail'] = FeedParserDict({'href': value}) - - def _start_admin_errorreportsto(self, attrsD): - self.push('errorreportsto', 1) - value = self._getAttribute(attrsD, 'rdf:resource') - if value: - self.elementstack[-1][2].append(value) - self.pop('errorreportsto') - - def _start_summary(self, attrsD): - context = self._getContext() - if context.has_key('summary'): - self._summaryKey = 'content' - self._start_content(attrsD) - else: - self._summaryKey = 'summary' - self.pushContent(self._summaryKey, attrsD, 'text/plain', 1) - _start_itunes_summary = _start_summary - - def _end_summary(self): - if self._summaryKey == 'content': - self._end_content() - else: - self.popContent(self._summaryKey or 'summary') - self._summaryKey = None - _end_itunes_summary = _end_summary - - def _start_enclosure(self, attrsD): - attrsD = self._itsAnHrefDamnIt(attrsD) - self._getContext().setdefault('enclosures', []).append(FeedParserDict(attrsD)) - href = attrsD.get('href') - if href: - context = self._getContext() - if not context.get('id'): - context['id'] = href - - def _start_source(self, attrsD): - self.insource = 1 - - def _end_source(self): - self.insource = 0 - self._getContext()['source'] = copy.deepcopy(self.sourcedata) - self.sourcedata.clear() - - def _start_content(self, attrsD): - self.pushContent('content', attrsD, 'text/plain', 1) - src = attrsD.get('src') - if src: - self.contentparams['src'] = src - self.push('content', 1) - - def _start_prodlink(self, attrsD): - self.pushContent('content', attrsD, 'text/html', 1) - - def _start_body(self, attrsD): - self.pushContent('content', attrsD, 'application/xhtml+xml', 1) - _start_xhtml_body = _start_body - - def _start_content_encoded(self, attrsD): - self.pushContent('content', attrsD, 'text/html', 1) - _start_fullitem = _start_content_encoded - - def _end_content(self): - copyToDescription = self.mapContentType(self.contentparams.get('type')) in (['text/plain'] + self.html_types) - value = self.popContent('content') - if copyToDescription: - self._save('description', value) - _end_body = _end_content - _end_xhtml_body = _end_content - _end_content_encoded = _end_content - _end_fullitem = _end_content - _end_prodlink = _end_content - - def _start_itunes_image(self, attrsD): - self.push('itunes_image', 0) - self._getContext()['image'] = FeedParserDict({'href': attrsD.get('href')}) - _start_itunes_link = _start_itunes_image - - def _end_itunes_block(self): - value = self.pop('itunes_block', 0) - self._getContext()['itunes_block'] = (value == 'yes') and 1 or 0 - - def _end_itunes_explicit(self): - value = self.pop('itunes_explicit', 0) - self._getContext()['itunes_explicit'] = (value == 'yes') and 1 or 0 - -if _XML_AVAILABLE: - class _StrictFeedParser(_FeedParserMixin, xml.sax.handler.ContentHandler): - def __init__(self, baseuri, baselang, encoding): - if _debug: sys.stderr.write('trying StrictFeedParser\n') - xml.sax.handler.ContentHandler.__init__(self) - _FeedParserMixin.__init__(self, baseuri, baselang, encoding) - self.bozo = 0 - self.exc = None - - def startPrefixMapping(self, prefix, uri): - self.trackNamespace(prefix, uri) - - def startElementNS(self, name, qname, attrs): - namespace, localname = name - lowernamespace = str(namespace or '').lower() - if lowernamespace.find('backend.userland.com/rss') <> -1: - # match any backend.userland.com namespace - namespace = 'http://backend.userland.com/rss' - lowernamespace = namespace - if qname and qname.find(':') > 0: - givenprefix = qname.split(':')[0] - else: - givenprefix = None - prefix = self._matchnamespaces.get(lowernamespace, givenprefix) - if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and not self.namespacesInUse.has_key(givenprefix): - raise UndeclaredNamespace, "'%s' is not associated with a namespace" % givenprefix - if prefix: - localname = prefix + ':' + localname - localname = str(localname).lower() - if _debug: sys.stderr.write('startElementNS: qname = %s, namespace = %s, givenprefix = %s, prefix = %s, attrs = %s, localname = %s\n' % (qname, namespace, givenprefix, prefix, attrs.items(), localname)) - - # qname implementation is horribly broken in Python 2.1 (it - # doesn't report any), and slightly broken in Python 2.2 (it - # doesn't report the xml: namespace). So we match up namespaces - # with a known list first, and then possibly override them with - # the qnames the SAX parser gives us (if indeed it gives us any - # at all). Thanks to MatejC for helping me test this and - # tirelessly telling me that it didn't work yet. - attrsD = {} - for (namespace, attrlocalname), attrvalue in attrs._attrs.items(): - lowernamespace = (namespace or '').lower() - prefix = self._matchnamespaces.get(lowernamespace, '') - if prefix: - attrlocalname = prefix + ':' + attrlocalname - attrsD[str(attrlocalname).lower()] = attrvalue - for qname in attrs.getQNames(): - attrsD[str(qname).lower()] = attrs.getValueByQName(qname) - self.unknown_starttag(localname, attrsD.items()) - - def characters(self, text): - self.handle_data(text) - - def endElementNS(self, name, qname): - namespace, localname = name - lowernamespace = str(namespace or '').lower() - if qname and qname.find(':') > 0: - givenprefix = qname.split(':')[0] - else: - givenprefix = '' - prefix = self._matchnamespaces.get(lowernamespace, givenprefix) - if prefix: - localname = prefix + ':' + localname - localname = str(localname).lower() - self.unknown_endtag(localname) - - def error(self, exc): - self.bozo = 1 - self.exc = exc - - def fatalError(self, exc): - self.error(exc) - raise exc - -class _BaseHTMLProcessor(sgmllib.SGMLParser): - elements_no_end_tag = ['area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', - 'img', 'input', 'isindex', 'link', 'meta', 'param'] - - def __init__(self, encoding): - self.encoding = encoding - if _debug: sys.stderr.write('entering BaseHTMLProcessor, encoding=%s\n' % self.encoding) - sgmllib.SGMLParser.__init__(self) - - def reset(self): - self.pieces = [] - sgmllib.SGMLParser.reset(self) - - def _shorttag_replace(self, match): - tag = match.group(1) - if tag in self.elements_no_end_tag: - return '<' + tag + ' />' - else: - return '<' + tag + '>' - - def feed(self, data): - data = re.compile(r'', self._shorttag_replace, data) # bug [ 1399464 ] Bad regexp for _shorttag_replace - data = re.sub(r'<([^<\s]+?)\s*/>', self._shorttag_replace, data) - data = data.replace(''', "'") - data = data.replace('"', '"') - if self.encoding and type(data) == type(u''): - data = data.encode(self.encoding) - sgmllib.SGMLParser.feed(self, data) - - def normalize_attrs(self, attrs): - # utility method to be called by descendants - attrs = [(k.lower(), v) for k, v in attrs] - attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs] - return attrs - - def unknown_starttag(self, tag, attrs): - # called for each start tag - # attrs is a list of (attr, value) tuples - # e.g. for
    , tag='pre', attrs=[('class', 'screen')]
    -        if _debug: sys.stderr.write('_BaseHTMLProcessor, unknown_starttag, tag=%s\n' % tag)
    -        uattrs = []
    -        # thanks to Kevin Marks for this breathtaking hack to deal with (valid) high-bit attribute values in UTF-8 feeds
    -        for key, value in attrs:
    -            if type(value) != type(u''):
    -                value = unicode(value, self.encoding)
    -            uattrs.append((unicode(key, self.encoding), value))
    -        strattrs = u''.join([u' %s="%s"' % (key, value) for key, value in uattrs]).encode(self.encoding)
    -        if tag in self.elements_no_end_tag:
    -            self.pieces.append('<%(tag)s%(strattrs)s />' % locals())
    -        else:
    -            self.pieces.append('<%(tag)s%(strattrs)s>' % locals())
    -
    -    def unknown_endtag(self, tag):
    -        # called for each end tag, e.g. for 
    , tag will be 'pre' - # Reconstruct the original end tag. - if tag not in self.elements_no_end_tag: - self.pieces.append("" % locals()) - - def handle_charref(self, ref): - # called for each character reference, e.g. for ' ', ref will be '160' - # Reconstruct the original character reference. - self.pieces.append('&#%(ref)s;' % locals()) - - def handle_entityref(self, ref): - # called for each entity reference, e.g. for '©', ref will be 'copy' - # Reconstruct the original entity reference. - self.pieces.append('&%(ref)s;' % locals()) - - def handle_data(self, text): - # called for each block of plain text, i.e. outside of any tag and - # not containing any character or entity references - # Store the original text verbatim. - if _debug: sys.stderr.write('_BaseHTMLProcessor, handle_text, text=%s\n' % text) - self.pieces.append(text) - - def handle_comment(self, text): - # called for each HTML comment, e.g. - # Reconstruct the original comment. - self.pieces.append('' % locals()) - - def handle_pi(self, text): - # called for each processing instruction, e.g. - # Reconstruct original processing instruction. - self.pieces.append('' % locals()) - - def handle_decl(self, text): - # called for the DOCTYPE, if present, e.g. - # - # Reconstruct original DOCTYPE - self.pieces.append('' % locals()) - - _new_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9:]*\s*').match - def _scan_name(self, i, declstartpos): - rawdata = self.rawdata - n = len(rawdata) - if i == n: - return None, -1 - m = self._new_declname_match(rawdata, i) - if m: - s = m.group() - name = s.strip() - if (i + len(s)) == n: - return None, -1 # end of buffer - return name.lower(), m.end() - else: - self.handle_data(rawdata) -# self.updatepos(declstartpos, i) - return None, -1 - - def output(self): - '''Return processed HTML as a single string''' - return ''.join([str(p) for p in self.pieces]) - -class _LooseFeedParser(_FeedParserMixin, _BaseHTMLProcessor): - def __init__(self, baseuri, baselang, encoding): - sgmllib.SGMLParser.__init__(self) - _FeedParserMixin.__init__(self, baseuri, baselang, encoding) - - def decodeEntities(self, element, data): - data = data.replace('<', '<') - data = data.replace('<', '<') - data = data.replace('>', '>') - data = data.replace('>', '>') - data = data.replace('&', '&') - data = data.replace('&', '&') - data = data.replace('"', '"') - data = data.replace('"', '"') - data = data.replace(''', ''') - data = data.replace(''', ''') - if self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): - data = data.replace('<', '<') - data = data.replace('>', '>') - data = data.replace('&', '&') - data = data.replace('"', '"') - data = data.replace(''', "'") - return data - -class _RelativeURIResolver(_BaseHTMLProcessor): - relative_uris = [('a', 'href'), - ('applet', 'codebase'), - ('area', 'href'), - ('blockquote', 'cite'), - ('body', 'background'), - ('del', 'cite'), - ('form', 'action'), - ('frame', 'longdesc'), - ('frame', 'src'), - ('iframe', 'longdesc'), - ('iframe', 'src'), - ('head', 'profile'), - ('img', 'longdesc'), - ('img', 'src'), - ('img', 'usemap'), - ('input', 'src'), - ('input', 'usemap'), - ('ins', 'cite'), - ('link', 'href'), - ('object', 'classid'), - ('object', 'codebase'), - ('object', 'data'), - ('object', 'usemap'), - ('q', 'cite'), - ('script', 'src')] - - def __init__(self, baseuri, encoding): - _BaseHTMLProcessor.__init__(self, encoding) - self.baseuri = baseuri - - def resolveURI(self, uri): - return _urljoin(self.baseuri, uri) - - def unknown_starttag(self, tag, attrs): - attrs = self.normalize_attrs(attrs) - attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs] - _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) - -def _resolveRelativeURIs(htmlSource, baseURI, encoding): - if _debug: sys.stderr.write('entering _resolveRelativeURIs\n') - p = _RelativeURIResolver(baseURI, encoding) - p.feed(htmlSource) - return p.output() - -class _HTMLSanitizer(_BaseHTMLProcessor): - acceptable_elements = ['a', 'abbr', 'acronym', 'address', 'area', 'b', 'big', - 'blockquote', 'br', 'button', 'caption', 'center', 'cite', 'code', 'col', - 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt', 'em', 'fieldset', - 'font', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', - 'ins', 'kbd', 'label', 'legend', 'li', 'map', 'menu', 'ol', 'optgroup', - 'option', 'p', 'pre', 'q', 's', 'samp', 'select', 'small', 'span', 'strike', - 'strong', 'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', - 'thead', 'tr', 'tt', 'u', 'ul', 'var'] - - acceptable_attributes = ['abbr', 'accept', 'accept-charset', 'accesskey', - 'action', 'align', 'alt', 'axis', 'border', 'cellpadding', 'cellspacing', - 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'clear', 'cols', - 'colspan', 'color', 'compact', 'coords', 'datetime', 'dir', 'disabled', - 'enctype', 'for', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', - 'id', 'ismap', 'label', 'lang', 'longdesc', 'maxlength', 'media', 'method', - 'multiple', 'name', 'nohref', 'noshade', 'nowrap', 'prompt', 'readonly', - 'rel', 'rev', 'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', - 'span', 'src', 'start', 'summary', 'tabindex', 'target', 'title', 'type', - 'usemap', 'valign', 'value', 'vspace', 'width'] - - unacceptable_elements_with_end_tag = ['script', 'applet'] - - def reset(self): - _BaseHTMLProcessor.reset(self) - self.unacceptablestack = 0 - - def unknown_starttag(self, tag, attrs): - if not tag in self.acceptable_elements: - if tag in self.unacceptable_elements_with_end_tag: - self.unacceptablestack += 1 - return - attrs = self.normalize_attrs(attrs) - attrs = [(key, value) for key, value in attrs if key in self.acceptable_attributes] - _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) - - def unknown_endtag(self, tag): - if not tag in self.acceptable_elements: - if tag in self.unacceptable_elements_with_end_tag: - self.unacceptablestack -= 1 - return - _BaseHTMLProcessor.unknown_endtag(self, tag) - - def handle_pi(self, text): - pass - - def handle_decl(self, text): - pass - - def handle_data(self, text): - if not self.unacceptablestack: - _BaseHTMLProcessor.handle_data(self, text) - -def _sanitizeHTML(htmlSource, encoding): - p = _HTMLSanitizer(encoding) - p.feed(htmlSource) - data = p.output() - if TIDY_MARKUP: - # loop through list of preferred Tidy interfaces looking for one that's installed, - # then set up a common _tidy function to wrap the interface-specific API. - _tidy = None - for tidy_interface in PREFERRED_TIDY_INTERFACES: - try: - if tidy_interface == "uTidy": - from tidy import parseString as _utidy - def _tidy(data, **kwargs): - return str(_utidy(data, **kwargs)) - break - elif tidy_interface == "mxTidy": - from mx.Tidy import Tidy as _mxtidy - def _tidy(data, **kwargs): - nerrors, nwarnings, data, errordata = _mxtidy.tidy(data, **kwargs) - return data - break - except: - pass - if _tidy: - utf8 = type(data) == type(u'') - if utf8: - data = data.encode('utf-8') - data = _tidy(data, output_xhtml=1, numeric_entities=1, wrap=0, char_encoding="utf8") - if utf8: - data = unicode(data, 'utf-8') - if data.count(''): - data = data.split('>', 1)[1] - if data.count('= '2.3.3' - assert base64 != None - user, passw = base64.decodestring(req.headers['Authorization'].split(' ')[1]).split(':') - realm = re.findall('realm="([^"]*)"', headers['WWW-Authenticate'])[0] - self.add_password(realm, host, user, passw) - retry = self.http_error_auth_reqed('www-authenticate', host, req, headers) - self.reset_retry_count() - return retry - except: - return self.http_error_default(req, fp, code, msg, headers) - -def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers): - """URL, filename, or string --> stream - - This function lets you define parsers that take any input source - (URL, pathname to local or network file, or actual data as a string) - and deal with it in a uniform manner. Returned object is guaranteed - to have all the basic stdio read methods (read, readline, readlines). - Just .close() the object when you're done with it. - - If the etag argument is supplied, it will be used as the value of an - If-None-Match request header. - - If the modified argument is supplied, it must be a tuple of 9 integers - as returned by gmtime() in the standard Python time module. This MUST - be in GMT (Greenwich Mean Time). The formatted date/time will be used - as the value of an If-Modified-Since request header. - - If the agent argument is supplied, it will be used as the value of a - User-Agent request header. - - If the referrer argument is supplied, it will be used as the value of a - Referer[sic] request header. - - If handlers is supplied, it is a list of handlers used to build a - urllib2 opener. - """ - - if hasattr(url_file_stream_or_string, 'read'): - return url_file_stream_or_string - - if url_file_stream_or_string == '-': - return sys.stdin - - if urlparse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp'): - if not agent: - agent = USER_AGENT - # test for inline user:password for basic auth - auth = None - if base64: - urltype, rest = urllib.splittype(url_file_stream_or_string) - realhost, rest = urllib.splithost(rest) - if realhost: - user_passwd, realhost = urllib.splituser(realhost) - if user_passwd: - url_file_stream_or_string = '%s://%s%s' % (urltype, realhost, rest) - auth = base64.encodestring(user_passwd).strip() - # try to open with urllib2 (to use optional headers) - request = urllib2.Request(url_file_stream_or_string) - request.add_header('User-Agent', agent) - if etag: - request.add_header('If-None-Match', etag) - if modified: - # format into an RFC 1123-compliant timestamp. We can't use - # time.strftime() since the %a and %b directives can be affected - # by the current locale, but RFC 2616 states that dates must be - # in English. - short_weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] - months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] - request.add_header('If-Modified-Since', '%s, %02d %s %04d %02d:%02d:%02d GMT' % (short_weekdays[modified[6]], modified[2], months[modified[1] - 1], modified[0], modified[3], modified[4], modified[5])) - if referrer: - request.add_header('Referer', referrer) - if gzip and zlib: - request.add_header('Accept-encoding', 'gzip, deflate') - elif gzip: - request.add_header('Accept-encoding', 'gzip') - elif zlib: - request.add_header('Accept-encoding', 'deflate') - else: - request.add_header('Accept-encoding', '') - if auth: - request.add_header('Authorization', 'Basic %s' % auth) - if ACCEPT_HEADER: - request.add_header('Accept', ACCEPT_HEADER) - request.add_header('A-IM', 'feed') # RFC 3229 support - opener = apply(urllib2.build_opener, tuple([_FeedURLHandler()] + handlers)) - opener.addheaders = [] # RMK - must clear so we only send our custom User-Agent - try: - return opener.open(request) - finally: - opener.close() # JohnD - - # try to open with native open function (if url_file_stream_or_string is a filename) - try: - return open(url_file_stream_or_string) - except: - pass - - # treat url_file_stream_or_string as string - return _StringIO(str(url_file_stream_or_string)) - -_date_handlers = [] -def registerDateHandler(func): - '''Register a date handler function (takes string, returns 9-tuple date in GMT)''' - _date_handlers.insert(0, func) - -# ISO-8601 date parsing routines written by Fazal Majid. -# The ISO 8601 standard is very convoluted and irregular - a full ISO 8601 -# parser is beyond the scope of feedparser and would be a worthwhile addition -# to the Python library. -# A single regular expression cannot parse ISO 8601 date formats into groups -# as the standard is highly irregular (for instance is 030104 2003-01-04 or -# 0301-04-01), so we use templates instead. -# Please note the order in templates is significant because we need a -# greedy match. -_iso8601_tmpl = ['YYYY-?MM-?DD', 'YYYY-MM', 'YYYY-?OOO', - 'YY-?MM-?DD', 'YY-?OOO', 'YYYY', - '-YY-?MM', '-OOO', '-YY', - '--MM-?DD', '--MM', - '---DD', - 'CC', ''] -_iso8601_re = [ - tmpl.replace( - 'YYYY', r'(?P\d{4})').replace( - 'YY', r'(?P\d\d)').replace( - 'MM', r'(?P[01]\d)').replace( - 'DD', r'(?P[0123]\d)').replace( - 'OOO', r'(?P[0123]\d\d)').replace( - 'CC', r'(?P\d\d$)') - + r'(T?(?P\d{2}):(?P\d{2})' - + r'(:(?P\d{2}))?' - + r'(?P[+-](?P\d{2})(:(?P\d{2}))?|Z)?)?' - for tmpl in _iso8601_tmpl] -del tmpl -_iso8601_matches = [re.compile(regex).match for regex in _iso8601_re] -del regex -def _parse_date_iso8601(dateString): - '''Parse a variety of ISO-8601-compatible formats like 20040105''' - m = None - for _iso8601_match in _iso8601_matches: - m = _iso8601_match(dateString) - if m: break - if not m: return - if m.span() == (0, 0): return - params = m.groupdict() - ordinal = params.get('ordinal', 0) - if ordinal: - ordinal = int(ordinal) - else: - ordinal = 0 - year = params.get('year', '--') - if not year or year == '--': - year = time.gmtime()[0] - elif len(year) == 2: - # ISO 8601 assumes current century, i.e. 93 -> 2093, NOT 1993 - year = 100 * int(time.gmtime()[0] / 100) + int(year) - else: - year = int(year) - month = params.get('month', '-') - if not month or month == '-': - # ordinals are NOT normalized by mktime, we simulate them - # by setting month=1, day=ordinal - if ordinal: - month = 1 - else: - month = time.gmtime()[1] - month = int(month) - day = params.get('day', 0) - if not day: - # see above - if ordinal: - day = ordinal - elif params.get('century', 0) or \ - params.get('year', 0) or params.get('month', 0): - day = 1 - else: - day = time.gmtime()[2] - else: - day = int(day) - # special case of the century - is the first year of the 21st century - # 2000 or 2001 ? The debate goes on... - if 'century' in params.keys(): - year = (int(params['century']) - 1) * 100 + 1 - # in ISO 8601 most fields are optional - for field in ['hour', 'minute', 'second', 'tzhour', 'tzmin']: - if not params.get(field, None): - params[field] = 0 - hour = int(params.get('hour', 0)) - minute = int(params.get('minute', 0)) - second = int(params.get('second', 0)) - # weekday is normalized by mktime(), we can ignore it - weekday = 0 - # daylight savings is complex, but not needed for feedparser's purposes - # as time zones, if specified, include mention of whether it is active - # (e.g. PST vs. PDT, CET). Using -1 is implementation-dependent and - # and most implementations have DST bugs - daylight_savings_flag = 0 - tm = [year, month, day, hour, minute, second, weekday, - ordinal, daylight_savings_flag] - # ISO 8601 time zone adjustments - tz = params.get('tz') - if tz and tz != 'Z': - if tz[0] == '-': - tm[3] += int(params.get('tzhour', 0)) - tm[4] += int(params.get('tzmin', 0)) - elif tz[0] == '+': - tm[3] -= int(params.get('tzhour', 0)) - tm[4] -= int(params.get('tzmin', 0)) - else: - return None - # Python's time.mktime() is a wrapper around the ANSI C mktime(3c) - # which is guaranteed to normalize d/m/y/h/m/s. - # Many implementations have bugs, but we'll pretend they don't. - return time.localtime(time.mktime(tm)) -registerDateHandler(_parse_date_iso8601) - -# 8-bit date handling routines written by ytrewq1. -_korean_year = u'\ub144' # b3e2 in euc-kr -_korean_month = u'\uc6d4' # bff9 in euc-kr -_korean_day = u'\uc77c' # c0cf in euc-kr -_korean_am = u'\uc624\uc804' # bfc0 c0fc in euc-kr -_korean_pm = u'\uc624\ud6c4' # bfc0 c8c4 in euc-kr - -_korean_onblog_date_re = \ - re.compile('(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})' % \ - (_korean_year, _korean_month, _korean_day)) -_korean_nate_date_re = \ - re.compile(u'(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \ - (_korean_am, _korean_pm)) -def _parse_date_onblog(dateString): - '''Parse a string according to the OnBlog 8-bit date format''' - m = _korean_onblog_date_re.match(dateString) - if not m: return - w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ - {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ - 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ - 'zonediff': '+09:00'} - if _debug: sys.stderr.write('OnBlog date parsed as: %s\n' % w3dtfdate) - return _parse_date_w3dtf(w3dtfdate) -registerDateHandler(_parse_date_onblog) - -def _parse_date_nate(dateString): - '''Parse a string according to the Nate 8-bit date format''' - m = _korean_nate_date_re.match(dateString) - if not m: return - hour = int(m.group(5)) - ampm = m.group(4) - if (ampm == _korean_pm): - hour += 12 - hour = str(hour) - if len(hour) == 1: - hour = '0' + hour - w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ - {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ - 'hour': hour, 'minute': m.group(6), 'second': m.group(7),\ - 'zonediff': '+09:00'} - if _debug: sys.stderr.write('Nate date parsed as: %s\n' % w3dtfdate) - return _parse_date_w3dtf(w3dtfdate) -registerDateHandler(_parse_date_nate) - -_mssql_date_re = \ - re.compile('(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})(\.\d+)?') -def _parse_date_mssql(dateString): - '''Parse a string according to the MS SQL date format''' - m = _mssql_date_re.match(dateString) - if not m: return - w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ - {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ - 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ - 'zonediff': '+09:00'} - if _debug: sys.stderr.write('MS SQL date parsed as: %s\n' % w3dtfdate) - return _parse_date_w3dtf(w3dtfdate) -registerDateHandler(_parse_date_mssql) - -# Unicode strings for Greek date strings -_greek_months = \ - { \ - u'\u0399\u03b1\u03bd': u'Jan', # c9e1ed in iso-8859-7 - u'\u03a6\u03b5\u03b2': u'Feb', # d6e5e2 in iso-8859-7 - u'\u039c\u03ac\u03ce': u'Mar', # ccdcfe in iso-8859-7 - u'\u039c\u03b1\u03ce': u'Mar', # cce1fe in iso-8859-7 - u'\u0391\u03c0\u03c1': u'Apr', # c1f0f1 in iso-8859-7 - u'\u039c\u03ac\u03b9': u'May', # ccdce9 in iso-8859-7 - u'\u039c\u03b1\u03ca': u'May', # cce1fa in iso-8859-7 - u'\u039c\u03b1\u03b9': u'May', # cce1e9 in iso-8859-7 - u'\u0399\u03bf\u03cd\u03bd': u'Jun', # c9effded in iso-8859-7 - u'\u0399\u03bf\u03bd': u'Jun', # c9efed in iso-8859-7 - u'\u0399\u03bf\u03cd\u03bb': u'Jul', # c9effdeb in iso-8859-7 - u'\u0399\u03bf\u03bb': u'Jul', # c9f9eb in iso-8859-7 - u'\u0391\u03cd\u03b3': u'Aug', # c1fde3 in iso-8859-7 - u'\u0391\u03c5\u03b3': u'Aug', # c1f5e3 in iso-8859-7 - u'\u03a3\u03b5\u03c0': u'Sep', # d3e5f0 in iso-8859-7 - u'\u039f\u03ba\u03c4': u'Oct', # cfeaf4 in iso-8859-7 - u'\u039d\u03bf\u03ad': u'Nov', # cdefdd in iso-8859-7 - u'\u039d\u03bf\u03b5': u'Nov', # cdefe5 in iso-8859-7 - u'\u0394\u03b5\u03ba': u'Dec', # c4e5ea in iso-8859-7 - } - -_greek_wdays = \ - { \ - u'\u039a\u03c5\u03c1': u'Sun', # caf5f1 in iso-8859-7 - u'\u0394\u03b5\u03c5': u'Mon', # c4e5f5 in iso-8859-7 - u'\u03a4\u03c1\u03b9': u'Tue', # d4f1e9 in iso-8859-7 - u'\u03a4\u03b5\u03c4': u'Wed', # d4e5f4 in iso-8859-7 - u'\u03a0\u03b5\u03bc': u'Thu', # d0e5ec in iso-8859-7 - u'\u03a0\u03b1\u03c1': u'Fri', # d0e1f1 in iso-8859-7 - u'\u03a3\u03b1\u03b2': u'Sat', # d3e1e2 in iso-8859-7 - } - -_greek_date_format_re = \ - re.compile(u'([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)') - -def _parse_date_greek(dateString): - '''Parse a string according to a Greek 8-bit date format.''' - m = _greek_date_format_re.match(dateString) - if not m: return - try: - wday = _greek_wdays[m.group(1)] - month = _greek_months[m.group(3)] - except: - return - rfc822date = '%(wday)s, %(day)s %(month)s %(year)s %(hour)s:%(minute)s:%(second)s %(zonediff)s' % \ - {'wday': wday, 'day': m.group(2), 'month': month, 'year': m.group(4),\ - 'hour': m.group(5), 'minute': m.group(6), 'second': m.group(7),\ - 'zonediff': m.group(8)} - if _debug: sys.stderr.write('Greek date parsed as: %s\n' % rfc822date) - return _parse_date_rfc822(rfc822date) -registerDateHandler(_parse_date_greek) - -# Unicode strings for Hungarian date strings -_hungarian_months = \ - { \ - u'janu\u00e1r': u'01', # e1 in iso-8859-2 - u'febru\u00e1ri': u'02', # e1 in iso-8859-2 - u'm\u00e1rcius': u'03', # e1 in iso-8859-2 - u'\u00e1prilis': u'04', # e1 in iso-8859-2 - u'm\u00e1ujus': u'05', # e1 in iso-8859-2 - u'j\u00fanius': u'06', # fa in iso-8859-2 - u'j\u00falius': u'07', # fa in iso-8859-2 - u'augusztus': u'08', - u'szeptember': u'09', - u'okt\u00f3ber': u'10', # f3 in iso-8859-2 - u'november': u'11', - u'december': u'12', - } - -_hungarian_date_format_re = \ - re.compile(u'(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))') - -def _parse_date_hungarian(dateString): - '''Parse a string according to a Hungarian 8-bit date format.''' - m = _hungarian_date_format_re.match(dateString) - if not m: return - try: - month = _hungarian_months[m.group(2)] - day = m.group(3) - if len(day) == 1: - day = '0' + day - hour = m.group(4) - if len(hour) == 1: - hour = '0' + hour - except: - return - w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s%(zonediff)s' % \ - {'year': m.group(1), 'month': month, 'day': day,\ - 'hour': hour, 'minute': m.group(5),\ - 'zonediff': m.group(6)} - if _debug: sys.stderr.write('Hungarian date parsed as: %s\n' % w3dtfdate) - return _parse_date_w3dtf(w3dtfdate) -registerDateHandler(_parse_date_hungarian) - -# W3DTF-style date parsing adapted from PyXML xml.utils.iso8601, written by -# Drake and licensed under the Python license. Removed all range checking -# for month, day, hour, minute, and second, since mktime will normalize -# these later -def _parse_date_w3dtf(dateString): - def __extract_date(m): - year = int(m.group('year')) - if year < 100: - year = 100 * int(time.gmtime()[0] / 100) + int(year) - if year < 1000: - return 0, 0, 0 - julian = m.group('julian') - if julian: - julian = int(julian) - month = julian / 30 + 1 - day = julian % 30 + 1 - jday = None - while jday != julian: - t = time.mktime((year, month, day, 0, 0, 0, 0, 0, 0)) - jday = time.gmtime(t)[-2] - diff = abs(jday - julian) - if jday > julian: - if diff < day: - day = day - diff - else: - month = month - 1 - day = 31 - elif jday < julian: - if day + diff < 28: - day = day + diff - else: - month = month + 1 - return year, month, day - month = m.group('month') - day = 1 - if month is None: - month = 1 - else: - month = int(month) - day = m.group('day') - if day: - day = int(day) - else: - day = 1 - return year, month, day - - def __extract_time(m): - if not m: - return 0, 0, 0 - hours = m.group('hours') - if not hours: - return 0, 0, 0 - hours = int(hours) - minutes = int(m.group('minutes')) - seconds = m.group('seconds') - if seconds: - seconds = int(seconds) - else: - seconds = 0 - return hours, minutes, seconds - - def __extract_tzd(m): - '''Return the Time Zone Designator as an offset in seconds from UTC.''' - if not m: - return 0 - tzd = m.group('tzd') - if not tzd: - return 0 - if tzd == 'Z': - return 0 - hours = int(m.group('tzdhours')) - minutes = m.group('tzdminutes') - if minutes: - minutes = int(minutes) - else: - minutes = 0 - offset = (hours*60 + minutes) * 60 - if tzd[0] == '+': - return -offset - return offset - - __date_re = ('(?P\d\d\d\d)' - '(?:(?P-|)' - '(?:(?P\d\d\d)' - '|(?P\d\d)(?:(?P=dsep)(?P\d\d))?))?') - __tzd_re = '(?P[-+](?P\d\d)(?::?(?P\d\d))|Z)' - __tzd_rx = re.compile(__tzd_re) - __time_re = ('(?P\d\d)(?P:|)(?P\d\d)' - '(?:(?P=tsep)(?P\d\d(?:[.,]\d+)?))?' - + __tzd_re) - __datetime_re = '%s(?:T%s)?' % (__date_re, __time_re) - __datetime_rx = re.compile(__datetime_re) - m = __datetime_rx.match(dateString) - if (m is None) or (m.group() != dateString): return - gmt = __extract_date(m) + __extract_time(m) + (0, 0, 0) - if gmt[0] == 0: return - return time.gmtime(time.mktime(gmt) + __extract_tzd(m) - time.timezone) -registerDateHandler(_parse_date_w3dtf) - -def _parse_date_rfc822(dateString): - '''Parse an RFC822, RFC1123, RFC2822, or asctime-style date''' - data = dateString.split() - if data[0][-1] in (',', '.') or data[0].lower() in rfc822._daynames: - del data[0] - if len(data) == 4: - s = data[3] - i = s.find('+') - if i > 0: - data[3:] = [s[:i], s[i+1:]] - else: - data.append('') - dateString = " ".join(data) - if len(data) < 5: - dateString += ' 00:00:00 GMT' - tm = rfc822.parsedate_tz(dateString) - if tm: - return time.gmtime(rfc822.mktime_tz(tm)) -# rfc822.py defines several time zones, but we define some extra ones. -# 'ET' is equivalent to 'EST', etc. -_additional_timezones = {'AT': -400, 'ET': -500, 'CT': -600, 'MT': -700, 'PT': -800} -rfc822._timezones.update(_additional_timezones) -registerDateHandler(_parse_date_rfc822) - -def _parse_date(dateString): - '''Parses a variety of date formats into a 9-tuple in GMT''' - for handler in _date_handlers: - try: - date9tuple = handler(dateString) - if not date9tuple: continue - if len(date9tuple) != 9: - if _debug: sys.stderr.write('date handler function must return 9-tuple\n') - raise ValueError - map(int, date9tuple) - return date9tuple - except Exception, e: - if _debug: sys.stderr.write('%s raised %s\n' % (handler.__name__, repr(e))) - pass - return None - -def _getCharacterEncoding(http_headers, xml_data): - '''Get the character encoding of the XML document - - http_headers is a dictionary - xml_data is a raw string (not Unicode) - - This is so much trickier than it sounds, it's not even funny. - According to RFC 3023 ('XML Media Types'), if the HTTP Content-Type - is application/xml, application/*+xml, - application/xml-external-parsed-entity, or application/xml-dtd, - the encoding given in the charset parameter of the HTTP Content-Type - takes precedence over the encoding given in the XML prefix within the - document, and defaults to 'utf-8' if neither are specified. But, if - the HTTP Content-Type is text/xml, text/*+xml, or - text/xml-external-parsed-entity, the encoding given in the XML prefix - within the document is ALWAYS IGNORED and only the encoding given in - the charset parameter of the HTTP Content-Type header should be - respected, and it defaults to 'us-ascii' if not specified. - - Furthermore, discussion on the atom-syntax mailing list with the - author of RFC 3023 leads me to the conclusion that any document - served with a Content-Type of text/* and no charset parameter - must be treated as us-ascii. (We now do this.) And also that it - must always be flagged as non-well-formed. (We now do this too.) - - If Content-Type is unspecified (input was local file or non-HTTP source) - or unrecognized (server just got it totally wrong), then go by the - encoding given in the XML prefix of the document and default to - 'iso-8859-1' as per the HTTP specification (RFC 2616). - - Then, assuming we didn't find a character encoding in the HTTP headers - (and the HTTP Content-type allowed us to look in the body), we need - to sniff the first few bytes of the XML data and try to determine - whether the encoding is ASCII-compatible. Section F of the XML - specification shows the way here: - http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info - - If the sniffed encoding is not ASCII-compatible, we need to make it - ASCII compatible so that we can sniff further into the XML declaration - to find the encoding attribute, which will tell us the true encoding. - - Of course, none of this guarantees that we will be able to parse the - feed in the declared character encoding (assuming it was declared - correctly, which many are not). CJKCodecs and iconv_codec help a lot; - you should definitely install them if you can. - http://cjkpython.i18n.org/ - ''' - - def _parseHTTPContentType(content_type): - '''takes HTTP Content-Type header and returns (content type, charset) - - If no charset is specified, returns (content type, '') - If no content type is specified, returns ('', '') - Both return parameters are guaranteed to be lowercase strings - ''' - content_type = content_type or '' - content_type, params = cgi.parse_header(content_type) - return content_type, params.get('charset', '').replace("'", '') - - sniffed_xml_encoding = '' - xml_encoding = '' - true_encoding = '' - http_content_type, http_encoding = _parseHTTPContentType(http_headers.get('content-type')) - # Must sniff for non-ASCII-compatible character encodings before - # searching for XML declaration. This heuristic is defined in - # section F of the XML specification: - # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info - try: - if xml_data[:4] == '\x4c\x6f\xa7\x94': - # EBCDIC - xml_data = _ebcdic_to_ascii(xml_data) - elif xml_data[:4] == '\x00\x3c\x00\x3f': - # UTF-16BE - sniffed_xml_encoding = 'utf-16be' - xml_data = unicode(xml_data, 'utf-16be').encode('utf-8') - elif (len(xml_data) >= 4) and (xml_data[:2] == '\xfe\xff') and (xml_data[2:4] != '\x00\x00'): - # UTF-16BE with BOM - sniffed_xml_encoding = 'utf-16be' - xml_data = unicode(xml_data[2:], 'utf-16be').encode('utf-8') - elif xml_data[:4] == '\x3c\x00\x3f\x00': - # UTF-16LE - sniffed_xml_encoding = 'utf-16le' - xml_data = unicode(xml_data, 'utf-16le').encode('utf-8') - elif (len(xml_data) >= 4) and (xml_data[:2] == '\xff\xfe') and (xml_data[2:4] != '\x00\x00'): - # UTF-16LE with BOM - sniffed_xml_encoding = 'utf-16le' - xml_data = unicode(xml_data[2:], 'utf-16le').encode('utf-8') - elif xml_data[:4] == '\x00\x00\x00\x3c': - # UTF-32BE - sniffed_xml_encoding = 'utf-32be' - xml_data = unicode(xml_data, 'utf-32be').encode('utf-8') - elif xml_data[:4] == '\x3c\x00\x00\x00': - # UTF-32LE - sniffed_xml_encoding = 'utf-32le' - xml_data = unicode(xml_data, 'utf-32le').encode('utf-8') - elif xml_data[:4] == '\x00\x00\xfe\xff': - # UTF-32BE with BOM - sniffed_xml_encoding = 'utf-32be' - xml_data = unicode(xml_data[4:], 'utf-32be').encode('utf-8') - elif xml_data[:4] == '\xff\xfe\x00\x00': - # UTF-32LE with BOM - sniffed_xml_encoding = 'utf-32le' - xml_data = unicode(xml_data[4:], 'utf-32le').encode('utf-8') - elif xml_data[:3] == '\xef\xbb\xbf': - # UTF-8 with BOM - sniffed_xml_encoding = 'utf-8' - xml_data = unicode(xml_data[3:], 'utf-8').encode('utf-8') - else: - # ASCII-compatible - pass - xml_encoding_match = re.compile('^<\?.*encoding=[\'"](.*?)[\'"].*\?>').match(xml_data) - except: - xml_encoding_match = None - if xml_encoding_match: - xml_encoding = xml_encoding_match.groups()[0].lower() - if sniffed_xml_encoding and (xml_encoding in ('iso-10646-ucs-2', 'ucs-2', 'csunicode', 'iso-10646-ucs-4', 'ucs-4', 'csucs4', 'utf-16', 'utf-32', 'utf_16', 'utf_32', 'utf16', 'u16')): - xml_encoding = sniffed_xml_encoding - acceptable_content_type = 0 - application_content_types = ('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity') - text_content_types = ('text/xml', 'text/xml-external-parsed-entity') - if (http_content_type in application_content_types) or \ - (http_content_type.startswith('application/') and http_content_type.endswith('+xml')): - acceptable_content_type = 1 - true_encoding = http_encoding or xml_encoding or 'utf-8' - elif (http_content_type in text_content_types) or \ - (http_content_type.startswith('text/')) and http_content_type.endswith('+xml'): - acceptable_content_type = 1 - true_encoding = http_encoding or 'us-ascii' - elif http_content_type.startswith('text/'): - true_encoding = http_encoding or 'us-ascii' - elif http_headers and (not http_headers.has_key('content-type')): - true_encoding = xml_encoding or 'iso-8859-1' - else: - true_encoding = xml_encoding or 'utf-8' - return true_encoding, http_encoding, xml_encoding, sniffed_xml_encoding, acceptable_content_type - -def _toUTF8(data, encoding): - '''Changes an XML data stream on the fly to specify a new encoding - - data is a raw sequence of bytes (not Unicode) that is presumed to be in %encoding already - encoding is a string recognized by encodings.aliases - ''' - if _debug: sys.stderr.write('entering _toUTF8, trying encoding %s\n' % encoding) - # strip Byte Order Mark (if present) - if (len(data) >= 4) and (data[:2] == '\xfe\xff') and (data[2:4] != '\x00\x00'): - if _debug: - sys.stderr.write('stripping BOM\n') - if encoding != 'utf-16be': - sys.stderr.write('trying utf-16be instead\n') - encoding = 'utf-16be' - data = data[2:] - elif (len(data) >= 4) and (data[:2] == '\xff\xfe') and (data[2:4] != '\x00\x00'): - if _debug: - sys.stderr.write('stripping BOM\n') - if encoding != 'utf-16le': - sys.stderr.write('trying utf-16le instead\n') - encoding = 'utf-16le' - data = data[2:] - elif data[:3] == '\xef\xbb\xbf': - if _debug: - sys.stderr.write('stripping BOM\n') - if encoding != 'utf-8': - sys.stderr.write('trying utf-8 instead\n') - encoding = 'utf-8' - data = data[3:] - elif data[:4] == '\x00\x00\xfe\xff': - if _debug: - sys.stderr.write('stripping BOM\n') - if encoding != 'utf-32be': - sys.stderr.write('trying utf-32be instead\n') - encoding = 'utf-32be' - data = data[4:] - elif data[:4] == '\xff\xfe\x00\x00': - if _debug: - sys.stderr.write('stripping BOM\n') - if encoding != 'utf-32le': - sys.stderr.write('trying utf-32le instead\n') - encoding = 'utf-32le' - data = data[4:] - newdata = unicode(data, encoding) - if _debug: sys.stderr.write('successfully converted %s data to unicode\n' % encoding) - declmatch = re.compile('^<\?xml[^>]*?>') - newdecl = '''''' - if declmatch.search(newdata): - newdata = declmatch.sub(newdecl, newdata) - else: - newdata = newdecl + u'\n' + newdata - return newdata.encode('utf-8') - -def _stripDoctype(data): - '''Strips DOCTYPE from XML document, returns (rss_version, stripped_data) - - rss_version may be 'rss091n' or None - stripped_data is the same XML document, minus the DOCTYPE - ''' - entity_pattern = re.compile(r']*?)>', re.MULTILINE) - data = entity_pattern.sub('', data) - doctype_pattern = re.compile(r']*?)>', re.MULTILINE) - doctype_results = doctype_pattern.findall(data) - doctype = doctype_results and doctype_results[0] or '' - if doctype.lower().count('netscape'): - version = 'rss091n' - else: - version = None - data = doctype_pattern.sub('', data) - return version, data - -def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, referrer=None, handlers=[]): - '''Parse a feed from a URL, file, stream, or string''' - result = FeedParserDict() - result['feed'] = FeedParserDict() - result['entries'] = [] - if _XML_AVAILABLE: - result['bozo'] = 0 - if type(handlers) == types.InstanceType: - handlers = [handlers] - try: - f = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers) - data = f.read() - except Exception, e: - result['bozo'] = 1 - result['bozo_exception'] = e - data = '' - f = None - - # if feed is gzip-compressed, decompress it - if f and data and hasattr(f, 'headers'): - if gzip and f.headers.get('content-encoding', '') == 'gzip': - try: - data = gzip.GzipFile(fileobj=_StringIO(data)).read() - except Exception, e: - # Some feeds claim to be gzipped but they're not, so - # we get garbage. Ideally, we should re-request the - # feed without the 'Accept-encoding: gzip' header, - # but we don't. - result['bozo'] = 1 - result['bozo_exception'] = e - data = '' - elif zlib and f.headers.get('content-encoding', '') == 'deflate': - try: - data = zlib.decompress(data, -zlib.MAX_WBITS) - except Exception, e: - result['bozo'] = 1 - result['bozo_exception'] = e - data = '' - - # save HTTP headers - if hasattr(f, 'info'): - info = f.info() - result['etag'] = info.getheader('ETag') - last_modified = info.getheader('Last-Modified') - if last_modified: - result['modified'] = _parse_date(last_modified) - if hasattr(f, 'url'): - result['href'] = f.url - result['status'] = 200 - if hasattr(f, 'status'): - result['status'] = f.status - if hasattr(f, 'headers'): - result['headers'] = f.headers.dict - if hasattr(f, 'close'): - f.close() - - # there are four encodings to keep track of: - # - http_encoding is the encoding declared in the Content-Type HTTP header - # - xml_encoding is the encoding declared in the ; changed -# project name -#2.5 - 7/25/2003 - MAP - changed to Python license (all contributors agree); -# removed unnecessary urllib code -- urllib2 should always be available anyway; -# return actual url, status, and full HTTP headers (as result['url'], -# result['status'], and result['headers']) if parsing a remote feed over HTTP -- -# this should pass all the HTTP tests at ; -# added the latest namespace-of-the-week for RSS 2.0 -#2.5.1 - 7/26/2003 - RMK - clear opener.addheaders so we only send our custom -# User-Agent (otherwise urllib2 sends two, which confuses some servers) -#2.5.2 - 7/28/2003 - MAP - entity-decode inline xml properly; added support for -# inline and as used in some RSS 2.0 feeds -#2.5.3 - 8/6/2003 - TvdV - patch to track whether we're inside an image or -# textInput, and also to return the character encoding (if specified) -#2.6 - 1/1/2004 - MAP - dc:author support (MarekK); fixed bug tracking -# nested divs within content (JohnD); fixed missing sys import (JohanS); -# fixed regular expression to capture XML character encoding (Andrei); -# added support for Atom 0.3-style links; fixed bug with textInput tracking; -# added support for cloud (MartijnP); added support for multiple -# category/dc:subject (MartijnP); normalize content model: 'description' gets -# description (which can come from description, summary, or full content if no -# description), 'content' gets dict of base/language/type/value (which can come -# from content:encoded, xhtml:body, content, or fullitem); -# fixed bug matching arbitrary Userland namespaces; added xml:base and xml:lang -# tracking; fixed bug tracking unknown tags; fixed bug tracking content when -# element is not in default namespace (like Pocketsoap feed); -# resolve relative URLs in link, guid, docs, url, comments, wfw:comment, -# wfw:commentRSS; resolve relative URLs within embedded HTML markup in -# description, xhtml:body, content, content:encoded, title, subtitle, -# summary, info, tagline, and copyright; added support for pingback and -# trackback namespaces -#2.7 - 1/5/2004 - MAP - really added support for trackback and pingback -# namespaces, as opposed to 2.6 when I said I did but didn't really; -# sanitize HTML markup within some elements; added mxTidy support (if -# installed) to tidy HTML markup within some elements; fixed indentation -# bug in _parse_date (FazalM); use socket.setdefaulttimeout if available -# (FazalM); universal date parsing and normalization (FazalM): 'created', modified', -# 'issued' are parsed into 9-tuple date format and stored in 'created_parsed', -# 'modified_parsed', and 'issued_parsed'; 'date' is duplicated in 'modified' -# and vice-versa; 'date_parsed' is duplicated in 'modified_parsed' and vice-versa -#2.7.1 - 1/9/2004 - MAP - fixed bug handling " and '. fixed memory -# leak not closing url opener (JohnD); added dc:publisher support (MarekK); -# added admin:errorReportsTo support (MarekK); Python 2.1 dict support (MarekK) -#2.7.4 - 1/14/2004 - MAP - added workaround for improperly formed
    tags in -# encoded HTML (skadz); fixed unicode handling in normalize_attrs (ChrisL); -# fixed relative URI processing for guid (skadz); added ICBM support; added -# base64 support -#2.7.5 - 1/15/2004 - MAP - added workaround for malformed DOCTYPE (seen on many -# blogspot.com sites); added _debug variable -#2.7.6 - 1/16/2004 - MAP - fixed bug with StringIO importing -#3.0b3 - 1/23/2004 - MAP - parse entire feed with real XML parser (if available); -# added several new supported namespaces; fixed bug tracking naked markup in -# description; added support for enclosure; added support for source; re-added -# support for cloud which got dropped somehow; added support for expirationDate -#3.0b4 - 1/26/2004 - MAP - fixed xml:lang inheritance; fixed multiple bugs tracking -# xml:base URI, one for documents that don't define one explicitly and one for -# documents that define an outer and an inner xml:base that goes out of scope -# before the end of the document -#3.0b5 - 1/26/2004 - MAP - fixed bug parsing multiple links at feed level -#3.0b6 - 1/27/2004 - MAP - added feed type and version detection, result['version'] -# will be one of SUPPORTED_VERSIONS.keys() or empty string if unrecognized; -# added support for creativeCommons:license and cc:license; added support for -# full Atom content model in title, tagline, info, copyright, summary; fixed bug -# with gzip encoding (not always telling server we support it when we do) -#3.0b7 - 1/28/2004 - MAP - support Atom-style author element in author_detail -# (dictionary of 'name', 'url', 'email'); map author to author_detail if author -# contains name + email address -#3.0b8 - 1/28/2004 - MAP - added support for contributor -#3.0b9 - 1/29/2004 - MAP - fixed check for presence of dict function; added -# support for summary -#3.0b10 - 1/31/2004 - MAP - incorporated ISO-8601 date parsing routines from -# xml.util.iso8601 -#3.0b11 - 2/2/2004 - MAP - added 'rights' to list of elements that can contain -# dangerous markup; fiddled with decodeEntities (not right); liberalized -# date parsing even further -#3.0b12 - 2/6/2004 - MAP - fiddled with decodeEntities (still not right); -# added support to Atom 0.2 subtitle; added support for Atom content model -# in copyright; better sanitizing of dangerous HTML elements with end tags -# (script, frameset) -#3.0b13 - 2/8/2004 - MAP - better handling of empty HTML tags (br, hr, img, -# etc.) in embedded markup, in either HTML or XHTML form (
    ,
    ,
    ) -#3.0b14 - 2/8/2004 - MAP - fixed CDATA handling in non-wellformed feeds under -# Python 2.1 -#3.0b15 - 2/11/2004 - MAP - fixed bug resolving relative links in wfw:commentRSS; -# fixed bug capturing author and contributor URL; fixed bug resolving relative -# links in author and contributor URL; fixed bug resolvin relative links in -# generator URL; added support for recognizing RSS 1.0; passed Simon Fell's -# namespace tests, and included them permanently in the test suite with his -# permission; fixed namespace handling under Python 2.1 -#3.0b16 - 2/12/2004 - MAP - fixed support for RSS 0.90 (broken in b15) -#3.0b17 - 2/13/2004 - MAP - determine character encoding as per RFC 3023 -#3.0b18 - 2/17/2004 - MAP - always map description to summary_detail (Andrei); -# use libxml2 (if available) -#3.0b19 - 3/15/2004 - MAP - fixed bug exploding author information when author -# name was in parentheses; removed ultra-problematic mxTidy support; patch to -# workaround crash in PyXML/expat when encountering invalid entities -# (MarkMoraes); support for textinput/textInput -#3.0b20 - 4/7/2004 - MAP - added CDF support -#3.0b21 - 4/14/2004 - MAP - added Hot RSS support -#3.0b22 - 4/19/2004 - MAP - changed 'channel' to 'feed', 'item' to 'entries' in -# results dict; changed results dict to allow getting values with results.key -# as well as results[key]; work around embedded illformed HTML with half -# a DOCTYPE; work around malformed Content-Type header; if character encoding -# is wrong, try several common ones before falling back to regexes (if this -# works, bozo_exception is set to CharacterEncodingOverride); fixed character -# encoding issues in BaseHTMLProcessor by tracking encoding and converting -# from Unicode to raw strings before feeding data to sgmllib.SGMLParser; -# convert each value in results to Unicode (if possible), even if using -# regex-based parsing -#3.0b23 - 4/21/2004 - MAP - fixed UnicodeDecodeError for feeds that contain -# high-bit characters in attributes in embedded HTML in description (thanks -# Thijs van de Vossen); moved guid, date, and date_parsed to mapped keys in -# FeedParserDict; tweaked FeedParserDict.has_key to return True if asking -# about a mapped key -#3.0fc1 - 4/23/2004 - MAP - made results.entries[0].links[0] and -# results.entries[0].enclosures[0] into FeedParserDict; fixed typo that could -# cause the same encoding to be tried twice (even if it failed the first time); -# fixed DOCTYPE stripping when DOCTYPE contained entity declarations; -# better textinput and image tracking in illformed RSS 1.0 feeds -#3.0fc2 - 5/10/2004 - MAP - added and passed Sam's amp tests; added and passed -# my blink tag tests -#3.0fc3 - 6/18/2004 - MAP - fixed bug in _changeEncodingDeclaration that -# failed to parse utf-16 encoded feeds; made source into a FeedParserDict; -# duplicate admin:generatorAgent/@rdf:resource in generator_detail.url; -# added support for image; refactored parse() fallback logic to try other -# encodings if SAX parsing fails (previously it would only try other encodings -# if re-encoding failed); remove unichr madness in normalize_attrs now that -# we're properly tracking encoding in and out of BaseHTMLProcessor; set -# feed.language from root-level xml:lang; set entry.id from rdf:about; -# send Accept header -#3.0 - 6/21/2004 - MAP - don't try iso-8859-1 (can't distinguish between -# iso-8859-1 and windows-1252 anyway, and most incorrectly marked feeds are -# windows-1252); fixed regression that could cause the same encoding to be -# tried twice (even if it failed the first time) -#3.0.1 - 6/22/2004 - MAP - default to us-ascii for all text/* content types; -# recover from malformed content-type header parameter with no equals sign -# ('text/xml; charset:iso-8859-1') -#3.1 - 6/28/2004 - MAP - added and passed tests for converting HTML entities -# to Unicode equivalents in illformed feeds (aaronsw); added and -# passed tests for converting character entities to Unicode equivalents -# in illformed feeds (aaronsw); test for valid parsers when setting -# XML_AVAILABLE; make version and encoding available when server returns -# a 304; add handlers parameter to pass arbitrary urllib2 handlers (like -# digest auth or proxy support); add code to parse username/password -# out of url and send as basic authentication; expose downloading-related -# exceptions in bozo_exception (aaronsw); added __contains__ method to -# FeedParserDict (aaronsw); added publisher_detail (aaronsw) -#3.2 - 7/3/2004 - MAP - use cjkcodecs and iconv_codec if available; always -# convert feed to UTF-8 before passing to XML parser; completely revamped -# logic for determining character encoding and attempting XML parsing -# (much faster); increased default timeout to 20 seconds; test for presence -# of Location header on redirects; added tests for many alternate character -# encodings; support various EBCDIC encodings; support UTF-16BE and -# UTF16-LE with or without a BOM; support UTF-8 with a BOM; support -# UTF-32BE and UTF-32LE with or without a BOM; fixed crashing bug if no -# XML parsers are available; added support for 'Content-encoding: deflate'; -# send blank 'Accept-encoding: ' header if neither gzip nor zlib modules -# are available -#3.3 - 7/15/2004 - MAP - optimize EBCDIC to ASCII conversion; fix obscure -# problem tracking xml:base and xml:lang if element declares it, child -# doesn't, first grandchild redeclares it, and second grandchild doesn't; -# refactored date parsing; defined public registerDateHandler so callers -# can add support for additional date formats at runtime; added support -# for OnBlog, Nate, MSSQL, Greek, and Hungarian dates (ytrewq1); added -# zopeCompatibilityHack() which turns FeedParserDict into a regular -# dictionary, required for Zope compatibility, and also makes command- -# line debugging easier because pprint module formats real dictionaries -# better than dictionary-like objects; added NonXMLContentType exception, -# which is stored in bozo_exception when a feed is served with a non-XML -# media type such as 'text/plain'; respect Content-Language as default -# language if not xml:lang is present; cloud dict is now FeedParserDict; -# generator dict is now FeedParserDict; better tracking of xml:lang, -# including support for xml:lang='' to unset the current language; -# recognize RSS 1.0 feeds even when RSS 1.0 namespace is not the default -# namespace; don't overwrite final status on redirects (scenarios: -# redirecting to a URL that returns 304, redirecting to a URL that -# redirects to another URL with a different type of redirect); add -# support for HTTP 303 redirects -#4.0 - MAP - support for relative URIs in xml:base attribute; fixed -# encoding issue with mxTidy (phopkins); preliminary support for RFC 3229; -# support for Atom 1.0; support for iTunes extensions; new 'tags' for -# categories/keywords/etc. as array of dict -# {'term': term, 'scheme': scheme, 'label': label} to match Atom 1.0 -# terminology; parse RFC 822-style dates with no time; lots of other -# bug fixes -#4.1 - MAP - removed socket timeout; added support for chardet library - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/widgets/templates/wiki.mako b/document_page/web/widgets/templates/wiki.mako deleted file mode 100644 index 54976a8c937..00000000000 --- a/document_page/web/widgets/templates/wiki.mako +++ /dev/null @@ -1,23 +0,0 @@ -% if editable and not inline: - - -% endif - -% if editable and inline: - -% endif - -% if editable and error: - ${error} -% endif - -% if not editable and value: -
    ${data|n}
    -% endif - diff --git a/document_page/web/widgets/wiki.py b/document_page/web/widgets/wiki.py deleted file mode 100644 index ccf2a75899c..00000000000 --- a/document_page/web/widgets/wiki.py +++ /dev/null @@ -1,224 +0,0 @@ -############################################################################### -# -# Copyright (C) 2007-TODAY Tiny ERP Pvt Ltd. All Rights Reserved. -# -# $Id$ -# -# Developed by Tiny (http://openerp.com) and Axelor (http://axelor.com). -# -# The OpenERP web client is distributed under the "OpenERP Public License". -# It's based on Mozilla Public License Version (MPL) 1.1 with following -# restrictions: -# -# - All names, links and logos of Tiny, OpenERP and Axelor must be -# kept as in original distribution without any changes in all software -# screens, especially in start-up page and the software header, even if -# the application source code has been changed or updated or code has been -# added. -# -# - All distributions of the software must keep source code with OEPL. -# -# - All integrations to any other software must keep source code with OEPL. -# -# If you need commercial licence to remove this kind of restriction please -# contact us. -# -# You can see the MPL licence at: http://www.mozilla.org/MPL/MPL-1.1.html -# -############################################################################### - -import re - -import cherrypy -import wikimarkup - -from openobject import rpc -from openobject.widgets import CSSLink - - -from openerp.widgets import register_widget -from openerp.widgets.form import Text - - -_image = re.compile(r'img:(.*)\.(.*)', re.UNICODE) -_rss = re.compile(r'rss:(.*)\.(.*)', re.UNICODE) -_attach = re.compile(r'attach:(.*)\.(.*)', re.UNICODE) -_internalLinks = re.compile(r'\[\[.*\]\]', re.UNICODE) -_edit = re.compile(r'edit:(.*)\|(.*)', re.UNICODE) -_view = re.compile(r'view:(.*)\|(.*)', re.UNICODE) - -class WikiParser(wikimarkup.Parser): - - def parse(self, text, id): - text = text.replace(' ', 'n-b-s-p') - text = text.replace('&', 'n-a-m-p') - text = text.replace('&','&') - text = text.replace('n-b-s-p', ' ') - text = text.replace('n-a-m-p', '&') - text = text.replace('', '
    ')
    -        text = text.replace('', '
    ') - - text = wikimarkup.to_unicode(text) - text = self.strip(text) - - text = super(WikiParser, self).parse(text) - text = self.addImage(text, id) - text = self.attachDoc(text, id) - text = self.recordLink(text) - text = self.viewRecordLink(text) - text = self.addInternalLinks(text) - #TODO : already implemented but we will implement it later after releasing the 5.0 - #text = self.addRss(text, id) - return text - - def viewRecordLink(self, text): - def record(path): - record = path.group().replace('view:','').split("|") - model = record[0] - text = record[1].replace('\r','').strip() - label = "View Record" - if len(record) > 2: - label = record[2] - proxy = rpc.RPCProxy(model) - ids = proxy.name_search(text, [], 'ilike', {}) - if len(ids): - id = ids[0][0] - else: - try: - id = int(text) - except: - id = 0 - return "[[/openerp/form/view?model=%s&id=%d | %s]]" % (model, id, label) - - bits = _view.sub(record, text) - return bits - - def addRss(self, text, id): - def addrss(path): - rssurl = path.group().replace('rss:','') - import rss.feedparser as feedparser - data = feedparser.parse(rssurl) - values = "

    %s


    " % (data.feed.title) - values += "%s
    " % (data.channel.description) - for entry in data['entries']: - values += "

    %s


    " % (entry.link, entry.title) - values += "%s
    " % (entry.summary) - - return values - - bits = _rss.sub(addrss, text) - return bits - - def attachDoc(self, text, id): - def document(path): - file = path.group().replace('attach:','') - if file.startswith('http') or file.startswith('ftp'): - return "Download File" % (file) - else: - proxy = rpc.RPCProxy('ir.attachment') - ids = proxy.search([('datas_fname','=',file.strip()), ('res_model','=','wiki.wiki'), ('res_id','=',id)]) - if len(ids) > 0: - return "%s" % (file, id, file) - else: - return """Attach : %s """ % (id, file) - bits = _attach.sub(document, text) - return bits - - def addImage(self, text, id): - def image(path): - file = path.group().replace('img:','') - if file.startswith('http') or file.startswith('ftp'): - return "" % (file) - else: - proxy = rpc.RPCProxy('ir.attachment') - ids = proxy.search([('datas_fname','=',file.strip()), ('res_model','=','wiki.wiki'), ('res_id','=',id)]) - if len(ids) > 0: - return "" % (file, id) - else: - return """Attach : %s """ % (id, file) - #"[[/attachment/?model=wiki.wiki&id=%d | Attach:%s]]" % (id, file) - bits = _image.sub(image, text) - return bits - - def recordLink(self, text): - def record(path): - record = path.group().replace('edit:','').split("|") - model = record[0] - text = record[1].replace('\r','').strip() - label = "Edit Record" - if len(record) > 2: - label = record[2] - proxy = rpc.RPCProxy(model) - ids = proxy.name_search(text, [], '=', {}) - if len(ids): - id = ids[0][0] - else: - try: - id = int(text) - except: - id = 0 - return "[[/openerp/form/edit?model=%s&id=%d | %s]]" % (model, id, label) - - bits = _edit.sub(record, text) - return bits - - def addInternalLinks(self, text): - proxy = rpc.RPCProxy('wiki.wiki') - - def link(path): - link = path.group().replace('[','').replace('[','').replace(']','').replace(']','').split("|") - name_to_search = link[0].strip() - mids = proxy.search([('name','ilike', name_to_search)]) - link_str = "" - if mids: - if len(link) == 2: - link_str = "%s" % (mids[0], link[1]) - elif len(link) == 1: - link_str = "%s" % (mids[0], link[0]) - else: - if len(link) == 2: - link_str = "%s" % (link[0], link[1]) - elif len(link) == 1: - link_str = "%s" % (link[0]) - - return link_str - - bits = _internalLinks.sub(link, text) - return bits - -def wiki2html(text, showToc, id): - p = WikiParser(show_toc=showToc) - return p.parse(text, id) - -class WikiWidget(Text): - template = "/wiki/widgets/templates/wiki.mako" - - params = ["data"] - - css = [CSSLink("wiki", "css/wiki.css")] - - data = None - - def set_value(self, value): - super(WikiWidget, self).set_value(value) - - if value: - toc = True - id = False - if hasattr(cherrypy.request, 'terp_record'): - params = cherrypy.request.terp_params - if params._terp_model == 'wiki.wiki': - proxy = rpc.RPCProxy('wiki.wiki') - toc = proxy.read([params.id], ['toc'])[0]['toc'] - id = params.id - - text = value+'\n\n' - html = wiki2html(text, toc, id) - - self.data = html - -register_widget(WikiWidget, ["text_wiki"]) - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/web/widgets/wikimarkup/__init__.py b/document_page/web/widgets/wikimarkup/__init__.py deleted file mode 100644 index f5fe67fada1..00000000000 --- a/document_page/web/widgets/wikimarkup/__init__.py +++ /dev/null @@ -1,2146 +0,0 @@ -# coding: latin1 -""" -MediaWiki-style markup - -Copyright (C) 2008 David Cramer - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . -""" - -import re, random, locale -from base64 import b64encode, b64decode - -# a few patterns we use later - -MW_COLON_STATE_TEXT = 0 -MW_COLON_STATE_TAG = 1 -MW_COLON_STATE_TAGSTART = 2 -MW_COLON_STATE_CLOSETAG = 3 -MW_COLON_STATE_TAGSLASH = 4 -MW_COLON_STATE_COMMENT = 5 -MW_COLON_STATE_COMMENTDASH = 6 -MW_COLON_STATE_COMMENTDASHDASH = 7 - -_attributePat = re.compile(ur'''(?:^|\s)([A-Za-z0-9]+)(?:\s*=\s*(?:"([^<"]*)"|'([^<']*)'|([a-zA-Z0-9!#$%&()*,\-./:;<>?@[\]^_`{|}~]+)|#([0-9a-fA-F]+)))''', re.UNICODE) -_space = re.compile(ur'\s+', re.UNICODE) -_closePrePat = re.compile(u"]*?)(/?>)([^<]*)$', re.UNICODE) - -_htmlpairs = ( # Tags that must be closed - u'b', u'del', u'i', u'ins', u'u', u'font', u'big', u'small', u'sub', u'sup', u'h1', - u'h2', u'h3', u'h4', u'h5', u'h6', u'cite', u'code', u'em', u's', - u'strike', u'strong', u'tt', u'var', u'div', u'center', - u'blockquote', u'ol', u'ul', u'dl', u'table', u'caption', u'pre', - u'ruby', u'rt' , u'rb' , u'rp', u'p', u'span', u'u', -) -_htmlsingle = ( - u'br', u'hr', u'li', u'dt', u'dd', u'img', -) -_htmlsingleonly = ( # Elements that cannot have close tags - u'br', u'hr', u'img', -) -_htmlnest = ( # Tags that can be nested--?? - u'table', u'tr', u'td', u'th', u'div', u'blockquote', u'ol', u'ul', - u'dl', u'font', u'big', u'small', u'sub', u'sup', u'span', u'img', -) -_tabletags = ( # Can only appear inside table - u'td', u'th', u'tr', -) -_htmllist = ( # Tags used by list - u'ul', u'ol', -) -_listtags = ( # Tags that can appear in a list - u'li', -) -_htmlsingleallowed = _htmlsingle + _tabletags -_htmlelements = _htmlsingle + _htmlpairs + _htmlnest - -_htmlEntities = { - u'Aacute': 193, u'aacute': 225, u'Acirc': 194, u'acirc': 226, u'acute': 180, - u'AElig': 198, u'aelig': 230, u'Agrave': 192, u'agrave': 224, u'alefsym': 8501, - u'Alpha': 913, u'alpha': 945, u'amp': 38, u'and': 8743, u'ang': 8736, u'Aring': 197, - u'aring': 229, - u'asymp': 8776, - u'Atilde': 195, - u'atilde': 227, - u'Auml': 196, - u'auml': 228, - u'bdquo': 8222, - u'Beta': 914, - u'beta': 946, - u'brvbar': 166, - u'bull': 8226, - u'cap': 8745, - u'Ccedil': 199, - u'ccedil': 231, - u'cedil': 184, - u'cent': 162, - u'Chi': 935, - u'chi': 967, - u'circ': 710, - u'clubs': 9827, - u'cong': 8773, - u'copy': 169, - u'crarr': 8629, - u'cup': 8746, - u'curren': 164, - u'dagger': 8224, - u'Dagger': 8225, - u'darr': 8595, - u'dArr': 8659, - u'deg': 176, - u'Delta': 916, - u'delta': 948, - u'diams': 9830, - u'divide': 247, - u'Eacute': 201, - u'eacute': 233, - u'Ecirc': 202, - u'ecirc': 234, - u'Egrave': 200, - u'egrave': 232, - u'empty': 8709, - u'emsp': 8195, - u'ensp': 8194, - u'Epsilon': 917, - u'epsilon': 949, - u'equiv': 8801, - u'Eta': 919, - u'eta': 951, - u'ETH': 208, - u'eth': 240, - u'Euml': 203, - u'euml': 235, - u'euro': 8364, - u'exist': 8707, - u'fnof': 402, - u'forall': 8704, - u'frac12': 189, - u'frac14': 188, - u'frac34': 190, - u'frasl': 8260, - u'Gamma': 915, - u'gamma': 947, - u'ge': 8805, - u'gt': 62, - u'harr': 8596, - u'hArr': 8660, - u'hearts': 9829, - u'hellip': 8230, - u'Iacute': 205, - u'iacute': 237, - u'Icirc': 206, - u'icirc': 238, - u'iexcl': 161, - u'Igrave': 204, - u'igrave': 236, - u'image': 8465, - u'infin': 8734, - u'int': 8747, - u'Iota': 921, - u'iota': 953, - u'iquest': 191, - u'isin': 8712, - u'Iuml': 207, - u'iuml': 239, - u'Kappa': 922, - u'kappa': 954, - u'Lambda': 923, - u'lambda': 955, - u'lang': 9001, - u'laquo': 171, - u'larr': 8592, - u'lArr': 8656, - u'lceil': 8968, - u'ldquo': 8220, - u'le': 8804, - u'lfloor': 8970, - u'lowast': 8727, - u'loz': 9674, - u'lrm': 8206, - u'lsaquo': 8249, - u'lsquo': 8216, - u'lt': 60, - u'macr': 175, - u'mdash': 8212, - u'micro': 181, - u'middot': 183, - u'minus': 8722, - u'Mu': 924, - u'mu': 956, - u'nabla': 8711, - u'nbsp': 160, - u'ndash': 8211, - u'ne': 8800, - u'ni': 8715, - u'not': 172, - u'notin': 8713, - u'nsub': 8836, - u'Ntilde': 209, - u'ntilde': 241, - u'Nu': 925, - u'nu': 957, - u'Oacute': 211, - u'oacute': 243, - u'Ocirc': 212, - u'ocirc': 244, - u'OElig': 338, - u'oelig': 339, - u'Ograve': 210, - u'ograve': 242, - u'oline': 8254, - u'Omega': 937, - u'omega': 969, - u'Omicron': 927, - u'omicron': 959, - u'oplus': 8853, - u'or': 8744, - u'ordf': 170, - u'ordm': 186, - u'Oslash': 216, - u'oslash': 248, - u'Otilde': 213, - u'otilde': 245, - u'otimes': 8855, - u'Ouml': 214, - u'ouml': 246, - u'para': 182, - u'part': 8706, - u'permil': 8240, - u'perp': 8869, - u'Phi': 934, - u'phi': 966, - u'Pi': 928, - u'pi': 960, - u'piv': 982, - u'plusmn': 177, - u'pound': 163, - u'prime': 8242, - u'Prime': 8243, - u'prod': 8719, - u'prop': 8733, - u'Psi': 936, - u'psi': 968, - u'quot': 34, - u'radic': 8730, - u'rang': 9002, - u'raquo': 187, - u'rarr': 8594, - u'rArr': 8658, - u'rceil': 8969, - u'rdquo': 8221, - u'real': 8476, - u'reg': 174, - u'rfloor': 8971, - u'Rho': 929, - u'rho': 961, - u'rlm': 8207, - u'rsaquo': 8250, - u'rsquo': 8217, - u'sbquo': 8218, - u'Scaron': 352, - u'scaron': 353, - u'sdot': 8901, - u'sect': 167, - u'shy': 173, - u'Sigma': 931, - u'sigma': 963, - u'sigmaf': 962, - u'sim': 8764, - u'spades': 9824, - u'sub': 8834, - u'sube': 8838, - u'sum': 8721, - u'sup': 8835, - u'sup1': 185, - u'sup2': 178, - u'sup3': 179, - u'supe': 8839, - u'szlig': 223, - u'Tau': 932, - u'tau': 964, - u'there4': 8756, - u'Theta': 920, - u'theta': 952, - u'thetasym': 977, - u'thinsp': 8201, - u'THORN': 222, - u'thorn': 254, - u'tilde': 732, - u'times': 215, - u'trade': 8482, - u'Uacute': 218, - u'uacute': 250, - u'uarr': 8593, - u'uArr': 8657, - u'Ucirc': 219, - u'ucirc': 251, - u'Ugrave': 217, - u'ugrave': 249, - u'uml': 168, - u'upsih': 978, - u'Upsilon': 933, - u'upsilon': 965, - u'Uuml': 220, - u'uuml': 252, - u'weierp': 8472, - u'Xi': 926, - u'xi': 958, - u'Yacute': 221, - u'yacute': 253, - u'yen': 165, - u'Yuml': 376, - u'yuml': 255, - u'Zeta': 918, - u'zeta': 950, - u'zwj': 8205, - u'zwnj': 8204 -} - -_charRefsPat = re.compile(ur'''(&([A-Za-z0-9]+);|&#([0-9]+);|&#[xX]([0-9A-Za-z]+);|(&))''', re.UNICODE) -_cssCommentPat = re.compile(ur'''\*.*?\*''', re.UNICODE) -_toUTFPat = re.compile(ur'''\\([0-9A-Fa-f]{1,6})[\s]?''', re.UNICODE) -_hackPat = re.compile(ur'''(expression|tps*://|url\s*\().*''', re.UNICODE | re.IGNORECASE) -_hrPat = re.compile(u'''^-----*''', re.UNICODE | re.MULTILINE) -_h1Pat = re.compile(u'^=(.+)=\s*$', re.UNICODE | re.MULTILINE) -_h2Pat = re.compile(u'^==(.+)==\s*$', re.UNICODE | re.MULTILINE) -_h3Pat = re.compile(u'^===(.+)===\s*$', re.UNICODE | re.MULTILINE) -_h4Pat = re.compile(u'^====(.+)====\s*$', re.UNICODE | re.MULTILINE) -_h5Pat = re.compile(u'^=====(.+)=====\s*$', re.UNICODE | re.MULTILINE) -_h6Pat = re.compile(u'^======(.+)======\s*$', re.UNICODE | re.MULTILINE) -_quotePat = re.compile(u"""(''+)""", re.UNICODE) -_removePat = re.compile(ur'\b(' + ur'|'.join((u"a", u"an", u"as", u"at", u"before", u"but", u"by", u"for", u"from", - u"is", u"in", u"into", u"like", u"of", u"off", u"on", u"onto", u"per", - u"since", u"than", u"the", u"this", u"that", u"to", u"up", u"via", - u"with")) + ur')\b', re.UNICODE | re.IGNORECASE) -_nonWordSpaceDashPat = re.compile(ur'[^\w\s\-\./]', re.UNICODE) -_multiSpacePat = re.compile(ur'[\s\-_\./]+', re.UNICODE) -_spacePat = re.compile(ur' ', re.UNICODE) -_linkPat = re.compile(ur'^(?:([A-Za-z0-9]+):)?([^\|]+)(?:\|([^\n]+?))?\]\](.*)$', re.UNICODE | re.DOTALL) -_bracketedLinkPat = re.compile(ur'(?:\[((?:mailto:|irc://|https?://|ftp://|/)[^<>\]\[' + u"\x00-\x20\x7f" + ur']*)\s*(.*?)\])', re.UNICODE) -_protocolPat = re.compile(ur'(\b(?:mailto:|irc://|https?://|ftp://))', re.UNICODE) -_specialUrlPat = re.compile(ur'^([^<>\]\[' + u"\x00-\x20\x7f" + ur']+)(.*)$', re.UNICODE) -_protocolsPat = re.compile(ur'^(mailto:|irc://|https?://|ftp://)$', re.UNICODE) -_controlCharsPat = re.compile(ur'[\]\[<>"' + u"\\x00-\\x20\\x7F" + ur']]', re.UNICODE) -_hostnamePat = re.compile(ur'^([^:]+:)(//[^/]+)?(.*)$', re.UNICODE) -_stripPat = re.compile(u'\\s|\u00ad|\u1806|\u200b|\u2060|\ufeff|\u03f4|\u034f|\u180b|\u180c|\u180d|\u200c|\u200d|[\ufe00-\ufe0f]', re.UNICODE) -_zomgPat = re.compile(ur'^(:*)\{\|(.*)$', re.UNICODE) -_headerPat = re.compile(ur"<[Hh]([1-6])(.*?)>(.*?)", re.UNICODE) -_templateSectionPat = re.compile(ur"", re.UNICODE) -_tagPat = re.compile(ur"<.*?>", re.UNICODE) -_startRegexHash = {} -_endRegexHash = {} -_endCommentPat = re.compile(ur'(-->)', re.UNICODE) -_extractTagsAndParams_n = 1 -_guillemetLeftPat = re.compile(ur'(.) (\?|:|;|!|\302\273)', re.UNICODE) -_guillemetRightPat = re.compile(ur'(\302\253) ', re.UNICODE) - -def setupAttributeWhitelist(): - common = ( u'id', u'class', u'lang', u'dir', u'title', u'style' ) - block = common + (u'align',) - tablealign = ( u'align', u'char', u'charoff', u'valign' ) - tablecell = ( u'abbr', - u'axis', - u'headers', - u'scope', - u'rowspan', - u'colspan', - u'nowrap', # deprecated - u'width', # deprecated - u'height', # deprecated - u'bgcolor' # deprecated - ) - return { - u'div': block, - u'center': common, # deprecated - u'span': block, # ?? - u'h1': block, - u'h2': block, - u'h3': block, - u'h4': block, - u'h5': block, - u'h6': block, - u'em': common, - u'strong': common, - u'cite': common, - u'code': common, - u'var': common, - u'img': common + (u'src', u'alt', u'width', u'height',), - u'blockquote': common + (u'cite',), - u'sub': common, - u'sup': common, - u'p': block, - u'br': (u'id', u'class', u'title', u'style', u'clear',), - u'pre': common + (u'width',), - u'ins': common + (u'cite', u'datetime'), - u'del': common + (u'cite', u'datetime'), - u'ul': common + (u'type',), - u'ol': common + (u'type', u'start'), - u'li': common + (u'type', u'value'), - u'dl': common, - u'dd': common, - u'dt': common, - u'table': common + ( u'summary', u'width', u'border', u'frame', - u'rules', u'cellspacing', u'cellpadding', - u'align', u'bgcolor', - ), - u'caption': common + (u'align',), - u'thead': common + tablealign, - u'tfoot': common + tablealign, - u'tbody': common + tablealign, - u'colgroup': common + ( u'span', u'width' ) + tablealign, - u'col': common + ( u'span', u'width' ) + tablealign, - u'tr': common + ( u'bgcolor', ) + tablealign, - u'td': common + tablecell + tablealign, - u'th': common + tablecell + tablealign, - u'tt': common, - u'b': common, - u'i': common, - u'big': common, - u'small': common, - u'strike': common, - u's': common, - u'u': common, - u'font': common + ( u'size', u'color', u'face' ), - u'hr': common + ( u'noshade', u'size', u'width' ), - u'ruby': common, - u'rb': common, - u'rt': common, #array_merge( $common, array( 'rbspan' ) ), - u'rp': common, - } -_whitelist = setupAttributeWhitelist() -_page_cache = {} -env = {} - -def registerTagHook(tag, function): - mTagHooks[tag] = function - -class BaseParser(object): - def __init__(self): - self.uniq_prefix = u"\x07UNIQ" + unicode(random.randint(1, 1000000000)) - self.strip_state = {} - self.arg_stack = [] - self.env = env - self.keep_env = (env != {}) - - def __del__(self): - if not self.keep_env: - global env - env = {} - - ''' Used to store objects in the environment - used to prevent recursive imports ''' - def store_object(self, namespace, key, value=True): - # Store the item to not reprocess it - if namespace not in self.env: - self.env[namespace] = {} - self.env[namespace][key] = value - - def has_object(self, namespace, key): - if namespace not in self.env: - self.env[namespace] = {} - if hasattr(self, 'count'): - data = self.env[namespace] - test = key in data - self.count = True - return key in self.env[namespace] - - def retrieve_object(self, namespace, key, default=None): - if not self.env.get(namespace): - self.env[namespace] = {} - return self.env[namespace].get(key, default) - - def parse(self, text): - utf8 = isinstance(text, str) - text = to_unicode(text) - if text[-1:] != u'\n': - text = text + u'\n' - taggedNewline = True - else: - taggedNewline = False - - text = self.strip(text) - text = self.removeHtmlTags(text) - text = self.parseHorizontalRule(text) - text = self.parseAllQuotes(text) - text = self.replaceExternalLinks(text) - text = self.unstrip(text) - text = self.fixtags(text) - text = self.doBlockLevels(text, True) - text = self.unstripNoWiki(text) - text = text.split(u'\n') - text = u'\n'.join(text) - if taggedNewline and text[-1:] == u'\n': - text = text[:-1] - if utf8: - return text.encode("utf-8") - return text - - def strip(self, text, stripcomments=False, dontstrip=[]): - render = True - - commentState = {} - - elements = ['nowiki',] + mTagHooks.keys() - if True: #wgRawHtml - elements.append('html') - - # Removing $dontstrip tags from $elements list (currently only 'gallery', fixing bug 2700) - for k in dontstrip: - if k in elements: - del elements[k] - - matches = {} - text = self.extractTagsAndParams(elements, text, matches) - - for marker in matches: - element, content, params, tag = matches[marker] - if render: - tagName = element.lower() - if tagName == u'!--': - # comment - output = tag - if tag[-3:] != u'-->': - output += "-->" - elif tagName == u'html': - output = content - elif tagName == u'nowiki': - output = content.replace(u'&', u'&').replace(u'<', u'<').replace(u'>', u'>') - else: - if tagName in mTagHooks: - output = mTagHooks[tagName](self, content, params) - else: - output = content.replace(u'&', u'&').replace(u'<', u'<').replace(u'>', u'>') - else: - # Just stripping tags; keep the source - output = tag - - # Unstrip the output, because unstrip() is no longer recursive so - # it won't do it itself - output = self.unstrip(output) - - if not stripcomments and element == u'!--': - commentState[marker] = output - elif element == u'html' or element == u'nowiki': - if 'nowiki' not in self.strip_state: - self.strip_state['nowiki'] = {} - self.strip_state['nowiki'][marker] = output - else: - if 'general' not in self.strip_state: - self.strip_state['general'] = {} - self.strip_state['general'][marker] = output - - # Unstrip comments unless explicitly told otherwise. - # (The comments are always stripped prior to this point, so as to - # not invoke any extension tags / parser hooks contained within - # a comment.) - if not stripcomments: - # Put them all back and forget them - for k in commentState: - v = commentState[k] - text = text.replace(k, v) - - return text - - def removeHtmlTags(self, text): - """convert bad tags into HTML identities""" - sb = [] - text = self.removeHtmlComments(text) - bits = text.split(u'<') - sb.append(bits.pop(0)) - tagstack = [] - tablestack = tagstack - for x in bits: - m = _tagPattern.match(x) - if not m: - continue - slash, t, params, brace, rest = m.groups() - t = t.lower() - badtag = False - if t in _htmlelements: - # Check our stack - if slash: - # Closing a tag... - if t in _htmlsingleonly or len(tagstack) == 0: - badtag = True - else: - ot = tagstack.pop() - if ot != t: - if ot in _htmlsingleallowed: - # Pop all elements with an optional close tag - # and see if we find a match below them - optstack = [] - optstack.append(ot) - while True: - if len(tagstack) == 0: - break - ot = tagstack.pop() - if ot == t or ot not in _htmlsingleallowed: - break - optstack.append(ot) - if t != ot: - # No match. Push the optinal elements back again - badtag = True - tagstack += reversed(optstack) - else: - tagstack.append(ot) - #
  • can be nested in
      or
        , skip those cases: - if ot not in _htmllist and t in _listtags: - badtag = True - elif t == u'table': - if len(tablestack) == 0: - bagtag = True - else: - tagstack = tablestack.pop() - newparams = u'' - else: - # Keep track for later - if t in _tabletags and u'table' not in tagstack: - badtag = True - elif t in tagstack and t not in _htmlnest: - badtag = True - # Is it a self-closed htmlpair? (bug 5487) - elif brace == u'/>' and t in _htmlpairs: - badTag = True - elif t in _htmlsingleonly: - # Hack to force empty tag for uncloseable elements - brace = u'/>' - elif t in _htmlsingle: - # Hack to not close $htmlsingle tags - brace = None - else: - if t == u'table': - tablestack.append(tagstack) - tagstack = [] - tagstack.append(t) - newparams = self.fixTagAttributes(params, t) - if not badtag: - rest = rest.replace(u'>', u'>') - if brace == u'/>': - close = u' /' - else: - close = u'' - sb.append(u'<') - sb.append(slash) - sb.append(t) - sb.append(newparams) - sb.append(close) - sb.append(u'>') - sb.append(rest) - continue - sb.append(u'<') - sb.append(x.replace(u'>', u'>')) - - # Close off any remaining tags - while tagstack: - t = tagstack.pop() - sb.append(u'\n') - if t == u'table': - if not tablestack: - break - tagstack = tablestack.pop() - - return u''.join(sb) - - def removeHtmlComments(self, text): - """remove comments from given text""" - sb = [] - start = text.find(u'', start) - if end == -1: - break - end += 3 - - spaceStart = max(0, start-1) - spaceEnd = end - while text[spaceStart] == u' ' and spaceStart > 0: - spaceStart -= 1 - while text[spaceEnd] == u' ': - spaceEnd += 1 - - if text[spaceStart] == u'\n' and text[spaceEnd] == u'\n': - sb.append(text[last:spaceStart]) - sb.append(u'\n') - last = spaceEnd+1 - else: - sb.append(text[last:spaceStart+1]) - last = spaceEnd - - start = text.find(u'' - - return result, mDTopen - - def nextItem(self, char, mDTopen): - if char == u'*' or char == '#': - return u'
      1. ', None - elif char == u':' or char == u';': - close = u'' - if mDTopen: - close = '' - if char == u';': - return close + u'
        ', True - else: - return close + u'
        ', False - return u'' - - def closeList(self, char, mDTopen): - if char == u'*': - return u'
    \n' - elif char == u'#': - return u'
  • \n' - elif char == u':': - if mDTopen: - return u'\n' - else: - return u'\n' - else: - return u'' - - def findColonNoLinks(self, text, before, after): - try: - pos = text.search(':') - except: - return False - - lt = text.find('<') - if lt == -1 or lt > pos: - # Easy; no tag nesting to worry about - before = text[0:pos] - after = text[0:pos+1] - return before, after, pos - - # Ugly state machine to walk through avoiding tags. - state = MW_COLON_STATE_TEXT; - stack = 0; - i = 0 - while i < len(text): - c = text[i]; - - if state == 0: # MW_COLON_STATE_TEXT: - if text[i] == '<': - # Could be either a tag or an tag - state = MW_COLON_STATE_TAGSTART - elif text[i] == ':': - if stack == 0: - # we found it - return text[0:i], text[i+1], i - else: - # Skip ahead looking for something interesting - try: - colon = text.search(':', i) - except: - return False - lt = text.find('<', i) - if stack == 0: - if lt == -1 or colon < lt: - # we found it - return text[0:colon], text[colon+1], i - if lt == -1: - break - # Skip ahead to next tag start - i = lt - state = MW_COLON_STATE_TAGSTART - elif state == 1: # MW_COLON_STATE_TAG: - # In a - if text[i] == '>': - stack += 1 - state = MW_COLON_STATE_TEXT - elif text[i] == '/': - state = MW_COLON_STATE_TAGSLASH - elif state == 2: # MW_COLON_STATE_TAGSTART: - if text[i] == '/': - state = MW_COLON_STATE_CLOSETAG - elif text[i] == '!': - state = MW_COLON_STATE_COMMENT - elif text[i] == '>': - # Illegal early close? This shouldn't happen D: - state = MW_COLON_STATE_TEXT - else: - state = MW_COLON_STATE_TAG - elif state == 3: # MW_COLON_STATE_CLOSETAG: - # In a - if text[i] == '>': - stack -= 1 - if stack < 0: - return False - state = MW_COLON_STATE_TEXT - elif state == MW_COLON_STATE_TAGSLASH: - if text[i] == '>': - # Yes, a self-closed tag - state = MW_COLON_STATE_TEXT - else: - # Probably we're jumping the gun, and this is an attribute - state = MW_COLON_STATE_TAG - elif state == 5: # MW_COLON_STATE_COMMENT: - if text[i] == '-': - state = MW_COLON_STATE_COMMENTDASH - elif state == MW_COLON_STATE_COMMENTDASH: - if text[i] == '-': - state = MW_COLON_STATE_COMMENTDASHDASH - else: - state = MW_COLON_STATE_COMMENT - elif state == MW_COLON_STATE_COMMENTDASHDASH: - if text[i] == '>': - state = MW_COLON_STATE_TEXT - else: - state = MW_COLON_STATE_COMMENT - else: - raise - if stack > 0: - return False - return False - - def doBlockLevels(self, text, linestart): - # Parsing through the text line by line. The main thing - # happening here is handling of block-level elements p, pre, - # and making lists from lines starting with * # : etc. - lastPrefix = u'' - mDTopen = inBlockElem = False - prefixLength = 0 - paragraphStack = False - _closeMatchPat = re.compile(ur"( 0: - tmpOutput, tmpMDTopen = self.nextItem(pref[commonPrefixLength-1], mDTopen) - output.append(tmpOutput) - if tmpMDTopen is not None: - mDTopen = tmpMDTopen - - while prefixLength > commonPrefixLength: - char = pref[commonPrefixLength:commonPrefixLength+1] - tmpOutput, tmpMDTOpen = self.openList(char, mLastSection) - if tmpMDTOpen: - mDTopen = True - output.append(tmpOutput) - mLastSection = u'' - mInPre = False - - if char == u';': - # FIXME: This is dupe of code above - term = t2 = u'' - z = self.findColonNoLinks(t, term, t2) - if z != False: - term, t2 = z[1:2] - t = t2 - output.append(term) - tmpOutput, tmpMDTopen = self.nextItem(u':', mDTopen) - output.append(tmpOutput) - if tmpMDTopen is not None: - mDTopen = tmpMDTopen - - commonPrefixLength += 1 - - lastPrefix = pref2 - - if prefixLength == 0: - # No prefix (not in list)--go to paragraph mode - # XXX: use a stack for nestable elements like span, table and div - openmatch = _openMatchPat.search(t) - closematch = _closeMatchPat.search(t) - if openmatch or closematch: - paragraphStack = False - output.append(self.closeParagraph(mLastSection)) - mLastSection = u'' - if preCloseMatch: - mInPre = False - if preOpenMatch: - mInPre = True - inBlockElem = bool(not closematch) - elif not inBlockElem and not mInPre: - if t[0:1] == u' ' and (mLastSection == u'pre' or t.strip() != u''): - # pre - if mLastSection != u'pre': - paragraphStack = False - output.append(self.closeParagraph(u'') + u'
    ')
    -							mInPre = False
    -							mLastSection = u'pre'
    -						t = t[1:]
    -					else:
    -						# paragraph
    -						if t.strip() == u'':
    -							if paragraphStack:
    -								output.append(paragraphStack + u'
    ') - paragraphStack = False - mLastSection = u'p' - else: - if mLastSection != u'p': - output.append(self.closeParagraph(mLastSection)) - mLastSection = u'' - mInPre = False - paragraphStack = u'

    ' - else: - paragraphStack = u'

    ' - else: - if paragraphStack: - output.append(paragraphStack) - paragraphStack = False - mLastSection = u'p' - elif mLastSection != u'p': - output.append(self.closeParagraph(mLastSection) + u'

    ') - mLastSection = u'p' - mInPre = False - - # somewhere above we forget to get out of pre block (bug 785) - if preCloseMatch and mInPre: - mInPre = False - - if paragraphStack == False: - output.append(t + u"\n") - - while prefixLength: - output.append(self.closeList(pref2[prefixLength-1], mDTopen)) - mDTopen = False - prefixLength -= 1 - - if mLastSection != u'': - output.append(u'') - mLastSection = u'' - - return ''.join(output) - -class Parser(BaseParser): - def __init__(self, show_toc=True): - super(Parser, self).__init__() - self.show_toc = show_toc - - def parse(self, text): - utf8 = isinstance(text, str) - text = to_unicode(text) - if text[-1:] != u'\n': - text = text + u'\n' - taggedNewline = True - else: - taggedNewline = False - - text = self.strip(text) - text = self.removeHtmlTags(text) - text = self.doTableStuff(text) - text = self.parseHorizontalRule(text) - text = self.checkTOC(text) - text = self.parseHeaders(text) - text = self.parseAllQuotes(text) - text = self.replaceExternalLinks(text) - if not self.show_toc and text.find(u"") == -1: - self.show_toc = False - text = self.formatHeadings(text, True) - text = self.unstrip(text) - text = self.fixtags(text) - text = self.doBlockLevels(text, True) - text = self.unstripNoWiki(text) - text = text.split(u'\n') - text = u'\n'.join(text) - if taggedNewline and text[-1:] == u'\n': - text = text[:-1] - if utf8: - return text.encode("utf-8") - return text - - def checkTOC(self, text): - if text.find(u"__NOTOC__") != -1: - text = text.replace(u"__NOTOC__", u"") - self.show_toc = False - if text.find(u"__TOC__") != -1: - text = text.replace(u"__TOC__", u"") - self.show_toc = True - return text - - def doTableStuff(self, text): - t = text.split(u"\n") - td = [] # Is currently a td tag open? - ltd = [] # Was it TD or TH? - tr = [] # Is currently a tr tag open? - ltr = [] # tr attributes - has_opened_tr = [] # Did this table open a element? - indent_level = 0 # indent level of the table - - for k, x in zip(range(len(t)), t): - x = x.strip() - fc = x[0:1] - matches = _zomgPat.match(x) - if matches: - indent_level = len(matches.group(1)) - - attributes = self.unstripForHTML(matches.group(2)) - - t[k] = u'

    '*indent_level + u'' - td.append(False) - ltd.append(u'') - tr.append(False) - ltr.append(u'') - has_opened_tr.append(False) - elif len(td) == 0: - pass - elif u'|}' == x[0:2]: - z = u"" + x[2:] - l = ltd.pop() - if not has_opened_tr.pop(): - z = u"" + z - if tr.pop(): - z = u"" + z - if td.pop(): - z = u'' + z - ltr.pop() - t[k] = z + u'
    '*indent_level - elif u'|-' == x[0:2]: # Allows for |------------- - x = x[1:] - while x != u'' and x[0:1] == '-': - x = x[1:] - z = '' - l = ltd.pop() - has_opened_tr.pop() - has_opened_tr.append(True) - if tr.pop(): - z = u'' + z - if td.pop(): - z = u'' + z - ltr.pop() - t[k] = z - tr.append(False) - td.append(False) - ltd.append(u'') - attributes = self.unstripForHTML(x) - ltr.append(self.fixTagAttributes(attributes, u'tr')) - elif u'|' == fc or u'!' == fc or u'|+' == x[0:2]: # Caption - # x is a table row - if u'|+' == x[0:2]: - fc = u'+' - x = x[1:] - x = x[1:] - if fc == u'!': - x = x.replace(u'!!', u'||') - # Split up multiple cells on the same line. - # FIXME: This can result in improper nesting of tags processed - # by earlier parser steps, but should avoid splitting up eg - # attribute values containing literal "||". - x = x.split(u'||') - - t[k] = u'' - - # Loop through each table cell - for theline in x: - z = '' - if fc != u'+': - tra = ltr.pop() - if not tr.pop(): - z = u'\n' - tr.append(True) - ltr.append(u'') - has_opened_tr.pop() - has_opened_tr.append(True) - l = ltd.pop() - if td.pop(): - z = u'' + z - if fc == u'|': - l = u'td' - elif fc == u'!': - l = u'th' - elif fc == u'+': - l = u'caption' - else: - l = u'' - ltd.append(l) - - #Cell parameters - y = theline.split(u'|', 1) - # Note that a '|' inside an invalid link should not - # be mistaken as delimiting cell parameters - if y[0].find(u'[[') != -1: - y = [theline] - - if len(y) == 1: - y = z + u"<" + l + u">" + y[0] - else: - attributes = self.unstripForHTML(y[0]) - y = z + u"<" + l + self.fixTagAttributes(attributes, l) + u">" + y[1] - - t[k] += y - td.append(True) - - while len(td) > 0: - l = ltd.pop() - if td.pop(): - t.append(u'') - if tr.pop(): - t.append(u'') - if not has_opened_tr.pop(): - t.append(u'') - t.append(u'') - - text = u'\n'.join(t) - # special case: don't return empty table - if text == u"\n\n
    ": - text = u'' - - return text - - def formatHeadings(self, text, isMain): - """ - This function accomplishes several tasks: - 1) Auto-number headings if that option is enabled - 2) Add an [edit] link to sections for logged in users who have enabled the option - 3) Add a Table of contents on the top for users who have enabled the option - 4) Auto-anchor headings - - It loops through all headlines, collects the necessary data, then splits up the - string and re-inserts the newly formatted headlines. - """ - doNumberHeadings = False - showEditLink = True # Can User Edit - - if text.find(u"__NOEDITSECTION__") != -1: - showEditLink = False - text = text.replace(u"__NOEDITSECTION__", u"") - - # Get all headlines for numbering them and adding funky stuff like [edit] - # links - this is for later, but we need the number of headlines right now - matches = _headerPat.findall(text) - numMatches = len(matches) - - # if there are fewer than 4 headlines in the article, do not show TOC - # unless it's been explicitly enabled. - enoughToc = self.show_toc and (numMatches >= 4 or text.find(u"") != -1) - - # Allow user to stipulate that a page should have a "new section" - # link added via __NEWSECTIONLINK__ - showNewSection = False - if text.find(u"__NEWSECTIONLINK__") != -1: - showNewSection = True - text = text.replace(u"__NEWSECTIONLINK__", u"") - # if the string __FORCETOC__ (not case-sensitive) occurs in the HTML, - # override above conditions and always show TOC above first header - if text.find(u"__FORCETOC__") != -1: - self.show_toc = True - enoughToc = True - text = text.replace(u"__FORCETOC__", u"") - # Never ever show TOC if no headers - if numMatches < 1: - enoughToc = False - - # headline counter - headlineCount = 0 - sectionCount = 0 # headlineCount excluding template sections - - # Ugh .. the TOC should have neat indentation levels which can be - # passed to the skin functions. These are determined here - toc = [] - head = {} - sublevelCount = {} - levelCount = {} - toclevel = 0 - level = 0 - prevlevel = 0 - toclevel = 0 - prevtoclevel = 0 - refers = {} - refcount = {} - wgMaxTocLevel = 5 - - for match in matches: - headline = match[2] - istemplate = False - templatetitle = u'' - templatesection = 0 - numbering = [] - - m = _templateSectionPat.search(headline) - if m: - istemplate = True - templatetitle = b64decode(m[0]) - templatesection = 1 + int(b64decode(m[1])) - headline = _templateSectionPat.sub(u'', headline) - - if toclevel: - prevlevel = level - prevtoclevel = toclevel - - level = matches[headlineCount][0] - - if doNumberHeadings or enoughToc: - if level > prevlevel: - toclevel += 1 - sublevelCount[toclevel] = 0 - if toclevel < wgMaxTocLevel: - toc.append(u'\n
      ') - elif level < prevlevel and toclevel > 1: - # Decrease TOC level, find level to jump to - - if toclevel == 2 and level < levelCount[1]: - toclevel = 1 - else: - for i in range(toclevel, 0, -1): - if levelCount[i] == level: - # Found last matching level - toclevel = i - break - elif levelCount[i] < level: - toclevel = i + 1 - break - if toclevel < wgMaxTocLevel: - toc.append(u"\n") - toc.append(u"
    \n\n" * max(prevtoclevel - toclevel, 0)) - else: - if toclevel < wgMaxTocLevel: - toc.append(u"\n") - - levelCount[toclevel] = level - - # count number of headlines for each level - sublevelCount[toclevel] += 1 - for i in range(1, toclevel+1): - if sublevelCount[i]: - numbering.append(to_unicode(sublevelCount[i])) - - # The canonized header is a version of the header text safe to use for links - # Avoid insertion of weird stuff like by expanding the relevant sections - canonized_headline = self.unstrip(headline) - canonized_headline = self.unstripNoWiki(canonized_headline) - - # -- don't know what to do with this yet. - # Remove link placeholders by the link text. - # - # turns into - # link text with suffix - # $canonized_headline = preg_replace( '//e', - # "\$this->mLinkHolders['texts'][\$1]", - # $canonized_headline ); - # $canonized_headline = preg_replace( '//e', - # "\$this->mInterwikiLinkHolders['texts'][\$1]", - # $canonized_headline ); - - # strip out HTML - canonized_headline = _tagPat.sub(u'', canonized_headline) - tocline = canonized_headline.strip() - # Save headline for section edit hint before it's escaped - headline_hint = tocline - canonized_headline = self.escapeId(tocline) - refers[headlineCount] = canonized_headline - - # count how many in assoc. array so we can track dupes in anchors - if canonized_headline not in refers: - refers[canonized_headline] = 1 - else: - refers[canonized_headline] += 1 - refcount[headlineCount] = refers[canonized_headline] - - numbering = '.'.join(numbering) - - # Don't number the heading if it is the only one (looks silly) - if doNumberHeadings and numMatches > 1: - # the two are different if the line contains a link - headline = numbering + u' ' + headline - - # Create the anchor for linking from the TOC to the section - anchor = canonized_headline; - if refcount[headlineCount] > 1: - anchor += u'_' + unicode(refcount[headlineCount]) - - if enoughToc: - toc.append(u'\n
  • ') - toc.append(numbering) - toc.append(u' ') - toc.append(tocline) - toc.append(u'') - - # if showEditLink and (not istemplate or templatetitle != u""): - # if not head[headlineCount]: - # head[headlineCount] = u'' - # - # if istemplate: - # head[headlineCount] += sk.editSectionLinkForOther(templatetile, templatesection) - # else: - # head[headlineCount] += sk.editSectionLink(mTitle, sectionCount+1, headline_hint) - - # give headline the correct tag - if headlineCount not in head: - head[headlineCount] = [] - h = head[headlineCount] - h.append(u'') - h.append(matches[headlineCount][1].strip()) - h.append(headline.strip()) - h.append(u'') - - headlineCount += 1 - - if not istemplate: - sectionCount += 1 - - if enoughToc: - if toclevel < wgMaxTocLevel: - toc.append(u"
  • \n") - toc.append(u"\n\n" * max(0, toclevel - 1)) - #TODO: use gettext - #toc.insert(0, u'

    ' + _('Table of Contents') + '

    ') - toc.insert(0, u'

    Table of Contents

    ') - toc.append(u'\n
    ') - - # split up and insert constructed headlines - - blocks = _headerPat.split(text) - - i = 0 - len_blocks = len(blocks) - forceTocPosition = text.find(u"") - full = [] - while i < len_blocks: - j = i/4 - full.append(blocks[i]) - if enoughToc and not i and isMain and forceTocPosition == -1: - full += toc - toc = None - if j in head and head[j]: - full += head[j] - head[j] = None - i += 4 - full = u''.join(full) - if forceTocPosition != -1: - return full.replace(u"", u''.join(toc), 1) - else: - return full - -def parse(text, showToc=True): - """Returns HTML from MediaWiki markup""" - p = Parser(show_toc=showToc) - return p.parse(text) - -def parselite(text): - """Returns HTML from MediaWiki markup ignoring - without headings""" - p = BaseParser() - return p.parse(text) - -def truncate_url(url, length=40): - if len(url) <= length: - return url - import re - pattern = r'(/[^/]+/?)$' - match = re.search(pattern, url) - if not match: - return url - l = len(match.group(1)) - domain = url.replace(match.group(1), '') - firstpart = url[0:len(url)-l] - secondpart = match.group(1) - if firstpart == firstpart[0:length-3]: - secondpart = secondpart[0:length-3] + '...' - else: - firstpart = firstpart[0:length-3] - secondpart = '...' + secondpart - t_url = firstpart+secondpart - return t_url - -def to_unicode(text, charset=None): - """Convert a `str` object to an `unicode` object. - - If `charset` is given, we simply assume that encoding for the text, - but we'll use the "replace" mode so that the decoding will always - succeed. - If `charset` is ''not'' specified, we'll make some guesses, first - trying the UTF-8 encoding, then trying the locale preferred encoding, - in "replace" mode. This differs from the `unicode` builtin, which - by default uses the locale preferred encoding, in 'strict' mode, - and is therefore prompt to raise `UnicodeDecodeError`s. - - Because of the "replace" mode, the original content might be altered. - If this is not what is wanted, one could map the original byte content - by using an encoding which maps each byte of the input to an unicode - character, e.g. by doing `unicode(text, 'iso-8859-1')`. - """ - if not isinstance(text, str): - if isinstance(text, Exception): - # two possibilities for storing unicode strings in exception data: - try: - # custom __str__ method on the exception (e.g. PermissionError) - return unicode(text) - except UnicodeError: - # unicode arguments given to the exception (e.g. parse_date) - return ' '.join([to_unicode(arg) for arg in text.args]) - return unicode(text) - if charset: - return unicode(text, charset, 'replace') - else: - try: - return unicode(text, 'utf-8') - except UnicodeError: - return unicode(text, locale.getpreferredencoding(), 'replace') - -# tag hooks -mTagHooks = {} - -## IMPORTANT -## Make sure all hooks output CLEAN html. Escape any user input BEFORE it's returned - -# Arguments passed: -# - wiki environment instance -# - tag content -# - dictionary of attributes - -# quote example: -# quote -from cgi import escape - -def hook_quote(env, body, attributes={}): - text = [u'
    '] - if 'cite' in attributes: - text.append(u"%s wrote:\n" % escape(attributes['cite'])) - text.append(body.strip()) - text.append(u'
    ') - return u'\n'.join(text) -registerTagHook('quote', hook_quote) - -def safe_name(name=None, remove_slashes=True): - if name is None: - return None - name = str2url(name) - if remove_slashes: - name = re.sub(r"[^a-zA-Z0-9\-_\s\.]", "", name) - else: - name = re.sub(r"[^a-zA-Z0-9\-_\s\.\/]", "", name) - name = re.sub(r"[\s\._]", "-", name) - name = re.sub(r"[-]+", "-", name) - return name.strip("-").lower() - -def str2url(str): - """ - Takes a UTF-8 string and replaces all characters with the equivalent in 7-bit - ASCII. It returns a plain ASCII string usable in URLs. - """ - try: - str = str.encode('utf-8') - except: - pass - mfrom = "ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝßàáâãäåæçèéêëìíîï" - to = "AAAAAAECEEEEIIIIDNOOOOOOUUUUYSaaaaaaaceeeeiiii" - mfrom += "ñòóôõöøùúûüýÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģ" - to += "noooooouuuuyyaaaaaaccccccccddddeeeeeeeeeegggggggg" - mfrom += "ĤĥĦħĨĩĪīĬĭĮįİıĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘř" - to += "hhhhiiiiiiiiiijjkkkllllllllllnnnnnnnnnoooooooorrrrrr" - mfrom += "ŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſƀƂƃƄƅƇƈƉƊƐƑƒƓƔ" - to += "ssssssssttttttuuuuuuuuuuuuwwyyyzzzzzzfbbbbbccddeffgv" - mfrom += "ƖƗƘƙƚƝƞƟƠƤƦƫƬƭƮƯưƱƲƳƴƵƶǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟǠǡǢǣǤǥǦǧǨǩ" - to += "likklnnoopettttuuuuyyzzaaiioouuuuuuuuuueaaaaeeggggkk" - mfrom += "ǪǫǬǭǰǴǵǷǸǹǺǻǼǽǾǿȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȞȟȤȥȦȧȨȩ" - to += "oooojggpnnaaeeooaaaaeeeeiiiioooorrrruuuusstthhzzaaee" - mfrom += "ȪȫȬȭȮȯȰȱȲȳḀḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟḠḡḢḣḤḥḦḧḨḩḪḫ" - to += "ooooooooyyaabbbbbbccddddddddddeeeeeeeeeeffgghhhhhhhhhh" - mfrom += "ḬḭḮḯḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏṐṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟ" - to += "iiiikkkkkkllllllllmmmmmmnnnnnnnnoooooooopppprrrrrrrr" - mfrom += "ṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏẐẑẒẓẔẕ" - to += "ssssssssssttttttttuuuuuuuuuuvvvvwwwwwwwwwwxxxxxyzzzzzz" - mfrom += "ẖẗẘẙẚẛẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊị" - to += "htwyafaaaaaaaaaaaaaaaaaaaaaaaaeeeeeeeeeeeeeeeeiiii" - mfrom += "ỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹ" - to += "oooooooooooooooooooooooouuuuuuuuuuuuuuyyyyyyyy" - for i in zip(mfrom, to): - str = str.replace(*i) - return str - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/__init__.py b/document_page/wizard/__init__.py index e24534647f4..3348328b8c2 100644 --- a/document_page/wizard/__init__.py +++ b/document_page/wizard/__init__.py @@ -18,8 +18,7 @@ # along with this program. If not, see . # ############################################################################## - -import document_page_create_menu -import document_page_show_diff +from . import document_page_create_menu +from . import document_page_show_diff # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/document_page_create_menu.py b/document_page/wizard/document_page_create_menu.py index 87a63c69421..07bfb4eccfa 100644 --- a/document_page/wizard/document_page_create_menu.py +++ b/document_page/wizard/document_page_create_menu.py @@ -18,50 +18,43 @@ # along with this program. If not, see . # ############################################################################## +from openerp import models, fields, api -from openerp import SUPERUSER_ID -from openerp.osv import fields, osv - -class document_page_create_menu(osv.osv_memory): +class document_page_create_menu(models.TransientModel): """ Create Menu """ _name = "document.page.create.menu" _description = "Wizard Create Menu" - _columns = { - 'menu_name': fields.char('Menu Name', size=256, required=True), - 'menu_parent_id': fields.many2one('ir.ui.menu', 'Parent Menu', - required=True), - } + menu_name = fields.Char( + 'Menu Name', + required=True + ) + + menu_parent_id = fields.Many2one( + 'ir.ui.menu', + 'Parent Menu', + required=True + ) - def default_get(self, cr, uid, fields, context=None): - if context is None: - context = {} - res = super(document_page_create_menu, self).default_get(cr, uid, - fields, - context= - context) - page_id = context.get('active_id') - obj_page = self.pool.get('document.page') - page = obj_page.browse(cr, uid, page_id, context=context) + @api.model + def default_get(self, fields_list): + res = super(document_page_create_menu, self).default_get(fields_list) + page_id = self.env.context.get('active_id') + obj_page = self.env['document.page'] + page = obj_page.browse(page_id) res['menu_name'] = page.name return res - def document_page_menu_create(self, cr, uid, ids, context=None): - if context is None: - context = {} - obj_page = self.pool.get('document.page') - obj_menu = self.pool.get('ir.ui.menu') - obj_action = self.pool.get('ir.actions.act_window') - page_id = context.get('active_id', False) - page = obj_page.browse(cr, uid, page_id, context=context) + @api.multi + def document_page_menu_create(self): + obj_page = self.env['document.page'] + obj_menu = self.env['ir.ui.menu'] + obj_action = self.env['ir.actions.act_window'] + page_id = self.env.context.get('active_id', False) + page = obj_page.browse(page_id) - datas = self.browse(cr, uid, ids, context=context) - data = False - if datas: - data = datas[0] - if not data: - return {} + data = self[0] value = { 'name': 'Document Page', 'view_type': 'form', @@ -74,16 +67,18 @@ def document_page_menu_create(self, cr, uid, ids, context=None): value['domain'] = "[('parent_id','=',%d)]" % (page.id) value['res_id'] = page.id - action_id = obj_action.create(cr, SUPERUSER_ID, value) # only the super user is allowed to create menu due to security rules # on ir.values - menu_id = obj_menu.create(cr, SUPERUSER_ID, { + # see.: http://goo.gl/Y99S7V + action_id = obj_action.sudo().create(value) + + menu_id = obj_menu.sudo().create({ 'name': data.menu_name, 'parent_id': data.menu_parent_id.id, 'icon': 'STOCK_DIALOG_QUESTION', - 'action': 'ir.actions.act_window,' + str(action_id), - }, context) - obj_page.write(cr, uid, [page_id], {'menu_id': menu_id}) + 'action': 'ir.actions.act_window,' + str(action_id.id), + }) + page.write({'menu_id': menu_id.id}) return { 'type': 'ir.actions.client', 'tag': 'reload', diff --git a/document_page/wizard/document_page_create_menu_view.xml b/document_page/wizard/document_page_create_menu_view.xml index e4647179ad2..858aa0ed6a6 100644 --- a/document_page/wizard/document_page_create_menu_view.xml +++ b/document_page/wizard/document_page_create_menu_view.xml @@ -12,15 +12,23 @@
    -
    + + - + Create Menu ir.actions.act_window document.page.create.menu diff --git a/document_page/wizard/document_page_show_diff.py b/document_page/wizard/document_page_show_diff.py index bc47a8ff416..25a93de2c0a 100644 --- a/document_page/wizard/document_page_show_diff.py +++ b/document_page/wizard/document_page_show_diff.py @@ -18,46 +18,44 @@ # along with this program. If not, see . # ############################################################################## +from openerp import models, fields, _ +from openerp import exceptions -from openerp.osv import fields, osv -from openerp.tools.translate import _ - -class showdiff(osv.osv_memory): - """ Disp[ay Difference for History """ +class showdiff(models.TransientModel): + """ Display Difference for History """ _name = 'wizard.document.page.history.show_diff' - def get_diff(self, cr, uid, context=None): - if context is None: - context = {} - history = self.pool.get('document.page.history') - ids = context.get('active_ids', []) + def get_diff(self): + history = self.env["document.page.history"] + ids = self.env.context.get('active_ids', []) diff = "" if len(ids) == 2: if ids[0] > ids[1]: - diff = history.getDiff(cr, uid, ids[1], ids[0]) + diff = history.getDiff(ids[1], ids[0]) else: - diff = history.getDiff(cr, uid, ids[0], ids[1]) - + diff = history.getDiff(ids[0], ids[1]) elif len(ids) == 1: - old = history.browse(cr, uid, ids[0]) - nids = history.search(cr, uid, [('page_id', '=', old.page_id.id)]) - nids.sort() - diff = history.getDiff(cr, uid, ids[0], nids[-1]) + old = history.browse(ids[0]) + nids = history.search( + [('page_id', '=', old.page_id.id)], + order='id DESC', + limit=1 + ) + diff = history.getDiff(ids[0], nids.id) else: - raise osv.except_osv(_('Warning!'), _('You need to select minimum \ - one or maximum two history \ - revisions!')) + raise exceptions.Warning( + _("You need to select minimum one or maximum " + "two history revisions!") + ) return diff - _columns = { - 'diff': fields.text('Diff', readonly=True), - } - - _defaults = { - 'diff': get_diff - } + diff = fields.Text( + 'Diff', + readonly=True, + default=get_diff + ) # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/document_page_show_diff_view.xml b/document_page/wizard/document_page_show_diff_view.xml index e2d5ef1af4b..dbe973b364a 100644 --- a/document_page/wizard/document_page_show_diff_view.xml +++ b/document_page/wizard/document_page_show_diff_view.xml @@ -8,13 +8,19 @@ wizard.document.page.history.show_diff
    - +
    -
    + + Difference @@ -24,8 +30,10 @@ form new + + - ). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public license as -# published by the Free Software Foundation, either version 3 of the -# license, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABIlITY or FITNESS FOR A PARTICUlAR PURPOSE. See the -# GNU Affero General Public license for more details. -# -# You should have received a copy of the GNU Affero General Public license -# along with this program. If not, see . -# -############################################################################## - -from osv import osv -from tools.translate import _ - - -class wiki_make_index(osv.osv_memory): - """ Create Index For Selected Page """ - - _name = "wiki.make.index" - _description = "Create Index" - - def wiki_do_index(self, cr, uid, ids, context=None): - - """ Makes Index according to page hierarchy - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param ids: list of wiki index’s IDs - - """ - if context is None: - context = {} - data = context and context.get('active_ids', []) or [] - - if not data: - return {'type': 'ir.actions.act_window_close'} - - for index_obj in self.browse(cr, uid, ids, context=context): - wiki_pool = self.pool.get('wiki.wiki') - cr.execute("Select id, section from wiki_wiki where id IN %s \ - order by section ", (tuple(data),)) - lst0 = cr.fetchall() - if not lst0[0][1]: - raise osv.except_osv(_('Warning!'), _('There is no section in\ - this Page.')) - - lst = [] - s_ids = {} - - for l in lst0: - s_ids[l[1]] = l[0] - lst.append(l[1]) - - lst.sort() - val = None - - def toint(x): - try: - return int(x) - except: - return 1 - - lst = map(lambda x: map(toint, x.split('.')), lst) - - result = [] - current = ['0'] - current2 = [] - - for l in lst: - for pos in range(len(l)): - if pos >= len(current): - current.append('1') - continue - if (pos == len(l) - 1) or (pos >= len(current2)) or \ - (toint(l[pos]) > toint(current2[pos])): - current[pos] = str(toint(current[pos]) + 1) - current = current[:pos + 1] - if pos == len(l) - 1: - break - key = ('.'.join([str(x) for x in l])) - id = s_ids[key] - val = ('.'.join([str(x) for x in current[:]]), id) - - if val: - result.append(val) - current2 = l - - for rs in result: - wiki_pool.write(cr, uid, [rs[1]], {'section': rs[0]}) - - return {'type': 'ir.actions.act_window_close'} - -wiki_make_index() - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/wiki_make_index_view.xml b/document_page/wizard/wiki_make_index_view.xml deleted file mode 100644 index 90139c3afac..00000000000 --- a/document_page/wizard/wiki_make_index_view.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - Create Index - wiki.make.index - form - -
    - -
    -
    - - - - - Create Index - ir.actions.act_window - wiki.make.index - form - form - new - - - - - - -
    -
    diff --git a/document_page/wizard/wiki_wiki_page_open.py b/document_page/wizard/wiki_wiki_page_open.py deleted file mode 100644 index 80bbb583d13..00000000000 --- a/document_page/wizard/wiki_wiki_page_open.py +++ /dev/null @@ -1,71 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from osv import osv - - -class wiki_wiki_page_open(osv.osv_memory): - """ wizard Open Page """ - - _name = "wiki.wiki.page.open" - _description = "wiz open page" - - def open_wiki_page(self, cr, uid, ids, context=None): - - """ Opens Wiki Page of Group - @param cr: the current row, from the database cursor, - @param uid: the current user’s ID for security checks, - @param ids: List of open wiki page’s IDs - @return: dictionay of open wiki window on give group id - """ - if context is None: - context = {} - group_ids = context.get('active_ids', []) - for group in self.pool.get('wiki.groups').browse(cr, uid, group_ids, - context=context): - value = { - 'domain': "[('group_id','=',%d)]" % (group.id), - 'name': 'Wiki Page', - 'view_type': 'form', - 'view_mode': 'form,tree', - 'res_model': 'wiki.wiki', - 'view_id': False, - 'type': 'ir.actions.act_window', - } - if group.method == 'page': - value['res_id'] = group.home.id - elif group.method == 'list': - value['view_type'] = 'form' - value['view_mode'] = 'tree,form' - elif group.method == 'tree': - view_id = self.pool.get('ir.ui.view').\ - search(cr, uid, [('name', '=', - 'wiki.wiki.tree.children')]) - value['view_id'] = view_id - value['domain'] = [('group_id', '=', group.id), ('parent_id', '=', - False)] - value['view_type'] = 'tree' - - return value - -wiki_wiki_page_open() - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/document_page/wizard/wiki_wiki_page_open_view.xml b/document_page/wizard/wiki_wiki_page_open_view.xml deleted file mode 100644 index 49f333e453f..00000000000 --- a/document_page/wizard/wiki_wiki_page_open_view.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - Open Page - wiki.wiki.page.open - form - -
    -
    -
    - - - - - Open Page - ir.actions.act_window - wiki.wiki.page.open - form - form - new - -
    -
    From a2d9fd5d3260581395eeacb785914c7b3b126efe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Faure-Lacroix?= Date: Tue, 10 Mar 2015 18:43:55 +0300 Subject: [PATCH 03/31] [FIX+IMP] document_page: * Add dependency to knowledge * Adding hack in document_page_history to allow calling method that don't exists * document_page_history don't have _sql attribute * Filter more fields --- document_page/__openerp__.py | 2 +- document_page/document_page.py | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/document_page/__openerp__.py b/document_page/__openerp__.py index 5aaf8983401..291a62bc208 100644 --- a/document_page/__openerp__.py +++ b/document_page/__openerp__.py @@ -32,7 +32,7 @@ 'website': 'http://www.openerp.com/', 'license': 'AGPL-3', 'depends': [ - 'knowledge' + 'knowledge', ], 'data': [ 'wizard/document_page_create_menu_view.xml', diff --git a/document_page/document_page.py b/document_page/document_page.py index 8983ba0044f..57e6d0501c7 100644 --- a/document_page/document_page.py +++ b/document_page/document_page.py @@ -18,9 +18,12 @@ # along with this program. If not, see . # ############################################################################## +import logging import difflib from openerp import models, fields, api, _ +_logger = logging.getLogger(__name__) + class document_page(models.Model): _name = "document.page" @@ -177,3 +180,14 @@ def getDiff(self, v1, v2): "Revision-{}".format(v2), context=True ) + + def __getattr__(self, attr): + """Return a dummy callabale""" + if attr in ['_sql', 'init', '_ids']: + raise AttributeError + + _logger.warning( + "Trying to access attribute %s on document_page_history", + attr + ) + return (lambda *a, **b: None) From 7399bb22dd01a985f08913d2e3ff89e67afe1d41 Mon Sep 17 00:00:00 2001 From: Matjaz Mozetic Date: Mon, 13 Apr 2015 07:30:48 +0200 Subject: [PATCH 04/31] Slovene translations added --- document_page/i18n/sl.po | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/document_page/i18n/sl.po b/document_page/i18n/sl.po index bbf26aba606..6c682cacc31 100644 --- a/document_page/i18n/sl.po +++ b/document_page/i18n/sl.po @@ -1,21 +1,25 @@ # Slovenian translation for openobject-addons # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. # +# FIRST AUTHOR , 2012. +# Matjaž Mozetič , 2015. msgid "" msgstr "" "Project-Id-Version: openobject-addons\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2013-06-07 19:37+0000\n" -"PO-Revision-Date: 2013-11-10 09:04+0000\n" -"Last-Translator: Darja Zorman \n" -"Language-Team: Slovenian \n" +"PO-Revision-Date: 2015-03-27 11:27+0100\n" +"Last-Translator: Matjaž Mozetič \n" +"Language-Team: Slovenian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-11-21 06:08+0000\n" -"X-Generator: Launchpad (build 16831)\n" +"X-Generator: Lokalize 1.5\n" +"Language: sl\n" +"Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || n%" +"100==4 ? 3 : 0);\n" #. module: document_page #: view:document.page:0 @@ -29,7 +33,7 @@ msgstr "Kategorija" #: view:document.page:0 #: field:document.page,write_uid:0 msgid "Last Contributor" -msgstr "" +msgstr "Zadnji prispeval" #. module: document_page #: view:document.page:0 @@ -64,7 +68,7 @@ msgstr "Vsebina" #. module: document_page #: view:document.page:0 msgid "Group By..." -msgstr "" +msgstr "Združi po..." #. module: document_page #: view:document.page:0 @@ -91,7 +95,7 @@ msgstr "čarovnik za kreiranje menija" #. module: document_page #: field:document.page,type:0 msgid "Type" -msgstr "" +msgstr "Tip" #. module: document_page #: model:ir.model,name:document_page.model_wizard_document_page_history_show_diff @@ -243,14 +247,14 @@ msgstr "Ustvari menu" #. module: document_page #: field:document.page,display_content:0 msgid "Displayed Content" -msgstr "" +msgstr "Prikazana vsebina" #. module: document_page #: code:addons/document_page/document_page.py:129 #: code:addons/document_page/wizard/document_page_show_diff.py:50 #, python-format msgid "Warning!" -msgstr "" +msgstr "Opozorilo!" #. module: document_page #: view:document.page.create.menu:0 @@ -266,9 +270,10 @@ msgstr "Razlika" #. module: document_page #: view:document.page:0 msgid "Document Type" -msgstr "" +msgstr "Tip dokumenta" #. module: document_page #: field:document.page,child_ids:0 msgid "Children" -msgstr "" +msgstr "Podrejeno" + From 605294f35119c042d4189a097e2e94e7e7296c52 Mon Sep 17 00:00:00 2001 From: Glen Sojo Date: Thu, 23 Jul 2015 12:50:52 -0600 Subject: [PATCH 05/31] [FIX+IMP] document_page: * Changed history widget to html. * Improved views and added followers to pages. * Updated document_page pot and es translations. * document_page:^Cissing dependency. --- document_page/__openerp__.py | 1 + document_page/document_page.py | 1 + document_page/document_page_view.xml | 169 +++- document_page/i18n/document_page.pot | 305 ++++--- document_page/i18n/es.po | 414 ++++++---- document_page/i18n/es_CR.po | 765 +++++++----------- .../wizard/document_page_create_menu.py | 5 +- 7 files changed, 875 insertions(+), 785 deletions(-) diff --git a/document_page/__openerp__.py b/document_page/__openerp__.py index 291a62bc208..e11755abed1 100644 --- a/document_page/__openerp__.py +++ b/document_page/__openerp__.py @@ -33,6 +33,7 @@ 'license': 'AGPL-3', 'depends': [ 'knowledge', + 'mail', ], 'data': [ 'wizard/document_page_create_menu_view.xml', diff --git a/document_page/document_page.py b/document_page/document_page.py index 57e6d0501c7..21da27709a4 100644 --- a/document_page/document_page.py +++ b/document_page/document_page.py @@ -27,6 +27,7 @@ class document_page(models.Model): _name = "document.page" + _inherit = ['mail.thread'] _description = "Document Page" _order = 'name' diff --git a/document_page/document_page_view.xml b/document_page/document_page_view.xml index e9990ef2d8f..7f7ab50d932 100644 --- a/document_page/document_page_view.xml +++ b/document_page/document_page_view.xml @@ -44,39 +44,58 @@ document.page.form document.page -
    - -

    - + + + +

    - + + + + + + + + - - - - - -
    - -
    -