From 41bcedc6768f657d8ed913740c606f1fdbc68122 Mon Sep 17 00:00:00 2001 From: Yoshinori Okuji <yo@nexedi.com> Date: Mon, 21 Apr 2008 15:50:02 +0000 Subject: [PATCH] not used any longer git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@20716 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/CMFTranslation/.cvsignore | 1 - product/CMFTranslation/CREDITS.txt | 0 product/CMFTranslation/GPL.txt | 340 ---------- product/CMFTranslation/INSTALL.txt | 168 ----- .../Localizer_fast_lang_select.patch | 29 - product/CMFTranslation/README.txt | 53 -- product/CMFTranslation/TODO.txt | 7 - product/CMFTranslation/TranslationTool.py | 303 --------- product/CMFTranslation/VERSION.txt | 1 - product/CMFTranslation/ZPL.txt | 59 -- product/CMFTranslation/__init__.py | 95 --- .../dtml/explainTranslationTool.dtml | 40 -- product/CMFTranslation/help/migration.stx | 14 - product/CMFTranslation/kbabel.png | Bin 54602 -> 0 bytes product/CMFTranslation/localizer.diff | 228 ------- product/CMFTranslation/migrate_content.zexp | Bin 551 -> 0 bytes .../skins/content18/TranslatedBody.py | 42 -- .../skins/content18/TranslatedDescription.py | 46 -- .../skins/content18/TranslatedTitle.py | 46 -- .../skins/content18/TranslatedTitle_or_id.py | 46 -- .../content18/discussionitem18_view.dtml | 24 - .../skins/content18/document18_view.dtml | 16 - .../skins/content18/favorite18_view.dtml | 23 - .../skins/content18/file18_view.dtml | 28 - .../skins/content18/folder18_view.dtml | 49 -- .../skins/content18/folder_contents.dtml | 164 ----- .../skins/content18/getTranslatedBody.py | 1 - .../content18/getTranslatedDescription.py | 1 - .../skins/content18/getTranslatedTitle.py | 1 - .../skins/content18/getTranslatedTitleOrId.py | 1 - .../skins/content18/image18_view.dtml | 19 - .../skins/content18/link18_view.dtml | 25 - .../skins/content18/newsitem18_view.dtml | 28 - .../skins/content18/translation_edit.py | 69 -- .../content18/translation_edit_form.dtml | 84 --- .../content18/translation_register_form.dtml | 65 -- .../content18/translation_status_modify.py | 66 -- .../content18/translation_submit_form.dtml | 65 -- .../skins/content18/translation_template.dtml | 26 - .../skins/content18/translation_view.dtml | 16 - .../skins/nexedi/CurrentSection.py | 29 - .../skins/nexedi/CurrentSubSection.py | 31 - product/CMFTranslation/skins/nexedi/TODO | 3 - .../skins/nexedi/breadcrumb.dtml | 6 - .../skins/nexedi/change_language.py | 15 - .../skins/nexedi/combined_subjects.py | 40 -- .../skins/nexedi/content_hide_form.dtml | 81 --- .../skins/nexedi/content_publish_form.dtml | 80 --- .../skins/nexedi/content_reject_form.dtml | 78 --- .../skins/nexedi/content_release_form.dtml | 81 --- .../skins/nexedi/content_retract_form.dtml | 78 --- .../skins/nexedi/content_show_form.dtml | 82 --- .../skins/nexedi/content_submit_form.dtml | 83 --- .../skins/nexedi/corporate_workflow.png | Bin 8835 -> 0 bytes .../skins/nexedi/default_stylesheet.dtml | 589 ----------------- .../skins/nexedi/document18_miniprint.dtml | 44 -- .../skins/nexedi/document18_print.dtml | 44 -- .../skins/nexedi/document18_view.dtml | 16 - .../skins/nexedi/document_print.dtml | 43 -- .../skins/nexedi/document_view.dtml | 16 - .../CMFTranslation/skins/nexedi/favicon.ico | Bin 281 -> 0 bytes .../CMFTranslation/skins/nexedi/fileprint.png | Bin 1210 -> 0 bytes .../skins/nexedi/folder18_view.dtml | 61 -- .../skins/nexedi/folder_localrole_form.dtml | 140 ---- .../skins/nexedi/getLocalizedPath.py | 43 -- .../CMFTranslation/skins/nexedi/index_html | 38 -- .../skins/nexedi/index_html.dtml | 38 -- .../skins/nexedi/language_selector.dtml | 19 - .../skins/nexedi/latest_box.dtml | 85 --- .../skins/nexedi/list_subtopics.pt | 6 - .../skins/nexedi/list_topic_vocabulary.dtml | 6 - .../skins/nexedi/local_absolute_url.py | 15 - product/CMFTranslation/skins/nexedi/logo.png | Bin 6140 -> 0 bytes .../skins/nexedi/mail_password.py | 13 - .../CMFTranslation/skins/nexedi/menu_box.pt | 37 -- .../CMFTranslation/skins/nexedi/news_box.dtml | 51 -- .../skins/nexedi/newsitem18_print.dtml | 55 -- .../skins/nexedi/newsitem18_view.dtml | 35 - .../skins/nexedi/newsitem_mail_form.dtml | 51 -- .../CMFTranslation/skins/nexedi/newsitem_view | 27 - .../skins/nexedi/newsitem_view.dtml | 27 - .../nexedi/pr_printable_html_header.dtml | 53 -- .../skins/nexedi/pr_printable_stylesheet.dtml | 606 ----------------- .../skins/nexedi/printable_html_footer.dtml | 7 - .../skins/nexedi/printable_html_header.dtml | 39 -- .../skins/nexedi/printable_stylesheet.dtml | 617 ------------------ .../skins/nexedi/public_subtopics.py | 22 - .../skins/nexedi/quick_login.dtml | 84 --- .../skins/nexedi/recent_additions.dtml | 112 ---- .../skins/nexedi/recent_news.dtml | 53 -- .../CMFTranslation/skins/nexedi/search.dtml | 78 --- .../skins/nexedi/search_form.dtml | 161 ----- .../skins/nexedi/secure_absolute_url.py | 16 - .../skins/nexedi/set_criteria.py | 37 -- .../skins/nexedi/site_vocabulary.dtml | 14 - .../skins/nexedi/standard_html_footer | 25 - .../skins/nexedi/standard_html_footer.dtml | 19 - .../skins/nexedi/standard_html_header.dtml | 134 ---- .../skins/nexedi/standard_top_bar.dtml | 42 -- .../skins/nexedi/stylesheet_properties.props | 30 - .../skins/nexedi/topic_view.dtml | 85 --- .../skins/nexedi/update_http_cache.py | 28 - .../skins/nexedi/wikipage_view.dtml | 8 - .../zpt_content18/discussionitem18_view.pt | 39 -- .../skins/zpt_content18/document18_view.pt | 36 - .../skins/zpt_content18/favorite18_view.pt | 39 -- .../skins/zpt_content18/file18_view.pt | 68 -- .../skins/zpt_content18/folder_contents.pt | 155 ----- .../zpt_content18/full_metadata_edit_form.pt | 149 ----- .../skins/zpt_content18/image18_view.pt | 35 - .../skins/zpt_content18/link18_view.pt | 38 -- .../skins/zpt_content18/newsitem18_view.pt | 35 - .../zpt_content18/translation_template.pt | 68 -- .../skins/zpt_nexedi/actions_box.pt | 64 -- .../skins/zpt_nexedi/folder18_view.pt | 51 -- .../skins/zpt_nexedi/main_template.pt | 161 ----- .../skins/zpt_nexedi/navigation_box.pt | 63 -- .../skins/zpt_nexedi/newsitem18_view.pt | 38 -- product/CMFTranslation/spec/Base18.spec | 141 ---- product/CMFTranslation/tool.png | Bin 286 -> 0 bytes .../CMFTranslation/translation_workflow.zexp | Bin 8295 -> 0 bytes product/CMFTranslation/utils.py | 142 ---- 122 files changed, 8067 deletions(-) delete mode 100755 product/CMFTranslation/.cvsignore delete mode 100755 product/CMFTranslation/CREDITS.txt delete mode 100755 product/CMFTranslation/GPL.txt delete mode 100755 product/CMFTranslation/INSTALL.txt delete mode 100755 product/CMFTranslation/Localizer_fast_lang_select.patch delete mode 100755 product/CMFTranslation/README.txt delete mode 100755 product/CMFTranslation/TODO.txt delete mode 100755 product/CMFTranslation/TranslationTool.py delete mode 100755 product/CMFTranslation/VERSION.txt delete mode 100755 product/CMFTranslation/ZPL.txt delete mode 100755 product/CMFTranslation/__init__.py delete mode 100755 product/CMFTranslation/dtml/explainTranslationTool.dtml delete mode 100755 product/CMFTranslation/help/migration.stx delete mode 100755 product/CMFTranslation/kbabel.png delete mode 100755 product/CMFTranslation/localizer.diff delete mode 100755 product/CMFTranslation/migrate_content.zexp delete mode 100755 product/CMFTranslation/skins/content18/TranslatedBody.py delete mode 100755 product/CMFTranslation/skins/content18/TranslatedDescription.py delete mode 100755 product/CMFTranslation/skins/content18/TranslatedTitle.py delete mode 100755 product/CMFTranslation/skins/content18/TranslatedTitle_or_id.py delete mode 100755 product/CMFTranslation/skins/content18/discussionitem18_view.dtml delete mode 100755 product/CMFTranslation/skins/content18/document18_view.dtml delete mode 100755 product/CMFTranslation/skins/content18/favorite18_view.dtml delete mode 100755 product/CMFTranslation/skins/content18/file18_view.dtml delete mode 100755 product/CMFTranslation/skins/content18/folder18_view.dtml delete mode 100755 product/CMFTranslation/skins/content18/folder_contents.dtml delete mode 100755 product/CMFTranslation/skins/content18/getTranslatedBody.py delete mode 100755 product/CMFTranslation/skins/content18/getTranslatedDescription.py delete mode 100755 product/CMFTranslation/skins/content18/getTranslatedTitle.py delete mode 100755 product/CMFTranslation/skins/content18/getTranslatedTitleOrId.py delete mode 100755 product/CMFTranslation/skins/content18/image18_view.dtml delete mode 100755 product/CMFTranslation/skins/content18/link18_view.dtml delete mode 100755 product/CMFTranslation/skins/content18/newsitem18_view.dtml delete mode 100755 product/CMFTranslation/skins/content18/translation_edit.py delete mode 100755 product/CMFTranslation/skins/content18/translation_edit_form.dtml delete mode 100755 product/CMFTranslation/skins/content18/translation_register_form.dtml delete mode 100755 product/CMFTranslation/skins/content18/translation_status_modify.py delete mode 100755 product/CMFTranslation/skins/content18/translation_submit_form.dtml delete mode 100755 product/CMFTranslation/skins/content18/translation_template.dtml delete mode 100755 product/CMFTranslation/skins/content18/translation_view.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/CurrentSection.py delete mode 100755 product/CMFTranslation/skins/nexedi/CurrentSubSection.py delete mode 100755 product/CMFTranslation/skins/nexedi/TODO delete mode 100755 product/CMFTranslation/skins/nexedi/breadcrumb.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/change_language.py delete mode 100755 product/CMFTranslation/skins/nexedi/combined_subjects.py delete mode 100755 product/CMFTranslation/skins/nexedi/content_hide_form.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/content_publish_form.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/content_reject_form.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/content_release_form.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/content_retract_form.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/content_show_form.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/content_submit_form.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/corporate_workflow.png delete mode 100755 product/CMFTranslation/skins/nexedi/default_stylesheet.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/document18_miniprint.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/document18_print.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/document18_view.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/document_print.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/document_view.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/favicon.ico delete mode 100755 product/CMFTranslation/skins/nexedi/fileprint.png delete mode 100755 product/CMFTranslation/skins/nexedi/folder18_view.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/folder_localrole_form.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/getLocalizedPath.py delete mode 100755 product/CMFTranslation/skins/nexedi/index_html delete mode 100755 product/CMFTranslation/skins/nexedi/index_html.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/language_selector.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/latest_box.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/list_subtopics.pt delete mode 100755 product/CMFTranslation/skins/nexedi/list_topic_vocabulary.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/local_absolute_url.py delete mode 100755 product/CMFTranslation/skins/nexedi/logo.png delete mode 100755 product/CMFTranslation/skins/nexedi/mail_password.py delete mode 100755 product/CMFTranslation/skins/nexedi/menu_box.pt delete mode 100755 product/CMFTranslation/skins/nexedi/news_box.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/newsitem18_print.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/newsitem18_view.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/newsitem_mail_form.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/newsitem_view delete mode 100755 product/CMFTranslation/skins/nexedi/newsitem_view.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/pr_printable_html_header.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/pr_printable_stylesheet.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/printable_html_footer.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/printable_html_header.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/printable_stylesheet.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/public_subtopics.py delete mode 100755 product/CMFTranslation/skins/nexedi/quick_login.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/recent_additions.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/recent_news.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/search.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/search_form.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/secure_absolute_url.py delete mode 100755 product/CMFTranslation/skins/nexedi/set_criteria.py delete mode 100755 product/CMFTranslation/skins/nexedi/site_vocabulary.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/standard_html_footer delete mode 100755 product/CMFTranslation/skins/nexedi/standard_html_footer.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/standard_html_header.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/standard_top_bar.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/stylesheet_properties.props delete mode 100755 product/CMFTranslation/skins/nexedi/topic_view.dtml delete mode 100755 product/CMFTranslation/skins/nexedi/update_http_cache.py delete mode 100755 product/CMFTranslation/skins/nexedi/wikipage_view.dtml delete mode 100755 product/CMFTranslation/skins/zpt_content18/discussionitem18_view.pt delete mode 100755 product/CMFTranslation/skins/zpt_content18/document18_view.pt delete mode 100755 product/CMFTranslation/skins/zpt_content18/favorite18_view.pt delete mode 100755 product/CMFTranslation/skins/zpt_content18/file18_view.pt delete mode 100755 product/CMFTranslation/skins/zpt_content18/folder_contents.pt delete mode 100755 product/CMFTranslation/skins/zpt_content18/full_metadata_edit_form.pt delete mode 100755 product/CMFTranslation/skins/zpt_content18/image18_view.pt delete mode 100755 product/CMFTranslation/skins/zpt_content18/link18_view.pt delete mode 100755 product/CMFTranslation/skins/zpt_content18/newsitem18_view.pt delete mode 100755 product/CMFTranslation/skins/zpt_content18/translation_template.pt delete mode 100755 product/CMFTranslation/skins/zpt_nexedi/actions_box.pt delete mode 100755 product/CMFTranslation/skins/zpt_nexedi/folder18_view.pt delete mode 100755 product/CMFTranslation/skins/zpt_nexedi/main_template.pt delete mode 100755 product/CMFTranslation/skins/zpt_nexedi/navigation_box.pt delete mode 100755 product/CMFTranslation/skins/zpt_nexedi/newsitem18_view.pt delete mode 100755 product/CMFTranslation/spec/Base18.spec delete mode 100755 product/CMFTranslation/tool.png delete mode 100755 product/CMFTranslation/translation_workflow.zexp delete mode 100755 product/CMFTranslation/utils.py diff --git a/product/CMFTranslation/.cvsignore b/product/CMFTranslation/.cvsignore deleted file mode 100755 index 0d20b6487c..0000000000 --- a/product/CMFTranslation/.cvsignore +++ /dev/null @@ -1 +0,0 @@ -*.pyc diff --git a/product/CMFTranslation/CREDITS.txt b/product/CMFTranslation/CREDITS.txt deleted file mode 100755 index e69de29bb2..0000000000 diff --git a/product/CMFTranslation/GPL.txt b/product/CMFTranslation/GPL.txt deleted file mode 100755 index dcfa4c235e..0000000000 --- a/product/CMFTranslation/GPL.txt +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - 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 2 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, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/product/CMFTranslation/INSTALL.txt b/product/CMFTranslation/INSTALL.txt deleted file mode 100755 index 8333ecb977..0000000000 --- a/product/CMFTranslation/INSTALL.txt +++ /dev/null @@ -1,168 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# 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 2 -# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -Warning - - This product is a proof of concept for hard core Zope developers. - Wait version 0.2 to get something usable - -Requirements - - You will need a Zope system with "CMF":http://cmf.zope.org - and with "Localizer":http://www.nuxeo.org/localizer - -Mail list - - You may want to subscribe to the Base18 mail list:: - - http://mail.freesoftware.fsf.org/mailman/listinfo/erp5-base18 - erp5-base18@mail.freesoftware.fsf.org - -Installation Instructions - - Download the Base18 tarball:: - - http://www.zope.org/Members/nexedi/Base18/Base18-0.1.tar.gz - - or the latest CVS:: - - https://savannah.gnu.org/cgi-bin/viewcvs/erp5/Base18/ - - Install it in your local Zope product directory (ex. /var/lib/zope/Products on - Debian systems). Untar it. - - Copy the files translation_workflow.zexp and migrate_content.zexp in the - Base18 directory into to your Zope import directory (ex. /var/lib/zope/import - on a Debian system). - - Copy the file Extensions/MigrateContent.py to your Zope - Extensions directory (ex. /var/lib/zope/Extensions - on a Debian system). - - Create a CMF site. - - Import migrate_content.zexp at the root of your CMF site. - - Import translation_workflow.zexp the content of your portal_worflow. - - Execute the migrate_content external method at the root of your CMF - site (click on it and then on the Test button). - - This will modify the default portal types and register the Base18 portal - types. You may at this point eventually need to reinder your CMF. The - migrate_content external method can also be used to migrate an entire site. - - At this step, you need to modifiy the portal_workflow workflow associations - in order to associate the Translation portal type to the translation_workflow - workflow - -Demos - - There are two ways to use Base18. - - For sites which do not contain much content and which are centralized, - it is sufficient to manage translations through a single gettext message - catalog. Thanks to Base18, content is automatically cut into small paragraphs - or sentences. It is then possible to export sentences with the Localizer - export feature into .pot or .po files. Such files can then be translated - mith toolds such as KBabel (see kbabel.png). - - This first approach is used on "Storever":http://www.storever.com for - example - - For sites which contain many documents for which different people - may want to translate single documents in multiple languages, - it is then recommended to proceed in 3 steps: - - - Use the *Translate* menu of the document you want to translate - in order to download a .pot file which can be edited with kbabel - - - Create a new *Translation* document in your personal folder - (My Stuff) within the CMF and upload the .pot file which - you translated at the previous step. At this step, you - must define the target language and the target document - of your translation - - - Submit this translation to the portal reviewers so that - they can register your translation for that document - (use the menu on the left) - - This process involves two new portal types - - - a Translation portal type which is used to store - translations (ie. .po files for 1 language for 1 document) - - - a portal_translations which registers the relations - between documents and translations (this tool also - implements the heuristics to find the most appropriate - translation for a given document and a given language) - - The whole system allows to split the work of translation - accross all members of a given portal. - - This second approach is being tested on the "ERP5 portal":http://www.erp5.org - - We recommend to become member of ERP5 (a project to design a Zope based ERP) - in order to try Base18 first. - -Localizer Patch - - We patched Localizer in order to improve its operation with KBabel and - with cookies. - - MessageCatalog.py - - - improved export procedure - so that it generates multi-line strings properly - (all lines are exported) - - - improved export procedure - to escape quotes - " -> \" - - Exported messages can now be read without errror by KBabel - - __init__.py - - - changed language value from string type to tuple type - so that it is now consistent with AcceptLanguage - list-based algorithm - - zgettext.py - - - improved import procedure so that it handles - multi-line strings (all lines are now - read into the message catalog) - - - improved export procedure - to unescape quotes - \" -> \ - - KBabel .po files can now be read diff --git a/product/CMFTranslation/Localizer_fast_lang_select.patch b/product/CMFTranslation/Localizer_fast_lang_select.patch deleted file mode 100755 index 4f266a3ac2..0000000000 --- a/product/CMFTranslation/Localizer_fast_lang_select.patch +++ /dev/null @@ -1,29 +0,0 @@ -Les sous-répertoires ./help et /home/jp/Localizer/help sont identiques. -Les sous-répertoires ./img et /home/jp/Localizer/img sont identiques. -Les sous-répertoires ./locale et /home/jp/Localizer/locale sont identiques. -Les sous-répertoires ./tests et /home/jp/Localizer/tests sont identiques. -Les sous-répertoires ./ui et /home/jp/Localizer/ui sont identiques. -diff -u ./Utils.py /home/jp/Localizer/Utils.py ---- ./Utils.py 2003-06-07 03:31:54.000000000 +0200 -+++ /home/jp/Localizer/Utils.py 2003-06-07 03:32:44.000000000 +0200 -@@ -54,7 +54,8 @@ - - request = get_request() - -- lang = request.AcceptLanguage.select_language(available_languages) -+ return getattr(request.PARENTS[0],'FOLDER_LANGUAGE','en') -+ #lang = request.AcceptLanguage.select_language(available_languages) - - - # XXX Here we should set the Vary header, but, which value should it have?? -@@ -62,7 +63,7 @@ - ## response.setHeader('Vary', 'accept-language') - ## response.setHeader('Vary', '*') - -- return lang -+ #return lang - - - # Defines strings that must be internationalized -Seulement dans ./: Utils.py.orig -Seulement dans /home/jp/Localizer: Utils.py.rej diff --git a/product/CMFTranslation/README.txt b/product/CMFTranslation/README.txt deleted file mode 100755 index 5e6963fc22..0000000000 --- a/product/CMFTranslation/README.txt +++ /dev/null @@ -1,53 +0,0 @@ -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# 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 2 -# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## - -Base18 is a Zope product which allows to build multilingual portals. It uses -Localizer and extends the Zope CMFDefault product to provide a way -to translate documents at a sentence per sentence level. - -It implements a new kind of CMF document: Translations. Translations allow to -store a .po file which allows to translate a given document. This approach -was inspired by the poxml approach used by the "KDE":http://www.kde.org project -to translate its documentation. - -Because it works at the sentence or paragraph level, it is possible to use -the fuzzy feature of gettext to find similar translations for a given sentence -and accelerate the translation process. - -Base18 also includes a translation workflow which allows to keep track -of translations and their association to documents in a portal. - -Base18 is currently much of a "proof-of-concept" which needs to be extended. -Future versions will include greater flexibility and will implement relations. - -More information can be found on the "Nexedi":http://www.nexedi.org/software -site:: - - http://www.nexedi.org/software diff --git a/product/CMFTranslation/TODO.txt b/product/CMFTranslation/TODO.txt deleted file mode 100755 index ad4d9b5b4c..0000000000 --- a/product/CMFTranslation/TODO.txt +++ /dev/null @@ -1,7 +0,0 @@ -TODO: - -Version 0.1 (Done) - - proof of concept - -Version 1.0 - - Release diff --git a/product/CMFTranslation/TranslationTool.py b/product/CMFTranslation/TranslationTool.py deleted file mode 100755 index 46f37d61e7..0000000000 --- a/product/CMFTranslation/TranslationTool.py +++ /dev/null @@ -1,303 +0,0 @@ -############################################################################## -# -# Base18: a Zope product which provides multilingual services for CMF Default -# documents. -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# 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 2 -# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## -__version__ = "$Revision$"[11:-2] -__doc__ = "This product provides the basic behaviour to CMF object which need\ - translation" - - -"""\ -Base18 portal_translation tool. -""" - -from OFS.SimpleItem import SimpleItem -from Products.CMFCore.utils import UniqueObject -from Globals import InitializeClass, DTMLFile, PersistentMapping -from AccessControl import ClassSecurityInfo, getSecurityManager -from Products.CMFCore import CMFCorePermissions -from utils import _dtmldir, _translate_txt, _translate_html, _translate_stx -from Products.Localizer.Utils import lang_negotiator -from Products.Localizer.MessageCatalog import MessageCatalog -from BTrees.OOBTree import OOBTree -from zLOG import LOG - -class TranslationError( Exception ): - pass - -class TranslationTool( UniqueObject, SimpleItem ): - - id = 'portal_translations' - meta_type = 'CMF Translation Tool' - - security = ClassSecurityInfo() - - # - # Default values. - # - registered_translations = None - - def __init__( self ): - self._registered_translations = OOBTree() - self._translation_cache = OOBTree() - - # - # ZMI methods - # - manage_options = ( ( { 'label' : 'Overview' - , 'action' : 'manage_overview' - } - , { 'label' : 'Properties' - , 'action' : 'propertiesForm' - } - ) - + SimpleItem.manage_options - ) - - security.declareProtected( CMFCorePermissions.ManagePortal - , 'manage_overview' ) - manage_overview = DTMLFile( 'explainTranslationTool', _dtmldir ) - - security.declareProtected( CMFCorePermissions.ManagePortal - , 'propertiesForm' ) - propertiesForm = DTMLFile( 'translationProperties', _dtmldir ) - - security.declareProtected( CMFCorePermissions.ManagePortal - , 'editProperties' ) - def editProperties( self - , publisher=None - , REQUEST=None - ): - """ - Form handler for "tool-wide" properties (including list of - metadata elements). - """ - if publisher is not None: - self.publisher = publisher - - if REQUEST is not None: - REQUEST[ 'RESPONSE' ].redirect( self.absolute_url() - + '/propertiesForm' - + '?manage_tabs_message=Tool+updated.' - ) - - # - # 'portal_translations' interface - # - - security.declarePublic( 'findMessageCatalog' ) - def findMessageCatalog(self, content, language=None, section=None): - """ - Return the default message catalog for - an object to translate - For now, look in the same directory - or in the acquisition path either for a message catalog for - that object or for a message more global catalog - In the future, we will try to look at message catalogs provided by - users. - - A workklow will be used to manage the status of translations - """ - translation_path, translation = self.findRegisteredTranslation(content) - if translation is not None: - #LOG('Found Registered Translation',0,str(translation)) - return translation - #return translation.getMessageCatalog() - else: - #LOG('Found No Registered Translation',0,'') - # A default translation is provided if and only if no translation is set on the - # focument with default language - return getattr(content, str(content.id) + '.msg' , - getattr(content.Localizer, 'content', None)) - - # Translation registration catalog - # Can be improved a lot (of course) - security.declarePublic( 'registerTranslation' ) - def registerTranslation(self, content, translation, translation_path, language=None, section=None): - """ - This function allows to register a user translation - - content -- A CMF document for which the translation - should be used - - translation -- A string containing a gettext formatted translation - definition - - translation_path -- a path to the document which holds the translation - - language -- The language provided in translation - - section -- an optional string whenever multiple translations are required - for a given - """ - if translation is not None: - # Build a new message catalog and import translation - mc = MessageCatalog("mc", "Message Catalog", (language,)) - aq_mc = mc.__of__(self) - aq_mc.manage_import(language, translation) - else: - mc = None - # Get the path of content and translation - content_path = content.getPhysicalPath() - # Register the path for content and translation for language - if not self._registered_translations.has_key(content_path): - self._registered_translations[content_path] = PersistentMapping() - self._registered_translations[content_path][(language,section)] = (translation_path, mc) - - - security.declarePublic( 'findRegisteredTranslation' ) - def findRegisteredTranslation(self, content, language=None, section=None): - """ - This function allows to find if a translation has been registered - """ - content_path = content.getPhysicalPath() - #LOG('Lookup translation for',0,str(content_path)) - if self._registered_translations.has_key(content_path): - # Find negociated language if necessary - if language is None: - language = lang_negotiator([content.language] + - map(lambda x:x[0], self._registered_translations[content_path].keys())) - if language is None: - return None, None - if self._registered_translations[content_path].has_key((language, section)): - translation_path, mc = \ - self._registered_translations[content_path].get((language, section)) - #LOG('Found Translation %s for %s' % (translation_path,language),0,str(mc)) - else: - #LOG('No Translation Found',0,'') - return None, None - if mc is None: - #LOG('No Translation Found',0,'') - return None, None - else: - #LOG('Translation Found',0,translation_path) - return translation_path, mc - else: - #LOG('No Registered Translation Found',0,'') - return None, None - - security.declarePublic( 'translateContent' ) - def translateContent(self, content, txt, language=None, section=None, format='txt'): - """ - This function allows to find if a translation has been registered - """ - content_path = content.getPhysicalPath() - md = self.findMessageCatalog(content, language=language, section=section) - if md is not None: - if format == 'txt': - return _translate_txt(txt, md) - elif format == 'stx': - return _translate_stx(txt, md) - else: - return _translate_html(txt, md) - else: - return txt - - security.declarePublic( 'getTranslationTemplate' ) - def getTranslationTemplate(self, content, view_method_id=None, section=None): - """ - This function allows to find if a translation has been registered - """ - content_path = content.getPhysicalPath() - if not self._registered_translations.has_key(content_path): - self._registered_translations[content_path] = PersistentMapping() - # Use default language - language = lang_negotiator([content.language] + - map(lambda x:x[0], self._registered_translations[content_path].keys())) - # Backup existing message catalog - backup = self._registered_translations[content_path].get((language,section)) - # Create a new catalog - mc = MessageCatalog('temp', 'Temporary Message Catalog', (language, )).__of__(self) - # Associate it - #LOG('Register translation for',0,str(content_path)) - self._registered_translations[content_path][(language,section)] = ('temp', mc) - # Simulate rendering of page - if view_method_id is None: - content() - else: - getattr(content, view_method_id)() - # Reset backup - if backup is not None: - self._registered_translations[content_path][(language,section)] = backup - else: - del self._registered_translations[content_path][(language,section)] - # And return the template - return mc.manage_export('locale.pt') - - security.declarePublic( 'testTranslation' ) - def testTranslation(self, content, translation, view_method_id=None, section=None): - """ - This function allows to register a user translation - - content -- A CMF document for which the translation - should be used - - translation -- A string containing a gettext formatted translation - definition - - translation_path -- a path to the document which holds the translation - - language -- The language provided in translation - - section -- an optional string whenever multiple translations are required - for a given - """ - content_path = content.getPhysicalPath() - if not self._registered_translations.has_key(content_path): - self._registered_translations[content_path] = PersistentMapping() - # Use default language - language = lang_negotiator([content.language] + - map(lambda x:x[0], self._registered_translations[content_path].keys())) - # Backup existing message catalog - backup = self._registered_translations[content_path].get((language,section)) - # Create a new catalog - # Build a new message catalog and import translation - mc = MessageCatalog("mc", "Message Catalog", (language,)) - aq_mc = mc.__of__(self) - aq_mc.manage_import(language, translation) - # Associate it - #LOG('Register translation for',0,str(content_path)) - self._registered_translations[content_path][(language,section)] = ('temp', mc) - # Simulate rendering of page - if view_method_id is None: - result = content() - else: - result = getattr(content, view_method_id)() - # Reset backup - if backup is not None: - self._registered_translations[content_path][(language,section)] = backup - else: - del self._registered_translations[content_path][(language,section)] - # And return the translated page - return result - - -InitializeClass( TranslationTool ) diff --git a/product/CMFTranslation/VERSION.txt b/product/CMFTranslation/VERSION.txt deleted file mode 100755 index 7e1efe097c..0000000000 --- a/product/CMFTranslation/VERSION.txt +++ /dev/null @@ -1 +0,0 @@ -Base18 0.1 diff --git a/product/CMFTranslation/ZPL.txt b/product/CMFTranslation/ZPL.txt deleted file mode 100755 index 44e0648b31..0000000000 --- a/product/CMFTranslation/ZPL.txt +++ /dev/null @@ -1,59 +0,0 @@ -Zope Public License (ZPL) Version 2.0 ------------------------------------------------ - -This software is Copyright (c) Zope Corporation (tm) and -Contributors. All rights reserved. - -This license has been certified as open source. It has also -been designated as GPL compatible by the Free Software -Foundation (FSF). - -Redistribution and use in source and binary forms, with or -without modification, are permitted provided that the -following conditions are met: - -1. Redistributions in source code must retain the above - copyright notice, this list of conditions, and the following - disclaimer. - -2. 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. - -3. The name Zope Corporation (tm) must not be used to - endorse or promote products derived from this software - without prior written permission from Zope Corporation. - -4. The right to distribute this software or to use it for - any purpose does not give you the right to use Servicemarks - (sm) or Trademarks (tm) of Zope Corporation. Use of them is - covered in a separate agreement (see - http://www.zope.com/Marks). - -5. If any files are modified, you must cause the modified - files to carry prominent notices stating that you changed - the files and the date of any change. - -Disclaimer - - THIS SOFTWARE IS PROVIDED BY ZOPE CORPORATION ``AS IS'' - AND ANY EXPRESSED 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 ZOPE CORPORATION OR ITS 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. - - -This software consists of contributions made by Zope -Corporation and many individuals on behalf of Zope -Corporation. Specific attributions are listed in the -accompanying credits file. diff --git a/product/CMFTranslation/__init__.py b/product/CMFTranslation/__init__.py deleted file mode 100755 index 7a551c4992..0000000000 --- a/product/CMFTranslation/__init__.py +++ /dev/null @@ -1,95 +0,0 @@ -############################################################################## -# -# Base18: a Zope product which provides multilingual services for CMF Default -# documents. -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# 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 2 -# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# TODO: -# - Implement Vary so that cache can take into account translated version -# - Implement language caching.... -# -############################################################################## -""" -""" - -ADD_CONTENT_PERMISSION = 'Add portal content' - -import TranslationTool - -from Products.CMFCore import utils -import Products.CMFCore -from Products.CMFCore.DirectoryView import registerDirectory - -contentClasses = ( ) - - -contentConstructors = ( ) - -contentFactoryTypeInformations = [] -for content in contentClasses: - if type(content.factory_type_information) == type({}): - contentFactoryTypeInformations.append(content.factory_type_information) - else: - contentFactoryTypeInformations.append(content.factory_type_information[0]) - -tools = ( TranslationTool.TranslationTool, - ) - -bases = contentClasses - -import sys -this_module = sys.modules[ __name__ ] - -z_bases = utils.initializeBasesPhase1( bases, this_module ) -z_tool_bases = utils.initializeBasesPhase1( tools, this_module ) - -base18_globals=globals() - -# Make the skins available as DirectoryViews. -registerDirectory('skins', globals()) -registerDirectory('help', globals()) - -def initialize( context ): - - utils.initializeBasesPhase2( z_bases, context ) - utils.initializeBasesPhase2( z_tool_bases, context ) - - utils.ToolInit('CMFTranslation Tool', tools=tools, - product_name='CMFTranslation', icon='tool.png', - ).initialize( context ) - - utils.ContentInit( 'CMFTranslation Content' - , content_types=contentClasses - , permission=ADD_CONTENT_PERMISSION - , extra_constructors=contentConstructors - , fti=contentFactoryTypeInformations - ).initialize( context ) - - context.registerHelp() - context.registerHelpTitle('CMFTranslation Help') - diff --git a/product/CMFTranslation/dtml/explainTranslationTool.dtml b/product/CMFTranslation/dtml/explainTranslationTool.dtml deleted file mode 100755 index bba378e44f..0000000000 --- a/product/CMFTranslation/dtml/explainTranslationTool.dtml +++ /dev/null @@ -1,40 +0,0 @@ -<dtml-comment> -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Jean-Paul Smets <jp@nexedi.com> - -WARNING: This program as such is intended to be used by professional -programmers who take the whole responsability of assessing all potential -consequences resulting from its eventual inadequacies and bugs - -This program as such is not intended to be used by end users. End -users who are looking for a ready-to-use solution with commercial -garantees and support are strongly adviced to contract a Free Software -Service Company - -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 2 -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, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -</dtml-comment> - -<dtml-var manage_page_header> -<dtml-var manage_tabs> - -<h3> <code>portal_translations</code> Tool </h3> - -<p> This tool embodies site-wide policies concerning content translation. - The default heuristics consists in searching first for a message - catalog next to the document, then a translation created by a member - and in the end a global message catalog. -</p> - -<dtml-var manage_page_footer> diff --git a/product/CMFTranslation/help/migration.stx b/product/CMFTranslation/help/migration.stx deleted file mode 100755 index 53e8bbc1b8..0000000000 --- a/product/CMFTranslation/help/migration.stx +++ /dev/null @@ -1,14 +0,0 @@ -Updating an existing Zope CMF - - Export your CMF as XML - - First use the update-products script on the XML file - - Beware : buggy, will destroy some non CMF types !!! - - Update portal types (! local roles) - - Add - gettext - portal_translations - portal_membership \ No newline at end of file diff --git a/product/CMFTranslation/kbabel.png b/product/CMFTranslation/kbabel.png deleted file mode 100755 index 5d71dd015611ed593fe25654d8f39f38d56b8a2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54602 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 diff --git a/product/CMFTranslation/localizer.diff b/product/CMFTranslation/localizer.diff deleted file mode 100755 index 3d875c5277..0000000000 --- a/product/CMFTranslation/localizer.diff +++ /dev/null @@ -1,228 +0,0 @@ -? AcceptLanguage.pyc -? Gettext.pyc -? GettextTag.pyc -? LanguageManager.pyc -? LocalAttributes.pyc -? LocalContent.pyc -? LocalFiles.pyc -? LocalFolder.pyc -? LocalPropertyManager.pyc -? Localizer.pyc -? MessageCatalog.pyc -? Translator.py.org -? Utils.pyc -? __init__.pyc -? jps.diff -? refresh.txt -? zgettext.pyc -? locale/ca.mo -? locale/de.mo -? locale/en.mo -? locale/es.mo -? locale/eu.mo -? locale/fr.mo -? locale/hu.mo -Index: AcceptLanguage.py -=================================================================== -RCS file: /cvsroot/lleu/Localizer/AcceptLanguage.py,v -retrieving revision 1.2 -diff -u -r1.2 AcceptLanguage.py ---- AcceptLanguage.py 21 Feb 2002 10:53:54 -0000 1.2 -+++ AcceptLanguage.py 16 Apr 2002 08:07:44 -0000 -@@ -23,7 +23,6 @@ - #from UserDict import UserDict - from types import StringType - -- - class AcceptLanguageNode: - """ - This class is a recursive representation of a tree. -Index: Localizer.py -=================================================================== -RCS file: /cvsroot/lleu/Localizer/Localizer.py,v -retrieving revision 1.53 -diff -u -r1.53 Localizer.py ---- Localizer.py 25 Feb 2002 09:46:40 -0000 1.53 -+++ Localizer.py 16 Apr 2002 08:07:45 -0000 -@@ -215,17 +215,17 @@ - stack.append(self.id) - - --## # Changing the language, useful snippets --## security.declarePublic('changeLanguage') --## changeLanguageForm = LocalDTMLFile('ui/changeLanguageForm', globals()) --## def changeLanguage(self, REQUEST, RESPONSE): --## """ """ --## lang = REQUEST['lang'] -+ # Changing the language, useful snippets -+ security.declarePublic('changeLanguage') -+ changeLanguageForm = LocalDTMLFile('ui/changeLanguageForm', globals()) -+ def changeLanguage(self, REQUEST, RESPONSE): -+ """ """ -+ lang = REQUEST['lang'] - --## path = self.absolute_url()[len(REQUEST['SERVER_URL']):] or '/' --## RESPONSE.setCookie('LOCALIZER_LANGUAGE', lang, path=path) -+ path = self.absolute_url()[len(REQUEST['SERVER_URL']):] or '/' -+ RESPONSE.setCookie('LOCALIZER_LANGUAGE', lang, path=path) - --## RESPONSE.redirect(REQUEST['HTTP_REFERER']) -+ RESPONSE.redirect(REQUEST['HTTP_REFERER']) - - # Upgrading.. - security.declarePublic('need_upgrade') -Index: MessageCatalog.py -=================================================================== -RCS file: /cvsroot/lleu/Localizer/MessageCatalog.py,v -retrieving revision 1.17 -diff -u -r1.17 MessageCatalog.py ---- MessageCatalog.py 25 Feb 2002 09:46:40 -0000 1.17 -+++ MessageCatalog.py 16 Apr 2002 08:07:46 -0000 -@@ -379,9 +379,14 @@ - d[k] = "" - - # Generate the file -+ quote_esc = re.compile(r'"') - for k, v in d.items(): -- r.append('msgid "%s"' % k) -- r.append('msgstr "%s"' % v) -+ r.append('msgid ""') -+ for line in k.split('\n'): -+ r.append( '"%s"' % quote_esc.sub('\\"',line)) -+ r.append('msgstr ""') -+ for line in v.split('\n'): -+ r.append( '"%s"' % quote_esc.sub('\\"',line)) - r.append('') - - -@@ -405,10 +410,29 @@ - k, k, k, d = parse_po_file(content) - - for k, v in d.items(): -- k = k[0] -+ if len(k) == 1: -+ # single line msgid -+ k = k[0] -+ else: -+ # multiline msgid -+ if k[0] == '': -+ k = '\n'.join(k[1:]) -+ else: -+ k = '\n'.join(k) - if not messages.has_key(k): - messages[k] = PersistentMapping() -- messages[k][lang] = v[1][0] -+ # Take the commentaries only -+ v = v[1] -+ if len(v) == 1: -+ # single line msgstr -+ v = v[0] -+ else: -+ # multiline msgstr -+ if v[0] == '': -+ v = '\n'.join(v[1:]) -+ else: -+ v = '\n'.join(v) -+ messages[k][lang] = v - - if REQUEST is not None: - return self.manage_messages(self, REQUEST) -Index: __init__.py -=================================================================== -RCS file: /cvsroot/lleu/Localizer/__init__.py,v -retrieving revision 1.35 -diff -u -r1.35 __init__.py ---- __init__.py 25 Feb 2002 09:46:40 -0000 1.35 -+++ __init__.py 16 Apr 2002 08:07:46 -0000 -@@ -115,12 +115,12 @@ - # Add the language from the form - lang = request.form.get('LOCALIZER_LANGUAGE', None) - if lang is not None: -- accept_language[lang] = 3.0 -+ accept_language[lang.split('-',1)] = 3.0 - - # Add the language from the cookies - lang = request.cookies.get('LOCALIZER_LANGUAGE', None) - if lang is not None: -- accept_language[lang] = 2.0 -+ accept_language[lang.split('-',1)] = 2.0 - - self.other['USER_PREF_LANGUAGES'] = accept_language - -@@ -193,7 +193,7 @@ - context.registerClass( - LocalContent.LocalContent, - constructors = (LocalContent.manage_addLocalContentForm, -- LocalContent.manage_addLocalContent), -+ LocalContent.manage_addLocalContent), - icon='img/local_content.gif') - - # Register MessageCatalog -Index: zgettext.py -=================================================================== -RCS file: /cvsroot/lleu/Localizer/zgettext.py,v -retrieving revision 1.15 -diff -u -r1.15 zgettext.py ---- zgettext.py 25 Feb 2002 09:46:40 -0000 1.15 -+++ zgettext.py 16 Apr 2002 08:07:47 -0000 -@@ -39,10 +39,11 @@ - def parse_po_file(content): - # The regular expressions - com = re.compile('^#.*') -- msgid = re.compile(r'^ *msgid *"(.*?[^\\]*)"') -- msgstr = re.compile(r'^ *msgstr *"(.*?[^\\]*)"') -- re_str = re.compile(r'^ *"(.*?[^\\])"') -+ msgid = re.compile(r'^ *msgid *"(.*[^\\]*)"') -+ msgstr = re.compile(r'^ *msgstr *"(.*[^\\]*)"') -+ re_str = re.compile(r'^ *"(.*[^\\])"') - blank = re.compile(r'^\s*$') -+ quote_esc = re.compile(r'\\"') - - trans = {} - pointer = 0 -@@ -59,7 +60,8 @@ - state = 1 - pointer = pointer + 1 - elif msgid.match(line): -- MSGID.append(msgid.match(line).group(1)) -+ line = msgid.match(line).group(1) -+ MSGID.append(quote_esc.sub('"',line)) - state = 2 - pointer = pointer + 1 - elif blank.match(line): -@@ -72,7 +74,8 @@ - state = 1 - pointer = pointer + 1 - elif msgid.match(line): -- MSGID.append(msgid.match(line).group(1)) -+ line = msgid.match(line).group(1) -+ MSGID.append(quote_esc.sub('"',line)) - state = 2 - pointer = pointer + 1 - elif blank.match(line): -@@ -85,11 +88,13 @@ - state = 2 - pointer = pointer + 1 - elif re_str.match(line): -- MSGID.append(re_str.match(line).group(1)) -+ line = re_str.match(line).group(1) -+ MSGID.append(quote_esc.sub('"',line)) - state = 2 - pointer = pointer + 1 - elif msgstr.match(line): -- MSGSTR.append(msgstr.match(line).group(1)) -+ line = msgstr.match(line).group(1) -+ MSGSTR.append(quote_esc.sub('"',line)) - state = 3 - pointer = pointer + 1 - elif blank.match(line): -@@ -102,7 +107,8 @@ - trans[tuple(MSGID)] = (COM, MSGSTR) - state = 0 - elif re_str.match(line): -- MSGSTR.append(re_str.match(line).group(1)) -+ line = re_str.match(line).group(1) -+ MSGSTR.append(quote_esc.sub('"',line)) - state = 3 - pointer = pointer + 1 - elif blank.match(line): diff --git a/product/CMFTranslation/migrate_content.zexp b/product/CMFTranslation/migrate_content.zexp deleted file mode 100755 index c6cad364f71d0a9e114c70c649d1aa63357570d3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 551 zcmZ8eOK%e~5KcF*?zT#y<x$?Hg<?2F;>Hz1xS*5*9fXi7%Xp{3mDk>}XHz)jfAR0Y zS$d&!@#Fhu=KE&8O}`#@R?+>v*PflMD+C-K2VXXt<9Pa$F*s#s$Ul5}<w<KW`kz1< zQ}>9+OX>;8&l;zt_9aqZ=+|}Krn_joi^aQyO%hblz|(L^>jE~kmkX7;RTwE3F#I(A z2-D9eRKSi7s2JaxfSP^y^~K-?Z9wnb8%LWkT$pGW%fu{HS-w#bU%oo=-qHxV-juWj zgPN_0OxGZ*nXW^wy<=q@2HJ+*N;x%0nQ~_sW4cZhE9>X9ljxCdz<OooAt@;7Cey7} zstR-M8^?6}{aW)Kveaf5wk~<ewqs1-9oUvqX=%MyRt9e|N=bK@bPuxgn(m*{1L%La zSm}7EBJ|m?MS27s7)alK?}<}-EMPMx<G8>u*1n>B$d$ITi5MasU|Z`6(^JUhYU-S3 sOoz~`l0$k1MZ1X-&s1YMk~o5)tkQ;4r{^%5{j)Z?RQ#eD|G5%>0bDl3FaQ7m diff --git a/product/CMFTranslation/skins/content18/TranslatedBody.py b/product/CMFTranslation/skins/content18/TranslatedBody.py deleted file mode 100755 index d78311dba1..0000000000 --- a/product/CMFTranslation/skins/content18/TranslatedBody.py +++ /dev/null @@ -1,42 +0,0 @@ -## Script (Python) "TranslatedBody" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title=Modify the status of a content object -## -############################################################################## -# -# Base18: a Zope product which provides multilingual services for CMF Default -# documents. -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# 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 2 -# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## -return context.CookedBody() \ No newline at end of file diff --git a/product/CMFTranslation/skins/content18/TranslatedDescription.py b/product/CMFTranslation/skins/content18/TranslatedDescription.py deleted file mode 100755 index 2b9875f3a9..0000000000 --- a/product/CMFTranslation/skins/content18/TranslatedDescription.py +++ /dev/null @@ -1,46 +0,0 @@ -## Script (Python) "TranslatedDescription" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title=Modify the status of a content object -## -############################################################################## -# -# Base18: a Zope product which provides multilingual services for CMF Default -# documents. -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# 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 2 -# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## -Description = context.Description -if callable(Description): - Description = Description() -if Description: return Description -return '' diff --git a/product/CMFTranslation/skins/content18/TranslatedTitle.py b/product/CMFTranslation/skins/content18/TranslatedTitle.py deleted file mode 100755 index f6b2df7c04..0000000000 --- a/product/CMFTranslation/skins/content18/TranslatedTitle.py +++ /dev/null @@ -1,46 +0,0 @@ -## Script (Python) "TranslatedTitle" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title=Modify the status of a content object -## -############################################################################## -# -# Base18: a Zope product which provides multilingual services for CMF Default -# documents. -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# 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 2 -# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## -title=context.title -if callable(title): - title=title() -if title: return context.gettext(title) -return '' diff --git a/product/CMFTranslation/skins/content18/TranslatedTitle_or_id.py b/product/CMFTranslation/skins/content18/TranslatedTitle_or_id.py deleted file mode 100755 index 09343d3637..0000000000 --- a/product/CMFTranslation/skins/content18/TranslatedTitle_or_id.py +++ /dev/null @@ -1,46 +0,0 @@ -## Script (Python) "TranslatedTitle_or_id" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title=Modify the status of a content object -## -############################################################################## -# -# Base18: a Zope product which provides multilingual services for CMF Default -# documents. -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# 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 2 -# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## -title=context.title -if callable(title): - title=title() -if title: return title -return context.getId() diff --git a/product/CMFTranslation/skins/content18/discussionitem18_view.dtml b/product/CMFTranslation/skins/content18/discussionitem18_view.dtml deleted file mode 100755 index 60adbc23f6..0000000000 --- a/product/CMFTranslation/skins/content18/discussionitem18_view.dtml +++ /dev/null @@ -1,24 +0,0 @@ -<dtml-let relative_to_content="1"> -<dtml-var standard_html_header> -</dtml-let> -<div class="Desktop"> - <div class="Document"> - - <dtml-var content_byline> - - <div class="Discussion"> - <dtml-var aboveInThread> - </div> - - <h1> &dtml-TranslatedTitle; </h1> - - <dtml-var TranslatedBody> - - <div class="Discussion"> - <dtml-var viewThreadsAtBottom> - </div> - - </div> -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/content18/document18_view.dtml b/product/CMFTranslation/skins/content18/document18_view.dtml deleted file mode 100755 index f527076942..0000000000 --- a/product/CMFTranslation/skins/content18/document18_view.dtml +++ /dev/null @@ -1,16 +0,0 @@ -<dtml-let relative_to_content="1"> -<dtml-var standard_html_header> -</dtml-let> -<div class="Desktop"> - <div class="Document"> - <dtml-var content_byline> - <dtml-var TranslatedBody> - - <div class="Discussion"> - <dtml-var viewThreadsAtBottom> - </div> - - </div> -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/content18/favorite18_view.dtml b/product/CMFTranslation/skins/content18/favorite18_view.dtml deleted file mode 100755 index cbfbd835f8..0000000000 --- a/product/CMFTranslation/skins/content18/favorite18_view.dtml +++ /dev/null @@ -1,23 +0,0 @@ -<dtml-var standard_html_header> - -<div class="Desktop"> - -<div class="Link"> - -<dtml-var content_byline> - -<p> <a href="&dtml-getRemoteUrl;">"><dtml-var getRemoteUrl></a> </p> - -<dtml-var TranslatedDescription> - -<div class="Discussion"> - -<dtml-var viewThreadsAtBottom> - -</div> - -</div> - -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/content18/file18_view.dtml b/product/CMFTranslation/skins/content18/file18_view.dtml deleted file mode 100755 index 0ebe725fd9..0000000000 --- a/product/CMFTranslation/skins/content18/file18_view.dtml +++ /dev/null @@ -1,28 +0,0 @@ -<dtml-var standard_html_header> - -<div class="Desktop"> - -<div class="File"> - -<dtml-var content_byline> - -<p> -<b>Filename</b>: <dtml-var getId><br> -<b>Size</b>: <dtml-var size><br> -<b>Content type</b>: <dtml-var content_type><br> -<b>Description</b>: <dtml-var name="description" newline_to_br> -</p> - -<a href="&dtml-absolute_url;">Download &dtml-title;</a> - -<div class="Discussion"> - -<dtml-var viewThreadsAtBottom> - -</div> - -</div> - -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/content18/folder18_view.dtml b/product/CMFTranslation/skins/content18/folder18_view.dtml deleted file mode 100755 index 95b9cf8a6d..0000000000 --- a/product/CMFTranslation/skins/content18/folder18_view.dtml +++ /dev/null @@ -1,49 +0,0 @@ -<dtml-var standard_html_header> - -<h2><dtml-var title_or_id></h2> - -<dtml-let folder_url=absolute_url> - -<dtml-in expr="objectValues( [ 'Document', 'News Item', 'Portal Image', 'Portal File', 'Base18 Document', 'Base18 News Item', 'Base18 File', 'Base18 Image' ] )" -skip_unauthorized> -<dtml-if sequence-start> -<h3> Documents, Images, and Files </h3> - -<ul> -</dtml-if> -<li> <a href="&dtml-id;"> <dtml-var TranslatedTitle> </a> -<dtml-if name="Description"><blockquote>&dtml-TranslatedDescription;</blockquote></dtml-if></li> -<dtml-if sequence-end> -</ul> -</dtml-if> -</dtml-in> - -<dtml-in expr="objectValues( [ 'Link', 'Favorite', 'Base18 Link','Base18 Favorite' ] )" skip_unauthorized> -<dtml-if sequence-start> -<h3> Links </h3> - -<ul> -</dtml-if> -<li> <a href="&dtml-getRemoteUrl;"> <dtml-var TranslatedTitle> </a> -<dtml-if name="Description"><blockquote>&dtml-TranslatedDescription;</blockquote></dtml-if></li> -<dtml-if sequence-end> -</ul> -</dtml-if> -</dtml-in> - -<dtml-in expr="objectValues( [ 'Folder', 'Portal Folder', 'Skinned Folder' , 'Base18 Folder'] )" skip_unauthorized> -<dtml-if sequence-start> -<h3> Folders </h3> - -<ul> -</dtml-if> -<li> <a href="&dtml-id;"> <dtml-var TranslatedTitle_or_id> </a> -<dtml-if name="Description"><blockquote>&dtml-TranslatedDescription;</blockquote></dtml-if></li> -<dtml-if sequence-end> -</ul> -</dtml-if> -</dtml-in> - -</dtml-let> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/content18/folder_contents.dtml b/product/CMFTranslation/skins/content18/folder_contents.dtml deleted file mode 100755 index e374cb94fe..0000000000 --- a/product/CMFTranslation/skins/content18/folder_contents.dtml +++ /dev/null @@ -1,164 +0,0 @@ -<dtml-comment> -folderfilter cookie maintenance. -</dtml-comment> -<dtml-in filterCookie> -</dtml-in> -<dtml-comment> -Folder contents display. -</dtml-comment> - -<dtml-call "REQUEST.set('isDesktop', 1)"> -<dtml-var standard_html_header> - -<dtml-if "not portal_membership.checkPermission('List folder contents' - , this())"> - <dtml-call "RESPONSE.redirect(absolute_url())"> -</dtml-if> - -<!-- This is the desktop area --> -<div class="Desktop"> - -<h1> Desktop </h1> - -<form action="&dtml-absolute_url;" method="POST"> - <table class="FormLayout"> - <tr> - <td valign="top"> - <table class="ContentsList"> - <dtml-if "portal_membership.checkPermission( 'List folder contents' - , this(), 'aq_parent')"> - <dtml-let upNav="_.hasattr(this().aq_parent, 'portal_url')" - upID="this().aq_parent.getId()" - > - <tr valign="top"> - <td width="16"><br></td> - <td> - <dtml-if upNav> - <a href="../folder_contents" - ><img src="&dtml-portal_url;/UpFolder_icon.gif" - alt="[Link]" border="0"></a> - </dtml-if> - </td> - <td> - <dtml-if upNav> - Up to <a href="../folder_contents"><dtml-var upID></a> - <dtml-else> - <span class="mild">Root</span> - </dtml-if> - </td> - </tr> - </dtml-let> - </dtml-if> - - -<dtml-let filterString="REQUEST.get( 'folderfilter', '' )" - filter="decodeFolderFilter( filterString )" -> -<dtml-in expr="listFolderContents( contentFilter=filter )" - sort="getId" size="19" start=qs skip_unauthorized> - <dtml-if next-sequence> - <dtml-call "REQUEST.set('next-sequence' - , _['next-sequence-start-number'])"> - </dtml-if> - <dtml-if previous-sequence> - <dtml-call "REQUEST.set('previous-sequence' - ,_['previous-sequence-start-number'])"> - </dtml-if> - <dtml-let obj="_.getitem('sequence-item', 0 )" - folderish=isPrincipiaFolderish - portalish="_.hasattr( obj, 'isPortalContent' ) - and obj.isPortalContent" - methodID="folderish and '/folder_contents' or ( portalish - and '/view' or '' )" - getIcon="_.hasattr(obj, 'getIcon') and obj.getIcon()" - icon="getIcon or _.getattr(obj, 'icon', '')" - > - <tr valign="top"> - <td> - <input type="checkbox" name="ids:list" value="&dtml-getId;" - id="cb_&dtml-getId;" /> - </td> - <td> - <dtml-if icon> - <a href="&dtml.url_quote-getId;&dtml-methodID;" - ><img src="&dtml-portal_url;/&dtml-icon;" - alt="&dtml-Type;" border="0"></a> - </dtml-if> - </td> - <td> - <a href="&dtml.url_quote-getId;&dtml-methodID;" - >&dtml-getId;<dtml-if title> (&dtml-title;)</dtml-if></a> - </td> - </tr> - - <dtml-if qs> - <dtml-if "_['sequence-index'] - _.int(qs) == 7"> - </table><dtml-comment> End of first column </dtml-comment> - </td> - <td> - <table class="ContentsList"> - </dtml-if> - <dtml-else> <dtml-comment> No batch </dtml-comment> - <dtml-if "_['sequence-index'] == 8"> - </table><dtml-comment> End of first column </dtml-comment> - </td> - <td valign="top"> - <table class="ContentsList"> - </dtml-if> - </dtml-if> - </dtml-let> -</dtml-in> -</dtml-let> - </table> - </td> - </tr> - - <tr> - <td align="right"> - <dtml-if previous-sequence> - <a href="folder_contents?qs=&dtml-previous-sequence;">Previous items</a> - <dtml-else> - <br> - </dtml-if> - </td> - <td align="left"> - <dtml-if next-sequence> - <a href="folder_contents?qs=&dtml-next-sequence;">Next items</a> - <dtml-else> - <br> - </dtml-if> - </td> - </tr> -</table><dtml-comment> End of listing table </dtml-comment> - - -<table border="0" cellspacing="0" cellpadding="2"> -<tr> - <td align="left" valign="top" width="16"></td> - <td align="left" valign="top"> - <dtml-if expr="portal_membership.checkPermission('Add portal content' - , this())"> - <input type="submit" name="folder_factories:method" value="New..."> - </dtml-if> - <dtml-if expr="portal_membership.checkPermission('View management screens' - , this())"> - <input type="submit" name="folder_rename_form:method" value="Rename"> - <input type="submit" name="folder_cut:method" value="Cut"> - <input type="submit" name="folder_copy:method" value="Copy"> - <dtml-if cb_dataValid> - <input type="submit" name="folder_paste:method" value="Paste"> - </dtml-if> - </dtml-if> - <dtml-if expr="portal_membership.checkPermission('Delete objects', this())"> - <input type="submit" name="folder_delete:method" value="Delete"> - </dtml-if> - </td> -</tr> -</table> - -</form> - -<dtml-var folder_filter_form> -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/content18/getTranslatedBody.py b/product/CMFTranslation/skins/content18/getTranslatedBody.py deleted file mode 100755 index 0547d0787e..0000000000 --- a/product/CMFTranslation/skins/content18/getTranslatedBody.py +++ /dev/null @@ -1 +0,0 @@ -return context.TranslatedBody() \ No newline at end of file diff --git a/product/CMFTranslation/skins/content18/getTranslatedDescription.py b/product/CMFTranslation/skins/content18/getTranslatedDescription.py deleted file mode 100755 index f739a16933..0000000000 --- a/product/CMFTranslation/skins/content18/getTranslatedDescription.py +++ /dev/null @@ -1 +0,0 @@ -return context.TranslatedDescription() \ No newline at end of file diff --git a/product/CMFTranslation/skins/content18/getTranslatedTitle.py b/product/CMFTranslation/skins/content18/getTranslatedTitle.py deleted file mode 100755 index d7936d9946..0000000000 --- a/product/CMFTranslation/skins/content18/getTranslatedTitle.py +++ /dev/null @@ -1 +0,0 @@ -return context.TranslatedTitle() \ No newline at end of file diff --git a/product/CMFTranslation/skins/content18/getTranslatedTitleOrId.py b/product/CMFTranslation/skins/content18/getTranslatedTitleOrId.py deleted file mode 100755 index 6d9f90c97a..0000000000 --- a/product/CMFTranslation/skins/content18/getTranslatedTitleOrId.py +++ /dev/null @@ -1 +0,0 @@ -return context.TranslatedTitle_or_id() \ No newline at end of file diff --git a/product/CMFTranslation/skins/content18/image18_view.dtml b/product/CMFTranslation/skins/content18/image18_view.dtml deleted file mode 100755 index 41a9bac9df..0000000000 --- a/product/CMFTranslation/skins/content18/image18_view.dtml +++ /dev/null @@ -1,19 +0,0 @@ -<dtml-var standard_html_header> - -<div class="Desktop"> - -<div class="Image"> - -<dtml-var tag> - -<div class="Discussion"> - -<dtml-var viewThreadsAtBottom> - -</div> - -</div> - -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/content18/link18_view.dtml b/product/CMFTranslation/skins/content18/link18_view.dtml deleted file mode 100755 index 6d72ec3b62..0000000000 --- a/product/CMFTranslation/skins/content18/link18_view.dtml +++ /dev/null @@ -1,25 +0,0 @@ -<dtml-var standard_html_header> - -<div class="Desktop"> - -<div class="Link"> - -<dtml-var content_byline> - -<p> -<a href="<dtml-var remote_url>"><dtml-var remote_url></a></p> -</p> - -<dtml-var TranslatedDescription> - -<div class="Discussion"> - -<dtml-var viewThreadsAtBottom> - -</div> - -</div> - -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/content18/newsitem18_view.dtml b/product/CMFTranslation/skins/content18/newsitem18_view.dtml deleted file mode 100755 index f3cd96736d..0000000000 --- a/product/CMFTranslation/skins/content18/newsitem18_view.dtml +++ /dev/null @@ -1,28 +0,0 @@ -<dtml-let relative_to_content="1"> -<dtml-var standard_html_header> -</dtml-let> - - -<div class="Desktop"> - -<div class="NewsItem"> - -<blockquote class="Description"> -<dtml-var TranslatedDescription fmt="structured-text"> -</blockquote> - -<dtml-var content_byline> - -<dtml-var TranslatedBody> - -<div class="Discussion"> - -<dtml-var viewThreadsAtBottom> - -</div> - -</div> - -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/content18/translation_edit.py b/product/CMFTranslation/skins/content18/translation_edit.py deleted file mode 100755 index dbc01b93dd..0000000000 --- a/product/CMFTranslation/skins/content18/translation_edit.py +++ /dev/null @@ -1,69 +0,0 @@ -## Script (Python) "translation_edit" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=target_content, target_language, text, file='', SafetyBelt='', choice=' Change ' -##title=Edit a document -## -############################################################################## -# -# Base18: a Zope product which provides multilingual services for CMF Default -# documents. -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# 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 2 -# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## -#try: -if 1: - target_content = context.restrictedTraverse(target_content, None) - context.edit( '' - , text - , file - , safety_belt=SafetyBelt - , target_language=target_language - , target_content=target_content - ) - qst='portal_status_message=Document+changed.' - - if choice == ' Change and View ': - target_action = context.getTypeInfo().getActionById( 'view' ) - else: - target_action = context.getTypeInfo().getActionById( 'edit' ) - - context.REQUEST.RESPONSE.redirect( '%s/%s?%s' % ( context.absolute_url() - , target_action - , qst - ) ) -#except Exception, msg: -# target_action = context.getTypeInfo().getActionById( 'edit' ) -# context.REQUEST.RESPONSE.redirect('%s/%s?portal_status_message=%s' % ( -# context.absolute_url() -# , target_action -# , msg -# )) diff --git a/product/CMFTranslation/skins/content18/translation_edit_form.dtml b/product/CMFTranslation/skins/content18/translation_edit_form.dtml deleted file mode 100755 index bac1095fb6..0000000000 --- a/product/CMFTranslation/skins/content18/translation_edit_form.dtml +++ /dev/null @@ -1,84 +0,0 @@ -<dtml-var standard_html_header> - -<div class="Desktop"> - -<dtml-if message> - <p>&dtml-message;</p> - <hr> -</dtml-if> - -<div class="Document"> - -<h2>Edit &dtml-getId;</h2> - -<form action="translation_edit" method="post" enctype="multipart/form-data"> - - <input type="hidden" name="SafetyBelt" value="&dtml-SafetyBelt;"> - -<table class="FormLayout"> - <tr> - <th> - Title - </th> - <td> - <dtml-var Title> - </td> - </tr> - - <tr> - <th> - Description - </th> - <td> - <dtml-var description> - </td> - </tr> - - <tr> - <th> - Target - </th> - <td> - <input type="text" name="target_content:string" value="&dtml-targetContentPath;" /> - </td> - </tr> - - <tr> - <th> - Language - </th> - <td> - <input type="text" name="target_language:string" value="&dtml-targetLanguage;" /> - </td> - </tr> - - <tr> - <th> Upload </th> - <td> - <input type="file" name="file" size="25"> - </td> - </tr> - - <tr> - <th class="TextField"> Edit </th> - <td class="TextField"> - <textarea name="text:text" - rows="20" cols="80"><dtml-var EditableBody html_quote></textarea> - </td> - </tr> - - <tr> - <td> <br> </td> - <td> - <input type="submit" name="choice" value=" Change "> - <input type="submit" name="choice" value=" Change and View "> - </td> - </tr> -</table> -</form> - -</div> - -</div> - -<dtml-var standard_html_footer> \ No newline at end of file diff --git a/product/CMFTranslation/skins/content18/translation_register_form.dtml b/product/CMFTranslation/skins/content18/translation_register_form.dtml deleted file mode 100755 index b8e6d6a368..0000000000 --- a/product/CMFTranslation/skins/content18/translation_register_form.dtml +++ /dev/null @@ -1,65 +0,0 @@ -<dtml-var standard_html_header> - -<dtml-let member="portal_membership.getAuthenticatedMember()" - translation_state="portal_workflow.getInfoFor(this(), 'translation_state')" - translation_history="portal_workflow.getInfoFor(this(), 'translation_history')" - url="portal_workflow.getInfoFor(this(), 'url')"> - -<div class="Desktop"> - -<h1> Register a Translation </h1> - -<dtml-if message> - <h2 class="DesktopTitle">&dtml-message;</h2> -</dtml-if> - -<p>To make use of a translation, it has to be reviewed by one of the site's reviewers. - A <b>registered</b> translation becomes the default translation for a given document - to the general member base and anonymous visitors.</p> - - -<form method="post" action="translation_status_modify"> - <table class="FormLayout"> - <tr> - <td valign=top align=left> - <strong>Status</strong> - </td> - <td valign=top align=left> - This item is currently in <b>&dtml-translation_state;</b> status. - <input type="hidden" name="workflow_action" value="register"> - </td> - </tr> - <tr> - <td valign=top align=left colspan=2> - <strong><em>Comments</em></strong><br> - <textarea name="comment" cols="60" rows="5" wrap="soft" - style="width: 100%"></textarea> - </td> - </tr> - <tr> - <td></td> - <td><input type="submit" value=" Register Translation "></td> - </tr> - </table> -</form> - -<dtml-if review_history> - <p><strong>Reviewing history</strong><br> - <dtml-in review_history mapping reverse> - <dtml-var time fmt="aCommon"> &dtml-action; - <dtml-if effective_date> - (effective: <dtml-var effective_date fmt="aCommon">) - </dtml-if> - by &dtml-actor;<br> - <dtml-if "_['sequence-item']['comments']"> - </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p> - </dtml-if> - </dtml-in> - </p> -</dtml-if> - -</dtml-let> - -</div> - -<dtml-var standard_html_footer> \ No newline at end of file diff --git a/product/CMFTranslation/skins/content18/translation_status_modify.py b/product/CMFTranslation/skins/content18/translation_status_modify.py deleted file mode 100755 index 030213fc9f..0000000000 --- a/product/CMFTranslation/skins/content18/translation_status_modify.py +++ /dev/null @@ -1,66 +0,0 @@ -## Script (Python) "translation_status_modify" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=workflow_action, comment='', url='' -##title=Modify the status of a content object -## -############################################################################## -# -# Base18: a Zope product which provides multilingual services for CMF Default -# documents. -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# 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 2 -# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## -context.portal_workflow.doActionFor( - context, - workflow_action, - comment=comment) - -content = context.restrictedTraverse(context.targetContent) -language = context.targetLanguage -translation = context.restrictedTraverse(context.id) - -if workflow_action == 'unregister': - context.portal_translations.unregisterTranslation(content,translation,language=language) - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=Status+changed.' - ) -elif workflow_action == 'register': - context.portal_translations.registerTranslation(content,translation,language=language) - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=Status+changed.' - ) -else: - redirect_url = '%s/view?%s' % ( context.absolute_url() - , 'portal_status_message=Status+changed.' - ) - -context.REQUEST[ 'RESPONSE' ].redirect( redirect_url ) diff --git a/product/CMFTranslation/skins/content18/translation_submit_form.dtml b/product/CMFTranslation/skins/content18/translation_submit_form.dtml deleted file mode 100755 index ea95719663..0000000000 --- a/product/CMFTranslation/skins/content18/translation_submit_form.dtml +++ /dev/null @@ -1,65 +0,0 @@ -<dtml-var standard_html_header> - -<dtml-let member="portal_membership.getAuthenticatedMember()" - translation_state="portal_workflow.getInfoFor(this(), 'translation_state')" - translation_history="portal_workflow.getInfoFor(this(), 'translation_history')" - url="portal_workflow.getInfoFor(this(), 'url')"> - -<div class="Desktop"> - -<h1> Submit a Translation for Review </h1> - -<dtml-if message> - <h2 class="DesktopTitle">&dtml-message;</h2> -</dtml-if> - -<p>To make use of a translation, it has to be reviewed by one of the site's reviewers. - A <b>registered</b> translation becomes the default translation for a given document - to the general member base and anonymous visitors.</p> - - -<form method="post" action="translation_status_modify"> - <table class="FormLayout"> - <tr> - <td valign=top align=left> - <strong>Status</strong> - </td> - <td valign=top align=left> - This item is currently in <b>&dtml-translation_state;</b> status. - <input type="hidden" name="workflow_action" value="submit"> - </td> - </tr> - <tr> - <td valign=top align=left colspan=2> - <strong><em>Comments</em></strong><br> - <textarea name="comment" cols="60" rows="5" wrap="soft" - style="width: 100%"></textarea> - </td> - </tr> - <tr> - <td></td> - <td><input type="submit" value=" Submit Translation "></td> - </tr> - </table> -</form> - -<dtml-if review_history> - <p><strong>Reviewing history</strong><br> - <dtml-in review_history mapping reverse> - <dtml-var time fmt="aCommon"> &dtml-action; - <dtml-if effective_date> - (effective: <dtml-var effective_date fmt="aCommon">) - </dtml-if> - by &dtml-actor;<br> - <dtml-if "_['sequence-item']['comments']"> - </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p> - </dtml-if> - </dtml-in> - </p> -</dtml-if> - -</dtml-let> - -</div> - -<dtml-var standard_html_footer> \ No newline at end of file diff --git a/product/CMFTranslation/skins/content18/translation_template.dtml b/product/CMFTranslation/skins/content18/translation_template.dtml deleted file mode 100755 index 8081cd16d3..0000000000 --- a/product/CMFTranslation/skins/content18/translation_template.dtml +++ /dev/null @@ -1,26 +0,0 @@ -<dtml-var standard_html_header> - -<div class="Desktop"> - -<div class="File"> - -<dtml-var content_byline> - -<p> -<b>Document</b>: <dtml-var getId><br> -<b>Description</b>: <dtml-var name="description" newline_to_br> -</p> - -<a href="&dtml-absolute_url;/TranslationTemplate">Download &dtml-title;</a> - -<div class="Discussion"> - -<dtml-var viewThreadsAtBottom> - -</div> - -</div> - -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/content18/translation_view.dtml b/product/CMFTranslation/skins/content18/translation_view.dtml deleted file mode 100755 index aebf059ef4..0000000000 --- a/product/CMFTranslation/skins/content18/translation_view.dtml +++ /dev/null @@ -1,16 +0,0 @@ -<dtml-let relative_to_content="1"> -<dtml-var standard_html_header> -</dtml-let> -<div class="Desktop"> - <div class="Document"> - <dtml-var content_byline> - <dtml-var CookedBody> - - <div class="Discussion"> - <dtml-var viewThreadsAtBottom> - </div> - - </div> -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/CurrentSection.py b/product/CMFTranslation/skins/nexedi/CurrentSection.py deleted file mode 100755 index 8d00724aba..0000000000 --- a/product/CMFTranslation/skins/nexedi/CurrentSection.py +++ /dev/null @@ -1,29 +0,0 @@ -## Script (Python) "change_language" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title=Modify the language cookie -## - -request = context.REQUEST -PARENTS = request.PARENTS -portal_root = context.portal_url.getPortalObject() -portal_root_path = portal_root.getPhysicalPath() -lang_list = context.gettext.get_available_languages() - -if len(PARENTS) >= (1 + len(portal_root_path)): - section = PARENTS[len(PARENTS) - 1 - - len(portal_root.getPhysicalPath())] - if section.id in lang_list: - if len(PARENTS) >= (2 + len(portal_root_path)): - section = PARENTS[len(PARENTS) - 2 - - len(portal_root_path)] - else: - section = context -else: - section = context - -return section diff --git a/product/CMFTranslation/skins/nexedi/CurrentSubSection.py b/product/CMFTranslation/skins/nexedi/CurrentSubSection.py deleted file mode 100755 index 42cfa9c6e7..0000000000 --- a/product/CMFTranslation/skins/nexedi/CurrentSubSection.py +++ /dev/null @@ -1,31 +0,0 @@ -## Script (Python) "change_language" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title=Modify the language cookie -## - -request = context.REQUEST -PARENTS = request.PARENTS -portal_root = context.portal_url.getPortalObject() -portal_root_path = portal_root.getPhysicalPath() -lang_list = context.gettext.get_available_languages() - -if len(PARENTS) >= (2 + len(portal_root_path)): - section = PARENTS[len(PARENTS) - 1 - - len(portal_root.getPhysicalPath())] - subsection = PARENTS[len(PARENTS) - 2 - - len(portal_root.getPhysicalPath())] - if section.id in lang_list: - if len(PARENTS) >= (3 + len(portal_root_path)): - subsection = PARENTS[len(PARENTS) - 3 - - len(portal_root_path)] - else: - subsection = context -else: - subsection = context - -return subsection \ No newline at end of file diff --git a/product/CMFTranslation/skins/nexedi/TODO b/product/CMFTranslation/skins/nexedi/TODO deleted file mode 100755 index 0f27ef4bbf..0000000000 --- a/product/CMFTranslation/skins/nexedi/TODO +++ /dev/null @@ -1,3 +0,0 @@ -TODO - - - make sure permission to see private folder is OK \ No newline at end of file diff --git a/product/CMFTranslation/skins/nexedi/breadcrumb.dtml b/product/CMFTranslation/skins/nexedi/breadcrumb.dtml deleted file mode 100755 index 9bc20e6809..0000000000 --- a/product/CMFTranslation/skins/nexedi/breadcrumb.dtml +++ /dev/null @@ -1,6 +0,0 @@ -<dtml-let portal_obj="portal_url.getPortalObject()"> -<dtml-if "portal_obj != this()"> -<a href="&dtml-portal_url;"><dtml-var "portal_obj.Title()"></a> <dtml-in "REQUEST.PARENTS[0:-(_.len(portal_obj.getPhysicalPath()))]" reverse>> <a href="<dtml-var local_absolute_url>"><dtml-var TranslatedTitle_or_id></a> </dtml-in> -<dtml-if "REQUEST.PARENTS[0] != this()">> <a href="<dtml-var local_absolute_url>"><dtml-var TranslatedTitle_or_id></a></dtml-if> -</dtml-if> -</dtml-let> diff --git a/product/CMFTranslation/skins/nexedi/change_language.py b/product/CMFTranslation/skins/nexedi/change_language.py deleted file mode 100755 index e8c33791ca..0000000000 --- a/product/CMFTranslation/skins/nexedi/change_language.py +++ /dev/null @@ -1,15 +0,0 @@ -## Script (Python) "change_language" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=REQUEST -##title=Modify the language cookie -## -lang = REQUEST['lang'] - -path = context.absolute_url()[len(REQUEST['SERVER_URL']):] or '/' -REQUEST.RESPONSE.setCookie('LOCALIZER_LANGUAGE', lang, path=path) - -REQUEST.RESPONSE.redirect(REQUEST['HTTP_REFERER']) diff --git a/product/CMFTranslation/skins/nexedi/combined_subjects.py b/product/CMFTranslation/skins/nexedi/combined_subjects.py deleted file mode 100755 index d59bb492fd..0000000000 --- a/product/CMFTranslation/skins/nexedi/combined_subjects.py +++ /dev/null @@ -1,40 +0,0 @@ -## Script (Python) "combined_subjects" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title=Combine all possible subjects and sub-subjects -## -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# 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 2 -# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## -def buildCombinedSubjects(topic): - myquery = topic.buildQuery() - if myquery.has_key('Subject'): - subjects = [myquery['Subject']] - else: - subjects = [] - for subtopic in topic.listSubtopics(): - subjects = subjects + buildCombinedSubjects(subtopic) - return subjects - -return buildCombinedSubjects(context) diff --git a/product/CMFTranslation/skins/nexedi/content_hide_form.dtml b/product/CMFTranslation/skins/nexedi/content_hide_form.dtml deleted file mode 100755 index 82125a8201..0000000000 --- a/product/CMFTranslation/skins/nexedi/content_hide_form.dtml +++ /dev/null @@ -1,81 +0,0 @@ -<dtml-comment> -Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - -This software is subject to the provisions of the Zope Public License, -Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -FOR A PARTICULAR PURPOSE -</dtml-comment> - -<dtml-var standard_html_header> - -<dtml-let member="portal_membership.getAuthenticatedMember()" - review_state="portal_workflow.getInfoFor(this(), 'review_state')" - review_history="portal_workflow.getInfoFor(this(), 'review_history')"> - -<div class="Desktop"> - -<h1> Hide Item </h1> - -<dtml-if message> - <h2 class="DesktopTitle">&dtml-message;</h2> - </dtml-if> - -<p align="center"><img src="corporate_workflow.png" /></p> - -<p>A <b>private</b> item is only available to its owner.</p> - -<p>Another way to control the visibility of an item is with its <b>effective - date</b>. An item is not publicly available before its effective date, - <em>even if its status is <b>published</b></em>.</p> - - - <form method="post" action="content_status_modify"> - <table class="FormLayout"> - <tr> - <td valign=top align=left> - <strong>Status</strong> - </td> - <td valign=top align=left> - This item is currently in <b>&dtml-review_state;</b> status. - <input type="hidden" name="workflow_action" value="hide"> - </td> - </tr> - <tr> - <td valign=top align=left colspan=2> - <strong><em>Comments</em></strong><br> - <textarea name="comment" cols="60" rows="5" wrap="soft" - style="width: 100%"></textarea> - </td> - </tr> - <tr> - <td></td> - <td><input type="submit" value=" Hide this Item "></td> - </tr> - </table> - </form> - -<dtml-if review_history> - <p><strong>Reviewing history</strong><br> - <dtml-in review_history mapping reverse> - <dtml-var time fmt="aCommon"> &dtml-action; - <dtml-if effective_date> - (effective: <dtml-var effective_date fmt="aCommon">) - </dtml-if> - by &dtml-actor;<br> - <dtml-if "_['sequence-item']['comments']"> - </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p> - </dtml-if> - </dtml-in> - </p> - </dtml-if> - -</dtml-let> - -</div> - -<dtml-var standard_html_footer> - diff --git a/product/CMFTranslation/skins/nexedi/content_publish_form.dtml b/product/CMFTranslation/skins/nexedi/content_publish_form.dtml deleted file mode 100755 index 5915e69e78..0000000000 --- a/product/CMFTranslation/skins/nexedi/content_publish_form.dtml +++ /dev/null @@ -1,80 +0,0 @@ -<dtml-comment> -Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - -This software is subject to the provisions of the Zope Public License, -Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -FOR A PARTICULAR PURPOSE -</dtml-comment> -<dtml-var standard_html_header> - -<dtml-let member="portal_membership.getAuthenticatedMember()" - review_state="portal_workflow.getInfoFor(this(), 'review_state')" - review_history="portal_workflow.getInfoFor(this(), 'review_history')"> - -<div class="Desktop"> - -<h1> Publish Item </h1> - -<dtml-if message> - <h2 class="DesktopTitle">&dtml-message;</h2> -</dtml-if> - -<p align="center"><img src="corporate_workflow.png" /></p> - -<p>A <b>published</b> item is available to the general - member base and anonymous visitors.</p> - -<p>Another way to control the visibility of an item is with its <b>effective - date</b>. An item is not publicly available before its effective date, - <em>even if its status is <b>published</b></em>.</p> - - -<form method="post" action="content_status_modify"> - <table class="FormLayout"> - <tr> - <td valign=top align=left> - <strong>Status</strong> - </td> - <td valign=top align=left> - This item is currently in <b>&dtml-review_state;</b> status. - <input type="hidden" name="workflow_action" value="publish"> - </td> - </tr> - <tr> - <td valign=top align=left colspan=2> - <strong><em>Comments</em></strong><br> - <textarea name="comment" cols="60" rows="5" wrap="soft" - style="width: 100%"></textarea> - </td> - </tr> - <tr> - <td></td> - <td><input type="submit" value=" Publish this Item "></td> - </tr> - </table> -</form> - -<dtml-if review_history> - <p><strong>Reviewing history</strong><br> - <dtml-in review_history mapping reverse> - <dtml-var time fmt="aCommon"> &dtml-action; - <dtml-if effective_date> - (effective: <dtml-var effective_date fmt="aCommon">) - </dtml-if> - by &dtml-actor;<br> - <dtml-if "_['sequence-item']['comments']"> - </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p> - </dtml-if> - </dtml-in> - </p> -</dtml-if> - -</dtml-let> - -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/content_reject_form.dtml b/product/CMFTranslation/skins/nexedi/content_reject_form.dtml deleted file mode 100755 index 07ba31874d..0000000000 --- a/product/CMFTranslation/skins/nexedi/content_reject_form.dtml +++ /dev/null @@ -1,78 +0,0 @@ -<dtml-comment> -Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - -This software is subject to the provisions of the Zope Public License, -Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -FOR A PARTICULAR PURPOSE -</dtml-comment> - -<dtml-var standard_html_header> - -<dtml-let member="portal_membership.getAuthenticatedMember()" - review_state="portal_workflow.getInfoFor(this(), 'review_state')" - review_history="portal_workflow.getInfoFor(this(), 'review_history')"> - -<div class="Desktop"> - -<h1> Reject Item </h1> - -<dtml-if message> - <h2 class="DesktopTitle">&dtml-message;</h2> -</dtml-if> - -<p align="center"><img src="corporate_workflow.png" /></p> - -<p>Use this form to reject the publication of a content item and set its - status to <b>Private</b>, thereby making it unavailable to - other portal members and visitors.</p> - - -<form method="post" action="content_status_modify"> - <table class="FormLayout"> - <tr> - <td valign=top align=left> - <strong>Status</strong> - </td> - <td valign=top align=left> - This item is currently in <b>&dtml-review_state;</b> status. - <input type="hidden" name="workflow_action" value="reject"> - </td> - </tr> - <tr> - <td valign=top align=left colspan=2> - <strong><em>Comments</em></strong><br> - <textarea name="comment" cols="60" rows="5" wrap="soft" - style="width: 100%"></textarea> - </td> - </tr> - <tr> - <td></td> - <td><input type="submit" value=" Reject this Item "></td> - </tr> - </table> -</form> - -<dtml-if review_history> - <p><strong>Reviewing history</strong><br> - <dtml-in review_history mapping reverse> - <dtml-var time fmt="aCommon"> &dtml-action; - <dtml-if effective_date> - (effective: <dtml-var effective_date fmt="aCommon">) - </dtml-if> - by &dtml-actor;<br> - <dtml-if "_['sequence-item']['comments']"> - </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p> - </dtml-if> - </dtml-in> - </p> -</dtml-if> - -</dtml-let> - -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/content_release_form.dtml b/product/CMFTranslation/skins/nexedi/content_release_form.dtml deleted file mode 100755 index 822fc047d4..0000000000 --- a/product/CMFTranslation/skins/nexedi/content_release_form.dtml +++ /dev/null @@ -1,81 +0,0 @@ -<dtml-comment> -Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - -This software is subject to the provisions of the Zope Public License, -Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -FOR A PARTICULAR PURPOSE -</dtml-comment> - -<dtml-var standard_html_header> - -<dtml-let member="portal_membership.getAuthenticatedMember()" - review_state="portal_workflow.getInfoFor(this(), 'review_state')" - review_history="portal_workflow.getInfoFor(this(), 'review_history')"> - -<div class="Desktop"> - -<h1> Release Item </h1> - -<dtml-if message> - <h2 class="DesktopTitle">&dtml-message;</h2> -</dtml-if> - -<p align="center"><img src="corporate_workflow.png" /></p> - -<p>A <b>published</b> item is available to the general - member base but not to anonymous visitors.</p> - -<p>Another way to control the visibility of an item is with its <b>effective - date</b>. An item is not publicly available before its effective date, - <em>even if its status is <b>published</b></em>.</p> - - -<form method="post" action="content_status_modify"> - <table class="FormLayout"> - <tr> - <td valign=top align=left> - <strong>Status</strong> - </td> - <td valign=top align=left> - This item is currently in <b>&dtml-review_state;</b> status. - <input type="hidden" name="workflow_action" value="publish"> - </td> - </tr> - <tr> - <td valign=top align=left colspan=2> - <strong><em>Comments</em></strong><br> - <textarea name="comment" cols="60" rows="5" wrap="soft" - style="width: 100%"></textarea> - </td> - </tr> - <tr> - <td></td> - <td><input type="submit" value=" Release this Item "></td> - </tr> - </table> -</form> - -<dtml-if review_history> - <p><strong>Reviewing history</strong><br> - <dtml-in review_history mapping reverse> - <dtml-var time fmt="aCommon"> &dtml-action; - <dtml-if effective_date> - (effective: <dtml-var effective_date fmt="aCommon">) - </dtml-if> - by &dtml-actor;<br> - <dtml-if "_['sequence-item']['comments']"> - </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p> - </dtml-if> - </dtml-in> - </p> -</dtml-if> - -</dtml-let> - -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/content_retract_form.dtml b/product/CMFTranslation/skins/nexedi/content_retract_form.dtml deleted file mode 100755 index f6c9b07aa2..0000000000 --- a/product/CMFTranslation/skins/nexedi/content_retract_form.dtml +++ /dev/null @@ -1,78 +0,0 @@ -<dtml-comment> -Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - -This software is subject to the provisions of the Zope Public License, -Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -FOR A PARTICULAR PURPOSE -</dtml-comment> - -<dtml-var standard_html_header> - -<dtml-let member="portal_membership.getAuthenticatedMember()" - review_state="portal_workflow.getInfoFor(this(), 'review_state')" - review_history="portal_workflow.getInfoFor(this(), 'review_history')"> - -<div class="Desktop"> - -<h1> Retract Item </h1> - -<dtml-if message> - <h2 class="DesktopTitle">&dtml-message;</h2> -</dtml-if> - -<p align="center"><img src="corporate_workflow.png" /></p> - -<p>Use this form to retract a content item by setting its - status to <b>Private</b>, thereby making it unavailable to - other portal members and visitors.</p> - - -<form method="post" action="content_status_modify"> - <table class="FormLayout"> - <tr> - <td valign=top align=left> - <strong>Status</strong> - </td> - <td valign=top align=left> - This item is currently in <b>&dtml-review_state;</b> status. - <input type="hidden" name="workflow_action" value="retract"> - </td> - </tr> - <tr> - <td valign=top align=left colspan=2> - <strong><em>Comments</em></strong><br> - <textarea name="comment" cols="60" rows="5" wrap="soft" - style="width: 100%"></textarea> - </td> - </tr> - <tr> - <td></td> - <td><input type="submit" value=" Retract this Item "></td> - </tr> - </table> -</form> - -<dtml-if review_history> - <p><strong>Reviewing history</strong><br> - <dtml-in review_history mapping reverse> - <dtml-var time fmt="aCommon"> &dtml-action; - <dtml-if effective_date> - (effective: <dtml-var effective_date fmt="aCommon">) - </dtml-if> - by &dtml-actor;<br> - <dtml-if "_['sequence-item']['comments']"> - </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p> - </dtml-if> - </dtml-in> - </p> -</dtml-if> - -</dtml-let> - -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/content_show_form.dtml b/product/CMFTranslation/skins/nexedi/content_show_form.dtml deleted file mode 100755 index ba95d67450..0000000000 --- a/product/CMFTranslation/skins/nexedi/content_show_form.dtml +++ /dev/null @@ -1,82 +0,0 @@ -<dtml-comment> -Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - -This software is subject to the provisions of the Zope Public License, -Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -FOR A PARTICULAR PURPOSE -</dtml-comment> - -<dtml-var standard_html_header> - -<dtml-let member="portal_membership.getAuthenticatedMember()" - review_state="portal_workflow.getInfoFor(this(), 'review_state')" - review_history="portal_workflow.getInfoFor(this(), 'review_history')"> - -<div class="Desktop"> - -<h1> Show Item </h1> - -<dtml-if message> - <h2 class="DesktopTitle">&dtml-message;</h2> - </dtml-if> - -<p align="center"><img src="corporate_workflow.png" /></p> - -<p>A <b>restricted</b> item is available to your partners ie. Members which -have a Partner local role.</p> - -<p>Another way to control the visibility of an item is with its <b>effective - date</b>. An item is not publicly available before its effective date, - <em>even if its status is <b>published</b></em>.</p> - - - <form method="post" action="content_status_modify"> - <table class="FormLayout"> - <tr> - <td valign=top align=left> - <strong>Status</strong> - </td> - <td valign=top align=left> - This item is currently in <b>&dtml-review_state;</b> status. - <input type="hidden" name="workflow_action" value="show"> - </td> - </tr> - <tr> - <td valign=top align=left colspan=2> - <strong><em>Comments</em></strong><br> - <textarea name="comment" cols="60" rows="5" wrap="soft" - style="width: 100%"></textarea> - </td> - </tr> - <tr> - <td></td> - <td><input type="submit" value=" Show this Item to Partners "></td> - </tr> - </table> - </form> - -<dtml-if review_history> - <p><strong>Reviewing history</strong><br> - <dtml-in review_history mapping reverse> - <dtml-var time fmt="aCommon"> &dtml-action; - <dtml-if effective_date> - (effective: <dtml-var effective_date fmt="aCommon">) - </dtml-if> - by &dtml-actor;<br> - <dtml-if "_['sequence-item']['comments']"> - </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p> - </dtml-if> - </dtml-in> - </p> - </dtml-if> - -</dtml-let> - -</div> - -<dtml-var standard_html_footer> - diff --git a/product/CMFTranslation/skins/nexedi/content_submit_form.dtml b/product/CMFTranslation/skins/nexedi/content_submit_form.dtml deleted file mode 100755 index a580d2abe4..0000000000 --- a/product/CMFTranslation/skins/nexedi/content_submit_form.dtml +++ /dev/null @@ -1,83 +0,0 @@ -<dtml-comment> -Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - -This software is subject to the provisions of the Zope Public License, -Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -FOR A PARTICULAR PURPOSE -</dtml-comment> - -<dtml-var standard_html_header> - -<dtml-let member="portal_membership.getAuthenticatedMember()" - review_state="portal_workflow.getInfoFor(this(), 'review_state')" - review_history="portal_workflow.getInfoFor(this(), 'review_history')"> - -<div class="Desktop"> - -<h1> Submit Item for Review </h1> - -<dtml-if message> - <h2 class="DesktopTitle">&dtml-message;</h2> -</dtml-if> - -<p align="center"><img src="corporate_workflow.png" /></p> - -<p>To make an item published, it - has to be reviewed by one of the site's reviewers. - A <b>published</b> item is available to the general - member base and eventually to anonymous visitors.</p> - -<p>Another way to control the visibility of an item is with its <b>effective - date</b>. An item is not publicly available before its effective date, - <em>even if its status is <b>published</b></em>.</p> - - -<form method="post" action="content_status_modify"> - <table class="FormLayout"> - <tr> - <td valign=top align=left> - <strong>Status</strong> - </td> - <td valign=top align=left> - This item is currently in <b>&dtml-review_state;</b> status. - <input type="hidden" name="workflow_action" value="submit"> - </td> - </tr> - <tr> - <td valign=top align=left colspan=2> - <strong><em>Comments</em></strong><br> - <textarea name="comment" cols="60" rows="5" wrap="soft" - style="width: 100%"></textarea> - </td> - </tr> - <tr> - <td></td> - <td><input type="submit" value=" Submit Item "></td> - </tr> - </table> -</form> - -<dtml-if review_history> - <p><strong>Reviewing history</strong><br> - <dtml-in review_history mapping reverse> - <dtml-var time fmt="aCommon"> &dtml-action; - <dtml-if effective_date> - (effective: <dtml-var effective_date fmt="aCommon">) - </dtml-if> - by &dtml-actor;<br> - <dtml-if "_['sequence-item']['comments']"> - </p><dtml-var "_['sequence-item']['comments']" fmt="structured-text"><p> - </dtml-if> - </dtml-in> - </p> -</dtml-if> - -</dtml-let> - -</div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/corporate_workflow.png b/product/CMFTranslation/skins/nexedi/corporate_workflow.png deleted file mode 100755 index 76292e6388bdbf1cae6f62e15eb56a9e0d4f4d7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8835 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 diff --git a/product/CMFTranslation/skins/nexedi/default_stylesheet.dtml b/product/CMFTranslation/skins/nexedi/default_stylesheet.dtml deleted file mode 100755 index 61f6c48536..0000000000 --- a/product/CMFTranslation/skins/nexedi/default_stylesheet.dtml +++ /dev/null @@ -1,589 +0,0 @@ -<dtml-comment> -Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - -This software is subject to the provisions of the Zope Public License, -Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -FOR A PARTICULAR PURPOSE -</dtml-comment> - -<dtml-unless do_inline_css> -<dtml-call "RESPONSE.setHeader('Content-Type','text/css')"> -</dtml-unless> -<dtml-with stylesheet_properties> - -body { - margin-top: 0; - margin-left: 0; - margin-right: 0; - margin-bottom: 0; - background-color: &dtml-bg_color;; - color: &dtml-base_font_color;; - font-family: &dtml-base_font_family;; - font-size: &dtml-base_font_size;; -} - -a:link { - color: &dtml-link_color;; - text-decoration: none; -} - -a:visited { - color: &dtml-vlink_color;; - text-decoration: none; -} - -a:active { - color: &dtml-alink_color; - text-decoration: none; -} - -a:hover { - text-decoration: underline; - color: &dtml-hover_color;; -} - -.invisible { - font-size: 80%; - color: &dtml-bg_color;; -} - -.mild { - color: #7f7f7f; -} - -.DesktopStatusBar{ - font-size: 80%; - font-family: &dtml-secondary_font_family;; - color: #ff0000; -} - -table { - width: 100%; - border: 0; -} - -td.SideBar { - width: 15%; - vertical-align: top; -} - -table.ActionBox { - font-family: &dtml-primary_font_family;; - background-color: &dtml-primary_accent_color;; - margin-right: 5px; - margin-left: 1px; - margin-top: 10px; -} - -table.ActionBox tr td { - font-size: 70%; -} - -table.ActionBox tr td.ActionTitle { - font-weight: bold -} - -table.ActionBox tr.GuestActions { - background-color: &dtml-guest_actions_color;; -} - -table.ActionBox tr.GuestActions td a:link { - color: &dtml-guest_actions_link_color;; - text-decoration: none; -} - -table.ActionBox tr.GuestActions td a:visited { - color: &dtml-guest_actions_link_color;; - text-decoration: none; -} - -table.ActionBox tr.GuestActions td a:active { - color: &dtml-guest_actions_link_color;; - text-decoration: none; -} - -table.ActionBox tr.GuestActions td a:hover { - color: &dtml-hover_color;; - text-decoration: none; -} - -table.ActionBox tr.MemberActions { - background-color: &dtml-secondary_accent_color;; -} - -table.ActionBox tr.MemberActions td { - color: &dtml-secondary_accent_font_color;; -} - -table.ActionBox tr.MemberActions td a:link { - color: &dtml-secondary_accent_link_color;; - text-decoration: none; -} - -table.ActionBox tr.MemberActions td a:visited { - color: &dtml-secondary_accent_vlink_color;; - text-decoration: none; -} - -table.ActionBox tr.MemberActions td a:active{ - color: &dtml-secondary_accent_alink_color;; - text-decoration: none; -} - -table.ActionBox tr.MemberActions td a:hover { - color: &dtml-hover_color;; - text-decoration: none; -} - -td.Desktop { - vertical-align: top; -} - -td.Desktop table tr { - vertical-align: top; -} - -div.Desktop p { - font-size: 100%; - margin-right:10pt; - font-family: &dtml-primary_font_family;; -} - -div.Desktop h1 { - font-size: 120%; - margin-right:100pt; - font-family: &dtml-secondary_font_family;; -} - -div.AuthWarning { - text-align: center; - font-style: italic; -} - -div.AuthWarning table { - border: 0; -} - -div.AuthWarning tr.Hot { - color: #FF0000; -} - -div.Error { - color: #FF0000; -} - -p.DesktopStatusBar { - font-size: 100%; - font-family: &dtml-secondary_font_family;; - font-style: italic; - font-weight: bold; -} - -table.FormLayout { - width: 80%; -} - -table.FormLayout tr { - vertical-align: top; -} - -table.FormLayout tr th.TextField { - vertical-align: top; -} - -table.FormLayout tr td.TextField { - vertical-align: top; -} - -table.FormLayout th { - text-align: right; -} - -table.FormLayout dl.FieldHelp dd { - font-size: 70%; -} - -table.ContentsList { -} - -table.ContentsList tr td img { - border: 0; -} - -table.SearchResults { - width: auto; -} - -table.SearchResults tr th { - text-align: left; -} - -table.SearchResults tr td img { - border: 0; -} - -table.Wizard { - width: auto; -} - -table.Wizard tr { - vertical-align: top; -} - -table.Wizard tr th { - text-align: right; -} - -div.NewsBar { - text-align: right; -} - -table.NewsItems { - border: 1; - padding: 1; -} - - -td.NewsBorder { - background-color: &dtml-primary_accent_color;; -} - -td.NewsListing { - background-color: &dtml-secondary_accent_color;; - color: &dtml-bg_color;; -} - -.NewsLeadin { - background-color: &dtml-bg_color;; - color: &dtml-primary_accent_color;; -} - -.NewsByLine { - background-color: &dtml-primary_accent_color;; - color: &dtml-bg_color;; -} - -.NewsDateline { - background-color: &dtml-primary_accent_color;; - color: &dtml-bg_color;; -} - -td.NewsTitle { - background-color: &dtml-primary_accent_color;; - color: &dtml-primary_accent_font_color;; - text-align: center; - font-size: 90%; - font-weight: bold; -} - -tr.NewsItemRow td { - background-color: &dtml-highlight_color;; - font-size: 70%; -} - -tr.NewsItemRow td.title { - margin-top: 5px; - margin-bottom: 1px; - font-size: 100%; - font-weight: normal; -} - -tr.NewsItemRow td.title p { - margin-top: 3px; - margin-bottom: 1px; - font-size: 100%; - font-weight: normal; -} - -tr.NewsItemRow td.title p.description { - margin-top: 0px; - margin-left: 5px; - margin-bottom: 0px; - font-size: 70%; - font-weight: normal; -} - -p.NewsHeadline { - background-color: &dtml-primary_accent_color;; -} - -td.ListName { - background-color: &dtml-primary_accent_color;; - color: &dtml-primary_accent_font_color;; - font-weight: bold; -} -td.ListDefinition { - font-style: italic; -} - -table.logobox { - padding-top: 1px; - padding-left: 2px; - border: 0px; -} - -td.TitleBox { - vertical-align: top; - font-family: Verdana, Arial, Helvetica, sans-serif; - color: &dtml-primary_accent_color;; - text-align: right; - font-weight: bolder; - font-size: 18pt; - padding-top: 6px; -} - -td.LanguageBox { - vertical-align: top; - text-align: right; - padding-right: 20; -} - -.subsectiontitle { - text-align: left; - color: navy; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 8pt; - font-weight: normal; - margin-left: 5pt; - margin-bottom: 1pt; - margin-top: 1pt -} - - -table.menubox { - margin-right: 5px; - margin-left: 1px; - margin-top: 20px; -} - -table.menubox .selected { - background-color: &dtml-secondary_accent_color;; -} - -table.menubox td.endline { - border-top: 3px; - border-color: #6524B9; - margin-top: 0px; -} - -table.menubox a:link { - color: navy; - text-decoration: none; -} - -table.menubox a:visited { - color: navy; - text-decoration: none; -} - -table.menubox a:active { - color: navy; - text-decoration: none; -} - -table.menubox a:hover { - color: black; - background-color: &dtml-highlight_color;; - text-decoration: underline; -} - -table.menubox td.sectiontitle { - border-bottom: 3px; - border-color: #E6BCE6; - padding-bottom: 0px; - padding-top: 10px; - margin-top: 0px; - margin-bottom: 0px; -} - -table.menubox p.sectiontitle { - text-align: left; - color: navy; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10pt; - font-weight: bolder; - font-variant: small-caps; - margin-bottom: 2pt; - margin-top: 10pt; -} - -div.breadcrumb { - text-align: left; - color: black; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 8pt; - margin-bottom: 10pt; - margin-top: 10pt -} - -.breadcrumb p { - text-align: left; - color: black; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 8pt; - margin-bottom: 10pt; - margin-top: 10pt -} - -div.Document { - font-size: 11pt; - background-color: &dtml-bg_color;; - color: &dtml-base_font_color;; - font-family: &dtml-base_font_family;; - margin-left: 10pt; - margin-bottom: 3pt; - margin-top: 3pt; - line-height: 17pt; - text-indent: 0pt; -} - -div.Document p { - font-family: &dtml-base_font_family;; - font-size: 11pt; - margin-left: 10pt; - margin-bottom: 3pt; - margin-top: 3pt; - line-height: 17pt; - text-indent: 0pt; -} - -div.Document p.summary { - font-weight: bold; -} - -div.Document ul { - font-family: &dtml-base_font_family;; - font-size: 11pt; - margin-left: 10pt; - margin-bottom: 1pt; - margin-top: 1pt; - line-height: 16pt; - text-indent: 0pt; - vertical-align: middle; -} - -div.Document ul li { - margin-left: 0pt; - vertical-align: middle; -} - -div.Document ol { - font-family: &dtml-base_font_family;; - font-size: 11pt; - margin-left: 10pt; - margin-bottom: 1pt; - margin-top: 1pt; - line-height: 16pt; - text-indent: 0pt; - vertical-align: middle; -} - -div.Document ol li { - margin-left: 0pt; - vertical-align: middle; -} - -div.Document h1 { - text-align: left; - color: #333333; - font-family: &dtml-primary_font_family;; - font-weight: bold; - margin-left: 0pt; - margin-top: 15pt; - margin-bottom: 3pt; - font-size: 14pt -} - -div.Document h1 a:link { - color: #333333; -} - -div.Document h1 a:visited { - color: #333333; -} - -div.Document h1 a:active { - color: &dtml-alink_color; - text-decoration: none; -} - -div.Document h1 a:hover { - text-decoration: underline; - color: &dtml-hover_color;; -} - - -div.Document h2 { - text-align: black; - color: #666666; - font-family: &dtml-secondary_font_family;; - font-weight: bold; - margin-left: 10pt; - margin-top: 9pt; - margin-bottom: 3pt; - font-size: 13pt; -} - -div.Document h3 { - text-align: left; - color: &dtml-primary_accent_color;; - font-family: &dtml-base_font_family;; - font-style: italic; - font-weight: bolder; - margin-left: 10pt; - margin-top: 6pt; - margin-bottom: 2pt; - letter-spacing: 1pt; - font-size: 10pt; -} - -table.tophead { - cellpadding: 1; - cellspacing: 1; - background-color: #CCCCCC; - border-bottom-width: 1pt; - border-top-width: 0; - border-left-width: 0; - border-right-width: 0; - border-color: #6f6f6f; - border-style:solid; -} - -table.tophead tr { - font-size: 11px; - font-family: Verdana, Arial, Helvetica, sans-serif; - text-decoration: none; - color: #505050; - vertical-align: middle; - height: 11px; -} - -table.tophead td { - vertical-align: middle; - height: 10px; -} - -table.tophead p { - line-height: 5pt; - background-color: #6699CC; -} - -.legalinfo { - margin-bottom: 40pt; - margin-top: 20pt; - font-size: 8pt; - font-family: Verdana, Arial, Helvetica, sans-serif; - text-align: center; -} - -.LanguageBox { - margin-bottom: 0px; - margin-top: 0px; - -} - -</dtml-with> diff --git a/product/CMFTranslation/skins/nexedi/document18_miniprint.dtml b/product/CMFTranslation/skins/nexedi/document18_miniprint.dtml deleted file mode 100755 index 8e49a5b804..0000000000 --- a/product/CMFTranslation/skins/nexedi/document18_miniprint.dtml +++ /dev/null @@ -1,44 +0,0 @@ -<dtml-comment> -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Jean-Paul Smets <jp@nexedi.com> - -WARNING: This program as such is intended to be used by professional -programmers who take the whole responsability of assessing all potential -consequences resulting from its eventual inadequacies and bugs - -This program as such is not intended to be used by end users. End -users who are looking for a ready-to-use solution with commercial -garantees and support are strongly adviced to contract a Free Software -Service Company - -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 2 -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, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -</dtml-comment> - - -<dtml-let relative_to_content="1"> -<dtml-var printable_html_header> -</dtml-let> - <div class="Document"> - - <p class="title">&dtml-TranslatedTitle;</h1> - - - <dtml-var TranslatedBody> - - - </div> - -<dtml-var printable_html_footer> - diff --git a/product/CMFTranslation/skins/nexedi/document18_print.dtml b/product/CMFTranslation/skins/nexedi/document18_print.dtml deleted file mode 100755 index 892691820b..0000000000 --- a/product/CMFTranslation/skins/nexedi/document18_print.dtml +++ /dev/null @@ -1,44 +0,0 @@ -<dtml-comment> -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Jean-Paul Smets <jp@nexedi.com> - -WARNING: This program as such is intended to be used by professional -programmers who take the whole responsability of assessing all potential -consequences resulting from its eventual inadequacies and bugs - -This program as such is not intended to be used by end users. End -users who are looking for a ready-to-use solution with commercial -garantees and support are strongly adviced to contract a Free Software -Service Company - -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 2 -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, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -</dtml-comment> - -<dtml-let relative_to_content="1"> -<dtml-var printable_html_header> -</dtml-let> - <div class="Document"> - - <p class="title">&dtml-TranslatedTitle;</h1> - - <p class="summary"><dtml-var TranslatedDescription></p> - - <dtml-var TranslatedBody> - - - </div> - -<dtml-var printable_html_footer> - diff --git a/product/CMFTranslation/skins/nexedi/document18_view.dtml b/product/CMFTranslation/skins/nexedi/document18_view.dtml deleted file mode 100755 index 47121d9a7f..0000000000 --- a/product/CMFTranslation/skins/nexedi/document18_view.dtml +++ /dev/null @@ -1,16 +0,0 @@ -<dtml-let relative_to_content="1"> -<dtml-var standard_html_header> -</dtml-let> - <div class="Document"> - <dtml-var TranslatedBody> - </div> - - <dtml-if "not portal_membership.isAnonymousUser()"> - <div class="ContentBy"><dtml-var content_byline></div> - </dtml-if> - - <div class="Discussion"> - <dtml-var viewThreadsAtBottom> - </div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/document_print.dtml b/product/CMFTranslation/skins/nexedi/document_print.dtml deleted file mode 100755 index beb81a567a..0000000000 --- a/product/CMFTranslation/skins/nexedi/document_print.dtml +++ /dev/null @@ -1,43 +0,0 @@ -<dtml-comment> -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Jean-Paul Smets <jp@nexedi.com> - -WARNING: This program as such is intended to be used by professional -programmers who take the whole responsability of assessing all potential -consequences resulting from its eventual inadequacies and bugs - -This program as such is not intended to be used by end users. End -users who are looking for a ready-to-use solution with commercial -garantees and support are strongly adviced to contract a Free Software -Service Company - -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 2 -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, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -</dtml-comment> - -<dtml-let relative_to_content="1"> -<dtml-var printable_html_header> -</dtml-let> - <div class="Document"> - <div align="center"> - <h1><dtml-var title></h1> - </div> - <dtml-var TranslatedBody> - </div> - - <dtml-if "not portal_membership.isAnonymousUser()"> - <div class="ContentBy"><dtml-var content_byline></div> - </dtml-if> - -<dtml-var printable_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/document_view.dtml b/product/CMFTranslation/skins/nexedi/document_view.dtml deleted file mode 100755 index 56408c86db..0000000000 --- a/product/CMFTranslation/skins/nexedi/document_view.dtml +++ /dev/null @@ -1,16 +0,0 @@ -<dtml-let relative_to_content="1"> -<dtml-var standard_html_header> -</dtml-let> - <div class="Document"> - <dtml-var CookedBody> - </div> - - <dtml-if "not portal_membership.isAnonymousUser()"> - <div class="ContentBy"><dtml-var content_byline></div> - </dtml-if> - - <div class="Discussion"> - <dtml-var viewThreadsAtBottom> - </div> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/favicon.ico b/product/CMFTranslation/skins/nexedi/favicon.ico deleted file mode 100755 index 05a5a14d61c6459950f1c5e355cc7ca629f8771a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmV+!0p|WkNk%w1VGsZi0E7SltgO8=Gh7T1K>z?V2M0MjJ7U(>-WfAyDN=<qW|=}l zXy4!E6DL|PUXdwQix7UX0KNDUbEyE#|4&bH|NsB8vcVV_MgW7_0HEmyhROzW!xc@E z0A|d+y~+q!umAu5A^8LW6aXIpEC2ui01yBW000G+;3s}SAPfUh0OM#B#DOFUauCYm z22A5T5J<$)U<7oZLhm7IIv>ReiO_gZD3Yr)(hyV%2Zs~ult3H@1pyHWy5B;CWstaF z?)ZErL7;0cfPsP<2?GKM8yt#@j2j373So?s9B2v^0t$(g92*J*9Ul`tn~hN-20T6+ f9v&M+3^^kUYBDr70ux9r6$%0b1QrvaBOw4gkqKOD diff --git a/product/CMFTranslation/skins/nexedi/fileprint.png b/product/CMFTranslation/skins/nexedi/fileprint.png deleted file mode 100755 index d96a90e809438d18252ef85da358c4a38052859b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1210 zcmV;r1V#IaP)<h*8VUda018P+L{b0%02TlM02T-a0002Qv}`*7000DMK}|sb0I`n? z{9y$E000JJOGiWi?f~up?uu#f6aWAK32;bRa{vGf5C8xR5CN?ty>$Qp00(qQO+^RL z3lbDN2?}dOx&QzKI7vi7RCt`7l}&6^RTze!d*|Mn-f8X7#A&BMXah+trs>bZz>1$i zFzv#UkPLy4NaI2iQWIjp5*BQ<F)=m@3tU)S)euQVYjBLvv@CGZG$<9Tq*kqo)wDKk zVd&hsKj(Zd3L^+e^<A9g-rV!P&-a~k&w*7clgUVPbF&<1-z}^8-de5k<m4nnpS*wX zQKn~aQCpSZ+~8$nwH^<ty|rHEe;$>5Zb@9%71wnoznqi#U&iD>`|d|p@<igcJ&nYk zswZAqj}fskjJtrQMZB_}vmXwiyk)%GGfe(AFLmpm=G@?A<B4Uox7N!C@AXrfYIxwi zXoZ9xA{yoA@s{TicY(^y&jT3$N_>y@pQZp3`e+q^C_+C^7zC)?{F7VJwx<z0;>+1H z@1lYNX2in4KoCSLR9FB}=+H;`c|>^}d+RKK@sP2Im|M1NQA#NaVS-dLNpNSLhzc>I zB^a11)3gR1qLq*K^B4&F_U{aQK1_RSy#Pe+H*ITcQzuWJq@|^W@5jHP=Zy?zX$69T zp;zcc2WaJ?f&w}y;JbH_V42rXou(u62d{R%#L&>q6=D&I?%liBJ9_jeb8~ZCyLOF& z5^j7uM$0pEc%|!!r=DFYJ18Jp0EGlT28y6?i*tjQIs9@PU0t6t_{B}b1lYQDt9Rtc z5oTv+@jQ>FrY1IS+(_#yr+MwnC^x?T3je1|6#o1XQ9dXaoxcjf9VAp7d$W(;Q>ARE zX)LzYSOFGX*Cm_Hvb3~B7>33D8jHoadi5%OeSPfTpW*PXYMSddph{988muVmpWDxu zpSAJAi`nAh8R>Ld`uqE_EQ@3^iHJ}r6v$??%+AiDlqv??ACk#r=-8FwosYg_czBo} z#=F?u^mY;0$Ye6o-QA6C+nA<_)*8#QSi5#DT5CMdBb&`KGcyB#@B5UOmlKP{$Y!&g zKYyO>+qY9&TT4Yn1@U;C?(S}^#l=My78bB=o05_elv0?cNj{%PM2N*=?Ax~wpxCad zsVTJ9G&VNU(9nSI`#6q6Sy>quE?oG#$2~ng)YjILOeWD<6OBf(Z5yQ&mSqu*Mlns3 zSS-e-O`9GFnV6U$2m%s`1Q#z}#I|jQhK9IzRtUg}6DO#yt|pmGvS!U1lv2dwaUzij zN~vO1wr%4$4s~^PxUS3f>(@Dc{5X!|5QZTmBO}E>&j1)59hKqXVE{TiJ4vNdtXsE^ zL?S^D1eBJRlFQ{#O5r#Tb8~ZOtr;I5$8j8Txg5Ulvu)cp9(%f_)9GSJM@I)WH8oUL zR#H}0hGkhC{PiGo!NA7@T)K3L>FH?}7Z({D8(Y~Gk2AhsJ9qAsk&zJq4jno~O-%|_ zRaMxwjqm$ROiVB}HN{;Jqd5E*?bxwHu3WiN3@I-!CmM~?+uQrU{2r-vIxVa${6iP) YUy%h4gj(_Me*gdg07*qoM6N<$g3m%R6951J diff --git a/product/CMFTranslation/skins/nexedi/folder18_view.dtml b/product/CMFTranslation/skins/nexedi/folder18_view.dtml deleted file mode 100755 index d015d1c623..0000000000 --- a/product/CMFTranslation/skins/nexedi/folder18_view.dtml +++ /dev/null @@ -1,61 +0,0 @@ -<dtml-if "'index.html' in objectIds()"> - - <dtml-var index.html> - -<dtml-elif "'index.stx' in objectIds()"> - - <dtml-var index.stx> - -<dtml-elif "'default.htm' in objectIds()"> - - <dtml-var default.htm> - -<dtml-else> - -<dtml-var standard_html_header> - -<dtml-let folder_url=absolute_url> - -<div class="Document"> - -<dtml-if name="Description"> -<p><dtml-var TranslatedDescription></p> -</dtml-if> - -<dtml-in expr="objectValues()" skip_unauthorized - sort=TranslatedTitle_or_id> - - <dtml-let obj="_.getitem('sequence-item', 0 )" - folderish=isPrincipiaFolderish - portalish="_.hasattr( obj, 'isPortalContent' ) and obj.isPortalContent" - getIcon="_.hasattr(obj, 'getIcon') and obj.getIcon()" - icon="getIcon or _.getattr(obj, 'icon', '')"> - - <dtml-if portalish> - <h1> - <dtml-if icon> - <a href="&dtml-folder_url;/&dtml.url_quote-getId;"><img - src="&dtml-portal_url;/&dtml-icon;" alt="&dtml-Type;" border="0"> - </a> - </dtml-if> - - <a href="&dtml-folder_url;/&dtml.url_quote-getId;" - >&dtml-TranslatedTitle_or_id;</a> - </h1> - - <dtml-if name="Description"> - <p>&dtml.html_quote-TranslatedDescription;</p> - </dtml-if> - - </dtml-if> - - </dtml-let> -</dtml-in> - -</div> - -</dtml-let> - -<dtml-var standard_html_footer> - -</dtml-if> diff --git a/product/CMFTranslation/skins/nexedi/folder_localrole_form.dtml b/product/CMFTranslation/skins/nexedi/folder_localrole_form.dtml deleted file mode 100755 index ebd1f7424b..0000000000 --- a/product/CMFTranslation/skins/nexedi/folder_localrole_form.dtml +++ /dev/null @@ -1,140 +0,0 @@ -<dtml-var standard_html_header> - -<div class="Desktop"> - -<dtml-if message> - <p>&dtml-message;</p> - <hr> -</dtml-if> - -<div class="File"> - -<dtml-if name="role_submit"> - - <h2>Search results</h2> - - <dtml-in expr="portal_membership.searchMembers( search_param=search_param - , search_term=search_term - )" mapping sort="username"> - <dtml-if name="sequence-start"> - <p>Select Member(s) and a role to assign:</p> - - <form method="post" action="folder_localrole_edit"> - <input type="hidden" name="change_type" value="add"> - - <table class="FormLayout"> - <tr> - <td width="16"> </td> - <td><b>User ID</b></td> - <td><b>Email address</td> - </tr> - </dtml-if> - - <dtml-with sequence-item mapping only> - <tr> - <td width="16"><input type="checkbox" name="member_ids:list" -value="&dtml-username;"></td> - <td>&dtml-username;</td> - <td>&dtml-email;</td> - </tr> - </dtml-with> - - <dtml-if name="sequence-end"> - <tr><td colspan="3"> </td></tr> - </tr> - <td colspan="2"><b>Role to assign:</b></td> - <td> - <select name="member_role"> - <dtml-in expr="portal_membership.getCandidateLocalRoles( this() )"> - <option>&dtml-sequence-item;</option> - </dtml-in> - </select> - </td> - </tr> - <tr><td colspan="3"> </td></tr> - <tr> - <td width="16"> </td> - <td colspan="2"><input type="submit" value=" Assign Roles "></td> - </tr> - </table> - </form> - </dtml-if> - - </dtml-in> - -<dtml-else> - - <h2>Assign local roles</h2> - -<form method="post" action="folder_localrole_form"> - -<table class="FormLayout"> - <tr> - <td><b>Search by</b></td> - <td> - <select name="search_param"> - <option value="username">User Name</option> - <option value="email">Email Address</option> - </select> - </td> - </tr> - <tr> - <td><b>Search Term</b></td> - <td><input type="text" name="search_term" size="30"></td> - </tr> - <tr> - <td><br /></td> - <td><input type="submit" name="role_submit" value=" Search "></td> - </tr> -</table> - -</form> - -<p><hr></p> - -<h2>Currently assigned local roles</h2> - -<p>These users currently have local roles assigned in this folder:</p> - -<form method="post" action="folder_localrole_edit"> -<input type="hidden" name="change_type" value="delete"> -<input type="hidden" name="member_role" value=""> - -<table class="FormLayout"> - <tr> - <td width="16"> </td> - <td><b>User Name</b></td> - <td><b>Role(s)</b></td> - </tr> - - <dtml-in expr="this().get_local_roles()"> - <tr> - <td width="16"> - <dtml-if expr="_['sequence-key'] != -portal_membership.getAuthenticatedMember().getUserName()"> - <input type="checkbox" name="member_ids:list" value="&dtml-sequence-key;"> - <dtml-else> - - </dtml-if> - </td> - <td>&dtml-sequence-key;</td> - <td><dtml-var expr="_.string.join( _['sequence-item'], ', ')"></td> - </tr> - </dtml-in> - - <tr><td colspan="3"> </td></tr> - <tr> - <td><br /></td> - <td colspan="2"><input type="submit" value=" Delete "></td> - </tr> -</table> -</form> - -</dtml-if> - -</div> - -</div> - -<dtml-var standard_html_footer> - diff --git a/product/CMFTranslation/skins/nexedi/getLocalizedPath.py b/product/CMFTranslation/skins/nexedi/getLocalizedPath.py deleted file mode 100755 index 744c60548e..0000000000 --- a/product/CMFTranslation/skins/nexedi/getLocalizedPath.py +++ /dev/null @@ -1,43 +0,0 @@ -## Script (Python) "transformation_identity_update" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=lang -##title= -## - -from ZTUtils import make_query - -request = context.REQUEST -query = make_query(request.form) - -# Try to get the id of the DTML method / PT / etc. -method_id = request.URL0[len(request.URL1):] -my_id = context.id -if callable(my_id): my_id = my_id() -if '/' + my_id == method_id: - method_id = '' -relative_url = context.portal_url.getRelativeUrl(context) - -# Chop useless language information -for l in context.gettext.get_available_languages(): - if relative_url[0:len(l) + 1] == l + '/': - relative_url = relative_url[len(l) + 1:] - -# Chop useless / -if relative_url == '': - if len(method_id) > 0: - if method_id[0] == '/': - method_id = method_id[1:] - -# Build the new URL -if query == '': - return '%s/%s/%s%s' % (context.portal_url.getPortalObject().absolute_url(), lang, - relative_url, - method_id) -else: - return '%s/%s/%s%s?%s' % (context.portal_url.getPortalObject().absolute_url(), lang, - relative_url, - method_id, query) diff --git a/product/CMFTranslation/skins/nexedi/index_html b/product/CMFTranslation/skins/nexedi/index_html deleted file mode 100755 index 08a28e2f34..0000000000 --- a/product/CMFTranslation/skins/nexedi/index_html +++ /dev/null @@ -1,38 +0,0 @@ -<dtml-comment> -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Jean-Paul Smets <jp@nexedi.com> - -WARNING: This program as such is intended to be used by professional -programmers who take the whole responsability of assessing all potential -consequences resulting from its eventual inadequacies and bugs - -This program as such is not intended to be used by end users. End -users who are looking for a ready-to-use solution with commercial -garantees and support are strongly adviced to contract a Free Software -Service Company - -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 2 -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, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -</dtml-comment> - -<dtml-if "'index.html' in objectIds()"> -<dtml-var index.html> -<dtml-else> -<dtml-var standard_html_header> -<div class="Document"> -<dtml-var description fmt="structured-text"> -</div> -<dtml-var standard_html_footer> -</dtml-if> - diff --git a/product/CMFTranslation/skins/nexedi/index_html.dtml b/product/CMFTranslation/skins/nexedi/index_html.dtml deleted file mode 100755 index 08a28e2f34..0000000000 --- a/product/CMFTranslation/skins/nexedi/index_html.dtml +++ /dev/null @@ -1,38 +0,0 @@ -<dtml-comment> -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Jean-Paul Smets <jp@nexedi.com> - -WARNING: This program as such is intended to be used by professional -programmers who take the whole responsability of assessing all potential -consequences resulting from its eventual inadequacies and bugs - -This program as such is not intended to be used by end users. End -users who are looking for a ready-to-use solution with commercial -garantees and support are strongly adviced to contract a Free Software -Service Company - -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 2 -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, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -</dtml-comment> - -<dtml-if "'index.html' in objectIds()"> -<dtml-var index.html> -<dtml-else> -<dtml-var standard_html_header> -<div class="Document"> -<dtml-var description fmt="structured-text"> -</div> -<dtml-var standard_html_footer> -</dtml-if> - diff --git a/product/CMFTranslation/skins/nexedi/language_selector.dtml b/product/CMFTranslation/skins/nexedi/language_selector.dtml deleted file mode 100755 index 9173cc62d2..0000000000 --- a/product/CMFTranslation/skins/nexedi/language_selector.dtml +++ /dev/null @@ -1,19 +0,0 @@ - -<font size="-1"> -<dtml-gettext>language</dtml-gettext>: <dtml-in "gettext.get_available_languages()"> -<dtml-if expr="gettext.get_selected_language() != _['sequence-item']"> -<a href="<dtml-var "getLocalizedPath(_['sequence-item'])">">&dtml-sequence-item;</a> -<dtml-else> -<a href="<dtml-var "getLocalizedPath(_['sequence-item'])">"><b><u>&dtml-sequence-item;</u></b></a> -</dtml-if> -</dtml-in> -<br> - <dtml-let actions="portal_actions.listFilteredActionsFor(this())" - user_actions="actions['object']"> - <dtml-in "user_actions" mapping> - <dtml-if "id=='print'"> - <a href="&dtml-local_absolute_url;/&dtml-action;"><img src="fileprint.png" border="0"></a> - </dtml-if> - </dtml-in> - </dtml-let> -</font> diff --git a/product/CMFTranslation/skins/nexedi/latest_box.dtml b/product/CMFTranslation/skins/nexedi/latest_box.dtml deleted file mode 100755 index 121d24d533..0000000000 --- a/product/CMFTranslation/skins/nexedi/latest_box.dtml +++ /dev/null @@ -1,85 +0,0 @@ -<dtml-comment> -Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - -This software is subject to the provisions of the Zope Public License, -Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -FOR A PARTICULAR PURPOSE -</dtml-comment> - - <table class="NewsItems" cellspacing="0" cellpadding="0" border="0" width="100%"> - - <tr> - <td class="NewsBorder" width="0" rowspan="13" bgcolor="#6699CC"> - <img src="spacer.gif" alt=" " - width="1" height="2" border="0"> - </td> - <td valign="top" class="NewsTitle" width="100%"> - <b>Latest Additions</b> - </td> - <td class="NewsBorder" width="0" rowspan="13" bgcolor="#6699CC"> - <img src="spacer.gif" alt=" " - width="1" height="2" border="0"> - </td> - </tr> - - <dtml-if "meta_type=='Portal Topic'"> - <dtml-in "portal_catalog.searchResults( meta_type=['Base18 File', 'File', 'Document','Link','Base18 Document','Base18 Link'] - , sort_on='Date' - , sort_order='reverse' - , review_state='published' - , Subject=combined_subjects() - )" size="10"> - <tr class="NewsItemRow"> - <td valign="top" class="title"> - <p><a href="<dtml-var "getObject().local_absolute_url(lang=gettext.get_selected_language())">"> &dtml-Title; </a></p> - <p class="description"><dtml-var Date> - <dtml-var Description></p> - </td> - </tr> - <dtml-else> - <tr class="NewsItemRow"> - <td valign="top" class="title"> - No news is no news. - </td> - </tr> - </dtml-in> - - <dtml-else> - <dtml-in "portal_catalog.searchResults( meta_type=['Document','Link','Base18 Document','Base18 Link'] - , sort_on='Date' - , sort_order='reverse' - , review_state='published' - )" size="10"> - <tr class="NewsItemRow"> - <td valign="top" class="title"> - <p><a href="<dtml-var "getObject().local_absolute_url(lang=gettext.get_selected_language())">"> &dtml-Title; </a></p> - <p class="description"><dtml-var Date> - <dtml-var Description></p> - </td> - </tr> - <dtml-else> - <tr class="NewsItemRow"> - <td valign="top" class="title"> - No news is no news. - </td> - </tr> - </dtml-in> - </dtml-if> - - <tr class="NewsItemRow" > - <td class="title"> - <a href="&dtml-local_absolute_url;/recent_additions">More...</a> - </td> - </tr> - - <tr class="NewsItemRow" height="1"> - <td class="NewsBorder" height="1" bgcolor="#6699CC"> - <img src="spacer.gif" alt=" " - width="1" height="1" border="0"> - </td> - </tr> - - - </table> diff --git a/product/CMFTranslation/skins/nexedi/list_subtopics.pt b/product/CMFTranslation/skins/nexedi/list_subtopics.pt deleted file mode 100755 index 1fbcbb49b1..0000000000 --- a/product/CMFTranslation/skins/nexedi/list_subtopics.pt +++ /dev/null @@ -1,6 +0,0 @@ -<ul tal:condition="python:here.public_subtopics is not []"> - <span tal:repeat="item here/public_subtopics"> - <li ><a tal:content="item/title_or_id" tal:attributes="href item/absolute_url">Title</a></li> - <span tal:replace="structure item/list_subtopics" /> - </span> -</ul> \ No newline at end of file diff --git a/product/CMFTranslation/skins/nexedi/list_topic_vocabulary.dtml b/product/CMFTranslation/skins/nexedi/list_topic_vocabulary.dtml deleted file mode 100755 index c1f0218792..0000000000 --- a/product/CMFTranslation/skins/nexedi/list_topic_vocabulary.dtml +++ /dev/null @@ -1,6 +0,0 @@ -<dtml-if expr="_.has_key('root_topic')"><dtml-var root_topic>/<dtml-var id> -<dtml-let root_topic="root_topic + '/' + id"><dtml-in public_subtopics><dtml-var -list_topic_vocabulary></dtml-in></dtml-let> -<dtml-else><dtml-var id> -<dtml-let root_topic="id"><dtml-in public_subtopics><dtml-var -list_topic_vocabulary></dtml-in></dtml-let></dtml-if> \ No newline at end of file diff --git a/product/CMFTranslation/skins/nexedi/local_absolute_url.py b/product/CMFTranslation/skins/nexedi/local_absolute_url.py deleted file mode 100755 index f514f48b46..0000000000 --- a/product/CMFTranslation/skins/nexedi/local_absolute_url.py +++ /dev/null @@ -1,15 +0,0 @@ -## Script (Python) "local_absolute_url" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=lang=None,target=None -##title= -## - -if lang is None: lang = context.gettext.get_selected_language() -relative_url = context.portal_url.getRelativeUrl(context) - -return '%s/%s/%s' % (context.portal_url.getPortalObject().absolute_url(), lang, - relative_url) diff --git a/product/CMFTranslation/skins/nexedi/logo.png b/product/CMFTranslation/skins/nexedi/logo.png deleted file mode 100755 index 4c1c81e0b526fea36d3baa3279c9550ec1fbf88c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6140 zcmWldcQjmG7sjs=WLSvkHA3_#ujpkEgVBi+y%U}2ZL|=K5To}D(W4VgMvLBC)aXQw zLG=F3x9&OjuCv!Vf82BTeV*UmvD%u-AbJo003fJ}qAvE?fSs&FxB!3?gU5k~UEn*& zYsdpYZ6fil)g$bhz*<dN5qS9j^`*5W85?=*p<?6(0A!Z`pE!a3kWbhkp*K_mLO4MT zB4w2v$8l{10GdFkqP(7e&VfmQ>G1EHP+8%rHfUJ}1#2etpSbme!AWZkxO>{;Sl*!* z3Z`wQw%ZhsXLX4ttfA~LRhQr@##~QQ&ml#QTf)NmCpR0LHk3=>E|ymgFJL1qV*z<y zqh4FX*jwIq4$i5ke~|m391rN-7)5M1BWWVPDmx-8EAWH1p5ATQ8yca$VHawJn69-o zGM7c#2xqN~Rd-jJ(4n+92RDu1@5!=9?CM*ZRm6IGKnw{_iC91XOyxBMI#wQjes{%8 z2D9YnO8N4At8|@fyKBfY7GNvH^z<~AmxI*O7w|d=+n#*N$=S}$N&jwhMIyLRudd-B zB1SA|W?&!^e5nV}3fqfrefXfrzz~GnaetRY#!QJlaf(<YK6`!r*4!lupnpV$dnvaH z6EiuPves477JOCS@Cst+_o1c5M@J_hkvZ%5I4J&;%nxrJ*dctC?gjL?)}~BW))&y$ z(aA>q8}I4yJzkgDpB<Z+*j3ePX@7XMxW_vTQ3k69{rZL8^6<Cmy@csjkcL&pcdd1H zeT*6%b&iW0yuW0dUAk+Z!`;|8Wc}de%<$=xj0EFyGN%A|CJBj*RD3Q^WF;&r$_yvJ zK4>!7$d~X+O-f>`bnlLVkdh9Gxsf2J2?>-aDN{VerR9i<ie>3VoOUmdD-;x}VtWvx zS*E5l@5Rvt1^*I*k+npuaRofQ&bw5N0Vnbw#@j-W&y%>=*$3z5yfBMQM99re^*Du7 z)k0;qB<=j$sr#cyF<`Mh^i&PB9uk}ooAg!1z+h`XVFS<kJDz&>_ldc=`ntONiXBnW z^Wjk#GkxF^Hu7fw&(WG1BdPlUBIE$Vsj29?%qZ<yK*p~GS)vuPmMk92`y@}4^tH60 zAaL!c3?r$4@Cmmo-9}$^!2z3u#8Yubb7Ny)PtQLSg+g0f_1M$sj=i5Vo~@J`TsvA^ zobeG<bjcpeqhk9Ic)`p)@@twYoIFc>!eO;zekh&gv#7ePg~#8wBxZ_4;kC6T-t8rt zJrnm`-QD#?kh#uhD!Ph@=O4(^r9c%W;AVw~ds3A_R!?y>8cp+7C||(eoskIXI0a)8 zb?IDekpdB0G*0N5nhvZT^?owB>hx@G=0oI#`Rp5qHpj=ieE3}DwjZ_=m6emz;&=GS z^p)tjx0eZLl8Q&tBf!e)!PQ+cSQgC6iUZV)d3zdV=3CS{Cd1=NlB>M7HK~2^NeDIu zQ+fLmm2;%&UQ(+?L>j7RH9Qmdk5W`PSPTdou(kASaLxV^9?tk(8}RUB*;zY=qfitb zoS1!o1B<qAmtPHXJGcL`q^6!NEbQgi>w*)i*LWU4Vs49PCsJHV+W7LewzvEO0ymW+ zz67G8aAzla4vlNip|pU;#!qZYd=c(KOzhmtEhod7!eTgKJ=XkYd$K|2bJZ2=L##<E z!^8G?a+;c4^5n1b<%pJAlEp&r-4K*eF>PH0i}YN7mrY7zV{JUizRg{n;`&og>&S?L z9_z<IMi#xx()F9e<s~TzK8ux?o}Nt%3@iSDlKcDh$DYWBSC0UETqF{S2hrKu!gF%A zNKZ+**q`O)-em{aUo5R18=(D@x~+wtC|qCrZuHJ$eqX?&dU8bX`g$?rv$Hs1R$amL z^jVH=-@cJR<4}IH%>gH3{y*T-f!??r8pf_xYtx-|RpsSif5C;pJx(-lcIHTd-_F&E zU&xx$PkXOKrXO-Nk&$DocVcX8A4j%8QS2`%;4d1g<%pQ1s5|YwS{5B&e?%2F{mAm} z-`x71uw}Xa@6YeI*wh&gI4h@Tr6l)2bghBtUlFo)$0d-`ijNP?&ArjlF@OD9Uthnh zxENVm+foEk87o4e;^6R+;mibM<4O}lJG;AR5T~v#bMaT(fx*FVrV_4uzjSgNi0Flc zpup;%KT2Mr?xf~TZa9E?)~0a4zl_OA(C#%ix7DkV3k)0Je~-q`o=oB1$LUyJ{?`Ma z;gIs<2LL;}s4rjM4QC2kiF5E<XyO48&jL@!@xy9r`~h(<dzlVS6g5d)LBDTvpvcJL zBD`yjjv<Iy;(bd<)cN>qlUcpJm>C}zmvwzh#`gyA>8biBpr~eXuPq*9N}BXRdoNzz z3Me8+sEh2R75#mk<@WkaijGc;fb1NrYxVYzKC@q4dOo4Px_V^i0A`T(=jYFpVbDU@ zI_<qSWrtFPq=ubFHhZuJbVY9fU#hAos2VdxE3_0`{#KS~StQU2$9L`i&b&@!X-E6) zBlGgoBD=_`;oL7()rLk#VX^`L8JhfXCX@*#Q#R4p2gA^zUS9C5EZxAsqb7rk7njUa z;ZJD%4Am;&QBi9bIu`+#rG$6J<RA!~=1@azhybwJFy9_?zn!6%itO#RcXnp+&*rRa z$m!cA_Lu(XE`rrPuWbrkTus&wv?M?K`T{1Nr@MdM7ba)P#{o{S;A1pE*vG!oYA}<L zQIuLbfq{N20l-$6Coezb@%(@#3cDGwT<w@)x;EoK7G^vk)X~$^%nyzxz1!{m6qM`e zv#zM;<74KAd1E-+gUzbL1s`?eh4JwQkG1O8(aixt56{UPl&(fbZl7`%7#rhzHy$0$ zjgP<kFuwF7pn)Y<*g*=?y1#d}&tdYr=dJexOqRpidh&?^6iT*($AHy7*^mvapSW&~ zb$q$$PXeoFi=u4CPXEqVh&U%~Zc^fe<>U;Hfq#tT>~b+Z@+L7`dV)epTG#ro{oJJy zSVo6}{kDb&aB$jyn)iPagdMDZ{nArczb-0qc>dwNm(BFA6dXCNvED(a)hOa{z~j>6 zvRFeN0*P&FBSavWRs5EV;O~tW<bnQC7-p>&*?RuNFOiFTU@W^y_~pwV4q6A!v%V3T z^L#co%cHptCnxZsL8pKJ%)7h4RvY`o44J90^o|VM-(By=4h{xNPf<c%ypXABvPdY} z+A{x0YKEnWd?)Qcf2LhTXIDbSMy%>vG&Prrkf*2WqS-+==OK<0I}`PSOiw&>N4Buc zk&+VRB6@MQ-}~*Gf^^1~J&r;t8cjfR6^s)Yq+)^g7f>K7Q7zIs6+iU3_2*NFc|om) zK;SkupjIF6FPqtP0C%1n--?Qlj<KAuwib&WK!@#r>=dA}yX&+1r9~Ioc&(xTCdEVV z=>eA|lzLW+_pUmSA?cGD^~mA!NPe;ag(6UIMoID+Q3yKE>~(j8b>EDYmX!@>918<{ z78qnH7a<@iN#ATA5;7Hzr;|ZSVu}mk<AmJoQB$Y!aP?csLgR2cMn(u~3O~iDnAdc) z+<Cm9*z1gph>6+6`qZm8nwrsLG`L~q<+}N@GO|JZz%#zT|H5!WcAk@#DSxWlIx*?C z_O!RptHKcNUeC;Iy}COY%L@<ZWMjLyz*NG?RoE$jxz?LS%+mJP?9wvsk5Nkiz{$y* zHNUus3y6wt0Y}$o48wXlI`}|Z)5YbNFQs3;a53d#B~=v{XMS!@-SB5k&Cd3L46HjQ z{Bnrx1HT!n)zu`U!~sadEVu3mQ@p7**XK7C&*d-vx`+pGB-63vlO7Vf&}L;-^5ElI zS*}6>73cu1r1xr}awWscbcNKyD;-?~O)NWbw2@f+sveD|2Bf8xaO7P6=1-m(wY9xL zqkA6_TBxfHRaH3K)@GnkOG=5%E)EVt9+nn9KB?yxk<W-69IEPt(+kFHZ4B}7*pw1X ze_E2CY)c8e6>ORM%>{I94%obtWM?-vGI|1FNeJlZkV~YN3BJ7Co8Gj59peCT1tcIQ ze>Bv()^??BoQijARgV}r-77lz4zqgQ#h|bMBI~s>YGR@+gI2m34CH|GiGZ{;rOGT> zpNH2(v5EzvwT@<Hcua33C9YD_4DRg2vokZ*2+L@(={xI33`I;&`-qc8Tuo0mVk2Yj z4E*Q&V!Z<c+3ZlHcE7z>VS(Fc_E>!>$?HGcH15m66f{`p#76v7Nk69N-UY9;5ueJ& z1qJPUP90G#Y<Kh3*4Fx0epfa(H+nnALh-oAQczktIwNy8q=p{Ik!4EHyWd&uq<YoY z=TOoPCgZIB`E%WE1*S-jFAqSF_jf`3X4fph+g8c9d})6dTZqKw+wM+>(y0i^unIt9 z-j)OPgOJzQkKj{L1puX`@8*775WL)*)w<c8Qho8F#b=)b7ihCsY8dF5{6{Dw)9Oy~ zQ{)voQ^eU>Uj8wF#R}Mb9e4f&R6`@g-`{1n%88%<{QdjTTvzJYZmjyi?of`WJDsj| z$+$QHTk63Vn5=|^*OIbNL%L$p3Q8ND6U|ZH41lSbtEihxcK<EmdJz6)(1rQs-32e; zad*uxBU9;KiGd%{ne1*`{r*0+qA}~RaZ?o9CPJ=YXD5=B)KpNQTV7#-7gjGU_RJEq zB2yJgO|H=74t8?c+$e~SE>BGrdf6Iq(x$CqZLD0fFQye8BBjEvXJxgU%DXEhv^z&H zXlrMu^y#{DWW;w)FuC2+|3O_kK=<!P{m11eGu8PT41KLZTEQWB+~xWWAvd?7$(~17 zKZ7oqE!uL@5QwPc09p{}eW5a$uUCCz-MY6&(DeflR`1|GnT9MY+gi1R!m+0PMpw6^ zAueuxuGZkewCOoTtOdF>2L2=H#GU{a9eIT>@4Y``_p4NXqmN8XM8xtxFu3(dUYqjg ztmpgpb-BZ4F^bk$V6**C(#!k)SLdr&Xl^bpZr%!3sArR#+4aR?Sz+O*?SE2k{oBM? z^`)jURAo;Im-izrNsovyH8U$ro{AH5H}=S-6aH&hofqy{`*!kIcS$xc_rTDgYNc@P zTU~wq&<o54w$2J}tHHALTz`6UvW}sl&YL$g<J!}cx?+Mm%Y`3{3kuLVi-xc|PHHt( zwTff}^CCI`EY^h8oT=vl0rQ=aH;D{l!!t8zlO}!(9Y+<F(}l)%q0HfojINKQxu0U8 zZY*i^baXkgt!m23^&{`t*f!4pN*wR$+ugX0j1b~Kx-+!Me`%KAXOfha)oDqtoZ#Z? zy{S4|!o~A!bv%h}jfj=mT~{uwTAOPDb>{8u%>&V4VQh(rSe&Um>5Z>-=^7j0Hg4P- zhtvEy$bRQoCM97sk=AJ~RH9A?Rf~)iV3zcLJcTdM&PnLxRQ`kr+23zs@;!%wNCm|M z@3H-lj*l8%z=hO4t!2f<TC4h4-U0_l>q|ZoLePJ<^&(OyzmmsjWJ8P*2!zl6Ojkq% zMUG$3=Ty71-LCIVEY=PV$58=&3E|{*^&3>w)ObLoJl3&0S3=Fx`ODv`A_}G}{62o{ z!wo}P9d>tX50`LJl9LBt9!dPa()@RvDe1a^pM!h~8ra#nY;?W=;VS@d+ZKmr{irK7 zx!BFjXu!dj83VR?67|`mfCW0E#$}!wK{-E1a&>p15f=vvI?n<7@<qG7dsn)>CRA<# zUP2(sH~MUdiPan@PIu3pXBznLP^ezVDbchPy$Ri?Pw}+02(j8<R+gxlhvuhjyFfTz zdQ7n?8;sj{d7pMQSp%!9g0^FM5J1jlg_)W@kO|<>+Nv^>suvcR%gVZ(o~~vA!!lF# zGji{4{|v?T_HKzTLm`mb&`=qEzh~)EpP#LcfxV`tyxzZ$+uP6nTEWfLe|9j$EZjTU z+l%%)#8@mTdxx1cVMa4*aan&=(A->~6%G!ny7EZFZb=@PEGG)+?(a_kIli>vj5R+j z6A(nsH4cRiQkI-AQPZS@7`AW#9v;<17K>zR5wWItCaH`0dTR-Z`O;E6b&ljd6CE=% z2U}Zm>hC5dCU~qFV(!X;fuvO{^(DTxn;Z~Gz^>-j@cjLDeoIDLl2uR7!Q>3aSWgdw zxwp7>MdalfD0Xw$**!w(WB;SVLYBKwLO|T3V|H{DcgnEp>(vcQF$9ThU(Mm>6~bCf z|IpC&mBzv5ZzU=!2zKB_GEZIzK2K_{tCMA2yU!FpE-ISV(726{|NmHlNeL{a^;m1> zN(T0l1eq<l<xZR(gb4`#*|cSQe%{nX0?hpoqXZ}^H%l~`K1wi%{%sGrkp=kP3Wkh7 z)3jO}I<MTBf*mfq3KyuVg3|e!8k#P6cq{0|+?WBZrkpJ_78Vy*R!jLF%Bq<V0NRuy zA=kyCxs){RUbc00d>qM8#Ckq#0csMBLJju7O%`rbuo!?s8DCxXG?!LavxSs+U`(HD zkkNi|x0)cE`UYY^qg$JZ@!8XVjL*#c?6iuBf`EN|s3ate&<Wh2#s;ECxJWrU1B03L z6g?`c)OLTJ`*jG!&W?#mNbR+e5z??4Lrs16?OVKtdf?-z0`SAIno4tirqTFZKiG!{ z^Q%l8uoR?i4cwjkZ6Ya2dNB2I#4>nLzdL>H>IBPwBtV9AfO_@`zLJsA^w~Z)VCgJ{ zpU(^e#cAd`oedI_=E!=idiU`#GQwQO*ohP@+Leurr~oXYb$2t`*EiOdmX|YwX9{(U zjhAXcUMDbmdZ%>$qP9T&*TN2?-Y)I^73F)x#1<0}KR*-6Z$YO!^M%S|?<Rhg74F_; z+u8LDjFPr^bGu@#IyRQ<Na<htGa>~I4XBpZ(0ENrrV$IacnAzMc5)hIxd}HjbH$pQ z;3x9(^1xigKS6$sxxIZS@^$)7;pg)5^>HL44NW%dYl7e@&IN}t^Bzt-X7@=#-W=Hw z=yN13iS@aQ;V@Jk9hq3cYdCs$<*;1hl%m4UAj(MeIM!N_NI;;ezrQ&;n!{oHk(gVK zwxQvpu-jXTU}$_eOO#*nHm6ox5w@6ea^;EXp#Zl>o*H3mEXUhRtA^9X7W`}V`677T zY0*n!<7(<qZ(o?hE;~0xEIUQ)hXQhVPfDs?NKYu`6MST4B?jZRjd8m$$Q1{-i*s<u z$jah{3R=j^k4{eZPfu_4v5d48RK5}sv1s-H0emktG}L8}EVa1U$MRZ1Ky-BLN0776 zu#yr%Mzin1%<UEP0q57UvibP{c^E7yo`jc`RqvYTY_X-{{{Ba|^+2i4OlN0156@tb ze|)aECoCYKvHm2&c{TwXVxT)qNlr#4e!_M^vZeeYPDQXE@_Y3mEZFTC(c6~ysFD&q zfR?^(yItXRbs~d<2H7DNts!t&GR#*t@YGUrr=qkJn{ZliQ&X3tF2eZ3l<jwpj!-qV zo4GqX25m}xonuMi6FUO~PmPfug!rne|2Q~MucK*q_MKs|WU3k?pvSQ|fcs(W%uMkC z?_x`G&}KgbI6C#Ns|~oQVVAwv^!LYAP*I8&ammOm`U7B@5<w{wVw{z8`=zdq8VEf9 zb$*hq>5!ZU79b`ead%pGepmX^L^KuViVMuoM}>#eaK-ISDf>;A)2VaR*VL@{C$ZOF zw$5oQMMoKOkL)g+xsEdat};tq(WH?K7C+vdx-c)ZnGNfbi}1hT6{hV*ydVt>tn5-z z>2D1@V=aCh@wPQEqPRFNHuiD$Nc5pSBX0OJY|S6}xf$=-hw}0)%yLLxR+fq3Y)mG; z{JVEtMn-3ijUoq=kgH@#60&w9bMuNX&%oHe5g8^XDQV!vi`2Th|IE!de*b-IU5kBT zH(OhU*IhwY=}0SqprDGiu8|$W6^h4HbeX0G1{&nu*s3)n>pa}If0(b?hxaLf#g*O7 zUxBF5>xO@WsW$-uhq=CVB-R~3h?JDgn>R~jz24aFZ;4ikZ0J3I7ps7Pv$ONo&O6@| zdp94S{dbKGdK?-~B7SiSPo7-R(;Ex3pipMHIqEoH+*jI`P(G1|SD0&Od3K7DlI;&s zJrBpqq^)@=DVw>uEqQqfp+V%Q?T;U1H$D?6Xd4^*?CF_$dxKzgguuUlbr_6qy+h*N z-b2o9dvs`%XM?<}>&Eeh;aIL3IgyHq3H-~mmG&UT2e(@?%TzhZsn(q5*v32ng=i{P IDOg7Q50+Qh1^@s6 diff --git a/product/CMFTranslation/skins/nexedi/mail_password.py b/product/CMFTranslation/skins/nexedi/mail_password.py deleted file mode 100755 index 87e32e9626..0000000000 --- a/product/CMFTranslation/skins/nexedi/mail_password.py +++ /dev/null @@ -1,13 +0,0 @@ -REQUEST=context.REQUEST -try: - return context.portal_registration.mailPassword(REQUEST['userid'], REQUEST) -except 'NotFound', error: - message = error -except 'ValueError', error: - message = error - -redirect_url = '%s/mail_password_form?portal_status_message=%s' % ( context.absolute_url() - , message - ) - -REQUEST.RESPONSE.redirect( redirect_url ) \ No newline at end of file diff --git a/product/CMFTranslation/skins/nexedi/menu_box.pt b/product/CMFTranslation/skins/nexedi/menu_box.pt deleted file mode 100755 index 558fac3cda..0000000000 --- a/product/CMFTranslation/skins/nexedi/menu_box.pt +++ /dev/null @@ -1,37 +0,0 @@ -<table class="menubox" width="100%" tal:define=" - portal_root here/portal_url/getPortalObject; - section here/CurrentSection; - subsection here/CurrentSubSection; - lang python:here.gettext.get_selected_language()"> - <tr tal:repeat="item portal_root/sections" class="section"> - <td class="sectiontitle"> - <div class="" tal:attributes="class python: - 'selected'*(section.id==item)"> - <p class="sectiontitle"><a href="service" - tal:attributes="href python:'%s/%s/%s' % (here.portal_url(),lang,item)" - tal:content="item">Services</a> - </p> - </div> - <p class="subsectiontitle" - tal:repeat="subitem python:section.objectValues( - ['Portal Topic','Document','Base18 Document' - ,'Base18 Wiki'])" - tal:condition="python:section.id==item"> - <a href="/service/qt.stx" - tal:attributes="href python: here.portal_url() + '/' + lang + - '/' + item + '/' + subitem.id" - tal:content="python:subitem.title" - tal:condition="python:subsection.id!=subitem.id">Qt Development</a> - <a href="/service/qt.stx" - tal:attributes="href python: here.portal_url() + '/' + lang + - '/' + item + '/' + subitem.id" - tal:content="python:'>' + subitem.title" - tal:condition="python:subsection.id==subitem.id">Qt Development</a> - </p> - </td> - </tr> - <tr> - <td class="endline"></td> - </tr> -</table> - diff --git a/product/CMFTranslation/skins/nexedi/news_box.dtml b/product/CMFTranslation/skins/nexedi/news_box.dtml deleted file mode 100755 index 69d038963c..0000000000 --- a/product/CMFTranslation/skins/nexedi/news_box.dtml +++ /dev/null @@ -1,51 +0,0 @@ - <table class="NewsItems" cellspacing="0" cellpadding="0" border="0" width="100%"> - <tr> - <td class="NewsBorder" width="0" rowspan="8" bgcolor="#6699CC"> - <img src="spacer.gif" alt=" " - width="1" height="2" border="0"> - </td> - <td valign="top" class="NewsTitle" width="100%"> - <b>News</b> - </td> - <td class="NewsBorder" width="0" rowspan="8" bgcolor="#6699CC"> - <img src="spacer.gif" alt=" " - width="1" height="2" border="0"> - </td> - </tr> - - <dtml-in "portal_catalog.searchResults( meta_type=['News Item','Base18 News Item'] - , sort_on='Date' - , sort_order='reverse' - , review_state='published' - )" size="5"> - - <tr class="NewsItemRow"> - <td valign="top" class="title"> - <dtml-if "getObject()"> - <p><a href="<dtml-var "getObject().local_absolute_url(lang=gettext.get_selected_language())">"> <dtml-var "getObject().TranslatedTitle()"> </a></p> - <p class="description"><dtml-var Date> - <dtml-var TranslatedDescription></p> - </dtml-if> - </td> - </tr> - <dtml-else> - <tr class="NewsItemRow"> - <td valign="top" class="title"> - <dtml-gettext>No news is no news.</dtml-gettext> - </td> - </tr> - </dtml-in> - - <tr class="NewsItemRow" > - <td class="title"> - <a href="&dtml.url-recent_news;"><dtml-gettext>More...</dtml-gettext></a> - </td> - </tr> - - <tr> - <td class="NewsBorder" colspan="3" height="0" bgcolor="#6699CC"> - <img src="spacer.gif" alt=" " - width="1" height="1" border="0"> - </td> - </tr> - - </table> diff --git a/product/CMFTranslation/skins/nexedi/newsitem18_print.dtml b/product/CMFTranslation/skins/nexedi/newsitem18_print.dtml deleted file mode 100755 index 936ab777f8..0000000000 --- a/product/CMFTranslation/skins/nexedi/newsitem18_print.dtml +++ /dev/null @@ -1,55 +0,0 @@ -<dtml-comment> -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Jean-Paul Smets <jp@nexedi.com> - -WARNING: This program as such is intended to be used by professional -programmers who take the whole responsability of assessing all potential -consequences resulting from its eventual inadequacies and bugs - -This program as such is not intended to be used by end users. End -users who are looking for a ready-to-use solution with commercial -garantees and support are strongly adviced to contract a Free Software -Service Company - -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 2 -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, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -</dtml-comment> - -<dtml-let relative_to_content="1"> -<dtml-var pr_printable_html_header> -</dtml-let> - <div class="Document"> - - <p class="title">&dtml-TranslatedTitle;</h1> - - <p class="release"><dtml-gettext>For Immediate Release</dtml-gettext></p> - - <p class="summary">&dtml-effective_date; - &dtml-TranslatedDescription;</p> - - <dtml-var TranslatedBody> - - <h1><dtml-gettext>Permanent URL for this Press Release</dtml-gettext></h1> - - <p>&dtml-absolute_url;</p> - - <h1><dtml-gettext>About</dtml-gettext> - <dtml-with portal_properties>&dtml-title;</dtml-with></h1> - - <p><dtml-var "gettext(news_plate)"></p> - - </div> - -<dtml-var printable_html_footer> - - diff --git a/product/CMFTranslation/skins/nexedi/newsitem18_view.dtml b/product/CMFTranslation/skins/nexedi/newsitem18_view.dtml deleted file mode 100755 index f19a67d795..0000000000 --- a/product/CMFTranslation/skins/nexedi/newsitem18_view.dtml +++ /dev/null @@ -1,35 +0,0 @@ -<dtml-let relative_to_content="1"> -<dtml-var standard_html_header> -</dtml-let> - -<div class="Document"> - - <p><dtml-gettext>For Immediate Release</dtml-gettext></p> - - <p><b>&dtml-effective_date; - <dtml-var TranslatedDescription></b></p> - - <dtml-var TranslatedBody> - - <h1><dtml-gettext>Permanent URL for this Press Release</dtml-gettext></h1> - - <p>&dtml-absolute_url;</p> - - <h1><dtml-gettext>About</dtml-gettext> - <dtml-with portal_properties>&dtml-TranslatedTitle;</dtml-with></h1> - - <p><dtml-var "gettext(news_plate)"></p> - -</div> - - <dtml-if "not portal_membership.isAnonymousUser()"> - <div class="ContentBy"><dtml-var content_byline></div> - </dtml-if> - - -<div class="Discussion"> -<dtml-var viewThreadsAtBottom> -</div> - - - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/newsitem_mail_form.dtml b/product/CMFTranslation/skins/nexedi/newsitem_mail_form.dtml deleted file mode 100755 index 58acb356ef..0000000000 --- a/product/CMFTranslation/skins/nexedi/newsitem_mail_form.dtml +++ /dev/null @@ -1,51 +0,0 @@ -<dtml-comment> -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Jean-Paul Smets <jp@nexedi.com> - -WARNING: This program as such is intended to be used by professional -programmers who take the whole responsability of assessing all potential -consequences resulting from its eventual inadequacies and bugs - -This program as such is not intended to be used by end users. End -users who are looking for a ready-to-use solution with commercial -garantees and support are strongly adviced to contract a Free Software -Service Company - -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 2 -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, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -</dtml-comment> - -<dtml-let relative_to_content="1"> -<dtml-var standard_html_header> -</dtml-let> - - -<h1>Send a news release to the press</h1> - -<form action="<dtml-var absolute_url>/send_newsitem" method="POST"> - -<p>Text:</p> -<textarea name="text" rows="25" cols="80" ><dtml-var PreformattedView></textarea> - -<p>Journalists:</p> -<textarea name="journalists" rows="25" cols="80" ></textarea> - -<p align="center"><input type="submit" name="Send" value="Send" /></p> - - -</form> - - - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/newsitem_view b/product/CMFTranslation/skins/nexedi/newsitem_view deleted file mode 100755 index d1417209c2..0000000000 --- a/product/CMFTranslation/skins/nexedi/newsitem_view +++ /dev/null @@ -1,27 +0,0 @@ -<dtml-let relative_to_content="1"> -<dtml-var standard_html_header> -</dtml-let> - - -<div class="NewsItem"> -<blockquote class="Description"> -<dtml-var Description fmt="structured-text"> -</blockquote> -</div> - -<div class="Document"> -<dtml-var CookedBody> -</div> - - <dtml-if "not portal_membership.isAnonymousUser()"> - <div class="ContentBy"><dtml-var content_byline></div> - </dtml-if> - - -<div class="Discussion"> -<dtml-var viewThreadsAtBottom> -</div> - - - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/newsitem_view.dtml b/product/CMFTranslation/skins/nexedi/newsitem_view.dtml deleted file mode 100755 index d1417209c2..0000000000 --- a/product/CMFTranslation/skins/nexedi/newsitem_view.dtml +++ /dev/null @@ -1,27 +0,0 @@ -<dtml-let relative_to_content="1"> -<dtml-var standard_html_header> -</dtml-let> - - -<div class="NewsItem"> -<blockquote class="Description"> -<dtml-var Description fmt="structured-text"> -</blockquote> -</div> - -<div class="Document"> -<dtml-var CookedBody> -</div> - - <dtml-if "not portal_membership.isAnonymousUser()"> - <div class="ContentBy"><dtml-var content_byline></div> - </dtml-if> - - -<div class="Discussion"> -<dtml-var viewThreadsAtBottom> -</div> - - - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/pr_printable_html_header.dtml b/product/CMFTranslation/skins/nexedi/pr_printable_html_header.dtml deleted file mode 100755 index b942aed187..0000000000 --- a/product/CMFTranslation/skins/nexedi/pr_printable_html_header.dtml +++ /dev/null @@ -1,53 +0,0 @@ -<dtml-comment> -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Jean-Paul Smets <jp@nexedi.com> - -WARNING: This program as such is intended to be used by professional -programmers who take the whole responsability of assessing all potential -consequences resulting from its eventual inadequacies and bugs - -This program as such is not intended to be used by end users. End -users who are looking for a ready-to-use solution with commercial -garantees and support are strongly adviced to contract a Free Software -Service Company - -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 2 -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, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -</dtml-comment> - -<dtml-if "_.hasattr(this(),'isEffective') and not isEffective( ZopeTime() )"> -<dtml-unless "portal_membership.checkPermission('Request review',this()) - or portal_membership.checkPermission('Review portal content',this())"> -<dtml-var "RESPONSE.unauthorized()"> -</dtml-unless> -</dtml-if> - -<html> - <head> - <title><dtml-with portal_properties>&dtml-title;</dtml-with - ><dtml-if name="Title">: &dtml-TranslatedTitle;</dtml-if></title> - <link rel="stylesheet" href="pr_printable_stylesheet" type="text/css" /> - <dtml-if relative_to_content> - <base href="&dtml-absolute_url;" /> - </dtml-if> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> - </head> -<dtml-with stylesheet_properties> -<body font="&dtml-base_font_color;"> -</dtml-with> - -<dtml-with logo-hires> -<img src="logo-hires" height="&dtml-height;" width="&dtml-width;" /> -</dtml-with> - diff --git a/product/CMFTranslation/skins/nexedi/pr_printable_stylesheet.dtml b/product/CMFTranslation/skins/nexedi/pr_printable_stylesheet.dtml deleted file mode 100755 index 2573eb70be..0000000000 --- a/product/CMFTranslation/skins/nexedi/pr_printable_stylesheet.dtml +++ /dev/null @@ -1,606 +0,0 @@ -<dtml-unless do_inline_css> -<dtml-call "RESPONSE.setHeader('Content-Type','text/css')"> -</dtml-unless> -<dtml-with stylesheet_properties> - -body { - margin-top: 0; - margin-left: 0; - margin-right: 0; - margin-bottom: 0; - background-color: &dtml-bg_color;; - color: &dtml-base_font_color;; - font-family: &dtml-base_font_family;; - font-size: &dtml-base_font_size;; -} - -a:link { - color: &dtml-link_color;; - text-decoration: none; -} - -a:visited { - color: &dtml-vlink_color;; - text-decoration: none; -} - -a:active { - color: &dtml-alink_color; - text-decoration: none; -} - -a:hover { - text-decoration: underline; - color: &dtml-hover_color;; -} - -.invisible { - font-size: 80%; - color: &dtml-bg_color;; -} - -.mild { - color: #7f7f7f; -} - -.DesktopStatusBar{ - font-size: 80%; - font-family: &dtml-secondary_font_family;; - color: #ff0000; -} - -table { - width: 100%; - border: 0; -} - -td.SideBar { - width: 15%; - vertical-align: top; -} - -table.ActionBox { - font-family: &dtml-primary_font_family;; - background-color: &dtml-primary_accent_color;; - margin-right: 5px; - margin-left: 1px; - margin-top: 10px; -} - -table.ActionBox tr td { - font-size: 70%; -} - -table.ActionBox tr td.ActionTitle { - font-weight: bold -} - -table.ActionBox tr.GuestActions { - background-color: &dtml-guest_actions_color;; -} - -table.ActionBox tr.GuestActions td a:link { - color: &dtml-guest_actions_link_color;; - text-decoration: none; -} - -table.ActionBox tr.GuestActions td a:visited { - color: &dtml-guest_actions_link_color;; - text-decoration: none; -} - -table.ActionBox tr.GuestActions td a:active { - color: &dtml-guest_actions_link_color;; - text-decoration: none; -} - -table.ActionBox tr.GuestActions td a:hover { - color: &dtml-hover_color;; - text-decoration: none; -} - -table.ActionBox tr.MemberActions { - background-color: &dtml-secondary_accent_color;; -} - -table.ActionBox tr.MemberActions td { - color: &dtml-secondary_accent_font_color;; -} - -table.ActionBox tr.MemberActions td a:link { - color: &dtml-secondary_accent_link_color;; - text-decoration: none; -} - -table.ActionBox tr.MemberActions td a:visited { - color: &dtml-secondary_accent_vlink_color;; - text-decoration: none; -} - -table.ActionBox tr.MemberActions td a:active{ - color: &dtml-secondary_accent_alink_color;; - text-decoration: none; -} - -table.ActionBox tr.MemberActions td a:hover { - color: &dtml-hover_color;; - text-decoration: none; -} - -td.Desktop { - vertical-align: top; -} - -td.Desktop table tr { - vertical-align: top; -} - -div.Desktop p { - font-size: 100%; - margin-right:100pt; - font-family: &dtml-primary_font_family;; -} - -div.Desktop h1 { - font-size: 120%; - margin-right:100pt; - font-family: &dtml-secondary_font_family;; -} - -div.AuthWarning { - text-align: center; - font-style: italic; -} - -div.AuthWarning table { - border: 0; -} - -div.AuthWarning tr.Hot { - color: #FF0000; -} - -div.Error { - color: #FF0000; -} - -p.DesktopStatusBar { - font-size: 100%; - font-family: &dtml-secondary_font_family;; - font-style: italic; - font-weight: bold; -} - -table.FormLayout { - width: 80%; -} - -table.FormLayout tr { - vertical-align: top; -} - -table.FormLayout tr th.TextField { - vertical-align: top; -} - -table.FormLayout tr td.TextField { - vertical-align: top; -} - -table.FormLayout th { - text-align: right; -} - -table.FormLayout dl.FieldHelp dd { - font-size: 70%; -} - -table.ContentsList { -} - -table.ContentsList tr td img { - border: 0; -} - -table.SearchResults { - width: auto; -} - -table.SearchResults tr th { - text-align: left; -} - -table.SearchResults tr td img { - border: 0; -} - -table.Wizard { - width: auto; -} - -table.Wizard tr { - vertical-align: top; -} - -table.Wizard tr th { - text-align: right; -} - -div.NewsBar { - text-align: right; -} - -table.NewsItems { - border: 1; - padding: 1; -} - - -td.NewsBorder { - background-color: &dtml-primary_accent_color;; -} - -td.NewsListing { - background-color: &dtml-secondary_accent_color;; - color: &dtml-bg_color;; -} - -.NewsLeadin { - background-color: &dtml-bg_color;; - color: &dtml-primary_accent_color;; -} - -.NewsByLine { - background-color: &dtml-primary_accent_color;; - color: &dtml-bg_color;; -} - -.NewsDateline { - background-color: &dtml-primary_accent_color;; - color: &dtml-bg_color;; -} - -td.NewsTitle { - background-color: &dtml-primary_accent_color;; - color: &dtml-primary_accent_font_color;; - text-align: center; - font-size: 90%; - font-weight: bold; -} - -tr.NewsItemRow td { - background-color: &dtml-highlight_color;; - font-size: 70%; -} - -tr.NewsItemRow td.title { - margin-top: 5px; - margin-bottom: 1px; - font-size: 100%; - font-weight: normal; -} - -tr.NewsItemRow td.title p { - margin-top: 3px; - margin-bottom: 1px; - font-size: 100%; - font-weight: normal; -} - -tr.NewsItemRow td.title p.description { - margin-top: 0px; - margin-left: 5px; - margin-bottom: 0px; - font-size: 70%; - font-weight: normal; -} - -p.NewsHeadline { - background-color: &dtml-primary_accent_color;; -} - -td.ListName { - background-color: &dtml-primary_accent_color;; - color: &dtml-primary_accent_font_color;; - font-weight: bold; -} -td.ListDefinition { - font-style: italic; -} - -table.logobox { - padding-top: 1px; - padding-left: 2px; - border: 0px; -} - -td.TitleBox { - vertical-align: top; - font-family: Verdana, Arial, Helvetica, sans-serif; - color: &dtml-primary_accent_color;; - text-align: right; - font-weight: bolder; - font-size: 18pt; - padding-top: 6px; -} - -td.LanguageBox { - vertical-align: top; - text-align: right; - padding-right: 20; -} - -.subsectiontitle { - text-align: left; - color: navy; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 8pt; - font-weight: normal; - margin-left: 5pt; - margin-bottom: 1pt; - margin-top: 1pt -} - - -table.menubox { - margin-right: 5px; - margin-left: 1px; - margin-top: 20px; -} - -table.menubox .selected { - background-color: &dtml-secondary_accent_color;; -} - -table.menubox td.endline { - border-top: 3px; - border-color: #6524B9; - margin-top: 0px; -} - -table.menubox a:link { - color: navy; - text-decoration: none; -} - -table.menubox a:visited { - color: navy; - text-decoration: none; -} - -table.menubox a:active { - color: navy; - text-decoration: none; -} - -table.menubox a:hover { - color: black; - background-color: &dtml-highlight_color;; - text-decoration: underline; -} - -table.menubox td.sectiontitle { - border-bottom: 3px; - border-color: #E6BCE6; - padding-bottom: 0px; - padding-top: 10px; - margin-top: 0px; - margin-bottom: 0px; -} - -table.menubox p.sectiontitle { - text-align: left; - color: navy; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10pt; - font-weight: bolder; - font-variant: small-caps; - margin-bottom: 2pt; - margin-top: 10pt; -} - -div.breadcrumb { - text-align: left; - color: black; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 8pt; - margin-bottom: 10pt; - margin-top: 10pt -} - -.breadcrumb p { - text-align: left; - color: black; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 8pt; - margin-bottom: 10pt; - margin-top: 10pt -} - -div.Document { - font-size: 11pt; - background-color: &dtml-bg_color;; - color: &dtml-base_font_color;; - font-family: &dtml-base_font_family;; - margin-left: 30pt; - margin-right: 30pt; - margin-bottom: 3pt; - margin-top: 3pt; - line-height: 17pt; - text-indent: 0pt; - text-align: left; -} - -div.Document p { - font-family: &dtml-printer_base_font_family;; - font-size: 11pt; - margin-left: 20pt; - margin-right: 30pt; - margin-bottom: 3pt; - margin-top: 3pt; - line-height: 17pt; - text-indent: 0pt; -} - -div.Document p.title { - text-align: center; - font-family: &dtml-printer_primary_font_family;; - font-weight: bold; - margin-left: 20pt; - margin-right: 30pt; - margin-top: 15pt; - margin-bottom: 3pt; - font-size: 14pt -} - -div.Document p.release { - text-align: center; - margin-bottom: 20pt; - margin-top: 20pt; -} - -div.Document p.summary { - font-weight: bold; - margin-bottom: 10pt; - margin-top: 3pt; -} - -div.Document ul { - font-family: &dtml-printer_base_font_family;; - font-size: 11pt; - margin-left: 10pt; - margin-bottom: 2pt; - margin-top: 2pt; - line-height: 17pt; - text-indent: 0pt; - vertical-align: middle; -} - -div.Document ul li { - margin-left: 0pt; - vertical-align: middle; -} - -div.Document ol { - font-family: &dtml-printer_base_font_family;; - font-size: 11pt; - margin-left: 30pt; - margin-bottom: 2pt; - margin-top: 2pt; - line-height: 17pt; - text-indent: 0pt; - vertical-align: baseline; -} - -div.Document ol li { - margin-left: 0pt; - vertical-align: baseline; -} - -div.Document ol li ul { - margin-left: 0pt; -} - -div.Document h1 { - text-align: black; - color: #666666; - font-family: &dtml-secondary_font_family;; - font-weight: bold; - margin-left: 20pt; - margin-right: 30pt; - margin-top: 9pt; - margin-bottom: 3pt; - font-size: 13pt; -} - -div.Document h1 a:link { - color: #333333; -} - -div.Document h1 a:visited { - color: #333333; -} - -div.Document h1 a:active { - color: &dtml-alink_color; - text-decoration: none; -} - -div.Document h1 a:hover { - text-decoration: underline; - color: &dtml-hover_color;; -} - - -div.Document h2 { - text-align: black; - color: #666666; - font-family: &dtml-secondary_font_family;; - font-weight: bold; - margin-left: 20pt; - margin-right: 30pt; - margin-top: 9pt; - margin-bottom: 3pt; - font-size: 13pt; - font-size: 10pt; -} - -div.Document h3 { - text-align: left; - color: &dtml-primary_accent_color;; - font-family: &dtml-base_font_family;; - font-style: italic; - font-weight: bolder; - margin-left: 10pt; - margin-top: 6pt; - margin-bottom: 2pt; - letter-spacing: 1pt; - font-size: 10pt; -} - -table.tophead { - cellpadding: 1; - cellspacing: 1; - background-color: #CCCCCC; - border-bottom-width: 1pt; - border-top-width: 0; - border-left-width: 0; - border-right-width: 0; - border-color: #6f6f6f; - border-style:solid; -} - -table.tophead tr { - font-size: 11px; - font-family: Verdana, Arial, Helvetica, sans-serif; - text-decoration: none; - color: #505050; - vertical-align: middle; - height: 11px; -} - -table.tophead td { - vertical-align: middle; - height: 10px; -} - -table.tophead p { - line-height: 5pt; - background-color: #6699CC; -} - -.legalinfo { - margin-bottom: 40pt; - margin-top: 20pt; - font-size: 8pt; - font-family: Verdana, Arial, Helvetica, sans-serif; - text-align: center; -} - -.LanguageBox { - margin-bottom: 0px; - margin-top: 0px; - -} - -</dtml-with> diff --git a/product/CMFTranslation/skins/nexedi/printable_html_footer.dtml b/product/CMFTranslation/skins/nexedi/printable_html_footer.dtml deleted file mode 100755 index c031ea4261..0000000000 --- a/product/CMFTranslation/skins/nexedi/printable_html_footer.dtml +++ /dev/null @@ -1,7 +0,0 @@ - -<div class="legalinfo"> - <p><dtml-var legal_footer></p> -</div> - - </body> -</html> diff --git a/product/CMFTranslation/skins/nexedi/printable_html_header.dtml b/product/CMFTranslation/skins/nexedi/printable_html_header.dtml deleted file mode 100755 index e7254c6ef3..0000000000 --- a/product/CMFTranslation/skins/nexedi/printable_html_header.dtml +++ /dev/null @@ -1,39 +0,0 @@ -<dtml-if "_.hasattr(this(),'isEffective') and not isEffective( ZopeTime() )"> -<dtml-unless "portal_membership.checkPermission('Request review',this()) - or portal_membership.checkPermission('Review portal content',this())"> -<dtml-var "RESPONSE.unauthorized()"> -</dtml-unless> -</dtml-if> - -<html> - <head> - <title><dtml-with portal_properties>&dtml-title;</dtml-with - ><dtml-if name="Title">: &dtml-TranslatedTitle;</dtml-if></title> - <link rel="stylesheet" href="printable_stylesheet" type="text/css" /> - <dtml-if relative_to_content> - <base href="&dtml-absolute_url;" /> - </dtml-if> - <dtml-if HTML_CHARSET> - <meta http-equiv="Content-Type" - content="<dtml-var HTML_CHARSET>" /> - <dtml-if "HTML_CHARSET == 'text/html; charset=utf-8'"> - <dtml-call "REQUEST.RESPONSE.setHeader('Content-Type','text/html; charset=utf-8')"> - </dtml-if> - <dtml-else> - <meta http-equiv="Content-Type" - content="text/html; charset=iso-8859-1" /> - </dtml-if> - </head> -<dtml-with stylesheet_properties> -<body font="&dtml-base_font_color;"> -</dtml-with> - -<dtml-let lang="gettext.get_selected_language()"> - <dtml-if AFFILIATE_PATH> - <img src="&dtml-portal_url;/&dtml-lang;/&dtml-AFFILIATE_PATH;logo.png" - border="0" /> - <dtml-else> - <img src="&dtml-portal_url;/&dtml-lang;/logo.png" - border="0" /> - </dtml-if> -</dtml-let> diff --git a/product/CMFTranslation/skins/nexedi/printable_stylesheet.dtml b/product/CMFTranslation/skins/nexedi/printable_stylesheet.dtml deleted file mode 100755 index 4b12b8259f..0000000000 --- a/product/CMFTranslation/skins/nexedi/printable_stylesheet.dtml +++ /dev/null @@ -1,617 +0,0 @@ -<dtml-unless do_inline_css> -<dtml-call "RESPONSE.setHeader('Content-Type','text/css')"> -</dtml-unless> -<dtml-with stylesheet_properties> - -body { - margin-top: 0; - margin-left: 0; - margin-right: 0; - margin-bottom: 0; - background-color: &dtml-bg_color;; - color: &dtml-base_font_color;; - font-family: &dtml-base_font_family;; - font-size: &dtml-base_font_size;; -} - -a:link { - color: &dtml-link_color;; - text-decoration: none; -} - -a:visited { - color: &dtml-vlink_color;; - text-decoration: none; -} - -a:active { - color: &dtml-alink_color; - text-decoration: none; -} - -a:hover { - text-decoration: underline; - color: &dtml-hover_color;; -} - -.invisible { - font-size: 80%; - color: &dtml-bg_color;; -} - -.mild { - color: #7f7f7f; -} - -.DesktopStatusBar{ - font-size: 80%; - font-family: &dtml-secondary_font_family;; - color: #ff0000; -} - -table { - width: 100%; - border: 0; -} - -td.SideBar { - width: 15%; - vertical-align: top; -} - -table.ActionBox { - font-family: &dtml-primary_font_family;; - background-color: &dtml-primary_accent_color;; - margin-right: 5px; - margin-left: 1px; - margin-top: 10px; -} - -table.ActionBox tr td { - font-size: 70%; -} - -table.ActionBox tr td.ActionTitle { - font-weight: bold -} - -table.ActionBox tr.GuestActions { - background-color: &dtml-guest_actions_color;; -} - -table.ActionBox tr.GuestActions td a:link { - color: &dtml-guest_actions_link_color;; - text-decoration: none; -} - -table.ActionBox tr.GuestActions td a:visited { - color: &dtml-guest_actions_link_color;; - text-decoration: none; -} - -table.ActionBox tr.GuestActions td a:active { - color: &dtml-guest_actions_link_color;; - text-decoration: none; -} - -table.ActionBox tr.GuestActions td a:hover { - color: &dtml-hover_color;; - text-decoration: none; -} - -table.ActionBox tr.MemberActions { - background-color: &dtml-secondary_accent_color;; -} - -table.ActionBox tr.MemberActions td { - color: &dtml-secondary_accent_font_color;; -} - -table.ActionBox tr.MemberActions td a:link { - color: &dtml-secondary_accent_link_color;; - text-decoration: none; -} - -table.ActionBox tr.MemberActions td a:visited { - color: &dtml-secondary_accent_vlink_color;; - text-decoration: none; -} - -table.ActionBox tr.MemberActions td a:active{ - color: &dtml-secondary_accent_alink_color;; - text-decoration: none; -} - -table.ActionBox tr.MemberActions td a:hover { - color: &dtml-hover_color;; - text-decoration: none; -} - -td.Desktop { - vertical-align: top; -} - -td.Desktop table tr { - vertical-align: top; -} - -div.Desktop p { - font-size: 100%; - margin-right:100pt; - font-family: &dtml-primary_font_family;; -} - -div.Desktop h1 { - font-size: 120%; - margin-right:100pt; - font-family: &dtml-secondary_font_family;; -} - -div.AuthWarning { - text-align: center; - font-style: italic; -} - -div.AuthWarning table { - border: 0; -} - -div.AuthWarning tr.Hot { - color: #FF0000; -} - -div.Error { - color: #FF0000; -} - -p.DesktopStatusBar { - font-size: 100%; - font-family: &dtml-secondary_font_family;; - font-style: italic; - font-weight: bold; -} - -table.FormLayout { - width: 80%; -} - -table.FormLayout tr { - vertical-align: top; -} - -table.FormLayout tr th.TextField { - vertical-align: top; -} - -table.FormLayout tr td.TextField { - vertical-align: top; -} - -table.FormLayout th { - text-align: right; -} - -table.FormLayout dl.FieldHelp dd { - font-size: 70%; -} - -table.ContentsList { -} - -table.ContentsList tr td img { - border: 0; -} - -table.SearchResults { - width: auto; -} - -table.SearchResults tr th { - text-align: left; -} - -table.SearchResults tr td img { - border: 0; -} - -table.Wizard { - width: auto; -} - -table.Wizard tr { - vertical-align: top; -} - -table.Wizard tr th { - text-align: right; -} - -div.NewsBar { - text-align: right; -} - -table.NewsItems { - border: 1; - padding: 1; -} - - -td.NewsBorder { - background-color: &dtml-primary_accent_color;; -} - -td.NewsListing { - background-color: &dtml-secondary_accent_color;; - color: &dtml-bg_color;; -} - -.NewsLeadin { - background-color: &dtml-bg_color;; - color: &dtml-primary_accent_color;; -} - -.NewsByLine { - background-color: &dtml-primary_accent_color;; - color: &dtml-bg_color;; -} - -.NewsDateline { - background-color: &dtml-primary_accent_color;; - color: &dtml-bg_color;; -} - -td.NewsTitle { - background-color: &dtml-primary_accent_color;; - color: &dtml-primary_accent_font_color;; - text-align: center; - font-size: 90%; - font-weight: bold; -} - -tr.NewsItemRow td { - background-color: &dtml-highlight_color;; - font-size: 70%; -} - -tr.NewsItemRow td.title { - margin-top: 5px; - margin-bottom: 1px; - font-size: 100%; - font-weight: normal; -} - -tr.NewsItemRow td.title p { - margin-top: 3px; - margin-bottom: 1px; - font-size: 100%; - font-weight: normal; -} - -tr.NewsItemRow td.title p.description { - margin-top: 0px; - margin-left: 5px; - margin-bottom: 0px; - font-size: 70%; - font-weight: normal; -} - -p.NewsHeadline { - background-color: &dtml-primary_accent_color;; -} - -td.ListName { - background-color: &dtml-primary_accent_color;; - color: &dtml-primary_accent_font_color;; - font-weight: bold; -} -td.ListDefinition { - font-style: italic; -} - -table.logobox { - padding-top: 1px; - padding-left: 2px; - border: 0px; -} - -td.TitleBox { - vertical-align: top; - font-family: Verdana, Arial, Helvetica, sans-serif; - color: &dtml-primary_accent_color;; - text-align: right; - font-weight: bolder; - font-size: 18pt; - padding-top: 6px; -} - -td.LanguageBox { - vertical-align: top; - text-align: right; - padding-right: 20; -} - -.subsectiontitle { - text-align: left; - color: navy; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 8pt; - font-weight: normal; - margin-left: 5pt; - margin-bottom: 1pt; - margin-top: 1pt -} - - -table.menubox { - margin-right: 5px; - margin-left: 1px; - margin-top: 20px; -} - -table.menubox .selected { - background-color: &dtml-secondary_accent_color;; -} - -table.menubox td.endline { - border-top: 3px; - border-color: #6524B9; - margin-top: 0px; -} - -table.menubox a:link { - color: navy; - text-decoration: none; -} - -table.menubox a:visited { - color: navy; - text-decoration: none; -} - -table.menubox a:active { - color: navy; - text-decoration: none; -} - -table.menubox a:hover { - color: black; - background-color: &dtml-highlight_color;; - text-decoration: underline; -} - -table.menubox td.sectiontitle { - border-bottom: 3px; - border-color: #E6BCE6; - padding-bottom: 0px; - padding-top: 10px; - margin-top: 0px; - margin-bottom: 0px; -} - -table.menubox p.sectiontitle { - text-align: left; - color: navy; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 10pt; - font-weight: bolder; - font-variant: small-caps; - margin-bottom: 2pt; - margin-top: 10pt; -} - -div.breadcrumb { - text-align: left; - color: black; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 8pt; - margin-bottom: 10pt; - margin-top: 10pt -} - -.breadcrumb p { - text-align: left; - color: black; - font-family: Verdana, Arial, Helvetica, sans-serif; - font-size: 8pt; - margin-bottom: 10pt; - margin-top: 10pt -} - -div.Document { - font-size: 11pt; - background-color: &dtml-bg_color;; - color: &dtml-base_font_color;; - font-family: &dtml-base_font_family;; - margin-left: 30pt; - margin-right: 30pt; - margin-bottom: 3pt; - margin-top: 3pt; - line-height: 17pt; - text-indent: 0pt; - text-align: left; -} - -div.Document p { - font-family: &dtml-printer_base_font_family;; - font-size: 11pt; - margin-left: 30pt; - margin-right: 30pt; - margin-bottom: 3pt; - margin-top: 3pt; - line-height: 17pt; - text-indent: 0pt; -} - -div.Document p.title { - text-align: center; - font-family: &dtml-printer_primary_font_family;; - font-weight: bold; - margin-left: 30pt; - margin-right: 30pt; - margin-top: 15pt; - margin-bottom: 15pt; - font-size: 14pt -} - -div.Document p.release { - text-align: center; - margin-bottom: 20pt; - margin-top: 20pt; -} - -div.Document p.summary { - background-color:#CCCCCC; - font-weight: normal; - margin-bottom: 10pt; - margin-top: 40pt; - margin-left: 50pt; - margin-right: 50pt; - border-width: 1px; - border-color: black; -} - -div.Document ul { - font-family: &dtml-printer_base_font_family;; - font-size: 11pt; - margin-left: 30pt; - margin-bottom: 2pt; - margin-top: 2pt; - line-height: 17pt; - text-indent: 0pt; - vertical-align: baseline; -} - -div.Document ul li { - margin-left: 0pt; - vertical-align: baseline; -} - -div.Document ul li ul { - margin-left: 0pt; -} - -div.Document ol { - font-family: &dtml-printer_base_font_family;; - font-size: 11pt; - margin-left: 30pt; - margin-bottom: 2pt; - margin-top: 2pt; - line-height: 17pt; - text-indent: 0pt; - vertical-align: baseline; -} - -div.Document ol li { - margin-left: 0pt; - vertical-align: baseline; -} - -div.Document ol li ul { - margin-left: 0pt; -} - -div.Document h1 { - text-align: black; - letter-spacing: 0.1em; - color: black; - font-family: &dtml-secondary_font_family;; - font-weight: bold; - margin-left: 10pt; - margin-right: 30pt; - margin-top: 30pt; - margin-bottom: 5pt; - font-size: 13pt; -} - -div.Document h1 a:link { - color: #333333; -} - -div.Document h1 a:visited { - color: #333333; -} - -div.Document h1 a:active { - color: &dtml-alink_color; - text-decoration: none; -} - -div.Document h1 a:hover { - text-decoration: underline; - color: &dtml-hover_color;; -} - - -div.Document h2 { - text-align: black; - color: #666666; - font-family: &dtml-secondary_font_family;; - font-weight: bold; - margin-left: 30pt; - margin-right: 30pt; - margin-top: 9pt; - margin-bottom: 3pt; - font-size: 13pt; - font-size: 10pt; -} - -div.Document h3 { - text-align: left; - color: &dtml-primary_accent_color;; - font-family: &dtml-base_font_family;; - font-style: italic; - font-weight: bolder; - margin-left: 30pt; - margin-right: 30pt; - margin-top: 6pt; - margin-bottom: 2pt; - letter-spacing: 1pt; - font-size: 10pt; -} - -table.tophead { - cellpadding: 1; - cellspacing: 1; - background-color: #CCCCCC; - border-bottom-width: 1pt; - border-top-width: 0; - border-left-width: 0; - border-right-width: 0; - border-color: #6f6f6f; - border-style:solid; -} - -table.tophead tr { - font-size: 11px; - font-family: Verdana, Arial, Helvetica, sans-serif; - text-decoration: none; - color: #505050; - vertical-align: middle; - height: 11px; -} - -table.tophead td { - vertical-align: middle; - height: 10px; -} - -table.tophead p { - line-height: 5pt; - background-color: #6699CC; -} - -.legalinfo { - margin-bottom: 40pt; - margin-top: 20pt; - font-size: 8pt; - font-family: Verdana, Arial, Helvetica, sans-serif; - text-align: center; -} - -.LanguageBox { - margin-bottom: 0px; - margin-top: 0px; - -} - -</dtml-with> diff --git a/product/CMFTranslation/skins/nexedi/public_subtopics.py b/product/CMFTranslation/skins/nexedi/public_subtopics.py deleted file mode 100755 index 7371247240..0000000000 --- a/product/CMFTranslation/skins/nexedi/public_subtopics.py +++ /dev/null @@ -1,22 +0,0 @@ - -############################################################################## -# -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# 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 2 -# 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, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -############################################################################## -return context.listSubtopics() diff --git a/product/CMFTranslation/skins/nexedi/quick_login.dtml b/product/CMFTranslation/skins/nexedi/quick_login.dtml deleted file mode 100755 index e955751dc3..0000000000 --- a/product/CMFTranslation/skins/nexedi/quick_login.dtml +++ /dev/null @@ -1,84 +0,0 @@ -<dtml-if "portal_membership.isAnonymousUser()"> - -<form action="&dtml.url-logged_in;" method="post"> - -<input type="hidden" name="came_from" value="&dtml-absolute_url;"> - -<table class="FormLayout" > - <tr> - <td align="left" valign="top"> - <strong><font size="-2"><dtml-gettext>Name</dtml-gettext></font></strong> - </td> - <td align="left" valign="top"> - <font size="-2"><input type="TEXT" name="__ac_name" size="12" - value="<dtml-var "REQUEST.get('__ac_name', '')">"></font> - </td> - </tr> - <tr> - <td align="left" valign="top"> - <strong><font size="-2"><dtml-gettext>Password</dtml-gettext></font></strong> - </td> - <td align="left" valign="top"> - <font size="-2"><input type="PASSWORD" name="__ac_password" size="12"></font> - </td> - </tr> - -<tr> - <td align="left" valign="top"> - </td> - <td align="left" valign="top"> - <font size="-2"><input type="submit" name="submit" value=" - <dtml-gettext>Login</dtml-gettext> "></font> - </td> -</tr> - -<tr> - <td align="center" colspan="2"> - </td> -</tr> - -<tr> - <td align="center" colspan="2"><i><font size="-2"> - <a href="mail_password_form"><dtml-gettext>Lost your password?</dtml-gettext> - </a></font></i> - </td> -</tr> - -<tr> - <td align="center" colspan="2"><i><font size="-2"> - <a href="join_form"><dtml-gettext>Apply for membership...</dtml-gettext> - </a></font></i> - </td> -</tr> - -</table> -</form> - -<dtml-else> - -<dtml-comment> - -<form action="&dtml.url-logout;" method="post"> -<table class="FormLayout" > - <tr><td> -<center><font size="-2"><input type="submit" name="submit" value=" - <dtml-gettext>Logout</dtml-gettext> "></font></center> - </td></tr> -</table> - -</form> - - -</dtml-comment> - -<table class="FormLayout" > - <tr> - <td align="center" colspan="2"><i><font size="-2"> - <a href="password_form"><dtml-gettext>Change Password...</dtml-gettext> - </a></font></i> - </td> - </tr> -</table> - - -</dtml-if> diff --git a/product/CMFTranslation/skins/nexedi/recent_additions.dtml b/product/CMFTranslation/skins/nexedi/recent_additions.dtml deleted file mode 100755 index c379db7c03..0000000000 --- a/product/CMFTranslation/skins/nexedi/recent_additions.dtml +++ /dev/null @@ -1,112 +0,0 @@ - <dtml-var standard_html_header> - - <dtml-if "meta_type=='Portal Topic'"> - - <dtml-let newsitems="portal_catalog.searchResults(meta_type=['Document','Link','Base18 Document', 'Base18 Link'], - sort_on='Date', sort_order='reverse', review_state='published', Subject=combined_subjects())"> - - <dtml-in newsitems size="10" start="batch_start" previous> - <p style="Desktop"> - <a href="&dtml-URL;&dtml-sequence-query;batch_start=&dtml-previous-sequence-start-number;"> - Next &dtml-previous-sequence-size; more recent articles - </a> - </p> - </dtml-in> - - <dtml-in newsitems size="10" start="batch_start"> - <dtml-if sequence-start> - <table cellspacing="0" border="0" width="90%"> - </dtml-if> - <tr> - <td class="NewsListing" align="left" valign="top"> - <a href="&dtml-getURL;"> &dtml-title; </a> - <br> By &dtml-Creator; - </td> - <td class="NewsListing" align="right" valign="top"> - <dtml-var Date> - </td> - </tr> - <tr> - <td colspan="2"> - <em> <dtml-var Description fmt="structured-text"> </em> - </td> - </tr> - <dtml-if sequence-end> - </table> - <dtml-else> - <tr> <td> <br /> </td> </tr> - </dtml-if> - <dtml-else> - <p class="Desktop"> - No news is good news! - </p> - </dtml-in> - - <dtml-in newsitems size="10" start="batch_start" next> - <p class="Desktop"> - <a href="&dtml-URL;&dtml-sequence-query;batch_start=&dtml-next-sequence-start-number;"> - Next &dtml-next-sequence-size; older articles - </a> - </p> - </dtml-in> - - </dtml-let> - - <dtml-else> - - <dtml-let newsitems="portal_catalog.searchResults(meta_type=['Document','Link'], - sort_on='Date', sort_order='reverse', review_state='published')"> - - <dtml-in newsitems size="10" start="batch_start" previous> - <p style="Desktop"> - <a href="&dtml-URL;&dtml-sequence-query;batch_start=&dtml-previous-sequence-start-number;"> - Next &dtml-previous-sequence-size; more recent articles - </a> - </p> - </dtml-in> - - <dtml-in newsitems size="10" start="batch_start"> - <dtml-if sequence-start> - <table cellspacing="0" border="0" width="90%"> - </dtml-if> - <tr> - <td class="NewsListing" align="left" valign="top"> - <a href="&dtml-getURL;"> &dtml-title; </a> - <br> By &dtml-Creator; - </td> - <td class="NewsListing" align="right" valign="top"> - <dtml-var Date> - </td> - </tr> - <tr> - <td colspan="2"> - <em> <dtml-var Description fmt="structured-text"> </em> - </td> - </tr> - <dtml-if sequence-end> - </table> - <dtml-else> - <tr> <td> <br /> </td> </tr> - </dtml-if> - <dtml-else> - <p class="Desktop"> - No news is good news! - </p> - </dtml-in> - - <dtml-in newsitems size="10" start="batch_start" next> - <p class="Desktop"> - <a href="&dtml-URL;&dtml-sequence-query;batch_start=&dtml-next-sequence-start-number;"> - Next &dtml-next-sequence-size; older articles - </a> - </p> - </dtml-in> - - </dtml-let> - - </dtml-if> - - - - - <dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/recent_news.dtml b/product/CMFTranslation/skins/nexedi/recent_news.dtml deleted file mode 100755 index af82b7d1cb..0000000000 --- a/product/CMFTranslation/skins/nexedi/recent_news.dtml +++ /dev/null @@ -1,53 +0,0 @@ -<dtml-var standard_html_header> - -<dtml-let newsitems="portal_catalog.searchResults(meta_type=('News Item', 'Base18 News Item'), - sort_on='Date', sort_order='reverse', review_state='published')"> - -<dtml-in newsitems size="10" start="batch_start" previous> - <p style="Desktop"> - <a href="&dtml-URL;&dtml-sequence-query;batch_start=&dtml-previous-sequence-start-number;"> - Next &dtml-previous-sequence-size; more recent articles - </a> - </p> -</dtml-in> - -<dtml-in newsitems size="10" start="batch_start"> - <dtml-if sequence-start> - <table cellspacing="0" border="0" width="90%"> - </dtml-if> - <tr> - <td class="NewsListing" align="left" valign="top"> - <a href="&dtml-getURL;"> &dtml-title; </a> - <br> By &dtml-Creator; - </td> - <td class="NewsListing" align="right" valign="top"> - <dtml-var Date> - </td> - </tr> - <tr> - <td colspan="2"> - <em> <dtml-var Description fmt="structured-text"> </em> - </td> - </tr> - <dtml-if sequence-end> - </table> - <dtml-else> - <tr> <td> <br /> </td> </tr> - </dtml-if> -<dtml-else> - <p class="Desktop"> - No news is good news! - </p> -</dtml-in> - -<dtml-in newsitems size="10" start="batch_start" next> - <p class="Desktop"> - <a href="&dtml-URL;&dtml-sequence-query;batch_start=&dtml-next-sequence-start-number;"> - Next &dtml-next-sequence-size; older articles - </a> - </p> -</dtml-in> - -</dtml-let> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/search.dtml b/product/CMFTranslation/skins/nexedi/search.dtml deleted file mode 100755 index e246a448e6..0000000000 --- a/product/CMFTranslation/skins/nexedi/search.dtml +++ /dev/null @@ -1,78 +0,0 @@ -<dtml-var standard_html_header> - -<div class="Desktop"> - -<h1> Search Results </h1> - - -<dtml-let results="doFormSearch( REQUEST=REQUEST )"> - -<p>Found <dtml-var expr="_.len(results)" thousands_commas> -items<dtml-if name="SearchableText"> matching "&dtml-SearchableText;"</dtml-if>.</p> - -<dtml-in results size="25" start="batch_start"> - <dtml-let objURL="getURL() + '/view'"> - - <dtml-if sequence-start> -<table class="SearchResults"> - <tr> - <td width="16"><br></td> - <th> Title - </th> - <th> Type - </th> - <th> Date - </th> - </tr> - </dtml-if> - - <tr> - <td> - <dtml-if getIcon> - <a href="&dtml-objURL;"><img - src="&dtml-portal_url;/&dtml-getIcon;" border="0" - alt="[&dtml.missing-Type;]" - title="[&dtml.missing-Type;]"></a> - </dtml-if> - </td> - <td> - <a href="&dtml-objURL;"><dtml-if name="Title"><dtml-var name="Title" size="75" html_quote><dtml-else>(No title)</dtml-if></a> - </td> - <td> - &dtml.missing-Type; - </td> - <td> - &dtml-Date; - </td> - </tr> - <tr> - <td> </td> - <td colspan="3"><em> - <dtml-if name="Description"><dtml-var name="Description" - missing="(No description)" size="100" html_quote> - <dtml-else>(No description)</dtml-if></em></td> - </tr> - <dtml-if sequence-end> - </table> - </dtml-if> - </dtml-let> -<dtml-else> - <p> There are no items matching your specified criteria. </p> -</dtml-in> - -<dtml-in results size="25" start="batch_start" next> - <dtml-let url=URL - sqry=sequence-query - next=next-sequence-start-number - nextSize=next-sequence-size - nextURL="'%s%sbatch_start=%s' % (url,sqry,next)" - > - <p> <a href="&dtml-nextURL;"> Next &dtml-nextSize; items </a> </p> - </dtml-let> -</dtml-in> - -</dtml-let> - -</div> - -<dtml-var standard_html_footer> \ No newline at end of file diff --git a/product/CMFTranslation/skins/nexedi/search_form.dtml b/product/CMFTranslation/skins/nexedi/search_form.dtml deleted file mode 100755 index 14e86c46f9..0000000000 --- a/product/CMFTranslation/skins/nexedi/search_form.dtml +++ /dev/null @@ -1,161 +0,0 @@ -<dtml-var standard_html_header> - -<div class="Desktop"> - -<h1> Search portal </h1> - -<form action="search"> - -<table class="FormLayout"> - -<dtml-if "portal_membership.checkPermission('Review portal content', this())"> - <tr> - <th> Review Status - </th> - <td> - <select name="review_state:list" size="3" multiple> - <option value="" selected>-- any --</option> - <option value="private">private</option> - <option value="pending">pending</option> - <option value="published">published</option> - </select> - <dl class="FieldHelp"> - <dd> As a reviewer, you may search for items based on their - review state. If you wish to constrain results to items - in certain states, select them from this list. - </dd> - </dl> - </td> - </tr> -</dtml-if> - - <tr valign="top"> - <th> Full Text - </th> - <td> - <input name="SearchableText" size="40"> - <dl class="FieldHelp"> - <dd> For a simple text search, enter your search term - here. Multiple words may be found by combining - them with <b>AND</b> and <b>OR</b>. This will - find text in items' contents, title and - description. - </dd> - </dl> - </td> - </tr> - - <tr> - <th>Title - </th> - <td> - <input name="Title" size="20"> - </td> - </tr> - - <tr valign="top"> - <th>Subject</th> - <td> - <select name="Subject:list" multiple size="4"> - <option value="" selected>-- any --</option> - <dtml-in expr="portal_catalog.uniqueValuesFor( 'Subject' )"> - <option value="&dtml-Subject;"> &dtml-Subject; </option> - </dtml-in> - </select> - </td> - </tr> - - <tr> - <th> Description - </th> - <td> - <input name="Description" size="20"> - <dl class="FieldHelp"> - <dd> You may also search the items' descriptions and - titles specifically. Multiple words may be found - by combining them with <b>AND</b> and <b>OR</b>. - </dd> - </dl> - </td> - </tr> - - <tr> - <th> Find new items since... - </th> - <td> - <select name="created:date"> - <dtml-if "not portal_membership.isAnonymousUser()"> - <dtml-let member="portal_membership.getAuthenticatedMember()" - lastLogin="member.last_login_time" - > - <option value="&dtml-lastLogin;"> Last login </option> - </dtml-let> - </dtml-if> - <dtml-let today="ZopeTime().earliestTime()" - yesterday="(today-1).Date()" - lastWeek="(today-7).Date()" - lastMth="(today-31).Date()" - ever="'1970/01/01 00:00:00 GMT'" - > - <option value="&dtml-yesterday;"> Yesterday </option> - <option value="&dtml-lastWeek;"> Last week </option> - <option value="&dtml-lastMth;"> Last month </option> - <option value="&dtml-ever;" selected> Ever </option> - </dtml-let> - </select> - <input type="hidden" name="created_usage" value="range:min"> - <dl class="FieldHelp"> - <dd> You may find only recent items by selecting a time-frame. - </dd> - </dl> - </td> - </tr> - - <tr> - <th> Item type - </th> - <td> - <select name="portal_type:list" multiple size="5"> - <option value="" selected>-- any --</option> - <dtml-in expr="portal_types.listTypeInfo()"> - <option value="&dtml-getId;">&dtml-Title;</option> - </dtml-in> - </select> - - <dl class="FieldHelp"> - <dd> You may limit your results to particular kinds of - items by selecting them above. To find all kinds - of items, do not select anything. - </dd> - </dl> - </td> - </tr> - - <tr> - <th> Creator - </th> - <td> - <input name="Creator" size="20"> - - <dl class="FieldHelp"> - <dd> To find items by a particular user only, enter - their username above. Note that you must enter - their username <i>exactly</i>. - </dd> - </dl> - </td> - </tr> - - <tr> - <td><br></td> - <td> - <input type="submit" value="Search"> - </td> - </tr> -</table> -</form> - -</div> - -<dtml-var standard_html_footer> - diff --git a/product/CMFTranslation/skins/nexedi/secure_absolute_url.py b/product/CMFTranslation/skins/nexedi/secure_absolute_url.py deleted file mode 100755 index deb8eb8945..0000000000 --- a/product/CMFTranslation/skins/nexedi/secure_absolute_url.py +++ /dev/null @@ -1,16 +0,0 @@ -## Script (Python) "secure_absolute_url" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=lang=None,target=None -##title= -## - -if target is None: target = context -if lang is None: lang = context.gettext.get_selected_language() -relative_url = context.portal_url.getRelativeUrl(target) - -return '%s/%s/%s' % (context.secure_url, lang, - relative_url) diff --git a/product/CMFTranslation/skins/nexedi/set_criteria.py b/product/CMFTranslation/skins/nexedi/set_criteria.py deleted file mode 100755 index 14d1945aee..0000000000 --- a/product/CMFTranslation/skins/nexedi/set_criteria.py +++ /dev/null @@ -1,37 +0,0 @@ -## Script (Python) "set_criteria" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters= -##title=Update all topics to create a classification hierarchy -## -global changed -changed = 0 - -def updateCriterion(topic,root_topic): - global changed - # Search for criterium - my_cryterium = None - for criterium in topic.listCriteria(): - if criterium.Type() == 'String Criterion': - my_cryterium = criterium - if my_cryterium is not None: - my_cryterium.edit(root_topic + topic.id) - changed = changed + 1 - else: - my_cryterium = topic.addCriterion('Subject','String Criterion') - updateCriterion(topic,root_topic) - -def updateSubtopics(topic, root_topic=''): - updateCriterion(topic,root_topic) - for subtopic in topic.objectValues('Portal Topic'): - updateSubtopics(subtopic,root_topic=root_topic + topic.id + '/') - -for topic in container.objectValues('Portal Topic'): - updateSubtopics(topic) - -print changed - -return printed \ No newline at end of file diff --git a/product/CMFTranslation/skins/nexedi/site_vocabulary.dtml b/product/CMFTranslation/skins/nexedi/site_vocabulary.dtml deleted file mode 100755 index 3822817796..0000000000 --- a/product/CMFTranslation/skins/nexedi/site_vocabulary.dtml +++ /dev/null @@ -1,14 +0,0 @@ -<dtml-var standard_html_header> - -<div class="Document"> - -<pre> -<dtml-with aq_parent> -<dtml-in expr="objectValues('Portal Topic')"><dtml-var list_topic_vocabulary></dtml-in> -</dtml-with> -</pre> - -</div> - -<dtml-var standard_html_footer> - diff --git a/product/CMFTranslation/skins/nexedi/standard_html_footer b/product/CMFTranslation/skins/nexedi/standard_html_footer deleted file mode 100755 index 647a3531c8..0000000000 --- a/product/CMFTranslation/skins/nexedi/standard_html_footer +++ /dev/null @@ -1,25 +0,0 @@ - <div class="Desktop"> - <dtml-if localFooter> - <dtml-var localFooter> - </dtml-if> - - </div> - </td> - </tr> - </tbody> -</table> - -<!-- Legalese --> - -<div class="legalinfo"> - <p>Nexedi, SARL au capital 10.000 Euros, 943, av. de la République 59700 Marcq-en-Baroeul<br /> - RCS Roubaix Tourcoing 440 047 504 - IBAN: FR76 3002 7000 3900 0000 1332 336<br /> - Email:<a href="mailto:info@nexedi.com"> info@nexedi.com</a> Tel. +33(0)6 62 05 76 14 - Fax. +33(0)1 44 75 72 97<br /> - <a href="/legal">Legal Notice</a> - </p> -</div> - - - </body> -</html> \ No newline at end of file diff --git a/product/CMFTranslation/skins/nexedi/standard_html_footer.dtml b/product/CMFTranslation/skins/nexedi/standard_html_footer.dtml deleted file mode 100755 index 22ccc2a4c9..0000000000 --- a/product/CMFTranslation/skins/nexedi/standard_html_footer.dtml +++ /dev/null @@ -1,19 +0,0 @@ - <div class="Desktop"> - <dtml-if localFooter> - <dtml-var localFooter> - </dtml-if> - - </div> - </td> - </tr> - </tbody> -</table> - -<!-- Legalese --> - -<div class="legalinfo"> - <p><dtml-var legal_footer></p> -</div> - - </body> -</html> diff --git a/product/CMFTranslation/skins/nexedi/standard_html_header.dtml b/product/CMFTranslation/skins/nexedi/standard_html_header.dtml deleted file mode 100755 index 6f1d4d4a48..0000000000 --- a/product/CMFTranslation/skins/nexedi/standard_html_header.dtml +++ /dev/null @@ -1,134 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> - -<dtml-comment> -Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - -This software is subject to the provisions of the Zope Public License, -Version 2.0 (ZPL). A copy of the ZPL should accompany this distribution. -THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED -WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS -FOR A PARTICULAR PURPOSE -</dtml-comment> - -<dtml-if "_.hasattr(this(),'isEffective') and not isEffective( ZopeTime() )"> -<dtml-unless "portal_membership.checkPermission('Request review',this()) - or portal_membership.checkPermission('Review portal - content',this())"> -<dtml-var "RESPONSE.unauthorized()"> -</dtml-unless> -</dtml-if> - -<html> - <head> - <title><dtml-with portal_properties>&dtml-title;</dtml-with - ><dtml-if name="Title">: &dtml-TranslatedTitle;</dtml-if></title> - <dtml-var css_inline_or_link> - <dtml-if relative_to_content> - <base href="&dtml-absolute_url;" /> - </dtml-if> - <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> - </head> -<dtml-with stylesheet_properties> -<body font="&dtml-base_font_color;"> -</dtml-with> - -<!-- Top Bar: Global links and search --> -<dtml-var standard_top_bar> - -<!-- Main Page --> -<table cellspacing="0" cellpadding="0" width="100%" border="0"> - <tbody> - <tr> - <!-- Logo --> - <td rowspan="2" class="LogoBox" valign="top"> - <div class="LogoBox"> - <a href="&dtml-portal_url;"><img src="&dtml-portal_url;/logo.png" - border="0" /></a> - </div> - </td> - <!-- Title and Language --> - <td width="90%" class="TitleBox"> - <dtml-var TranslatedTitle_or_id> - </td> - </tr> - <tr class="LanguageBox"> - <td class="LanguageBox"> - <dtml-if show_language_selector><dtml-var language_selector></dtml-if> - </td> - </tr> - </tbody> -</table> -<table cellspacing="0" cellpadding="0" width="100%" border="0"> - <tbody> - <tr> - <dtml-if show_menu> - <td valign="top" width="150"> - <!-- Optional Action Box--> - <dtml-if "not portal_membership.isAnonymousUser()"> - <div class="ActionBox"><dtml-var actions_box></div> - </dtml-if> - <!-- Main menu --> - <dtml-var menu_box> - <!-- Quick Login --> - <dtml-if show_quicklogin><br><dtml-var quick_login></dtml-if> - </td> - <!-- Main Box --> - <td colspan="2" valign="top" class="Desktop"> - <dtml-else> - <dtml-if - "portal_membership.getAuthenticatedMember().has_role('Manager')"> - <td valign="top" width="150"> - <!-- Optional Action Box--> - <div class="ActionBox"><dtml-var actions_box></div> - </td> - <!-- Main Box --> - <td colspan="2" valign="top" class="Desktop"> - <dtml-else> - <!-- Main Box --> - <td colspan="3" valign="top" class="Desktop"> - </dtml-if> - </dtml-if> - - - <!-- Main Box --> - <div class="Desktop"> - <dtml-if "not portal_membership.isAnonymousUser() and - not _.hasattr(portal_membership.getAuthenticatedMember(), - 'getMemberId')"> - <div class="AuthWarning"> - <table> - <tr class="Host"> - <td> Warning! </td> - <tr> - <td> You are presently logged in as a user from outside - this portal. Many parts of the portal will not work! - You may have to shut down and relaunch your browser to - log out, depending on how you originally logged in. - </td> - </tr> - </table> - </div> - </dtml-if> - </div> - - <dtml-if show_breadcrumb> - <!-- Breadcrumb --> - <div class="breadcrumb"> - <p><dtml-var breadcrumb></p> - </div> - </dtml-if> - - - <div class="Desktop"> - <dtml-if portal_status_message> - <p class="DesktopStatusBar"><dtml-var - "gettext(portal_status_message)"></p> - </dtml-if> - - <dtml-if localHeader> - <dtml-var localHeader> - </dtml-if> - </div> - diff --git a/product/CMFTranslation/skins/nexedi/standard_top_bar.dtml b/product/CMFTranslation/skins/nexedi/standard_top_bar.dtml deleted file mode 100755 index b35e46a2e8..0000000000 --- a/product/CMFTranslation/skins/nexedi/standard_top_bar.dtml +++ /dev/null @@ -1,42 +0,0 @@ -<!-- Top navigation bar: access to Nexedi network and search features --> -<table class="tophead" width="100%"> - <form action="&dtml-portal_url;/search" method="POST"> - <tr> - <td align="left" nowrap valign="middle"> - - <dtml-if partner_sites> - <dtml-in partner_sites> - <a class="topbanner" href="http://&dtml-sequence-item;">&dtml-sequence-item;</a> | - </dtml-in> - </dtml-if> - </td> - <td align="right" nowrap valign="middle" width="90%"> - <dtml-if show_sitemap> - <a class="topbanner" href="&dtml-portal_url;/sitemap.html">Site Map</a> | - </dtml-if> - <dtml-if show_search> - <a class="topbanner" href="&dtml-portal_url;/search_form">Search</a> - </dtml-if> - </td> - <td align="right" nowrap valign="middle"> - <dtml-if special_top_menu> - <dtml-var special_top_menu> - </dtml-if> - <dtml-if show_multisearch> - <font size="-2"> - <select name="site" class="osdn-search"> - <dtml-in partner_sites> - <option value="&dtml-sequence-item;">&dtml-sequence-item;</option> - </dtml-in> - </select> - </font> - </dtml-if> - <dtml-if show_search> - <font size="-2"> - <input type="text" size="12" name="SearchableText" class="tophead-search" /> <input type="submit" value="Go" /> - </font> - </dtml-if> - </td> - </tr> - </form> -</table> diff --git a/product/CMFTranslation/skins/nexedi/stylesheet_properties.props b/product/CMFTranslation/skins/nexedi/stylesheet_properties.props deleted file mode 100755 index 23f35eba04..0000000000 --- a/product/CMFTranslation/skins/nexedi/stylesheet_properties.props +++ /dev/null @@ -1,30 +0,0 @@ -alink_color:string=#FFFFFF -base_font_color:string=#000000 -base_font_size:string=8pt -bg_color:string=#FFFFFF -guest_actions_color:string=#888888 -guest_actions_link_color:string=#660000 -highlight_color:string=#D3E1C8 -highlight_font_color:string=#000000 -hover_color:string=#000066 -link_color:string=#0000AA -primary_accent_alink_color:string=#FFFFFF -primary_accent_color:string=#2E3065 -primary_accent_font_color:string=#FFFFFF -primary_accent_link_color:string=#FFFFFF -primary_accent_text_color:string=#000066 -primary_accent_vlink_color:string=#FFFFFF -primary_font_family:string=Verdana, Arial, Helvetica, sans-serif -secondary_accent_alink_color:string=#FFFFFF -secondary_accent_color:string=#D8D3EB -secondary_accent_font_color:string=#000000 -secondary_accent_link_color:string=#3E4088 -secondary_accent_vlink_color:string=#3E4088 -secondary_font_family:string=Arial, Verdana, Helvetica, sans-serif -select_stylesheet_id:string=default_stylesheet -title:string=ERP5 Portal Style -vlink_color:string=DarkMagenta -base_font_family:string=sans-serif -printer_base_font_family:string=serif -printer_primary_font_family:string=sans-serif -printer_secondary_font_family:string=sans-serif diff --git a/product/CMFTranslation/skins/nexedi/topic_view.dtml b/product/CMFTranslation/skins/nexedi/topic_view.dtml deleted file mode 100755 index f3d2b38011..0000000000 --- a/product/CMFTranslation/skins/nexedi/topic_view.dtml +++ /dev/null @@ -1,85 +0,0 @@ -<dtml-var standard_html_header> - -<table border=0 cellspacing=0 cellpadding=0 width="100%"> -<tr> - <td width="70%" valign="top"> - <div class="Document"> - - <p><dtml-var Description></p> - <dtml-if "objectValues(['Portal Topic'])"> - <h1>Subtopics</h1> - <ul> - <dtml-in expr="contentValues(['Portal Topic'])" sort=Title> - <li><a href="&dtml-local_absolute_url;/topic_view"><dtml-if -Title>&dtml-Title;<dtml-else>&dtml-getId;</dtml-if></a></li> - </dtml-in> - </ul> - </dtml-if> - - <h1>Matching items</h1> - -<dtml-let results=queryCatalog> -<dtml-in results size="50" start="batch_start" sort=Title> - <dtml-let objURL="getObject().local_absolute_url() + '/view'"> - -<dtml-if sequence-start> - </dtml-if> - -<p><dtml-if getIcon> - <a href="&dtml-objURL;"><img - src="&dtml-portal_url;/&dtml-getIcon;" border="0" - alt="[&dtml.missing-Type;]" - title="[&dtml.missing-Type;]"></a> - </dtml-if> <a href="&dtml-objURL;"><dtml-if name="Title"><dtml-var -name="Title" size="75" html_quote><dtml-else>(No title)</dtml-if></a></p> - <dtml-if sequence-end> - </dtml-if> - </dtml-let> - <dtml-else> - <p> There are no items in this topic. </p> - </dtml-in> - -<dtml-in results size="50" start="batch_start" sort=Title next> - <dtml-let url=URL - sqry=sequence-query - next=next-sequence-start-number - nextSize=next-sequence-size - nextURL="'%s%sbatch_start=%s' % (url,sqry,next)" - > - <p> <a href="&dtml-nextURL;"> Next &dtml-nextSize; items </a> </p> - </dtml-let> - </dtml-in> - -</dtml-let> - - </div> - -<div class="Desktop"> -<div class="Topic"> - -<h3> Query Parameters </h3> -<ul> -<dtml-with buildQuery> -<dtml-in items> - <li> <dtml-var sequence-key> : <dtml-var sequence-item> </li> -</dtml-in> -</dtml-with> -</ul> - -</div> -</div> - - - </td> - <td width="30%" valign="top"> - <dtml-var news_box><br /> - <dtml-var latest_box> - </td> -</tr> -<tr> - <td></td> - <td></td> -</tr> -</table> - -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/nexedi/update_http_cache.py b/product/CMFTranslation/skins/nexedi/update_http_cache.py deleted file mode 100755 index 744d2dfa04..0000000000 --- a/product/CMFTranslation/skins/nexedi/update_http_cache.py +++ /dev/null @@ -1,28 +0,0 @@ -## Script (Python) "update_http_cache" -##bind container=container -##bind context=context -##bind namespace= -##bind script=script -##bind subpath=traverse_subpath -##parameters=my_folder=None -##title=Updates the caching parameters (cache must be called ht) -## -if my_folder is None: my_folder = container - -def updateCache(o): - o.ZCacheable_setManagerId(manager_id='ht') - #o.setCacheNamespaceKeys(keys=['__ac_name']) - -for o in context.objectValues(): - try: - updateCache(o) - print 'Good %s' % o.absolute_url() - except: - print 'Bad %s' % o.absolute_url() - -for f in context.objectValues(spec=['Base18 Folder','Folder','portal_skins']): - f.update_http_cache(my_folder=f) - -print "Done" - -return printed diff --git a/product/CMFTranslation/skins/nexedi/wikipage_view.dtml b/product/CMFTranslation/skins/nexedi/wikipage_view.dtml deleted file mode 100755 index 5d5f9a8440..0000000000 --- a/product/CMFTranslation/skins/nexedi/wikipage_view.dtml +++ /dev/null @@ -1,8 +0,0 @@ -<dtml-var standard_html_header> -<dtml-var wikipage_header> -<div class="Desktop"> - <div class="Document"> - <dtml-var render> - </div > -</div> -<dtml-var standard_html_footer> diff --git a/product/CMFTranslation/skins/zpt_content18/discussionitem18_view.pt b/product/CMFTranslation/skins/zpt_content18/discussionitem18_view.pt deleted file mode 100755 index 916217c491..0000000000 --- a/product/CMFTranslation/skins/zpt_content18/discussionitem18_view.pt +++ /dev/null @@ -1,39 +0,0 @@ -<html xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/main_template/macros/master"> - <metal:block fill-slot="base"> - <base href="" - tal:attributes="href python: here.absolute_url() + '/'"> - </metal:block> -<body> - -<div metal:fill-slot="header"> - - <h1 id="DesktopTitle" - tal:content="here/Title">Document Title</h1> - - <div id="DesktopDescription" tal:content="here/Description"> - Document Description goes here. - </div> - - <div metal:use-macro="here/content_byline/macros/byline">By Me</div> - -</div> - -<div metal:fill-slot="main"> - - <div id="DiscussionAbove"> - <span tal:replace="structure here/aboveInThread"></span> - </div> - - <div tal:replace="structure here/TranslatedBody">Body</div> - - <div class="Discussion"> - <span tal:replace="structure here/viewThreadsAtBottom" - tal:condition="here/viewThreadsAtBottom|nothing">Dicussions</span> - </div> - -</div> - -</body> -</html> diff --git a/product/CMFTranslation/skins/zpt_content18/document18_view.pt b/product/CMFTranslation/skins/zpt_content18/document18_view.pt deleted file mode 100755 index 15d9d73ec1..0000000000 --- a/product/CMFTranslation/skins/zpt_content18/document18_view.pt +++ /dev/null @@ -1,36 +0,0 @@ -<html xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - xmlns:i18n="http://xml.zope.org/namespaces/tal/i18n" - metal:use-macro="here/main_template/macros/master"> - <metal:block fill-slot="base"> - <base href="" - tal:attributes="href python: here.absolute_url() + '/'"> - </metal:block> -<body> - -<div metal:fill-slot="header"> - - <h1 id="DesktopTitle" - tal:content="here/TranslatedTitle">Document Title</h1> - - <div id="DesktopDescription" tal:content="here/TranslatedDescription"> - Document Description goes here. - </div> - - <div metal:use-macro="here/content_byline/macros/byline">By Me</div> - -</div> - -<div metal:fill-slot="main"> - -<div tal:replace="structure here/TranslatedBody">Translated Body</div> - -<div class="Discussion"> - <span tal:replace="structure here/viewThreadsAtBottom" - tal:condition="here/viewThreadsAtBottom|nothing"></span> -</div> - -</div> - -</body> -</html> diff --git a/product/CMFTranslation/skins/zpt_content18/favorite18_view.pt b/product/CMFTranslation/skins/zpt_content18/favorite18_view.pt deleted file mode 100755 index eeb88bb41a..0000000000 --- a/product/CMFTranslation/skins/zpt_content18/favorite18_view.pt +++ /dev/null @@ -1,39 +0,0 @@ -<html xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/main_template/macros/master"> - <metal:block fill-slot="base"> - <base href="" - tal:attributes="href python: here.absolute_url() + '/'"> - </metal:block> -<body> - -<div metal:fill-slot="header"> - - <h1 id="DesktopTitle" - tal:content="here/Title">Document Title</h1> - - <div id="DesktopDescription" tal:content="here/Description"> - Document Description goes here. - </div> - - <div metal:use-macro="here/content_byline/macros/byline">By Me</div> - -</div> - -<div metal:fill-slot="main"> - - <p> Link: <a href="" - tal:attributes="href here/getRemoteUrl" - tal:content="here/getRemoteUrl" - >/index_html</a></p> - - <div class="Discussion"> - <span tal:replace="structure here/viewThreadsAtBottom" - tal:condition="here/viewThreadsAtBottom|nothing"></span> - </div> - -</div> - -</body> -</html> - diff --git a/product/CMFTranslation/skins/zpt_content18/file18_view.pt b/product/CMFTranslation/skins/zpt_content18/file18_view.pt deleted file mode 100755 index c2791a5276..0000000000 --- a/product/CMFTranslation/skins/zpt_content18/file18_view.pt +++ /dev/null @@ -1,68 +0,0 @@ -<html xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/main_template/macros/master"> - <metal:block fill-slot="base"> - <base href="" - tal:attributes="href python: here.absolute_url() + '/'"> - </metal:block> -<body> - - -<div metal:fill-slot="header"> - - <h1 id="DesktopTitle" - tal:content="here/Title">Document Title</h1> - - <div id="DesktopDescription" tal:content="here/Description"> - Document Description goes here. - </div> - - <div metal:use-macro="here/content_byline/macros/byline">By Me</div> - -</div> - -<div metal:fill-slot="main"> - -<h2> File Properties </h2> - - <table> - - <tr> - <th align="right">Filename</th> - <td tal:content="here/getId">My ID</td> - </tr> - - <tr> - <th align="right">Size</th> - <td tal:content="here/size">1024K</td> - </tr> - - <tr> - <th align="right">Content-type</th> - <td tal:content="here/content_type">application/gzip</td> - <tr> - - <tr> - <td> <br> </td> - <td> - </td> - </tr> - </table> - -<h2> Download File </h2> - -<p> <a href="." title="Download File" - tal:define="file here/absolute_url" - tal:attributes="href file; title here/Title" - tal:content="string:Download ${here/Title}">Download File</a> -</p> - - <div class="Discussion"> - <span tal:replace="structure here/viewThreadsAtBottom" - tal:condition="here/viewThreadsAtBottom|nothing"></span> - </div> - -</div> - -</body> -</html> diff --git a/product/CMFTranslation/skins/zpt_content18/folder_contents.pt b/product/CMFTranslation/skins/zpt_content18/folder_contents.pt deleted file mode 100755 index 7147c9f828..0000000000 --- a/product/CMFTranslation/skins/zpt_content18/folder_contents.pt +++ /dev/null @@ -1,155 +0,0 @@ -<span tal:define="dummy here/filterCookie; desktop python: request.set('isDesktop', 1)"></span> - -<html xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/main_template/macros/master"> -<body> -<div metal:fill-slot="main"> - <div tal:condition="python: not(here.portal_membership.checkPermission('List folder contents', here))"> - <span tal:define="redirect python: request.RESPONSE.redirect(here.absolute_url())"></span> - </div> - -<!-- This is the desktop area --> -<div class="Desktop"> - -<h1> Desktop </h1> - -<form action="" METHOD="POST" - tal:attributes="action here/absolute_url"> - <table class="FormLayout"> - <tr> - <td valign="top"> - <table class="ContentsList"> - <tbody tal:condition="python: here.portal_membership.checkPermission('List folder contents', here, 'aq_parent')"> - <tr valign="top" - tal:define="upNav python: hasattr(here.aq_parent, 'portal_url'); - upID python: here.aq_parent.getId()"> - <td colspan="3" align="left"> - <span tal:condition="upNav|nothing"><a href="../folder_contents"><img src="" alt="[Link]" border="0" - tal:attributes="src python: here.portal_url() + '/UpFolder_icon.gif'"></a> - </span> - <span tal:condition="upNav">Up to <a href="../folder_contents" tal:content="upID">Up ID</a></span> - <span tal:condition="python: not(upNav)"><span class="mild">Root</span></span> - </td> - </tr> - </tbody> - <tr><td colspan="1" align="left" width="49%"> - <table> - <tbody tal:define="global b_start string:0;b_start request/b_start | b_start; - filterString python: request.get('folderfilter', ''); - filter python: here.decodeFolderFilter(filterString); - items python: here.listFolderContents(contentFilter=filter); - Batch python:modules['ZTUtils'].Batch; - global batch python:Batch(items, 8, int(b_start), orphan=0); - global batch1 batch/next"> - <tr align="top" - tal:repeat="items batch"> - <td align="left" width="5" NOWRAP - tal:define="folderish items/isPrincipiaFolderish; - portalish items/isPortalContent|nothing; - global methodID python: folderish and 'folder_contents' or (portalish and 'view' or ''); - global icon items/getIcon|items/icon|nothing"> - <input type="checkbox" name="ids:list" value="" id="" - tal:attributes="value items/getId; id python: 'cb_' + items.getId()" /> - </td> - <td> - <span tal:condition="icon"> - <a href="" - tal:attributes="href python: items.getId() + '/' + methodID"> - <img src="" alt="" border="0" - tal:attributes="src python: here.portal_url() + '/' + icon; - alt items/Type|nothing"></a> - </span> - </td> - <td> - <a href="" - tal:attributes="href python: items.getId() + '/' + methodID"><span tal:replace="items/getId">ID</span> - <span tal:condition="items/Title" - tal:replace="python: '(' + items.Title() + ')'">(Title)</span></a> - </td> - </tr> - </tbody> - </table> - </td> - <td width="2%"> </td> - <td colspan="1" width="49%"> - <table> - <tr align="top" - tal:repeat="items batch1"> - <td align="left" width="5" NOWRAP - tal:define="folderish items/isPrincipiaFolderish; - portalish items/isPortalContent|nothing; - global methodID python: folderish and 'folder_contents' or (portalish and 'view' or ''); - global icon items/getIcon|items/icon|nothing"> - <input type="checkbox" name="ids:list" value="" id="" - tal:attributes="value items/getId; id python: 'cb_' + items.getId()" /> - </td> - <td> - <span tal:condition="icon"> - <a href="" - tal:attributes="href python: items.getId() + '/' + methodID"> - <img src="" alt="" border="0" - tal:attributes="src python: here.portal_url() + '/' + icon; - alt items/Type|nothing"></a> - </span> - </td> - <td> - <a href="" - tal:attributes="href python: items.getId() + '/' + methodID"><span tal:replace="items/getId">ID</span> - <span tal:condition="items/Title" - tal:replace="python: '(' + items.Title() + ')'">(Title)</span></a> - </td> - </tr> - </table> - - </tr> - - - - <tr> - <td align="left"> - <span tal:define="p batch/previous" tal:condition="p"> - <a href="" - tal:attributes="href string:folder_contents?b_start=${p/previous/first}">Previous Items</a> - </span> - </td> -<td> </td> - <td align="left"> - <span tal:define="n batch1/next|nothing" tal:condition="n"> - <a href="" - tal:attributes="href string:folder_contents?b_start=${batch1/end}">Next Items</a> - </span> - </td> - </tr> -<!-- end cotentList --> -</table> - -<TABLE BORDER="0" CELLSPACING="0" CELLPADDING=2> -<TR> - <TD ALIGN="LEFT" VALIGN="TOP" WIDTH="16"></TD> - <TD ALIGN="LEFT" VALIGN="TOP"> - <span tal:condition="python: here.portal_membership.checkPermission('Add portal content', here)"> - <INPUT TYPE="SUBMIT" NAME="folder_factories:method" VALUE="New..."> - </span> - <span tal:condition="python: here.portal_membership.checkPermission('View management screens', here)"> - <INPUT TYPE="SUBMIT" NAME="folder_rename_form:method" VALUE="Rename"> - <INPUT TYPE="SUBMIT" NAME="folder_cut:method" VALUE="Cut"> - <INPUT TYPE="SUBMIT" NAME="folder_copy:method" VALUE="Copy"> - <span tal:condition="here/cb_dataValid"> - <INPUT TYPE="SUBMIT" NAME="folder_paste:method" VALUE="Paste"> - </span> - </span> - <span tal:condition="python: here.portal_membership.checkPermission('Delete objects', here)"> - <INPUT TYPE="SUBMIT" NAME="folder_delete:method" VALUE="Delete"> - </span> - </TD> -</TR> -</TABLE> -</table> -</form> -<span tal:replace="structure here/folder_filter_form">Filter Form Here</span> -</div> -</div> -</body> -</html> - diff --git a/product/CMFTranslation/skins/zpt_content18/full_metadata_edit_form.pt b/product/CMFTranslation/skins/zpt_content18/full_metadata_edit_form.pt deleted file mode 100755 index c6bd15758a..0000000000 --- a/product/CMFTranslation/skins/zpt_content18/full_metadata_edit_form.pt +++ /dev/null @@ -1,149 +0,0 @@ -<html xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - xmlns:i18n="http://xml.zope.org/namespaces/tal/i18n" - metal:use-macro="here/main_template/macros/master"> -<body> -<div metal:fill-slot="main"> -<div class="Desktop"> - - -<span tal:replace="request/message" - tal:condition="request/message|nothing"><hr></span> - - -<div class="Metadata"> - -<h2 i18n:translate="">Resource Metadata </h2> - -<form action="metadata_edit" method="post" - tal:attributes="action string:${here/absolute_url}/metadata_edit" -> -<table class="FormLayout"> - <tr> - <th i18n:translate=""> - Enable Discussion? - </th> - <td colspan="3"> - <select name="allowDiscussion" - tal:define="val here/isDiscussable"> - <option value="None" - tal:attributes="selected python: val == None"> Default </option> - <option value="0" - tal:attributes="selected python: val == 0"> Off </option> - <option value="1" - tal:attributes="selected python: val == 1"> On </option> - </select> - </td> - </tr> - <tr valign="top"> - <th align="right" i18n:translate=""> Identifier - </th> - <td colspan="3"> <span tal:replace="here/Identifier"></span> - </td> - </tr> - <tr valign="top"> - <th align="right" i18n:translate=""> Title - </th> - <td colspan="3"> - <input type="text" - name="title" - value="" - size="65" - tal:attributes="value here/Title"> - </td> - </tr> - <tr valign="top"> - <th align="right" i18n:translate=""> Description - </th> - <td colspan="3"> - <textarea name="description:text" rows="5" - cols="65" wrap="soft" - tal:content="here/Description"></textarea> - </td> - </tr> - - <tr valign="top"> - <th align="right" i18n:translate=""> Subject </th> - <td> - <textarea name="subject:lines" rows="3" - cols="20" wrap="soft" - tal:define="lines here/subjectsList"><span tal:repeat="line lines" tal:replace="line"></span></textarea> - <br> - <select name="subject:list" multiple> - <option value="" - tal:define="items python: here.portal_metadata.listAllowedSubjects(here); subjects here/Subject" - tal:repeat="item items" - tal:attributes="value item; selected python: item in subjects" - tal:content="item"> - </option> - </select> - </td> - <th align="right" i18n:translate=""> Contributors </th> - <td> - <textarea name="contributors:lines" rows="5" - cols="30" wrap="soft" - tal:define="items here/Contributors" - tal:repeat="item items" - tal:content="item"></textarea> - </td> - </tr> - <tr valign="top"> - <th align="right" i18n:translate=""> Creation Date - </th> - <td> <span tal:replace="here/CreationDate"></span> - </td> - <th align="right" i18n:translate=""> Last Modified Date - </th> - <td> <span tal:replace="here/ModificationDate"></span> - </td> - </tr> - <tr valign="top"> - <th align="right" i18n:translate=""> Effective Date - </th> - <td> <input type="text" name="effective_date" - value="" - tal:define="effectiveString python: here.effective_date and here.effective_date.ISO() or 'None'" - tal:attributes="value effectiveString"> - </td> - <th align="right" i18n:translate=""> Expiration Date - </th> - <td> <input type="text" name="expiration_date" - value="" - tal:define="expirationString python: here.expiration_date and here.expiration_date.ISO() or 'None'" - tal:attributes="value expirationString"> - </td> - </tr> - <tr valign="top"> - <th align="right" i18n:translate=""> Format - </th> - <td> <input type="text" name="format" value="" - tal:attributes="value here/Format"> - </td> - </tr> - <tr valign="top"> - <th align="right" i18n:translate=""> Language - </th> - <td> <input type="text" name="language" value="" - tal:attributes="value here/Language"> - </td> - </tr> - <tr valign="top"> - <th align="right" i18n:translate=""> Rights - </th> - <td> <input type="text" name="rights" value="" - tal:attributes="value here/Rights"> - </td> - </tr> - <tr valign="top"> - <td> <br> </td> - <td> - <input type="submit" value=" Change "> - </td> - </tr> -</table> -</form> -</div> -</div> -</div> -</body> -</html> diff --git a/product/CMFTranslation/skins/zpt_content18/image18_view.pt b/product/CMFTranslation/skins/zpt_content18/image18_view.pt deleted file mode 100755 index 5974b4a74e..0000000000 --- a/product/CMFTranslation/skins/zpt_content18/image18_view.pt +++ /dev/null @@ -1,35 +0,0 @@ -<html xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/main_template/macros/master"> - <metal:block fill-slot="base"> - <base href="" - tal:attributes="href python: here.absolute_url() + '/'"> - </metal:block> -<body> - -<div metal:fill-slot="header"> - - <h1 id="DesktopTitle" - tal:content="here/Title">Document Title</h1> - - <div id="DesktopDescription" tal:content="here/Description"> - Document Description goes here. - </div> - - <div metal:use-macro="here/content_byline/macros/byline">By Me</div> - -</div> - -<div metal:fill-slot="main"> - - <span tal:replace="structure here/tag">Tag</span> - - <div class="Discussion"> - <span tal:replace="structure here/viewThreadsAtBottom" - tal:condition="here/viewThreadsAtBottom|nothing"></span> - </div> - -</div> - -</body> -</html> diff --git a/product/CMFTranslation/skins/zpt_content18/link18_view.pt b/product/CMFTranslation/skins/zpt_content18/link18_view.pt deleted file mode 100755 index 0c5f817d1d..0000000000 --- a/product/CMFTranslation/skins/zpt_content18/link18_view.pt +++ /dev/null @@ -1,38 +0,0 @@ -<html xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/main_template/macros/master"> - <metal:block fill-slot="base"> - <base href="" - tal:attributes="href python: here.absolute_url() + '/'"> - </metal:block> -<body> - -<div metal:fill-slot="header"> - - <h1 id="DesktopTitle" - tal:content="here/Title">Document Title</h1> - - <div id="DesktopDescription" tal:content="here/Description"> - Document Description goes here. - </div> - - <div metal:use-macro="here/content_byline/macros/byline">By Me</div> - -</div> - -<div metal:fill-slot="main"> - - <p> Link: <a href="" - tal:attributes="href here/remote_url" - tal:content="here/remote_url" - >http://www.zope.org</a></p> - - <div class="Discussion"> - <span tal:replace="structure here/viewThreadsAtBottom" - tal:condition="here/viewThreadsAtBottom|nothing"></span> - </div> - -</div> - -</body> -</html> diff --git a/product/CMFTranslation/skins/zpt_content18/newsitem18_view.pt b/product/CMFTranslation/skins/zpt_content18/newsitem18_view.pt deleted file mode 100755 index 2cd620f0b4..0000000000 --- a/product/CMFTranslation/skins/zpt_content18/newsitem18_view.pt +++ /dev/null @@ -1,35 +0,0 @@ -<html xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/main_template/macros/master"> - <metal:block fill-slot="base"> - <base href="" - tal:attributes="href python: here.absolute_url() + '/'"> - </metal:block> -<body> - -<div metal:fill-slot="header"> - - <h1 id="DesktopTitle" - tal:content="here/Title">Document Title</h1> - - <div id="DesktopDescription" tal:content="here/Description"> - Document Description goes here. - </div> - - <div metal:use-macro="here/content_byline/macros/byline">By Me</div> - -</div> - -<div metal:fill-slot="main"> - - <div tal:replace="structure here/CookedBody">Body</div> - - <div class="Discussion"> - <span tal:replace="structure here/viewThreadsAtBottom" - tal:condition="here/viewThreadsAtBottom|nothing"></span> - </div> - -</div> - -</body> -</html> diff --git a/product/CMFTranslation/skins/zpt_content18/translation_template.pt b/product/CMFTranslation/skins/zpt_content18/translation_template.pt deleted file mode 100755 index be39ede925..0000000000 --- a/product/CMFTranslation/skins/zpt_content18/translation_template.pt +++ /dev/null @@ -1,68 +0,0 @@ -<html xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - metal:use-macro="here/main_template/macros/master"> - <metal:block fill-slot="base"> - <base href="" - tal:attributes="href python: here.absolute_url() + '/'"> - </metal:block> -<body> - - -<div metal:fill-slot="header"> - - <h1 id="DesktopTitle" - tal:content="here/Title">Document Title</h1> - - <div id="DesktopDescription" tal:content="here/Description"> - Document Description goes here. - </div> - - <div metal:use-macro="here/content_byline/macros/byline">By Me</div> - -</div> - -<div metal:fill-slot="main"> - -<h2> File Properties </h2> - - <table> - - <tr> - <th align="right">Filename</th> - <td tal:content="here/getId">My ID</td> - </tr> - - <tr> - <th align="right">Size</th> - <td tal:content="here/size">1024K</td> - </tr> - - <tr> - <th align="right">Content-type</th> - <td tal:content="here/content_type">application/gzip</td> - <tr> - - <tr> - <td> <br> </td> - <td> - </td> - </tr> - </table> - -<h2> Download File </h2> - -<p> <a href="." title="Download File" - tal:define="file here/absolute_url/TranslationTemplate" - tal:attributes="href file; title here/Title" - tal:content="string:Download ${here/Title}">Download File</a> -</p> - - <div class="Discussion"> - <span tal:replace="structure here/viewThreadsAtBottom" - tal:condition="here/viewThreadsAtBottom|nothing"></span> - </div> - -</div> - -</body> -</html> diff --git a/product/CMFTranslation/skins/zpt_nexedi/actions_box.pt b/product/CMFTranslation/skins/zpt_nexedi/actions_box.pt deleted file mode 100755 index 23586624ea..0000000000 --- a/product/CMFTranslation/skins/zpt_nexedi/actions_box.pt +++ /dev/null @@ -1,64 +0,0 @@ -<div metal:define-macro="actions"> -<div tal:define="isAnon python:here.portal_membership.isAnonymousUser(); - AuthClass python:isAnon and 'GuestActions' or 'MemberActions'; - uname python: isAnon and 'Guest' or here.portal_membership.getAuthenticatedMember().getUserName(); - actions python:here.portal_actions.listFilteredActionsFor(here); - user_actions python:actions['user']; - folder_actions python:actions['folder']; - object_actions python:(actions['object'] + actions['workflow']); - global_actions python:actions['global']"> -<table class="ActionBox" width="100%"> - <tbody tal:condition="object_actions"> - <tr class="" tal:attributes="class AuthClass"> - <td class="ActionTitle"> - <img src="http://www.somewhere.org/p_/User_icon" align="left" alt="User" - tal:attributes="src string:${here/portal_url}/p_/User_icon" - > - <span tal:content="uname">user name</span> - </td> - </tr> - <tr class="" tal:attributes="class AuthClass"> - <td> - <span tal:repeat="action user_actions"><a href="" tal:attributes="href action/url" tal:content="action/name">Action</a><br></span> - </td> - </tr> - <tr class="" - tal:attributes="class AuthClass"> - <td class="ActionTitle" - tal:define="getIcon python:hasattr(here, 'getIcon') and here.getIcon(); - icon python:getIcon or getattr(here, 'icon', ''); - typ python:getattr(here, 'Type', ''); - objID python:here.getId()"> - <img src="" - tal:condition="icon" align="left" alt="Type" - tal:attributes="src python:'%s/%s' % (here.portal_url(), icon); alt typ" /> - <span tal:replace="structure python: here.truncID(objID, size=15)">ObjectID</span> - </td> - </tr> - <tr class="" - tal:attributes="class AuthClass"> - <td tal:define="review_state python:here.portal_workflow.getInfoFor(here, 'review_state', '')"> - <span tal:condition="review_state">Status: <span tal:replace="review_state">Private</span><br></span> - <span tal:repeat="action object_actions"><a href="" tal:attributes="href action/url" tal:content="action/name">Action</a><br></span> - </td> - </tr> - <tr class="" - tal:attributes="class AuthClass" - tal:condition="folder_actions"> - <td> - <span tal:repeat="action folder_actions"><a href="" tal:attributes="href action/url" tal:content="action/name">Action</a><br></span> - </td> - </tr> - <tr class="" - tal:attributes="class AuthClass" - tal:condition="global_actions"> - <td> - <span tal:repeat="action global_actions"><a href="" tal:attributes="href action/url" tal:content="action/name">Action</a><br></span> - - </td> - </tr> - </tbody> -</table> -</div> -</div> - diff --git a/product/CMFTranslation/skins/zpt_nexedi/folder18_view.pt b/product/CMFTranslation/skins/zpt_nexedi/folder18_view.pt deleted file mode 100755 index 8697f30996..0000000000 --- a/product/CMFTranslation/skins/zpt_nexedi/folder18_view.pt +++ /dev/null @@ -1,51 +0,0 @@ -<span tal:condition="python:'index.html' in here.objectIds()" - tal:replace="here/index.html" /> -<span tal:condition="python:'index.stx' in here.objectIds()" - tal:replace="here/index.stx" /> -<span tal:condition="python:'default.htm' in here.objectIds()" - tal:replace="here/default.htm" /> -<html metal:use-macro="here/main_template/macros/master" - tal:condition="python:'default.htm' not in here.objectIds() and - 'index.html' not in here.objectIds() and - 'index.stx' not in here.objectIds()"> - <head> - <title tal:content="template/title">The title</title> - </head> - <body> - <div metal:fill-slot="main" - tal:define="folder_url python:here.local_absolute_url()"> - <div class="Document"> - <p tal:condition="here/Description" tal:content="here/TranslatedDescription"/> - <div tal:define="auth_filter nocall: modules/ZTUtils/LazyFilter; - default_types python:( 'Document' - , 'Image' - , 'File' - , 'FAQ' - , 'News Item' - , 'Folder' - ); - types types | here/show_content_types | default_types; - raw_items python: here.contentValues( - filter={'portal_type': types } ); - items python: auth_filter( raw_items, skip='View' ); - "> - <div tal:condition="items"> - <span tal:repeat="item items"> - <h1><a href="item_url" tal:attributes="href item/local_absolute_url"><img - valign="middle" border="0" - tal:attributes="src string:${item/portal_url}/${item/getIcon}; - alt string:${item/Type}; - title string:${item/Type}"></a> - <a href="item_url" tal:attributes="href item/local_absolute_url" - tal:content="item/TranslatedTitle"> Title </a></h1> - <p tal:condition="exists: item/Description" - tal:content="item/TranslatedDescription"> - Description <!--fmt="structured-text'--> - </p> - </span> - </div> - </div> - </div> - </div> - </body> -</html> \ No newline at end of file diff --git a/product/CMFTranslation/skins/zpt_nexedi/main_template.pt b/product/CMFTranslation/skins/zpt_nexedi/main_template.pt deleted file mode 100755 index 937d471559..0000000000 --- a/product/CMFTranslation/skins/zpt_nexedi/main_template.pt +++ /dev/null @@ -1,161 +0,0 @@ -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" - "DTD/xhtml1-strict.dtd"> -<?xml-stylesheet href="default_stylesheet" rel="stylesheet" type="text/css"?> - -<span tal:replace="nothing"> -<!-- -Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. - Thierry Faucher <tf@nexedi.com> - Jean-Paul Smets <jp@nexedi.com> - -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 2 -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, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ---> -</span> - -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" - xml:lang="en" - xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - xmlns:i18n="http://xml.zope.org/namespaces/tal/i18n" - metal:define-macro="master" - tal:define="lang python:here.gettext.get_selected_language(); - affiliate_path here/AFFILIATE_PATH | string:; - site_url here/portal_url; - site_url string:$site_url/$lang/$affiliate_path; - is_anonymous python:here.portal_membership.isAnonymousUser(); - is_member python:not is_anonymous; - is_manager python: - here.portal_membership.getAuthenticatedMember().has_role('Manager') or here.portal_membership.getAuthenticatedMember().has_role('Partner'); - is_member python:is_manager or is_member; - show_menu here/show_menu | nothing; - show_menu python:show_menu or is_manager; - col_num python:3 - show_menu; - portal_object python:here.portal_url.getPortalObject(); - HTML_CHARSET here/HTML_CHARSET | nothing"> - -<!-- HTML Header --> -<head> - <title tal:content="here/getTranslatedTitle"> - ERP5 Community: Download ERP5 - </title> - <link rel="stylesheet" href="http://www.erp5.org/default_stylesheet" type="text/css" /> - <META tal:condition="HTML_CHARSET" http-equiv="Content-Type" content="" - tal:attributes="content HTML_CHARSET" /> - <META tal:condition="python: HTML_CHARSET is None" http-equiv="Content-Type" - content="text/html; charset=iso-8859-1"/> -</head> - - -<body font="#000000"> - -<span tal:condition="HTML_CHARSET"> - <span tal:condition="python:HTML_CHARSET == 'text/html; charset=utf-8'" - tal:define="dummy python:request.RESPONSE.setHeader('Content-Type',HTML_CHARSET)"/> -</span> - - -<!-- Top Bar: Global links and search --> -<span tal:replace="structure here/standard_top_bar"/> - -<!-- Main Page --> -<table cellspacing="0" cellpadding="0" width="100%" border="0"> - <tbody> - <tr> - <!-- Logo --> - <td colspan="2" rowspan="2" class="LogoBox" valign="top"> - <div class="LogoBox"> - <a href="http://www.erp5.org" tal:attributes="href site_url"> - <img src="http://www.erp5.org/logo.png" border="0" - tal:attributes="src string:$site_url/logo.png" /> - </a> - </div> - </td> - <!-- Title and Language --> - <td width="90%" class="TitleBox" tal:content="here/getTranslatedTitle"> - Download ERP5 - </td> - </tr> - <tr class="LanguageBox"> - <td class="LanguageBox"> - <span tal:condition="here/show_language_selector" - tal:replace="structure here/language_selector"/> - </td> - </tr> - </tbody> -</table> -<table cellspacing="0" cellpadding="0" width="100%" border="0"> - <tbody> - <tr> - <td valign="top" width="150" - tal:condition="show_menu"> - <!-- Optional Action Box--> - <div class="ActionBox" tal:content="structure here/actions_box" - tal:condition="is_member" /> - <!-- Main menu --> - <span tal:replace="structure here/menu_box"/> - - <!-- Quick Login --> - <span tal:replace="structure here/quick_login" - tal:condition="here/show_quicklogin" /> - </td> - - <!-- Main Box --> - <td colspan="2" valign="top" class="Desktop" - tal:attributes="colspan col_num"> - - - <!-- Main Box --> - <div class="Desktop"> - </div> - - <!-- Breadcrumb --> - <div class="breadcrumb" tal:condition="here/show_breadcrumb" - tal:content="structure here/breadcrumb" /> - - <!-- Desktop Header --> - <div class="Desktop"> - <p class="DesktopStatusBar" tal:condition="request/portal_status_message | nothing" - tal:content="python:here.gettext(request.portal_status_message)">Message</p> - - <span tal:condition="here/localHeader | nothing" - tal:replace="structure here/localHeader" /> - </div> - - <!-- Document --> - <div class="Document" metal:define-slot="main"> - <p>The document</p> - </div> - - <!-- Desktop Footer --> - <div class="Desktop"> - <span tal:condition="here/localFooter | nothing" - tal:replace="structure here/localFooter"/> - </div> - </td> - </tr> - </tbody> -</table> - -<!-- Legalese --> -<div class="legalinfo" tal:content="structure here/legal_footer"> - <p>(c) ERP5 Community <br /> - Content published under <a href="http://www.gpdl.org">GPDL</a> </p> -</div> - -<!-- End --> - </body> -</html> - - diff --git a/product/CMFTranslation/skins/zpt_nexedi/navigation_box.pt b/product/CMFTranslation/skins/zpt_nexedi/navigation_box.pt deleted file mode 100755 index 143e8994d3..0000000000 --- a/product/CMFTranslation/skins/zpt_nexedi/navigation_box.pt +++ /dev/null @@ -1,63 +0,0 @@ -<html xmlns:tal="http://xml.zope.org/namespaces/tal" - xmlns:metal="http://xml.zope.org/namespaces/metal" - xmlns:i18n="http://xml.zope.org/namespaces/tal/i18n"> -<body> - - -<!-- Top navigation bar: access to partner sites, sitemap and search features --> -<table class="tophead" width="100%" metal:define-macro="navigation_box"> - <form action="search" method="POST" - tal:attributes="action string:${here/portal_url}/search"> - <tr> - <td align="left" nowrap valign="middle"> - - <!-- List all partner sites as define in partner_sites portal property --> - <span tal:repeat="partner here/partner_sites"> - <a class="topbanner" href="http://partner.com" - tal:attributes="href string:http:///${partner}" - tal:content="partner">partner.com</a> | - </span> - </td> - <td align="right" nowrap valign="middle" width="90%"> - <!-- Add a sitemap link according to show_sitemap portal property --> - <span tal:condition="here/show_sitemap|nothing"> - <a class="topbanner" href="sitemap.html" - tal:attributes="href string:${here/portal_url}/sitemap.html">Site Map</a> | - </span> - <!-- Add a search link according to show_search portal property --> - <span tal:condition="here/show_search"> - <a class="topbanner" href="search_form" - tal:attributes="href string:${here/portal_url}/search_form">Search</a> - </span> - </td> - <td align="right" nowrap valign="middle"> - <!-- Add an extra menu like in storever.com according to special_top_menu portal property --> - <span tal:condition="here/special_top_menu|nothing"> - <!-- <dtml-var special_top_menu> --> - </span> - <!-- Add a search pop-up according to show_multisearch portal property --> - <span tal:condition="here/show_multisearch|nothing"> - <font size="-2"> - <select name="site" class="osdn-search"> - <option tal:repeat="partner here/partner_sites" - value="partner" - tal:content="partner" - tal:attributes="value partner">Partner</option> - </select> - </font> - </span> - <!-- Add a search area according to show_search portal property --> - <span tal:condition="here/show_search|nothing"> - <font size="-2"> - <input type="text" size="12" name="SearchableText" class="tophead-search" /> <input type="submit" value="Go" /> - </font> - </span> - </td> - </tr> - </form> -</table> - - - -</body> -</html> diff --git a/product/CMFTranslation/skins/zpt_nexedi/newsitem18_view.pt b/product/CMFTranslation/skins/zpt_nexedi/newsitem18_view.pt deleted file mode 100755 index f9ec2ca4f4..0000000000 --- a/product/CMFTranslation/skins/zpt_nexedi/newsitem18_view.pt +++ /dev/null @@ -1,38 +0,0 @@ -<html metal:use-macro="here/main_template/macros/master"> - <head> - <title tal:content="template/title">The title</title> - </head> - <body> - <div metal:fill-slot="main"> - <div class="Document"> - - <p i18n:translate="">For Immediate Release</p> - - <p><b tal:content="here/effective_date">A date of publication</b> - <b - tal:content="structure here/TranslatedDescription" - >Description of the news</b></p> - - <span tal:replace="structure here/TranslatedBody" /> - - <h1 i18n:translate="">Permanent URL for this Press Release</h1> - - <p tal:content="here/absolute_url">The URL of this news</p> - - <h1><span i18n:translate="">About</span> <span - tal:replace="python: here.portal_properties.Title()" /></h1> - - <p tal:content="structure here/news_plate" i18n:translate="">News bowlerplate</p> - - </div> - - <div class="ContentBy" - tal:content="structure here/content_byline" - tal:condition="python: not here.portal_membership.isAnonymousUser()" - >This document is writen by M. X</div> - - - <div class="Discussion" tal:content="structure here/viewThreadsAtBottom">The - discussion</div> - </div> - </body> -</html> diff --git a/product/CMFTranslation/spec/Base18.spec b/product/CMFTranslation/spec/Base18.spec deleted file mode 100755 index 9f1c8a1a63..0000000000 --- a/product/CMFTranslation/spec/Base18.spec +++ /dev/null @@ -1,141 +0,0 @@ -# File: Base18.spec -# -# Base18 -# -# "Base18 is a Zope product to implement multilingual portals -# based on the Zope CMF" -# -# This product currently packages the code - - -%define PRODUCT_DIRECTORY /var/lib/zope/Products -%define USER jp - -Name: Base18 -Summary: A Zope product to implement multilingual portals with CMF -Version: 0.2.0 -Release: 10nxd -Group: Development/Python -Requires: Zope Localizer CMF -Copyright: GPL -Vendor: Nexedi -URL: http://www.erp5.org -Packager: Jean-Paul Smets <jp@nexedi.com> -BuildRoot: /var/tmp/%{name}-%{version}-rootdir - -Source0: http://www.erp5.org/download/%{name}-%{version}.tar.bz2 -Source1: %{name}-%{version}.tar.bz2 - -#---------------------------------------------------------------------- -%description -Base18 is a Zope product to implement multilingual portals -It extends the Zope CMF by allowing documents to be split into -a list of paragraphs which can be translated through a message catalog. -Thanks to Localizer, messages are stored in message catalogs which -can be exported and imported as gettext files. This allows to use -applications such as KBabel to search for previous translations of -a give sentence. - -http://www.erp5.org - -#---------------------------------------------------------------------- -%prep - -#Create the source code from the local Zope -rm -rf /home/%{USER}/rpm/BUILD/%{name}-%{version} -cp -ur %{PRODUCT_DIRECTORY}/%{name} /home/%{USER}/rpm/BUILD/%{name}-%{version} -cd /home/%{USER}/rpm/BUILD/ -tar cjf /home/%{USER}/rpm/SOURCES/%{name}-%{version}.tar.bz2 %{name}-%{version} -rm -rf /home/%{USER}/rpm/BUILD/%{name}-%{version} - -rm -rf $RPM_BUILD_ROOT -%setup -a 1 - -#---------------------------------------------------------------------- -%build - -#---------------------------------------------------------------------- -%install - -install -d $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name} -install %{name}-%{version}/*.py $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name} -install %{name}-%{version}/*.txt $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name} -install %{name}-%{version}/*.png $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name} -install %{name}-%{version}/*.zexp $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name} - -install -d $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/help -install %{name}-%{version}/help/*.stx $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/help - -install -d $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/dtml -install %{name}-%{version}/dtml/*.dtml $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/dtml - -install -d $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/nexedi -install %{name}-%{version}/skins/nexedi/*.py $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/nexedi -install %{name}-%{version}/skins/nexedi/*.pt $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/nexedi -install %{name}-%{version}/skins/nexedi/*.dtml $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/nexedi -install %{name}-%{version}/skins/nexedi/*.props $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/nexedi -install %{name}-%{version}/skins/nexedi/*.png $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/nexedi -install %{name}-%{version}/skins/nexedi/*.ico $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/nexedi - -install -d $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/content18 -install %{name}-%{version}/skins/content18/*.py $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/content18 -install %{name}-%{version}/skins/content18/*.dtml $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/content18 - -install -d $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/zpt_nexedi -install %{name}-%{version}/skins/zpt_nexedi/*.pt $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/zpt_nexedi - -install -d $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/zpt_content18 -install %{name}-%{version}/skins/zpt_content18/*.pt $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/skins/zpt_content18 - -install -d $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/interfaces -install %{name}-%{version}/interfaces/*.py $RPM_BUILD_ROOT/usr/lib/zope/lib/python/Products/%{name}/interfaces - - -%clean -rm -rf $RPM_BUILD_ROOT - -#---------------------------------------------------------------------- -%files -%defattr(-,root,root,0755) -%doc README.txt INSTALL.txt CREDITS.txt GPL.txt ZPL.txt - -/usr/lib/zope/lib/python/Products/%{name}/*.py -/usr/lib/zope/lib/python/Products/%{name}/interfaces/*.py -/usr/lib/zope/lib/python/Products/%{name}/*.txt -/usr/lib/zope/lib/python/Products/%{name}/*.png -/usr/lib/zope/lib/python/Products/%{name}/*.zexp -/usr/lib/zope/lib/python/Products/%{name}/help/*.stx -/usr/lib/zope/lib/python/Products/%{name}/dtml/*.dtml -/usr/lib/zope/lib/python/Products/%{name}/skins/nexedi/*.dtml -/usr/lib/zope/lib/python/Products/%{name}/skins/nexedi/*.py -/usr/lib/zope/lib/python/Products/%{name}/skins/nexedi/*.pt -/usr/lib/zope/lib/python/Products/%{name}/skins/nexedi/*.png -/usr/lib/zope/lib/python/Products/%{name}/skins/nexedi/*.props -/usr/lib/zope/lib/python/Products/%{name}/skins/nexedi/*.ico -/usr/lib/zope/lib/python/Products/%{name}/skins/content18/*.dtml -/usr/lib/zope/lib/python/Products/%{name}/skins/content18/*.py -/usr/lib/zope/lib/python/Products/%{name}/skins/zpt_nexedi/*.pt -/usr/lib/zope/lib/python/Products/%{name}/skins/zpt_content18/*.pt - -#---------------------------------------------------------------------- -%changelog -* Tue Feb 4 2003 Jean-Paul Smets <jp@nexedi.com> 0.8.1-10nxd -- Updated description - -* Thu Jan 30 2003 Jean-Paul Smets <jp@nexedi.com> 0.8.1-9nxd -- Missing interfaces - -* Tue Jan 21 2003 Jean-Paul Smets <jp@nexedi.com> 0.8.1-8nxd -- Missing menu_box - -* Wed Jan 8 2003 Jean-Paul Smets <jp@nexedi.com> 0.8.1-7nxd -- Fixed again missing skins - -* Wed Jan 8 2003 Jean-Paul Smets <jp@nexedi.com> 0.8.1-6nxd -- Fixed again missing skins - -* Wed Jan 8 2003 Jean-Paul Smets <jp@nexedi.com> 0.8.1-5nxd -- Code update for latest CMF - recover from crash - -* Sat Oct 12 2002 Jean-Paul Smets <jp@nexedi.com> 0.8.1-1nxd -- Initial release diff --git a/product/CMFTranslation/tool.png b/product/CMFTranslation/tool.png deleted file mode 100755 index ab2c1f5a76622765a48e8f9cc516398b9a3a4213..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 286 zcmeAS@N?&q;$mQ6;PUiv2?EjrAk4xHB;VeB1QIX^@CkAK|Nnnj+RjzGKYD~rjLSPX zXYE_xxFwhG|H`aARnc|R(z$5YiLcInb%r)6K$WdC?rq=6IvuE&u_VYZn8D%MjWi%f zti&~<Bsf2<q&%@Gl_5Pd&8Q$RUBO7tM9*k(oI4*(g>!yxZfaf$gKuI=szP~YNrr;E zr*A-As_ayt3YK(Fw{#%QRTKF(7)X11x;TbZ%t=mgVEn@r(6)(rieT6W*+UoJ$8aUq z*kv;;i{y8nx<a<$!kf5&#!0LKb(!Kbo|X0NVKA(%^knck&(3i+g=e#r5;Mb<ZG2|? TS&viz4Q23j^>bP0l+XkKkPl_d diff --git a/product/CMFTranslation/translation_workflow.zexp b/product/CMFTranslation/translation_workflow.zexp deleted file mode 100755 index 8d4f79b760216c8ca6b7366be07a36178db3b664..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8295 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 J!hg5?{Rc&Vm0kb< diff --git a/product/CMFTranslation/utils.py b/product/CMFTranslation/utils.py deleted file mode 100755 index 2fed5d6343..0000000000 --- a/product/CMFTranslation/utils.py +++ /dev/null @@ -1,142 +0,0 @@ -############################################################################## -# -# Base18: a Zope product which provides multilingual services for CMF Default -# documents. -# -# Copyright (c) 2001 Zope Corporation and Contributors. All Rights Reserved. -# Copyright (c) 2002 Nexedi SARL and Contributors. All Rights Reserved. -# Jean-Paul Smets-Solanes <jp@nexedi.com> -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# -# This program as such is not intended to be used by end users. End -# users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the Zope Public License (ZPL) Version 2.0 -# -# 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. -# -############################################################################## -__version__ = "$Revision$"[11:-2] -__doc__ = "This product provides the basic behaviour to CMF object which need\ - translation" - -""" - Utility functions for translation -""" - -import os -from Products.CMFDefault.utils import _dtmldir, StrippingParser -from Globals import package_home -from zLOG import LOG - -# -# DTML Directory for ZMI -# - -_dtmldir = os.path.join( package_home( globals() ), 'dtml' ) - - -############################################################################## -# -# Text Translation -# -############################################################################## - -def indent(txt, level): - indented_text = [] - for l in txt.split('\n'): - indented_text.append(level * ' ' + l) - return indented_text.join('\n') - -def unIndent(txt): - """ - Counts the number of trailing white spaces - """ - indent = 0 - for l in txt.split('\n'): - wc = len(l) - len(l.strip()) - indent = min (wc, indent) - stripped_text = [] - for l in txt.split('\n'): - stripped_text.append(l[indent:]) - return indent, stripped_text.join('\n') - -def _translate_txt( text, md, lang=None): - """ - Render TXT to HTML and Translate. - """ - translated_text = [] - text_blocks = text.split('\n\n') - for block in text_blocks: - indent, stripped_text = unIndent(block) - translated_stripped_text = md.gettext(stripped_text, lang=lang) - translated_text.append(indent(translated_stripped_text, indent)) - return translated_text.join('\n') - -############################################################################## -# -# Structured Text Translation -# -############################################################################## - -_translate_stx = _translate_txt - -############################################################################## -# -# HTML Translation -# -############################################################################## - -class TranslatingParser(StrippingParser): - - def handle_data( self, data ): - - if data: - # encoding should be improved - #if type(self.result) != type(u'a'): self.result = unicode(self.result, 'iso-8859-15') - #LOG('result', 0, self.result) - start_space = data[0] == ' ' - end_space = data[-1] == ' ' - LOG('data', 0, 'x%sx' % data) - translated_text = self.md.gettext(data, lang=self.lang) - LOG('translated_text', 0, 'x%sx' % translated_text) - if type(translated_text) is type(u'a'): - #LOG('data', 0, translated_text.encode('iso-8859-15')) - translated_text = translated_text.encode('iso-8859-15') - translated_text = start_space * ' ' + translated_text + end_space * ' ' - self.result = self.result + translated_text - - - -def _translate_html( text, md, level=1 , lang=None): - """ - Render HTML to HTML and Translate - Must be updated later - """ - if callable(text): text = text() - parser = TranslatingParser() - parser.md = md - parser.lang = lang - parser.feed( text ) - parser.close() - return parser.result - - - st = StructuredText.Basic( text ) # Creates the basic DOM - if not st: # If it's an empty object - return "" # return now or have errors! - - doc = DocumentWithImages( st ) - html = Base18HtmlWithImages( doc, md, lang, level ) - return html - - - \ No newline at end of file -- 2.30.9