zc.datetimewidget-0.7.0/0000755000177100020040000000000011573441236016263 5ustar menesismenesis00000000000000zc.datetimewidget-0.7.0/CHANGES.txt0000644000177100020040000000352711573441231020076 0ustar menesismenesis00000000000000======= CHANGES ======= 0.7.0 (2011-06-07) ------------------ - Fix tests using a newer zope.publisher that requires zope.login. - Fix tests by not using deprecated ``zope.app.securitypolicy`` - Remove test dependency ``zope.app.server`` and ``zope.app.authentication``. Use ``zope.password`` instead. - No longer using deprecated ``zope.testing.doctestunit``. Use python's build-in ``doctest`` instead. 0.6.4 (2009-10-20) ------------------ - Make Calendar pop-up and drag behavior more consistent across browser modes in IE. 0.6.3 (2009-08-24) ------------------ - Fixed handling of naive datetime objects, they no longer result in an exception but are displayed unchanged. When they get saved again they are saved with UTC timezone like all other ones. - Added `datetimewidget.txt` doctest to ``long_description`` to show up on pypi home page. - Fixed home page name in `setup.py`. - Added coverage analysis tools to buildout. - Removed deprecated zpkg and zcml slugs. 0.6.2 (2009-05-20) ------------------ - Using `++resource++` instead of `@@/` to load resources. - Renaming "lang" directory (``ZPublisher`` gets confused because of a view with the same name exists in ``zope.traversing.namespace``). See `gocept.datetimewidget`_ for more details on how to use zc.datetimewidget with zope2. .. _`gocept.datetimewidget` : http://pypi.python.org/pypi/gocept.datetimewidget 0.6.1 (2008-05-29) ------------------ - Unchanged from 0.5.2, but released with a new version number thanks to a package with an 0.6.1dev-rBFN revision found in the wild. 0.5.2 (2007-11-03) ------------------ - Improve package data. - Developed proper package dependencies. - Merged functional tests into ``tests.py``. 0.5.1 (2006-06-15) ------------------ - Include license and copyright headers. 0.5.0 (2006-05-24) ------------------ - Initial release. zc.datetimewidget-0.7.0/PKG-INFO0000644000177100020040000003434711573441236017373 0ustar menesismenesis00000000000000Metadata-Version: 1.0 Name: zc.datetimewidget Version: 0.7.0 Summary: Javascript-based widgets for date and datetime fields. Home-page: http://pypi.python.org/pypi/zc.datetimewidget Author: Zope Corporation and Contributors Author-email: zope-dev@zope.org License: ZPL 2.1 Description: There are two types of widgets provided by this package, a date widget and a datetime widget. .. contents:: ========================= Datetime and Date Widgets ========================= There are two types of widgets provided by this package, a date widget and a datetime widget. Date Widget ----------- The date widget only handles datetime.date objects, which are not timezone aware. We use the demo package here to have a content class. >>> from zope import component >>> from datetime import datetime, date >>> from zc.datetimewidget import datetimewidget >>> from zc.datetimewidget.demo.content import DemoContent >>> from zc.datetimewidget.demo.interfaces import IDemoContent >>> from zope.publisher.browser import TestRequest, BrowserLanguages >>> component.provideAdapter(BrowserLanguages) >>> request = TestRequest(HTTP_ACCEPT_LANGUAGE='en-US') >>> field = IDemoContent['startDate'] >>> widget = datetimewidget.DateWidget(field,request) >>> widget._toFormValue(None) u'' Now let us convert a real date. >>> d = date(2006,5,1) >>> formValue = widget._toFormValue(d) >>> formValue '2006-05-01' >>> parsedValue = widget._toFieldValue(formValue) >>> parsedValue datetime.date(2006, 5, 1) The widget handles the same date notations as zope's default datewidget. >>> widget._toFieldValue('2006/12/31') datetime.date(2006, 12, 31) Datetime Widget --------------- Datetimes are always stored timezone aware, and by default the utc timezone is used. In order to handle timezones correctly the zope instance has to provide an adapter from IBrowserRequest to ITZInfo. It is up to the instance what kind of implementation it uses. For this test, we just use the implementation of the demo.timezone module which always returns Europe/Vienna as timezone. The field's missing value results in an empty string. >>> import pytz >>> from zc.datetimewidget.demo import timezone >>> component.provideAdapter(timezone.tzinfo) >>> tz = pytz.timezone('Europe/Vienna') >>> request = TestRequest(HTTP_ACCEPT_LANGUAGE='en-US') >>> field = IDemoContent['startDatetime'] >>> widget = datetimewidget.DatetimeWidget(field,request) >>> widget._toFormValue(None) u'' Now let us convert a real datetime. >>> dt = datetime(2006,5,1,12,tzinfo=pytz.utc) >>> formValue = widget._toFormValue(dt) >>> formValue '2006-05-01 14:00:00' >>> parsedValue = widget._toFieldValue(formValue) >>> parsedValue datetime.datetime(2006, 5, 1, 12, 0, tzinfo=) The datetime might also be an naive one (without time zone) but it gets saved with UTC timezone information. >>> naive_dt = datetime(2006,5,1,12) >>> formValue = widget._toFormValue(naive_dt) >>> formValue '2006-05-01 12:00:00' >>> parsedValue = widget._toFieldValue(formValue) >>> parsedValue datetime.datetime(2006, 5, 1, 10, 0, tzinfo=) While the widget tries to parse dates in the form '%Y-%m-%d %H:%M:%S' first, it will fall through to the locale-specific parsing of the core datetimewidget. >>> widget._toFieldValue('May 1, 2006 2:00:00 PM') datetime.datetime(2006, 5, 1, 12, 0, tzinfo=) =============== Calendar Widget =============== Configuration ------------- >>> from zope.interface.verify import verifyObject >>> from zc.datetimewidget.datetimewidget import ( ... CalendarWidgetConfiguration, ICalendarWidgetConfiguration) Let's create a standard configuration object: >>> conf = CalendarWidgetConfiguration('field.x') >>> verifyObject(ICalendarWidgetConfiguration, conf) True Fields have their default values: >>> conf.daFormat u'%Y/%m/%d' >>> conf.singleClick True >>> print conf.flat None We can customize some attributes during instantiation: >>> import datetime >>> conf = CalendarWidgetConfiguration('x', date=datetime.date(2006, 8, 25)) >>> conf.date datetime.date(2006, 8, 25) Dumping JavaScript ------------------ Configuration can be dumped as JavaScript. First an empty configuration: >>> print CalendarWidgetConfiguration('field.x').dumpJS() Calendar.setup({ }); Now let's add a few customizations: >>> conf = CalendarWidgetConfiguration('x', daFormat=u'%m-%d', ... inputField='inp', eventName=None, date=conf.date) >>> print conf.dumpJS() Calendar.setup({ inputField: 'inp', eventName: null, daFormat: '%m-%d', date: new Date(2006, 7, 25) }); Invalid arguments are not accepted: >>> conf = CalendarWidgetConfiguration('x', foo='bar') Traceback (most recent call last): ... ValueError: unknown arguments: foo Date set widget --------------- >>> from zc.datetimewidget.datetimewidget import DateSetWidget >>> from zope.schema import Set >>> from zope.publisher.browser import TestRequest >>> class Context(object): ... somedates = set() >>> context = Context() >>> request = TestRequest() >>> field = Set(__name__='somedates') >>> field.set(context, set([datetime.date(2006, 12, 6), ... datetime.date(2006, 12, 7)])) >>> field = field.bind(context) >>> widget = DateSetWidget(field, object(), request) >>> print widget() # doctest: +REPORT_NDIFF >>> print widget.hidden() # doctest: +REPORT_NDIFF ==================== Datetime Widget Demo ==================== This demo packe provides a simple content class which uses the zc.datetimewidget >>> from zope.testbrowser.testing import Browser >>> browser = Browser() >>> browser.handleErrors = False >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw') >>> browser.open('http://localhost/@@contents.html') It can be added by clicking on the "Datetimewidget Demo" link in the add menu. And giving it a name. >>> link = browser.getLink('Datetimewidget Demo') >>> link.click() >>> nameCtrl = browser.getControl(name='new_value') >>> nameCtrl.value = 'mydemo' >>> applyCtrl = browser.getControl('Apply') >>> applyCtrl.click() >>> link = browser.getLink('mydemo') >>> link.click() >>> browser.url 'http://localhost/mydemo/@@edit.html' We can fill in the values >>> browser.getControl('Start Date').value = '2006-11-15' >>> browser.getControl('End Date').value = '2006-11-16' >>> browser.getControl('Start Datetime').value = '2006-11-15T07:49:31Z' >>> browser.getControl('End Datetime').value = '2006-11-16T19:46:00Z' >>> browser.getControl('Several dates').value = '2006-11-20 2006-11-21 2006-11-22' >>> browser.getControl('Change').click() And they will be saved: >>> 'Required input is missing' in browser.contents False >>> '2006-11-15' in browser.contents True >>> '2006-11-16' in browser.contents True >>> '07:49' in browser.contents True >>> '19:46' in browser.contents True >>> '2006-11-20 2006-11-21 2006-11-22' in browser.contents True If we do not fill some fields, we get missing value errors >>> browser.getControl('Start Date').value = '' >>> browser.getControl('Change').click() >>> 'Required input is missing' in browser.contents True Let's step back: >>> browser.getControl('Start Date').value = '2006-11-15' >>> browser.getControl('Change').click() >>> 'Required input is missing' in browser.contents False Now let's try not filling a date set field: >>> browser.getControl('Several dates').value = '' >>> browser.getControl('Change').click() >>> 'Required input is missing' in browser.contents True ======= CHANGES ======= 0.7.0 (2011-06-07) ------------------ - Fix tests using a newer zope.publisher that requires zope.login. - Fix tests by not using deprecated ``zope.app.securitypolicy`` - Remove test dependency ``zope.app.server`` and ``zope.app.authentication``. Use ``zope.password`` instead. - No longer using deprecated ``zope.testing.doctestunit``. Use python's build-in ``doctest`` instead. 0.6.4 (2009-10-20) ------------------ - Make Calendar pop-up and drag behavior more consistent across browser modes in IE. 0.6.3 (2009-08-24) ------------------ - Fixed handling of naive datetime objects, they no longer result in an exception but are displayed unchanged. When they get saved again they are saved with UTC timezone like all other ones. - Added `datetimewidget.txt` doctest to ``long_description`` to show up on pypi home page. - Fixed home page name in `setup.py`. - Added coverage analysis tools to buildout. - Removed deprecated zpkg and zcml slugs. 0.6.2 (2009-05-20) ------------------ - Using `++resource++` instead of `@@/` to load resources. - Renaming "lang" directory (``ZPublisher`` gets confused because of a view with the same name exists in ``zope.traversing.namespace``). See `gocept.datetimewidget`_ for more details on how to use zc.datetimewidget with zope2. .. _`gocept.datetimewidget` : http://pypi.python.org/pypi/gocept.datetimewidget 0.6.1 (2008-05-29) ------------------ - Unchanged from 0.5.2, but released with a new version number thanks to a package with an 0.6.1dev-rBFN revision found in the wild. 0.5.2 (2007-11-03) ------------------ - Improve package data. - Developed proper package dependencies. - Merged functional tests into ``tests.py``. 0.5.1 (2006-06-15) ------------------ - Include license and copyright headers. 0.5.0 (2006-05-24) ------------------ - Initial release. Keywords: zope3 date datetime widget javascript Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: Zope Public License Classifier: Programming Language :: Python Classifier: Natural Language :: English Classifier: Operating System :: OS Independent Classifier: Topic :: Internet :: WWW/HTTP Classifier: Framework :: Zope3 zc.datetimewidget-0.7.0/README.txt0000644000177100020040000000013611573441231017754 0ustar menesismenesis00000000000000There are two types of widgets provided by this package, a date widget and a datetime widget. zc.datetimewidget-0.7.0/setup.py0000644000177100020040000000554011573441231017774 0ustar menesismenesis00000000000000############################################################################## # # Copyright (c) 2007 Zope Foundation and Contributors. # All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.1 (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. # ############################################################################## """Setup for zc.datetimewidget package $Id$ """ import os from setuptools import setup, find_packages def read(*rnames): return open(os.path.join(os.path.dirname(__file__), *rnames)).read() setup(name='zc.datetimewidget', version='0.7.0', author='Zope Corporation and Contributors', author_email='zope-dev@zope.org', description='Javascript-based widgets for date and datetime fields.', long_description=( read('README.txt') + '\n\n.. contents::\n\n' + read('src', 'zc', 'datetimewidget', 'widgets.txt') + '\n\n' + read('src', 'zc', 'datetimewidget', 'datetimewidget.txt') + '\n\n' + read('src', 'zc', 'datetimewidget', 'demo', 'README.txt') + '\n\n' + read('CHANGES.txt') ), keywords="zope3 date datetime widget javascript", classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Web Environment', 'Intended Audience :: Developers', 'License :: OSI Approved :: Zope Public License', 'Programming Language :: Python', 'Natural Language :: English', 'Operating System :: OS Independent', 'Topic :: Internet :: WWW/HTTP', 'Framework :: Zope3'], url='http://pypi.python.org/pypi/zc.datetimewidget', license='ZPL 2.1', packages=find_packages('src'), package_dir={'': 'src'}, namespace_packages=['zc'], extras_require=dict( test=['zope.app.zcmlfiles', 'zope.app.testing', 'zope.container', 'zope.login', 'zope.password', 'zope.securitypolicy', 'zope.testbrowser', ]), install_requires=['pytz', 'setuptools', 'zc.i18n', 'zc.resourcelibrary', 'zope.app.form', 'zope.component', 'zope.datetime', 'zope.interface', 'zope.publisher>=3.12', 'zope.schema', ], include_package_data=True, zip_safe=False, ) zc.datetimewidget-0.7.0/COPYRIGHT.txt0000644000177100020040000000004011573441231020361 0ustar menesismenesis00000000000000Zope Foundation and Contributorszc.datetimewidget-0.7.0/LICENSE.txt0000644000177100020040000000402611573441231020103 0ustar menesismenesis00000000000000Zope Public License (ZPL) Version 2.1 A copyright notice accompanies this license document that identifies the copyright holders. 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 accompanying copyright notice, this list of conditions, and the following disclaimer. 2. Redistributions in binary form must reproduce the accompanying copyright notice, this list of conditions, and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Names of the copyright holders must not be used to endorse or promote products derived from this software without prior written permission from the copyright holders. 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 the copyright holders. Use of them is covered by separate agreement with the copyright holders. 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 THE COPYRIGHT HOLDERS ``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 THE COPYRIGHT HOLDERS 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. zc.datetimewidget-0.7.0/bootstrap.py0000644000177100020040000000337211573441231020652 0ustar menesismenesis00000000000000############################################################################## # # Copyright (c) 2006 Zope Foundation and Contributors. # All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.1 (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. # ############################################################################## """Bootstrap a buildout-based project Simply run this script in a directory containing a buildout.cfg. The script accepts buildout command-line options, so you can use the -c option to specify an alternate configuration file. $Id: bootstrap.py 120723 2011-03-03 07:43:05Z icemac $ """ import os, shutil, sys, tempfile, urllib2 tmpeggs = tempfile.mkdtemp() ez = {} exec urllib2.urlopen('http://peak.telecommunity.com/dist/ez_setup.py' ).read() in ez ez['use_setuptools'](to_dir=tmpeggs, download_delay=0) import pkg_resources cmd = 'from setuptools.command.easy_install import main; main()' if sys.platform == 'win32': cmd = '"%s"' % cmd # work around spawn lamosity on windows ws = pkg_resources.working_set assert os.spawnle( os.P_WAIT, sys.executable, sys.executable, '-c', cmd, '-mqNxd', tmpeggs, 'zc.buildout', dict(os.environ, PYTHONPATH= ws.find(pkg_resources.Requirement.parse('setuptools')).location ), ) == 0 ws.add_entry(tmpeggs) ws.require('zc.buildout') import zc.buildout.buildout zc.buildout.buildout.main(sys.argv[1:] + ['bootstrap']) shutil.rmtree(tmpeggs) zc.datetimewidget-0.7.0/setup.cfg0000644000177100020040000000007311573441236020104 0ustar menesismenesis00000000000000[egg_info] tag_build = tag_date = 0 tag_svn_revision = 0 zc.datetimewidget-0.7.0/src/0000755000177100020040000000000011573441236017052 5ustar menesismenesis00000000000000zc.datetimewidget-0.7.0/src/zc/0000755000177100020040000000000011573441236017466 5ustar menesismenesis00000000000000zc.datetimewidget-0.7.0/src/zc/__init__.py0000644000177100020040000000007011573441231021567 0ustar menesismenesis00000000000000__import__('pkg_resources').declare_namespace(__name__) zc.datetimewidget-0.7.0/src/zc/datetimewidget/0000755000177100020040000000000011573441236022466 5ustar menesismenesis00000000000000zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/0000755000177100020040000000000011573441236024500 5ustar menesismenesis00000000000000zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/calendar-green.css0000644000177100020040000001130311573441231030052 0ustar menesismenesis00000000000000/* The main calendar widget. DIV containing a table. */ div.calendar { position: relative; } .calendar, .calendar table { border: 1px solid #565; font-size: 11px; color: #000; cursor: default; background: #efe; font-family: tahoma,verdana,sans-serif; } /* Header part -- contains navigation buttons and day names. */ .calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ text-align: center; /* They are the navigation buttons */ padding: 2px; /* Make the buttons seem like they're pressing */ background: #676; color: #fff; font-size: 90%; } .calendar .nav { background: #676 url(/@@/zc.datetimewidget/menuarrow.gif) no-repeat 100% 100%; } .calendar thead .title { /* This holds the current "month, year" */ font-weight: bold; /* Pressing it will take you to the current date */ text-align: center; padding: 2px; background: #250; color: #efa; } .calendar thead .headrow { /* Row containing navigation buttons */ } .calendar thead .name { /* Cells containing the day names */ border-bottom: 1px solid #565; padding: 2px; text-align: center; color: #000; } .calendar thead .weekend { /* How a weekend day name shows in header */ color: #a66; } .calendar thead .hilite { /* How do the buttons in header appear when hover */ background-color: #afa; color: #000; border: 1px solid #084; padding: 1px; } .calendar thead .active { /* Active (pressed) buttons in header */ background-color: #7c7; padding: 2px 0px 0px 2px; } .calendar thead .daynames { /* Row containing the day names */ background: #dfb; } /* The body part -- contains all the days in month. */ .calendar tbody .day { /* Cells containing month days dates */ width: 2em; color: #564; text-align: right; padding: 2px 4px 2px 2px; } .calendar tbody .day.othermonth { font-size: 80%; color: #bbb; } .calendar tbody .day.othermonth.oweekend { color: #fbb; } .calendar table .wn { padding: 2px 3px 2px 2px; border-right: 1px solid #8a8; background: #dfb; } .calendar tbody .rowhilite td { background: #dfd; } .calendar tbody .rowhilite td.wn { background: #efe; } .calendar tbody td.hilite { /* Hovered cells */ background: #efd; padding: 1px 3px 1px 1px; border: 1px solid #bbb; } .calendar tbody td.active { /* Active (pressed) cells */ background: #dec; padding: 2px 2px 0px 2px; } .calendar tbody td.selected { /* Cell showing today date */ font-weight: bold; border: 1px solid #000; padding: 1px 3px 1px 1px; background: #f8fff8; color: #000; } .calendar tbody td.weekend { /* Cells showing weekend days */ color: #a66; } .calendar tbody td.today { font-weight: bold; color: #0a0; } .calendar tbody .disabled { color: #999; } .calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ visibility: hidden; } .calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ display: none; } /* The footer part -- status bar and "Close" button */ .calendar tfoot .footrow { /* The in footer (only one right now) */ text-align: center; background: #565; color: #fff; } .calendar tfoot .ttip { /* Tooltip (status bar) cell */ padding: 2px; background: #250; color: #efa; } .calendar tfoot .hilite { /* Hover style for buttons in footer */ background: #afa; border: 1px solid #084; color: #000; padding: 1px; } .calendar tfoot .active { /* Active (pressed) style for buttons in footer */ background: #7c7; padding: 2px 0px 0px 2px; } /* Combo boxes (menus that display months/years for direct selection) */ .calendar .combo { position: absolute; display: none; top: 0px; left: 0px; width: 4em; cursor: default; border: 1px solid #565; background: #efd; color: #000; font-size: 90%; z-index: 100; } .calendar .combo .label, .calendar .combo .label-IEfix { text-align: center; padding: 1px; } .calendar .combo .label-IEfix { width: 4em; } .calendar .combo .hilite { background: #af8; } .calendar .combo .active { border-top: 1px solid #6a4; border-bottom: 1px solid #6a4; background: #efe; font-weight: bold; } .calendar td.time { border-top: 1px solid #8a8; padding: 1px 0px; text-align: center; background-color: #dfb; } .calendar td.time .hour, .calendar td.time .minute, .calendar td.time .ampm { padding: 0px 3px 0px 4px; border: 1px solid #898; font-weight: bold; background-color: #fff; } .calendar td.time .ampm { text-align: center; } .calendar td.time .colon { padding: 0px 2px 0px 3px; font-weight: bold; } .calendar td.time span.hilite { border-color: #000; background-color: #686; color: #fff; } .calendar td.time span.active { border-color: #f00; background-color: #000; color: #0f0; } zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/calendar-blue2.css0000644000177100020040000001164411573441231027773 0ustar menesismenesis00000000000000/* The main calendar widget. DIV containing a table. */ div.calendar { position: relative; } .calendar, .calendar table { border: 1px solid #206A9B; font-size: 11px; color: #000; cursor: default; background: #F1F8FC; font-family: tahoma,verdana,sans-serif; } /* Header part -- contains navigation buttons and day names. */ .calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ text-align: center; /* They are the navigation buttons */ padding: 2px; /* Make the buttons seem like they're pressing */ } .calendar .nav { background: #007ED1 url(/@@/zc.datetimewidget/menuarrow2.gif) no-repeat 100% 100%; } .calendar thead .title { /* This holds the current "month, year" */ font-weight: bold; /* Pressing it will take you to the current date */ text-align: center; background: #000; color: #fff; padding: 2px; } .calendar thead tr { /* Row containing navigation buttons */ background: #007ED1; color: #fff; } .calendar thead .daynames { /* Row containing the day names */ background: #C7E1F3; } .calendar thead .name { /* Cells containing the day names */ border-bottom: 1px solid #206A9B; padding: 2px; text-align: center; color: #000; } .calendar thead .weekend { /* How a weekend day name shows in header */ color: #a66; } .calendar thead .hilite { /* How do the buttons in header appear when hover */ background-color: #34ABFA; color: #000; border: 1px solid #016DC5; padding: 1px; } .calendar thead .active { /* Active (pressed) buttons in header */ background-color: #006AA9; border: 1px solid #008AFF; padding: 2px 0px 0px 2px; } /* The body part -- contains all the days in month. */ .calendar tbody .day { /* Cells containing month days dates */ width: 2em; color: #456; text-align: right; padding: 2px 4px 2px 2px; } .calendar tbody .day.othermonth { font-size: 80%; color: #bbb; } .calendar tbody .day.othermonth.oweekend { color: #fbb; } .calendar table .wn { padding: 2px 3px 2px 2px; border-right: 1px solid #000; background: #C7E1F3; } .calendar tbody .rowhilite td { background: #def; } .calendar tbody .rowhilite td.wn { background: #F1F8FC; } .calendar tbody td.hilite { /* Hovered cells */ background: #def; padding: 1px 3px 1px 1px; border: 1px solid #8FC4E8; } .calendar tbody td.active { /* Active (pressed) cells */ background: #cde; padding: 2px 2px 0px 2px; } .calendar tbody td.selected { /* Cell showing today date */ font-weight: bold; border: 1px solid #000; padding: 1px 3px 1px 1px; background: #fff; color: #000; } .calendar tbody td.weekend { /* Cells showing weekend days */ color: #a66; } .calendar tbody td.today { /* Cell showing selected date */ font-weight: bold; color: #D50000; } .calendar tbody .disabled { color: #999; } .calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ visibility: hidden; } .calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ display: none; } /* The footer part -- status bar and "Close" button */ .calendar tfoot .footrow { /* The in footer (only one right now) */ text-align: center; background: #206A9B; color: #fff; } .calendar tfoot .ttip { /* Tooltip (status bar) cell */ background: #000; color: #fff; border-top: 1px solid #206A9B; padding: 1px; } .calendar tfoot .hilite { /* Hover style for buttons in footer */ background: #B8DAF0; border: 1px solid #178AEB; color: #000; padding: 1px; } .calendar tfoot .active { /* Active (pressed) style for buttons in footer */ background: #006AA9; padding: 2px 0px 0px 2px; } /* Combo boxes (menus that display months/years for direct selection) */ .calendar .combo { position: absolute; display: none; top: 0px; left: 0px; width: 4em; cursor: default; border: 1px solid #655; background: #def; color: #000; font-size: 90%; z-index: 100; } .calendar .combo .label, .calendar .combo .label-IEfix { text-align: center; padding: 1px; } .calendar .combo .label-IEfix { width: 4em; } .calendar .combo .hilite { background: #34ABFA; border-top: 1px solid #46a; border-bottom: 1px solid #46a; font-weight: bold; } .calendar .combo .active { border-top: 1px solid #46a; border-bottom: 1px solid #46a; background: #F1F8FC; font-weight: bold; } .calendar td.time { border-top: 1px solid #000; padding: 1px 0px; text-align: center; background-color: #E3F0F9; } .calendar td.time .hour, .calendar td.time .minute, .calendar td.time .ampm { padding: 0px 3px 0px 4px; border: 1px solid #889; font-weight: bold; background-color: #F1F8FC; } .calendar td.time .ampm { text-align: center; } .calendar td.time .colon { padding: 0px 2px 0px 3px; font-weight: bold; } .calendar td.time span.hilite { border-color: #000; background-color: #267DB7; color: #fff; } .calendar td.time span.active { border-color: red; background-color: #000; color: #A5FF00; } zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/menuarrow2.gif0000644000177100020040000000006111573441231027260 0ustar menesismenesis00000000000000GIF89a€BBBÿÿÿ!ù,„yÉÀc;zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/calendar-win2k-1.css0000644000177100020040000001357011573441231030152 0ustar menesismenesis00000000000000/* The main calendar widget. DIV containing a table. */ .calendar { position: relative; display: none; border-top: 2px solid #fff; border-right: 2px solid #000; border-bottom: 2px solid #000; border-left: 2px solid #fff; font-size: 11px; color: #000; cursor: default; background: #d4d0c8; font-family: tahoma,verdana,sans-serif; } .calendar table { border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; font-size: 11px; color: #000; cursor: default; background: #d4d0c8; font-family: tahoma,verdana,sans-serif; } /* Header part -- contains navigation buttons and day names. */ .calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ text-align: center; padding: 1px; border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; } .calendar .nav { background: transparent url(/@@/zc.datetimewidget/menuarrow.gif) no-repeat 100% 100%; } .calendar thead .title { /* This holds the current "month, year" */ font-weight: bold; padding: 1px; border: 1px solid #000; background: #848078; color: #fff; text-align: center; } .calendar thead .headrow { /* Row containing navigation buttons */ } .calendar thead .daynames { /* Row containing the day names */ } .calendar thead .name { /* Cells containing the day names */ border-bottom: 1px solid #000; padding: 2px; text-align: center; background: #f4f0e8; } .calendar thead .weekend { /* How a weekend day name shows in header */ color: #f00; } .calendar thead .hilite { /* How do the buttons in header appear when hover */ border-top: 2px solid #fff; border-right: 2px solid #000; border-bottom: 2px solid #000; border-left: 2px solid #fff; padding: 0px; background-color: #e4e0d8; } .calendar thead .active { /* Active (pressed) buttons in header */ padding: 2px 0px 0px 2px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; background-color: #c4c0b8; } /* The body part -- contains all the days in month. */ .calendar tbody .day { /* Cells containing month days dates */ width: 2em; text-align: right; padding: 2px 4px 2px 2px; } .calendar tbody .day.othermonth { font-size: 80%; color: #aaa; } .calendar tbody .day.othermonth.oweekend { color: #faa; } .calendar table .wn { padding: 2px 3px 2px 2px; border-right: 1px solid #000; background: #f4f0e8; } .calendar tbody .rowhilite td { background: #e4e0d8; } .calendar tbody .rowhilite td.wn { background: #d4d0c8; } .calendar tbody td.hilite { /* Hovered cells */ padding: 1px 3px 1px 1px; border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; } .calendar tbody td.active { /* Active (pressed) cells */ padding: 2px 2px 0px 2px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; } .calendar tbody td.selected { /* Cell showing selected date */ font-weight: bold; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; padding: 2px 2px 0px 2px; background: #e4e0d8; } .calendar tbody td.weekend { /* Cells showing weekend days */ color: #f00; } .calendar tbody td.today { /* Cell showing today date */ font-weight: bold; color: #00f; } .calendar tbody .disabled { color: #999; } .calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ visibility: hidden; } .calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ display: none; } /* The footer part -- status bar and "Close" button */ .calendar tfoot .footrow { /* The in footer (only one right now) */ } .calendar tfoot .ttip { /* Tooltip (status bar) cell */ background: #f4f0e8; padding: 1px; border: 1px solid #000; background: #848078; color: #fff; text-align: center; } .calendar tfoot .hilite { /* Hover style for buttons in footer */ border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; padding: 1px; background: #e4e0d8; } .calendar tfoot .active { /* Active (pressed) style for buttons in footer */ padding: 2px 0px 0px 2px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; } /* Combo boxes (menus that display months/years for direct selection) */ .calendar .combo { position: absolute; display: none; width: 4em; top: 0px; left: 0px; cursor: default; border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; background: #e4e0d8; font-size: 90%; padding: 1px; z-index: 100; } .calendar .combo .label, .calendar .combo .label-IEfix { text-align: center; padding: 1px; } .calendar .combo .label-IEfix { width: 4em; } .calendar .combo .active { background: #c4c0b8; padding: 0px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; } .calendar .combo .hilite { background: #048; color: #fea; } .calendar td.time { border-top: 1px solid #000; padding: 1px 0px; text-align: center; background-color: #f4f0e8; } .calendar td.time .hour, .calendar td.time .minute, .calendar td.time .ampm { padding: 0px 3px 0px 4px; border: 1px solid #889; font-weight: bold; background-color: #fff; } .calendar td.time .ampm { text-align: center; } .calendar td.time .colon { padding: 0px 2px 0px 3px; font-weight: bold; } .calendar td.time span.hilite { border-color: #000; background-color: #766; color: #fff; } .calendar td.time span.active { border-color: #f00; background-color: #000; color: #0f0; } zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/calendar-win2k-2.css0000644000177100020040000001357011573441231030153 0ustar menesismenesis00000000000000/* The main calendar widget. DIV containing a table. */ .calendar { position: relative; display: none; border-top: 2px solid #fff; border-right: 2px solid #000; border-bottom: 2px solid #000; border-left: 2px solid #fff; font-size: 11px; color: #000; cursor: default; background: #d4c8d0; font-family: tahoma,verdana,sans-serif; } .calendar table { border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; font-size: 11px; color: #000; cursor: default; background: #d4c8d0; font-family: tahoma,verdana,sans-serif; } /* Header part -- contains navigation buttons and day names. */ .calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ text-align: center; padding: 1px; border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; } .calendar .nav { background: transparent url(/@@/zc.datetimewidget/menuarrow.gif) no-repeat 100% 100%; } .calendar thead .title { /* This holds the current "month, year" */ font-weight: bold; padding: 1px; border: 1px solid #000; background: #847880; color: #fff; text-align: center; } .calendar thead .headrow { /* Row containing navigation buttons */ } .calendar thead .daynames { /* Row containing the day names */ } .calendar thead .name { /* Cells containing the day names */ border-bottom: 1px solid #000; padding: 2px; text-align: center; background: #f4e8f0; } .calendar thead .weekend { /* How a weekend day name shows in header */ color: #f00; } .calendar thead .hilite { /* How do the buttons in header appear when hover */ border-top: 2px solid #fff; border-right: 2px solid #000; border-bottom: 2px solid #000; border-left: 2px solid #fff; padding: 0px; background-color: #e4d8e0; } .calendar thead .active { /* Active (pressed) buttons in header */ padding: 2px 0px 0px 2px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; background-color: #c4b8c0; } /* The body part -- contains all the days in month. */ .calendar tbody .day { /* Cells containing month days dates */ width: 2em; text-align: right; padding: 2px 4px 2px 2px; } .calendar tbody .day.othermonth { font-size: 80%; color: #aaa; } .calendar tbody .day.othermonth.oweekend { color: #faa; } .calendar table .wn { padding: 2px 3px 2px 2px; border-right: 1px solid #000; background: #f4e8f0; } .calendar tbody .rowhilite td { background: #e4d8e0; } .calendar tbody .rowhilite td.wn { background: #d4c8d0; } .calendar tbody td.hilite { /* Hovered cells */ padding: 1px 3px 1px 1px; border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; } .calendar tbody td.active { /* Active (pressed) cells */ padding: 2px 2px 0px 2px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; } .calendar tbody td.selected { /* Cell showing selected date */ font-weight: bold; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; padding: 2px 2px 0px 2px; background: #e4d8e0; } .calendar tbody td.weekend { /* Cells showing weekend days */ color: #f00; } .calendar tbody td.today { /* Cell showing today date */ font-weight: bold; color: #00f; } .calendar tbody .disabled { color: #999; } .calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ visibility: hidden; } .calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ display: none; } /* The footer part -- status bar and "Close" button */ .calendar tfoot .footrow { /* The in footer (only one right now) */ } .calendar tfoot .ttip { /* Tooltip (status bar) cell */ background: #f4e8f0; padding: 1px; border: 1px solid #000; background: #847880; color: #fff; text-align: center; } .calendar tfoot .hilite { /* Hover style for buttons in footer */ border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; padding: 1px; background: #e4d8e0; } .calendar tfoot .active { /* Active (pressed) style for buttons in footer */ padding: 2px 0px 0px 2px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; } /* Combo boxes (menus that display months/years for direct selection) */ .calendar .combo { position: absolute; display: none; width: 4em; top: 0px; left: 0px; cursor: default; border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; background: #e4d8e0; font-size: 90%; padding: 1px; z-index: 100; } .calendar .combo .label, .calendar .combo .label-IEfix { text-align: center; padding: 1px; } .calendar .combo .label-IEfix { width: 4em; } .calendar .combo .active { background: #d4c8d0; padding: 0px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; } .calendar .combo .hilite { background: #408; color: #fea; } .calendar td.time { border-top: 1px solid #000; padding: 1px 0px; text-align: center; background-color: #f4f0e8; } .calendar td.time .hour, .calendar td.time .minute, .calendar td.time .ampm { padding: 0px 3px 0px 4px; border: 1px solid #889; font-weight: bold; background-color: #fff; } .calendar td.time .ampm { text-align: center; } .calendar td.time .colon { padding: 0px 2px 0px 3px; font-weight: bold; } .calendar td.time span.hilite { border-color: #000; background-color: #766; color: #fff; } .calendar td.time span.active { border-color: #f00; background-color: #000; color: #0f0; } zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/calendar-brown.css0000644000177100020040000001120211573441231030077 0ustar menesismenesis00000000000000/* The main calendar widget. DIV containing a table. */ div.calendar { position: relative; } .calendar, .calendar table { border: 1px solid #655; font-size: 11px; color: #000; cursor: default; background: #ffd; font-family: tahoma,verdana,sans-serif; } /* Header part -- contains navigation buttons and day names. */ .calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ text-align: center; /* They are the navigation buttons */ padding: 2px; /* Make the buttons seem like they're pressing */ } .calendar .nav { background: #edc url(/@@/zc.datetimewidget/menuarrow.gif) no-repeat 100% 100%; } .calendar thead .title { /* This holds the current "month, year" */ font-weight: bold; /* Pressing it will take you to the current date */ text-align: center; background: #654; color: #fed; padding: 2px; } .calendar thead .headrow { /* Row containing navigation buttons */ background: #edc; color: #000; } .calendar thead .name { /* Cells containing the day names */ border-bottom: 1px solid #655; padding: 2px; text-align: center; color: #000; } .calendar thead .weekend { /* How a weekend day name shows in header */ color: #f00; } .calendar thead .hilite { /* How do the buttons in header appear when hover */ background-color: #faa; color: #000; border: 1px solid #f40; padding: 1px; } .calendar thead .active { /* Active (pressed) buttons in header */ background-color: #c77; padding: 2px 0px 0px 2px; } .calendar thead .daynames { /* Row containing the day names */ background: #fed; } /* The body part -- contains all the days in month. */ .calendar tbody .day { /* Cells containing month days dates */ width: 2em; text-align: right; padding: 2px 4px 2px 2px; } .calendar tbody .day.othermonth { font-size: 80%; color: #bbb; } .calendar tbody .day.othermonth.oweekend { color: #fbb; } .calendar table .wn { padding: 2px 3px 2px 2px; border-right: 1px solid #000; background: #fed; } .calendar tbody .rowhilite td { background: #ddf; } .calendar tbody .rowhilite td.wn { background: #efe; } .calendar tbody td.hilite { /* Hovered cells */ background: #ffe; padding: 1px 3px 1px 1px; border: 1px solid #bbb; } .calendar tbody td.active { /* Active (pressed) cells */ background: #ddc; padding: 2px 2px 0px 2px; } .calendar tbody td.selected { /* Cell showing today date */ font-weight: bold; border: 1px solid #000; padding: 1px 3px 1px 1px; background: #fea; } .calendar tbody td.weekend { /* Cells showing weekend days */ color: #f00; } .calendar tbody td.today { font-weight: bold; } .calendar tbody .disabled { color: #999; } .calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ visibility: hidden; } .calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ display: none; } /* The footer part -- status bar and "Close" button */ .calendar tfoot .footrow { /* The in footer (only one right now) */ text-align: center; background: #988; color: #000; } .calendar tfoot .ttip { /* Tooltip (status bar) cell */ border-top: 1px solid #655; background: #dcb; color: #840; } .calendar tfoot .hilite { /* Hover style for buttons in footer */ background: #faa; border: 1px solid #f40; padding: 1px; } .calendar tfoot .active { /* Active (pressed) style for buttons in footer */ background: #c77; padding: 2px 0px 0px 2px; } /* Combo boxes (menus that display months/years for direct selection) */ .calendar .combo { position: absolute; display: none; top: 0px; left: 0px; width: 4em; cursor: default; border: 1px solid #655; background: #ffe; color: #000; font-size: 90%; z-index: 100; } .calendar .combo .label, .calendar .combo .label-IEfix { text-align: center; padding: 1px; } .calendar .combo .label-IEfix { width: 4em; } .calendar .combo .hilite { background: #fc8; } .calendar .combo .active { border-top: 1px solid #a64; border-bottom: 1px solid #a64; background: #fee; font-weight: bold; } .calendar td.time { border-top: 1px solid #a88; padding: 1px 0px; text-align: center; background-color: #fed; } .calendar td.time .hour, .calendar td.time .minute, .calendar td.time .ampm { padding: 0px 3px 0px 4px; border: 1px solid #988; font-weight: bold; background-color: #fff; } .calendar td.time .ampm { text-align: center; } .calendar td.time .colon { padding: 0px 2px 0px 3px; font-weight: bold; } .calendar td.time span.hilite { border-color: #000; background-color: #866; color: #fff; } .calendar td.time span.active { border-color: #f00; background-color: #000; color: #0f0; } zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/calendar-tas.css0000644000177100020040000001232311573441231027544 0ustar menesismenesis00000000000000/* The main calendar widget. DIV containing a table. */ div.calendar { position: relative; } .calendar, .calendar table { border: 1px solid #655; font-size: 11px; color: #000; cursor: default; background: #ffd; font-family: tahoma,verdana,sans-serif; filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#DDDCCC,EndColorStr=#FFFFFF); } /* Header part -- contains navigation buttons and day names. */ .calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ text-align: center; /* They are the navigation buttons */ padding: 2px; /* Make the buttons seem like they're pressing */ color:#363636; } .calendar .nav { background: #edc url(/@@/zc.datetimewidget/menuarrow.gif) no-repeat 100% 100%; } .calendar thead .title { /* This holds the current "month, year" */ font-weight: bold; /* Pressing it will take you to the current date */ text-align: center; background: #654; color: #363636; padding: 2px; filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff,EndColorStr=#dddccc); } .calendar thead .headrow { /* Row containing navigation buttons */ /*background: #3B86A0;*/ color: #363636; font-weight: bold; filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#ffffff,EndColorStr=#3b86a0); } .calendar thead .name { /* Cells containing the day names */ border-bottom: 1px solid #655; padding: 2px; text-align: center; color: #363636; filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#DDDCCC,EndColorStr=#FFFFFF); } .calendar thead .weekend { /* How a weekend day name shows in header */ color: #f00; } .calendar thead .hilite { /* How do the buttons in header appear when hover */ background-color: #ffcc86; color: #000; border: 1px solid #b59345; padding: 1px; } .calendar thead .active { /* Active (pressed) buttons in header */ background-color: #c77; padding: 2px 0px 0px 2px; } .calendar thead .daynames { /* Row containing the day names */ background: #fed; } /* The body part -- contains all the days in month. */ .calendar tbody .day { /* Cells containing month days dates */ width: 2em; text-align: right; padding: 2px 4px 2px 2px; } .calendar tbody .day.othermonth { font-size: 80%; color: #aaa; } .calendar tbody .day.othermonth.oweekend { color: #faa; } .calendar table .wn { padding: 2px 3px 2px 2px; border-right: 1px solid #000; background: #fed; } .calendar tbody .rowhilite td { background: #ddf; } .calendar tbody .rowhilite td.wn { background: #efe; } .calendar tbody td.hilite { /* Hovered cells */ background: #ffe; padding: 1px 3px 1px 1px; border: 1px solid #bbb; } .calendar tbody td.active { /* Active (pressed) cells */ background: #ddc; padding: 2px 2px 0px 2px; } .calendar tbody td.selected { /* Cell showing today date */ font-weight: bold; border: 1px solid #000; padding: 1px 3px 1px 1px; background: #fea; } .calendar tbody td.weekend { /* Cells showing weekend days */ color: #f00; } .calendar tbody td.today { font-weight: bold; } .calendar tbody .disabled { color: #999; } .calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ visibility: hidden; } .calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ display: none; } /* The footer part -- status bar and "Close" button */ .calendar tfoot .footrow { /* The in footer (only one right now) */ text-align: center; background: #988; color: #000; } .calendar tfoot .ttip { /* Tooltip (status bar) cell */ border-top: 1px solid #655; background: #dcb; color: #363636; font-weight: bold; filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=#FFFFFF,EndColorStr=#DDDCCC); } .calendar tfoot .hilite { /* Hover style for buttons in footer */ background: #faa; border: 1px solid #f40; padding: 1px; } .calendar tfoot .active { /* Active (pressed) style for buttons in footer */ background: #c77; padding: 2px 0px 0px 2px; } /* Combo boxes (menus that display months/years for direct selection) */ .combo { position: absolute; display: none; top: 0px; left: 0px; width: 4em; cursor: default; border: 1px solid #655; background: #ffe; color: #000; font-size: smaller; z-index: 100; } .combo .label, .combo .label-IEfix { text-align: center; padding: 1px; } .combo .label-IEfix { width: 4em; } .combo .hilite { background: #fc8; } .combo .active { border-top: 1px solid #a64; border-bottom: 1px solid #a64; background: #fee; font-weight: bold; } .calendar td.time { border-top: 1px solid #a88; padding: 1px 0px; text-align: center; background-color: #fed; } .calendar td.time .hour, .calendar td.time .minute, .calendar td.time .ampm { padding: 0px 3px 0px 4px; border: 1px solid #988; font-weight: bold; background-color: #fff; } .calendar td.time .ampm { text-align: center; } .calendar td.time .colon { padding: 0px 2px 0px 3px; font-weight: bold; } .calendar td.time span.hilite { border-color: #000; background-color: #866; color: #fff; } .calendar td.time span.active { border-color: #f00; background-color: #000; color: #0f0; } zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/datetimewidget.js0000644000177100020040000000340211573441231030030 0ustar menesismenesis00000000000000var dtwLanguageLoaded = false; function dateTimeWidgetLoadLanguageFile(url){ // this method loads a languagefile for the datetimewidget // TODO: move this functionality into zc.resourcelibrary if (dtwLanguageLoaded==true){ return; } var script = document.createElement('script'); script.type = 'text/javascript'; script.src = url; document.getElementsByTagName('head')[0].appendChild(script); dtwLanguageLoaded = true; } function dateSelected(cal, date) { cal.sel.value = date; // just update the date in the input field. if (cal.dateClicked && !cal.multiple) // if we add this call we close the calendar on single-click. // just to exemplify both cases, we are using this only for the 1st // and the 3rd field, while 2nd and 4th will still require double-click. cal.callCloseHandler(); } function getMultipleDateClosedHandler(input_id, MA) { return function(cal) { var el = document.getElementById(input_id); // reset initial content. el.value = ""; MA.length = 0; // sort dates in ascending order var date_keys = new Array(); for (var i in cal.multiple) date_keys.push(i); date_keys.sort() // walk the calendar's multiple dates selection hash for (var j in date_keys) { i = date_keys[j]; var d = cal.multiple[i]; if (d) { el.value += d.print("%Y-%m-%d "); MA[MA.length] = d; } } cal.hide(); return true; } } function enabledWeekdays(enabled_weekdays) { return function(date) { // Return true if the selected day should be disabled. weekday = date.getDay(); for (var enabled_wd in enabled_weekdays) { if (weekday == enabled_weekdays[enabled_wd]) return false; } return true; } } zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/calendar.js0000644000177100020040000014100511573441231026603 0ustar menesismenesis00000000000000/* Copyright Mihai Bazon, 2002-2005 | www.bazon.net/mishoo * ----------------------------------------------------------- * * The DHTML Calendar, version 1.0 "It is happening again" * * Details and latest version at: * www.dynarch.com/projects/calendar * * This script is developed by Dynarch.com. Visit us at www.dynarch.com. * * This script is distributed under the GNU Lesser General Public License. * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html */ // $Id: calendar.js,v 1.51 2005/03/07 16:44:31 mishoo Exp $ /** The Calendar object constructor. */ Calendar = function (firstDayOfWeek, dateStr, onSelected, onClose) { // member variables this.activeDiv = null; this.currentDateEl = null; this.getDateStatus = null; this.getDateToolTip = null; this.getDateText = null; this.timeout = null; this.onSelected = onSelected || null; this.onClose = onClose || null; this.dragging = false; this.hidden = false; this.minYear = 1970; this.maxYear = 2050; this.dateFormat = Calendar._TT["DEF_DATE_FORMAT"]; this.ttDateFormat = Calendar._TT["TT_DATE_FORMAT"]; this.isPopup = true; this.weekNumbers = true; this.firstDayOfWeek = typeof firstDayOfWeek == "number" ? firstDayOfWeek : Calendar._FD; // 0 for Sunday, 1 for Monday, etc. this.showsOtherMonths = false; this.dateStr = dateStr; this.ar_days = null; this.showsTime = false; this.time24 = true; this.yearStep = 2; this.hiliteToday = true; this.multiple = null; // HTML elements this.table = null; this.element = null; this.tbody = null; this.firstdayname = null; // Combo boxes this.monthsCombo = null; this.yearsCombo = null; this.hilitedMonth = null; this.activeMonth = null; this.hilitedYear = null; this.activeYear = null; // Information this.dateClicked = false; // one-time initializations if (typeof Calendar._SDN == "undefined") { // table of short day names if (typeof Calendar._SDN_len == "undefined") Calendar._SDN_len = 3; var ar = new Array(); for (var i = 8; i > 0;) { ar[--i] = Calendar._DN[i].substr(0, Calendar._SDN_len); } Calendar._SDN = ar; // table of short month names if (typeof Calendar._SMN_len == "undefined") Calendar._SMN_len = 3; ar = new Array(); for (var i = 12; i > 0;) { ar[--i] = Calendar._MN[i].substr(0, Calendar._SMN_len); } Calendar._SMN = ar; } }; // ** constants /// "static", needed for event handlers. Calendar._C = null; /// detect a special case of "web browser" Calendar.is_ie = ( /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent) ); Calendar.is_ie5 = ( Calendar.is_ie && /msie 5\.0/i.test(navigator.userAgent) ); /// detect Opera browser Calendar.is_opera = /opera/i.test(navigator.userAgent); /// detect KHTML-based browsers Calendar.is_khtml = /Konqueror|Safari|KHTML/i.test(navigator.userAgent); // BEGIN: UTILITY FUNCTIONS; beware that these might be moved into a separate // library, at some point. Calendar.getAbsolutePos = function(el) { var SL = 0, ST = 0; var is_div = /^div$/i.test(el.tagName); if (is_div && el.scrollLeft) SL = el.scrollLeft; if (is_div && el.scrollTop) ST = el.scrollTop; var r = { x: el.offsetLeft - SL, y: el.offsetTop - ST }; if (el.offsetParent) { var tmp = this.getAbsolutePos(el.offsetParent); r.x += tmp.x; r.y += tmp.y; } return r; }; Calendar.isRelated = function (el, evt) { var related = evt.relatedTarget; if (!related) { var type = evt.type; if (type == "mouseover") { related = evt.fromElement; } else if (type == "mouseout") { related = evt.toElement; } } while (related) { if (related == el) { return true; } related = related.parentNode; } return false; }; Calendar.removeClass = function(el, className) { if (!(el && el.className)) { return; } var cls = el.className.split(" "); var ar = new Array(); for (var i = cls.length; i > 0;) { if (cls[--i] != className) { ar[ar.length] = cls[i]; } } el.className = ar.join(" "); }; Calendar.addClass = function(el, className) { Calendar.removeClass(el, className); el.className += " " + className; }; // FIXME: the following 2 functions totally suck, are useless and should be replaced immediately. Calendar.getElement = function(ev) { var f = Calendar.is_ie ? window.event.srcElement : ev.currentTarget; while (f.nodeType != 1 || /^div$/i.test(f.tagName)) f = f.parentNode; return f; }; Calendar.getTargetElement = function(ev) { var f = Calendar.is_ie ? window.event.srcElement : ev.target; while (f.nodeType != 1) f = f.parentNode; return f; }; Calendar.stopEvent = function(ev) { ev || (ev = window.event); if (Calendar.is_ie) { ev.cancelBubble = true; ev.returnValue = false; } else { ev.preventDefault(); ev.stopPropagation(); } return false; }; Calendar.addEvent = function(el, evname, func) { if (el.attachEvent) { // IE el.attachEvent("on" + evname, func); } else if (el.addEventListener) { // Gecko / W3C el.addEventListener(evname, func, true); } else { el["on" + evname] = func; } }; Calendar.removeEvent = function(el, evname, func) { if (el.detachEvent) { // IE el.detachEvent("on" + evname, func); } else if (el.removeEventListener) { // Gecko / W3C el.removeEventListener(evname, func, true); } else { el["on" + evname] = null; } }; Calendar.createElement = function(type, parent) { var el = null; if (document.createElementNS) { // use the XHTML namespace; IE won't normally get here unless // _they_ "fix" the DOM2 implementation. el = document.createElementNS("http://www.w3.org/1999/xhtml", type); } else { el = document.createElement(type); } if (typeof parent != "undefined") { parent.appendChild(el); } return el; }; // END: UTILITY FUNCTIONS // BEGIN: CALENDAR STATIC FUNCTIONS /** Internal -- adds a set of events to make some element behave like a button. */ Calendar._add_evs = function(el) { with (Calendar) { addEvent(el, "mouseover", dayMouseOver); addEvent(el, "mousedown", dayMouseDown); addEvent(el, "mouseout", dayMouseOut); if (is_ie) { addEvent(el, "dblclick", dayMouseDblClick); el.setAttribute("unselectable", true); } } }; Calendar.findMonth = function(el) { if (typeof el.month != "undefined") { return el; } else if (typeof el.parentNode.month != "undefined") { return el.parentNode; } return null; }; Calendar.findYear = function(el) { if (typeof el.year != "undefined") { return el; } else if (typeof el.parentNode.year != "undefined") { return el.parentNode; } return null; }; Calendar.showMonthsCombo = function () { var cal = Calendar._C; if (!cal) { return false; } var cal = cal; var cd = cal.activeDiv; var mc = cal.monthsCombo; if (cal.hilitedMonth) { Calendar.removeClass(cal.hilitedMonth, "hilite"); } if (cal.activeMonth) { Calendar.removeClass(cal.activeMonth, "active"); } var mon = cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()]; Calendar.addClass(mon, "active"); cal.activeMonth = mon; var s = mc.style; s.display = "block"; if (cd.navtype < 0) s.left = cd.offsetLeft + "px"; else { var mcw = mc.offsetWidth; if (typeof mcw == "undefined") // Konqueror brain-dead techniques mcw = 50; s.left = (cd.offsetLeft + cd.offsetWidth - mcw) + "px"; } s.top = (cd.offsetTop + cd.offsetHeight) + "px"; }; Calendar.showYearsCombo = function (fwd) { var cal = Calendar._C; if (!cal) { return false; } var cal = cal; var cd = cal.activeDiv; var yc = cal.yearsCombo; if (cal.hilitedYear) { Calendar.removeClass(cal.hilitedYear, "hilite"); } if (cal.activeYear) { Calendar.removeClass(cal.activeYear, "active"); } cal.activeYear = null; var Y = cal.date.getFullYear() + (fwd ? 1 : -1); var yr = yc.firstChild; var show = false; for (var i = 12; i > 0; --i) { if (Y >= cal.minYear && Y <= cal.maxYear) { yr.innerHTML = Y; yr.year = Y; yr.style.display = "block"; show = true; } else { yr.style.display = "none"; } yr = yr.nextSibling; Y += fwd ? cal.yearStep : -cal.yearStep; } if (show) { var s = yc.style; s.display = "block"; if (cd.navtype < 0) s.left = cd.offsetLeft + "px"; else { var ycw = yc.offsetWidth; if (typeof ycw == "undefined") // Konqueror brain-dead techniques ycw = 50; s.left = (cd.offsetLeft + cd.offsetWidth - ycw) + "px"; } s.top = (cd.offsetTop + cd.offsetHeight) + "px"; } }; // event handlers Calendar.tableMouseUp = function(ev) { var cal = Calendar._C; if (!cal) { return false; } if (cal.timeout) { clearTimeout(cal.timeout); } var el = cal.activeDiv; if (!el) { return false; } var target = Calendar.getTargetElement(ev); ev || (ev = window.event); Calendar.removeClass(el, "active"); if (target == el || target.parentNode == el) { Calendar.cellClick(el, ev); } var mon = Calendar.findMonth(target); var date = null; if (mon) { date = new Date(cal.date); if (mon.month != date.getMonth()) { date.setMonth(mon.month); cal.setDate(date); cal.dateClicked = false; cal.callHandler(); } } else { var year = Calendar.findYear(target); if (year) { date = new Date(cal.date); if (year.year != date.getFullYear()) { date.setFullYear(year.year); cal.setDate(date); cal.dateClicked = false; cal.callHandler(); } } } with (Calendar) { removeEvent(document, "mouseup", tableMouseUp); removeEvent(document, "mouseover", tableMouseOver); removeEvent(document, "mousemove", tableMouseOver); cal._hideCombos(); _C = null; return stopEvent(ev); } }; Calendar.tableMouseOver = function (ev) { var cal = Calendar._C; if (!cal) { return; } var el = cal.activeDiv; var target = Calendar.getTargetElement(ev); if (target == el || target.parentNode == el) { Calendar.addClass(el, "hilite active"); Calendar.addClass(el.parentNode, "rowhilite"); } else { if (typeof el.navtype == "undefined" || (el.navtype != 50 && (el.navtype == 0 || Math.abs(el.navtype) > 2))) Calendar.removeClass(el, "active"); Calendar.removeClass(el, "hilite"); Calendar.removeClass(el.parentNode, "rowhilite"); } ev || (ev = window.event); if (el.navtype == 50 && target != el) { var pos = Calendar.getAbsolutePos(el); var w = el.offsetWidth; var x = ev.clientX; var dx; var decrease = true; if (x > pos.x + w) { dx = x - pos.x - w; decrease = false; } else dx = pos.x - x; if (dx < 0) dx = 0; var range = el._range; var current = el._current; var count = Math.floor(dx / 10) % range.length; for (var i = range.length; --i >= 0;) if (range[i] == current) break; while (count-- > 0) if (decrease) { if (--i < 0) i = range.length - 1; } else if ( ++i >= range.length ) i = 0; var newval = range[i]; el.innerHTML = newval; cal.onUpdateTime(); } var mon = Calendar.findMonth(target); if (mon) { if (mon.month != cal.date.getMonth()) { if (cal.hilitedMonth) { Calendar.removeClass(cal.hilitedMonth, "hilite"); } Calendar.addClass(mon, "hilite"); cal.hilitedMonth = mon; } else if (cal.hilitedMonth) { Calendar.removeClass(cal.hilitedMonth, "hilite"); } } else { if (cal.hilitedMonth) { Calendar.removeClass(cal.hilitedMonth, "hilite"); } var year = Calendar.findYear(target); if (year) { if (year.year != cal.date.getFullYear()) { if (cal.hilitedYear) { Calendar.removeClass(cal.hilitedYear, "hilite"); } Calendar.addClass(year, "hilite"); cal.hilitedYear = year; } else if (cal.hilitedYear) { Calendar.removeClass(cal.hilitedYear, "hilite"); } } else if (cal.hilitedYear) { Calendar.removeClass(cal.hilitedYear, "hilite"); } } return Calendar.stopEvent(ev); }; Calendar.tableMouseDown = function (ev) { if (Calendar.getTargetElement(ev) == Calendar.getElement(ev)) { return Calendar.stopEvent(ev); } }; Calendar.calDragIt = function (ev) { var cal = Calendar._C; if (!(cal && cal.dragging)) { return false; } var posX; var posY; if (Calendar.is_ie) { posY = window.event.clientY; posX = window.event.clientX; } else { posX = ev.pageX; posY = ev.pageY; } cal.hideShowCovered(); var st = cal.element.style; st.left = (posX - cal.xOffs) + "px"; st.top = (posY - cal.yOffs) + "px"; return Calendar.stopEvent(ev); }; Calendar.calDragEnd = function (ev) { var cal = Calendar._C; if (!cal) { return false; } cal.dragging = false; with (Calendar) { removeEvent(document, "mousemove", calDragIt); removeEvent(document, "mouseup", calDragEnd); tableMouseUp(ev); } cal.hideShowCovered(); }; Calendar.dayMouseDown = function(ev) { var el = Calendar.getElement(ev); if (el.disabled) { return false; } var cal = el.calendar; cal.activeDiv = el; Calendar._C = cal; if (el.navtype != 300) with (Calendar) { if (el.navtype == 50) { el._current = el.innerHTML; addEvent(document, "mousemove", tableMouseOver); } else addEvent(document, Calendar.is_ie5 ? "mousemove" : "mouseover", tableMouseOver); addClass(el, "hilite active"); addEvent(document, "mouseup", tableMouseUp); } else if (cal.isPopup) { cal._dragStart(ev); } if (el.navtype == -1 || el.navtype == 1) { if (cal.timeout) clearTimeout(cal.timeout); cal.timeout = setTimeout("Calendar.showMonthsCombo()", 250); } else if (el.navtype == -2 || el.navtype == 2) { if (cal.timeout) clearTimeout(cal.timeout); cal.timeout = setTimeout((el.navtype > 0) ? "Calendar.showYearsCombo(true)" : "Calendar.showYearsCombo(false)", 250); } else { cal.timeout = null; } return Calendar.stopEvent(ev); }; Calendar.dayMouseDblClick = function(ev) { Calendar.cellClick(Calendar.getElement(ev), ev || window.event); if (Calendar.is_ie) { document.selection.empty(); } }; Calendar.dayMouseOver = function(ev) { var el = Calendar.getElement(ev); if (Calendar.isRelated(el, ev) || Calendar._C || el.disabled) { return false; } if (el.ttip) { if (el.ttip.substr(0, 1) == "_") { el.ttip = el.caldate.print(el.calendar.ttDateFormat) + el.ttip.substr(1); } el.calendar.tooltips.innerHTML = el.ttip; } if (el.navtype != 300) { Calendar.addClass(el, "hilite"); if (el.caldate) { Calendar.addClass(el.parentNode, "rowhilite"); } } return Calendar.stopEvent(ev); }; Calendar.dayMouseOut = function(ev) { with (Calendar) { var el = getElement(ev); if (isRelated(el, ev) || _C || el.disabled) return false; removeClass(el, "hilite"); if (el.caldate) removeClass(el.parentNode, "rowhilite"); if (el.calendar) el.calendar.tooltips.innerHTML = _TT["SEL_DATE"]; return stopEvent(ev); } }; /** * A generic "click" handler :) handles all types of buttons defined in this * calendar. */ Calendar.cellClick = function(el, ev) { var cal = el.calendar; var closing = false; var newdate = false; var date = null; if (typeof el.navtype == "undefined") { if (cal.currentDateEl) { Calendar.removeClass(cal.currentDateEl, "selected"); Calendar.addClass(el, "selected"); closing = (cal.currentDateEl == el); if (!closing) { cal.currentDateEl = el; } } cal.date.setDateOnly(el.caldate); date = cal.date; var other_month = !(cal.dateClicked = !el.otherMonth); if (!other_month && !cal.currentDateEl) cal._toggleMultipleDate(new Date(date)); else newdate = !el.disabled; // a date was clicked if (other_month) cal._init(cal.firstDayOfWeek, date); } else { if (el.navtype == 200) { Calendar.removeClass(el, "hilite"); cal.callCloseHandler(); return; } date = new Date(cal.date); if (el.navtype == 0) date.setDateOnly(new Date()); // TODAY // unless "today" was clicked, we assume no date was clicked so // the selected handler will know not to close the calenar when // in single-click mode. // cal.dateClicked = (el.navtype == 0); cal.dateClicked = false; var year = date.getFullYear(); var mon = date.getMonth(); function setMonth(m) { var day = date.getDate(); var max = date.getMonthDays(m); if (day > max) { date.setDate(max); } date.setMonth(m); }; switch (el.navtype) { case 400: Calendar.removeClass(el, "hilite"); var text = Calendar._TT["ABOUT"]; if (typeof text != "undefined") { text += cal.showsTime ? Calendar._TT["ABOUT_TIME"] : ""; } else { // FIXME: this should be removed as soon as lang files get updated! text = "Help and about box text is not translated into this language.\n" + "If you know this language and you feel generous please update\n" + "the corresponding file in \"lang\" subdir to match calendar-en.js\n" + "and send it back to to get it into the distribution ;-)\n\n" + "Thank you!\n" + "http://dynarch.com/mishoo/calendar.epl\n"; } alert(text); return; case -2: if (year > cal.minYear) { date.setFullYear(year - 1); } break; case -1: if (mon > 0) { setMonth(mon - 1); } else if (year-- > cal.minYear) { date.setFullYear(year); setMonth(11); } break; case 1: if (mon < 11) { setMonth(mon + 1); } else if (year < cal.maxYear) { date.setFullYear(year + 1); setMonth(0); } break; case 2: if (year < cal.maxYear) { date.setFullYear(year + 1); } break; case 100: cal.setFirstDayOfWeek(el.fdow); return; case 50: var range = el._range; var current = el.innerHTML; for (var i = range.length; --i >= 0;) if (range[i] == current) break; if (ev && ev.shiftKey) { if (--i < 0) i = range.length - 1; } else if ( ++i >= range.length ) i = 0; var newval = range[i]; el.innerHTML = newval; cal.onUpdateTime(); return; case 0: // TODAY will bring us here if ((typeof cal.getDateStatus == "function") && cal.getDateStatus(date, date.getFullYear(), date.getMonth(), date.getDate())) { return false; } break; } if (!date.equalsTo(cal.date)) { cal.setDate(date); newdate = true; } else if (el.navtype == 0) newdate = closing = true; } if (newdate) { ev && cal.callHandler(); } if (closing) { Calendar.removeClass(el, "hilite"); ev && cal.callCloseHandler(); } }; // END: CALENDAR STATIC FUNCTIONS // BEGIN: CALENDAR OBJECT FUNCTIONS /** * This function creates the calendar inside the given parent. If _par is * null than it creates a popup calendar inside the BODY element. If _par is * an element, be it BODY, then it creates a non-popup calendar (still * hidden). Some properties need to be set before calling this function. */ Calendar.prototype.create = function (_par) { var parent = null; if (! _par) { // default parent is the document body, in which case we create // a popup calendar. parent = document.getElementsByTagName("body")[0]; this.isPopup = true; } else { parent = _par; this.isPopup = false; } this.date = this.dateStr ? new Date(this.dateStr) : new Date(); var table = Calendar.createElement("table"); this.table = table; table.cellSpacing = 0; table.cellPadding = 0; table.calendar = this; Calendar.addEvent(table, "mousedown", Calendar.tableMouseDown); var div = Calendar.createElement("div"); this.element = div; div.className = "calendar"; if (this.isPopup) { div.style.position = "absolute"; div.style.display = "none"; } div.appendChild(table); var thead = Calendar.createElement("thead", table); var cell = null; var row = null; var cal = this; var hh = function (text, cs, navtype) { cell = Calendar.createElement("td", row); cell.colSpan = cs; cell.className = "button"; if (navtype != 0 && Math.abs(navtype) <= 2) cell.className += " nav"; Calendar._add_evs(cell); cell.calendar = cal; cell.navtype = navtype; cell.innerHTML = "
" + text + "
"; return cell; }; row = Calendar.createElement("tr", thead); var title_length = 6; (this.isPopup) && --title_length; (this.weekNumbers) && ++title_length; hh("?", 1, 400).ttip = Calendar._TT["INFO"]; this.title = hh("", title_length, 300); this.title.className = "title"; if (this.isPopup) { this.title.ttip = Calendar._TT["DRAG_TO_MOVE"]; this.title.style.cursor = "move"; hh("×", 1, 200).ttip = Calendar._TT["CLOSE"]; } row = Calendar.createElement("tr", thead); row.className = "headrow"; this._nav_py = hh("«", 1, -2); this._nav_py.ttip = Calendar._TT["PREV_YEAR"]; this._nav_pm = hh("‹", 1, -1); this._nav_pm.ttip = Calendar._TT["PREV_MONTH"]; this._nav_now = hh(Calendar._TT["TODAY"], this.weekNumbers ? 4 : 3, 0); this._nav_now.ttip = Calendar._TT["GO_TODAY"]; this._nav_nm = hh("›", 1, 1); this._nav_nm.ttip = Calendar._TT["NEXT_MONTH"]; this._nav_ny = hh("»", 1, 2); this._nav_ny.ttip = Calendar._TT["NEXT_YEAR"]; // day names row = Calendar.createElement("tr", thead); row.className = "daynames"; if (this.weekNumbers) { cell = Calendar.createElement("td", row); cell.className = "name wn"; cell.innerHTML = Calendar._TT["WK"]; } for (var i = 7; i > 0; --i) { cell = Calendar.createElement("td", row); if (!i) { cell.navtype = 100; cell.calendar = this; Calendar._add_evs(cell); } } this.firstdayname = (this.weekNumbers) ? row.firstChild.nextSibling : row.firstChild; this._displayWeekdays(); var tbody = Calendar.createElement("tbody", table); this.tbody = tbody; for (i = 6; i > 0; --i) { row = Calendar.createElement("tr", tbody); if (this.weekNumbers) { cell = Calendar.createElement("td", row); } for (var j = 7; j > 0; --j) { cell = Calendar.createElement("td", row); cell.calendar = this; Calendar._add_evs(cell); } } if (this.showsTime) { row = Calendar.createElement("tr", tbody); row.className = "time"; cell = Calendar.createElement("td", row); cell.className = "time"; cell.colSpan = 2; cell.innerHTML = Calendar._TT["TIME"] || " "; cell = Calendar.createElement("td", row); cell.className = "time"; cell.colSpan = this.weekNumbers ? 4 : 3; (function(){ function makeTimePart(className, init, range_start, range_end) { var part = Calendar.createElement("span", cell); part.className = className; part.innerHTML = init; part.calendar = cal; part.ttip = Calendar._TT["TIME_PART"]; part.navtype = 50; part._range = []; if (typeof range_start != "number") part._range = range_start; else { for (var i = range_start; i <= range_end; ++i) { var txt; if (i < 10 && range_end >= 10) txt = '0' + i; else txt = '' + i; part._range[part._range.length] = txt; } } Calendar._add_evs(part); return part; }; var hrs = cal.date.getHours(); var mins = cal.date.getMinutes(); var t12 = !cal.time24; var pm = (hrs > 12); if (t12 && pm) hrs -= 12; var H = makeTimePart("hour", hrs, t12 ? 1 : 0, t12 ? 12 : 23); var span = Calendar.createElement("span", cell); span.innerHTML = ":"; span.className = "colon"; var M = makeTimePart("minute", mins, 0, 59); var AP = null; cell = Calendar.createElement("td", row); cell.className = "time"; cell.colSpan = 2; if (t12) AP = makeTimePart("ampm", pm ? "pm" : "am", ["am", "pm"]); else cell.innerHTML = " "; cal.onSetTime = function() { var pm, hrs = this.date.getHours(), mins = this.date.getMinutes(); if (t12) { pm = (hrs >= 12); if (pm) hrs -= 12; if (hrs == 0) hrs = 12; AP.innerHTML = pm ? "pm" : "am"; } H.innerHTML = (hrs < 10) ? ("0" + hrs) : hrs; M.innerHTML = (mins < 10) ? ("0" + mins) : mins; }; cal.onUpdateTime = function() { var date = this.date; var h = parseInt(H.innerHTML, 10); if (t12) { if (/pm/i.test(AP.innerHTML) && h < 12) h += 12; else if (/am/i.test(AP.innerHTML) && h == 12) h = 0; } var d = date.getDate(); var m = date.getMonth(); var y = date.getFullYear(); date.setHours(h); date.setMinutes(parseInt(M.innerHTML, 10)); date.setFullYear(y); date.setMonth(m); date.setDate(d); this.dateClicked = false; this.callHandler(); }; })(); } else { this.onSetTime = this.onUpdateTime = function() {}; } var tfoot = Calendar.createElement("tfoot", table); row = Calendar.createElement("tr", tfoot); row.className = "footrow"; cell = hh(Calendar._TT["SEL_DATE"], this.weekNumbers ? 8 : 7, 300); cell.className = "ttip"; if (this.isPopup) { cell.ttip = Calendar._TT["DRAG_TO_MOVE"]; cell.style.cursor = "move"; } this.tooltips = cell; // Customization: add an extra "Close" button at the bottom for // multi multi-select calendars to make them more intuitive. if (this.multiple != null) { row = Calendar.createElement("tr", tfoot); row.className = "footrow"; cell = Calendar.createElement("td", row); hh(Calendar._TT["CLOSE"], this.weekNumbers ? 6 : 5, 200); cell = Calendar.createElement("td", row); } div = Calendar.createElement("div", this.element); this.monthsCombo = div; div.className = "combo"; for (i = 0; i < Calendar._MN.length; ++i) { var mn = Calendar.createElement("div"); mn.className = Calendar.is_ie ? "label-IEfix" : "label"; mn.month = i; mn.innerHTML = Calendar._SMN[i]; div.appendChild(mn); } div = Calendar.createElement("div", this.element); this.yearsCombo = div; div.className = "combo"; for (i = 12; i > 0; --i) { var yr = Calendar.createElement("div"); yr.className = Calendar.is_ie ? "label-IEfix" : "label"; div.appendChild(yr); } this._init(this.firstDayOfWeek, this.date); parent.appendChild(this.element); }; /** keyboard navigation, only for popup calendars */ Calendar._keyEvent = function(ev) { var cal = window._dynarch_popupCalendar; if (!cal || cal.multiple) return false; (Calendar.is_ie) && (ev = window.event); var act = (Calendar.is_ie || ev.type == "keypress"), K = ev.keyCode; if (ev.ctrlKey) { switch (K) { case 37: // KEY left act && Calendar.cellClick(cal._nav_pm); break; case 38: // KEY up act && Calendar.cellClick(cal._nav_py); break; case 39: // KEY right act && Calendar.cellClick(cal._nav_nm); break; case 40: // KEY down act && Calendar.cellClick(cal._nav_ny); break; default: return false; } } else switch (K) { case 32: // KEY space (now) Calendar.cellClick(cal._nav_now); break; case 27: // KEY esc act && cal.callCloseHandler(); break; case 37: // KEY left case 38: // KEY up case 39: // KEY right case 40: // KEY down if (act) { var prev, x, y, ne, el, step; prev = K == 37 || K == 38; step = (K == 37 || K == 39) ? 1 : 7; function setVars() { el = cal.currentDateEl; var p = el.pos; x = p & 15; y = p >> 4; ne = cal.ar_days[y][x]; };setVars(); function prevMonth() { var date = new Date(cal.date); date.setDate(date.getDate() - step); cal.setDate(date); }; function nextMonth() { var date = new Date(cal.date); date.setDate(date.getDate() + step); cal.setDate(date); }; while (1) { switch (K) { case 37: // KEY left if (--x >= 0) ne = cal.ar_days[y][x]; else { x = 6; K = 38; continue; } break; case 38: // KEY up if (--y >= 0) ne = cal.ar_days[y][x]; else { prevMonth(); setVars(); } break; case 39: // KEY right if (++x < 7) ne = cal.ar_days[y][x]; else { x = 0; K = 40; continue; } break; case 40: // KEY down if (++y < cal.ar_days.length) ne = cal.ar_days[y][x]; else { nextMonth(); setVars(); } break; } break; } if (ne) { if (!ne.disabled) Calendar.cellClick(ne); else if (prev) prevMonth(); else nextMonth(); } } break; case 13: // KEY enter if (act) Calendar.cellClick(cal.currentDateEl, ev); break; default: return false; } return Calendar.stopEvent(ev); }; /** * (RE)Initializes the calendar to the given date and firstDayOfWeek */ Calendar.prototype._init = function (firstDayOfWeek, date) { var today = new Date(), TY = today.getFullYear(), TM = today.getMonth(), TD = today.getDate(); this.table.style.visibility = "hidden"; var year = date.getFullYear(); if (year < this.minYear) { year = this.minYear; date.setFullYear(year); } else if (year > this.maxYear) { year = this.maxYear; date.setFullYear(year); } this.firstDayOfWeek = firstDayOfWeek; this.date = new Date(date); var month = date.getMonth(); var mday = date.getDate(); var no_days = date.getMonthDays(); // calendar voodoo for computing the first day that would actually be // displayed in the calendar, even if it's from the previous month. // WARNING: this is magic. ;-) date.setDate(1); var day1 = (date.getDay() - this.firstDayOfWeek) % 7; if (day1 < 0) day1 += 7; date.setDate(-day1); date.setDate(date.getDate() + 1); var row = this.tbody.firstChild; var MN = Calendar._SMN[month]; var ar_days = this.ar_days = new Array(); var weekend = Calendar._TT["WEEKEND"]; var dates = this.multiple ? (this.datesCells = {}) : null; for (var i = 0; i < 6; ++i, row = row.nextSibling) { var cell = row.firstChild; if (this.weekNumbers) { cell.className = "day wn"; cell.innerHTML = date.getWeekNumber(); cell = cell.nextSibling; } row.className = "daysrow"; var hasdays = false, iday, dpos = ar_days[i] = []; for (var j = 0; j < 7; ++j, cell = cell.nextSibling, date.setDate(iday + 1)) { iday = date.getDate(); var wday = date.getDay(); cell.className = "day"; cell.pos = i << 4 | j; dpos[j] = cell; var current_month = (date.getMonth() == month); if (!current_month) { if (this.showsOtherMonths) { cell.className += " othermonth"; cell.otherMonth = true; } else { cell.className = "emptycell"; cell.innerHTML = " "; cell.disabled = true; continue; } } else { cell.otherMonth = false; hasdays = true; } cell.disabled = false; cell.innerHTML = this.getDateText ? this.getDateText(date, iday) : iday; if (dates) dates[date.print("%Y%m%d")] = cell; if (this.getDateStatus) { var status = this.getDateStatus(date, year, month, iday); if (this.getDateToolTip) { var toolTip = this.getDateToolTip(date, year, month, iday); if (toolTip) cell.title = toolTip; } if (status === true) { cell.className += " disabled"; cell.disabled = true; } else { if (/disabled/i.test(status)) cell.disabled = true; cell.className += " " + status; } } if (!cell.disabled) { cell.caldate = new Date(date); cell.ttip = "_"; if (!this.multiple && current_month && iday == mday && this.hiliteToday) { cell.className += " selected"; this.currentDateEl = cell; } if (date.getFullYear() == TY && date.getMonth() == TM && iday == TD) { cell.className += " today"; cell.ttip += Calendar._TT["PART_TODAY"]; } if (weekend.indexOf(wday.toString()) != -1) cell.className += cell.otherMonth ? " oweekend" : " weekend"; } } if (!(hasdays || this.showsOtherMonths)) row.className = "emptyrow"; } this.title.innerHTML = Calendar._MN[month] + ", " + year; this.onSetTime(); this.table.style.visibility = "visible"; this._initMultipleDates(); // PROFILE // this.tooltips.innerHTML = "Generated in " + ((new Date()) - today) + " ms"; }; Calendar.prototype._initMultipleDates = function() { if (this.multiple) { for (var i in this.multiple) { var cell = this.datesCells[i]; var d = this.multiple[i]; if (!d) continue; if (cell) cell.className += " selected"; } } }; Calendar.prototype._toggleMultipleDate = function(date) { if (this.multiple) { var ds = date.print("%Y%m%d"); var cell = this.datesCells[ds]; if (cell) { var d = this.multiple[ds]; if (!d) { Calendar.addClass(cell, "selected"); this.multiple[ds] = date; } else { Calendar.removeClass(cell, "selected"); delete this.multiple[ds]; } } } }; Calendar.prototype.setDateToolTipHandler = function (unaryFunction) { this.getDateToolTip = unaryFunction; }; /** * Calls _init function above for going to a certain date (but only if the * date is different than the currently selected one). */ Calendar.prototype.setDate = function (date) { if (!date.equalsTo(this.date)) { this._init(this.firstDayOfWeek, date); } }; /** * Refreshes the calendar. Useful if the "disabledHandler" function is * dynamic, meaning that the list of disabled date can change at runtime. * Just * call this function if you think that the list of disabled dates * should * change. */ Calendar.prototype.refresh = function () { this._init(this.firstDayOfWeek, this.date); }; /** Modifies the "firstDayOfWeek" parameter (pass 0 for Synday, 1 for Monday, etc.). */ Calendar.prototype.setFirstDayOfWeek = function (firstDayOfWeek) { this._init(firstDayOfWeek, this.date); this._displayWeekdays(); }; /** * Allows customization of what dates are enabled. The "unaryFunction" * parameter must be a function object that receives the date (as a JS Date * object) and returns a boolean value. If the returned value is true then * the passed date will be marked as disabled. */ Calendar.prototype.setDateStatusHandler = Calendar.prototype.setDisabledHandler = function (unaryFunction) { this.getDateStatus = unaryFunction; }; /** Customization of allowed year range for the calendar. */ Calendar.prototype.setRange = function (a, z) { this.minYear = a; this.maxYear = z; }; /** Calls the first user handler (selectedHandler). */ Calendar.prototype.callHandler = function () { if (this.onSelected) { this.onSelected(this, this.date.print(this.dateFormat)); } }; /** Calls the second user handler (closeHandler). */ Calendar.prototype.callCloseHandler = function () { if (this.onClose) { this.onClose(this); } this.hideShowCovered(); }; /** Removes the calendar object from the DOM tree and destroys it. */ Calendar.prototype.destroy = function () { var el = this.element.parentNode; el.removeChild(this.element); Calendar._C = null; window._dynarch_popupCalendar = null; }; /** * Moves the calendar element to a different section in the DOM tree (changes * its parent). */ Calendar.prototype.reparent = function (new_parent) { var el = this.element; el.parentNode.removeChild(el); new_parent.appendChild(el); }; // This gets called when the user presses a mouse button anywhere in the // document, if the calendar is shown. If the click was outside the open // calendar this function closes it. Calendar._checkCalendar = function(ev) { var calendar = window._dynarch_popupCalendar; if (!calendar) { return false; } var el = Calendar.is_ie ? Calendar.getElement(ev) : Calendar.getTargetElement(ev); for (; el != null && el != calendar.element; el = el.parentNode); if (el == null) { // calls closeHandler which should hide the calendar. window._dynarch_popupCalendar.callCloseHandler(); return Calendar.stopEvent(ev); } }; /** Shows the calendar. */ Calendar.prototype.show = function () { var rows = this.table.getElementsByTagName("tr"); for (var i = rows.length; i > 0;) { var row = rows[--i]; Calendar.removeClass(row, "rowhilite"); var cells = row.getElementsByTagName("td"); for (var j = cells.length; j > 0;) { var cell = cells[--j]; Calendar.removeClass(cell, "hilite"); Calendar.removeClass(cell, "active"); } } this.element.style.display = "block"; this.hidden = false; if (this.isPopup) { window._dynarch_popupCalendar = this; Calendar.addEvent(document, "keydown", Calendar._keyEvent); Calendar.addEvent(document, "keypress", Calendar._keyEvent); Calendar.addEvent(document, "mousedown", Calendar._checkCalendar); } this.hideShowCovered(); }; /** * Hides the calendar. Also removes any "hilite" from the class of any TD * element. */ Calendar.prototype.hide = function () { if (this.isPopup) { Calendar.removeEvent(document, "keydown", Calendar._keyEvent); Calendar.removeEvent(document, "keypress", Calendar._keyEvent); Calendar.removeEvent(document, "mousedown", Calendar._checkCalendar); } this.element.style.display = "none"; this.hidden = true; this.hideShowCovered(); }; /** * Shows the calendar at a given absolute position (beware that, depending on * the calendar element style -- position property -- this might be relative * to the parent's containing rectangle). */ Calendar.prototype.showAt = function (x, y) { var s = this.element.style; s.left = x + "px"; s.top = y + "px"; this.show(); }; /** Shows the calendar near a given element. */ Calendar.prototype.showAtElement = function (el, opts) { var self = this; var p = Calendar.getAbsolutePos(el); if (!opts || typeof opts != "string") { this.showAt(p.x, p.y + el.offsetHeight); return true; } function fixPosition(box) { if (box.x < 0) box.x = 0; if (box.y < 0) box.y = 0; var cp = document.createElement("div"); var s = cp.style; s.position = "absolute"; s.right = s.bottom = s.width = s.height = "0px"; document.body.appendChild(cp); var br = Calendar.getAbsolutePos(cp); document.body.removeChild(cp); if (Calendar.is_ie) { br.y += document.body.scrollTop || document.documentElement.scrollTop; br.x += document.body.scrollLeft || document.documentElement.scrollLeft; } else { br.y += window.scrollY; br.x += window.scrollX; } var tmp = box.x + box.width - br.x; if (tmp > 0) box.x -= tmp; tmp = box.y + box.height - br.y; if (tmp > 0) box.y -= tmp; }; this.element.style.display = "block"; Calendar.continuation_for_the_fucking_khtml_browser = function() { var w = self.element.offsetWidth; var h = self.element.offsetHeight; self.element.style.display = "none"; var valign = opts.substr(0, 1); var halign = "l"; if (opts.length > 1) { halign = opts.substr(1, 1); } // vertical alignment switch (valign) { case "T": p.y -= h; break; case "B": p.y += el.offsetHeight; break; case "C": p.y += (el.offsetHeight - h) / 2; break; case "t": p.y += el.offsetHeight - h; break; case "b": break; // already there } // horizontal alignment switch (halign) { case "L": p.x -= w; break; case "R": p.x += el.offsetWidth; break; case "C": p.x += (el.offsetWidth - w) / 2; break; case "l": p.x += el.offsetWidth - w; break; case "r": break; // already there } p.width = w; p.height = h + 40; self.monthsCombo.style.display = "none"; fixPosition(p); self.showAt(p.x, p.y); }; if (Calendar.is_khtml) setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()", 10); else Calendar.continuation_for_the_fucking_khtml_browser(); }; /** Customizes the date format. */ Calendar.prototype.setDateFormat = function (str) { this.dateFormat = str; }; /** Customizes the tooltip date format. */ Calendar.prototype.setTtDateFormat = function (str) { this.ttDateFormat = str; }; /** * Tries to identify the date represented in a string. If successful it also * calls this.setDate which moves the calendar to the given date. */ Calendar.prototype.parseDate = function(str, fmt) { if (!fmt) fmt = this.dateFormat; this.setDate(Date.parseDate(str, fmt)); }; Calendar.prototype.hideShowCovered = function () { if (!Calendar.is_ie && !Calendar.is_opera) return; function getVisib(obj){ var value = obj.style.visibility; if (!value) { if (document.defaultView && typeof (document.defaultView.getComputedStyle) == "function") { // Gecko, W3C if (!Calendar.is_khtml) value = document.defaultView. getComputedStyle(obj, "").getPropertyValue("visibility"); else value = ''; } else if (obj.currentStyle) { // IE value = obj.currentStyle.visibility; } else value = ''; } return value; }; var tags = new Array("applet", "iframe", "select"); var el = this.element; var p = Calendar.getAbsolutePos(el); var EX1 = p.x; var EX2 = el.offsetWidth + EX1; var EY1 = p.y; var EY2 = el.offsetHeight + EY1; for (var k = tags.length; k > 0; ) { var ar = document.getElementsByTagName(tags[--k]); var cc = null; for (var i = ar.length; i > 0;) { cc = ar[--i]; p = Calendar.getAbsolutePos(cc); var CX1 = p.x; var CX2 = cc.offsetWidth + CX1; var CY1 = p.y; var CY2 = cc.offsetHeight + CY1; if (this.hidden || (CX1 > EX2) || (CX2 < EX1) || (CY1 > EY2) || (CY2 < EY1)) { if (!cc.__msh_save_visibility) { cc.__msh_save_visibility = getVisib(cc); } cc.style.visibility = cc.__msh_save_visibility; } else { if (!cc.__msh_save_visibility) { cc.__msh_save_visibility = getVisib(cc); } cc.style.visibility = "hidden"; } } } }; /** Internal function; it displays the bar with the names of the weekday. */ Calendar.prototype._displayWeekdays = function () { var fdow = this.firstDayOfWeek; var cell = this.firstdayname; var weekend = Calendar._TT["WEEKEND"]; for (var i = 0; i < 7; ++i) { cell.className = "day name"; var realday = (i + fdow) % 7; if (i) { cell.ttip = Calendar._TT["DAY_FIRST"].replace("%s", Calendar._DN[realday]); cell.navtype = 100; cell.calendar = this; cell.fdow = realday; Calendar._add_evs(cell); } if (weekend.indexOf(realday.toString()) != -1) { Calendar.addClass(cell, "weekend"); } cell.innerHTML = Calendar._SDN[(i + fdow) % 7]; cell = cell.nextSibling; } }; /** Internal function. Hides all combo boxes that might be displayed. */ Calendar.prototype._hideCombos = function () { this.monthsCombo.style.display = "none"; this.yearsCombo.style.display = "none"; }; /** Internal function. Starts dragging the element. */ Calendar.prototype._dragStart = function (ev) { if (this.dragging) { return; } this.dragging = true; var posX; var posY; if (Calendar.is_ie) { posY = window.event.clientY; posX = window.event.clientX; } else { posY = ev.clientY + window.scrollY; posX = ev.clientX + window.scrollX; } var st = this.element.style; this.xOffs = posX - parseInt(st.left); this.yOffs = posY - parseInt(st.top); with (Calendar) { addEvent(document, "mousemove", calDragIt); addEvent(document, "mouseup", calDragEnd); } }; // BEGIN: DATE OBJECT PATCHES /** Adds the number of days array to the Date object. */ Date._MD = new Array(31,28,31,30,31,30,31,31,30,31,30,31); /** Constants used for time computations */ Date.SECOND = 1000 /* milliseconds */; Date.MINUTE = 60 * Date.SECOND; Date.HOUR = 60 * Date.MINUTE; Date.DAY = 24 * Date.HOUR; Date.WEEK = 7 * Date.DAY; Date.parseDate = function(str, fmt) { var today = new Date(); var y = 0; var m = -1; var d = 0; var a = str.split(/\W+/); var b = fmt.match(/%./g); var i = 0, j = 0; var hr = 0; var min = 0; for (i = 0; i < a.length; ++i) { if (!a[i]) continue; switch (b[i]) { case "%d": case "%e": d = parseInt(a[i], 10); break; case "%m": m = parseInt(a[i], 10) - 1; break; case "%Y": case "%y": y = parseInt(a[i], 10); (y < 100) && (y += (y > 29) ? 1900 : 2000); break; case "%b": case "%B": for (j = 0; j < 12; ++j) { if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { m = j; break; } } break; case "%H": case "%I": case "%k": case "%l": hr = parseInt(a[i], 10); break; case "%P": case "%p": if (/pm/i.test(a[i]) && hr < 12) hr += 12; else if (/am/i.test(a[i]) && hr >= 12) hr -= 12; break; case "%M": min = parseInt(a[i], 10); break; } } if (isNaN(y)) y = today.getFullYear(); if (isNaN(m)) m = today.getMonth(); if (isNaN(d)) d = today.getDate(); if (isNaN(hr)) hr = today.getHours(); if (isNaN(min)) min = today.getMinutes(); if (y != 0 && m != -1 && d != 0) return new Date(y, m, d, hr, min, 0); y = 0; m = -1; d = 0; for (i = 0; i < a.length; ++i) { if (a[i].search(/[a-zA-Z]+/) != -1) { var t = -1; for (j = 0; j < 12; ++j) { if (Calendar._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) { t = j; break; } } if (t != -1) { if (m != -1) { d = m+1; } m = t; } } else if (parseInt(a[i], 10) <= 12 && m == -1) { m = a[i]-1; } else if (parseInt(a[i], 10) > 31 && y == 0) { y = parseInt(a[i], 10); (y < 100) && (y += (y > 29) ? 1900 : 2000); } else if (d == 0) { d = a[i]; } } if (y == 0) y = today.getFullYear(); if (m != -1 && d != 0) return new Date(y, m, d, hr, min, 0); return today; }; /** Returns the number of days in the current month */ Date.prototype.getMonthDays = function(month) { var year = this.getFullYear(); if (typeof month == "undefined") { month = this.getMonth(); } if (((0 == (year%4)) && ( (0 != (year%100)) || (0 == (year%400)))) && month == 1) { return 29; } else { return Date._MD[month]; } }; /** Returns the number of day in the year. */ Date.prototype.getDayOfYear = function() { var now = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); var then = new Date(this.getFullYear(), 0, 0, 0, 0, 0); var time = now - then; return Math.floor(time / Date.DAY); }; /** Returns the number of the week in year, as defined in ISO 8601. */ Date.prototype.getWeekNumber = function() { var d = new Date(this.getFullYear(), this.getMonth(), this.getDate(), 0, 0, 0); var DoW = d.getDay(); d.setDate(d.getDate() - (DoW + 6) % 7 + 3); // Nearest Thu var ms = d.valueOf(); // GMT d.setMonth(0); d.setDate(4); // Thu in Week 1 return Math.round((ms - d.valueOf()) / (7 * 864e5)) + 1; }; /** Checks date and time equality */ Date.prototype.equalsTo = function(date) { return ((this.getFullYear() == date.getFullYear()) && (this.getMonth() == date.getMonth()) && (this.getDate() == date.getDate()) && (this.getHours() == date.getHours()) && (this.getMinutes() == date.getMinutes())); }; /** Set only the year, month, date parts (keep existing time) */ Date.prototype.setDateOnly = function(date) { var tmp = new Date(date); this.setDate(1); this.setFullYear(tmp.getFullYear()); this.setMonth(tmp.getMonth()); this.setDate(tmp.getDate()); }; /** Prints the date in a string according to the given format. */ Date.prototype.print = function (str) { var m = this.getMonth(); var d = this.getDate(); var y = this.getFullYear(); var wn = this.getWeekNumber(); var w = this.getDay(); var s = {}; var hr = this.getHours(); var pm = (hr >= 12); var ir = (pm) ? (hr - 12) : hr; var dy = this.getDayOfYear(); if (ir == 0) ir = 12; var min = this.getMinutes(); var sec = this.getSeconds(); s["%a"] = Calendar._SDN[w]; // abbreviated weekday name [FIXME: I18N] s["%A"] = Calendar._DN[w]; // full weekday name s["%b"] = Calendar._SMN[m]; // abbreviated month name [FIXME: I18N] s["%B"] = Calendar._MN[m]; // full month name // FIXME: %c : preferred date and time representation for the current locale s["%C"] = 1 + Math.floor(y / 100); // the century number s["%d"] = (d < 10) ? ("0" + d) : d; // the day of the month (range 01 to 31) s["%e"] = d; // the day of the month (range 1 to 31) // FIXME: %D : american date style: %m/%d/%y // FIXME: %E, %F, %G, %g, %h (man strftime) s["%H"] = (hr < 10) ? ("0" + hr) : hr; // hour, range 00 to 23 (24h format) s["%I"] = (ir < 10) ? ("0" + ir) : ir; // hour, range 01 to 12 (12h format) s["%j"] = (dy < 100) ? ((dy < 10) ? ("00" + dy) : ("0" + dy)) : dy; // day of the year (range 001 to 366) s["%k"] = hr; // hour, range 0 to 23 (24h format) s["%l"] = ir; // hour, range 1 to 12 (12h format) s["%m"] = (m < 9) ? ("0" + (1+m)) : (1+m); // month, range 01 to 12 s["%M"] = (min < 10) ? ("0" + min) : min; // minute, range 00 to 59 s["%n"] = "\n"; // a newline character s["%p"] = pm ? "PM" : "AM"; s["%P"] = pm ? "pm" : "am"; // FIXME: %r : the time in am/pm notation %I:%M:%S %p // FIXME: %R : the time in 24-hour notation %H:%M s["%s"] = Math.floor(this.getTime() / 1000); s["%S"] = (sec < 10) ? ("0" + sec) : sec; // seconds, range 00 to 59 s["%t"] = "\t"; // a tab character // FIXME: %T : the time in 24-hour notation (%H:%M:%S) s["%U"] = s["%W"] = s["%V"] = (wn < 10) ? ("0" + wn) : wn; s["%u"] = w + 1; // the day of the week (range 1 to 7, 1 = MON) s["%w"] = w; // the day of the week (range 0 to 6, 0 = SUN) // FIXME: %x : preferred date representation for the current locale without the time // FIXME: %X : preferred time representation for the current locale without the date s["%y"] = ('' + y).substr(2, 2); // year without the century (range 00 to 99) s["%Y"] = y; // year with the century s["%%"] = "%"; // a literal '%' character var re = /%./g; if (!Calendar.is_ie5 && !Calendar.is_khtml) return str.replace(re, function (par) { return s[par] || par; }); var a = str.match(re); for (var i = 0; i < a.length; i++) { var tmp = s[a[i]]; if (tmp) { re = new RegExp(a[i], 'g'); str = str.replace(re, tmp); } } return str; }; Date.prototype.__msh_oldSetFullYear = Date.prototype.setFullYear; Date.prototype.setFullYear = function(y) { var d = new Date(this); d.__msh_oldSetFullYear(y); if (d.getMonth() != this.getMonth()) this.setDate(28); this.__msh_oldSetFullYear(y); }; // END: DATE OBJECT PATCHES // global object that remembers the calendar window._dynarch_popupCalendar = null; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/calendar-win2k-cold-1.css0000644000177100020040000001325411573441231031070 0ustar menesismenesis00000000000000/* The main calendar widget. DIV containing a table. */ .calendar { position: relative; display: none; border-top: 2px solid #fff; border-right: 2px solid #000; border-bottom: 2px solid #000; border-left: 2px solid #fff; font-size: 11px; color: #000; cursor: default; background: #c8d0d4; font-family: tahoma,verdana,sans-serif; } .calendar table { border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; font-size: 11px; color: #000; cursor: default; background: #c8d0d4; font-family: tahoma,verdana,sans-serif; } /* Header part -- contains navigation buttons and day names. */ .calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ text-align: center; padding: 1px; border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; } .calendar .nav { background: transparent url(/@@/zc.datetimewidget/menuarrow.gif) no-repeat 100% 100%; } .calendar thead .title { /* This holds the current "month, year" */ font-weight: bold; padding: 1px; border: 1px solid #000; background: #788084; color: #fff; text-align: center; } .calendar thead .headrow { /* Row containing navigation buttons */ } .calendar thead .daynames { /* Row containing the day names */ } .calendar thead .name { /* Cells containing the day names */ border-bottom: 1px solid #000; padding: 2px; text-align: center; background: #e8f0f4; } .calendar thead .weekend { /* How a weekend day name shows in header */ color: #f00; } .calendar thead .hilite { /* How do the buttons in header appear when hover */ border-top: 2px solid #fff; border-right: 2px solid #000; border-bottom: 2px solid #000; border-left: 2px solid #fff; padding: 0px; background-color: #d8e0e4; } .calendar thead .active { /* Active (pressed) buttons in header */ padding: 2px 0px 0px 2px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; background-color: #b8c0c4; } /* The body part -- contains all the days in month. */ .calendar tbody .day { /* Cells containing month days dates */ width: 2em; text-align: right; padding: 2px 4px 2px 2px; } .calendar tbody .day.othermonth { font-size: 80%; color: #aaa; } .calendar tbody .day.othermonth.oweekend { color: #faa; } .calendar table .wn { padding: 2px 3px 2px 2px; border-right: 1px solid #000; background: #e8f4f0; } .calendar tbody .rowhilite td { background: #d8e4e0; } .calendar tbody .rowhilite td.wn { background: #c8d4d0; } .calendar tbody td.hilite { /* Hovered cells */ padding: 1px 3px 1px 1px; border: 1px solid; border-color: #fff #000 #000 #fff; } .calendar tbody td.active { /* Active (pressed) cells */ padding: 2px 2px 0px 2px; border: 1px solid; border-color: #000 #fff #fff #000; } .calendar tbody td.selected { /* Cell showing selected date */ font-weight: bold; padding: 2px 2px 0px 2px; border: 1px solid; border-color: #000 #fff #fff #000; background: #d8e0e4; } .calendar tbody td.weekend { /* Cells showing weekend days */ color: #f00; } .calendar tbody td.today { /* Cell showing today date */ font-weight: bold; color: #00f; } .calendar tbody .disabled { color: #999; } .calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ visibility: hidden; } .calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ display: none; } /* The footer part -- status bar and "Close" button */ .calendar tfoot .footrow { /* The in footer (only one right now) */ } .calendar tfoot .ttip { /* Tooltip (status bar) cell */ background: #e8f0f4; padding: 1px; border: 1px solid #000; background: #788084; color: #fff; text-align: center; } .calendar tfoot .hilite { /* Hover style for buttons in footer */ border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; padding: 1px; background: #d8e0e4; } .calendar tfoot .active { /* Active (pressed) style for buttons in footer */ padding: 2px 0px 0px 2px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; } /* Combo boxes (menus that display months/years for direct selection) */ .calendar .combo { position: absolute; display: none; width: 4em; top: 0px; left: 0px; cursor: default; border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; background: #d8e0e4; font-size: 90%; padding: 1px; z-index: 100; } .calendar .combo .label, .calendar .combo .label-IEfix { text-align: center; padding: 1px; } .calendar .combo .label-IEfix { width: 4em; } .calendar .combo .active { background: #c8d0d4; padding: 0px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; } .calendar .combo .hilite { background: #048; color: #aef; } .calendar td.time { border-top: 1px solid #000; padding: 1px 0px; text-align: center; background-color: #e8f0f4; } .calendar td.time .hour, .calendar td.time .minute, .calendar td.time .ampm { padding: 0px 3px 0px 4px; border: 1px solid #889; font-weight: bold; background-color: #fff; } .calendar td.time .ampm { text-align: center; } .calendar td.time .colon { padding: 0px 2px 0px 3px; font-weight: bold; } .calendar td.time span.hilite { border-color: #000; background-color: #667; color: #fff; } .calendar td.time span.active { border-color: #f00; background-color: #000; color: #0f0; } zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/0000755000177100020040000000000011573441236026446 5ustar menesismenesis00000000000000zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-da.js0000644000177100020040000000665411573441231031145 0ustar menesismenesis00000000000000// ** I18N // Calendar DA language // Author: Michael Thingmand Henriksen, // Encoding: any // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("Søndag", "Mandag", "Tirsdag", "Onsdag", "Torsdag", "Fredag", "Lørdag", "Søndag"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("Søn", "Man", "Tir", "Ons", "Tor", "Fre", "Lør", "Søn"); // full month names Calendar._MN = new Array ("Januar", "Februar", "Marts", "April", "Maj", "Juni", "Juli", "August", "September", "Oktober", "November", "December"); // short month names Calendar._SMN = new Array ("Jan", "Feb", "Mar", "Apr", "Maj", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "Om Kalenderen"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "For den seneste version besøg: http://www.dynarch.com/projects/calendar/\n"; + "Distribueret under GNU LGPL. Se http://gnu.org/licenses/lgpl.html for detajler." + "\n\n" + "Valg af dato:\n" + "- Brug \xab, \xbb knapperne for at vælge Ã¥r\n" + "- Brug " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " knapperne for at vælge mÃ¥ned\n" + "- Hold knappen pÃ¥ musen nede pÃ¥ knapperne ovenfor for hurtigere valg."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Valg af tid:\n" + "- Klik pÃ¥ en vilkÃ¥rlig del for større værdi\n" + "- eller Shift-klik for for mindre værdi\n" + "- eller klik og træk for hurtigere valg."; Calendar._TT["PREV_YEAR"] = "Ét Ã¥r tilbage (hold for menu)"; Calendar._TT["PREV_MONTH"] = "Én mÃ¥ned tilbage (hold for menu)"; Calendar._TT["GO_TODAY"] = "GÃ¥ til i dag"; Calendar._TT["NEXT_MONTH"] = "Én mÃ¥ned frem (hold for menu)"; Calendar._TT["NEXT_YEAR"] = "Ét Ã¥r frem (hold for menu)"; Calendar._TT["SEL_DATE"] = "Vælg dag"; Calendar._TT["DRAG_TO_MOVE"] = "Træk vinduet"; Calendar._TT["PART_TODAY"] = " (i dag)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "Vis %s først"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Luk"; Calendar._TT["TODAY"] = "I dag"; Calendar._TT["TIME_PART"] = "(Shift-)klik eller træk for at ændre værdi"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y"; Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; Calendar._TT["WK"] = "Uge"; Calendar._TT["TIME"] = "Tid:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-ca.js0000644000177100020040000000702711573441231031137 0ustar menesismenesis00000000000000// ** I18N // Calendar CA language // Author: Mihai Bazon, // Encoding: any // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("Diumenge", "Dilluns", "Dimarts", "Dimecres", "Dijous", "Divendres", "Dissabte", "Diumenge"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("Diu", "Dil", "Dmt", "Dmc", "Dij", "Div", "Dis", "Diu"); // full month names Calendar._MN = new Array ("Gener", "Febrer", "Març", "Abril", "Maig", "Juny", "Juliol", "Agost", "Setembre", "Octubre", "Novembre", "Desembre"); // short month names Calendar._SMN = new Array ("Gen", "Feb", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Oct", "Nov", "Des"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "Sobre el calendari"; Calendar._TT["ABOUT"] = "DHTML Selector de Data/Hora\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "For latest version visit: http://www.dynarch.com/projects/calendar/\n" + "Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + "\n\n" + "Sel.lecció de Dates:\n" + "- Fes servir els botons \xab, \xbb per sel.leccionar l'any\n" + "- Fes servir els botons " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " per se.lecciconar el mes\n" + "- Manté el ratolí apretat en qualsevol dels anteriors per sel.lecció ràpida."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Time selection:\n" + "- claca en qualsevol de les parts de la hora per augmentar-les\n" + "- o Shift-click per decrementar-la\n" + "- or click and arrastra per sel.lecció ràpida."; Calendar._TT["PREV_YEAR"] = "Any anterior (Mantenir per menu)"; Calendar._TT["PREV_MONTH"] = "Mes anterior (Mantenir per menu)"; Calendar._TT["GO_TODAY"] = "Anar a avui"; Calendar._TT["NEXT_MONTH"] = "Mes següent (Mantenir per menu)"; Calendar._TT["NEXT_YEAR"] = "Any següent (Mantenir per menu)"; Calendar._TT["SEL_DATE"] = "Sel.leccionar data"; Calendar._TT["DRAG_TO_MOVE"] = "Arrastrar per moure"; Calendar._TT["PART_TODAY"] = " (avui)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "Mostra %s primer"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Tanca"; Calendar._TT["TODAY"] = "Avui"; Calendar._TT["TIME_PART"] = "(Shift-)Click a arrastra per canviar el valor"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; Calendar._TT["WK"] = "st"; Calendar._TT["TIME"] = "Hora:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-hu.js0000644000177100020040000000715711573441231031174 0ustar menesismenesis00000000000000// ** I18N // Calendar HU language // Author: ??? // Modifier: KARASZI Istvan, // Encoding: any // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("Vasárnap", "Hétfõ", "Kedd", "Szerda", "Csütörtök", "Péntek", "Szombat", "Vasárnap"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("v", "h", "k", "sze", "cs", "p", "szo", "v"); // full month names Calendar._MN = new Array ("január", "február", "március", "április", "május", "június", "július", "augusztus", "szeptember", "október", "november", "december"); // short month names Calendar._SMN = new Array ("jan", "feb", "már", "ápr", "máj", "jún", "júl", "aug", "sze", "okt", "nov", "dec"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "A kalendáriumról"; Calendar._TT["ABOUT"] = "DHTML dátum/idõ kiválasztó\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "a legfrissebb verzió megtalálható: http://www.dynarch.com/projects/calendar/\n" + "GNU LGPL alatt terjesztve. Lásd a http://gnu.org/licenses/lgpl.html oldalt a részletekhez." + "\n\n" + "Dátum választás:\n" + "- használja a \xab, \xbb gombokat az év kiválasztásához\n" + "- használja a " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " gombokat a hónap kiválasztásához\n" + "- tartsa lenyomva az egérgombot a gyors választáshoz."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Idõ választás:\n" + "- kattintva növelheti az idõt\n" + "- shift-tel kattintva csökkentheti\n" + "- lenyomva tartva és húzva gyorsabban kiválaszthatja."; Calendar._TT["PREV_YEAR"] = "Elõzõ év (tartsa nyomva a menühöz)"; Calendar._TT["PREV_MONTH"] = "Elõzõ hónap (tartsa nyomva a menühöz)"; Calendar._TT["GO_TODAY"] = "Mai napra ugrás"; Calendar._TT["NEXT_MONTH"] = "Köv. hónap (tartsa nyomva a menühöz)"; Calendar._TT["NEXT_YEAR"] = "Köv. év (tartsa nyomva a menühöz)"; Calendar._TT["SEL_DATE"] = "Válasszon dátumot"; Calendar._TT["DRAG_TO_MOVE"] = "Húzza a mozgatáshoz"; Calendar._TT["PART_TODAY"] = " (ma)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "%s legyen a hét elsõ napja"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Bezár"; Calendar._TT["TODAY"] = "Ma"; Calendar._TT["TIME_PART"] = "(Shift-)Klikk vagy húzás az érték változtatásához"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; Calendar._TT["TT_DATE_FORMAT"] = "%b %e, %a"; Calendar._TT["WK"] = "hét"; Calendar._TT["TIME"] = "idõ:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-al.js0000644000177100020040000000412711573441231031146 0ustar menesismenesis00000000000000// Calendar ALBANIAN language //author Rigels Gordani rige@hotmail.com // ditet Calendar._DN = new Array ("E Diele", "E Hene", "E Marte", "E Merkure", "E Enjte", "E Premte", "E Shtune", "E Diele"); //ditet shkurt Calendar._SDN = new Array ("Die", "Hen", "Mar", "Mer", "Enj", "Pre", "Sht", "Die"); // muajt Calendar._MN = new Array ("Janar", "Shkurt", "Mars", "Prill", "Maj", "Qeshor", "Korrik", "Gusht", "Shtator", "Tetor", "Nentor", "Dhjetor"); // muajte shkurt Calendar._SMN = new Array ("Jan", "Shk", "Mar", "Pri", "Maj", "Qes", "Kor", "Gus", "Sht", "Tet", "Nen", "Dhj"); // ndihmesa Calendar._TT = {}; Calendar._TT["INFO"] = "Per kalendarin"; Calendar._TT["ABOUT"] = "Zgjedhes i ores/dates ne DHTML \n" + "\n\n" +"Zgjedhja e Dates:\n" + "- Perdor butonat \xab, \xbb per te zgjedhur vitin\n" + "- Perdor butonat" + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " per te zgjedhur muajin\n" + "- Mbani shtypur butonin e mousit per nje zgjedje me te shpejte."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Zgjedhja e kohes:\n" + "- Kliko tek ndonje nga pjeset e ores per ta rritur ate\n" + "- ose kliko me Shift per ta zvogeluar ate\n" + "- ose cliko dhe terhiq per zgjedhje me te shpejte."; Calendar._TT["PREV_YEAR"] = "Viti i shkuar (prit per menune)"; Calendar._TT["PREV_MONTH"] = "Muaji i shkuar (prit per menune)"; Calendar._TT["GO_TODAY"] = "Sot"; Calendar._TT["NEXT_MONTH"] = "Muaji i ardhshem (prit per menune)"; Calendar._TT["NEXT_YEAR"] = "Viti i ardhshem (prit per menune)"; Calendar._TT["SEL_DATE"] = "Zgjidh daten"; Calendar._TT["DRAG_TO_MOVE"] = "Terhiqe per te levizur"; Calendar._TT["PART_TODAY"] = " (sot)"; // "%s" eshte dita e pare e javes // %s do te zevendesohet me emrin e dite Calendar._TT["DAY_FIRST"] = "Trego te %s te paren"; Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Mbyll"; Calendar._TT["TODAY"] = "Sot"; Calendar._TT["TIME_PART"] = "Kliko me (Shift-)ose terhiqe per te ndryshuar vleren"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; Calendar._TT["WK"] = "Java"; Calendar._TT["TIME"] = "Koha:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-fr.js0000644000177100020040000000743611573441231031167 0ustar menesismenesis00000000000000// ** I18N // Calendar EN language // Author: Mihai Bazon, // Encoding: any // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // Translator: David Duret, from previous french version // full day names Calendar._DN = new Array ("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi", "Dimanche"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // First day of the week. "0" means display Sunday first, "1" means display // Monday first, etc. Calendar._FD = 1; // short day names Calendar._SDN = new Array ("Dim", "Lun", "Mar", "Mer", "Jeu", "Ven", "Sam", "Dim"); // full month names Calendar._MN = new Array ("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"); // short month names Calendar._SMN = new Array ("Jan", "Fev", "Mar", "Avr", "Mai", "Juin", "Juil", "Aout", "Sep", "Oct", "Nov", "Dec"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "A propos du calendrier"; Calendar._TT["ABOUT"] = "DHTML Date/Heure Selecteur\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "Pour la derniere version visitez : http://www.dynarch.com/projects/calendar/\n" + "Distribué par GNU LGPL. Voir http://gnu.org/licenses/lgpl.html pour les details." + "\n\n" + "Selection de la date :\n" + "- Utiliser les bouttons \xab, \xbb pour selectionner l\'annee\n" + "- Utiliser les bouttons " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pour selectionner les mois\n" + "- Garder la souris sur n'importe quels boutons pour une selection plus rapide"; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Selection de l\'heure :\n" + "- Cliquer sur heures ou minutes pour incrementer\n" + "- ou Maj-clic pour decrementer\n" + "- ou clic et glisser-deplacer pour une selection plus rapide"; Calendar._TT["PREV_YEAR"] = "Année préc. (maintenir pour menu)"; Calendar._TT["PREV_MONTH"] = "Mois préc. (maintenir pour menu)"; Calendar._TT["GO_TODAY"] = "Atteindre la date du jour"; Calendar._TT["NEXT_MONTH"] = "Mois suiv. (maintenir pour menu)"; Calendar._TT["NEXT_YEAR"] = "Année suiv. (maintenir pour menu)"; Calendar._TT["SEL_DATE"] = "Sélectionner une date"; Calendar._TT["DRAG_TO_MOVE"] = "Déplacer"; Calendar._TT["PART_TODAY"] = " (Aujourd'hui)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "Afficher %s en premier"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Fermer"; Calendar._TT["TODAY"] = "Aujourd'hui"; Calendar._TT["TIME_PART"] = "(Maj-)Clic ou glisser pour modifier la valeur"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y"; Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; Calendar._TT["WK"] = "Sem."; Calendar._TT["TIME"] = "Heure :"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-ro.js0000644000177100020040000000401211573441231031163 0ustar menesismenesis00000000000000// ** I18N Calendar._DN = new Array ("Duminică", "Luni", "MarÅ£i", "Miercuri", "Joi", "Vineri", "Sâmbătă", "Duminică"); Calendar._SDN_len = 2; Calendar._MN = new Array ("Ianuarie", "Februarie", "Martie", "Aprilie", "Mai", "Iunie", "Iulie", "August", "Septembrie", "Octombrie", "Noiembrie", "Decembrie"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "Despre calendar"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "Pentru ultima versiune vizitaÅ£i: http://www.dynarch.com/projects/calendar/\n" + "Distribuit sub GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + "\n\n" + "SelecÅ£ia datei:\n" + "- FolosiÅ£i butoanele \xab, \xbb pentru a selecta anul\n" + "- FolosiÅ£i butoanele " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " pentru a selecta luna\n" + "- TineÅ£i butonul mouse-ului apăsat pentru selecÅ£ie mai rapidă."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "SelecÅ£ia orei:\n" + "- Click pe ora sau minut pentru a mări valoarea cu 1\n" + "- Sau Shift-Click pentru a micÅŸora valoarea cu 1\n" + "- Sau Click ÅŸi drag pentru a selecta mai repede."; Calendar._TT["PREV_YEAR"] = "Anul precedent (lung pt menu)"; Calendar._TT["PREV_MONTH"] = "Luna precedentă (lung pt menu)"; Calendar._TT["GO_TODAY"] = "Data de azi"; Calendar._TT["NEXT_MONTH"] = "Luna următoare (lung pt menu)"; Calendar._TT["NEXT_YEAR"] = "Anul următor (lung pt menu)"; Calendar._TT["SEL_DATE"] = "Selectează data"; Calendar._TT["DRAG_TO_MOVE"] = "Trage pentru a miÅŸca"; Calendar._TT["PART_TODAY"] = " (astăzi)"; Calendar._TT["DAY_FIRST"] = "AfiÅŸează %s prima zi"; Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "ÃŽnchide"; Calendar._TT["TODAY"] = "Astăzi"; Calendar._TT["TIME_PART"] = "(Shift-)Click sau drag pentru a selecta"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y"; Calendar._TT["TT_DATE_FORMAT"] = "%A, %d %B"; Calendar._TT["WK"] = "spt"; Calendar._TT["TIME"] = "Ora:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-nl.js0000644000177100020040000000427211573441231031164 0ustar menesismenesis00000000000000// ** I18N Calendar._DN = new Array ("Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag", "Zondag"); Calendar._SDN_len = 2; Calendar._MN = new Array ("Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "Info"; Calendar._TT["ABOUT"] = "DHTML Datum/Tijd Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + "Ga voor de meest recente versie naar: http://www.dynarch.com/projects/calendar/\n" + "Verspreid onder de GNU LGPL. Zie http://gnu.org/licenses/lgpl.html voor details." + "\n\n" + "Datum selectie:\n" + "- Gebruik de \xab \xbb knoppen om een jaar te selecteren\n" + "- Gebruik de " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " knoppen om een maand te selecteren\n" + "- Houd de muis ingedrukt op de genoemde knoppen voor een snellere selectie."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Tijd selectie:\n" + "- Klik op een willekeurig onderdeel van het tijd gedeelte om het te verhogen\n" + "- of Shift-klik om het te verlagen\n" + "- of klik en sleep voor een snellere selectie."; //Calendar._TT["TOGGLE"] = "Selecteer de eerste week-dag"; Calendar._TT["PREV_YEAR"] = "Vorig jaar (ingedrukt voor menu)"; Calendar._TT["PREV_MONTH"] = "Vorige maand (ingedrukt voor menu)"; Calendar._TT["GO_TODAY"] = "Ga naar Vandaag"; Calendar._TT["NEXT_MONTH"] = "Volgende maand (ingedrukt voor menu)"; Calendar._TT["NEXT_YEAR"] = "Volgend jaar (ingedrukt voor menu)"; Calendar._TT["SEL_DATE"] = "Selecteer datum"; Calendar._TT["DRAG_TO_MOVE"] = "Klik en sleep om te verplaatsen"; Calendar._TT["PART_TODAY"] = " (vandaag)"; //Calendar._TT["MON_FIRST"] = "Toon Maandag eerst"; //Calendar._TT["SUN_FIRST"] = "Toon Zondag eerst"; Calendar._TT["DAY_FIRST"] = "Toon %s eerst"; Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Sluiten"; Calendar._TT["TODAY"] = "(vandaag)"; Calendar._TT["TIME_PART"] = "(Shift-)Klik of sleep om de waarde te veranderen"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y"; Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b %Y"; Calendar._TT["WK"] = "wk"; Calendar._TT["TIME"] = "Tijd:";zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-lv.js0000644000177100020040000000712011573441231031167 0ustar menesismenesis00000000000000// ** I18N // Calendar LV language // Author: Juris Valdovskis, // Encoding: cp1257 // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("Svçtdiena", "Pirmdiena", "Otrdiena", "Treðdiena", "Ceturdiena", "Piektdiena", "Sestdiena", "Svçtdiena"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("Sv", "Pr", "Ot", "Tr", "Ce", "Pk", "Se", "Sv"); // full month names Calendar._MN = new Array ("Janvâris", "Februâris", "Marts", "Aprîlis", "Maijs", "Jûnijs", "Jûlijs", "Augusts", "Septembris", "Oktobris", "Novembris", "Decembris"); // short month names Calendar._SMN = new Array ("Jan", "Feb", "Mar", "Apr", "Mai", "Jûn", "Jûl", "Aug", "Sep", "Okt", "Nov", "Dec"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "Par kalendâru"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "For latest version visit: http://www.dynarch.com/projects/calendar/\n" + "Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + "\n\n" + "Datuma izvçle:\n" + "- Izmanto \xab, \xbb pogas, lai izvçlçtos gadu\n" + "- Izmanto " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "pogas, lai izvçlçtos mçnesi\n" + "- Turi nospiestu peles pogu uz jebkuru no augstâk minçtajâm pogâm, lai paâtrinâtu izvçli."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Laika izvçle:\n" + "- Uzklikðíini uz jebkuru no laika daïâm, lai palielinâtu to\n" + "- vai Shift-klikðíis, lai samazinâtu to\n" + "- vai noklikðíini un velc uz attiecîgo virzienu lai mainîtu âtrâk."; Calendar._TT["PREV_YEAR"] = "Iepr. gads (turi izvçlnei)"; Calendar._TT["PREV_MONTH"] = "Iepr. mçnesis (turi izvçlnei)"; Calendar._TT["GO_TODAY"] = "Ãodien"; Calendar._TT["NEXT_MONTH"] = "Nâkoðais mçnesis (turi izvçlnei)"; Calendar._TT["NEXT_YEAR"] = "Nâkoðais gads (turi izvçlnei)"; Calendar._TT["SEL_DATE"] = "Izvçlies datumu"; Calendar._TT["DRAG_TO_MOVE"] = "Velc, lai pârvietotu"; Calendar._TT["PART_TODAY"] = " (ðodien)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "Attçlot %s kâ pirmo"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "1,7"; Calendar._TT["CLOSE"] = "Aizvçrt"; Calendar._TT["TODAY"] = "Ãodien"; Calendar._TT["TIME_PART"] = "(Shift-)Klikðíis vai pârvieto, lai mainîtu"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y"; Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b"; Calendar._TT["WK"] = "wk"; Calendar._TT["TIME"] = "Laiks:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-lt.js0000644000177100020040000000713311573441231031171 0ustar menesismenesis00000000000000// ** I18N // Calendar LT language // Author: Martynas Majeris, // Encoding: UTF-8 // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("Sekmadienis", "Pirmadienis", "Antradienis", "TreÄiadienis", "Ketvirtadienis", "Penktadienis", "Å eÅ¡tadienis", "Sekmadienis"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // First day of the week. "0" means display Sunday first, "1" means display // Monday first, etc. Calendar._FD = 1; // short day names Calendar._SDN = new Array ("Sek", "Pir", "Ant", "Tre", "Ket", "Pen", "Å eÅ¡", "Sek"); // full month names Calendar._MN = new Array ("Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis", "Liepa", "RugpjÅ«tis", "RugsÄ—jis", "Spalis", "Lapkritis", "Gruodis"); // short month names Calendar._SMN = new Array ("Sau", "Vas", "Kov", "Bal", "Geg", "Bir", "Lie", "Rgp", "Rgs", "Spa", "Lap", "Gru"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "Apie kalendorių"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "NaujausiÄ… versijÄ… rasite: http://www.dynarch.com/projects/calendar/\n" + "Platinamas pagal GNU LGPL licencijÄ…. Aplankykite http://gnu.org/licenses/lgpl.html" + "\n\n" + "Datos pasirinkimas:\n" + "- Metų pasirinkimas: \xab, \xbb\n" + "- MÄ—nesio pasirinkimas: " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + "\n" + "- Nuspauskite ir laikykite pelÄ—s klavišą greitesniam pasirinkimui."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Laiko pasirinkimas:\n" + "- Spustelkite ant valandų arba minuÄių - skaiÄius padidÄ—s vienetu.\n" + "- Jei spausite kartu su Shift, skaiÄius sumažės.\n" + "- Greitam pasirinkimui spustelkite ir pajudinkite pelÄ™."; Calendar._TT["PREV_YEAR"] = "Ankstesni metai (laikykite, jei norite meniu)"; Calendar._TT["PREV_MONTH"] = "Ankstesnis mÄ—nuo (laikykite, jei norite meniu)"; Calendar._TT["GO_TODAY"] = "Pasirinkti Å¡iandienÄ…"; Calendar._TT["NEXT_MONTH"] = "Kitas mÄ—nuo (laikykite, jei norite meniu)"; Calendar._TT["NEXT_YEAR"] = "Kiti metai (laikykite, jei norite meniu)"; Calendar._TT["SEL_DATE"] = "Pasirinkite datÄ…"; Calendar._TT["DRAG_TO_MOVE"] = "Tempkite"; Calendar._TT["PART_TODAY"] = " (Å¡iandien)"; Calendar._TT["DAY_FIRST"] = "Pirma savaitÄ—s diena - %s"; Calendar._TT["MON_FIRST"] = "Pirma savaitÄ—s diena - pirmadienis"; Calendar._TT["SUN_FIRST"] = "Pirma savaitÄ—s diena - sekmadienis"; Calendar._TT["CLOSE"] = "Uždaryti"; Calendar._TT["TODAY"] = "Å iandien"; Calendar._TT["TIME_PART"] = "Spustelkite arba tempkite jei norite pakeisti"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; Calendar._TT["TT_DATE_FORMAT"] = "%A, %Y-%m-%d"; Calendar._TT["WK"] = "sav"; Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["TIME"] = "Laikas:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-es.js0000644000177100020040000000754711573441231031172 0ustar menesismenesis00000000000000// ** I18N // Calendar ES (spanish) language // Author: Mihai Bazon, // Updater: Servilio Afre Puentes // Updated: 2004-06-03 // Encoding: utf-8 // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb", "Dom"); // First day of the week. "0" means display Sunday first, "1" means display // Monday first, etc. Calendar._FD = 1; // full month names Calendar._MN = new Array ("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"); // short month names Calendar._SMN = new Array ("Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "Acerca del calendario"; Calendar._TT["ABOUT"] = "Selector DHTML de Fecha/Hora\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "Para conseguir la última versión visite: http://www.dynarch.com/projects/calendar/\n" + "Distribuido bajo licencia GNU LGPL. Visite http://gnu.org/licenses/lgpl.html para más detalles." + "\n\n" + "Selección de fecha:\n" + "- Use los botones \xab, \xbb para seleccionar el año\n" + "- Use los botones " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para seleccionar el mes\n" + "- Mantenga pulsado el ratón en cualquiera de estos botones para una selección rápida."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Selección de hora:\n" + "- Pulse en cualquiera de las partes de la hora para incrementarla\n" + "- o pulse las mayúsculas mientras hace clic para decrementarla\n" + "- o haga clic y arrastre el ratón para una selección más rápida."; Calendar._TT["PREV_YEAR"] = "Año anterior (mantener para menú)"; Calendar._TT["PREV_MONTH"] = "Mes anterior (mantener para menú)"; Calendar._TT["GO_TODAY"] = "Ir a hoy"; Calendar._TT["NEXT_MONTH"] = "Mes siguiente (mantener para menú)"; Calendar._TT["NEXT_YEAR"] = "Año siguiente (mantener para menú)"; Calendar._TT["SEL_DATE"] = "Seleccionar fecha"; Calendar._TT["DRAG_TO_MOVE"] = "Arrastrar para mover"; Calendar._TT["PART_TODAY"] = " (hoy)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "Hacer %s primer día de la semana"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Cerrar"; Calendar._TT["TODAY"] = "Hoy"; Calendar._TT["TIME_PART"] = "(Mayúscula-)Clic o arrastre para cambiar valor"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y"; Calendar._TT["TT_DATE_FORMAT"] = "%A, %e de %B de %Y"; Calendar._TT["WK"] = "sem"; Calendar._TT["TIME"] = "Hora:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-bg.js0000644000177100020040000000764611573441231031153 0ustar menesismenesis00000000000000// ** I18N // Calendar BG language // Author: Mihai Bazon, // Translator: Valentin Sheiretsky, // Encoding: Windows-1251 // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("Ãåäåëÿ", "Ãîíåäåëíèê", "Âòîðíèê", "Ñðÿäà", "×åòâúðòúê", "Ãåòúê", "Ñúáîòà", "Ãåäåëÿ"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("Ãåä", "Ãîí", "Âòî", "Ñðÿ", "×åò", "Ãåò", "Ñúá", "Ãåä"); // full month names Calendar._MN = new Array ("ßíóàðè", "Ôåâðóàðè", "Ìàðò", "Àïðèë", "Ìàé", "Þíè", "Þëè", "Àâãóñò", "Ñåïòåìâðè", "Îêòîìâðè", "Ãîåìâðè", "Äåêåìâðè"); // short month names Calendar._SMN = new Array ("ßíó", "Ôåâ", "Ìàð", "Àïð", "Ìàé", "Þíè", "Þëè", "Àâã", "Ñåï", "Îêò", "Ãîå", "Äåê"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "Èíôîðìàöèÿ çà êàëåíäàðà"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "For latest version visit: http://www.dynarch.com/projects/calendar/\n" + "Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + "\n\n" + "Date selection:\n" + "- Use the \xab, \xbb buttons to select year\n" + "- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" + "- Hold mouse button on any of the above buttons for faster selection."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Time selection:\n" + "- Click on any of the time parts to increase it\n" + "- or Shift-click to decrease it\n" + "- or click and drag for faster selection."; Calendar._TT["PREV_YEAR"] = "Ãðåäíà ãîäèíà (çàäðúæòå çà ìåíþ)"; Calendar._TT["PREV_MONTH"] = "Ãðåäåí ìåñåö (çàäðúæòå çà ìåíþ)"; Calendar._TT["GO_TODAY"] = "Èçáåðåòå äíåñ"; Calendar._TT["NEXT_MONTH"] = "Ñëåäâàù ìåñåö (çàäðúæòå çà ìåíþ)"; Calendar._TT["NEXT_YEAR"] = "Ñëåäâàùà ãîäèíà (çàäðúæòå çà ìåíþ)"; Calendar._TT["SEL_DATE"] = "Èçáåðåòå äàòà"; Calendar._TT["DRAG_TO_MOVE"] = "Ãðåìåñòâàíå"; Calendar._TT["PART_TODAY"] = " (äíåñ)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "%s êàòî ïúðâè äåí"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Çàòâîðåòå"; Calendar._TT["TODAY"] = "Äíåñ"; Calendar._TT["TIME_PART"] = "(Shift-)Click èëè drag çà äà ïðîìåíèòå ñòîéíîñòòà"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; Calendar._TT["TT_DATE_FORMAT"] = "%A - %e %B %Y"; Calendar._TT["WK"] = "Ñåäì"; Calendar._TT["TIME"] = "×àñ:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-br.js0000644000177100020040000000717211573441231031160 0ustar menesismenesis00000000000000// ** I18N // Calendar pt-BR language // Author: Fernando Dourado, // Encoding: any // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("Domingo", "Segunda", "Terça", "Quarta", "Quinta", "Sexta", "Sabádo", "Domingo"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names // [No changes using default values] // full month names Calendar._MN = new Array ("Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"); // short month names // [No changes using default values] // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "Sobre o calendário"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "For latest version visit: http://www.dynarch.com/projects/calendar/\n" + "Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + "\n\n" + "Translate to portuguese Brazil (pt-BR) by Fernando Dourado (fernando.dourado@ig.com.br)\n" + "Tradução para o português Brasil (pt-BR) por Fernando Dourado (fernando.dourado@ig.com.br)" + "\n\n" + "Selecionar data:\n" + "- Use as teclas \xab, \xbb para selecionar o ano\n" + "- Use as teclas " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para selecionar o mês\n" + "- Clique e segure com o mouse em qualquer botão para selecionar rapidamente."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Selecionar hora:\n" + "- Clique em qualquer uma das partes da hora para aumentar\n" + "- ou Shift-clique para diminuir\n" + "- ou clique e arraste para selecionar rapidamente."; Calendar._TT["PREV_YEAR"] = "Ano anterior (clique e segure para menu)"; Calendar._TT["PREV_MONTH"] = "Mês anterior (clique e segure para menu)"; Calendar._TT["GO_TODAY"] = "Ir para a data atual"; Calendar._TT["NEXT_MONTH"] = "Próximo mês (clique e segure para menu)"; Calendar._TT["NEXT_YEAR"] = "Próximo ano (clique e segure para menu)"; Calendar._TT["SEL_DATE"] = "Selecione uma data"; Calendar._TT["DRAG_TO_MOVE"] = "Clique e segure para mover"; Calendar._TT["PART_TODAY"] = " (hoje)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "Exibir %s primeiro"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Fechar"; Calendar._TT["TODAY"] = "Hoje"; Calendar._TT["TIME_PART"] = "(Shift-)Clique ou arraste para mudar o valor"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y"; Calendar._TT["TT_DATE_FORMAT"] = "%d de %B de %Y"; Calendar._TT["WK"] = "sem"; Calendar._TT["TIME"] = "Hora:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-zh.js0000644000177100020040000000675411573441231031203 0ustar menesismenesis00000000000000// ** I18N // Calendar ZH language // Author: muziq, // Encoding: GB2312 or GBK // Distributed under the same terms as the calendar itself. // full day names Calendar._DN = new Array ("ÃÇÆÚÈÕ", "ÃÇÆÚÒ»", "ÃÇÆÚ¶þ", "ÃÇÆÚÈý", "ÃÇÆÚËÄ", "ÃÇÆÚÎå", "ÃÇÆÚÃù", "ÃÇÆÚÈÕ"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("ÈÕ", "Ò»", "¶þ", "Èý", "ËÄ", "ÃŽÃ¥", "Ãù", "ÈÕ"); // full month names Calendar._MN = new Array ("Ò»ÔÂ", "¶þÔÂ", "ÈýÔÂ", "ËÄÔÂ", "ÎåÔÂ", "ÃùÔÂ", "ÆßÔÂ", "°ËÔÂ", "¾ÅÔÂ", "Ê®ÔÂ", "ʮһÔÂ", "Ê®¶þÔÂ"); // short month names Calendar._SMN = new Array ("Ò»ÔÂ", "¶þÔÂ", "ÈýÔÂ", "ËÄÔÂ", "ÎåÔÂ", "ÃùÔÂ", "ÆßÔÂ", "°ËÔÂ", "¾ÅÔÂ", "Ê®ÔÂ", "ʮһÔÂ", "Ê®¶þÔÂ"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "°ïÖú"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "For latest version visit: http://www.dynarch.com/projects/calendar/\n" + "Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + "\n\n" + "Ñ¡ÔñÈÕÆÚ:\n" + "- µã»÷ \xab, \xbb °´Å¥Ñ¡ÔñÄê·Ã\n" + "- µã»÷ " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " °´Å¥Ñ¡ÔñÔ·Ã\n" + "- ³¤°´ÒÔÉð´Å¥¿É´Ó²Ëµ¥ÖÿìËÙÑ¡ÔñÄê·Ã»òÔ·Ã"; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Ñ¡Ôñʱ¼ä:\n" + "- µã»÷áʱ»ò·ÖÖÓ¿Éʹ¸ÄÊýÖµ¼ÓÒ»\n" + "- °´×¡Shift¼üµã»÷áʱ»ò·ÖÖÓ¿Éʹ¸ÄÊýÖµ¼õÒ»\n" + "- µã»÷Ãö¯Êó±ê¿É½øÃÿìËÙÑ¡Ôñ"; Calendar._TT["PREV_YEAR"] = "ÉÃÒ»Äê (°´×¡³ö²Ëµ¥)"; Calendar._TT["PREV_MONTH"] = "ÉÃÒ»Ô (°´×¡³ö²Ëµ¥)"; Calendar._TT["GO_TODAY"] = "תµ½½ñÈÕ"; Calendar._TT["NEXT_MONTH"] = "ÃÂÒ»Ô (°´×¡³ö²Ëµ¥)"; Calendar._TT["NEXT_YEAR"] = "ÃÂÒ»Äê (°´×¡³ö²Ëµ¥)"; Calendar._TT["SEL_DATE"] = "Ñ¡ÔñÈÕÆÚ"; Calendar._TT["DRAG_TO_MOVE"] = "Ãö¯"; Calendar._TT["PART_TODAY"] = " (½ñÈÕ)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "×î×ó±ßÃÔʾ%s"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "¹Ø±Õ"; Calendar._TT["TODAY"] = "½ñÈÕ"; Calendar._TT["TIME_PART"] = "(Shift-)µã»÷Êó±ê»òÃö¯¸Ä±äÖµ"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; Calendar._TT["TT_DATE_FORMAT"] = "%A, %b %eÈÕ"; Calendar._TT["WK"] = "ÖÜ"; Calendar._TT["TIME"] = "ʱ¼ä:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-de.js0000644000177100020040000000742711573441231031150 0ustar menesismenesis00000000000000// ** I18N // Calendar DE language // Author: Jack (tR), // Encoding: any // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"); // full month names Calendar._MN = new Array ("Januar", "Februar", "M\u00e4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"); // short month names Calendar._SMN = new Array ("Jan", "Feb", "M\u00e4r", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dez"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "\u00DCber dieses Kalendarmodul"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this ;-) "For latest version visit: http://www.dynarch.com/projects/calendar/\n" + "Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + "\n\n" + "Datum ausw\u00e4hlen:\n" + "- Benutzen Sie die \xab, \xbb Buttons um das Jahr zu w\u00e4hlen\n" + "- Benutzen Sie die " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " Buttons um den Monat zu w\u00e4hlen\n" + "- F\u00fcr eine Schnellauswahl halten Sie die Maustaste \u00fcber diesen Buttons fest."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Zeit ausw\u00e4hlen:\n" + "- Klicken Sie auf die Teile der Uhrzeit, um diese zu erh\u00F6hen\n" + "- oder klicken Sie mit festgehaltener Shift-Taste um diese zu verringern\n" + "- oder klicken und festhalten f\u00fcr Schnellauswahl."; Calendar._TT["TOGGLE"] = "Ersten Tag der Woche w\u00e4hlen"; Calendar._TT["PREV_YEAR"] = "Voriges Jahr (Festhalten f\u00fcr Schnellauswahl)"; Calendar._TT["PREV_MONTH"] = "Voriger Monat (Festhalten f\u00fcr Schnellauswahl)"; Calendar._TT["GO_TODAY"] = "Heute ausw\u00e4hlen"; Calendar._TT["NEXT_MONTH"] = "N\u00e4chst. Monat (Festhalten f\u00fcr Schnellauswahl)"; Calendar._TT["NEXT_YEAR"] = "N\u00e4chst. Jahr (Festhalten f\u00fcr Schnellauswahl)"; Calendar._TT["SEL_DATE"] = "Datum ausw\u00e4hlen"; Calendar._TT["DRAG_TO_MOVE"] = "Zum Bewegen festhalten"; Calendar._TT["PART_TODAY"] = " (Heute)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "Woche beginnt mit %s "; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Schlie\u00dfen"; Calendar._TT["TODAY"] = "Heute"; Calendar._TT["TIME_PART"] = "(Shift-)Klick oder Festhalten und Ziehen um den Wert zu \u00e4ndern"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%d.%m.%Y"; Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; Calendar._TT["WK"] = "wk"; Calendar._TT["TIME"] = "Zeit:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-ru.js0000644000177100020040000001040511573441231031174 0ustar menesismenesis00000000000000// ** I18N // Calendar RU language // Translation: Sly Golovanov, http://golovanov.net, // Encoding: any // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("воÑкреÑенье", "понедельник", "вторник", "Ñреда", "четверг", "пÑтница", "Ñуббота", "воÑкреÑенье"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("вÑк", "пон", "втр", "Ñрд", "чет", "пÑÑ‚", "Ñуб", "вÑк"); // full month names Calendar._MN = new Array ("Ñнварь", "февраль", "март", "апрель", "май", "июнь", "июль", "авгуÑÑ‚", "ÑентÑбрь", "октÑбрь", "ноÑбрь", "декабрь"); // short month names Calendar._SMN = new Array ("Ñнв", "фев", "мар", "апр", "май", "июн", "июл", "авг", "Ñен", "окт", "ноÑ", "дек"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "О календаре..."; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "For latest version visit: http://www.dynarch.com/projects/calendar/\n" + "Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + "\n\n" + "Как выбрать дату:\n" + "- При помощи кнопок \xab, \xbb можно выбрать год\n" + "- При помощи кнопок " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " можно выбрать меÑÑц\n" + "- Подержите Ñти кнопки нажатыми, чтобы поÑвилоÑÑŒ меню быÑтрого выбора."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Как выбрать времÑ:\n" + "- При клике на чаÑах или минутах они увеличиваютÑÑ\n" + "- при клике Ñ Ð½Ð°Ð¶Ð°Ñ‚Ð¾Ð¹ клавишей Shift они уменьшаютÑÑ\n" + "- еÑли нажать и двигать мышкой влево/вправо, они будут менÑтьÑÑ Ð±Ñ‹Ñтрее."; Calendar._TT["PREV_YEAR"] = "Ðа год назад (удерживать Ð´Ð»Ñ Ð¼ÐµÐ½ÑŽ)"; Calendar._TT["PREV_MONTH"] = "Ðа меÑÑц назад (удерживать Ð´Ð»Ñ Ð¼ÐµÐ½ÑŽ)"; Calendar._TT["GO_TODAY"] = "СегоднÑ"; Calendar._TT["NEXT_MONTH"] = "Ðа меÑÑц вперед (удерживать Ð´Ð»Ñ Ð¼ÐµÐ½ÑŽ)"; Calendar._TT["NEXT_YEAR"] = "Ðа год вперед (удерживать Ð´Ð»Ñ Ð¼ÐµÐ½ÑŽ)"; Calendar._TT["SEL_DATE"] = "Выберите дату"; Calendar._TT["DRAG_TO_MOVE"] = "ПеретаÑкивайте мышкой"; Calendar._TT["PART_TODAY"] = " (ÑегоднÑ)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "Первый день недели будет %s"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Закрыть"; Calendar._TT["TODAY"] = "СегоднÑ"; Calendar._TT["TIME_PART"] = "(Shift-)клик или нажать и двигать"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; Calendar._TT["TT_DATE_FORMAT"] = "%e %b, %a"; Calendar._TT["WK"] = "нед"; Calendar._TT["TIME"] = "ВремÑ:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-sp.js0000644000177100020040000000572111573441231031175 0ustar menesismenesis00000000000000// ** I18N // Calendar SP language // Author: Rafael Velasco // Encoding: any // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("Domingo", "Lunes", "Martes", "Miercoles", "Jueves", "Viernes", "Sabado", "Domingo"); Calendar._SDN = new Array ("Dom", "Lun", "Mar", "Mie", "Jue", "Vie", "Sab", "Dom"); // full month names Calendar._MN = new Array ("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"); // short month names Calendar._SMN = new Array ("Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "Información del Calendario"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "Nuevas versiones en: http://www.dynarch.com/projects/calendar/\n" + "Distribuida bajo licencia GNU LGPL. Para detalles vea http://gnu.org/licenses/lgpl.html ." + "\n\n" + "Selección de Fechas:\n" + "- Use \xab, \xbb para seleccionar el año\n" + "- Use " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para seleccionar el mes\n" + "- Mantenga presionado el botón del ratón en cualquiera de las opciones superiores para un acceso rapido ."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Selección del Reloj:\n" + "- Seleccione la hora para cambiar el reloj\n" + "- o presione Shift-click para disminuirlo\n" + "- o presione click y arrastre del ratón para una selección rapida."; Calendar._TT["PREV_YEAR"] = "Año anterior (Presione para menu)"; Calendar._TT["PREV_MONTH"] = "Mes Anterior (Presione para menu)"; Calendar._TT["GO_TODAY"] = "Ir a Hoy"; Calendar._TT["NEXT_MONTH"] = "Mes Siguiente (Presione para menu)"; Calendar._TT["NEXT_YEAR"] = "Año Siguiente (Presione para menu)"; Calendar._TT["SEL_DATE"] = "Seleccione fecha"; Calendar._TT["DRAG_TO_MOVE"] = "Arrastre y mueva"; Calendar._TT["PART_TODAY"] = " (Hoy)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "Mostrar %s primero"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Cerrar"; Calendar._TT["TODAY"] = "Hoy"; Calendar._TT["TIME_PART"] = "(Shift-)Click o arrastra para cambar el valor"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%dd-%mm-%yy"; Calendar._TT["TT_DATE_FORMAT"] = "%A, %e de %B de %Y"; Calendar._TT["WK"] = "Sm"; Calendar._TT["TIME"] = "Hora:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-ja.js0000644000177100020040000000677511573441231031157 0ustar menesismenesis00000000000000// ** I18N // Calendar EN language // Author: Mihai Bazon, // Encoding: any // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("日曜", "月曜", "ç«æ›œ", "水曜", "木曜", "金曜", "土曜", "日曜"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("æ—¥", "月", "ç«", "æ°´", "木", "金", "土", "æ—¥"); // First day of the week. "0" means display Sunday first, "1" means display // Monday first, etc. Calendar._FD = 0; // full month names Calendar._MN = new Array ("一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "乿œˆ", "åæœˆ", "å一月", "å二月"); // short month names Calendar._SMN = new Array ("1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "カレンダーã«ã¤ã„ã¦"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "For latest version visit: http://www.dynarch.com/projects/calendar/\n" + "Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + "\n\n" + "Date selection:\n" + "- Use the \xab, \xbb buttons to select year\n" + "- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" + "- Hold mouse button on any of the above buttons for faster selection."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Time selection:\n" + "- Click on any of the time parts to increase it\n" + "- or Shift-click to decrease it\n" + "- or click and drag for faster selection."; Calendar._TT["PREV_YEAR"] = "å‰å¹´"; Calendar._TT["PREV_MONTH"] = "先月"; Calendar._TT["GO_TODAY"] = "今日ã«è¡Œã"; Calendar._TT["NEXT_MONTH"] = "次月"; Calendar._TT["NEXT_YEAR"] = "次年"; Calendar._TT["SEL_DATE"] = "æ—¥ä»˜ã‚’é¸æŠž"; Calendar._TT["DRAG_TO_MOVE"] = "ドラッグã—ã¦å‹•ã‹ã™"; Calendar._TT["PART_TODAY"] = " (今日)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "%s を先頭ã«è¡¨ç¤º"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "é–‰ã˜ã‚‹"; Calendar._TT["TODAY"] = "今日"; Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; Calendar._TT["TT_DATE_FORMAT"] = "%b %e (%a)"; Calendar._TT["WK"] = "週"; Calendar._TT["TIME"] = "時間:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-big5.js0000644000177100020040000000712611573441231031402 0ustar menesismenesis00000000000000// ** I18N // Calendar big5 language // Author: Gary Fu, // Encoding: big5 // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("¬P´Ã¤é", "¬P´Ã¤@", "¬P´Ã¤G", "¬P´Ã¤T", "¬P´ÃÂ¥|", "¬P´Ã¤­", "¬P´Ã¤»", "¬P´Ã¤é"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("¤é", "¤@", "¤G", "¤T", "Â¥|", "¤­", "¤»", "¤é"); // full month names Calendar._MN = new Array ("¤@¤ë", "¤G¤ë", "¤T¤ë", "Â¥|¤ë", "¤­¤ë", "¤»¤ë", "¤C¤ë", "¤K¤ë", "¤E¤ë", "¤Q¤ë", "¤Q¤@¤ë", "¤Q¤G¤ë"); // short month names Calendar._SMN = new Array ("¤@¤ë", "¤G¤ë", "¤T¤ë", "Â¥|¤ë", "¤­¤ë", "¤»¤ë", "¤C¤ë", "¤K¤ë", "¤E¤ë", "¤Q¤ë", "¤Q¤@¤ë", "¤Q¤G¤ë"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "Ãö©ó"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "For latest version visit: http://www.dynarch.com/projects/calendar/\n" + "Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + "\n\n" + "¤é´Ã¿ï¾Ü¤èªk:\n" + "- ¨Ã¥Î \xab, \xbb «ö¶sÂ¥i¿ï¾Ü¦~¥÷\n" + "- ¨Ã¥Î " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " «ö¶sÂ¥i¿ï¾Ü¤ë¥÷\n" + "- «ö¦í¤W­±ªº«ö¶sÂ¥iÂ¥HÂ¥[§Ö¿ï¨ú"; Calendar._TT["ABOUT_TIME"] = "\n\n" + "®É¶¡¿ï¾Ü¤èªk:\n" + "- ÂIÀ»¥ô¦óªº®É¶¡³¡¥÷¥i¼WÂ¥[¨ä­È\n" + "- ¦P®É«öShiftÃä¦AÂIÀ»¥i´î¤Ö¨ä­È\n" + "- ÂIÀ»¨Ã©ì¦²¥iÂ¥[§Ö§ïÅܪº­È"; Calendar._TT["PREV_YEAR"] = "¤W¤@¦~ («ö¦í¿ï³æ)"; Calendar._TT["PREV_MONTH"] = "¤U¤@¦~ («ö¦í¿ï³æ)"; Calendar._TT["GO_TODAY"] = "¨ì¤µ¤é"; Calendar._TT["NEXT_MONTH"] = "¤W¤@¤ë («ö¦í¿ï³æ)"; Calendar._TT["NEXT_YEAR"] = "¤U¤@¤ë («ö¦í¿ï³æ)"; Calendar._TT["SEL_DATE"] = "¿ï¾Ü¤é´Ã"; Calendar._TT["DRAG_TO_MOVE"] = "©ì¦²"; Calendar._TT["PART_TODAY"] = " (¤µ¤é)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "±N %s Åã¥Ü¦b«e"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Ãö³¬"; Calendar._TT["TODAY"] = "¤µ¤é"; Calendar._TT["TIME_PART"] = "ÂIÀ»or©ì¦²¥i§ïÅܮɶ¡(¦P®É«öShift¬°´î)"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; Calendar._TT["WK"] = "¶g"; Calendar._TT["TIME"] = "Time:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-pt.js0000644000177100020040000000670611573441231031202 0ustar menesismenesis00000000000000// ** I18N // Calendar pt_BR language // Author: Adalberto Machado, // Encoding: any // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("Domingo", "Segunda", "Terca", "Quarta", "Quinta", "Sexta", "Sabado", "Domingo"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sab", "Dom"); // full month names Calendar._MN = new Array ("Janeiro", "Fevereiro", "Marco", "Abril", "Maio", "Junho", "Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"); // short month names Calendar._SMN = new Array ("Jan", "Fev", "Mar", "Abr", "Mai", "Jun", "Jul", "Ago", "Set", "Out", "Nov", "Dez"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "Sobre o calendario"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "Ultima versao visite: http://www.dynarch.com/projects/calendar/\n" + "Distribuido sobre GNU LGPL. Veja http://gnu.org/licenses/lgpl.html para detalhes." + "\n\n" + "Selecao de data:\n" + "- Use os botoes \xab, \xbb para selecionar o ano\n" + "- Use os botoes " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " para selecionar o mes\n" + "- Segure o botao do mouse em qualquer um desses botoes para selecao rapida."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Selecao de hora:\n" + "- Clique em qualquer parte da hora para incrementar\n" + "- ou Shift-click para decrementar\n" + "- ou clique e segure para selecao rapida."; Calendar._TT["PREV_YEAR"] = "Ant. ano (segure para menu)"; Calendar._TT["PREV_MONTH"] = "Ant. mes (segure para menu)"; Calendar._TT["GO_TODAY"] = "Hoje"; Calendar._TT["NEXT_MONTH"] = "Prox. mes (segure para menu)"; Calendar._TT["NEXT_YEAR"] = "Prox. ano (segure para menu)"; Calendar._TT["SEL_DATE"] = "Selecione a data"; Calendar._TT["DRAG_TO_MOVE"] = "Arraste para mover"; Calendar._TT["PART_TODAY"] = " (hoje)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "Mostre %s primeiro"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Fechar"; Calendar._TT["TODAY"] = "Hoje"; Calendar._TT["TIME_PART"] = "(Shift-)Click ou arraste para mudar valor"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%d/%m/%Y"; Calendar._TT["TT_DATE_FORMAT"] = "%a, %e %b"; Calendar._TT["WK"] = "sm"; Calendar._TT["TIME"] = "Hora:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-cs-win.js0000644000177100020040000000522111573441231031746 0ustar menesismenesis00000000000000/* calendar-cs-win.js language: Czech encoding: windows-1250 author: Lubos Jerabek (xnet@seznam.cz) Jan Uhlir (espinosa@centrum.cz) */ // ** I18N Calendar._DN = new Array('Nedìle','Pondìlí','Úterý','Støeda','Ètvrtek','Pátek','Sobota','Nedìle'); Calendar._SDN = new Array('Ne','Po','Út','St','Èt','Pá','So','Ne'); Calendar._MN = new Array('Leden','Únor','Bøezen','Duben','Kvìten','Èerven','Èervenec','Srpen','Záøí','Øíjen','Listopad','Prosinec'); Calendar._SMN = new Array('Led','Úno','Bøe','Dub','Kvì','Èrv','Èvc','Srp','Záø','Øíj','Lis','Pro'); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "O komponentì kalendáø"; Calendar._TT["TOGGLE"] = "Zmìna prvního dne v týdnu"; Calendar._TT["PREV_YEAR"] = "Pøedchozí rok (pøidrž pro menu)"; Calendar._TT["PREV_MONTH"] = "Pøedchozí mìsíc (pøidrž pro menu)"; Calendar._TT["GO_TODAY"] = "Dnešní datum"; Calendar._TT["NEXT_MONTH"] = "Další mìsíc (pøidrž pro menu)"; Calendar._TT["NEXT_YEAR"] = "Další rok (pøidrž pro menu)"; Calendar._TT["SEL_DATE"] = "Vyber datum"; Calendar._TT["DRAG_TO_MOVE"] = "Chy a táhni, pro pøesun"; Calendar._TT["PART_TODAY"] = " (dnes)"; Calendar._TT["MON_FIRST"] = "Ukaž jako první Pondìlí"; //Calendar._TT["SUN_FIRST"] = "Ukaž jako první Nedìli"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "For latest version visit: http://www.dynarch.com/projects/calendar/\n" + "Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + "\n\n" + "Výbìr datumu:\n" + "- Use the \xab, \xbb buttons to select year\n" + "- Použijte tlaèítka " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " k výbìru mìsíce\n" + "- Podržte tlaèítko myši na jakémkoliv z tìch tlaèítek pro rychlejší výbìr."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Výbìr èasu:\n" + "- Kliknìte na jakoukoliv z èástí výbìru èasu pro zvýšení.\n" + "- nebo Shift-click pro snížení\n" + "- nebo kliknìte a táhnìte pro rychlejší výbìr."; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "Zobraz %s první"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Zavøít"; Calendar._TT["TODAY"] = "Dnes"; Calendar._TT["TIME_PART"] = "(Shift-)Klikni nebo táhni pro zmìnu hodnoty"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "d.m.yy"; Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; Calendar._TT["WK"] = "wk"; Calendar._TT["TIME"] = "Èas:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-en.js0000644000177100020040000000702011573441231031147 0ustar menesismenesis00000000000000// ** I18N // Calendar EN language // Author: Mihai Bazon, // Encoding: any // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"); // First day of the week. "0" means display Sunday first, "1" means display // Monday first, etc. Calendar._FD = 0; // full month names Calendar._MN = new Array ("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"); // short month names Calendar._SMN = new Array ("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "About the calendar"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "For latest version visit: http://www.dynarch.com/projects/calendar/\n" + "Distributed under GNU LGPL. See http://gnu.org/licenses/lgpl.html for details." + "\n\n" + "Date selection:\n" + "- Use the \xab, \xbb buttons to select year\n" + "- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" + "- Hold mouse button on any of the above buttons for faster selection."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Time selection:\n" + "- Click on any of the time parts to increase it\n" + "- or Shift-click to decrease it\n" + "- or click and drag for faster selection."; Calendar._TT["PREV_YEAR"] = "Prev. year (hold for menu)"; Calendar._TT["PREV_MONTH"] = "Prev. month (hold for menu)"; Calendar._TT["GO_TODAY"] = "Go Today"; Calendar._TT["NEXT_MONTH"] = "Next month (hold for menu)"; Calendar._TT["NEXT_YEAR"] = "Next year (hold for menu)"; Calendar._TT["SEL_DATE"] = "Select date"; Calendar._TT["DRAG_TO_MOVE"] = "Drag to move"; Calendar._TT["PART_TODAY"] = " (today)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "Display %s first"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Close"; Calendar._TT["TODAY"] = "Today"; Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d"; Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e"; Calendar._TT["WK"] = "wk"; Calendar._TT["TIME"] = "Time:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/languages/calendar-it.js0000644000177100020040000000706111573441231031166 0ustar menesismenesis00000000000000// ** I18N // Calendar EN language // Author: Mihai Bazon, // Translator: Fabio Di Bernardini, // Encoding: any // Distributed under the same terms as the calendar itself. // For translators: please use UTF-8 if possible. We strongly believe that // Unicode is the answer to a real internationalized world. Also please // include your contact information in the header, as can be seen above. // full day names Calendar._DN = new Array ("Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato", "Domenica"); // Please note that the following array of short day names (and the same goes // for short month names, _SMN) isn't absolutely necessary. We give it here // for exemplification on how one can customize the short day names, but if // they are simply the first N letters of the full name you can simply say: // // Calendar._SDN_len = N; // short day name length // Calendar._SMN_len = N; // short month name length // // If N = 3 then this is not needed either since we assume a value of 3 if not // present, to be compatible with translation files that were written before // this feature. // short day names Calendar._SDN = new Array ("Dom", "Lun", "Mar", "Mer", "Gio", "Ven", "Sab", "Dom"); // full month names Calendar._MN = new Array ("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio", "Augosto", "Settembre", "Ottobre", "Novembre", "Dicembre"); // short month names Calendar._SMN = new Array ("Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic"); // tooltips Calendar._TT = {}; Calendar._TT["INFO"] = "Informazioni sul calendario"; Calendar._TT["ABOUT"] = "DHTML Date/Time Selector\n" + "(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + // don't translate this this ;-) "Per gli aggiornamenti: http://www.dynarch.com/projects/calendar/\n" + "Distribuito sotto licenza GNU LGPL. Vedi http://gnu.org/licenses/lgpl.html per i dettagli." + "\n\n" + "Selezione data:\n" + "- Usa \xab, \xbb per selezionare l'anno\n" + "- Usa " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " per i mesi\n" + "- Tieni premuto a lungo il mouse per accedere alle funzioni di selezione veloce."; Calendar._TT["ABOUT_TIME"] = "\n\n" + "Selezione orario:\n" + "- Clicca sul numero per incrementarlo\n" + "- o Shift+click per decrementarlo\n" + "- o click e sinistra o destra per variarlo."; Calendar._TT["PREV_YEAR"] = "Anno prec.(clicca a lungo per il menù)"; Calendar._TT["PREV_MONTH"] = "Mese prec. (clicca a lungo per il menù)"; Calendar._TT["GO_TODAY"] = "Oggi"; Calendar._TT["NEXT_MONTH"] = "Pross. mese (clicca a lungo per il menù)"; Calendar._TT["NEXT_YEAR"] = "Pross. anno (clicca a lungo per il menù)"; Calendar._TT["SEL_DATE"] = "Seleziona data"; Calendar._TT["DRAG_TO_MOVE"] = "Trascina per spostarlo"; Calendar._TT["PART_TODAY"] = " (oggi)"; // the following is to inform that "%s" is to be the first day of week // %s will be replaced with the day name. Calendar._TT["DAY_FIRST"] = "Mostra prima %s"; // This may be locale-dependent. It specifies the week-end days, as an array // of comma-separated numbers. The numbers are from 0 to 6: 0 means Sunday, 1 // means Monday, etc. Calendar._TT["WEEKEND"] = "0,6"; Calendar._TT["CLOSE"] = "Chiudi"; Calendar._TT["TODAY"] = "Oggi"; Calendar._TT["TIME_PART"] = "(Shift-)Click o trascina per cambiare il valore"; // date formats Calendar._TT["DEF_DATE_FORMAT"] = "%d-%m-%Y"; Calendar._TT["TT_DATE_FORMAT"] = "%a:%b:%e"; Calendar._TT["WK"] = "set"; Calendar._TT["TIME"] = "Ora:"; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/calendar-blue.css0000644000177100020040000001136411573441231027710 0ustar menesismenesis00000000000000/* The main calendar widget. DIV containing a table. */ div.calendar { position: relative; } .calendar, .calendar table { border: 1px solid #556; font-size: 11px; color: #000; cursor: default; background: #eef; font-family: tahoma,verdana,sans-serif; } /* Header part -- contains navigation buttons and day names. */ .calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ text-align: center; /* They are the navigation buttons */ padding: 2px; /* Make the buttons seem like they're pressing */ } .calendar .nav { background: #778 url(/@@/zc.datetimewidget/menuarrow.gif) no-repeat 100% 100%; } .calendar thead .title { /* This holds the current "month, year" */ font-weight: bold; /* Pressing it will take you to the current date */ text-align: center; background: #fff; color: #000; padding: 2px; } .calendar thead .headrow { /* Row containing navigation buttons */ background: #778; color: #fff; } .calendar thead .daynames { /* Row containing the day names */ background: #bdf; } .calendar thead .name { /* Cells containing the day names */ border-bottom: 1px solid #556; padding: 2px; text-align: center; color: #000; } .calendar thead .weekend { /* How a weekend day name shows in header */ color: #a66; } .calendar thead .hilite { /* How do the buttons in header appear when hover */ background-color: #aaf; color: #000; border: 1px solid #04f; padding: 1px; } .calendar thead .active { /* Active (pressed) buttons in header */ background-color: #77c; padding: 2px 0px 0px 2px; } /* The body part -- contains all the days in month. */ .calendar tbody .day { /* Cells containing month days dates */ width: 2em; color: #456; text-align: right; padding: 2px 4px 2px 2px; } .calendar tbody .day.othermonth { font-size: 80%; color: #bbb; } .calendar tbody .day.othermonth.oweekend { color: #fbb; } .calendar table .wn { padding: 2px 3px 2px 2px; border-right: 1px solid #000; background: #bdf; } .calendar tbody .rowhilite td { background: #def; } .calendar tbody .rowhilite td.wn { background: #eef; } .calendar tbody td.hilite { /* Hovered cells */ background: #def; padding: 1px 3px 1px 1px; border: 1px solid #bbb; } .calendar tbody td.active { /* Active (pressed) cells */ background: #cde; padding: 2px 2px 0px 2px; } .calendar tbody td.selected { /* Cell showing today date */ font-weight: bold; border: 1px solid #000; padding: 1px 3px 1px 1px; background: #fff; color: #000; } .calendar tbody td.weekend { /* Cells showing weekend days */ color: #a66; } .calendar tbody td.today { /* Cell showing selected date */ font-weight: bold; color: #00f; } .calendar tbody .disabled { color: #999; } .calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ visibility: hidden; } .calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ display: none; } /* The footer part -- status bar and "Close" button */ .calendar tfoot .footrow { /* The in footer (only one right now) */ text-align: center; background: #556; color: #fff; } .calendar tfoot .ttip { /* Tooltip (status bar) cell */ background: #fff; color: #445; border-top: 1px solid #556; padding: 1px; } .calendar tfoot .hilite { /* Hover style for buttons in footer */ background: #aaf; border: 1px solid #04f; color: #000; padding: 1px; } .calendar tfoot .active { /* Active (pressed) style for buttons in footer */ background: #77c; padding: 2px 0px 0px 2px; } /* Combo boxes (menus that display months/years for direct selection) */ .calendar .combo { position: absolute; display: none; top: 0px; left: 0px; width: 4em; cursor: default; border: 1px solid #655; background: #def; color: #000; font-size: 90%; z-index: 100; } .calendar .combo .label, .calendar .combo .label-IEfix { text-align: center; padding: 1px; } .calendar .combo .label-IEfix { width: 4em; } .calendar .combo .hilite { background: #acf; } .calendar .combo .active { border-top: 1px solid #46a; border-bottom: 1px solid #46a; background: #eef; font-weight: bold; } .calendar td.time { border-top: 1px solid #000; padding: 1px 0px; text-align: center; background-color: #f4f0e8; } .calendar td.time .hour, .calendar td.time .minute, .calendar td.time .ampm { padding: 0px 3px 0px 4px; border: 1px solid #889; font-weight: bold; background-color: #fff; } .calendar td.time .ampm { text-align: center; } .calendar td.time .colon { padding: 0px 2px 0px 3px; font-weight: bold; } .calendar td.time span.hilite { border-color: #000; background-color: #667; color: #fff; } .calendar td.time span.active { border-color: #f00; background-color: #000; color: #0f0; } zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/calendar-setup.js0000644000177100020040000002122511573441231027742 0ustar menesismenesis00000000000000/* Copyright Mihai Bazon, 2002, 2003 | http://dynarch.com/mishoo/ * --------------------------------------------------------------------------- * * The DHTML Calendar * * Details and latest version at: * http://dynarch.com/mishoo/calendar.epl * * This script is distributed under the GNU Lesser General Public License. * Read the entire license text here: http://www.gnu.org/licenses/lgpl.html * * This file defines helper functions for setting up the calendar. They are * intended to help non-programmers get a working calendar on their site * quickly. This script should not be seen as part of the calendar. It just * shows you what one can do with the calendar, while in the same time * providing a quick and simple method for setting it up. If you need * exhaustive customization of the calendar creation process feel free to * modify this code to suit your needs (this is recommended and much better * than modifying calendar.js itself). */ // $Id: calendar-setup.js,v 1.25 2005/03/07 09:51:33 mishoo Exp $ /** * This function "patches" an input field (or other element) to use a calendar * widget for date selection. * * The "params" is a single object that can have the following properties: * * prop. name | description * ------------------------------------------------------------------------------------------------- * inputField | the ID of an input field to store the date * displayArea | the ID of a DIV or other element to show the date * button | ID of a button or other element that will trigger the calendar * eventName | event that will trigger the calendar, without the "on" prefix (default: "click") * ifFormat | date format that will be stored in the input field * daFormat | the date format that will be used to display the date in displayArea * singleClick | (true/false) wether the calendar is in single click mode or not (default: true) * firstDay | numeric: 0 to 6. "0" means display Sunday first, "1" means display Monday first, etc. * align | alignment (default: "Br"); if you don't know what's this see the calendar documentation * range | array with 2 elements. Default: [1900, 2999] -- the range of years available * weekNumbers | (true/false) if it's true (default) the calendar will display week numbers * flat | null or element ID; if not null the calendar will be a flat calendar having the parent with the given ID * flatCallback | function that receives a JS Date object and returns an URL to point the browser to (for flat calendar) * disableFunc | function that receives a JS Date object and should return true if that date has to be disabled in the calendar * onSelect | function that gets called when a date is selected. You don't _have_ to supply this (the default is generally okay) * onClose | function that gets called when the calendar is closed. [default] * onUpdate | function that gets called after the date is updated in the input field. Receives a reference to the calendar. * date | the date that the calendar will be initially displayed to * showsTime | default: false; if true the calendar will include a time selector * timeFormat | the time format; can be "12" or "24", default is "12" * electric | if true (default) then given fields/date areas are updated for each move; otherwise they're updated only on close * step | configures the step of the years in drop-down boxes; default: 2 * position | configures the calendar absolute position; default: null * cache | if "true" (but default: "false") it will reuse the same calendar object, where possible * showOthers | if "true" (but default: "false") it will show days from other months too * * None of them is required, they all have default values. However, if you * pass none of "inputField", "displayArea" or "button" you'll get a warning * saying "nothing to setup". */ Calendar.setup = function (params) { function param_default(pname, def) { if (typeof params[pname] == "undefined") { params[pname] = def; } }; param_default("inputField", null); param_default("displayArea", null); param_default("button", null); param_default("eventName", "click"); param_default("ifFormat", "%Y/%m/%d"); param_default("daFormat", "%Y/%m/%d"); param_default("singleClick", true); param_default("disableFunc", null); param_default("dateStatusFunc", params["disableFunc"]); // takes precedence if both are defined param_default("dateText", null); param_default("firstDay", null); param_default("align", "Br"); param_default("range", [1900, 2999]); param_default("weekNumbers", true); param_default("flat", null); param_default("flatCallback", null); param_default("onSelect", null); param_default("onClose", null); param_default("onUpdate", null); param_default("date", null); param_default("showsTime", false); param_default("timeFormat", "24"); param_default("electric", true); param_default("step", 2); param_default("position", null); param_default("cache", false); param_default("showOthers", false); param_default("multiple", null); var tmp = ["inputField", "displayArea", "button"]; for (var i in tmp) { if (typeof params[tmp[i]] == "string") { params[tmp[i]] = document.getElementById(params[tmp[i]]); } } if (!(params.flat || params.multiple || params.inputField || params.displayArea || params.button)) { alert("Calendar.setup:\n Nothing to setup (no fields found). Please check your code"); return false; } function onSelect(cal) { var p = cal.params; var update = (cal.dateClicked || p.electric); if (update && p.inputField) { p.inputField.value = cal.date.print(p.ifFormat); if (typeof p.inputField.onchange == "function") p.inputField.onchange(); } if (update && p.displayArea) p.displayArea.innerHTML = cal.date.print(p.daFormat); if (update && typeof p.onUpdate == "function") p.onUpdate(cal); if (update && p.flat) { if (typeof p.flatCallback == "function") p.flatCallback(cal); } if (update && p.singleClick && cal.dateClicked) cal.callCloseHandler(); }; if (params.flat != null) { if (typeof params.flat == "string") params.flat = document.getElementById(params.flat); if (!params.flat) { alert("Calendar.setup:\n Flat specified but can't find parent."); return false; } var cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect); cal.showsOtherMonths = params.showOthers; cal.showsTime = params.showsTime; cal.time24 = (params.timeFormat == "24"); cal.params = params; cal.weekNumbers = params.weekNumbers; cal.setRange(params.range[0], params.range[1]); cal.setDateStatusHandler(params.dateStatusFunc); cal.getDateText = params.dateText; if (params.ifFormat) { cal.setDateFormat(params.ifFormat); } if (params.inputField && typeof params.inputField.value == "string") { cal.parseDate(params.inputField.value); } cal.create(params.flat); cal.show(); return false; } var triggerEl = params.button || params.displayArea || params.inputField; triggerEl["on" + params.eventName] = function() { var dateEl = params.inputField || params.displayArea; var dateFmt = params.inputField ? params.ifFormat : params.daFormat; var mustCreate = false; var cal = window.calendar; if (dateEl) params.date = Date.parseDate(dateEl.value || dateEl.innerHTML, dateFmt); if (!(cal && params.cache)) { window.calendar = cal = new Calendar(params.firstDay, params.date, params.onSelect || onSelect, params.onClose || function(cal) { cal.hide(); }); cal.showsTime = params.showsTime; cal.time24 = (params.timeFormat == "24"); cal.weekNumbers = params.weekNumbers; mustCreate = true; } else { if (params.date) cal.setDate(params.date); cal.hide(); } if (params.multiple) { cal.multiple = {}; for (var i = params.multiple.length; --i >= 0;) { var d = params.multiple[i]; var ds = d.print("%Y%m%d"); cal.multiple[ds] = d; } } cal.showsOtherMonths = params.showOthers; cal.yearStep = params.step; cal.setRange(params.range[0], params.range[1]); cal.params = params; cal.setDateStatusHandler(params.dateStatusFunc); cal.getDateText = params.dateText; cal.setDateFormat(dateFmt); if (mustCreate) cal.create(); cal.refresh(); if (!params.position) cal.showAtElement(params.button || params.displayArea || params.inputField, params.align); else cal.showAt(params.position[0], params.position[1]); return false; }; return cal; }; zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/fix_up_css.sh0000755000177100020040000000025311573441231027174 0ustar menesismenesis00000000000000#! /bin/sh # This script should be run to fix the references for x in *.css; do sed 's|(\([a-z2]*\.gif\))|(/@@/zc.datetimewidget/\1)|g' $x > tmp mv tmp $x done zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/menuarrow.gif0000644000177100020040000000010411573441231027174 0ustar menesismenesis00000000000000GIF89añ€€€îîæÿÿÿ!ù,¢D€%J„(Q¢D‰%J”¨;zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/calendar-win2k-cold-2.css0000644000177100020040000001357011573441231031072 0ustar menesismenesis00000000000000/* The main calendar widget. DIV containing a table. */ .calendar { position: relative; display: none; border-top: 2px solid #fff; border-right: 2px solid #000; border-bottom: 2px solid #000; border-left: 2px solid #fff; font-size: 11px; color: #000; cursor: default; background: #c8d4d0; font-family: tahoma,verdana,sans-serif; } .calendar table { border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; font-size: 11px; color: #000; cursor: default; background: #c8d4d0; font-family: tahoma,verdana,sans-serif; } /* Header part -- contains navigation buttons and day names. */ .calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ text-align: center; padding: 1px; border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; } .calendar .nav { background: transparent url(/@@/zc.datetimewidget/menuarrow.gif) no-repeat 100% 100%; } .calendar thead .title { /* This holds the current "month, year" */ font-weight: bold; padding: 1px; border: 1px solid #000; background: #788480; color: #fff; text-align: center; } .calendar thead .headrow { /* Row containing navigation buttons */ } .calendar thead .daynames { /* Row containing the day names */ } .calendar thead .name { /* Cells containing the day names */ border-bottom: 1px solid #000; padding: 2px; text-align: center; background: #e8f4f0; } .calendar thead .weekend { /* How a weekend day name shows in header */ color: #f00; } .calendar thead .hilite { /* How do the buttons in header appear when hover */ border-top: 2px solid #fff; border-right: 2px solid #000; border-bottom: 2px solid #000; border-left: 2px solid #fff; padding: 0px; background-color: #d8e4e0; } .calendar thead .active { /* Active (pressed) buttons in header */ padding: 2px 0px 0px 2px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; background-color: #b8c4c0; } /* The body part -- contains all the days in month. */ .calendar tbody .day { /* Cells containing month days dates */ width: 2em; text-align: right; padding: 2px 4px 2px 2px; } .calendar tbody .day.othermonth { font-size: 80%; color: #aaa; } .calendar tbody .day.othermonth.oweekend { color: #faa; } .calendar table .wn { padding: 2px 3px 2px 2px; border-right: 1px solid #000; background: #e8f4f0; } .calendar tbody .rowhilite td { background: #d8e4e0; } .calendar tbody .rowhilite td.wn { background: #c8d4d0; } .calendar tbody td.hilite { /* Hovered cells */ padding: 1px 3px 1px 1px; border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; } .calendar tbody td.active { /* Active (pressed) cells */ padding: 2px 2px 0px 2px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; } .calendar tbody td.selected { /* Cell showing selected date */ font-weight: bold; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; padding: 2px 2px 0px 2px; background: #d8e4e0; } .calendar tbody td.weekend { /* Cells showing weekend days */ color: #f00; } .calendar tbody td.today { /* Cell showing today date */ font-weight: bold; color: #00f; } .calendar tbody .disabled { color: #999; } .calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ visibility: hidden; } .calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ display: none; } /* The footer part -- status bar and "Close" button */ .calendar tfoot .footrow { /* The in footer (only one right now) */ } .calendar tfoot .ttip { /* Tooltip (status bar) cell */ background: #e8f4f0; padding: 1px; border: 1px solid #000; background: #788480; color: #fff; text-align: center; } .calendar tfoot .hilite { /* Hover style for buttons in footer */ border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; padding: 1px; background: #d8e4e0; } .calendar tfoot .active { /* Active (pressed) style for buttons in footer */ padding: 2px 0px 0px 2px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; } /* Combo boxes (menus that display months/years for direct selection) */ .calendar .combo { position: absolute; display: none; width: 4em; top: 0px; left: 0px; cursor: default; border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; background: #d8e4e0; font-size: 90%; padding: 1px; z-index: 100; } .calendar .combo .label, .calendar .combo .label-IEfix { text-align: center; padding: 1px; } .calendar .combo .label-IEfix { width: 4em; } .calendar .combo .active { background: #c8d4d0; padding: 0px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; } .calendar .combo .hilite { background: #048; color: #aef; } .calendar td.time { border-top: 1px solid #000; padding: 1px 0px; text-align: center; background-color: #e8f0f4; } .calendar td.time .hour, .calendar td.time .minute, .calendar td.time .ampm { padding: 0px 3px 0px 4px; border: 1px solid #889; font-weight: bold; background-color: #fff; } .calendar td.time .ampm { text-align: center; } .calendar td.time .colon { padding: 0px 2px 0px 3px; font-weight: bold; } .calendar td.time span.hilite { border-color: #000; background-color: #667; color: #fff; } .calendar td.time span.active { border-color: #f00; background-color: #000; color: #0f0; } zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/calendar-system.css0000644000177100020040000001314111573441231030300 0ustar menesismenesis00000000000000/* The main calendar widget. DIV containing a table. */ .calendar { position: relative; display: none; border: 1px solid; border-color: #fff #000 #000 #fff; font-size: 11px; cursor: default; background: Window; color: WindowText; font-family: tahoma,verdana,sans-serif; } .calendar table { border: 1px solid; border-color: #fff #000 #000 #fff; font-size: 11px; cursor: default; background: Window; color: WindowText; font-family: tahoma,verdana,sans-serif; } /* Header part -- contains navigation buttons and day names. */ .calendar .button { /* "<<", "<", ">", ">>" buttons have this class */ text-align: center; padding: 1px; border: 1px solid; border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; background: ButtonFace; } .calendar .nav { background: ButtonFace url(/@@/zc.datetimewidget/menuarrow.gif) no-repeat 100% 100%; } .calendar thead .title { /* This holds the current "month, year" */ font-weight: bold; padding: 1px; border: 1px solid #000; background: ActiveCaption; color: CaptionText; text-align: center; } .calendar thead .headrow { /* Row containing navigation buttons */ } .calendar thead .daynames { /* Row containing the day names */ } .calendar thead .name { /* Cells containing the day names */ border-bottom: 1px solid ButtonShadow; padding: 2px; text-align: center; background: ButtonFace; color: ButtonText; } .calendar thead .weekend { /* How a weekend day name shows in header */ color: #f00; } .calendar thead .hilite { /* How do the buttons in header appear when hover */ border: 2px solid; padding: 0px; border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; } .calendar thead .active { /* Active (pressed) buttons in header */ border-width: 1px; padding: 2px 0px 0px 2px; border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; } /* The body part -- contains all the days in month. */ .calendar tbody .day { /* Cells containing month days dates */ width: 2em; text-align: right; padding: 2px 4px 2px 2px; } .calendar tbody .day.othermonth { font-size: 80%; color: #aaa; } .calendar tbody .day.othermonth.oweekend { color: #faa; } .calendar table .wn { padding: 2px 3px 2px 2px; border-right: 1px solid ButtonShadow; background: ButtonFace; color: ButtonText; } .calendar tbody .rowhilite td { background: Highlight; color: HighlightText; } .calendar tbody td.hilite { /* Hovered cells */ padding: 1px 3px 1px 1px; border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; } .calendar tbody td.active { /* Active (pressed) cells */ padding: 2px 2px 0px 2px; border: 1px solid; border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; } .calendar tbody td.selected { /* Cell showing selected date */ font-weight: bold; border: 1px solid; border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; padding: 2px 2px 0px 2px; background: ButtonFace; color: ButtonText; } .calendar tbody td.weekend { /* Cells showing weekend days */ color: #f00; } .calendar tbody td.today { /* Cell showing today date */ font-weight: bold; color: #00f; } .calendar tbody td.disabled { color: GrayText; } .calendar tbody .emptycell { /* Empty cells (the best is to hide them) */ visibility: hidden; } .calendar tbody .emptyrow { /* Empty row (some months need less than 6 rows) */ display: none; } /* The footer part -- status bar and "Close" button */ .calendar tfoot .footrow { /* The in footer (only one right now) */ } .calendar tfoot .ttip { /* Tooltip (status bar) cell */ background: ButtonFace; padding: 1px; border: 1px solid; border-color: ButtonShadow ButtonHighlight ButtonHighlight ButtonShadow; color: ButtonText; text-align: center; } .calendar tfoot .hilite { /* Hover style for buttons in footer */ border-top: 1px solid #fff; border-right: 1px solid #000; border-bottom: 1px solid #000; border-left: 1px solid #fff; padding: 1px; background: #e4e0d8; } .calendar tfoot .active { /* Active (pressed) style for buttons in footer */ padding: 2px 0px 0px 2px; border-top: 1px solid #000; border-right: 1px solid #fff; border-bottom: 1px solid #fff; border-left: 1px solid #000; } /* Combo boxes (menus that display months/years for direct selection) */ .calendar .combo { position: absolute; display: none; width: 4em; top: 0px; left: 0px; cursor: default; border: 1px solid; border-color: ButtonHighlight ButtonShadow ButtonShadow ButtonHighlight; background: Menu; color: MenuText; font-size: 90%; padding: 1px; z-index: 100; } .calendar .combo .label, .calendar .combo .label-IEfix { text-align: center; padding: 1px; } .calendar .combo .label-IEfix { width: 4em; } .calendar .combo .active { padding: 0px; border: 1px solid #000; } .calendar .combo .hilite { background: Highlight; color: HighlightText; } .calendar td.time { border-top: 1px solid ButtonShadow; padding: 1px 0px; text-align: center; background-color: ButtonFace; } .calendar td.time .hour, .calendar td.time .minute, .calendar td.time .ampm { padding: 0px 3px 0px 4px; border: 1px solid #889; font-weight: bold; background-color: Menu; } .calendar td.time .ampm { text-align: center; } .calendar td.time .colon { padding: 0px 2px 0px 3px; font-weight: bold; } .calendar td.time span.hilite { border-color: #000; background-color: Highlight; color: HighlightText; } .calendar td.time span.active { border-color: #f00; background-color: #000; color: #0f0; } zc.datetimewidget-0.7.0/src/zc/datetimewidget/resources/img.gif0000644000177100020040000000033711573441231025741 0ustar menesismenesis00000000000000GIF89aò000ÿÜÜÜÿÿÀÿÿÿÿÿÿ!ù,¤XUU…UUUXUU…U€U€333833ƒ33PX03ƒ333833ƒP€U€DDDHDD„DDPX@„@@„PDHDD„DDDHU€@H€APX@D„DDDHDD„P@€@U€DDDHDD„DDPX€€PUUXUU…UUUXU•;zc.datetimewidget-0.7.0/src/zc/datetimewidget/widgets.txt0000644000177100020040000000606411573441231024676 0ustar menesismenesis00000000000000========================= Datetime and Date Widgets ========================= There are two types of widgets provided by this package, a date widget and a datetime widget. Date Widget ----------- The date widget only handles datetime.date objects, which are not timezone aware. We use the demo package here to have a content class. >>> from zope import component >>> from datetime import datetime, date >>> from zc.datetimewidget import datetimewidget >>> from zc.datetimewidget.demo.content import DemoContent >>> from zc.datetimewidget.demo.interfaces import IDemoContent >>> from zope.publisher.browser import TestRequest, BrowserLanguages >>> component.provideAdapter(BrowserLanguages) >>> request = TestRequest(HTTP_ACCEPT_LANGUAGE='en-US') >>> field = IDemoContent['startDate'] >>> widget = datetimewidget.DateWidget(field,request) >>> widget._toFormValue(None) u'' Now let us convert a real date. >>> d = date(2006,5,1) >>> formValue = widget._toFormValue(d) >>> formValue '2006-05-01' >>> parsedValue = widget._toFieldValue(formValue) >>> parsedValue datetime.date(2006, 5, 1) The widget handles the same date notations as zope's default datewidget. >>> widget._toFieldValue('2006/12/31') datetime.date(2006, 12, 31) Datetime Widget --------------- Datetimes are always stored timezone aware, and by default the utc timezone is used. In order to handle timezones correctly the zope instance has to provide an adapter from IBrowserRequest to ITZInfo. It is up to the instance what kind of implementation it uses. For this test, we just use the implementation of the demo.timezone module which always returns Europe/Vienna as timezone. The field's missing value results in an empty string. >>> import pytz >>> from zc.datetimewidget.demo import timezone >>> component.provideAdapter(timezone.tzinfo) >>> tz = pytz.timezone('Europe/Vienna') >>> request = TestRequest(HTTP_ACCEPT_LANGUAGE='en-US') >>> field = IDemoContent['startDatetime'] >>> widget = datetimewidget.DatetimeWidget(field,request) >>> widget._toFormValue(None) u'' Now let us convert a real datetime. >>> dt = datetime(2006,5,1,12,tzinfo=pytz.utc) >>> formValue = widget._toFormValue(dt) >>> formValue '2006-05-01 14:00:00' >>> parsedValue = widget._toFieldValue(formValue) >>> parsedValue datetime.datetime(2006, 5, 1, 12, 0, tzinfo=) The datetime might also be an naive one (without time zone) but it gets saved with UTC timezone information. >>> naive_dt = datetime(2006,5,1,12) >>> formValue = widget._toFormValue(naive_dt) >>> formValue '2006-05-01 12:00:00' >>> parsedValue = widget._toFieldValue(formValue) >>> parsedValue datetime.datetime(2006, 5, 1, 10, 0, tzinfo=) While the widget tries to parse dates in the form '%Y-%m-%d %H:%M:%S' first, it will fall through to the locale-specific parsing of the core datetimewidget. >>> widget._toFieldValue('May 1, 2006 2:00:00 PM') datetime.datetime(2006, 5, 1, 12, 0, tzinfo=) zc.datetimewidget-0.7.0/src/zc/datetimewidget/demo/0000755000177100020040000000000011573441236023412 5ustar menesismenesis00000000000000zc.datetimewidget-0.7.0/src/zc/datetimewidget/demo/README.txt0000644000177100020040000000432711573441230025110 0ustar menesismenesis00000000000000==================== Datetime Widget Demo ==================== This demo packe provides a simple content class which uses the zc.datetimewidget >>> from zope.testbrowser.testing import Browser >>> browser = Browser() >>> browser.handleErrors = False >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw') >>> browser.open('http://localhost/@@contents.html') It can be added by clicking on the "Datetimewidget Demo" link in the add menu. And giving it a name. >>> link = browser.getLink('Datetimewidget Demo') >>> link.click() >>> nameCtrl = browser.getControl(name='new_value') >>> nameCtrl.value = 'mydemo' >>> applyCtrl = browser.getControl('Apply') >>> applyCtrl.click() >>> link = browser.getLink('mydemo') >>> link.click() >>> browser.url 'http://localhost/mydemo/@@edit.html' We can fill in the values >>> browser.getControl('Start Date').value = '2006-11-15' >>> browser.getControl('End Date').value = '2006-11-16' >>> browser.getControl('Start Datetime').value = '2006-11-15T07:49:31Z' >>> browser.getControl('End Datetime').value = '2006-11-16T19:46:00Z' >>> browser.getControl('Several dates').value = '2006-11-20 2006-11-21 2006-11-22' >>> browser.getControl('Change').click() And they will be saved: >>> 'Required input is missing' in browser.contents False >>> '2006-11-15' in browser.contents True >>> '2006-11-16' in browser.contents True >>> '07:49' in browser.contents True >>> '19:46' in browser.contents True >>> '2006-11-20 2006-11-21 2006-11-22' in browser.contents True If we do not fill some fields, we get missing value errors >>> browser.getControl('Start Date').value = '' >>> browser.getControl('Change').click() >>> 'Required input is missing' in browser.contents True Let's step back: >>> browser.getControl('Start Date').value = '2006-11-15' >>> browser.getControl('Change').click() >>> 'Required input is missing' in browser.contents False Now let's try not filling a date set field: >>> browser.getControl('Several dates').value = '' >>> browser.getControl('Change').click() >>> 'Required input is missing' in browser.contents True zc.datetimewidget-0.7.0/src/zc/datetimewidget/demo/__init__.py0000644000177100020040000000000011573441230025503 0ustar menesismenesis00000000000000zc.datetimewidget-0.7.0/src/zc/datetimewidget/demo/content.py0000644000177100020040000000131511573441230025430 0ustar menesismenesis00000000000000from persistent import Persistent from zope.interface import implements from zope.container.contained import Contained from zope.schema.fieldproperty import FieldProperty from interfaces import IDemoContent from datetime import datetime import pytz class DemoContent(Persistent, Contained): implements(IDemoContent) startDate = FieldProperty(IDemoContent['startDate']) endDate = FieldProperty(IDemoContent['endDate']) startDatetime = FieldProperty(IDemoContent['startDatetime']) endDatetime = FieldProperty(IDemoContent['endDatetime']) severalDates = FieldProperty(IDemoContent['severalDates']) @property def now(self): return datetime.utcnow().replace(tzinfo=pytz.utc) zc.datetimewidget-0.7.0/src/zc/datetimewidget/demo/interfaces.py0000644000177100020040000000070411573441230026102 0ustar menesismenesis00000000000000from zope.interface import Interface from zope.schema import Date, Datetime, Set class IDemoContent(Interface): now = Datetime(title=u"Now", readonly=True) startDate = Date(title=u"Start Date") endDate = Date(title=u"End Date") startDatetime = Datetime(title=u"Start Datetime") endDatetime = Datetime(title=u"End Datetime") severalDates = Set(title=u"Several dates", value_type=Date(title=u"Date")) zc.datetimewidget-0.7.0/src/zc/datetimewidget/demo/configure.zcml0000644000177100020040000000140311573441230026252 0ustar menesismenesis00000000000000 zc.datetimewidget-0.7.0/src/zc/datetimewidget/demo/tests.py0000644000177100020040000000054711573441230025126 0ustar menesismenesis00000000000000import doctest import unittest from doctest import DocTestSuite def test_suite(): return unittest.TestSuite(( DocTestSuite('zc.datetimewidget.demo.timezone', optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS, ), )) if __name__ == '__main__': unittest.main(defaultTest='test_suite') zc.datetimewidget-0.7.0/src/zc/datetimewidget/demo/timezone.py0000644000177100020040000000071211573441230025610 0ustar menesismenesis00000000000000import pytz from zope import interface, component from zope.interface.common.idatetime import ITZInfo from zope.publisher.interfaces.browser import IBrowserRequest TZINFO=pytz.timezone('Europe/Vienna') @interface.implementer(ITZInfo) @component.adapter(IBrowserRequest) def tzinfo(request): """This adapter adapts any interface to the timezone where this demo was written. >>> print tzinfo(None) Europe/Vienna """ return TZINFO zc.datetimewidget-0.7.0/src/zc/datetimewidget/__init__.py0000644000177100020040000000004511573441231024571 0ustar menesismenesis00000000000000# This directory is a Python module. zc.datetimewidget-0.7.0/src/zc/datetimewidget/TODO.txt0000644000177100020040000000014511573441231023767 0ustar menesismenesis00000000000000Outstanding issues: - The stylesheet is a bit crummy, causing slight resizing on various mouseovers zc.datetimewidget-0.7.0/src/zc/datetimewidget/datetimewidget.txt0000644000177100020040000000654211573441231026231 0ustar menesismenesis00000000000000=============== Calendar Widget =============== Configuration ------------- >>> from zope.interface.verify import verifyObject >>> from zc.datetimewidget.datetimewidget import ( ... CalendarWidgetConfiguration, ICalendarWidgetConfiguration) Let's create a standard configuration object: >>> conf = CalendarWidgetConfiguration('field.x') >>> verifyObject(ICalendarWidgetConfiguration, conf) True Fields have their default values: >>> conf.daFormat u'%Y/%m/%d' >>> conf.singleClick True >>> print conf.flat None We can customize some attributes during instantiation: >>> import datetime >>> conf = CalendarWidgetConfiguration('x', date=datetime.date(2006, 8, 25)) >>> conf.date datetime.date(2006, 8, 25) Dumping JavaScript ------------------ Configuration can be dumped as JavaScript. First an empty configuration: >>> print CalendarWidgetConfiguration('field.x').dumpJS() Calendar.setup({ }); Now let's add a few customizations: >>> conf = CalendarWidgetConfiguration('x', daFormat=u'%m-%d', ... inputField='inp', eventName=None, date=conf.date) >>> print conf.dumpJS() Calendar.setup({ inputField: 'inp', eventName: null, daFormat: '%m-%d', date: new Date(2006, 7, 25) }); Invalid arguments are not accepted: >>> conf = CalendarWidgetConfiguration('x', foo='bar') Traceback (most recent call last): ... ValueError: unknown arguments: foo Date set widget --------------- >>> from zc.datetimewidget.datetimewidget import DateSetWidget >>> from zope.schema import Set >>> from zope.publisher.browser import TestRequest >>> class Context(object): ... somedates = set() >>> context = Context() >>> request = TestRequest() >>> field = Set(__name__='somedates') >>> field.set(context, set([datetime.date(2006, 12, 6), ... datetime.date(2006, 12, 7)])) >>> field = field.bind(context) >>> widget = DateSetWidget(field, object(), request) >>> print widget() # doctest: +REPORT_NDIFF >>> print widget.hidden() # doctest: +REPORT_NDIFF zc.datetimewidget-0.7.0/src/zc/datetimewidget/datetimewidget.py0000644000177100020040000003461011573441231026037 0ustar menesismenesis00000000000000############################################################################## # # Copyright (c) 2004 Zope Foundation and Contributors. # All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.1 (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. # ############################################################################## """Datetime widget $Id: datetimewidget.py 4368 2005-12-08 22:19:15Z gary $ """ import datetime from zope.schema import TextLine, Bool, Int, Date, Choice from zope.schema import getFieldsInOrder from zope.interface import Interface, implements from zope.interface.common.idatetime import ITZInfo from zope.datetime import parseDatetimetz, DateTimeError from zope.app.form.browser import textwidgets from zope.app.form.browser.widget import renderElement import zope.datetime import zc.i18n.date import zc.resourcelibrary import glob import os # initialize the language files LANGS = [] for langFile in glob.glob( os.path.join(os.path.dirname(__file__),'resources','languages') + '/calendar-??.js'): LANGS.append(os.path.basename(langFile)[9:11]) def normalizeDateTime(dt, request): if dt is not None: if (dt.tzinfo is not None and isinstance(dt.tzinfo, zope.datetime._tzinfo)): tzinfo = ITZInfo(request) dt = dt.replace(tzinfo=None) # TODO: this is a hack # to accomodate pre-Zope-3.2 datetime widgets that assume UTC # timezone. Zope 3.2+ datetime widgets should use the # request's timezone, or pytz.utc for UTC rather than the # datetimeutils version. dt = zc.i18n.date.normalize(request, dt) return dt def localizeDateTime(dt, request): if (isinstance(dt, datetime.datetime) and dt.tzinfo is not None and dt.tzinfo.utcoffset(None) == datetime.timedelta(0)): tzinfo = ITZInfo(request, None) if tzinfo is not None: dt = dt.astimezone(tzinfo) return dt class JavascriptObject(TextLine): pass class ICalendarWidgetConfiguration(Interface): """Configuration schema for the calendar widget. See http://www.dynarch.com/demos/jscalendar/doc/html/ reference.html#node_sec_2.1 """ inputField = TextLine( title=u"Id of input field", default=None, required=False) displayArea = TextLine( title=u"Id of element which displays the date", default=None, required=False) button = TextLine( title=u"Id of trigger", default=None, required=False) eventName = TextLine( title=u"Event name of trigger", default=u'click', required=False) ifFormat = TextLine( title=u"Input field date format", default=u'%Y/%m/%d') daFormat = TextLine( title=u"displayArea date format", default=u'%Y/%m/%d') singleClick = Bool( title=u"Calendar is in single-click mode", default=True) # disableFunc - deprecated dateStatusFunc = JavascriptObject( title=u"Date status function", description=u""" A function that receives a JS Date object and returns a boolean or a string. This function allows one to set a certain CSS class to some date, therefore making it look different. If it returns true then the date will be disabled. If it returns false nothing special happens with the given date. If it returns a string then that will be taken as a CSS class and appended to the date element. If this string is ``disabled'' then the date is also disabled (therefore is like returning true). """, default=None, required=False) firstDay = Int( title=u"First day of week (0 is Sunday, 1 is Monday, 6 is Saturday)", default=0) weekNumbers = Bool( title=u"Display week numbers", default=True) align = TextLine( title=u"Alingment of calendar", default=u'Bl') range = TextLine( title=u"Range of allowed years", default=u"[1900, 2999]") flat = TextLine( title=u"Id of parent object for flat calendars", default=None, required=False) flatCallback = TextLine( title=u"Function to call when the calendar is changed", default=None) onSelect = TextLine( title=u"Custom click-on-date handler", default=None, required=False) onClose = JavascriptObject( title=u"Custom handler of 'calendar closed' event", default=None, required=False) onUpdate = JavascriptObject( title=u"Custom handler of 'calendar updated' event", default=None, required=False) date = Date( title=u"Initial date", default=None, required=False) showsTime = Bool( title=u"Show time", default=False) timeFormat = Choice( title=u"Time format (12 hours / 24 hours)", values=['12', '24'], default='24') electric = Bool( title=u"Update date field only when calendar is closed", default=True) position = TextLine( title=u"Default [x, y] position of calendar", default=None, required=False) cache = Bool( title=u"Cache calendar object", default=False) showOthers = Bool( title=u"Show days belonging to other months", default=False) multiple = JavascriptObject( title=u"Multiple dates", description=u""" A JavaScript list of dates that stores the dates to be preselected on the widget. """, default=None) class CalendarWidgetConfiguration(object): implements(ICalendarWidgetConfiguration) _multiple_dates = None def __init__(self, name, **kw): self.name = name.replace('.', '_') for name, field in getFieldsInOrder(ICalendarWidgetConfiguration): if name in kw: value = kw.pop(name) else: value = field.default setattr(self, name, value) if kw: raise ValueError('unknown arguments: %s' % ', '.join(kw.keys())) def setMultiple(self, dates): self._multiple_dates = dates self.multiple = 'multi_%s' % self.name self.onClose = ('getMultipleDateClosedHandler("%s", multi_%s)' % (self.inputField, self.name)) def setEnabledWeekdays(self, enabled_weekdays): """Enable just a set of weekdays. `enabled_weekdays` is a list of ints (0 = Sunday, 1 = Monday). """ weekdays = ', '.join(str(weekday) for weekday in enabled_weekdays) self.dateStatusFunc = 'enabledWeekdays([%s])' % weekdays def dumpJS(self): """Dump configuration as a JavaScript Calendar.setup call.""" rows = [] for name, field in getFieldsInOrder(ICalendarWidgetConfiguration): value = getattr(self, name) if value != field.default: if value is None: value_repr = 'null' elif isinstance(field, JavascriptObject): value_repr = str(value) elif isinstance(value, basestring): value_repr = repr(str(value)) elif isinstance(value, bool): value_repr = value and 'true' or 'false' elif isinstance(value, datetime.date): value_repr = 'new Date(%d, %d, %d)' % (value.year, value.month-1, value.day) else: raise ValueError(value) row = ' %s: %s,' % (name, value_repr) rows.append(row) if rows: rows[-1] = rows[-1][:-1] # remove last comma return "Calendar.setup({\n" + '\n'.join(rows) + '\n});\n' template = """ %(widget_html)s """ class DatetimeBase(object): enabled_weekdays = None def __call__(self): widget_html = super(DatetimeBase, self).__call__() return self._render(widget_html) def hidden(self): """Render the widget with the actual date list field hidden.""" widget_html = super(DatetimeBase, self).hidden() return self._render(widget_html) def _render(self, widget_html): """Render the date widget. `widget_html` is the HTML for the simple date field. This method wraps that field in some extra code for the advanced JavaScript widget. """ zc.resourcelibrary.need('zc.datetimewidget') lang = self.request.locale.id.language lang = lang in LANGS and lang or 'en' if lang != 'en': # en is always loaded via the resourcelibrary, so that all # variables are defined in js # TODO: do not hardcode this langFile = '/++resource++zc.datetimewidget/'\ 'languages/calendar-%s.js' % lang langDef = "dateTimeWidgetLoadLanguageFile('%s');" % langFile else: langDef = '' conf = self._configuration() trigger_name = '%s_trigger' % self.name multiple_init = '' if getattr(conf, 'multiple', None): initial_dates = self.datesInJS(conf._multiple_dates) multi_varname = 'multi_' + self.name.replace('.', '_') multiple_init = 'var %s = %s;' % (multi_varname, initial_dates) return template % dict(widget_html=widget_html, trigger_name=trigger_name, langDef=langDef, multiple_init=multiple_init, calendarSetup=conf.dumpJS()) def datesInJS(self, dates): """Return a list of dates in JavaScript-ready format. `dates` may be None or a set of datetime.date() objects. """ if not dates: return '[]' date_reprs = ['new Date(%d, %d, %d)' % (dt.year, dt.month-1, dt.day) for dt in sorted(dates)] return '[' + ', '.join(date_reprs) + ']' def _configuration(self): trigger_name = '%s_trigger' % self.name conf = CalendarWidgetConfiguration(self.name, showsTime=self._showsTime, ifFormat=self._format, button=trigger_name, inputField=self.name) if self.enabled_weekdays is not None: conf.setEnabledWeekdays(self.enabled_weekdays) return conf def setEnabledWeekdays(self, enabled_weekdays): """Enable only particular weekdays. Other weekdays will simply not be selectable in the calendar widget. `enabled_weekdays` is a set of integers (0 = Sunday, 1 = Monday). """ self.enabled_weekdays = enabled_weekdays def _toFieldValue(self, input): # TODO: Manually check if weekday is enabled -- the user could have # directly entered the date. if input == self._missing: return self.context.missing_value else: try: dt = parseDatetimetz(input) except (DateTimeError, ValueError, IndexError), v: return super(DatetimeBase, self)._toFieldValue(input) else: if self._showsTime: return dt else: return dt.date() def _toFormValue(self, value): if value == self.context.missing_value: return self._missing if value: value = localizeDateTime(value, self.request) return value.strftime(self._format) else: return u'' class DatetimeWidget(DatetimeBase, textwidgets.DatetimeWidget): """Datetime entry widget.""" _format = '%Y-%m-%d %H:%M:%S' _showsTime = True def _toFieldValue(self, input): res = super(DatetimeWidget, self)._toFieldValue(input) if res is not self.context.missing_value: res = normalizeDateTime(res, self.request) return res class DateWidget(DatetimeBase, textwidgets.DateWidget): """Date entry widget.""" displayWidth = 10 _format = '%Y-%m-%d' _showsTime = False class DateSetWidget(DatetimeBase, textwidgets.DateWidget): """Widget for entry of sets of dates.""" displayWidth = 30 _format = '%Y-%m-%d' _showsTime = False def __init__(self, field, item, request): super(DateSetWidget, self).__init__(field, request) def _configuration(self): conf = DatetimeBase._configuration(self) value = self.context.query(self.context.context, default=[]) conf.setMultiple(value) return conf def _toFieldValue(self, input): if input == self._missing: return self.context.missing_value else: dates = input.split() values = set() for date in dates: value = super(DateSetWidget, self)._toFieldValue(date) values.add(value) return values def _toFormValue(self, value): if value == self.context.missing_value: return self._missing date_strs = [super(DateSetWidget, self)._toFormValue(date) for date in sorted(value)] return ' '.join(date_strs) class DatetimeDisplayBase(object): def __call__(self): if self._renderedValueSet(): content = self._data else: content = self.context.default if content == self.context.missing_value: return "" content = localizeDateTime(content, self.request) formatter = self.request.locale.dates.getFormatter( self._category, (self.displayStyle or None)) content = formatter.format(content) return renderElement("span", contents=textwidgets.escape(content), cssClass=self.cssClass) class DatetimeDisplayWidget( DatetimeDisplayBase, textwidgets.DatetimeDisplayWidget): pass class DateDisplayWidget(DatetimeDisplayBase, textwidgets.DateDisplayWidget): pass zc.datetimewidget-0.7.0/src/zc/datetimewidget/configure.zcml0000644000177100020040000000145111573441231025332 0ustar menesismenesis00000000000000 zc.datetimewidget-0.7.0/src/zc/datetimewidget/ftesting.zcml0000644000177100020040000000365111573441231025200 0ustar menesismenesis00000000000000 zc.datetimewidget-0.7.0/src/zc/datetimewidget/overrides.zcml0000644000177100020040000000225411573441231025355 0ustar menesismenesis00000000000000 zc.datetimewidget-0.7.0/src/zc/datetimewidget/tests.py0000644000177100020040000000322211573441231024174 0ustar menesismenesis00000000000000############################################################################## # # Copyright (c) 2005 Zope Foundation and Contributors. # All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.1 (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. # ############################################################################## """Datetime Widget unittests $Id: tests.py 120723 2011-03-03 07:43:05Z icemac $ """ __docformat__ = "reStructuredText" import os import doctest import unittest from doctest import DocFileSuite from zope.app.testing import functional, setup def setUp(test): setup.placefulSetUp() def tearDown(test): setup.placefulTearDown() DTWidgetLayer = functional.ZCMLLayer( os.path.join(os.path.split(__file__)[0], 'ftesting.zcml'), __name__, 'DTWidgetLayer', allow_teardown=True) def test_suite(): DemoSuite = functional.FunctionalDocFileSuite('demo/README.txt') DemoSuite.layer = DTWidgetLayer return unittest.TestSuite( ( DocFileSuite('widgets.txt', optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS, ), DocFileSuite('datetimewidget.txt', optionflags=doctest.NORMALIZE_WHITESPACE|doctest.ELLIPSIS, ), DemoSuite, )) if __name__ == '__main__': unittest.main(defaultTest='test_suite') zc.datetimewidget-0.7.0/src/zc.datetimewidget.egg-info/0000755000177100020040000000000011573441236024157 5ustar menesismenesis00000000000000zc.datetimewidget-0.7.0/src/zc.datetimewidget.egg-info/PKG-INFO0000644000177100020040000003434711573441235025266 0ustar menesismenesis00000000000000Metadata-Version: 1.0 Name: zc.datetimewidget Version: 0.7.0 Summary: Javascript-based widgets for date and datetime fields. Home-page: http://pypi.python.org/pypi/zc.datetimewidget Author: Zope Corporation and Contributors Author-email: zope-dev@zope.org License: ZPL 2.1 Description: There are two types of widgets provided by this package, a date widget and a datetime widget. .. contents:: ========================= Datetime and Date Widgets ========================= There are two types of widgets provided by this package, a date widget and a datetime widget. Date Widget ----------- The date widget only handles datetime.date objects, which are not timezone aware. We use the demo package here to have a content class. >>> from zope import component >>> from datetime import datetime, date >>> from zc.datetimewidget import datetimewidget >>> from zc.datetimewidget.demo.content import DemoContent >>> from zc.datetimewidget.demo.interfaces import IDemoContent >>> from zope.publisher.browser import TestRequest, BrowserLanguages >>> component.provideAdapter(BrowserLanguages) >>> request = TestRequest(HTTP_ACCEPT_LANGUAGE='en-US') >>> field = IDemoContent['startDate'] >>> widget = datetimewidget.DateWidget(field,request) >>> widget._toFormValue(None) u'' Now let us convert a real date. >>> d = date(2006,5,1) >>> formValue = widget._toFormValue(d) >>> formValue '2006-05-01' >>> parsedValue = widget._toFieldValue(formValue) >>> parsedValue datetime.date(2006, 5, 1) The widget handles the same date notations as zope's default datewidget. >>> widget._toFieldValue('2006/12/31') datetime.date(2006, 12, 31) Datetime Widget --------------- Datetimes are always stored timezone aware, and by default the utc timezone is used. In order to handle timezones correctly the zope instance has to provide an adapter from IBrowserRequest to ITZInfo. It is up to the instance what kind of implementation it uses. For this test, we just use the implementation of the demo.timezone module which always returns Europe/Vienna as timezone. The field's missing value results in an empty string. >>> import pytz >>> from zc.datetimewidget.demo import timezone >>> component.provideAdapter(timezone.tzinfo) >>> tz = pytz.timezone('Europe/Vienna') >>> request = TestRequest(HTTP_ACCEPT_LANGUAGE='en-US') >>> field = IDemoContent['startDatetime'] >>> widget = datetimewidget.DatetimeWidget(field,request) >>> widget._toFormValue(None) u'' Now let us convert a real datetime. >>> dt = datetime(2006,5,1,12,tzinfo=pytz.utc) >>> formValue = widget._toFormValue(dt) >>> formValue '2006-05-01 14:00:00' >>> parsedValue = widget._toFieldValue(formValue) >>> parsedValue datetime.datetime(2006, 5, 1, 12, 0, tzinfo=) The datetime might also be an naive one (without time zone) but it gets saved with UTC timezone information. >>> naive_dt = datetime(2006,5,1,12) >>> formValue = widget._toFormValue(naive_dt) >>> formValue '2006-05-01 12:00:00' >>> parsedValue = widget._toFieldValue(formValue) >>> parsedValue datetime.datetime(2006, 5, 1, 10, 0, tzinfo=) While the widget tries to parse dates in the form '%Y-%m-%d %H:%M:%S' first, it will fall through to the locale-specific parsing of the core datetimewidget. >>> widget._toFieldValue('May 1, 2006 2:00:00 PM') datetime.datetime(2006, 5, 1, 12, 0, tzinfo=) =============== Calendar Widget =============== Configuration ------------- >>> from zope.interface.verify import verifyObject >>> from zc.datetimewidget.datetimewidget import ( ... CalendarWidgetConfiguration, ICalendarWidgetConfiguration) Let's create a standard configuration object: >>> conf = CalendarWidgetConfiguration('field.x') >>> verifyObject(ICalendarWidgetConfiguration, conf) True Fields have their default values: >>> conf.daFormat u'%Y/%m/%d' >>> conf.singleClick True >>> print conf.flat None We can customize some attributes during instantiation: >>> import datetime >>> conf = CalendarWidgetConfiguration('x', date=datetime.date(2006, 8, 25)) >>> conf.date datetime.date(2006, 8, 25) Dumping JavaScript ------------------ Configuration can be dumped as JavaScript. First an empty configuration: >>> print CalendarWidgetConfiguration('field.x').dumpJS() Calendar.setup({ }); Now let's add a few customizations: >>> conf = CalendarWidgetConfiguration('x', daFormat=u'%m-%d', ... inputField='inp', eventName=None, date=conf.date) >>> print conf.dumpJS() Calendar.setup({ inputField: 'inp', eventName: null, daFormat: '%m-%d', date: new Date(2006, 7, 25) }); Invalid arguments are not accepted: >>> conf = CalendarWidgetConfiguration('x', foo='bar') Traceback (most recent call last): ... ValueError: unknown arguments: foo Date set widget --------------- >>> from zc.datetimewidget.datetimewidget import DateSetWidget >>> from zope.schema import Set >>> from zope.publisher.browser import TestRequest >>> class Context(object): ... somedates = set() >>> context = Context() >>> request = TestRequest() >>> field = Set(__name__='somedates') >>> field.set(context, set([datetime.date(2006, 12, 6), ... datetime.date(2006, 12, 7)])) >>> field = field.bind(context) >>> widget = DateSetWidget(field, object(), request) >>> print widget() # doctest: +REPORT_NDIFF >>> print widget.hidden() # doctest: +REPORT_NDIFF ==================== Datetime Widget Demo ==================== This demo packe provides a simple content class which uses the zc.datetimewidget >>> from zope.testbrowser.testing import Browser >>> browser = Browser() >>> browser.handleErrors = False >>> browser.addHeader('Authorization', 'Basic mgr:mgrpw') >>> browser.open('http://localhost/@@contents.html') It can be added by clicking on the "Datetimewidget Demo" link in the add menu. And giving it a name. >>> link = browser.getLink('Datetimewidget Demo') >>> link.click() >>> nameCtrl = browser.getControl(name='new_value') >>> nameCtrl.value = 'mydemo' >>> applyCtrl = browser.getControl('Apply') >>> applyCtrl.click() >>> link = browser.getLink('mydemo') >>> link.click() >>> browser.url 'http://localhost/mydemo/@@edit.html' We can fill in the values >>> browser.getControl('Start Date').value = '2006-11-15' >>> browser.getControl('End Date').value = '2006-11-16' >>> browser.getControl('Start Datetime').value = '2006-11-15T07:49:31Z' >>> browser.getControl('End Datetime').value = '2006-11-16T19:46:00Z' >>> browser.getControl('Several dates').value = '2006-11-20 2006-11-21 2006-11-22' >>> browser.getControl('Change').click() And they will be saved: >>> 'Required input is missing' in browser.contents False >>> '2006-11-15' in browser.contents True >>> '2006-11-16' in browser.contents True >>> '07:49' in browser.contents True >>> '19:46' in browser.contents True >>> '2006-11-20 2006-11-21 2006-11-22' in browser.contents True If we do not fill some fields, we get missing value errors >>> browser.getControl('Start Date').value = '' >>> browser.getControl('Change').click() >>> 'Required input is missing' in browser.contents True Let's step back: >>> browser.getControl('Start Date').value = '2006-11-15' >>> browser.getControl('Change').click() >>> 'Required input is missing' in browser.contents False Now let's try not filling a date set field: >>> browser.getControl('Several dates').value = '' >>> browser.getControl('Change').click() >>> 'Required input is missing' in browser.contents True ======= CHANGES ======= 0.7.0 (2011-06-07) ------------------ - Fix tests using a newer zope.publisher that requires zope.login. - Fix tests by not using deprecated ``zope.app.securitypolicy`` - Remove test dependency ``zope.app.server`` and ``zope.app.authentication``. Use ``zope.password`` instead. - No longer using deprecated ``zope.testing.doctestunit``. Use python's build-in ``doctest`` instead. 0.6.4 (2009-10-20) ------------------ - Make Calendar pop-up and drag behavior more consistent across browser modes in IE. 0.6.3 (2009-08-24) ------------------ - Fixed handling of naive datetime objects, they no longer result in an exception but are displayed unchanged. When they get saved again they are saved with UTC timezone like all other ones. - Added `datetimewidget.txt` doctest to ``long_description`` to show up on pypi home page. - Fixed home page name in `setup.py`. - Added coverage analysis tools to buildout. - Removed deprecated zpkg and zcml slugs. 0.6.2 (2009-05-20) ------------------ - Using `++resource++` instead of `@@/` to load resources. - Renaming "lang" directory (``ZPublisher`` gets confused because of a view with the same name exists in ``zope.traversing.namespace``). See `gocept.datetimewidget`_ for more details on how to use zc.datetimewidget with zope2. .. _`gocept.datetimewidget` : http://pypi.python.org/pypi/gocept.datetimewidget 0.6.1 (2008-05-29) ------------------ - Unchanged from 0.5.2, but released with a new version number thanks to a package with an 0.6.1dev-rBFN revision found in the wild. 0.5.2 (2007-11-03) ------------------ - Improve package data. - Developed proper package dependencies. - Merged functional tests into ``tests.py``. 0.5.1 (2006-06-15) ------------------ - Include license and copyright headers. 0.5.0 (2006-05-24) ------------------ - Initial release. Keywords: zope3 date datetime widget javascript Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: Zope Public License Classifier: Programming Language :: Python Classifier: Natural Language :: English Classifier: Operating System :: OS Independent Classifier: Topic :: Internet :: WWW/HTTP Classifier: Framework :: Zope3 zc.datetimewidget-0.7.0/src/zc.datetimewidget.egg-info/top_level.txt0000644000177100020040000000000311573441235026701 0ustar menesismenesis00000000000000zc zc.datetimewidget-0.7.0/src/zc.datetimewidget.egg-info/SOURCES.txt0000644000177100020040000000606711573441235026053 0ustar menesismenesis00000000000000CHANGES.txt COPYRIGHT.txt LICENSE.txt README.txt bootstrap.py buildout.cfg setup.py src/zc/__init__.py src/zc.datetimewidget.egg-info/PKG-INFO src/zc.datetimewidget.egg-info/SOURCES.txt src/zc.datetimewidget.egg-info/dependency_links.txt src/zc.datetimewidget.egg-info/namespace_packages.txt src/zc.datetimewidget.egg-info/not-zip-safe src/zc.datetimewidget.egg-info/requires.txt src/zc.datetimewidget.egg-info/top_level.txt src/zc/datetimewidget/TODO.txt src/zc/datetimewidget/__init__.py src/zc/datetimewidget/configure.zcml src/zc/datetimewidget/datetimewidget.py src/zc/datetimewidget/datetimewidget.txt src/zc/datetimewidget/ftesting.zcml src/zc/datetimewidget/overrides.zcml src/zc/datetimewidget/tests.py src/zc/datetimewidget/widgets.txt src/zc/datetimewidget/demo/README.txt src/zc/datetimewidget/demo/__init__.py src/zc/datetimewidget/demo/configure.zcml src/zc/datetimewidget/demo/content.py src/zc/datetimewidget/demo/interfaces.py src/zc/datetimewidget/demo/tests.py src/zc/datetimewidget/demo/timezone.py src/zc/datetimewidget/resources/calendar-blue.css src/zc/datetimewidget/resources/calendar-blue2.css src/zc/datetimewidget/resources/calendar-brown.css src/zc/datetimewidget/resources/calendar-green.css src/zc/datetimewidget/resources/calendar-setup.js src/zc/datetimewidget/resources/calendar-system.css src/zc/datetimewidget/resources/calendar-tas.css src/zc/datetimewidget/resources/calendar-win2k-1.css src/zc/datetimewidget/resources/calendar-win2k-2.css src/zc/datetimewidget/resources/calendar-win2k-cold-1.css src/zc/datetimewidget/resources/calendar-win2k-cold-2.css src/zc/datetimewidget/resources/calendar.js src/zc/datetimewidget/resources/datetimewidget.js src/zc/datetimewidget/resources/fix_up_css.sh src/zc/datetimewidget/resources/img.gif src/zc/datetimewidget/resources/menuarrow.gif src/zc/datetimewidget/resources/menuarrow2.gif src/zc/datetimewidget/resources/languages/calendar-al.js src/zc/datetimewidget/resources/languages/calendar-bg.js src/zc/datetimewidget/resources/languages/calendar-big5.js src/zc/datetimewidget/resources/languages/calendar-br.js src/zc/datetimewidget/resources/languages/calendar-ca.js src/zc/datetimewidget/resources/languages/calendar-cs-win.js src/zc/datetimewidget/resources/languages/calendar-da.js src/zc/datetimewidget/resources/languages/calendar-de.js src/zc/datetimewidget/resources/languages/calendar-en.js src/zc/datetimewidget/resources/languages/calendar-es.js src/zc/datetimewidget/resources/languages/calendar-fr.js src/zc/datetimewidget/resources/languages/calendar-hu.js src/zc/datetimewidget/resources/languages/calendar-it.js src/zc/datetimewidget/resources/languages/calendar-ja.js src/zc/datetimewidget/resources/languages/calendar-lt.js src/zc/datetimewidget/resources/languages/calendar-lv.js src/zc/datetimewidget/resources/languages/calendar-nl.js src/zc/datetimewidget/resources/languages/calendar-pt.js src/zc/datetimewidget/resources/languages/calendar-ro.js src/zc/datetimewidget/resources/languages/calendar-ru.js src/zc/datetimewidget/resources/languages/calendar-sp.js src/zc/datetimewidget/resources/languages/calendar-zh.jszc.datetimewidget-0.7.0/src/zc.datetimewidget.egg-info/namespace_packages.txt0000644000177100020040000000000311573441235030502 0ustar menesismenesis00000000000000zc zc.datetimewidget-0.7.0/src/zc.datetimewidget.egg-info/not-zip-safe0000644000177100020040000000000111573441232026401 0ustar menesismenesis00000000000000 zc.datetimewidget-0.7.0/src/zc.datetimewidget.egg-info/dependency_links.txt0000644000177100020040000000000111573441235030224 0ustar menesismenesis00000000000000 zc.datetimewidget-0.7.0/src/zc.datetimewidget.egg-info/requires.txt0000644000177100020040000000037611573441235026564 0ustar menesismenesis00000000000000pytz setuptools zc.i18n zc.resourcelibrary zope.app.form zope.component zope.datetime zope.interface zope.publisher>=3.12 zope.schema [test] zope.app.zcmlfiles zope.app.testing zope.container zope.login zope.password zope.securitypolicy zope.testbrowserzc.datetimewidget-0.7.0/buildout.cfg0000644000177100020040000000073111573441231020567 0ustar menesismenesis00000000000000[buildout] develop = . parts = test checker coverage-test coverage-report [test] recipe = zc.recipe.testrunner eggs = zc.datetimewidget [test] [checker] recipe = lovely.recipe:importchecker path = src/zc/datetimewidget [coverage-test] recipe = zc.recipe.testrunner eggs = ${test:eggs} defaults = ['--coverage', '../../coverage'] [coverage-report] recipe = zc.recipe.egg eggs = z3c.coverage scripts = coverage=coverage-report arguments = ('coverage', 'coverage/report')