├── .editorconfig ├── .gitattributes ├── .github └── dependabot.yml ├── .gitignore ├── .scrutinizer.yml ├── .travis.yml ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── Makefile ├── README.md ├── appinfo ├── app.php ├── application.php ├── info.xml └── routes.php ├── build.xml ├── controller ├── collectionscontroller.php ├── pagecontroller.php ├── response.php ├── searchprovider.php └── settingscontroller.php ├── css ├── style.css └── vendor │ ├── angularui │ └── ui-select │ │ └── select2.css │ └── timepicker │ └── jquery.ui.timepicker.css ├── img ├── divider.svg ├── favicon-touch.png ├── favicon-touch.svg ├── favicon.ico ├── favicon.png ├── favicon.svg ├── loading.gif ├── random.svg ├── source │ ├── alphabetically.svg │ ├── checkbox.svg │ ├── divider.svg │ ├── eye_hidden.svg │ ├── eye_visible.svg │ ├── manual.svg │ ├── plus.svg │ ├── star.svg │ ├── star_active.svg │ ├── task.svg │ ├── task_active.svg │ └── update.svg ├── sprites.png ├── sprites.svg ├── tasks.png └── tasks.svg ├── issue_template.md ├── js ├── .bowerrc ├── .jshintrc ├── Gruntfile.js ├── README.md ├── app │ ├── app.js │ ├── controllers │ │ ├── appcontroller.js │ │ ├── detailscontroller.js │ │ ├── listcontroller.js │ │ ├── settingscontroller.js │ │ └── taskscontroller.js │ ├── directives │ │ ├── appnavigationentryutils.js │ │ ├── autofocusoninsert.js │ │ ├── avatar.js │ │ ├── colorpickerDirective.js │ │ ├── confirmation.js │ │ ├── datepicker.js │ │ ├── occlickfocus.js │ │ ├── timepicker.js │ │ └── watchtop.js │ ├── filters │ │ ├── counterFormatter.js │ │ ├── dateDetails.js │ │ ├── dateDetailsShort.js │ │ ├── dateFromNow.js │ │ ├── dateTaskList.js │ │ ├── day.js │ │ ├── dayTaskList.js │ │ ├── percentDetails.js │ │ ├── priorityDetails.js │ │ ├── reminderDetails.js │ │ ├── startDetails.js │ │ └── timeTaskList.js │ └── services │ │ ├── businesslayer │ │ ├── listsbusinesslayer.js │ │ ├── searchbusinesslayer.js │ │ ├── settingsbusinesslayer.js │ │ └── tasksbusinesslayer.js │ │ ├── calendarservice.js │ │ ├── davclient.js │ │ ├── icalfactory.js │ │ ├── loading.js │ │ ├── model.js │ │ ├── models │ │ ├── calendar.js │ │ ├── collectionsmodel.js │ │ ├── listsmodel.js │ │ ├── settingsmodel.js │ │ ├── tasksmodel.js │ │ └── vtodo.js │ │ ├── persistence.js │ │ ├── publisher.js │ │ ├── randomstringservice.js │ │ ├── request.js │ │ ├── status.js │ │ └── vtodoservice.js ├── bower.json ├── package.json ├── public │ └── app.js └── vendor │ ├── angular-animate │ ├── .bower.json │ ├── README.md │ ├── angular-animate.js │ ├── angular-animate.min.js │ ├── angular-animate.min.js.map │ ├── bower.json │ ├── index.js │ └── package.json │ ├── angular-draganddrop │ ├── .bower.json │ ├── CHANGELOG.md │ ├── LICENSE │ ├── README.md │ ├── angular-drag-and-drop-lists.js │ ├── angular-drag-and-drop-lists.min.js │ └── bower.json │ ├── angular-route │ ├── .bower.json │ ├── README.md │ ├── angular-route.js │ ├── angular-route.min.js │ ├── angular-route.min.js.map │ ├── bower.json │ ├── index.js │ └── package.json │ ├── angular-sanitize │ ├── .bower.json │ ├── README.md │ ├── angular-sanitize.js │ ├── angular-sanitize.min.js │ ├── angular-sanitize.min.js.map │ ├── bower.json │ ├── index.js │ └── package.json │ ├── angular-ui-select │ ├── .bower.json │ ├── CHANGELOG.md │ ├── CONTRIBUTING.md │ ├── LICENSE │ ├── README.md │ ├── bower.json │ ├── composer.json │ ├── deploy-docs.sh │ ├── dist │ │ ├── select.css │ │ ├── select.js │ │ ├── select.min.css │ │ └── select.min.js │ ├── docs │ │ ├── assets │ │ │ ├── app.js │ │ │ ├── demo.js │ │ │ ├── docs.css │ │ │ └── plunkr.js │ │ ├── index.html │ │ └── partials │ │ │ ├── _footer.html │ │ │ └── _header.html │ ├── index.js │ └── package.json │ ├── angular │ ├── .bower.json │ ├── README.md │ ├── angular-csp.css │ ├── angular.js │ ├── angular.min.js │ ├── angular.min.js.gzip │ ├── angular.min.js.map │ ├── bower.json │ ├── index.js │ └── package.json │ ├── davclient.js │ ├── .bower.json │ ├── LICENSE │ ├── bower.json │ ├── index.html │ ├── karma.conf.js │ ├── lib │ │ └── client.js │ └── package.json │ ├── ical.js │ ├── .bower.json │ ├── CONTRIBUTING.md │ ├── Gruntfile.js │ ├── README.md │ ├── bower.json │ ├── build │ │ ├── benchmark │ │ │ └── ical_previous.js │ │ └── ical.js │ ├── lib │ │ └── ical │ │ │ ├── binary.js │ │ │ ├── component.js │ │ │ ├── component_parser.js │ │ │ ├── design.js │ │ │ ├── duration.js │ │ │ ├── event.js │ │ │ ├── helpers.js │ │ │ ├── parse.js │ │ │ ├── period.js │ │ │ ├── property.js │ │ │ ├── recur.js │ │ │ ├── recur_expansion.js │ │ │ ├── recur_iterator.js │ │ │ ├── stringify.js │ │ │ ├── time.js │ │ │ ├── timezone.js │ │ │ ├── timezone_service.js │ │ │ ├── utc_offset.js │ │ │ └── vcard_time.js │ ├── package.json │ ├── samples │ │ ├── blank_description.ics │ │ ├── blank_line_end.ics │ │ ├── blank_line_mid.ics │ │ ├── daily_recur.ics │ │ ├── day_long_recur_yearly.ics │ │ ├── duration_instead_of_dtend.ics │ │ ├── forced_types.ics │ │ ├── google_birthday.ics │ │ ├── minimal.ics │ │ ├── multiple_rrules.ics │ │ ├── only_dtstart_date.ics │ │ ├── only_dtstart_time.ics │ │ ├── parserv2.ics │ │ ├── recur_instances.ics │ │ ├── recur_instances_finite.ics │ │ ├── timezones │ │ │ ├── America │ │ │ │ ├── Atikokan.ics │ │ │ │ ├── Denver.ics │ │ │ │ ├── Los_Angeles.ics │ │ │ │ └── New_York.ics │ │ │ └── Makebelieve │ │ │ │ ├── RDATE_test.ics │ │ │ │ ├── RDATE_utc_test.ics │ │ │ │ └── RRULE_UNTIL_test.ics │ │ └── utc_negative_zero.ics │ ├── sandbox │ │ └── validator.html │ ├── tasks │ │ ├── tests.js │ │ ├── timezones.js │ │ └── travis.js │ ├── test-agent-coverage.json │ ├── test-agent-server.js │ └── test-agent │ │ ├── index.html │ │ ├── index.js │ │ ├── package.json │ │ ├── sandbox.html │ │ └── style.css │ ├── jquery-timepicker │ ├── .bower.json │ ├── GPL-LICENSE.txt │ ├── MIT-LICENSE.txt │ ├── README.md │ ├── i18n │ │ ├── i18n.html │ │ ├── jquery.ui.timepicker-cs.js │ │ ├── jquery.ui.timepicker-de.js │ │ ├── jquery.ui.timepicker-es.js │ │ ├── jquery.ui.timepicker-fr.js │ │ ├── jquery.ui.timepicker-hr.js │ │ ├── jquery.ui.timepicker-hu.js │ │ ├── jquery.ui.timepicker-it.js │ │ ├── jquery.ui.timepicker-ja.js │ │ ├── jquery.ui.timepicker-mk.js │ │ ├── jquery.ui.timepicker-nl.js │ │ ├── jquery.ui.timepicker-pl.js │ │ ├── jquery.ui.timepicker-pt-BR.js │ │ ├── jquery.ui.timepicker-ru.js │ │ ├── jquery.ui.timepicker-sl.js │ │ ├── jquery.ui.timepicker-sv.js │ │ └── jquery.ui.timepicker-tr.js │ ├── include │ │ ├── jquery-1.9.0.min.js │ │ └── ui-1.10.0 │ │ │ ├── jquery.ui.core.min.js │ │ │ ├── jquery.ui.position.min.js │ │ │ ├── jquery.ui.tabs.min.js │ │ │ ├── jquery.ui.widget.min.js │ │ │ └── ui-lightness │ │ │ ├── images │ │ │ ├── ui-bg_diagonals-thick_18_b81900_40x40.png │ │ │ ├── ui-bg_diagonals-thick_20_666666_40x40.png │ │ │ ├── ui-bg_flat_10_000000_40x100.png │ │ │ ├── ui-bg_glass_100_f6f6f6_1x400.png │ │ │ ├── ui-bg_glass_100_fdf5ce_1x400.png │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ ├── ui-bg_gloss-wave_35_f6a828_500x100.png │ │ │ ├── ui-bg_highlight-soft_100_eeeeee_1x100.png │ │ │ ├── ui-bg_highlight-soft_75_ffe45c_1x100.png │ │ │ ├── ui-icons_222222_256x240.png │ │ │ ├── ui-icons_228ef1_256x240.png │ │ │ ├── ui-icons_ef8c08_256x240.png │ │ │ ├── ui-icons_ffd27a_256x240.png │ │ │ └── ui-icons_ffffff_256x240.png │ │ │ └── jquery-ui-1.10.0.custom.min.css │ ├── index.html │ ├── jquery.ui.timepicker.css │ ├── jquery.ui.timepicker.js │ ├── legacy_1.2.6 │ │ ├── index.html │ │ ├── jquery-1.2.6.js │ │ ├── jquery.proxy.fix.js │ │ └── jquery.ui.1.6.all.js │ ├── tests │ │ ├── dialog.html │ │ └── jquery.ui.dialog.min.js │ └── timepicker.png │ └── jstzdetect │ ├── .bower.json │ ├── Gruntfile.js │ ├── LICENCE.txt │ ├── README.md │ ├── bower.json │ ├── jstz.js │ ├── jstz.min.js │ └── package.json ├── l10n ├── .tx │ └── config ├── af_ZA.js ├── af_ZA.json ├── ar.js ├── ar.json ├── ast.js ├── ast.json ├── az.js ├── az.json ├── bg_BG.js ├── bg_BG.json ├── bn_BD.js ├── bn_BD.json ├── ca.js ├── ca.json ├── cs_CZ.js ├── cs_CZ.json ├── da.js ├── da.json ├── de.js ├── de.json ├── de_CH.js ├── de_CH.json ├── de_DE.js ├── de_DE.json ├── el.js ├── el.json ├── en_GB.js ├── en_GB.json ├── es.js ├── es.json ├── es_MX.js ├── es_MX.json ├── et_EE.js ├── et_EE.json ├── eu.js ├── eu.json ├── fa.js ├── fa.json ├── fi_FI.js ├── fi_FI.json ├── fr.js ├── fr.json ├── gl.js ├── gl.json ├── he.js ├── he.json ├── hu_HU.js ├── hu_HU.json ├── ia.js ├── ia.json ├── id.js ├── id.json ├── is.js ├── is.json ├── it.js ├── it.json ├── ja.js ├── ja.json ├── ko.js ├── ko.json ├── lb.js ├── lb.json ├── lt_LT.js ├── lt_LT.json ├── lv.js ├── lv.json ├── mk.js ├── mk.json ├── nb_NO.js ├── nb_NO.json ├── nl.js ├── nl.json ├── oc.js ├── oc.json ├── pl.js ├── pl.json ├── pt_BR.js ├── pt_BR.json ├── pt_PT.js ├── pt_PT.json ├── ro.js ├── ro.json ├── ru.js ├── ru.json ├── ru_RU.js ├── ru_RU.json ├── sk_SK.js ├── sk_SK.json ├── sl.js ├── sl.json ├── sq.js ├── sq.json ├── sr.js ├── sr.json ├── sv.js ├── sv.json ├── th_TH.js ├── th_TH.json ├── tr.js ├── tr.json ├── ug.js ├── ug.json ├── uk.js ├── uk.json ├── zh_CN.js ├── zh_CN.json ├── zh_TW.js └── zh_TW.json ├── screenshots └── screenshot.png ├── service ├── collectionsservice.php └── settingsservice.php └── templates ├── colorpicker.html ├── confirmation.php ├── main.php ├── part.collectionall.php ├── part.collectionweek.php ├── part.details.php ├── part.taskbody.php └── part.tasklist.php /.editorconfig: -------------------------------------------------------------------------------- 1 | # top-most EditorConfig file 2 | root = true 3 | 4 | # Unix-style newlines with a newline ending every file 5 | [*] 6 | end_of_line = lf 7 | insert_final_newline = true 8 | 9 | # Set default charset and indentation 10 | [*.{php,js}] 11 | charset = utf-8 12 | indent_style = tab 13 | tab_width = 4 14 | indent_size = 4 15 | 16 | # Indentation override for PHP templates 17 | [templates/**.php] 18 | indent_style = space 19 | indent_size = 4 20 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/js" 5 | schedule: 6 | interval: daily 7 | time: "22:00" 8 | open-pull-requests-limit: 10 9 | -------------------------------------------------------------------------------- /.scrutinizer.yml: -------------------------------------------------------------------------------- 1 | filter: 2 | excluded_paths: 3 | - '3rdparty/*' 4 | - 'js/vendor/*' 5 | - 'js/public/*' 6 | 7 | imports: 8 | - javascript 9 | - php 10 | 11 | checks: 12 | php: 13 | code_rating: true 14 | duplication: true 15 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | php: 3 | - 5.6 4 | - 7.0 5 | - 7.1 6 | - 7.2 7 | 8 | branches: 9 | only: 10 | - master 11 | - /^stable\d+(\.\d+)?$/ 12 | 13 | script: 14 | # Test lint 15 | - sh -c "ant test" 16 | 17 | 18 | matrix: 19 | fast_finish: true 20 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## 0.9.7 - 2018-12-25 2 | ### Changed 3 | - Changed max version to 10 so app update will work for ownCloud 10.1. 4 | 5 | ## 0.9.6 - 2018-02-07 6 | ### Reverted 7 | - Reverted favicons to ownCloud colors. 8 | 9 | ## 0.9.5 - 2018-01-18 10 | ### Added 11 | - Incorporated features and enhancements from Nextcloud Tasks app 0.9.5. 12 | 13 | ## 0.9.3 - 2018-01-16 14 | ### Fixed 15 | - Initial signed release for ownCloud 10. 16 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | ## Submitting issues 2 | 3 | If you have questions about how to install or use ownCloud, please direct these to the [mailing list][mailinglist] or our [forum][forum]. We are also available on [IRC][irc]. 4 | 5 | ### Short version 6 | 7 | * The [**issue template can be found here**][template]. Please always use the issue template when reporting issues. 8 | 9 | ### Guidelines 10 | * Please search the existing issues first, it's likely that your issue was already reported or even fixed. 11 | - Go to one of the repositories, click "issues" and type any word in the top search/command bar. 12 | - You can also filter by appending e. g. "state:open" to the search string. 13 | - More info on [search syntax within github](https://help.github.com/articles/searching-issues) 14 | * This repository ([tasks](https://github.com/owncloud/tasks/issues)) is *only* for issues within the ownCloud tasks code. 15 | * __SECURITY__: Report any potential security bug to security@owncloud.com following our [security policy](https://owncloud.org/security/) instead of filing an issue in our bug tracker 16 | * Report the issue using our [template][template], it includes all the information we need to track down the issue. 17 | 18 | Help us to maximize the effort we can spend fixing issues and adding new features, by not reporting duplicate issues. 19 | 20 | [template]: https://raw.github.com/owncloud/core/master/issue_template.md 21 | [mailinglist]: https://mailman.owncloud.org/mailman/listinfo/owncloud 22 | [forum]: https://forum.owncloud.org/ 23 | [irc]: https://webchat.freenode.net/?channels=owncloud&uio=d4 24 | 25 | ### Contribute Code and translations 26 | Please check [core's contribution guidelines](https://github.com/owncloud/core/blob/master/CONTRIBUTING.md) for further information about contributing code and translations. 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Tasks 2 | 3 | [![Build Status](https://scrutinizer-ci.com/g/owncloud/tasks/badges/build.png?b=master)](https://scrutinizer-ci.com/g/owncloud/tasks/build-status/master) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/owncloud/tasks/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/owncloud/tasks/?branch=master) [![Code Coverage](https://scrutinizer-ci.com/g/owncloud/tasks/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/owncloud/tasks/?branch=master) 4 | 5 | Tasks app for ownCloud. 6 | 7 | ### Installation 8 | 9 | * **Using git:** In your `owncloud/apps/` directory, run `git clone https://github.com/owncloud/tasks/`. Then go to the Apps manager tab in your ownCloud web interface, and enable the Tasks app. 10 | * **Using the zip archive:** Download the latest [zip archive](https://github.com/owncloud/tasks/archive/master.zip), extract the `tasks-master` directory inside your `owncloud/apps/` directory, and rename it to `tasks`. For stable releases, you can also download one of the [releases](https://github.com/owncloud/tasks/releases) tar.gz archives. Then go to the Apps manager tab in your ownCloud web interface, and enable the Tasks app. 11 | 12 | ### Usage/Features 13 | 14 | Once enabled, a new `Tasks` menu will appear in your ownCloud apps menu. From there you can **add and delete tasks, edit their title, description, start and due dates, reminder times, mark them as important, and add comments on them**. Tasks can be **shared** between users. Tasks can be **synchronized using CalDav** (each task list is linked to an ownCloud calendar, to sync it to your local client - Thunderbird, Evolution, KDE Kontact, iCal... - just add the calendar as a remote calendar in your client). You can **download your tasks as ICS** files using the download button for each calendar. 15 | 16 | ### Screenshot 17 | 18 | ![tasks](https://cloud.githubusercontent.com/assets/2496460/9783697/ab337634-57a6-11e5-9633-b8f950b1e28e.png) 19 | -------------------------------------------------------------------------------- /appinfo/app.php: -------------------------------------------------------------------------------- 1 | . 20 | * 21 | */ 22 | 23 | namespace OCA\Tasks\AppInfo; 24 | 25 | \OC::$server->getNavigationManager()->add(function () { 26 | $urlGenerator = \OC::$server->getURLGenerator(); 27 | return [ 28 | 'id' => 'tasks', 29 | 30 | 'order' => 100, 31 | 32 | 'href' => $urlGenerator->linkToRoute('tasks.page.index'), 33 | 34 | 'icon' => $urlGenerator->imagePath('tasks', 'tasks.svg'), 35 | 36 | 'name' => \OC::$server->getL10N('tasks')->t('Tasks'), 37 | ]; 38 | }); 39 | \OC::$server->getSearch()->registerProvider('OCA\Tasks\Controller\SearchProvider', array('apps' => array('tasks'))); 40 | -------------------------------------------------------------------------------- /appinfo/info.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | tasks 4 | Tasks 5 | 0.9.7 6 | Tasks 7 | productivity 8 | AGPL 9 | Raimund Schlüßler 10 | ownCloud Tasks App for Calender 11 | Once enabled, a new Tasks menu will appear in your ownCloud apps menu. From there you can add and delete tasks, edit their title, description, start and due dates, reminder times, mark them as important, and add comments on them. Tasks can be shared between users. Tasks can be synchronized using CalDav (each task list is linked to an ownCloud calendar, to sync it to your local client - Thunderbird, Evolution, KDE Kontact, iCal... - just add the calendar as a remote calendar in your client). You can download your tasks as ICS files using the download button for each calendar. 12 | https://github.com/owncloud/tasks/raw/master/screenshots/screenshot.png 13 | https://github.com/owncloud/tasks/issues 14 | https://github.com/owncloud/tasks.git 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /appinfo/routes.php: -------------------------------------------------------------------------------- 1 | . 20 | * 21 | */ 22 | 23 | namespace OCA\Tasks; 24 | 25 | // use \OCP\AppFramework\App; 26 | use \OCA\Tasks\AppInfo\Application; 27 | 28 | $application = new Application(); 29 | 30 | $application->registerRoutes($this, array('routes' => array( 31 | // page 32 | array('name' => 'page#index', 'url' => '/', 'verb' => 'GET'), 33 | 34 | // templates 35 | array('name' => 'page#templates', 'url' => '/templates/{template}', 'verb' => 'GET'), 36 | 37 | // collections 38 | array('name' => 'collections#getCollections', 'url' => '/collections', 'verb' => 'GET'), 39 | array('name' => 'collections#setVisibility', 'url' => '/collection/{collectionID}/visibility/{visibility}', 'verb' => 'POST'), 40 | 41 | // settings 42 | array('name' => 'settings#get', 'url' => '/settings', 'verb' => 'GET'), 43 | array('name' => 'settings#set', 'url' => '/settings/{type}/{setting}/{value}', 'verb' => 'POST'), 44 | ))); 45 | -------------------------------------------------------------------------------- /build.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /controller/collectionscontroller.php: -------------------------------------------------------------------------------- 1 | . 20 | * 21 | */ 22 | 23 | namespace OCA\Tasks\Controller; 24 | 25 | use \OCA\Tasks\Service\CollectionsService; 26 | use \OCP\IRequest; 27 | use \OCP\AppFramework\Controller; 28 | 29 | class CollectionsController extends Controller { 30 | 31 | private $collectionsService; 32 | 33 | use Response; 34 | 35 | public function __construct($appName, IRequest $request, CollectionsService $collectionsService){ 36 | parent::__construct($appName, $request); 37 | $this->collectionsService = $collectionsService; 38 | } 39 | 40 | /** 41 | * @NoAdminRequired 42 | */ 43 | public function getCollections(){ 44 | return $this->generateResponse(function () { 45 | return ['collections' => $this->collectionsService->getAll()]; 46 | }); 47 | } 48 | 49 | /** 50 | * @NoAdminRequired 51 | */ 52 | public function setVisibility($collectionID, $visibility){ 53 | return $this->generateResponse(function () use ($collectionID, $visibility) { 54 | return $this->collectionsService->setVisibility($collectionID, $visibility); 55 | }); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /controller/pagecontroller.php: -------------------------------------------------------------------------------- 1 | . 20 | * 21 | */ 22 | 23 | namespace OCA\Tasks\Controller; 24 | 25 | use \OCP\AppFramework\Controller; 26 | use \OCP\AppFramework\Http\TemplateResponse; 27 | use \OCP\AppFramework\Http\NotFoundResponse; 28 | use \OCP\IRequest; 29 | use \OCP\IConfig; 30 | 31 | /** 32 | * Controller class for main page. 33 | */ 34 | class PageController extends Controller { 35 | 36 | /** 37 | * @param string $appName 38 | * @param IConfig $config 39 | */ 40 | public function __construct($appName, IRequest $request, 41 | $userId, IConfig $config) { 42 | parent::__construct($appName, $request); 43 | $this->config = $config; 44 | $this->userId = $userId; 45 | } 46 | 47 | 48 | /** 49 | * @NoAdminRequired 50 | * @NoCSRFRequired 51 | */ 52 | public function index() { 53 | 54 | $day = new \DateTime('today'); 55 | $day = $day->format('d'); 56 | 57 | $appVersion = $this->config->getAppValue($this->appName, 'installed_version'); 58 | $response = new TemplateResponse('tasks', 'main'); 59 | $response->setParams(array( 60 | 'appVersion' => $appVersion, 61 | 'DOM' => $day 62 | )); 63 | 64 | return $response; 65 | } 66 | 67 | 68 | /** 69 | * @NoAdminRequired 70 | * @NoCSRFRequired 71 | */ 72 | public function templates($template) { 73 | $templates = array( 'confirmation'); 74 | if (in_array($template, $templates)) { 75 | $response = new TemplateResponse('tasks', $template, [], 'blank'); 76 | } else { 77 | $response = new NotFoundResponse(); 78 | } 79 | return $response; 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /controller/response.php: -------------------------------------------------------------------------------- 1 | . 20 | * 21 | */ 22 | 23 | namespace OCA\Tasks\Controller; 24 | 25 | use \Closure; 26 | use \OCP\AppFramework\Http\JSONResponse; 27 | 28 | trait Response { 29 | 30 | protected function generateResponse (Closure $callback) { 31 | try { 32 | $message = [ 33 | 'status' => 'success', 34 | 'data' => $callback(), 35 | 'message' => null 36 | ]; 37 | 38 | } catch(\Exception $e) { 39 | $message = [ 40 | 'status' => 'error', 41 | 'data' => null, 42 | 'message' => $e->getMessage() 43 | ]; 44 | } 45 | return new JSONResponse($message); 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /controller/searchprovider.php: -------------------------------------------------------------------------------- 1 | . 20 | * 21 | */ 22 | 23 | namespace OCA\Tasks\Controller; 24 | 25 | use OCA\Tasks\AppInfo\Application; 26 | 27 | /** 28 | * Tasks search provider 29 | */ 30 | class SearchProvider extends \OCP\Search\Provider { 31 | 32 | // private $tasksService; 33 | 34 | public function __construct() { 35 | $app = new Application(); 36 | $container = $app->getContainer(); 37 | $this->app = $app; 38 | // $this->tasksService = $container->query('TasksService'); 39 | } 40 | 41 | 42 | /** 43 | * Search for query in tasks 44 | * 45 | * @param string $query 46 | * @return array 47 | */ 48 | public function search($query) { 49 | return array(); 50 | // return $this->tasksService->search($query); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /controller/settingscontroller.php: -------------------------------------------------------------------------------- 1 | . 20 | * 21 | */ 22 | 23 | namespace OCA\Tasks\Controller; 24 | 25 | use \OCA\Tasks\Service\SettingsService; 26 | use \OCP\AppFramework\Controller; 27 | use \OCP\IRequest; 28 | 29 | class SettingsController extends Controller { 30 | 31 | private $settingsService; 32 | 33 | use Response; 34 | 35 | public function __construct($appName, IRequest $request, SettingsService $settingsService){ 36 | parent::__construct($appName, $request); 37 | $this->settingsService = $settingsService; 38 | } 39 | 40 | /** 41 | * @NoAdminRequired 42 | */ 43 | public function get(){ 44 | return $this->generateResponse(function () { 45 | return ['settings' => $this->settingsService->get()]; 46 | }); 47 | } 48 | 49 | /** 50 | * @NoAdminRequired 51 | */ 52 | public function set($setting, $type, $value){ 53 | return $this->generateResponse(function () use ($setting, $type, $value) { 54 | return $this->settingsService->set($setting, $type, $value); 55 | }); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /css/vendor/timepicker/jquery.ui.timepicker.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Timepicker stylesheet 3 | * Highly inspired from datepicker 4 | * FG - Nov 2010 - Web3R 5 | * 6 | * version 0.0.3 : Fixed some settings, more dynamic 7 | * version 0.0.4 : Removed width:100% on tables 8 | * version 0.1.1 : set width 0 on tables to fix an ie6 bug 9 | */ 10 | 11 | .ui-timepicker-inline { display: inline; } 12 | 13 | #ui-timepicker-div { padding: 0.2em; background-color: #fff; } 14 | .ui-timepicker-table { display: inline-table; width: 0; } 15 | .ui-timepicker-table table { margin:0.15em 0 0 0; border-collapse: collapse; } 16 | 17 | .ui-timepicker-hours, .ui-timepicker-minutes { padding: 0.2em; } 18 | 19 | .ui-timepicker-table .ui-timepicker-title { line-height: 1.8em; text-align: center; } 20 | .ui-timepicker-table td { padding: 0.1em; width: 2.2em; } 21 | .ui-timepicker-table th.periods { padding: 0.1em; width: 2.2em; } 22 | 23 | /* span for disabled cells */ 24 | .ui-timepicker-table td span { 25 | display:block; 26 | padding:0.2em 0.3em 0.2em 0.5em; 27 | width: 1.2em; 28 | 29 | text-align:right; 30 | text-decoration:none; 31 | } 32 | /* anchors for clickable cells */ 33 | .ui-timepicker-table td a { 34 | display:block; 35 | padding:0.2em 0.3em 0.2em 0.5em; 36 | width: 1.2em; 37 | cursor: pointer; 38 | text-align:right; 39 | text-decoration:none; 40 | } 41 | 42 | 43 | /* buttons and button pane styling */ 44 | .ui-timepicker .ui-timepicker-buttonpane { 45 | background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; 46 | } 47 | .ui-timepicker .ui-timepicker-buttonpane button { margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } 48 | /* The close button */ 49 | .ui-timepicker .ui-timepicker-close { float: right } 50 | 51 | /* the now button */ 52 | .ui-timepicker .ui-timepicker-now { float: left; } 53 | 54 | /* the deselect button */ 55 | .ui-timepicker .ui-timepicker-deselect { float: left; } 56 | 57 | 58 | /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ 59 | .ui-timepicker-cover { 60 | display: none; /*sorry for IE5*/ 61 | display/**/: block; /*sorry for IE5*/ 62 | position: absolute; /*must have*/ 63 | z-index: -1; /*must have*/ 64 | filter: mask(); /*must have*/ 65 | top: -4px; /*must have*/ 66 | left: -4px; /*must have*/ 67 | width: 200px; /*must have*/ 68 | height: 200px; /*must have*/ 69 | } -------------------------------------------------------------------------------- /img/divider.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /img/favicon-touch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/img/favicon-touch.png -------------------------------------------------------------------------------- /img/favicon-touch.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/img/favicon.ico -------------------------------------------------------------------------------- /img/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/img/favicon.png -------------------------------------------------------------------------------- /img/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/img/loading.gif -------------------------------------------------------------------------------- /img/source/alphabetically.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /img/source/checkbox.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 15 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /img/source/divider.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /img/source/eye_hidden.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 9 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /img/source/eye_visible.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 9 | 10 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /img/source/manual.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 11 | 12 | 13 | 15 | 16 | 17 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /img/source/plus.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /img/source/star.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /img/source/star_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /img/source/task.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /img/source/task_active.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /img/source/update.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /img/sprites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/img/sprites.png -------------------------------------------------------------------------------- /img/tasks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/img/tasks.png -------------------------------------------------------------------------------- /img/tasks.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | 14 | 15 | -------------------------------------------------------------------------------- /issue_template.md: -------------------------------------------------------------------------------- 1 | 5 | ### Steps to reproduce 6 | 1. 7 | 2. 8 | 3. 9 | 10 | ### Expected behaviour 11 | Tell us what should happen 12 | 13 | ### Actual behaviour 14 | Tell us what happens instead 15 | 16 | ### Server configuration 17 | **Operating system**: 18 | 19 | **Web server:** 20 | 21 | **Database:** 22 | 23 | **PHP version:** 24 | 25 | **ownCloud version:** (see ownCloud admin page) 26 | 27 | **Tasks version:** (see ownCloud apps page) 28 | 29 | **Updated from an older ownCloud or fresh install:** 30 | 31 | **Signing status (ownCloud 9.0 and above):** 32 | 33 | ``` 34 | Login as admin user into your ownCloud and access 35 | http://example.com/index.php/settings/integrity/failed 36 | paste the results here. 37 | ``` 38 | 39 | **List of activated apps:** 40 | 41 | ``` 42 | If you have access to your command line run e.g.: 43 | sudo -u www-data php occ app:list 44 | from within your ownCloud installation folder 45 | ``` 46 | 47 | **The content of config/config.php:** 48 | 49 | ``` 50 | If you have access to your command line run e.g.: 51 | sudo -u www-data php occ config:list system 52 | from within your ownCloud installation folder 53 | 54 | or 55 | 56 | Insert your config.php content here 57 | (Without the database password, passwordsalt and secret) 58 | ``` 59 | 60 | **Are you using external storage, if yes which one:** local/smb/sftp/... 61 | 62 | **Are you using encryption:** yes/no 63 | 64 | **Are you using an external user-backend, if yes which one:** LDAP/ActiveDirectory/Webdav/... 65 | 66 | #### LDAP configuration (delete this part if not used) 67 | 68 | ``` 69 | With access to your command line run e.g.: 70 | sudo -u www-data php occ ldap:show-config 71 | from within your ownCloud installation folder 72 | 73 | Without access to your command line download the data/owncloud.db to your local 74 | computer or access your SQL server remotely and run the select query: 75 | SELECT * FROM `oc_appconfig` WHERE `appid` = 'user_ldap'; 76 | 77 | 78 | Eventually replace sensitive data as the name/IP-address of your LDAP server or groups. 79 | ``` 80 | 81 | ### Client configuration 82 | **Browser:** 83 | 84 | **Operating system:** 85 | 86 | **CalDAV-clients:** 87 | 88 | ### Logs 89 | #### Web server error log 90 | ``` 91 | Insert your webserver log here 92 | ``` 93 | 94 | #### ownCloud log (data/owncloud.log) 95 | ``` 96 | Insert your ownCloud log here 97 | ``` 98 | 99 | #### Browser log 100 | ``` 101 | Insert your browser log here, this could for example include: 102 | 103 | a) The javascript console log 104 | b) The network log 105 | c) ... 106 | ``` 107 | -------------------------------------------------------------------------------- /js/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "vendor", 3 | "ignoredDependencies": [ 4 | "jquery", 5 | "moment" 6 | ] 7 | } -------------------------------------------------------------------------------- /js/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esnext": true, 3 | "curly": true, 4 | "eqeqeq": true, 5 | "immed": true, 6 | "indent": 4, 7 | "latedef": true, 8 | "newcap": true, 9 | "noarg": true, 10 | "noempty": true, 11 | "nonew": true, 12 | "plusplus": false, 13 | "node": true, 14 | "undef": true, 15 | "unused": false, 16 | "strict": true, 17 | "maxparams": false, 18 | "maxdepth": 4, 19 | "browser": true, 20 | "devel": true, 21 | "jquery": true, 22 | "jasmine": true, 23 | "globals": { 24 | "jQuery": true, 25 | "ICAL": true, 26 | "jstz": true, 27 | "moment": true, 28 | "angular": true, 29 | "app": true, 30 | "OC": true, 31 | "oc_requesttoken": true, 32 | "requestToken": true, 33 | "inject": true, 34 | "module": true, 35 | "t": true, 36 | "it": true, 37 | "exports": true, 38 | "escapeHTML": true, 39 | "possible": true, 40 | "dav": true 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /js/Gruntfile.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | 23 | module.exports = function(grunt) { 24 | 'use strict'; 25 | 26 | grunt.loadNpmTasks('grunt-contrib-concat'); 27 | grunt.loadNpmTasks('grunt-contrib-watch'); 28 | grunt.loadNpmTasks('grunt-contrib-jshint'); 29 | grunt.loadNpmTasks('grunt-wrap'); 30 | grunt.loadNpmTasks('grunt-phpunit'); 31 | grunt.loadNpmTasks('grunt-karma'); 32 | // grunt.loadNpmTasks('grunt-newer'); 33 | grunt.loadNpmTasks('grunt-phpdocumentor'); 34 | 35 | grunt.initConfig({ 36 | meta: { 37 | pkg: grunt.file.readJSON('package.json'), 38 | version: '<%= meta.pkg.version %>', 39 | banner: '/**\n' + ' * <%= meta.pkg.description %> - v<%= meta.version %>\n' + ' *\n' + ' * Copyright (c) <%= grunt.template.today("yyyy") %> - ' + '<%= meta.pkg.author.name %> <<%= meta.pkg.author.email %>>\n' + ' *\n' + ' * This file is licensed under the Affero\ 40 | General Public License version 3 or later.\n' + ' * See the COPYING file\n' + ' *\n' + ' */\n\n', 41 | build: 'app/', 42 | production: 'public/' 43 | }, 44 | concat: { 45 | "default": { 46 | options: { 47 | banner: '<%= meta.banner %>\n', 48 | stripBanners: { 49 | options: 'block' 50 | } 51 | }, 52 | src: '<%= meta.build %>/**/*.js', 53 | dest: '<%= meta.production %>app.js' 54 | } 55 | }, 56 | wrap: { 57 | "default": { 58 | src: '<%= meta.production %>app.js', 59 | dest: '', 60 | wrapper: ['(function(angular, $, oc_requesttoken, undefined){\n\n', '\n})(window.angular, window.jQuery, oc_requesttoken);'] 61 | } 62 | }, 63 | 64 | jshint: { 65 | files: [ 66 | 'Gruntfile.js', 67 | '<%= meta.build %>**/*.js' 68 | ], 69 | options: { 70 | jshintrc: '.jshintrc', 71 | reporter: require('jshint-stylish') 72 | } 73 | }, 74 | 75 | watch: { 76 | concat: { 77 | files: [ 78 | '<%= meta.build %>**/*.js' 79 | ], 80 | options: { 81 | livereload: true 82 | }, 83 | tasks: ['js'] 84 | } 85 | } 86 | }); 87 | grunt.registerTask('js', ['concat', 'wrap']); 88 | grunt.registerTask('default', 'js'); 89 | }; 90 | -------------------------------------------------------------------------------- /js/README.md: -------------------------------------------------------------------------------- 1 | # JS & CSS development 2 | You need grunt installed to compile the coffeescript and less files. 3 | To compile all files run `grunt dev`. 4 | 5 | ## JS 6 | To compile the coffeescript run: 7 | `grunt js` 8 | 9 | ## CSS 10 | To compile the less files run: 11 | `grunt css` 12 | 13 | ## Watch Tasks 14 | Instead of executing the command everytime you change a file, grunt can watch for changes. 15 | Use the following commands instead: 16 | ``` 17 | grunt watch:dev 18 | grunt watch:js 19 | grunt watch:css 20 | ``` 21 | -------------------------------------------------------------------------------- /js/app/directives/appnavigationentryutils.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').directive('appNavigationEntryUtils', function() { 23 | 'use strict'; 24 | return { 25 | restrict: 'C', 26 | link: function(scope, elm) { 27 | var button, menu; 28 | menu = elm.siblings('.app-navigation-entry-menu'); 29 | button = $(elm).find('.app-navigation-entry-utils-menu-button button'); 30 | button.click(function() { 31 | menu.toggleClass('open'); 32 | }); 33 | scope.$on('documentClicked', function(scope, event) { 34 | if (event.target !== button[0]) { 35 | menu.removeClass('open'); 36 | } 37 | }); 38 | } 39 | }; 40 | }); 41 | -------------------------------------------------------------------------------- /js/app/directives/autofocusoninsert.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').directive('autofocusOnInsert', function() { 23 | 'use strict'; 24 | return function(scope, elm) { 25 | return elm.focus(); 26 | }; 27 | }); 28 | -------------------------------------------------------------------------------- /js/app/directives/avatar.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').directive('avatar', function() { 23 | 'use strict'; 24 | return { 25 | restrict: 'A', 26 | scope: false, 27 | link: function(scope, elm, attr) { 28 | return attr.$observe('userid', function() { 29 | if (attr.userid) { 30 | return elm.avatar(attr.userid, attr.size); 31 | } 32 | }); 33 | } 34 | }; 35 | }); 36 | -------------------------------------------------------------------------------- /js/app/directives/datepicker.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').directive('datepicker', function() { 23 | 'use strict'; 24 | return { 25 | restrict: 'A', 26 | scope: false, 27 | link: function(scope, elm, attr) { 28 | return elm.datepicker({ 29 | onSelect: function(date, inst) { 30 | scope['set' + attr.datepicker + 'day'](date); 31 | return scope.$apply(); 32 | }, 33 | beforeShow: function(input, inst) { 34 | var dp, marginLeft; 35 | dp = $(inst).datepicker('widget'); 36 | marginLeft = -Math.abs($(input).outerWidth() - dp.outerWidth()) / 2 + 'px'; 37 | dp.css({ 38 | 'margin-left': marginLeft 39 | }); 40 | $("div.ui-datepicker:before").css({ 41 | 'left': 100 + 'px' 42 | }); 43 | return $('.hasDatepicker').datepicker("option", "firstDay", scope.settingsmodel.getById('various').startOfWeek); 44 | }, 45 | beforeShowDay: function(date) { 46 | if (moment(date).startOf('day').diff(moment(scope.task[attr.datepicker], "YYYYMMDDTHHmmss").startOf('day'), 'days') === 0) { 47 | return [1, "selected"]; 48 | } else { 49 | return [1, ""]; 50 | } 51 | }, 52 | minDate: null 53 | }); 54 | } 55 | }; 56 | }); 57 | -------------------------------------------------------------------------------- /js/app/directives/occlickfocus.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').directive('ocClickFocus', [ 23 | '$timeout', function($timeout) { 24 | 'use strict'; 25 | return function(scope, elm, attr) { 26 | var options; 27 | options = scope.$eval(attr.ocClickFocus); 28 | if (angular.isDefined(options) && angular.isDefined(options.selector)) { 29 | return elm.click(function() { 30 | if (angular.isDefined(options.timeout)) { 31 | return $timeout(function() { 32 | return $(options.selector).focus(); 33 | }, options.timeout); 34 | } else { 35 | return $(options.selector).focus(); 36 | } 37 | }); 38 | } 39 | }; 40 | } 41 | ]); 42 | -------------------------------------------------------------------------------- /js/app/directives/timepicker.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').directive('timepicker', function() { 23 | 'use strict'; 24 | return { 25 | restrict: 'A', 26 | link: function(scope, elm, attr) { 27 | return elm.timepicker({ 28 | onSelect: function(date, inst) { 29 | scope['set' + attr.timepicker + 'time'](date); 30 | return scope.$apply(); 31 | }, 32 | myPosition: 'center top', 33 | atPosition: 'center bottom', 34 | hourText: t('tasks', 'Hours'), 35 | minuteText: t('tasks', 'Minutes') 36 | }); 37 | } 38 | }; 39 | }); 40 | -------------------------------------------------------------------------------- /js/app/directives/watchtop.js: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | ownCloud - Tasks 4 | 5 | @author Raimund Schlüßler 6 | @copyright 2016 7 | 8 | This library is free software; you can redistribute it and/or 9 | modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 10 | License as published by the Free Software Foundation; either 11 | version 3 of the License, or any later version. 12 | 13 | This library is distributed in the hope that it will be useful, 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | GNU AFFERO GENERAL PUBLIC LICENSE for more details. 17 | 18 | You should have received a copy of the GNU Affero General Public 19 | License along with this library. If not, see . 20 | */ 21 | 22 | angular.module('Tasks').directive('watchTop', function() { 23 | 'use strict'; 24 | return { 25 | restrict: 'A', 26 | link: function(scope, element, attr) { 27 | ({ 28 | scope: { 29 | "divTop": "=" 30 | } 31 | }); 32 | return scope.$watch(function() { 33 | scope.divTop = element.prev().outerHeight(true); 34 | }); 35 | } 36 | }; 37 | }); 38 | -------------------------------------------------------------------------------- /js/app/filters/counterFormatter.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').filter('counterFormatter', function() { 23 | 'use strict'; 24 | return function(count) { 25 | switch (false) { 26 | case count !== 0: 27 | return ''; 28 | case count < 999: 29 | return '999+'; 30 | default: 31 | return count; 32 | } 33 | }; 34 | }); 35 | -------------------------------------------------------------------------------- /js/app/filters/dateDetails.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').filter('dateDetails', function() { 23 | 'use strict'; 24 | return function(due) { 25 | if (moment(due, "YYYYMMDDTHHmmss").isValid()) { 26 | return moment(due, "YYYYMMDDTHHmmss").locale('details').calendar(); 27 | } else { 28 | return t('tasks', 'Set due date'); 29 | } 30 | }; 31 | }); 32 | -------------------------------------------------------------------------------- /js/app/filters/dateDetailsShort.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').filter('dateDetailsShort', function() { 23 | 'use strict'; 24 | return function(reminder) { 25 | if (moment(reminder, "YYYYMMDDTHHmmss").isValid()) { 26 | return moment(reminder, "YYYYMMDDTHHmmss").locale('details_short').calendar(); 27 | } else { 28 | return ''; 29 | } 30 | }; 31 | }); 32 | -------------------------------------------------------------------------------- /js/app/filters/dateFromNow.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').filter('dateFromNow', function() { 23 | 'use strict'; 24 | return function(due) { 25 | if (moment(due, "YYYYMMDDTHHmmss").isValid()) { 26 | return moment(due, "YYYYMMDDTHHmmss").fromNow(); 27 | } else { 28 | return ''; 29 | } 30 | }; 31 | }); 32 | -------------------------------------------------------------------------------- /js/app/filters/dateTaskList.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').filter('dateTaskList', function() { 23 | 'use strict'; 24 | return function(due) { 25 | if (moment(due, "YYYYMMDDTHHmmss").isValid()) { 26 | return moment(due, "YYYYMMDDTHHmmss").locale('tasks').calendar(); 27 | } else { 28 | return ''; 29 | } 30 | }; 31 | }); 32 | -------------------------------------------------------------------------------- /js/app/filters/day.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').filter('day', function() { 23 | 'use strict'; 24 | return function(i) { 25 | return moment().add('days', i).locale('list_week').calendar(); 26 | }; 27 | }); 28 | -------------------------------------------------------------------------------- /js/app/filters/dayTaskList.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').filter('dayTaskList', function() { 23 | 'use strict'; 24 | return function(due) { 25 | if (moment(due, "YYYYMMDDTHHmmss").isValid()) { 26 | return moment(due, "YYYYMMDDTHHmmss").locale('tasks').calendar(); 27 | } else { 28 | return ''; 29 | } 30 | }; 31 | }); 32 | -------------------------------------------------------------------------------- /js/app/filters/percentDetails.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').filter('percentDetails', function() { 23 | 'use strict'; 24 | return function(percent) { 25 | return t('tasks', '%s %% completed').replace('%s', percent).replace('%%', '%'); 26 | }; 27 | }); 28 | -------------------------------------------------------------------------------- /js/app/filters/priorityDetails.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | 23 | angular.module('Tasks').filter('priorityDetails', function() { 24 | 'use strict'; 25 | return function(priority) { 26 | var string; 27 | string = t('tasks', 'priority %s: ').replace('%s', priority); 28 | if (+priority === 6 || +priority === 7 || +priority === 8 || +priority === 9) { 29 | return string + ' ' + t('tasks', 'high'); 30 | } else if (+priority === 5) { 31 | return string + ' ' + t('tasks', 'medium'); 32 | } else if (+priority === 1 || +priority === 2 || +priority === 3 || +priority === 4) { 33 | return string + ' ' + t('tasks', 'low'); 34 | } else { 35 | return t('tasks', 'no priority assigned'); 36 | } 37 | }; 38 | }); 39 | -------------------------------------------------------------------------------- /js/app/filters/reminderDetails.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').filter('reminderDetails', function() { 23 | 'use strict'; 24 | return function(reminder, scope) { 25 | var ds, time, token, _i, _len, _ref; 26 | if (!(angular.isUndefined(reminder) || reminder === null)) { 27 | if (reminder.type === 'DATE-TIME' && moment(reminder.date, "YYYYMMDDTHHmmss").isValid()) { 28 | return moment(reminder.date, "YYYYMMDDTHHmmss").locale('reminder').calendar(); 29 | } else if (reminder.type === 'DURATION' && reminder.duration) { 30 | ds = t('tasks', 'Remind me'); 31 | _ref = scope.durations; 32 | for (_i = 0, _len = _ref.length; _i < _len; _i++) { 33 | token = _ref[_i]; 34 | if (+reminder.duration[token.id]) { 35 | time = 1; 36 | ds += ' ' + reminder.duration[token.id] + ' '; 37 | if (+reminder.duration[token.id] === 1) { 38 | ds += token.name; 39 | } else { 40 | ds += token.names; 41 | } 42 | } 43 | } 44 | if (!time) { 45 | if (reminder.duration.params.related === 'END') { 46 | ds += ' ' + t('tasks', 'at the end'); 47 | } else { 48 | ds += ' ' + t('tasks', 'at the beginning'); 49 | } 50 | } else { 51 | if (reminder.duration.params.invert) { 52 | if (reminder.duration.params.related === 'END') { 53 | ds += ' ' + t('tasks', 'before end'); 54 | } else { 55 | ds += ' ' + t('tasks', 'before beginning'); 56 | } 57 | } else { 58 | if (reminder.duration.params.related === 'END') { 59 | ds += ' ' + t('tasks', 'after end'); 60 | } else { 61 | ds += ' ' + t('tasks', 'after beginning'); 62 | } 63 | } 64 | } 65 | return ds; 66 | } else { 67 | return t('tasks', 'Remind me'); 68 | } 69 | } else { 70 | return t('tasks', 'Remind me'); 71 | } 72 | }; 73 | }); 74 | -------------------------------------------------------------------------------- /js/app/filters/startDetails.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').filter('startDetails', function() { 23 | 'use strict'; 24 | return function(due) { 25 | if (moment(due, "YYYYMMDDTHHmmss").isValid()) { 26 | return moment(due, "YYYYMMDDTHHmmss").locale('start').calendar(); 27 | } else { 28 | return t('tasks', 'Set start date'); 29 | } 30 | }; 31 | }); 32 | -------------------------------------------------------------------------------- /js/app/filters/timeTaskList.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').filter('timeTaskList', function() { 23 | 'use strict'; 24 | return function(due) { 25 | if (moment(due, "YYYYMMDDTHHmmss").isValid()) { 26 | return moment(due, "YYYYMMDDTHHmmss").format('HH:mm'); 27 | } else { 28 | return ''; 29 | } 30 | }; 31 | }); 32 | -------------------------------------------------------------------------------- /js/app/services/businesslayer/listsbusinesslayer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').factory('ListsBusinessLayer', [ 23 | 'ListsModel', 'Persistence', 'TasksBusinessLayer', 'CalendarService', function(ListsModel, Persistence, TasksBusinessLayer, CalendarService) { 24 | 'use strict'; 25 | var ListsBusinessLayer; 26 | ListsBusinessLayer = (function() { 27 | function ListsBusinessLayer(_$listsmodel, _persistence, _$tasksbusinesslayer, _$calendarservice) { 28 | this._$listsmodel = _$listsmodel; 29 | this._persistence = _persistence; 30 | this._$tasksbusinesslayer = _$tasksbusinesslayer; 31 | this._$calendarservice = _$calendarservice; 32 | } 33 | 34 | ListsBusinessLayer.prototype.init = function() { 35 | return this._$calendarservice.getAll().then(function(calendars) { 36 | var calendar, _i, _len, _results; 37 | _results = []; 38 | for (_i = 0, _len = calendars.length; _i < _len; _i++) { 39 | calendar = calendars[_i]; 40 | ListsModel.add(calendar); 41 | _results.push(TasksBusinessLayer.getAll(calendar)); 42 | } 43 | return _results; 44 | }); 45 | }; 46 | 47 | ListsBusinessLayer.prototype.add = function(calendar, color) { 48 | return this._$calendarservice.create(calendar, color, ['vtodo']).then(function(calendar) { 49 | ListsModel.add(calendar); 50 | return calendar; 51 | }); 52 | }; 53 | 54 | ListsBusinessLayer.prototype["delete"] = function(calendar) { 55 | return this._$calendarservice["delete"](calendar).then(function() { 56 | return ListsModel["delete"](calendar); 57 | }); 58 | }; 59 | 60 | ListsBusinessLayer.prototype.rename = function(calendar) { 61 | this._$calendarservice.update(calendar).then(function(calendar) { 62 | calendar.dropPreviousState(); 63 | }); 64 | }; 65 | 66 | return ListsBusinessLayer; 67 | 68 | })(); 69 | return new ListsBusinessLayer(ListsModel, Persistence, TasksBusinessLayer, CalendarService); 70 | } 71 | ]); 72 | -------------------------------------------------------------------------------- /js/app/services/businesslayer/settingsbusinesslayer.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').factory('SettingsBusinessLayer', [ 23 | 'Persistence', 'SettingsModel', function(Persistence, SettingsModel) { 24 | 'use strict'; 25 | var SettingsBusinessLayer = (function() { 26 | function SettingsBusinessLayer(_persistence, _$settingsmodel) { 27 | this._persistence = _persistence; 28 | this._$settingsmodel = _$settingsmodel; 29 | } 30 | 31 | SettingsBusinessLayer.prototype.updateModel = function() { 32 | var success, _this = this; 33 | success = function() {}; 34 | return this._persistence.getCollections(success, true); 35 | }; 36 | 37 | SettingsBusinessLayer.prototype.setVisibility = function(collectionID, visibility) { 38 | return this._persistence.setVisibility(collectionID, visibility); 39 | }; 40 | 41 | SettingsBusinessLayer.prototype.toggle = function(type, setting) { 42 | this._$settingsmodel.toggle(type, setting); 43 | var value = this._$settingsmodel.getById(type)[setting]; 44 | return this._persistence.setting(type, setting, +value); 45 | }; 46 | 47 | SettingsBusinessLayer.prototype.set = function(type, setting, value) { 48 | return this._persistence.setting(type, setting, value); 49 | }; 50 | 51 | return SettingsBusinessLayer; 52 | 53 | })(); 54 | return new SettingsBusinessLayer(Persistence, SettingsModel); 55 | } 56 | ]); 57 | -------------------------------------------------------------------------------- /js/app/services/davclient.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raghu Nayyar 5 | * @author Georg Ehrke 6 | * @author Raimund Schlüßler 7 | * @copyright 2016 Raghu Nayyar 8 | * @copyright 2016 Georg Ehrke 9 | * @copyright 2016 Raimund Schlüßler 10 | * 11 | * This library is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or any later version. 15 | * 16 | * This library is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 20 | * 21 | * You should have received a copy of the GNU Affero General Public 22 | * License along with this library. If not, see . 23 | * 24 | */ 25 | 26 | angular.module('Tasks').service('DavClient', [ 27 | function() { 28 | 'use strict'; 29 | var client; 30 | client = new dav.Client({ 31 | baseUrl: OC.linkToRemote('dav/calendars'), 32 | xmlNamespaces: { 33 | 'DAV:': 'd', 34 | 'urn:ietf:params:xml:ns:caldav': 'c', 35 | 'http://apple.com/ns/ical/': 'aapl', 36 | 'http://owncloud.org/ns': 'oc', 37 | 'http://calendarserver.org/ns/': 'cs' 38 | } 39 | }); 40 | angular.extend(client, { 41 | NS_DAV: 'DAV:', 42 | NS_IETF: 'urn:ietf:params:xml:ns:caldav', 43 | NS_APPLE: 'http://apple.com/ns/ical/', 44 | NS_OWNCLOUD: 'http://owncloud.org/ns', 45 | NS_CALENDARSERVER: 'http://calendarserver.org/ns/', 46 | buildUrl: function(path) { 47 | return window.location.protocol + '//' + window.location.host + path; 48 | }, 49 | wasRequestSuccessful: function(status) { 50 | return status >= 200 && status <= 299; 51 | } 52 | }); 53 | return client; 54 | } 55 | ]); 56 | -------------------------------------------------------------------------------- /js/app/services/icalfactory.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raghu Nayyar 5 | * @author Georg Ehrke 6 | * @author Raimund Schlüßler 7 | * @copyright 2016 Raghu Nayyar 8 | * @copyright 2016 Georg Ehrke 9 | * @copyright 2016 Raimund Schlüßler 10 | * 11 | * This library is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or any later version. 15 | * 16 | * This library is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 20 | * 21 | * You should have received a copy of the GNU Affero General Public 22 | * License along with this library. If not, see . 23 | * 24 | */ 25 | 26 | angular.module('Tasks').service('ICalFactory', [ 27 | function() { 28 | 'use strict'; 29 | 30 | // creates a new ICAL root element with a product id property 31 | return { 32 | new: function() { 33 | var root = new ICAL.Component(['vcalendar', [], []]); 34 | 35 | var version = angular.element('#app').attr('data-appVersion'); 36 | root.updatePropertyWithValue('prodid', '-//ownCloud tasks v' + version); 37 | 38 | return root; 39 | } 40 | }; 41 | } 42 | ]); 43 | -------------------------------------------------------------------------------- /js/app/services/loading.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').factory('Loading', [ 23 | function() { 24 | 'use strict'; 25 | var Loading = (function() { 26 | function Loading() { 27 | this.count = 0; 28 | } 29 | 30 | Loading.prototype.increase = function() { 31 | return this.count += 1; 32 | }; 33 | 34 | Loading.prototype.decrease = function() { 35 | return this.count -= 1; 36 | }; 37 | 38 | Loading.prototype.getCount = function() { 39 | return this.count; 40 | }; 41 | 42 | Loading.prototype.isLoading = function() { 43 | return this.count > 0; 44 | }; 45 | 46 | return Loading; 47 | 48 | })(); 49 | return new Loading(); 50 | } 51 | ]); 52 | -------------------------------------------------------------------------------- /js/app/services/models/collectionsmodel.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | (function() { 23 | 'use strict'; 24 | var __hasProp = {}.hasOwnProperty, 25 | __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; 26 | 27 | angular.module('Tasks').factory('CollectionsModel', [ 28 | 'TasksModel', '_Model', function(TasksModel, _Model) { 29 | var CollectionsModel; 30 | CollectionsModel = (function(_super) { 31 | __extends(CollectionsModel, _super); 32 | 33 | function CollectionsModel(_$tasksmodel) { 34 | this._$tasksmodel = _$tasksmodel; 35 | this._nameCache = {}; 36 | CollectionsModel.__super__.constructor.call(this); 37 | } 38 | 39 | CollectionsModel.prototype.add = function(data, clearCache) { 40 | if (clearCache === null) { 41 | clearCache = true; 42 | } 43 | this._nameCache[data.displayname] = data; 44 | if (angular.isDefined(data.id)) { 45 | return CollectionsModel.__super__.add.call(this, data, clearCache); 46 | } 47 | }; 48 | 49 | CollectionsModel.prototype.getCount = function(collectionID, filter) { 50 | var count, task, tasks, _i, _len; 51 | if (filter === null) { 52 | filter = ''; 53 | } 54 | count = 0; 55 | tasks = this._$tasksmodel.filteredTasks(filter); 56 | for (_i = 0, _len = tasks.length; _i < _len; _i++) { 57 | task = tasks[_i]; 58 | count += this._$tasksmodel.filterTasks(task, collectionID) && !task.related; 59 | } 60 | return count; 61 | }; 62 | 63 | return CollectionsModel; 64 | 65 | })(_Model); 66 | return new CollectionsModel(TasksModel); 67 | } 68 | ]); 69 | 70 | }).call(this); 71 | -------------------------------------------------------------------------------- /js/app/services/models/settingsmodel.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | (function() { 23 | 'use strict'; 24 | var __hasProp = {}.hasOwnProperty, 25 | __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; 26 | 27 | angular.module('Tasks').factory('SettingsModel', [ 28 | '_Model', function(_Model) { 29 | var SettingsModel; 30 | SettingsModel = (function(_super) { 31 | __extends(SettingsModel, _super); 32 | 33 | function SettingsModel() { 34 | this._nameCache = {}; 35 | SettingsModel.__super__.constructor.call(this); 36 | } 37 | 38 | SettingsModel.prototype.add = function(data, clearCache) { 39 | if (clearCache === null) { 40 | clearCache = true; 41 | } 42 | this._nameCache[data.displayname] = data; 43 | if (angular.isDefined(data.id)) { 44 | return SettingsModel.__super__.add.call(this, data, clearCache); 45 | } else { 46 | return this._data.push(data); 47 | } 48 | }; 49 | 50 | SettingsModel.prototype.toggle = function(type, setting) { 51 | var set; 52 | set = this.getById(type); 53 | this.getById(type)[setting] = !set[setting]; 54 | }; 55 | 56 | return SettingsModel; 57 | 58 | })(_Model); 59 | return new SettingsModel(); 60 | } 61 | ]); 62 | 63 | }).call(this); 64 | -------------------------------------------------------------------------------- /js/app/services/publisher.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').factory('Publisher', [ 23 | 'CollectionsModel', 'SettingsModel', function(CollectionsModel, SettingsModel) { 24 | 'use strict'; 25 | var Publisher = (function() { 26 | function Publisher(_$collectionsmodel, _$settingsmodel) { 27 | this._$collectionsmodel = _$collectionsmodel; 28 | this._$settingsmodel = _$settingsmodel; 29 | this._subscriptions = {}; 30 | this.subscribeObjectTo(this._$collectionsmodel, 'collections'); 31 | this.subscribeObjectTo(this._$settingsmodel, 'settings'); 32 | } 33 | 34 | Publisher.prototype.subscribeObjectTo = function(object, name) { 35 | var base = this._subscriptions; 36 | if (!base[name]) { 37 | base[name] = []; 38 | } 39 | return this._subscriptions[name].push(object); 40 | }; 41 | 42 | Publisher.prototype.publishDataTo = function(data, name) { 43 | var ref, results, subscriber, _i, _len; 44 | ref = this._subscriptions[name] || []; 45 | results = []; 46 | for (_i = 0, _len = ref.length; _i < _len; _i++) { 47 | subscriber = ref[_i]; 48 | results.push(subscriber.handle(data)); 49 | } 50 | return results; 51 | }; 52 | return Publisher; 53 | })(); 54 | return new Publisher(CollectionsModel, SettingsModel); 55 | } 56 | ]); 57 | -------------------------------------------------------------------------------- /js/app/services/randomstringservice.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Calendar App 3 | * 4 | * @author Raghu Nayyar 5 | * @author Georg Ehrke 6 | * @copyright 2016 Raghu Nayyar 7 | * @copyright 2016 Georg Ehrke 8 | * 9 | * This library is free software; you can redistribute it and/or 10 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 11 | * License as published by the Free Software Foundation; either 12 | * version 3 of the License, or any later version. 13 | * 14 | * This library is distributed in the hope that it will be useful, 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 18 | * 19 | * You should have received a copy of the GNU Affero General Public 20 | * License along with this library. If not, see . 21 | * 22 | */ 23 | angular.module('Tasks').factory('RandomStringService', function () { 24 | 'use strict'; 25 | 26 | return { 27 | generate: function() { 28 | return Math.random().toString(36).substr(2); 29 | } 30 | }; 31 | }); 32 | -------------------------------------------------------------------------------- /js/app/services/status.js: -------------------------------------------------------------------------------- 1 | /** 2 | * ownCloud - Tasks 3 | * 4 | * @author Raimund Schlüßler 5 | * @copyright 2016 Raimund Schlüßler 6 | * 7 | * This library is free software; you can redistribute it and/or 8 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 9 | * License as published by the Free Software Foundation; either 10 | * version 3 of the License, or any later version. 11 | * 12 | * This library is distributed in the hope that it will be useful, 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 16 | * 17 | * You should have received a copy of the GNU Affero General Public 18 | * License along with this library. If not, see . 19 | * 20 | */ 21 | 22 | angular.module('Tasks').factory('Status', [ 23 | function() { 24 | 'use strict'; 25 | var Status; 26 | Status = (function() { 27 | function Status() { 28 | this._$status = { 29 | addingList: false, 30 | focusTaskInput: false 31 | }; 32 | } 33 | 34 | Status.prototype.getStatus = function() { 35 | return this._$status; 36 | }; 37 | 38 | return Status; 39 | 40 | })(); 41 | return new Status(); 42 | } 43 | ]); 44 | -------------------------------------------------------------------------------- /js/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ownCloud Task App", 3 | "version": "0.9.3", 4 | "dependencies": { 5 | "angular": "", 6 | "angular-route": "", 7 | "angular-animate": "", 8 | "angular-sanitize": "", 9 | "angular-ui-select": "https://github.com/angular-ui/ui-select.git", 10 | "angular-draganddrop": "https://github.com/marceljuenemann/angular-drag-and-drop-lists.git", 11 | "jquery-timepicker": "", 12 | "ical.js": "~1.1.2", 13 | "jstzdetect": "", 14 | "davclient.js": "https://github.com/evert/davclient.js.git" 15 | }, 16 | "devDependencies": {}, 17 | "homepage": "https://github.com/owncloud/tasks", 18 | "authors": [ 19 | "Raimund Schlüßler " 20 | ], 21 | "description": "", 22 | "main": "", 23 | "moduleType": [], 24 | "license": "AGPLv3", 25 | "private": true, 26 | "ignore": [ 27 | "**/.*", 28 | "node_modules", 29 | "bower_components", 30 | "core/vendor", 31 | "test", 32 | "tests" 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /js/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "task", 3 | "description": "ownCloud Task App", 4 | "version": "0.9.3", 5 | "author": { 6 | "name": "Raimund Schlüßler", 7 | "email": "raimund.schluessler@googlemail.com" 8 | }, 9 | "private": true, 10 | "homepage": "", 11 | "repository": { 12 | "type": "git", 13 | "url": "git@github.com:owncloud/tasks.git" 14 | }, 15 | "bugs": "https://github.com/owncloud/tasks/issues", 16 | "contributors": [], 17 | "dependencies": {}, 18 | "devDependencies": { 19 | "bower": "*", 20 | "grunt": "^1.5.3", 21 | "grunt-cli": "~1.4.3", 22 | "grunt-contrib-jshint": "*", 23 | "jshint-stylish": "^2.1.0", 24 | "grunt-concurrent": "~1.0.0", 25 | "grunt-contrib-concat": "~0.1.2", 26 | "grunt-contrib-less": "~0.6.4", 27 | "grunt-contrib-watch": "~0.2.0", 28 | "grunt-newer": "~1.1.1", 29 | "grunt-wrap": "~0.2.0" 30 | }, 31 | "engine": "node >= 0.8" 32 | } 33 | -------------------------------------------------------------------------------- /js/vendor/angular-animate/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.5.5", 4 | "license": "MIT", 5 | "main": "./angular-animate.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.5" 9 | }, 10 | "homepage": "https://github.com/angular/bower-angular-animate", 11 | "_release": "1.5.5", 12 | "_resolution": { 13 | "type": "version", 14 | "tag": "v1.5.5", 15 | "commit": "39c4ea7a81ed05b09229f5961e31e1d9dc251bf8" 16 | }, 17 | "_source": "https://github.com/angular/bower-angular-animate.git", 18 | "_target": "*", 19 | "_originalSource": "angular-animate" 20 | } -------------------------------------------------------------------------------- /js/vendor/angular-animate/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular-animate 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular-animate 15 | ``` 16 | 17 | Then add `ngAnimate` as a dependency for your app: 18 | 19 | ```javascript 20 | angular.module('myApp', [require('angular-animate')]); 21 | ``` 22 | 23 | ### bower 24 | 25 | ```shell 26 | bower install angular-animate 27 | ``` 28 | 29 | Then add a ` 33 | ``` 34 | 35 | Then add `ngAnimate` as a dependency for your app: 36 | 37 | ```javascript 38 | angular.module('myApp', ['ngAnimate']); 39 | ``` 40 | 41 | ## Documentation 42 | 43 | Documentation is available on the 44 | [AngularJS docs site](http://docs.angularjs.org/api/ngAnimate). 45 | 46 | ## License 47 | 48 | The MIT License 49 | 50 | Copyright (c) 2010-2015 Google, Inc. http://angularjs.org 51 | 52 | Permission is hereby granted, free of charge, to any person obtaining a copy 53 | of this software and associated documentation files (the "Software"), to deal 54 | in the Software without restriction, including without limitation the rights 55 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 56 | copies of the Software, and to permit persons to whom the Software is 57 | furnished to do so, subject to the following conditions: 58 | 59 | The above copyright notice and this permission notice shall be included in 60 | all copies or substantial portions of the Software. 61 | 62 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 63 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 64 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 65 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 66 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 67 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 68 | THE SOFTWARE. 69 | -------------------------------------------------------------------------------- /js/vendor/angular-animate/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.5.5", 4 | "license": "MIT", 5 | "main": "./angular-animate.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.5" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /js/vendor/angular-animate/index.js: -------------------------------------------------------------------------------- 1 | require('./angular-animate'); 2 | module.exports = 'ngAnimate'; 3 | -------------------------------------------------------------------------------- /js/vendor/angular-animate/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-animate", 3 | "version": "1.5.5", 4 | "description": "AngularJS module for animations", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "animation", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org" 26 | } 27 | -------------------------------------------------------------------------------- /js/vendor/angular-draganddrop/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-drag-and-drop-lists", 3 | "main": "angular-drag-and-drop-lists.js", 4 | "version": "1.4.0", 5 | "homepage": "https://github.com/marceljuenemann/angular-drag-and-drop-lists", 6 | "authors": [ 7 | "Marcel Juenemann " 8 | ], 9 | "description": "Angular directives for sorting nested lists using the HTML5 Drag & Drop API", 10 | "keywords": [ 11 | "angular", 12 | "drag", 13 | "drop", 14 | "dnd", 15 | "nested", 16 | "sortable", 17 | "lists", 18 | "html5" 19 | ], 20 | "license": "MIT", 21 | "ignore": [ 22 | "**/.*", 23 | "node_modules", 24 | "bower_components", 25 | "demo", 26 | "*.json", 27 | "test", 28 | "tests" 29 | ], 30 | "_release": "1.4.0", 31 | "_resolution": { 32 | "type": "version", 33 | "tag": "v1.4.0", 34 | "commit": "141e13919b30578ed53d079bdd269fb99b20f78f" 35 | }, 36 | "_source": "https://github.com/marceljuenemann/angular-drag-and-drop-lists.git", 37 | "_target": "*", 38 | "_originalSource": "https://github.com/marceljuenemann/angular-drag-and-drop-lists.git" 39 | } -------------------------------------------------------------------------------- /js/vendor/angular-draganddrop/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Marcel Juenemann 4 | Copyright (c) 2014-2016 Google Inc. 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /js/vendor/angular-draganddrop/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-drag-and-drop-lists", 3 | "main": "angular-drag-and-drop-lists.js", 4 | "version": "1.4.0", 5 | "homepage": "https://github.com/marceljuenemann/angular-drag-and-drop-lists", 6 | "authors": [ 7 | "Marcel Juenemann " 8 | ], 9 | "description": "Angular directives for sorting nested lists using the HTML5 Drag & Drop API", 10 | "keywords": [ 11 | "angular", 12 | "drag", 13 | "drop", 14 | "dnd", 15 | "nested", 16 | "sortable", 17 | "lists", 18 | "html5" 19 | ], 20 | "license": "MIT", 21 | "ignore": [ 22 | "**/.*", 23 | "node_modules", 24 | "bower_components", 25 | "demo", 26 | "*.json", 27 | "test", 28 | "tests" 29 | ] 30 | } 31 | -------------------------------------------------------------------------------- /js/vendor/angular-route/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-route", 3 | "version": "1.5.5", 4 | "license": "MIT", 5 | "main": "./angular-route.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.5" 9 | }, 10 | "homepage": "https://github.com/angular/bower-angular-route", 11 | "_release": "1.5.5", 12 | "_resolution": { 13 | "type": "version", 14 | "tag": "v1.5.5", 15 | "commit": "642a2dfc05f869f4a56733e182393536184ed4fa" 16 | }, 17 | "_source": "https://github.com/angular/bower-angular-route.git", 18 | "_target": "*", 19 | "_originalSource": "angular-route" 20 | } -------------------------------------------------------------------------------- /js/vendor/angular-route/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular-route 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngRoute). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular-route 15 | ``` 16 | 17 | Then add `ngRoute` as a dependency for your app: 18 | 19 | ```javascript 20 | angular.module('myApp', [require('angular-route')]); 21 | ``` 22 | 23 | ### bower 24 | 25 | ```shell 26 | bower install angular-route 27 | ``` 28 | 29 | Add a ` 33 | ``` 34 | 35 | Then add `ngRoute` as a dependency for your app: 36 | 37 | ```javascript 38 | angular.module('myApp', ['ngRoute']); 39 | ``` 40 | 41 | ## Documentation 42 | 43 | Documentation is available on the 44 | [AngularJS docs site](http://docs.angularjs.org/api/ngRoute). 45 | 46 | ## License 47 | 48 | The MIT License 49 | 50 | Copyright (c) 2010-2015 Google, Inc. http://angularjs.org 51 | 52 | Permission is hereby granted, free of charge, to any person obtaining a copy 53 | of this software and associated documentation files (the "Software"), to deal 54 | in the Software without restriction, including without limitation the rights 55 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 56 | copies of the Software, and to permit persons to whom the Software is 57 | furnished to do so, subject to the following conditions: 58 | 59 | The above copyright notice and this permission notice shall be included in 60 | all copies or substantial portions of the Software. 61 | 62 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 63 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 64 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 65 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 66 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 67 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 68 | THE SOFTWARE. 69 | -------------------------------------------------------------------------------- /js/vendor/angular-route/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-route", 3 | "version": "1.5.5", 4 | "license": "MIT", 5 | "main": "./angular-route.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.5" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /js/vendor/angular-route/index.js: -------------------------------------------------------------------------------- 1 | require('./angular-route'); 2 | module.exports = 'ngRoute'; 3 | -------------------------------------------------------------------------------- /js/vendor/angular-route/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-route", 3 | "version": "1.5.5", 4 | "description": "AngularJS router module", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "router", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org" 26 | } 27 | -------------------------------------------------------------------------------- /js/vendor/angular-sanitize/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.5.5", 4 | "license": "MIT", 5 | "main": "./angular-sanitize.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.5" 9 | }, 10 | "homepage": "https://github.com/angular/bower-angular-sanitize", 11 | "_release": "1.5.5", 12 | "_resolution": { 13 | "type": "version", 14 | "tag": "v1.5.5", 15 | "commit": "84a69853f2a591b1b9d000984e6219924aaff016" 16 | }, 17 | "_source": "https://github.com/angular/bower-angular-sanitize.git", 18 | "_target": "*", 19 | "_originalSource": "angular-sanitize" 20 | } -------------------------------------------------------------------------------- /js/vendor/angular-sanitize/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular-sanitize 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngSanitize). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular-sanitize 15 | ``` 16 | 17 | Then add `ngSanitize` as a dependency for your app: 18 | 19 | ```javascript 20 | angular.module('myApp', [require('angular-sanitize')]); 21 | ``` 22 | 23 | ### bower 24 | 25 | ```shell 26 | bower install angular-sanitize 27 | ``` 28 | 29 | Add a ` 33 | ``` 34 | 35 | Then add `ngSanitize` as a dependency for your app: 36 | 37 | ```javascript 38 | angular.module('myApp', ['ngSanitize']); 39 | ``` 40 | 41 | ## Documentation 42 | 43 | Documentation is available on the 44 | [AngularJS docs site](http://docs.angularjs.org/api/ngSanitize). 45 | 46 | ## License 47 | 48 | The MIT License 49 | 50 | Copyright (c) 2010-2015 Google, Inc. http://angularjs.org 51 | 52 | Permission is hereby granted, free of charge, to any person obtaining a copy 53 | of this software and associated documentation files (the "Software"), to deal 54 | in the Software without restriction, including without limitation the rights 55 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 56 | copies of the Software, and to permit persons to whom the Software is 57 | furnished to do so, subject to the following conditions: 58 | 59 | The above copyright notice and this permission notice shall be included in 60 | all copies or substantial portions of the Software. 61 | 62 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 63 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 64 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 65 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 66 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 67 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 68 | THE SOFTWARE. 69 | -------------------------------------------------------------------------------- /js/vendor/angular-sanitize/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.5.5", 4 | "license": "MIT", 5 | "main": "./angular-sanitize.js", 6 | "ignore": [], 7 | "dependencies": { 8 | "angular": "1.5.5" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /js/vendor/angular-sanitize/index.js: -------------------------------------------------------------------------------- 1 | require('./angular-sanitize'); 2 | module.exports = 'ngSanitize'; 3 | -------------------------------------------------------------------------------- /js/vendor/angular-sanitize/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-sanitize", 3 | "version": "1.5.5", 4 | "description": "AngularJS module for sanitizing HTML", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "html", 18 | "client-side" 19 | ], 20 | "author": "Angular Core Team ", 21 | "license": "MIT", 22 | "bugs": { 23 | "url": "https://github.com/angular/angular.js/issues" 24 | }, 25 | "homepage": "http://angularjs.org" 26 | } 27 | -------------------------------------------------------------------------------- /js/vendor/angular-ui-select/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-ui-select", 3 | "version": "0.17.0", 4 | "homepage": "https://github.com/angular-ui/ui-select", 5 | "authors": [ 6 | "AngularUI" 7 | ], 8 | "description": "AngularJS ui-select", 9 | "main": [ 10 | "dist/select.js", 11 | "dist/select.css" 12 | ], 13 | "license": "MIT", 14 | "ignore": [ 15 | "**/.*", 16 | "node_modules", 17 | "bower_components", 18 | "src", 19 | "test", 20 | "gulpfile.js", 21 | "karma.conf.js", 22 | "examples" 23 | ], 24 | "dependencies": { 25 | "angular": ">=1.2.18" 26 | }, 27 | "devDependencies": { 28 | "jquery": "~1.11", 29 | "angular-sanitize": ">=1.2.18", 30 | "angular-mocks": ">=1.2.18" 31 | }, 32 | "_release": "0.17.0", 33 | "_resolution": { 34 | "type": "version", 35 | "tag": "v0.17.0", 36 | "commit": "c41b8928a846288583cd977b48a499d35a53ac45" 37 | }, 38 | "_source": "https://github.com/angular-ui/ui-select.git", 39 | "_target": "*", 40 | "_originalSource": "https://github.com/angular-ui/ui-select.git" 41 | } -------------------------------------------------------------------------------- /js/vendor/angular-ui-select/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013-2014 AngularUI 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /js/vendor/angular-ui-select/README.md: -------------------------------------------------------------------------------- 1 | # AngularJS ui-select [![Build Status](https://travis-ci.org/angular-ui/ui-select.svg?branch=master)](https://travis-ci.org/angular-ui/ui-select) [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/angular-ui/ui-select?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) 2 | 3 | AngularJS-native version of [Select2](http://ivaynberg.github.io/select2/) and [Selectize](http://brianreavis.github.io/selectize.js/). [http://angular-ui.github.io/ui-select/](http://angular-ui.github.io/ui-select/) 4 | 5 | [Getting Started](https://github.com/angular-ui/ui-select/wiki/Getting-Started) 6 | 7 | - [Examples](http://angular-ui.github.io/ui-select/#examples) 8 | - [Examples Source](./docs/examples) 9 | - [Documentation](https://github.com/angular-ui/ui-select/wiki) 10 | 11 | ## Latest Changes 12 | 13 | - Check [CHANGELOG.md](/CHANGELOG.md) 14 | 15 | ## Features 16 | 17 | - Search, Select, Multi-select and Tagging 18 | - Multiple Themes: Bootstrap, Select2 and Selectize 19 | - Keyboard support 20 | - No jQuery required (except for old browsers) 21 | - Small code base: 4.57KB min/gzipped vs 20KB for select2 22 | 23 | For the roadmap, check [issue #3](https://github.com/angular-ui/ui-select/issues/3) and the [Wiki page](https://github.com/angular-ui/ui-select/wiki/Roadmap). 24 | 25 | ## Installation Methods 26 | 27 | ### npm 28 | ``` 29 | $ npm install ui-select 30 | ``` 31 | ### bower 32 | ``` 33 | $ bower install angular-ui-select 34 | ``` 35 | 36 | ## Development 37 | 38 | ### Prepare your environment 39 | * Install [Node.js](http://nodejs.org/) and NPM (should come with) 40 | * Install global dev dependencies: `npm install -g gulp` 41 | * Install local dev dependencies: `npm install` in repository directory 42 | 43 | ### Development Commands 44 | 45 | * `gulp` to jshint, build and test 46 | * `gulp build` to jshint and build 47 | * `gulp test` for one-time test with karma (also build and jshint) 48 | * `gulp watch` to watch src files to jshint, build and test when changed 49 | * `gulp docs` build docs and examples 50 | 51 | ## Contributing 52 | 53 | - Check [CONTRIBUTING.md](/CONTRIBUTING.md) 54 | - Run the tests 55 | - Try the [examples](./docs/examples) 56 | 57 | When issuing a pull request, please exclude changes from the "dist" folder to avoid merge conflicts. 58 | -------------------------------------------------------------------------------- /js/vendor/angular-ui-select/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular-ui-select", 3 | "version": "0.17.0", 4 | "homepage": "https://github.com/angular-ui/ui-select", 5 | "authors": [ 6 | "AngularUI" 7 | ], 8 | "description": "AngularJS ui-select", 9 | "main": [ 10 | "dist/select.js", 11 | "dist/select.css" 12 | ], 13 | "license": "MIT", 14 | "ignore": [ 15 | "**/.*", 16 | "node_modules", 17 | "bower_components", 18 | "src", 19 | "test", 20 | "gulpfile.js", 21 | "karma.conf.js", 22 | "examples" 23 | ], 24 | "dependencies": { 25 | "angular": ">=1.2.18" 26 | }, 27 | "devDependencies": { 28 | "jquery": "~1.11", 29 | "angular-sanitize": ">=1.2.18", 30 | "angular-mocks": ">=1.2.18" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /js/vendor/angular-ui-select/composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "components/ui-select", 3 | "description": "AngularJS UI Select", 4 | "keywords": ["angular", "angular-ui", "select", "select2", "angularjs"], 5 | "type": "component", 6 | "homepage": "https://github.com/angular-ui/ui-select", 7 | "license": "MIT", 8 | "support": { 9 | "issues": "https://github.com/angular-ui/ui-select/issues", 10 | "wiki": "https://github.com/angular-ui/ui-select/wiki", 11 | "source": "https://github.com/angular-ui/ui-select" 12 | }, 13 | "require": { 14 | "robloach/component-installer": "*" 15 | }, 16 | "extra": { 17 | "component": { 18 | "scripts": [ 19 | "dist/select.js" 20 | ], 21 | "files": [ 22 | "dist/select.js", 23 | "dist/select.css", 24 | "dist/select.min.js", 25 | "dist/select.min.css" 26 | ] 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /js/vendor/angular-ui-select/deploy-docs.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | set -e 3 | 4 | [[ $TRAVIS_SECURE_ENV_VARS == "true" ]] || { echo "No github key avaliable, aborting publishing"; exit 0; } 5 | 6 | ID_REF="$(git rev-parse --short HEAD)" 7 | 8 | git clone "https://${GH_KEY}@${GH_REF}" ./docs-out -b ${GH_PAGES_BRANCH} --single-branch --depth=1 9 | 10 | cd docs-out 11 | 12 | # clear out everything 13 | git rm -rf . 14 | git clean -fxd 15 | 16 | # get new content 17 | cp ../docs-built/* . -R 18 | 19 | git add . 20 | 21 | # inside this git repo we'll pretend to be a new user 22 | git config user.name "Travis CI" 23 | git config user.email "travisci@users.noreply.github.com" 24 | 25 | # The first and only commit to this new Git repo contains all the 26 | # files present with the commit message "Deploy to GitHub Pages". 27 | git commit -m "docs(*): new deploy (angular-ui/ui-select@${ID_REF})" 28 | 29 | 30 | git push origin --quiet 31 | #> /dev/null 2>&1 -------------------------------------------------------------------------------- /js/vendor/angular-ui-select/docs/assets/app.js: -------------------------------------------------------------------------------- 1 | var module = angular.module('ui.select.pages', ['plunkr']); 2 | -------------------------------------------------------------------------------- /js/vendor/angular-ui-select/docs/partials/_footer.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /js/vendor/angular-ui-select/docs/partials/_header.html: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | AngularJS ui-select 6 | 7 | 11 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /js/vendor/angular-ui-select/index.js: -------------------------------------------------------------------------------- 1 | require('./dist/select.js'); 2 | module.exports = 'ui.select'; 3 | -------------------------------------------------------------------------------- /js/vendor/angular-ui-select/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ui-select", 3 | "main": "./index.js", 4 | "author": "http://github.com/angular-ui/ui-select/graphs/contributors", 5 | "homepage": "http://github.com/angular-ui/ui-select", 6 | "repository": { 7 | "url": "git://github.com/angular-ui/ui-select.git" 8 | }, 9 | "style": "dist/select.css", 10 | "version": "0.17.0", 11 | "devDependencies": { 12 | "angular": "^1.2.18", 13 | "angular-mocks": "^1.2.18", 14 | "angular-sanitize": "^1.2.18", 15 | "conventional-changelog": "^0.5.3", 16 | "conventional-recommended-bump": "0.0.3", 17 | "del": "~0.1.1", 18 | "event-stream": "~3.1.0", 19 | "gulp": "^3.9.1", 20 | "gulp-angular-templatecache": "^1.8.0", 21 | "gulp-bump": "^1.0.0", 22 | "gulp-conventional-changelog": "^0.7.0", 23 | "gulp-concat": "^2.6.0", 24 | "gulp-filenames": "^2.0.0", 25 | "gulp-git": "^1.4.0", 26 | "gulp-header": "^1.7.1", 27 | "gulp-footer": "^1.0.5", 28 | "gulp-jshint": "^2.0.0", 29 | "gulp-load-plugins": "^1.1.0", 30 | "gulp-minify-css": "^1.2.4", 31 | "gulp-minify-html": "^1.0.6", 32 | "gulp-plumber": "^0.6.3", 33 | "gulp-replace": "^0.5.4", 34 | "gulp-sourcemaps": "^1.6.0", 35 | "gulp-tag-version": "^1.3.0", 36 | "gulp-uglify": "^1.5.3", 37 | "gulp-util": "^2.2.19", 38 | "jquery": "~1.11", 39 | "jshint": "^2.9.1", 40 | "jshint-stylish": "~0.3.0", 41 | "karma": "^0.12.16", 42 | "karma-chrome-launcher": "^0.1.3", 43 | "karma-firefox-launcher": "~0.1", 44 | "karma-jasmine": "~0.2", 45 | "karma-ng-html2js-preprocessor": "^0.1.0", 46 | "karma-phantomjs-launcher": "~0.1.4", 47 | "karma-coverage": "~0.2", 48 | "run-sequence": "^1.1.5", 49 | "title-case": "^1.1.2" 50 | }, 51 | "scripts": { 52 | "test": "gulp test" 53 | }, 54 | "spm": { 55 | "main": "dist/select.js", 56 | "output": [ 57 | "dist/select.css" 58 | ] 59 | }, 60 | "license": "MIT" 61 | } 62 | -------------------------------------------------------------------------------- /js/vendor/angular/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.5.5", 4 | "license": "MIT", 5 | "main": "./angular.js", 6 | "ignore": [], 7 | "dependencies": {}, 8 | "homepage": "https://github.com/angular/bower-angular", 9 | "_release": "1.5.5", 10 | "_resolution": { 11 | "type": "version", 12 | "tag": "v1.5.5", 13 | "commit": "cd353693d20736baa44fb44f65f8f573ef6e8e18" 14 | }, 15 | "_source": "https://github.com/angular/bower-angular.git", 16 | "_target": ">=1.2.18", 17 | "_originalSource": "angular" 18 | } -------------------------------------------------------------------------------- /js/vendor/angular/README.md: -------------------------------------------------------------------------------- 1 | # packaged angular 2 | 3 | This repo is for distribution on `npm` and `bower`. The source for this module is in the 4 | [main AngularJS repo](https://github.com/angular/angular.js). 5 | Please file issues and pull requests against that repo. 6 | 7 | ## Install 8 | 9 | You can install this package either with `npm` or with `bower`. 10 | 11 | ### npm 12 | 13 | ```shell 14 | npm install angular 15 | ``` 16 | 17 | Then add a ` 21 | ``` 22 | 23 | Or `require('angular')` from your code. 24 | 25 | ### bower 26 | 27 | ```shell 28 | bower install angular 29 | ``` 30 | 31 | Then add a ` 35 | ``` 36 | 37 | ## Documentation 38 | 39 | Documentation is available on the 40 | [AngularJS docs site](http://docs.angularjs.org/). 41 | 42 | ## License 43 | 44 | The MIT License 45 | 46 | Copyright (c) 2010-2015 Google, Inc. http://angularjs.org 47 | 48 | Permission is hereby granted, free of charge, to any person obtaining a copy 49 | of this software and associated documentation files (the "Software"), to deal 50 | in the Software without restriction, including without limitation the rights 51 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 52 | copies of the Software, and to permit persons to whom the Software is 53 | furnished to do so, subject to the following conditions: 54 | 55 | The above copyright notice and this permission notice shall be included in 56 | all copies or substantial portions of the Software. 57 | 58 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 59 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 60 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 61 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 62 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 63 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 64 | THE SOFTWARE. 65 | -------------------------------------------------------------------------------- /js/vendor/angular/angular-csp.css: -------------------------------------------------------------------------------- 1 | /* Include this file in your html if you are using the CSP mode. */ 2 | 3 | @charset "UTF-8"; 4 | 5 | [ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], 6 | .ng-cloak, .x-ng-cloak, 7 | .ng-hide:not(.ng-hide-animate) { 8 | display: none !important; 9 | } 10 | 11 | ng\:form { 12 | display: block; 13 | } 14 | 15 | .ng-animate-shim { 16 | visibility:hidden; 17 | } 18 | 19 | .ng-anchor { 20 | position:absolute; 21 | } 22 | -------------------------------------------------------------------------------- /js/vendor/angular/angular.min.js.gzip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/angular/angular.min.js.gzip -------------------------------------------------------------------------------- /js/vendor/angular/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.5.5", 4 | "license": "MIT", 5 | "main": "./angular.js", 6 | "ignore": [], 7 | "dependencies": { 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /js/vendor/angular/index.js: -------------------------------------------------------------------------------- 1 | require('./angular'); 2 | module.exports = angular; 3 | -------------------------------------------------------------------------------- /js/vendor/angular/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "angular", 3 | "version": "1.5.5", 4 | "description": "HTML enhanced for web apps", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "https://github.com/angular/angular.js.git" 12 | }, 13 | "keywords": [ 14 | "angular", 15 | "framework", 16 | "browser", 17 | "client-side" 18 | ], 19 | "author": "Angular Core Team ", 20 | "license": "MIT", 21 | "bugs": { 22 | "url": "https://github.com/angular/angular.js/issues" 23 | }, 24 | "homepage": "http://angularjs.org" 25 | } 26 | -------------------------------------------------------------------------------- /js/vendor/davclient.js/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "davclient.js", 3 | "authors": [ 4 | "Evert Pot " 5 | ], 6 | "description": "A WebDAV, CalDAV and CardDAV client for browsers.", 7 | "main": "lib/client.js", 8 | "keywords": [ 9 | "webdav", 10 | "caldav", 11 | "carddav" 12 | ], 13 | "license": "MIT", 14 | "homepage": "http://sabre.io/", 15 | "ignore": [ 16 | "**/.*", 17 | "node_modules", 18 | "bower_components", 19 | "test", 20 | "tests" 21 | ], 22 | "_release": "aac08f74e8", 23 | "_resolution": { 24 | "type": "branch", 25 | "branch": "master", 26 | "commit": "aac08f74e8d10fdf17cdfb9ee4edd205b9363f74" 27 | }, 28 | "_source": "https://github.com/evert/davclient.js.git", 29 | "_target": "*", 30 | "_originalSource": "https://github.com/evert/davclient.js.git" 31 | } -------------------------------------------------------------------------------- /js/vendor/davclient.js/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (C) 2013-2014 fruux GmbH (https://fruux.com/) 2 | 3 | All rights reserved. 4 | 5 | Redistribution and use in source and binary forms, with or without modification, 6 | are permitted provided that the following conditions are met: 7 | 8 | * Redistributions of source code must retain the above copyright notice, 9 | this list of conditions and the following disclaimer. 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | * Neither the name Sabre nor the names of its contributors 14 | may be used to endorse or promote products derived from this software 15 | without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 21 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 | POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /js/vendor/davclient.js/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "davclient.js", 3 | "version": "0.0.1", 4 | "authors": [ 5 | "Evert Pot " 6 | ], 7 | "description": "A WebDAV, CalDAV and CardDAV client for browsers.", 8 | "main": "lib/client.js", 9 | "keywords": [ 10 | "webdav", 11 | "caldav", 12 | "carddav" 13 | ], 14 | "license": "MIT", 15 | "homepage": "http://sabre.io/", 16 | "ignore": [ 17 | "**/.*", 18 | "node_modules", 19 | "bower_components", 20 | "test", 21 | "tests" 22 | ] 23 | } 24 | -------------------------------------------------------------------------------- /js/vendor/davclient.js/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /js/vendor/davclient.js/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | // Generated on Tue Sep 01 2015 12:55:42 GMT+0200 (CEST) 3 | 4 | module.exports = function(config) { 5 | config.set({ 6 | 7 | // base path that will be used to resolve all patterns (eg. files, exclude) 8 | basePath: '', 9 | 10 | 11 | // frameworks to use 12 | // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 13 | frameworks: ['jasmine'], 14 | 15 | 16 | // list of files / patterns to load in the browser 17 | files: [ 18 | 'lib/*.js', 19 | 'tests/*.js' 20 | ], 21 | 22 | 23 | // list of files to exclude 24 | exclude: [ 25 | ], 26 | 27 | 28 | // preprocess matching files before serving them to the browser 29 | // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 30 | preprocessors: { 31 | }, 32 | 33 | 34 | // test results reporter to use 35 | // possible values: 'dots', 'progress' 36 | // available reporters: https://npmjs.org/browse/keyword/karma-reporter 37 | reporters: ['progress'], 38 | 39 | 40 | // web server port 41 | port: 9876, 42 | 43 | 44 | // enable / disable colors in the output (reporters and logs) 45 | colors: true, 46 | 47 | 48 | // level of logging 49 | // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 50 | logLevel: config.LOG_INFO, 51 | 52 | 53 | // enable / disable watching file and executing tests whenever any file changes 54 | autoWatch: true, 55 | 56 | 57 | // start these browsers 58 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 59 | browsers: ['PhantomJS', 'Firefox', 'Chrome'], 60 | 61 | 62 | // Continuous Integration mode 63 | // if true, Karma captures browsers, runs the tests and exits 64 | singleRun: false 65 | }) 66 | } 67 | -------------------------------------------------------------------------------- /js/vendor/davclient.js/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "davclient.js", 3 | "version": "0.0.1", 4 | "description": "WebDAV, CalDAV and CardDAV client for javascript", 5 | "main": "lib/client.js", 6 | "directories": { 7 | "test": "tests" 8 | }, 9 | "scripts": { 10 | "test": "./node_modules/karma/bin/karma start --single-run --browsers PhantomJS" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/evert/davclient.js.git" 15 | }, 16 | "keywords": [ 17 | "webdav", 18 | "caldav", 19 | "carddav" 20 | ], 21 | "author": "Evert Pot", 22 | "license": "BSD-3-Clause", 23 | "bugs": { 24 | "url": "https://github.com/evert/davclient.js/issues" 25 | }, 26 | "devDependencies": { 27 | "jasmine-core": "^2.3.4", 28 | "karma": "^0.13.9", 29 | "karma-chrome-launcher": "^0.2.0", 30 | "karma-firefox-launcher": "^0.1.6", 31 | "karma-jasmine": "^0.3.6", 32 | "karma-phantomjs-launcher": "^0.2.1", 33 | "phantomjs": "^1.9.18" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /js/vendor/ical.js/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ical.js", 3 | "version": "1.1.2", 4 | "homepage": "https://github.com/mozilla-comm/ical.js", 5 | "authors": [ 6 | "Philipp Kewisch ", 7 | "Github Contributors (https://github.com/mozilla-comm/ical.js/graphs/contributors)" 8 | ], 9 | "description": "Javascript parser for ics (rfc5545) and vcard (rfc6350) data", 10 | "main": "build/ical.js", 11 | "moduleType": [ 12 | "globals", 13 | "node" 14 | ], 15 | "keywords": [ 16 | "calendar", 17 | "iCalendar", 18 | "jCal", 19 | "vCard", 20 | "jCard", 21 | "parser" 22 | ], 23 | "license": "MPL-2.0", 24 | "ignore": [ 25 | "**/.*", 26 | "node_modules", 27 | "bower_components", 28 | "test", 29 | "tools", 30 | "zoneinfo", 31 | "coverage", 32 | "junk" 33 | ], 34 | "_release": "1.1.2", 35 | "_resolution": { 36 | "type": "version", 37 | "tag": "v1.1.2", 38 | "commit": "40298c09541ecb32c92077e2d1ca22d297eac28e" 39 | }, 40 | "_source": "git://github.com/mozilla-comm/ical.js.git", 41 | "_target": "~1.1.2", 42 | "_originalSource": "ical.js" 43 | } -------------------------------------------------------------------------------- /js/vendor/ical.js/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ical.js", 3 | "version": "1.1.2", 4 | "homepage": "https://github.com/mozilla-comm/ical.js", 5 | "authors": [ 6 | "Philipp Kewisch ", 7 | "Github Contributors (https://github.com/mozilla-comm/ical.js/graphs/contributors)" 8 | ], 9 | "description": "Javascript parser for ics (rfc5545) and vcard (rfc6350) data", 10 | "main": "build/ical.js", 11 | "moduleType": [ 12 | "globals", 13 | "node" 14 | ], 15 | "keywords": [ 16 | "calendar", 17 | "iCalendar", 18 | "jCal", 19 | "vCard", 20 | "jCard", 21 | "parser" 22 | ], 23 | "license": "MPL-2.0", 24 | "ignore": [ 25 | "**/.*", 26 | "node_modules", 27 | "bower_components", 28 | "test", 29 | "tools", 30 | "zoneinfo", 31 | "coverage", 32 | "junk" 33 | ] 34 | } 35 | -------------------------------------------------------------------------------- /js/vendor/ical.js/lib/ical/timezone_service.js: -------------------------------------------------------------------------------- 1 | /* This Source Code Form is subject to the terms of the Mozilla Public 2 | * License, v. 2.0. If a copy of the MPL was not distributed with this 3 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. 4 | * Portions Copyright (C) Philipp Kewisch, 2011-2015 */ 5 | 6 | 7 | /** 8 | * This symbol is further described later on 9 | * @ignore 10 | */ 11 | ICAL.TimezoneService = (function() { 12 | var zones; 13 | 14 | /** 15 | * @classdesc 16 | * Singleton class to contain timezones. Right now its all manual registry in 17 | * the future we may use this class to download timezone information or handle 18 | * loading pre-expanded timezones. 19 | * 20 | * @namespace 21 | * @alias ICAL.TimezoneService 22 | */ 23 | var TimezoneService = { 24 | reset: function() { 25 | zones = Object.create(null); 26 | var utc = ICAL.Timezone.utcTimezone; 27 | 28 | zones.Z = utc; 29 | zones.UTC = utc; 30 | zones.GMT = utc; 31 | }, 32 | 33 | /** 34 | * Checks if timezone id has been registered. 35 | * 36 | * @param {String} tzid Timezone identifier (e.g. America/Los_Angeles) 37 | * @return {Boolean} False, when not present 38 | */ 39 | has: function(tzid) { 40 | return !!zones[tzid]; 41 | }, 42 | 43 | /** 44 | * Returns a timezone by its tzid if present. 45 | * 46 | * @param {String} tzid Timezone identifier (e.g. America/Los_Angeles) 47 | * @return {?ICAL.Timezone} The timezone, or null if not found 48 | */ 49 | get: function(tzid) { 50 | return zones[tzid]; 51 | }, 52 | 53 | /** 54 | * Registers a timezone object or component. 55 | * 56 | * @param {String=} name 57 | * The name of the timezone. Defaults to the component's TZID if not 58 | * passed. 59 | * @param {ICAL.Component|ICAL.Timezone} zone 60 | * The initialized zone or vtimezone. 61 | */ 62 | register: function(name, timezone) { 63 | if (name instanceof ICAL.Component) { 64 | if (name.name === 'vtimezone') { 65 | timezone = new ICAL.Timezone(name); 66 | name = timezone.tzid; 67 | } 68 | } 69 | 70 | if (timezone instanceof ICAL.Timezone) { 71 | zones[name] = timezone; 72 | } else { 73 | throw new TypeError('timezone must be ICAL.Timezone or ICAL.Component'); 74 | } 75 | }, 76 | 77 | /** 78 | * Removes a timezone by its tzid from the list. 79 | * 80 | * @param {String} tzid Timezone identifier (e.g. America/Los_Angeles) 81 | * @return {?ICAL.Timezone} The removed timezone, or null if not registered 82 | */ 83 | remove: function(tzid) { 84 | return (delete zones[tzid]); 85 | } 86 | }; 87 | 88 | // initialize defaults 89 | TimezoneService.reset(); 90 | 91 | return TimezoneService; 92 | }()); 93 | -------------------------------------------------------------------------------- /js/vendor/ical.js/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ical.js", 3 | "version": "1.1.2", 4 | "author": "Philipp Kewisch", 5 | "contributors": [ 6 | "Github Contributors (https://github.com/mozilla-comm/ical.js/graphs/contributors)" 7 | ], 8 | "description": "Javascript parser for ics (rfc5545) and vcard (rfc6350) data", 9 | "main": "build/ical.js", 10 | "repository": { 11 | "type": "git", 12 | "url": "https://github.com/mozilla-comm/ical.js.git" 13 | }, 14 | "keywords": [ 15 | "calendar", 16 | "iCalendar", 17 | "jCal", 18 | "vCard", 19 | "jCard", 20 | "parser" 21 | ], 22 | "dependencies": {}, 23 | "devDependencies": { 24 | "benchmark": "~1.0", 25 | "biased-opener": "^0.2.5", 26 | "chai": "~3.0", 27 | "closure-linter-wrapper": "^1.0.1", 28 | "coveralls": "^2.11.2", 29 | "grunt": "^0.4.5", 30 | "grunt-concurrent": "^2.0.0", 31 | "grunt-contrib-concat": "^0.5.1", 32 | "grunt-contrib-jshint": "^0.11.2", 33 | "grunt-contrib-uglify": "^0.9.1", 34 | "grunt-coveralls": "^1.0.0", 35 | "grunt-gh-pages": "^0.10.0", 36 | "grunt-gjslint": "^0.2.0", 37 | "grunt-jsdoc": "^0.6.4", 38 | "grunt-karma": "^0.11.0", 39 | "grunt-mocha-cli": "^1.13.0", 40 | "grunt-mocha-istanbul": "^2.4.0", 41 | "grunt-node-inspector": "^0.2.0", 42 | "grunt-release": "^0.13.0", 43 | "istanbul": "^0.3.14", 44 | "karma": "^0.12.36", 45 | "karma-chai": "^0.1.0", 46 | "karma-mocha": "^0.2.0", 47 | "karma-sauce-launcher": "^0.2.11", 48 | "karma-spec-reporter": "0.0.19", 49 | "minami": "^1.1.0", 50 | "mocha": "~2.2", 51 | "node-static": "^0.7.6", 52 | "open": "0.0.5", 53 | "sync-exec": "^0.5.0", 54 | "test-agent": "~0.28.2" 55 | }, 56 | "license": "MPL-2.0", 57 | "engine": { 58 | "node": ">=0.4" 59 | }, 60 | "scripts": { 61 | "test": "grunt test-node" 62 | }, 63 | "saucelabs": { 64 | "SL_Chrome": { 65 | "base": "SauceLabs", 66 | "browserName": "chrome" 67 | }, 68 | "SL_InternetExplorer9": { 69 | "base": "SauceLabs", 70 | "browserName": "internet explorer", 71 | "version": 9 72 | }, 73 | "SL_Firefox": { 74 | "base": "SauceLabs", 75 | "browserName": "firefox" 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/blank_description.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Google Inc//Google Calendar 70.9054//EN 3 | VERSION:2.0 4 | CALSCALE:GREGORIAN 5 | X-WR-CALNAME:calmozilla1@gmail.com 6 | X-WR-TIMEZONE:America/Los_Angeles 7 | BEGIN:VTIMEZONE 8 | TZID:America/Los_Angeles 9 | X-LIC-LOCATION:America/Los_Angeles 10 | BEGIN:DAYLIGHT 11 | TZOFFSETFROM:-0800 12 | TZOFFSETTO:-0700 13 | TZNAME:PDT 14 | DTSTART:19700308T020000 15 | RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 16 | END:DAYLIGHT 17 | BEGIN:STANDARD 18 | TZOFFSETFROM:-0700 19 | TZOFFSETTO:-0800 20 | TZNAME:PST 21 | DTSTART:19701101T020000 22 | RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 23 | END:STANDARD 24 | END:VTIMEZONE 25 | BEGIN:VEVENT 26 | DTSTART;TZID=America/Los_Angeles:20120630T060000 27 | DTEND;TZID=America/Los_Angeles:20120630T070000 28 | DTSTAMP:20120724T212411Z 29 | UID:dn4vrfmfn5p05roahsopg57h48@google.com 30 | CREATED:20120724T212411Z 31 | DESCRIPTION: 32 | LAST-MODIFIED:20120724T212411Z 33 | LOCATION: 34 | SEQUENCE:0 35 | STATUS:CONFIRMED 36 | SUMMARY:Really long event name thing 37 | TRANSP:OPAQUE 38 | BEGIN:VALARM 39 | ACTION:EMAIL 40 | DESCRIPTION:This is an event reminder 41 | SUMMARY:Alarm notification 42 | ATTENDEE:mailto:calmozilla1@gmail.com 43 | TRIGGER:-P0DT0H30M0S 44 | END:VALARM 45 | BEGIN:VALARM 46 | ACTION:DISPLAY 47 | DESCRIPTION:This is an event reminder 48 | TRIGGER:-P0DT0H30M0S 49 | END:VALARM 50 | END:VEVENT 51 | END:VCALENDAR 52 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/blank_line_end.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | END:VCALENDAR 3 | 4 | 5 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/blank_line_mid.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | COMMENT:This blank line is invalid 3 | 4 | END:VCALENDAR 5 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/daily_recur.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Google Inc//Google Calendar 70.9054//EN 3 | VERSION:2.0 4 | CALSCALE:GREGORIAN 5 | X-WR-CALNAME:calmozilla1@gmail.com 6 | X-WR-TIMEZONE:America/Los_Angeles 7 | BEGIN:VTIMEZONE 8 | TZID:America/Los_Angeles 9 | X-LIC-LOCATION:America/Los_Angeles 10 | BEGIN:DAYLIGHT 11 | TZOFFSETFROM:-0800 12 | TZOFFSETTO:-0700 13 | TZNAME:PDT 14 | DTSTART:19700308T020000 15 | RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 16 | END:DAYLIGHT 17 | BEGIN:STANDARD 18 | TZOFFSETFROM:-0700 19 | TZOFFSETTO:-0800 20 | TZNAME:PST 21 | DTSTART:19701101T020000 22 | RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 23 | END:STANDARD 24 | END:VTIMEZONE 25 | BEGIN:VEVENT 26 | DTSTART;TZID=America/Los_Angeles:20120801T050000 27 | DTEND;TZID=America/Los_Angeles:20120801T060000 28 | RRULE:FREQ=DAILY 29 | DTSTAMP:20120803T221236Z 30 | UID:tgh9qho17b07pk2n2ji3gluans@google.com 31 | CREATED:20120803T221236Z 32 | DESCRIPTION: 33 | LAST-MODIFIED:20120803T221236Z 34 | LOCATION: 35 | SEQUENCE:0 36 | STATUS:CONFIRMED 37 | SUMMARY:Every day recurring 38 | TRANSP:OPAQUE 39 | BEGIN:VALARM 40 | ACTION:EMAIL 41 | DESCRIPTION:This is an event reminder 42 | SUMMARY:Alarm notification 43 | ATTENDEE:mailto:calmozilla1@gmail.com 44 | TRIGGER:-P0DT0H30M0S 45 | END:VALARM 46 | BEGIN:VALARM 47 | ACTION:DISPLAY 48 | DESCRIPTION:This is an event reminder 49 | TRIGGER:-P0DT0H30M0S 50 | END:VALARM 51 | END:VEVENT 52 | END:VCALENDAR 53 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/day_long_recur_yearly.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Google Inc//Google Calendar 70.9054//EN 3 | VERSION:2.0 4 | CALSCALE:GREGORIAN 5 | X-WR-CALNAME:calmozilla1@gmail.com 6 | X-WR-TIMEZONE:America/Los_Angeles 7 | BEGIN:VTIMEZONE 8 | TZID:America/Los_Angeles 9 | X-LIC-LOCATION:America/Los_Angeles 10 | BEGIN:DAYLIGHT 11 | TZOFFSETFROM:-0800 12 | TZOFFSETTO:-0700 13 | TZNAME:PDT 14 | DTSTART:19700308T020000 15 | RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 16 | END:DAYLIGHT 17 | BEGIN:STANDARD 18 | TZOFFSETFROM:-0700 19 | TZOFFSETTO:-0800 20 | TZNAME:PST 21 | DTSTART:19701101T020000 22 | RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 23 | END:STANDARD 24 | END:VTIMEZONE 25 | BEGIN:VEVENT 26 | DTSTART;VALUE=DATE:20120803 27 | DTEND;VALUE=DATE:20120804 28 | RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR 29 | DTSTAMP:20120803T221306Z 30 | UID:4pfh824gvims850j0gar361t04@google.com 31 | CREATED:20120803T221306Z 32 | DESCRIPTION: 33 | LAST-MODIFIED:20120803T221306Z 34 | LOCATION: 35 | SEQUENCE:0 36 | STATUS:CONFIRMED 37 | SUMMARY:Day Long Event 38 | TRANSP:TRANSPARENT 39 | BEGIN:VALARM 40 | ACTION:EMAIL 41 | DESCRIPTION:This is an event reminder 42 | SUMMARY:Alarm notification 43 | ATTENDEE:mailto:calmozilla1@gmail.com 44 | TRIGGER;VALUE=DATE-TIME:20120802T233000Z 45 | END:VALARM 46 | BEGIN:VALARM 47 | ACTION:DISPLAY 48 | DESCRIPTION:This is an event reminder 49 | TRIGGER;VALUE=DATE-TIME:20120802T233000Z 50 | END:VALARM 51 | END:VEVENT 52 | END:VCALENDAR 53 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/duration_instead_of_dtend.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Google Inc//Google Calendar 70.9054//EN 3 | VERSION:2.0 4 | CALSCALE:GREGORIAN 5 | X-WR-CALNAME:calmozilla1@example.com 6 | X-WR-TIMEZONE:America/Los_Angeles 7 | BEGIN:VTIMEZONE 8 | TZID:America/Los_Angeles 9 | X-LIC-LOCATION:America/Los_Angeles 10 | BEGIN:DAYLIGHT 11 | TZOFFSETFROM:-0800 12 | TZOFFSETTO:-0700 13 | TZNAME:PDT 14 | DTSTART:19700308T020000 15 | RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 16 | END:DAYLIGHT 17 | BEGIN:STANDARD 18 | TZOFFSETFROM:-0700 19 | TZOFFSETTO:-0800 20 | TZNAME:PST 21 | DTSTART:19701101T020000 22 | RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 23 | END:STANDARD 24 | END:VTIMEZONE 25 | BEGIN:VEVENT 26 | DTSTART;TZID=America/Los_Angeles:20120630T060000 27 | DURATION:P1D 28 | DTSTAMP:20120724T212411Z 29 | UID:dn4vrfmfn5p05roahsopg57h48@example.com 30 | CREATED:20120724T212411Z 31 | DESCRIPTION: 32 | LAST-MODIFIED:20120724T212411Z 33 | LOCATION: 34 | SEQUENCE:0 35 | STATUS:CONFIRMED 36 | SUMMARY:Really long event name thing 37 | TRANSP:OPAQUE 38 | END:VEVENT 39 | END:VCALENDAR 40 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/forced_types.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Google Inc//Google Calendar 70.9054//EN 3 | VERSION:2.0 4 | CALSCALE:GREGORIAN 5 | X-WR-CALNAME:calmozilla1@gmail.com 6 | X-WR-TIMEZONE:America/Los_Angeles 7 | BEGIN:VTIMEZONE 8 | TZID:America/Los_Angeles 9 | X-LIC-LOCATION:America/Los_Angeles 10 | BEGIN:DAYLIGHT 11 | TZOFFSETFROM:-0800 12 | TZOFFSETTO:-0700 13 | TZNAME:PDT 14 | DTSTART:19700308T020000 15 | RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 16 | END:DAYLIGHT 17 | BEGIN:STANDARD 18 | TZOFFSETFROM:-0700 19 | TZOFFSETTO:-0800 20 | TZNAME:PST 21 | DTSTART:19701101T020000 22 | RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 23 | END:STANDARD 24 | END:VTIMEZONE 25 | BEGIN:VEVENT 26 | DTSTART;VALUE=DATE:20120904 27 | DTEND;VALUE=DATE:20120905 28 | DTSTAMP:20120905T084734Z 29 | UID:redgrb1l0aju5edm6h0s102eu4@google.com 30 | CREATED:20120905T084734Z 31 | DESCRIPTION: 32 | LAST-MODIFIED:20120905T084734Z 33 | LOCATION: 34 | SEQUENCE:0 35 | STATUS:CONFIRMED 36 | SUMMARY:Event 37 | TRANSP:TRANSPARENT 38 | BEGIN:VALARM 39 | ACTION:EMAIL 40 | DESCRIPTION:This is an event reminder 41 | SUMMARY:Alarm notification 42 | ATTENDEE:mailto:calmozilla1@gmail.com 43 | TRIGGER;VALUE=DATE-TIME:20120903T233000Z 44 | END:VALARM 45 | BEGIN:VALARM 46 | ACTION:DISPLAY 47 | DESCRIPTION:This is an event reminder 48 | END:VALARM 49 | END:VEVENT 50 | END:VCALENDAR 51 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/minimal.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Google Inc//Google Calendar 70.9054//EN 3 | VERSION:2.0 4 | CALSCALE:GREGORIAN 5 | X-WR-CALNAME:calmozilla1@gmail.com 6 | X-WR-TIMEZONE:America/Los_Angeles 7 | BEGIN:VTIMEZONE 8 | TZID:America/Los_Angeles 9 | X-LIC-LOCATION:America/Los_Angeles 10 | BEGIN:DAYLIGHT 11 | TZOFFSETFROM:-0800 12 | TZOFFSETTO:-0700 13 | TZNAME:PDT 14 | DTSTART:19700308T020000 15 | RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 16 | END:DAYLIGHT 17 | BEGIN:STANDARD 18 | TZOFFSETFROM:-0700 19 | TZOFFSETTO:-0800 20 | TZNAME:PST 21 | DTSTART:19701101T020000 22 | RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 23 | END:STANDARD 24 | END:VTIMEZONE 25 | BEGIN:VEVENT 26 | DTSTART;TZID=America/Los_Angeles:20120630T060000 27 | DTEND;TZID=America/Los_Angeles:20120630T070000 28 | DTSTAMP:20120724T212411Z 29 | UID:dn4vrfmfn5p05roahsopg57h48@google.com 30 | CREATED:20120724T212411Z 31 | DESCRIPTION: 32 | LAST-MODIFIED:20120724T212411Z 33 | LOCATION: 34 | SEQUENCE:0 35 | STATUS:CONFIRMED 36 | SUMMARY:Really long event name thing 37 | TRANSP:OPAQUE 38 | END:VEVENT 39 | END:VCALENDAR 40 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/multiple_rrules.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:Zimbra-Calendar-Provider 4 | BEGIN:VTIMEZONE 5 | TZID:America/Los_Angeles 6 | BEGIN:STANDARD 7 | DTSTART:19710101T020000 8 | TZOFFSETTO:-0800 9 | TZOFFSETFROM:-0700 10 | RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=11;BYDAY=1SU 11 | TZNAME:PST 12 | END:STANDARD 13 | BEGIN:DAYLIGHT 14 | DTSTART:19710101T020000 15 | TZOFFSETTO:-0700 16 | TZOFFSETFROM:-0800 17 | RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=2SU 18 | TZNAME:PDT 19 | END:DAYLIGHT 20 | END:VTIMEZONE 21 | BEGIN:VEVENT 22 | UID:1334F9B7-6136-444E-A58D-472564C6AA73 23 | RRULE:FREQ=WEEKLY;UNTIL=20120730T065959Z 24 | RRULE:FREQ=MONTHLY;BYDAY=SU;UNTIL=20120730T065959Z 25 | SUMMARY:sahaja <> frashed 26 | DESCRIPTION:weekly 1on1 27 | ATTENDEE;CN=James Lal;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS 28 | -ACTION;RSVP=TRUE:mailto:jlal@mozilla.com 29 | ORGANIZER;CN=Faramarz Rashed:mailto:frashed@mozilla.com 30 | DTSTART;TZID=America/Los_Angeles:20120326T110000 31 | DTEND;TZID=America/Los_Angeles:20120326T113000 32 | STATUS:CONFIRMED 33 | CLASS:PUBLIC 34 | TRANSP:OPAQUE 35 | LAST-MODIFIED:20120326T161522Z 36 | DTSTAMP:20120730T165637Z 37 | SEQUENCE:9 38 | BEGIN:VALARM 39 | ACTION:DISPLAY 40 | TRIGGER;RELATED=START:-PT5M 41 | DESCRIPTION:Reminder 42 | END:VALARM 43 | END:VEVENT 44 | END:VCALENDAR 45 | 46 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/only_dtstart_date.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Google Inc//Google Calendar 70.9054//EN 3 | VERSION:2.0 4 | CALSCALE:GREGORIAN 5 | X-WR-CALNAME:calmozilla1@example.com 6 | X-WR-TIMEZONE:America/Los_Angeles 7 | BEGIN:VTIMEZONE 8 | TZID:America/Los_Angeles 9 | X-LIC-LOCATION:America/Los_Angeles 10 | BEGIN:DAYLIGHT 11 | TZOFFSETFROM:-0800 12 | TZOFFSETTO:-0700 13 | TZNAME:PDT 14 | DTSTART:19700308T020000 15 | RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 16 | END:DAYLIGHT 17 | BEGIN:STANDARD 18 | TZOFFSETFROM:-0700 19 | TZOFFSETTO:-0800 20 | TZNAME:PST 21 | DTSTART:19701101T020000 22 | RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 23 | END:STANDARD 24 | END:VTIMEZONE 25 | BEGIN:VEVENT 26 | DTSTART;VALUE=DATE:20120630 27 | DTSTAMP:20120724T212411Z 28 | UID:dn4vrfmfn5p05roahsopg57h48@example.com 29 | CREATED:20120724T212411Z 30 | DESCRIPTION: 31 | LAST-MODIFIED:20120724T212411Z 32 | LOCATION: 33 | SEQUENCE:0 34 | STATUS:CONFIRMED 35 | SUMMARY:Really long event name thing 36 | TRANSP:OPAQUE 37 | END:VEVENT 38 | END:VCALENDAR 39 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/only_dtstart_time.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//Google Inc//Google Calendar 70.9054//EN 3 | VERSION:2.0 4 | CALSCALE:GREGORIAN 5 | X-WR-CALNAME:calmozilla1@example.com 6 | X-WR-TIMEZONE:America/Los_Angeles 7 | BEGIN:VTIMEZONE 8 | TZID:America/Los_Angeles 9 | X-LIC-LOCATION:America/Los_Angeles 10 | BEGIN:DAYLIGHT 11 | TZOFFSETFROM:-0800 12 | TZOFFSETTO:-0700 13 | TZNAME:PDT 14 | DTSTART:19700308T020000 15 | RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 16 | END:DAYLIGHT 17 | BEGIN:STANDARD 18 | TZOFFSETFROM:-0700 19 | TZOFFSETTO:-0800 20 | TZNAME:PST 21 | DTSTART:19701101T020000 22 | RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 23 | END:STANDARD 24 | END:VTIMEZONE 25 | BEGIN:VEVENT 26 | DTSTART;TZID=America/Los_Angeles:20120630T060000 27 | DTSTAMP:20120724T212411Z 28 | UID:dn4vrfmfn5p05roahsopg57h48@example.com 29 | CREATED:20120724T212411Z 30 | DESCRIPTION: 31 | LAST-MODIFIED:20120724T212411Z 32 | LOCATION: 33 | SEQUENCE:0 34 | STATUS:CONFIRMED 35 | SUMMARY:Really long event name thing 36 | TRANSP:OPAQUE 37 | END:VEVENT 38 | END:VCALENDAR -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/parserv2.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:Zimbra-Calendar-Provider 4 | BEGIN:VTIMEZONE 5 | TZID:America/Los_Angeles 6 | BEGIN:STANDARD 7 | DTSTART:19710101T020000 8 | TZOFFSETTO:-0800 9 | TZOFFSETFROM:-0700 10 | RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11 11 | TZNAME:PST 12 | END:STANDARD 13 | BEGIN:DAYLIGHT 14 | DTSTART:19710101T020000 15 | TZOFFSETTO:-0700 16 | TZOFFSETFROM:-0800 17 | RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3 18 | TZNAME:PDT 19 | END:DAYLIGHT 20 | END:VTIMEZONE 21 | BEGIN:VEVENT 22 | UID:44c10eaa-db0b-4223-8653-cf2b63f26326 23 | RRULE:FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR 24 | SUMMARY:Calendar 25 | DESCRIPTION:desc 26 | ATTENDEE;CN=XXX;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TRU 27 | E:mailto:foo@bar.com 28 | ATTENDEE;CN=XXXX;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;RSVP=TR 29 | UE:mailto:x@bar.com 30 | ORGANIZER;CN=foobar:mailto:x@bar.com 31 | DTSTART;TZID=America/Los_Angeles:20120911T103000 32 | DTEND;TZID=America/Los_Angeles:20120911T110000 33 | STATUS:CONFIRMED 34 | CLASS:PUBLIC 35 | TRANSP:OPAQUE 36 | LAST-MODIFIED:20120911T184851Z 37 | DTSTAMP:20120911T184851Z 38 | SEQUENCE:1 39 | BEGIN:VALARM 40 | ACTION:DISPLAY 41 | TRIGGER;RELATED=START:-PT5M 42 | DESCRIPTION:Reminder 43 | END:VALARM 44 | END:VEVENT 45 | END:VCALENDAR 46 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/recur_instances_finite.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:Zimbra-Calendar-Provider 4 | BEGIN:VTIMEZONE 5 | TZID:America/Los_Angeles 6 | BEGIN:STANDARD 7 | DTSTART:19710101T020000 8 | TZOFFSETTO:-0800 9 | TZOFFSETFROM:-0700 10 | RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=11;BYDAY=1SU 11 | TZNAME:PST 12 | END:STANDARD 13 | BEGIN:DAYLIGHT 14 | DTSTART:19710101T020000 15 | TZOFFSETTO:-0700 16 | TZOFFSETFROM:-0800 17 | RRULE:FREQ=YEARLY;WKST=MO;INTERVAL=1;BYMONTH=3;BYDAY=2SU 18 | TZNAME:PDT 19 | END:DAYLIGHT 20 | END:VTIMEZONE 21 | BEGIN:VEVENT 22 | UID:623c13c0-6c2b-45d6-a12b-c33ad61c4868 23 | DESCRIPTION:IAM FOO 24 | RRULE:FREQ=MONTHLY;INTERVAL=1;BYDAY=1TU;UNTIL=20121231T100000 25 | SUMMARY:Crazy Event Thingy! 26 | ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=ACCEPTED;CN=Sahaja 27 | Lal;X-NUM-GUESTS=0:mailto:calmozilla1@gmail.com 28 | ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CN=ja 29 | mes@lightsofapollo.com;X-NUM-GUESTS=0:mailto:james@lightsofapollo.com 30 | ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;CN=ia 31 | m.revelation@gmail.com;X-NUM-GUESTS=0:mailto:iam.revelation@gmail.com 32 | LOCATION:PLACE 33 | ORGANIZER;CN=James Lal:mailto:jlal@mozilla.com 34 | DTSTART;TZID=America/Los_Angeles:20121002T100000 35 | DTEND;TZID=America/Los_Angeles:20121002T103000 36 | STATUS:CONFIRMED 37 | CLASS:PUBLIC 38 | TRANSP:OPAQUE 39 | LAST-MODIFIED:20120912T171506Z 40 | DTSTAMP:20120912T171506Z 41 | SEQUENCE:0 42 | RDATE;TZID=America/Los_Angeles:20121110T100000 43 | RDATE;TZID=America/Los_Angeles:20121105T100000 44 | BEGIN:VALARM 45 | ACTION:DISPLAY 46 | TRIGGER;RELATED=START:-PT5M 47 | DESCRIPTION:Reminder 48 | END:VALARM 49 | END:VEVENT 50 | END:VCALENDAR 51 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/timezones/America/Atikokan.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//tzurl.org//NONSGML Olson 2012h//EN 3 | VERSION:2.0 4 | BEGIN:VTIMEZONE 5 | TZID:America/Atikokan 6 | X-LIC-LOCATION:America/Atikokan 7 | BEGIN:STANDARD 8 | TZOFFSETFROM:-0500 9 | TZOFFSETTO:-0500 10 | TZNAME:EST 11 | DTSTART:19700101T000000 12 | END:STANDARD 13 | END:VTIMEZONE 14 | END:VCALENDAR 15 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/timezones/America/Denver.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//custom/thing 3 | VERSION:2.0 4 | BEGIN:VTIMEZONE 5 | TZID:America/Denver 6 | BEGIN:DAYLIGHT 7 | TZOFFSETFROM:-0700 8 | TZOFFSETTO:-0600 9 | TZNAME:MDT 10 | DTSTART:20070311T020000 11 | RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 12 | END:DAYLIGHT 13 | BEGIN:STANDARD 14 | TZOFFSETFROM:-0600 15 | TZOFFSETTO:-0700 16 | TZNAME:MST 17 | DTSTART:20071104T020000 18 | RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 19 | END:STANDARD 20 | BEGIN:DAYLIGHT 21 | TZOFFSETFROM:-0700 22 | TZOFFSETTO:-0600 23 | TZNAME:MDT 24 | DTSTART:19180331T020000 25 | RDATE:20030406T020000 26 | RDATE:20040404T020000 27 | RDATE:20050403T020000 28 | RDATE:20060402T020000 29 | END:DAYLIGHT 30 | BEGIN:STANDARD 31 | TZOFFSETFROM:-0600 32 | TZOFFSETTO:-0700 33 | TZNAME:MST 34 | DTSTART:19181027T020000 35 | RDATE:20031026T020000 36 | RDATE:20041031T020000 37 | RDATE:20051030T020000 38 | RDATE:20061029T020000 39 | END:STANDARD 40 | END:VTIMEZONE 41 | END:VCALENDAR 42 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/timezones/America/Los_Angeles.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//tzurl.org//NONSGML Olson 2012h//EN 3 | VERSION:2.0 4 | BEGIN:VTIMEZONE 5 | TZID:America/Los_Angeles 6 | X-LIC-LOCATION:America/Los_Angeles 7 | BEGIN:DAYLIGHT 8 | TZOFFSETFROM:-0800 9 | TZOFFSETTO:-0700 10 | TZNAME:PDT 11 | DTSTART:19700308T020000 12 | RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 13 | END:DAYLIGHT 14 | BEGIN:STANDARD 15 | TZOFFSETFROM:-0700 16 | TZOFFSETTO:-0800 17 | TZNAME:PST 18 | DTSTART:19701101T020000 19 | RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 20 | END:STANDARD 21 | END:VTIMEZONE 22 | END:VCALENDAR 23 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/timezones/America/New_York.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//tzurl.org//NONSGML Olson 2012h//EN 3 | VERSION:2.0 4 | BEGIN:VTIMEZONE 5 | TZID:America/New_York 6 | X-LIC-LOCATION:America/New_York 7 | BEGIN:DAYLIGHT 8 | TZOFFSETFROM:-0500 9 | TZOFFSETTO:-0400 10 | TZNAME:EDT 11 | DTSTART:19700308T020000 12 | RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU 13 | END:DAYLIGHT 14 | BEGIN:STANDARD 15 | TZOFFSETFROM:-0400 16 | TZOFFSETTO:-0500 17 | TZNAME:EST 18 | DTSTART:19701101T020000 19 | RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU 20 | END:STANDARD 21 | END:VTIMEZONE 22 | END:VCALENDAR 23 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/timezones/Makebelieve/RDATE_test.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//ical.js//NONSGML Makebelieve//EN 3 | VERSION:2.0 4 | BEGIN:VTIMEZONE 5 | TZID:Makebelieve/RDATE_as_date 6 | X-LIC-LOCATION:Makebelieve/RDATE_as_date 7 | BEGIN:STANDARD 8 | TZOFFSETFROM:-0400 9 | TZOFFSETTO:-0500 10 | TZNAME:RDATE_as_date_standard 11 | DTSTART:19700101T020000 12 | RDATE:19700101T020000 13 | RDATE;VALUE=DATE:19800101 14 | RDATE:19900101T070000Z 15 | END:STANDARD 16 | BEGIN:DAYLIGHT 17 | TZOFFSETFROM:-0500 18 | TZOFFSETTO:-0400 19 | TZNAME:RDATE_as_date_daylight 20 | DTSTART:19750101T020000 21 | RDATE:19750101T020000 22 | RDATE;VALUE=DATE:19850101 23 | RDATE:19950101T070000Z 24 | END:DAYLIGHT 25 | END:VTIMEZONE 26 | END:VCALENDAR 27 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/timezones/Makebelieve/RDATE_utc_test.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//ical.js//NONSGML Makebelieve//EN 3 | VERSION:2.0 4 | BEGIN:VTIMEZONE 5 | TZID:Makebelieve/RDATE_as_date_utc 6 | X-LIC-LOCATION:Makebelieve/RDATE_as_date_utc 7 | BEGIN:STANDARD 8 | TZOFFSETFROM:-0400 9 | TZOFFSETTO:-0500 10 | TZNAME:RDATE_as_date_utc_standard 11 | DTSTART:19700101T020000Z 12 | RDATE:19700101T020000 13 | RDATE;VALUE=DATE:19800101 14 | RDATE:19900101T070000Z 15 | END:STANDARD 16 | BEGIN:DAYLIGHT 17 | TZOFFSETFROM:-0500 18 | TZOFFSETTO:-0400 19 | TZNAME:RDATE_as_date_utc_daylight 20 | DTSTART:19750101T020000Z 21 | RDATE:19750101T020000 22 | RDATE;VALUE=DATE:19850101 23 | RDATE:19950101T070000Z 24 | END:DAYLIGHT 25 | END:VTIMEZONE 26 | END:VCALENDAR 27 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/timezones/Makebelieve/RRULE_UNTIL_test.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | PRODID:-//ical.js//NONSGML Makebelieve//EN 3 | VERSION:2.0 4 | BEGIN:VTIMEZONE 5 | TZID:Makebelieve/RRULE_UNTIL 6 | X-LIC-LOCATION:Makebelieve/RRULE_UNTIL 7 | BEGIN:STANDARD 8 | TZOFFSETFROM:-0400 9 | TZOFFSETTO:-0500 10 | TZNAME:RRULE_UNTIL_standard 11 | DTSTART:19700101T020000Z 12 | RRULE:FREQ=YEARLY;INTERVAL=5;UNTIL=19800101T020000Z 13 | END:STANDARD 14 | BEGIN:DAYLIGHT 15 | TZOFFSETFROM:-0500 16 | TZOFFSETTO:-0400 17 | TZNAME:RDATE_UNTIL_daylight 18 | DTSTART:19750101T020000 19 | RRULE:FREQ=YEARLY;INTERVAL=5;UNTIL=19850101T020000Z 20 | END:DAYLIGHT 21 | END:VTIMEZONE 22 | END:VCALENDAR 23 | -------------------------------------------------------------------------------- /js/vendor/ical.js/samples/utc_negative_zero.ics: -------------------------------------------------------------------------------- 1 | BEGIN:VCALENDAR 2 | VERSION:2.0 3 | PRODID:Zimbra-Calendar-Provider 4 | BEGIN:VTIMEZONE 5 | TZID:Etc/GMT 6 | BEGIN:STANDARD 7 | DTSTART:19710101T000000 8 | TZOFFSETTO:-0000 9 | TZOFFSETFROM:-0000 10 | TZNAME:GMT 11 | END:STANDARD 12 | END:VTIMEZONE 13 | BEGIN:VEVENT 14 | UID:d118e997-3683-4552-8fe8-57c641f1f179 15 | SUMMARY:And another 16 | ORGANIZER;CN=Sahaja Lal:mailto:calmozilla1@yahoo.com 17 | DTSTART;TZID=Etc/GMT:20120821T210000 18 | DTEND;TZID=Etc/GMT:20120821T213000 19 | STATUS:CONFIRMED 20 | CLASS:PUBLIC 21 | X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY 22 | TRANSP:OPAQUE 23 | X-MICROSOFT-DISALLOW-COUNTER:TRUE 24 | DTSTAMP:20120817T032509Z 25 | SEQUENCE:0 26 | END:VEVENT 27 | END:VCALENDAR 28 | -------------------------------------------------------------------------------- /js/vendor/ical.js/tasks/timezones.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var util = require('util'); 4 | var exec = require('sync-exec'); 5 | var path = require('path'); 6 | 7 | var OLSON_DB_REMOTE = 'http://www.iana.org/time-zones/repository/releases/tzdata%s.tar.gz'; 8 | var TZURL_DIR = process.env.TZURL_DIR || path.join(__dirname, '..', 'tools', 'tzurl') 9 | var OLSON_DIR = process.env.OLSON_DIR || path.join(TZURL_DIR, 'olson'); 10 | 11 | module.exports = function(grunt) { 12 | grunt.registerTask('timezones', 'Get Olson timezone data', function() { 13 | var olsonversion = grunt.option('olsondb'); 14 | if (!olsonversion) { 15 | olsonversion = (new Date()).getFullYear() + "a"; 16 | grunt.fail.warn('Need to specify --olsondb=, e.g. ' + olsonversion); 17 | return; 18 | } 19 | 20 | if (grunt.file.isDir(TZURL_DIR)) { 21 | grunt.log.ok('Using existing tzurl installation'); 22 | } else { 23 | grunt.log.ok('Retrieving tzurl from svn'); 24 | exec('svn export -r40 http://tzurl.googlecode.com/svn/trunk/ ' + TZURL_DIR); 25 | } 26 | 27 | if (grunt.file.isDir(OLSON_DIR)) { 28 | grunt.log.ok('Using olson database from ' + OLSON_DIR); 29 | } else { 30 | var url = util.format(OLSON_DB_REMOTE, olsonversion); 31 | grunt.log.ok('Downloading ' + url); 32 | grunt.file.mkdir(OLSON_DIR); 33 | exec('wget ' + url + ' -O - | tar xz -C ' + OLSON_DIR); 34 | } 35 | 36 | grunt.log.ok('Building tzurl tool'); 37 | exec('make -C "' + TZURL_DIR + '" OLSON_DIR="' + OLSON_DIR + '"'); 38 | 39 | grunt.log.ok('Running vzic'); 40 | exec(path.join(TZURL_DIR, 'vzic')); 41 | }); 42 | }; 43 | -------------------------------------------------------------------------------- /js/vendor/ical.js/tasks/travis.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | module.exports = function(grunt) { 4 | 5 | grunt.config.set("travis", { 6 | branch: process.env.TRAVIS_BRANCH, 7 | leader: (process.env.TRAVIS_JOB_NUMBER || "").substr(-2) == ".1", 8 | commit: process.env.TRAVIS_COMMIT, 9 | pullrequest: (process.env.TRAVIS_PULL_REQUEST || "false") == "false" ? null : process.env.TRAVIS_PULL_REQUEST, 10 | secure: process.env.TRAVIS_SECURE_ENV_VARS == "true", 11 | tag: process.env.TRAVIS_TAG 12 | }); 13 | 14 | function registerCITask(name, descr, cond) { 15 | grunt.registerTask(name, function(/* ...tasks */) { 16 | var task = Array.prototype.join.call(arguments, ":"); 17 | grunt.config.requires("travis"); 18 | var travis = grunt.config.get("travis"); 19 | 20 | if (cond(travis, task)) { 21 | grunt.task.run(task); 22 | } else { 23 | grunt.log.ok('Skipping ' + task + ', not on ' + descr); 24 | } 25 | }); 26 | } 27 | 28 | grunt.registerTask('run-with-env', function(/* env, ...tasks */) { 29 | var env = arguments[0]; 30 | var task = Array.prototype.slice.call(arguments, 1).join(":"); 31 | 32 | if (process.env[env]) { 33 | grunt.task.run(task); 34 | } else { 35 | grunt.fail.warn('Cannot run ' + task + ', environment ' + env + ' not available'); 36 | } 37 | }); 38 | 39 | registerCITask('run-on-master-leader', 'branch master leader', function(travis) { 40 | return travis.branch == 'master' && !travis.pullrequest && 41 | travis.secure && travis.leader; 42 | }); 43 | 44 | registerCITask('run-on-leader', 'build leader', function(travis) { 45 | return travis.leader; 46 | }); 47 | 48 | registerCITask('run-on-pullrequest', 'pull request', function(travis) { 49 | return travis.pullrequest; 50 | }); 51 | }; 52 | -------------------------------------------------------------------------------- /js/vendor/ical.js/test-agent-coverage.json: -------------------------------------------------------------------------------- 1 | { 2 | } 3 | -------------------------------------------------------------------------------- /js/vendor/ical.js/test-agent-server.js: -------------------------------------------------------------------------------- 1 | //all require paths must be absolute -- use __dirname 2 | var Agent = require('test-agent'), 3 | Apps = Agent.server, 4 | Suite = Agent.Suite, 5 | suite = new Suite({ 6 | paths: [__dirname], 7 | testDir: 'test/', 8 | libDir: 'lib/ical/', 9 | testSuffix: '_test.js' 10 | }); 11 | 12 | server.use(Apps.Suite, suite); 13 | -------------------------------------------------------------------------------- /js/vendor/ical.js/test-agent/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Serve the tests 7 | 8 | 9 | 10 | 11 |
12 |
13 | 14 | 15 |
16 | 20 |
21 |
22 |
23 | 24 |
25 |
26 | 27 | 28 |
29 |
30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /js/vendor/ical.js/test-agent/index.js: -------------------------------------------------------------------------------- 1 | (function(window) { 2 | 3 | var worker = new TestAgent.BrowserWorker({ 4 | /* this is where your tests will be loaded into */ 5 | sandbox: './sandbox.html' 6 | }); 7 | 8 | worker.use(TestAgent.BrowserWorker.Config, { 9 | /* config file which lists all available tests for the ui */ 10 | url: './config.json' 11 | }); 12 | 13 | worker.use(TestAgent.BrowserWorker.MochaDriver, { 14 | /* path to mocha */ 15 | mochaUrl: '/node_modules/mocha/mocha.js', 16 | testHelperUrl: '../test/helper.js', 17 | reporter: 'HTML', 18 | ui: 'tdd' 19 | }); 20 | 21 | worker.use(TestAgent.BrowserWorker.Websocket); 22 | worker.use(TestAgent.BrowserWorker.TestUi); 23 | worker.use(TestAgent.BrowserWorker.ErrorReporting); 24 | 25 | worker.on({ 26 | 27 | 'sandbox': function() { 28 | }, 29 | 30 | 'open': function() { 31 | setTimeout(worker.ready.bind(worker), 0); 32 | }, 33 | 34 | 'close': function() { 35 | console.log('lost client trying to reconnect'); 36 | } 37 | 38 | }); 39 | 40 | worker.config(); 41 | worker.start(); 42 | 43 | }(this)); 44 | 45 | -------------------------------------------------------------------------------- /js/vendor/ical.js/test-agent/package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/ical.js/test-agent/package.json -------------------------------------------------------------------------------- /js/vendor/ical.js/test-agent/sandbox.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Tests 6 | 7 | 13 | 15 | 16 | 17 | 18 | 19 | 22 |
23 |
24 | 25 | 28 |
29 |
30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jquery-timepicker", 3 | "homepage": "https://github.com/fgelinas/timepicker", 4 | "_release": "883bb2cd94", 5 | "_resolution": { 6 | "type": "branch", 7 | "branch": "master", 8 | "commit": "883bb2cd94ce65bc2a0a707b0c5911baf6de4ad4" 9 | }, 10 | "_source": "git://github.com/fgelinas/timepicker.git", 11 | "_target": "*", 12 | "_originalSource": "jquery-timepicker" 13 | } -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/MIT-LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011 John Resig, http://jquery.com/ 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/README.md: -------------------------------------------------------------------------------- 1 | jQuery UI Timepicker by François Gélinas 2 | ======================================== 3 | 4 | What 5 | ---- 6 | This is a jQuery UI time picker plugin build to match with other official jQuery UI widgets. 7 | Based on the existing date picker, it will blend nicely with your form and use your selected jQuery UI theme. 8 | The plugin is very easy to integrate in your form for you time (hours / minutes) inputs. 9 | 10 | Why 11 | --- 12 | I built this plugin because I could not find a plugin that did what I needed. 13 | 14 | Doc 15 | --- 16 | Examples are available on the main page at [http://fgelinas.com/code/timepicker](http://fgelinas.com/code/timepicker) 17 | Most option parameters are documented at [http://fgelinas.com/code/timepicker/#usage](http://fgelinas.com/code/timepicker/#usage) 18 | 19 | Requirements 20 | ------------ 21 | Work with jQuery 1.5.1 and more, also require jQuery UI core. 22 | There is a legacy version of the plugin made to work with older jQuery 1.2.6 and UI 1.6 at [http://fgelinas.com/code/timepicker/#get_timepicker](http://fgelinas.com/code/timepicker/#get_timepicker) 23 | 24 | Licenses 25 | -------- 26 | The plugin is licensed under the [MIT](https://github.com/fgelinas/timepicker/blob/master/MIT-LICENSE.txt) and [GPL](https://github.com/fgelinas/timepicker/blob/master/GPL-LICENSE.txt) licenses. 27 | 28 | Other Stuff 29 | ----------- 30 | There is a jsFiddle page [here](http://jsfiddle.net/fgelinas/R6jLt/) with basic implementation for testing. -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-cs.js: -------------------------------------------------------------------------------- 1 | /* Czech initialisation for the timepicker plugin */ 2 | /* Written by David Spohr (spohr.david at gmail). */ 3 | jQuery(function($){ 4 | $.timepicker.regional['cs'] = { 5 | hourText: 'Hodiny', 6 | minuteText: 'Minuty', 7 | amPmText: ['dop.', 'odp.'] , 8 | closeButtonText: 'Zavřít', 9 | nowButtonText: 'Nyní', 10 | deselectButtonText: 'Odoznačit' } 11 | $.timepicker.setDefaults($.timepicker.regional['cs']); 12 | }); 13 | -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-de.js: -------------------------------------------------------------------------------- 1 | /* German initialisation for the timepicker plugin */ 2 | /* Written by Lowie Hulzinga. */ 3 | jQuery(function($){ 4 | $.timepicker.regional['de'] = { 5 | hourText: 'Stunde', 6 | minuteText: 'Minuten', 7 | amPmText: ['AM', 'PM'] , 8 | closeButtonText: 'Beenden', 9 | nowButtonText: 'Aktuelle Zeit', 10 | deselectButtonText: 'Wischen' } 11 | $.timepicker.setDefaults($.timepicker.regional['de']); 12 | }); 13 | -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-es.js: -------------------------------------------------------------------------------- 1 | /* Spanish initialisation for the jQuery time picker plugin. */ 2 | /* Writen by Jandro González (agonzalezalves@gmail.com) */ 3 | jQuery(function($){ 4 | $.timepicker.regional['es'] = { 5 | hourText: 'Hora', 6 | minuteText: 'Minuto', 7 | amPmText: ['AM', 'PM'], 8 | closeButtonText: 'Aceptar', 9 | nowButtonText: 'Ahora', 10 | deselectButtonText: 'Deseleccionar' } 11 | $.timepicker.setDefaults($.timepicker.regional['es']); 12 | }); 13 | -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-fr.js: -------------------------------------------------------------------------------- 1 | /* French initialisation for the jQuery time picker plugin. */ 2 | /* Written by Bernd Plagge (bplagge@choicenet.ne.jp), 3 | Francois Gelinas (frank@fgelinas.com) */ 4 | jQuery(function($){ 5 | $.timepicker.regional['fr'] = { 6 | hourText: 'Heures', 7 | minuteText: 'Minutes', 8 | amPmText: ['AM', 'PM'], 9 | closeButtonText: 'Fermer', 10 | nowButtonText: 'Maintenant', 11 | deselectButtonText: 'Désélectionner' } 12 | $.timepicker.setDefaults($.timepicker.regional['fr']); 13 | }); -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-hr.js: -------------------------------------------------------------------------------- 1 | /* Croatian/Bosnian initialisation for the timepicker plugin */ 2 | /* Written by Rene Brakus (rene.brakus@infobip.com). */ 3 | jQuery(function($){ 4 | $.timepicker.regional['hr'] = { 5 | hourText: 'Sat', 6 | minuteText: 'Minuta', 7 | amPmText: ['Prijepodne', 'Poslijepodne'], 8 | closeButtonText: 'Zatvoriti', 9 | nowButtonText: 'Sada', 10 | deselectButtonText: 'Poništite'} 11 | 12 | $.timepicker.setDefaults($.timepicker.regional['hr']); 13 | }); -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-hu.js: -------------------------------------------------------------------------------- 1 | /* Hungarian initialisation for the timepicker plugin */ 2 | /* Written by Bálint Dávid Tarcsa. */ 3 | jQuery(function($){ 4 | $.timepicker.regional['hu'] = { 5 | hourText: 'Óra', 6 | minuteText: 'Perc', 7 | amPmText: ['De.', 'Du.'] , 8 | closeButtonText: 'Kész', 9 | nowButtonText: 'Most', 10 | deselectButtonText: 'Törlés' } 11 | $.timepicker.setDefaults($.timepicker.regional['hu']); 12 | }); -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-it.js: -------------------------------------------------------------------------------- 1 | /* Italian initialisation for the jQuery time picker plugin. */ 2 | /* Written by Serge Margarita (serge.margarita@gmail.com) */ 3 | jQuery(function($){ 4 | $.timepicker.regional['it'] = { 5 | hourText: 'Ore', 6 | minuteText: 'Minuti', 7 | amPmText: ['AM', 'PM'], 8 | closeButtonText: 'Chiudi', 9 | nowButtonText: 'Adesso', 10 | deselectButtonText: 'Svuota' } 11 | $.timepicker.setDefaults($.timepicker.regional['it']); 12 | }); -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-ja.js: -------------------------------------------------------------------------------- 1 | /* Japanese initialisation for the jQuery time picker plugin. */ 2 | /* Written by Bernd Plagge (bplagge@choicenet.ne.jp). */ 3 | jQuery(function($){ 4 | $.timepicker.regional['ja'] = { 5 | hourText: '時間', 6 | minuteText: '分', 7 | amPmText: ['午前', '午後'], 8 | closeButtonText: '閉じる', 9 | nowButtonText: '現時', 10 | deselectButtonText: '選択解除' } 11 | $.timepicker.setDefaults($.timepicker.regional['ja']); 12 | }); 13 | -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-mk.js: -------------------------------------------------------------------------------- 1 | /* Macedonian initialisation for the timepicker plugin */ 2 | /* Written by Stojance Panov. */ 3 | jQuery(function($){ 4 | $.timepicker.regional['mk'] = { 5 | hourText: 'Час', 6 | minuteText: 'Минути', 7 | amPmText: ['Претпладне', 'Попладне'], 8 | closeButtonText: 'Затвори', 9 | nowButtonText: 'Сега', 10 | deselectButtonText: 'Поништи'} 11 | 12 | $.timepicker.setDefaults($.timepicker.regional['mk']); 13 | }); -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-nl.js: -------------------------------------------------------------------------------- 1 | /* Nederlands initialisation for the timepicker plugin */ 2 | /* Written by Lowie Hulzinga. */ 3 | jQuery(function($){ 4 | $.timepicker.regional['nl'] = { 5 | hourText: 'Uren', 6 | minuteText: 'Minuten', 7 | amPmText: ['AM', 'PM'], 8 | closeButtonText: 'Sluiten', 9 | nowButtonText: 'Actuele tijd', 10 | deselectButtonText: 'Wissen' } 11 | $.timepicker.setDefaults($.timepicker.regional['nl']); 12 | }); -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-pl.js: -------------------------------------------------------------------------------- 1 | /* Polish initialisation for the timepicker plugin */ 2 | /* Written by Mateusz Wadolkowski (mw@pcdoctor.pl). */ 3 | jQuery(function($){ 4 | $.timepicker.regional['pl'] = { 5 | hourText: 'Godziny', 6 | minuteText: 'Minuty', 7 | amPmText: ['', ''], 8 | closeButtonText: 'Zamknij', 9 | nowButtonText: 'Teraz', 10 | deselectButtonText: 'Odznacz'} 11 | $.timepicker.setDefaults($.timepicker.regional['pl']); 12 | }); -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-pt-BR.js: -------------------------------------------------------------------------------- 1 | /* Brazilan initialisation for the timepicker plugin */ 2 | /* Written by Daniel Almeida (quantodaniel@gmail.com). */ 3 | jQuery(function($){ 4 | $.timepicker.regional['pt-BR'] = { 5 | hourText: 'Hora', 6 | minuteText: 'Minuto', 7 | amPmText: ['AM', 'PM'], 8 | closeButtonText: 'Fechar', 9 | nowButtonText: 'Agora', 10 | deselectButtonText: 'Limpar' } 11 | $.timepicker.setDefaults($.timepicker.regional['pt-BR']); 12 | }); -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-ru.js: -------------------------------------------------------------------------------- 1 | /* Russian initialisation for the jQuery time picker plugin. */ 2 | /* Writen by Zakhar Day (zakhar.day@gmail.com) */ 3 | jQuery(function($){ 4 | $.timepicker.regional['ru'] = { 5 | hourText: 'Часы', 6 | minuteText: 'Минуты', 7 | amPmText: ['AM', 'PM'], 8 | closeButtonText: 'Готово', 9 | nowButtonText: 'Сейчас', 10 | deselectButtonText: 'Снять выделение' } 11 | $.timepicker.setDefaults($.timepicker.regional['ru']); 12 | }); -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-sl.js: -------------------------------------------------------------------------------- 1 | /* Slovenian localization for the jQuery time picker plugin. */ 2 | /* Written by Blaž Maležič (blaz@malezic.si) */ 3 | jQuery(function($){ 4 | $.timepicker.regional['sl'] = { 5 | hourText: 'Ure', 6 | minuteText: 'Minute', 7 | amPmText: ['AM', 'PM'], 8 | closeButtonText: 'Zapri', 9 | nowButtonText: 'Zdaj', 10 | deselectButtonText: 'Pobriši' } 11 | $.timepicker.setDefaults($.timepicker.regional['sl']); 12 | }); 13 | -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-sv.js: -------------------------------------------------------------------------------- 1 | /* Swedish initialisation for the timepicker plugin */ 2 | /* Written by Björn Westlin (bjorn.westlin@su.se). */ 3 | jQuery(function($){ 4 | $.timepicker.regional['sv'] = { 5 | hourText: 'Timme', 6 | minuteText: 'Minut', 7 | amPmText: ['AM', 'PM'] , 8 | closeButtonText: 'Stäng', 9 | nowButtonText: 'Nu', 10 | deselectButtonText: 'Rensa' } 11 | $.timepicker.setDefaults($.timepicker.regional['sv']); 12 | }); 13 | -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/i18n/jquery.ui.timepicker-tr.js: -------------------------------------------------------------------------------- 1 | /* Turkish initialisation for the jQuery time picker plugin. */ 2 | /* Written by Mutlu Tevfik Koçak (mtkocak@gmail.com) */ 3 | jQuery(function($){ 4 | $.timepicker.regional['tr'] = { 5 | hourText: 'Saat', 6 | minuteText: 'Dakika', 7 | amPmText: ['AM', 'PM'], 8 | closeButtonText: 'Kapat', 9 | nowButtonText: 'Şu anda', 10 | deselectButtonText: 'Seçimi temizle' } 11 | $.timepicker.setDefaults($.timepicker.regional['tr']); 12 | }); -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_flat_10_000000_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_flat_10_000000_40x100.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-icons_228ef1_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-icons_228ef1_256x240.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-icons_ef8c08_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-icons_ef8c08_256x240.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-icons_ffd27a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-icons_ffd27a_256x240.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-icons_ffffff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/include/ui-1.10.0/ui-lightness/images/ui-icons_ffffff_256x240.png -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/jquery.ui.timepicker.css: -------------------------------------------------------------------------------- 1 | /* 2 | * Timepicker stylesheet 3 | * Highly inspired from datepicker 4 | * FG - Nov 2010 - Web3R 5 | * 6 | * version 0.0.3 : Fixed some settings, more dynamic 7 | * version 0.0.4 : Removed width:100% on tables 8 | * version 0.1.1 : set width 0 on tables to fix an ie6 bug 9 | */ 10 | 11 | .ui-timepicker-inline { display: inline; } 12 | 13 | #ui-timepicker-div { padding: 0.2em; } 14 | .ui-timepicker-table { display: inline-table; width: 0; } 15 | .ui-timepicker-table table { margin:0.15em 0 0 0; border-collapse: collapse; } 16 | 17 | .ui-timepicker-hours, .ui-timepicker-minutes { padding: 0.2em; } 18 | 19 | .ui-timepicker-table .ui-timepicker-title { line-height: 1.8em; text-align: center; } 20 | .ui-timepicker-table td { padding: 0.1em; width: 2.2em; } 21 | .ui-timepicker-table th.periods { padding: 0.1em; width: 2.2em; } 22 | 23 | /* span for disabled cells */ 24 | .ui-timepicker-table td span { 25 | display:block; 26 | padding:0.2em 0.3em 0.2em 0.5em; 27 | width: 1.2em; 28 | 29 | text-align:right; 30 | text-decoration:none; 31 | } 32 | /* anchors for clickable cells */ 33 | .ui-timepicker-table td a { 34 | display:block; 35 | padding:0.2em 0.3em 0.2em 0.5em; 36 | width: 1.2em; 37 | cursor: pointer; 38 | text-align:right; 39 | text-decoration:none; 40 | } 41 | 42 | 43 | /* buttons and button pane styling */ 44 | .ui-timepicker .ui-timepicker-buttonpane { 45 | background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; 46 | } 47 | .ui-timepicker .ui-timepicker-buttonpane button { margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } 48 | /* The close button */ 49 | .ui-timepicker .ui-timepicker-close { float: right } 50 | 51 | /* the now button */ 52 | .ui-timepicker .ui-timepicker-now { float: left; } 53 | 54 | /* the deselect button */ 55 | .ui-timepicker .ui-timepicker-deselect { float: left; } 56 | 57 | 58 | -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/legacy_1.2.6/jquery.proxy.fix.js: -------------------------------------------------------------------------------- 1 | /* 2 | * This is a fix to add the proxy function to jquery 3 | * can be used for when using older jquery library. 4 | * 5 | * Francois Gelinas 6 | * August 9, 2011 7 | * 8 | * Licensed using the jQuery license : MIT and GPL 9 | * http://jquery.org/license/ 10 | */ 11 | 12 | (function( $, undefined ) { 13 | // Bind a function to a context, optionally partially applying any 14 | // arguments. 15 | if ( !$.proxy) { 16 | 17 | $.proxy = function( fn, context ) { 18 | if ( typeof context === "string" ) { 19 | var tmp = fn[ context ]; 20 | context = fn; 21 | fn = tmp; 22 | } 23 | var slice = Array.prototype.slice; 24 | 25 | // Quick check to determine if target is callable, in the spec 26 | // this throws a TypeError, but we will just return undefined. 27 | if ( !jQuery.isFunction( fn ) ) { 28 | return undefined; 29 | } 30 | 31 | // Simulated bind 32 | var args = slice.call( arguments, 2 ), 33 | proxy = function() { 34 | return fn.apply( context, args.concat( slice.call( arguments ) ) ); 35 | }; 36 | 37 | // Set the guid of unique handler to the same of original handler, so it can be removed 38 | proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++; 39 | 40 | return proxy; 41 | } 42 | 43 | } 44 | }(jQuery)); -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/tests/dialog.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 21 | 22 | 23 | 24 | 25 |

