Skip to content

collective/jquery.recurrenceinput.js

Repository files navigation

jQuery recurrenceinput widget

jQuery plugin widget which support the definition of complex recurrence rulesets based on RFC5545, the iCalendar standard.

The recurrence rule string, generated by this package, should be directly usable in ics calendar files. It was developed for the Plone, but is completely independent of the web-framework. This widget is production ready and used in several sites.

image

Features

  • The recurrence widget supports most of the options of the iCalendar RRULE as well as EXDATE and RDATE.
  • It supports internationalization.
  • It supports predetermined recurrence rules, so called "templates".

Non-Features

This widget does not support all features of RRULE's. For example:

  • It does not support recurrence on smaller than daily basis.
  • In RRULE's end-dates can end either be in local time or in UTC. This widget only supports UTC, which means the start and end dates of the event as a whole, when exported may not be in local time. They must either specify a timezone or be in UTC. If the RRULE fed to the widget is in local time, this will be made into UTC with no timezone translation.
  • Any parameters will be ignored and stripped on saving the rule.

Requirements

Requires jQuery and jQuery Tools datetime widget and overlay support. It is currently being tested with jQuery 1.4, because that's what plone uses, and jQuery 1.7, because that is the last version supported by jQuery Tools.

jQuery 1.5 may work but is untested. Bugs in jQuery 1.6.4 means it does not work. jQuery Tools doesn't support jQuery 1.8 yet.

It's tested on Chromium 20 (Linux), Firefox 16 (Linux), IE 8 and IE 9 (Windows).

To Do

High priority:

  • 100% code coverage from tests (currently 95%).

Medium priority:

  • Make it possible to change the order of the fields as a part of the i18n. (jQuery templates)?
  • The human readable output should probably be done directly from the RRULE and not by using the form i18n, to improve the grammar and rule support.

Low priority:

  • Support more obscure RFC5545 options, either in the form or by providing warnings that the option is unsupported.

Developer information

To test, demo or develop jquery.recurrenceinput locally you need to run a local server, provided in the test_server.py script.

This server requires the dateutil module, so you must install it first. Here are some examples of how to do this, depending on your platform:

Debian/Ubuntu:

$ sudo apt-get install python-dateutil

A non-system Python 2 with setuptools or distribute installed:

$ <pathtopython>/easy_install python-dateutil

Then start the tests server like so:

$ python ./test_server.py

Open the demo pages http://localhost:8000/demo/input.html and http://localhost:8000/demo/localized.html

And Open the tests: http://localhost:8000/tests/tests.html

The demo/input.html document contains basic usecases and can be used when developing on this widget.

You also need to run the tests. These are located in tests/tests.js, and use the QUnit test framework. You run them by opening tests/test.html in the browser. The same issue with allowing Ajax from the local hard drive is in effect for the tests as well.

In the tests directory there is also a copy of jslint.js, for easy access. To run these you need to install a JavaScript engine, such as Rhino or SpiderMonkey. You then run it with:

$ js tests/jslint.js <file>

The following files should be jslinted:

src/jquery.recurrenceinput.js
src/tests.js

To keep the Coverage tests updated you need to install jscoverage ( http://siliconforks.com/jscoverage/ ). You then keep the coverage code updated by running:

jscoverage src/ coverage/

To run the coverage tests you go to http://localhost:8000/coverage/jscoverage.html?/tests/coveragetest.html

Contributors

This project was originally started by Rok Garbas.

Authors:
  • Lennart Regebro
  • Rok Garbas
  • Vilmos Somogyi
  • Johannes Raggam
  • Mike Rhodes
  • Kai Lautaportti

Thanks to Hexagon IT, http://www.hexagonit.fi/, who funded the main body of work, done by Lennart Regebro.