Testing the timepicker within a jQuery Dialog

26 | 27 |
28 | 29 |

30 | The timepicker : 31 |
32 | 33 |

34 | 35 | 36 |
37 | 38 | 39 | -------------------------------------------------------------------------------- /js/vendor/jquery-timepicker/timepicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/js/vendor/jquery-timepicker/timepicker.png -------------------------------------------------------------------------------- /js/vendor/jstzdetect/.bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jstzdetect", 3 | "version": "1.0.6", 4 | "main": "jstz.min.js", 5 | "ignore": [ 6 | "**/.*", 7 | "node_modules", 8 | "components", 9 | "bower_components", 10 | "test", 11 | "tests" 12 | ], 13 | "homepage": "https://github.com/HenningM/jstimezonedetect", 14 | "_release": "1.0.6", 15 | "_resolution": { 16 | "type": "version", 17 | "tag": "v1.0.6", 18 | "commit": "bd595ed253292934991a414979007f3d51a1547d" 19 | }, 20 | "_source": "git://github.com/HenningM/jstimezonedetect.git", 21 | "_target": "*", 22 | "_originalSource": "jstzdetect" 23 | } -------------------------------------------------------------------------------- /js/vendor/jstzdetect/Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt) { 2 | 3 | grunt.initConfig({ 4 | pkg: grunt.file.readJSON('package.json'), 5 | uglify: { 6 | options: { 7 | banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %> */\n' 8 | }, 9 | dist: { 10 | files: { 11 | 'jstz.min.js': ['jstz.js'] 12 | } 13 | } 14 | }, 15 | jshint: { 16 | files: ['Gruntfile.js', 'src/*.js'], 17 | }, 18 | }); 19 | 20 | grunt.loadNpmTasks('grunt-contrib-uglify'); 21 | grunt.loadNpmTasks('grunt-contrib-jshint'); 22 | 23 | grunt.registerTask('default', ['jshint', 'uglify']); 24 | 25 | }; 26 | -------------------------------------------------------------------------------- /js/vendor/jstzdetect/LICENCE.txt: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2012 Jon Nylander, project maintained at 4 | https://bitbucket.org/pellepim/jstimezonedetect 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights to 9 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 10 | of the Software, and to permit persons to whom the Software is furnished to 11 | do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. -------------------------------------------------------------------------------- /js/vendor/jstzdetect/README.md: -------------------------------------------------------------------------------- 1 | ## Introduction 2 | 3 | This script gives you the zone info key representing your device's time zone setting. 4 | 5 | The return value is an [IANA zone info key][1] (aka the Olson time zone database). 6 | 7 | The IANA timezone database is pretty much standard for most platforms (UNIX and Mac support it natively, and every programming language in the world either has native support or well maintained libraries that support it). 8 | 9 | ## Example Use 10 | 11 | Since version 1.0.4 the [library is hosted on cdnjs.com][10]. I strongly recommend including it from there. 12 | 13 | Invoke the script by calling 14 | 15 | :::javascript 16 | var tz = jstz.determine(); // Determines the time zone of the browser client 17 | tz.name(); // Returns the name of the time zone eg "Europe/Berlin" 18 | 19 | ## Use Case 20 | 21 | The script is useful if you do not want to disturb your users with questions about what time zone they are in. You can rely on this script to give you a key that is usable for server side datetime normalisations across time zones. 22 | 23 | ## Limitations 24 | 25 | This script does not do geo-location, nor does it care very much about historical time zones. 26 | 27 | So if you are unhappy with the time zone "Europe/Berlin" when the user is in fact in "Europe/Stockholm" - this script is not for you. (They are both identical in modern time). 28 | 29 | Also, if it is important to you to know that in Europe/Simferopool (Ukraine) the UTC offset before 1924 was +2.67, sorry, this script will not help you. 30 | 31 | Time zones are a screwed up thing, generally speaking, and the scope of this script is to solve problems concerning modern time zones, in this case from 2010 and forward. 32 | 33 | ## Demo 34 | 35 | There is an updated demo running on: [http://pellepim.bitbucket.org/jstz/][2]. 36 | 37 | ## Contribute? 38 | 39 | If you want to contribute to the project (perhaps fix a bug, or reflect a change in time zone rules), please simply issue a Pull Request. Don't worry about [Grunt][4] builds etc, all you need to modify is the jstz.js file and I'll take care of the testing/minifying etc. 40 | 41 | ## Credits 42 | 43 | Thanks to 44 | 45 | - [Josh Fraser][5] for the original idea 46 | - [Brian Donovan][6] for making jstz CommonJS compliant 47 | - [Ilya Sedlovsky][7] for help with namespacing 48 | - [Jordan Magnuson][9] for adding to cdnjs, documentation tags, and for reporting important issues 49 | 50 | Other contributors: 51 | [Gilmore Davidson][8] 52 | 53 | [1]: http://www.iana.org/time-zones 54 | [2]: http://pellepim.bitbucket.org/jstz/ 55 | [3]: https://bitbucket.org/pellepim/jstimezonedetect/src 56 | [4]: https://github.com/gruntjs/grunt 57 | [5]: http://www.onlineaspect.com/about/ 58 | [6]: https://bitbucket.org/eventualbuddha 59 | [7]: https://bitbucket.org/purebill 60 | [8]: https://bitbucket.org/gdavidson 61 | [9]: https://github.com/JordanMagnuson 62 | [10]: http://cdnjs.com 63 | -------------------------------------------------------------------------------- /js/vendor/jstzdetect/bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jstzdetect", 3 | "version": "1.0.6", 4 | "main": "jstz.min.js", 5 | "ignore": [ 6 | "**/.*", 7 | "node_modules", 8 | "components", 9 | "bower_components", 10 | "test", 11 | "tests" 12 | ] 13 | } 14 | -------------------------------------------------------------------------------- /js/vendor/jstzdetect/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jstzdetect", 3 | "filename": "jstz.min.js", 4 | "version": "1.0.6", 5 | "description": "This script gives you the zone info key representing your device's time zone setting. The return value is an IANA zone info key (aka the Olson time zone database).", 6 | "homepage": "http://pellepim.bitbucket.org/jstz/", 7 | "keywords": [ 8 | "time", 9 | "timezone", 10 | "tz", 11 | "date" 12 | ], 13 | "maintainers": [ 14 | { 15 | "name": "Jon Nylander", 16 | "web": "http://www.bagonca.com/blog/" 17 | } 18 | ], 19 | "repository": { 20 | "type": "hg", 21 | "url": "https://bitbucket.org/pellepim/jstimezonedetect" 22 | }, 23 | "licenses": [ 24 | { 25 | "type": "MIT", 26 | "url": "https://bitbucket.org/pellepim/jstimezonedetect/src/default/LICENCE.txt" 27 | } 28 | ], 29 | "devDependencies": { 30 | "grunt": "~0.4.2", 31 | "grunt-contrib-uglify": "~0.3.2", 32 | "grunt-contrib-jshint": "~0.8.0" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /l10n/.tx/config: -------------------------------------------------------------------------------- 1 | [main] 2 | host = https://www.transifex.com 3 | lang_map = ja_JP: ja 4 | 5 | [o:owncloud-org:p:owncloud:r:tasks] 6 | file_filter = /tasks.po 7 | source_file = templates/tasks.pot 8 | source_lang = en 9 | type = PO 10 | -------------------------------------------------------------------------------- /screenshots/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/owncloud/tasks/7e5d7e3135efff0963a4cbd2a1efcb1684760593/screenshots/screenshot.png -------------------------------------------------------------------------------- /service/settingsservice.php: -------------------------------------------------------------------------------- 1 | 7 | * 8 | * This library is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or any later version. 12 | * 13 | * This library is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 | * GNU AFFERO GENERAL PUBLIC LICENSE for more details. 17 | * 18 | * You should have received a copy of the GNU Affero General Public 19 | * License along with this library. If not, see . 20 | * 21 | */ 22 | 23 | namespace OCA\Tasks\Service; 24 | 25 | use OCP\IConfig; 26 | 27 | class SettingsService { 28 | 29 | private $userId; 30 | private $settings; 31 | private $appName; 32 | 33 | public function __construct($userId, IConfig $settings, $appName) { 34 | $this->userId = $userId; 35 | $this->settings = $settings; 36 | $this->appName = $appName; 37 | } 38 | 39 | /** 40 | * get the current settings 41 | * 42 | * @return array 43 | */ 44 | public function get() { 45 | $settings = array( 46 | array( 47 | 'id' => 'various', 48 | 'showHidden' => (int)$this->settings->getUserValue($this->userId, $this->appName,'various_showHidden'), 49 | 'startOfWeek' => (int)$this->settings->getUserValue($this->userId, $this->appName,'various_startOfWeek'), 50 | 'sortOrder' => (string)$this->settings->getUserValue($this->userId, $this->appName,'various_sortOrder'), 51 | 'sortDirection' => (bool)$this->settings->getUserValue($this->userId, $this->appName,'various_sortDirection'), 52 | 'userID' => $this->userId 53 | ) 54 | ); 55 | return $settings; 56 | } 57 | 58 | /** 59 | * set setting of type to new value 60 | * 61 | * @param $setting 62 | * @param $type 63 | * @param $value 64 | * @return bool 65 | */ 66 | public function set($setting, $type, $value) { 67 | $this->settings->setUserValue($this->userId, $this->appName, $type.'_'.$setting, $value); 68 | return true; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /templates/colorpicker.html: -------------------------------------------------------------------------------- 1 |
    2 |
  • 6 |
  • 9 |
10 | -------------------------------------------------------------------------------- /templates/confirmation.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | t('Delete')); ?> 4 | 5 | 6 | 7 | 8 | 9 | 33   10 | 11 | -------------------------------------------------------------------------------- /templates/part.collectionall.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 |

5 | {{ calendar.displayname }} 6 |

7 |
    14 |
  1. 24 | inc('part.taskbody')); ?> 25 |
  2. 26 |
27 |
28 | t('Load remaining completed tasks.')); ?> 29 |
30 |
31 |
32 | -------------------------------------------------------------------------------- /templates/part.collectionweek.php: -------------------------------------------------------------------------------- 1 |
2 |
3 |

4 | {{ day | day }} 5 |

6 |
    13 |
  1. 23 | inc('part.taskbody')); ?> 24 |
  2. 25 |
26 |
27 |
28 | -------------------------------------------------------------------------------- /templates/part.tasklist.php: -------------------------------------------------------------------------------- 1 | 2 |
3 |
5 |
    12 |
  1. 21 | inc('part.taskbody')); ?> 22 |
  2. 23 |
24 |

25 | {{ getCountString(route.calendarID,'completed') }} 26 |

27 |
    34 |
  1. 43 | inc('part.taskbody')); ?> 44 |
  2. 45 |
46 |
47 | t('Load remaining completed tasks.')); ?> 48 |
49 |
50 |
51 | --------------------------------------------------------------------------------